课程设计用c++设计一个排课程序.docx
《课程设计用c++设计一个排课程序.docx》由会员分享,可在线阅读,更多相关《课程设计用c++设计一个排课程序.docx(31页珍藏版)》请在冰豆网上搜索。
![课程设计用c++设计一个排课程序.docx](https://file1.bdocx.com/fileroot1/2023-2/6/2f0d39a9-5412-4a47-8d75-0f353424f91d/2f0d39a9-5412-4a47-8d75-0f353424f91d1.gif)
课程设计用c++设计一个排课程序
课程设计论文
题目:
用c++设计一个排课程序
学院:
专业名称:
电子科学与技术
班级学号:
学生姓名:
指导教师:
2013年6月
摘要:
随着社会经济的迅速发展和科学技术的全面进步,计算机事业的飞速发展,以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。
随着经济文化水平的显著提高,人们对生活质量及工作环境的要求也越来越高。
如何通过计算机为我们完成更多的事情,进而达到办公自动化和优化日常工作的目的,也就成了一个大众化的课题。
作为计算机应用的一部分,使用计算机对信息进行管理,具有与手工管理所无法比拟的优点.例如:
检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
关键词:
计算机c++程序语言排课系统
一、课题背景
1.1实际应用的需要
近几年来,随着各高校办公自动化工作的推进,教务管理自动化也被摆上了日程。
在教务工作中占有很大比重的一项就是每学期的课程排定工作。
由于教工、教室和设备的相对紧张,如何进行合理地安排和分配,从而充分利用教学资源是我们不得不面对的问题。
而人工进行排课不仅任务重,效率低,而且易出错,难于维护,想要排出一张各方面都满意的课表非常困难。
并且随着高校规模的扩大手工排课的难度和工作量呈几何级数增长。
学校教务的管理作为高校教育信息化工作中的一项重要工作,如何构建一个具有开放性、实用性和灵活性的平台,是一个值得探讨的课题。
其中,作为学校教务重点环节之一的排课系统也尤为重要。
1.1选题的意义
排课系统正是为了减轻教务人员的工作量,实现教务工作自动化,解决排课这一老大难问题的教务办公软件。
尤其针对高校的排课一直都没有很好的解决方法,但是此问题又是每个学校在每个学期都会碰到的必要行政作业。
本文在相关理论的指导下,在分析以往一些排课软件的基础上,提出一个高校通用排课系统的设计方法,并对一些具体的问题给出相应解决方案。
但是,由于技术、经验的有限和数据量过大,目前我们很难做出一个满足所有需要的排课系统。
因为它不仅要考虑到教室冲突问题和教师冲突问题,还要考虑到分段课、单双周课时的资源利用问题;另外由于高校的教学特点,还要处理合班课、分班课、体育课与选修课等特殊课程。
针对这些问题,在此专门对数据库设计作了一些探索,并于架构的选择和模块的划分上经过精心调整,在菜单的设计上也体现了人性化的操作。
该设计贴近用户需求,功能完整,架构合理,并用大量的框图模型体现了系统的规划。
该系统实现上机时间的安排,课程的安排,教室的安排,以及它们之间的不冲突和资源的高效利用;这更切合学院教学需要,降低了排课管理工作的工作量和节省了时间,同时课程安排完成后,学院可迅速获得课表情况信息,为教学工作带来方便。
本系统界面友好,操作简单,使用方便。
二、课题要求
2.1设计功能要求
程序运行时,用户输入教师信息(姓名、教师号、工作量)、
课程信息(课程名、课程号、周学时、总学时、优先级)、教师对所希望讲授课程的期望值以及教学工作量等相关信息,所有信息应保存在文件中,程序根据课程的优先级以及教师对课程的期望值进行排课。
为了公平起见,程序随机分配课程,如果10门课程都有优先级,程序以随机的顺序将这些课程分给教师,如果10位教师对某门课程的期望值为1,程序应从10位教师中随机选择一个。
最后输出排课情况,即某位老师上某门课程,以及某位老师的工作量。
测试数据:
程序应能实现对不少于20门课和10个教师的排课,并且使每个教师的满意度达到最大,不存在工作量不满的教师以及未分配的课等情况。
2.2报告要求
1.封面
2.课程设计报告:
3.⑴ 系统总体方案
⑵ 设计思路和主要步骤
⑶ 各功能模块和流程图
⑷ 设计代码
⑸ 心得体会和参考资料
三、系统总体方案:
3.1方案描述
某学校每位教师都有教学工作量,教师对他所希望讲授的课程表达为一个期望值,1,2„,n,其中1是最高的期望值。
课程也有优先级,1,2„,n,用来决定将课程分给教师的顺序,其中1是
高的优先级。
设计一个程序针对某些课程给某些教师进行排课。
要求:
(一)程序运行时,用户输入教师信息(姓名、教师号、工作量)、课程信息(课程名、课程号、周学时、总学时、优先级),教师对所希望讲授课程的期望值以及教学工作量等相关信息,所有信息应保存在文件中。
(二)程序根据课程的优先级以及教师对课程的期望值进行排课。
最后输出排课情况,即某位老师上某门课程,以及某位老师的工作量。
(三)可以实现对文件的修改。
(四)可以在各个界面中实现退出以及进入的循环。
(五)可以退出本系统。
(六)程序应能实现对不少于20门课和10个教师的排课,并且使每个教师的满意度达到最大,不存在工作量不满的教师以及未分配的课等情况。
3.2系统设计框图:
3.3各功能模块:
命令
对应函数
功能描述
1
input_teacher
输入数据并写入文件
2
input_course
输入数据并写入文件
3
input_num
输入数据并写入文件
4
arranging
排课
5
print
输出排课结果
6
print_help
帮助
7
print_teacher
输出文件信息
8
print_course
输出文件信息
9
print_num
输出文件信息
10
change
修改文件信息
四、源程序代码
Teacher.h:
#include
#include
class teacher
{ private:
char name[11];
int id;
int work_load;
int total;
public:
teacher();
void set_teacher(char *pn,int i,int w);
void set_total(int t)
{ total=t; }
char *get_name()
{return name;}
int get_id()
{return id;}
int get_work_load()
{return work_load;}
int get_total()
{return total;}
void print();
};
teacher:
:
teacher()
{ strcpy(name,"无");
id=0;
work_load=0;
total=0; }
void teacher:
:
set_teacher(char *pn,int i,int w)
{ strcpy(name,pn);
id=i;
work_load=w; }
void teacher:
:
print()
{ cout<<"姓名:
"<cout<<"编号:
"< cout<<"工作量:
"<}
Course.h:
#include
class course
{ private:
char course_name[15];
int course_id;
int week_hour;
int total_hour;
int N;
public:
course(void);
void set_course(char *pname,inti,int w,int t,intn)
char *get_course_name()
{return course_name;}
int get_course_id()
{return course_id;}
int get_week_hour()
{return week_hour;}
int get_total_hour()
{return total_hour;}
int get_N()
{return N;}
void print();
};
course:
:
course(void)
{ strcpy(course_name,"无");
course_id=0;
week_hour=0;
total_hour=0;
N=0; }
void course:
:
set_course(char *pname,int i,int w,int t,int n)
{ strcpy(course_name,pname);
course_id=i;
week_hour=w;
total_hour=t;
N=n; }
void course:
:
print()
{ cout<<"课程名:
"<cout<<"编号:
"<cout<<"周学时:
"<cout<<"总学时:
"<cout<<"优先级:
"<void course:
:
print()
{ cout<<"课程名:
"<cout<<"编号:
"<cout<<"周学时:
"<cout<<"总学时:
"<cout<<"优先级:
"<}
{ x=0;
y=0; }
void set_x(int a)
{ x=a; }
void set_y(int b)
{ y=b; }
int get_x()
{return x;}
int get_y()
{return y;}
};
排课.cpp:
#include
#include
#include
#include
#include
#include"teacher.h"
#include"course.h"
#include"arrange.h"
#include
//using namespace std;
void input_teacher(teacher *t,int n,int m);
void input_course(course *c,int m);
void input_num(int **num,int n,int m);
void arranging(int **num,teacher *t,course *c,arrange *a,int n,int m);
void print(teacher *t,course *c,arrange *a,int m); void print_help();
void print_teacher();
void print_course();
void print_num();
void change(int **num,teacher *t,course *c,arrange *a,int n,int m);
void change_teacher(teacher *t,int n);
void change_course(course *c,int m);
void change_num(teacher *t,course *c,int **num,int n,int m);
void main()
{ int i,n,m;
cout<<"==========================教师排课系统==========================="<cout<<"教师人数:
";cin >>n;
cout<<"课程数:
";cin>>m;
int** num=new int*[n];
for(i=0; i{ num[i]=new int[m]; }
teacher *t;
course *c;
arrange *a;
t=new teacher[n];
c=new course[m];
a=new arrange[m];
if(t==NULL||c==NULL||a==NULL)
{ cout<<"内存分配失败"<return
}
cout<<" 1. 输入教师基本数据\n";
cout<<" 2. 输入课程基本数据\n";
cout<<" 3. 输入教师对课程满意度\n";
cout<<" 4. 排课\n";
cout<<" 5. 输出排课结果\n";
cout<<" 6. 帮助\n";
cout<<" 7. 输出教师信息\n";
cout<<" 8. 输出课程信息\n";
cout<<" 9. 输出教师对课程满意度\n";
cout<<" 10.修改文件数据\n";
cout<<" 0. 退出\n";
cout<<"\n 输入你的选择:
";
int ch;
Do
{ //cout<<"\n\n 请选择:
\n";
//cout<<" 1. 输入教师基本数据\n";
//cout<<" 2. 输入课程基本数据\n";
//cout<<" 3. 输入教师对课程满意度\n";
//cout<<" 4. 排课\n";
//cout<<" 5. 输出排课结果\n";
//cout<<" 6. 帮助\n";
//cout<<" 0. 退出\n";
//cout<<"\n 输入你的选择:
";
cin>>ch;
switch(ch)
{ case 1 :
input_teacher(t,n,m);break;
case 2 :
input_course(c,m);break;
case 3 :
input_num(num,n,m);break;
case 4 :
arranging(num,t,c,a,n,m);break;
case 5 :
print(t,c,a,m);break;
case 6 :
print_help();break;
case 7 :
print_teacher();break;
case 8 :
print_course();break;
case 9 :
print_num();break;
case 10:
change(num,t,c,a,n,m);break;
case 0 :
break;
}}
while(ch);
for(i=0; i{ delete[] num[i]; }
delete[] num;
delete []t;
delete []c;
delete []a; }
void input_teacher(teacher *t,int n,int m)
{ fstream teachers("d:
\\teachers.txt",ios:
:
out);
teachers<<"姓名"<int i,j,work,id;
char name[11],nn[11];
cout<<"\n 请输入教师基本数据:
"< while
(1)
{ int total=0;
for(i=0;i{ cout<<"第"<
\n";
cout<<"编号:
";
while
(1)
{ if (cin >> id) break;
else
{ cout<<"编号应为数字,请重新输入:
"<cin.clear();
cin.ignore();}}
cout<<"姓名:
";
while
(1)
{ cin>>name;
for(j=0;j<11;j++)
{ if
( ('!
'<=name[j]&&name[j]<='@')||('['<=name[j]&&name[j]<='`')||'{'<=name[j]&&name[j]<='~' )
nn[j]=0;
else
nn[j]=1; }
if(nn[0]*nn[1]*nn[2]*nn[3]*nn[4]*nn[5]*nn[6]*nn[7]*nn[8]*nn[9]*nn[10]==1) break;
else
{cout<<"姓名应为字母,请重新输入”<cin.clear();
cin.ignore();
} }
cout<<"工作量:
";
while
(1)
{ if (cin >> work) break;
else
{ cout<<"工作量应为数字,请重新输入:
"<cin.clear();
cin.ignore();
} }
total=total+work;
if(total>m) {cout<<"总工作量大于课程数,请重新输入:
"<t[i].set_teacher(name,id,work);
teachers< if(total==m) break;
if(total>m) continue;
}
teachers.close(); }
void input_course(course *c,int m)
{ fstream courses("d:
\\courses.txt",ios:
:
out);
courses<<"课程名"<int week_hour,total_hour,d1,id,i,j;
char name[11];
char nn[11];
for(i=0;i { cout<<"第"<
\n";
cout<<"课程号:
";
while
(1)
{ if (cin >> id) break;
else
{ cout<<"课程号应为数字,请重新输入:
"<cin.clear();
cin.ignore();
} }
cout<<"课程名:
";
while
(1)
{ cin>>name;
for(j=0;j<11;j++)
{ if
( ('!
'<=name[j]&&name[j]<='@')||('['<=name[j]&&name[j]<='`')||'{'<=name[j]&&name[j]<='~' )
nn[j]=0;
else
nn[j]=1;
}
if(nn[0]*nn[1]*nn[2]*nn[3]*nn[4]*nn[5]*nn[6]*nn[7]*nn[8]*nn[9]*nn[10]==1) break;
else
{ cout<<"课程名应为字母,请重新输入:
"<cin.clear();
cin.ignore();
} }
cout<<"周学时:
";
while
(1)
{ if (cin >> week_hour ) break;
else
{ cout<<"周学时应为数字,请重新输入:
"<cin.clear();
cin.ignore();
} }
cout<<"总学时:
";
while
(1)
{ if (cin >> week_hour ) break;
else
{ cout<<"周学时应为数字,请重新输入:
"<cin.clear();
cin.ignore();
} }
cout<<"总学时:
";
while
(1)
{if (cin >> total_hour ) break;
else
{ cout<<"总学时应为数字,请重新输入:
"<cin.clear();
cin.ignore();
} }
cout<<"优先级:
";
while
(1)
{ if (cin>>d1) break;
else
{ cout<<"优先级应为数字,请重新输入:
"<cin.clear();
cin.ignore();
} }
c[i].set_course(name,id,week_hour,total_hour,d1);
courses< }
courses.close(); }
void input_num(int **num,int n,int m) //教师对课程满意度输入
{ fstream nums("d:
\\hope.txt",ios:
:
out);
nums<int nu,i,j,k;
for(k=0;k nums<<"第"<}
nums< for(i=0;i { nums<<"第"<
for(j=0;j cout<<"第"<