《教师排课系统课程设计报告(C++)(共27页).doc》由会员分享,可在线阅读,更多相关《教师排课系统课程设计报告(C++)(共27页).doc(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上面向对象技术与C+课程设计任务书课 程面向对象技术与C+ 班级xxxx指导教师xxx题 目教师排课系统完成时间xxxxx至xxxxx主要内容1问题描述每位教师都有教学工作量,教师对他所希望讲授的课程表达为一个期望值,1,2,n,其中1是最高的期望值。课程也有优先级,1,2,n,用来决定将课程分给教师的顺序,其中1是最高的优先级。设计一个程序针对某些课程给某些教师进行排课。2基本要求程序运行时,用户输入教师信息(姓名、教师号、工作量)、课程信息(课程名、课程号、周学时、总学时、优先级),教师对所希望讲授课程的期望值以及教学工作量等相关信息,所有信息应保存在文件中,程序根
2、据课程的优先级以及教师对课程的期望值进行排课。为了公平起见,程序随机分配课程,如果10门课程都有优先级1,程序以随机的顺序将这些课程分给教师,如果10位教师对某门课程的期望值为1,程序应从10位教师中随机选择一个。最后输出排课情况,即某位老师上某门课程,以及某位老师的工作量。3测试数据程序应能实现对不少于20门课和10个教师的排课,并且使每个教师的满意度达到最大,不存在工作量不满的教师以及未分配的课等情况。设计报告要求1封面:(格式附后)2课程设计任务书3课程设计报告: 系统总体方案 设计思路和主要步骤 各功能模块和流程图 设计代码 心得体会和参考资料说明:学生完成课程设计后,提交课程设计报告
3、及软件,要求文字通畅、字迹工整(也可用以打印),文字不少于5000 字,并装订成册。版面要求1.题目用黑体三号,段后距18磅(或1行),居中对齐;2.标题用黑体四号,段前、段后距6磅(或0.3行);3.正文用小四号宋体,行距为1.25倍行距;4.标题按“一”、“”、“1”、“”顺序编号。上机时间安排星期周次一二三四五六日第17周1-41-41-41-41-4指导时间地点上机时间,E520一系统总体方案:某学校每位教师都有教学工作量,教师对他所希望讲授的课程表达为一个期望值,1,2,n,其中1是最高的期望值。课程也有优先级,1,2,n,用来决定将课程分给教师的顺序,其中1是最高的优先级。设计一个
4、程序针对某些课程给某些教师进行排课。要求:(一)程序运行时,用户输入教师信息(姓名、教师号、工作量)、课程信息(课程名、课程号、周学时、总学时、优先级),教师对所希望讲授课程的期望值以及教学工作量等相关信息,所有信息应保存在文件中。(二)程序根据课程的优先级以及教师对课程的期望值进行排课。最后输出排课情况,即某位老师上某门课程,以及某位老师的工作量。(三)可以实现对文件的修改。(四)可以在各个界面中实现退出以及进入的循环。(五)可以退出本系统。(六)程序应能实现对不少于20门课和10个教师的排课,并且使每个教师的满意度达到最大,不存在工作量不满的教师以及未分配的课等情况。方法:为了公平起见,程
5、序随机分配课程,如果10门课程都有优先级1,程序以随机的顺序将这些课程分给教师,如果10位教师对某门课程的期望值为1,程序应从10位教师中随机选择一个。2.设计思路和主要步骤:我们使用面向对象程序设计方法的思路进行分析,得出了整个系统应该涉及三个类的信息和操作,分别是教师类,课程类,排课类。各类信息以文件方式的储存以及实现各种功能和界面的实现是在main函数中体现。(一)教师类 teacher:包括私有数据成员 姓名 name,编号 id ,工作量work_load ,已有工作量 total(方便判断是否排满课)。成员函数包括设置和得到私有成员值的成员函数与输出教师信息的成员函数。(2)课程类
6、 course:私有成员有 课程名 course_name,课程号 course_id,周课时 week_hour,总课时 total_hour,优先度 N。(3)由于考虑到这应该是一个完整的排系统,加上我们希望这个系统的界面能够做到清晰、明了,我们经讨论后决定采用一个总操作界面,一个分操作界面。总操作界面应该包括 (分别对应 1.输入教师信息 2.输入课程信息 3输入教师对课程期望度 4.排课 5.输出排课结果 6.显示操作菜单 7.输出教师文件信息 8.输出课程文件信息 9.输出教师期望度文件信息 10.修改文件信息 0.退出)修改文件信息界面中又因该包括 1.修改教师文件 2.修改课程文
7、件 3.修改教师期望度信息 0.退出3.各功能模块与流程图:说明:以下是对应上面系统功能模块实图的系统流程图,因为制图的不便,故只将成功完成一次操作的流程给出,而“各个流程中中途如果输入了菜单中没有的项以及数据保存文件中没有的数据而被强制退出”的流程因为过于复杂(每步都要进行判断)而没有给出,实际情况读者朋友一试便知。在此我们对此表示深深的歉意,我们以后一定会努力完善我们各方面的工作的。开始输入教师基本数据输入课程基本数据输入教师期望度排课输出排课结果帮助输出教师信息输出课程信息输出教师期望度文件修改退出修改教师信息修改课程信息修改教师期望度信息结束各功能模块:命令对应函数功能描述1input
8、_teacher输入数据并写入文件2input_course输入数据并写入文件3input_num输入数据并写入文件4arranging排课5print输出排课结果6print_help帮助7print_teacher输出文件信息8print_course输出文件信息9print_num输出文件信息10change修改文件信息(五)程序代码:Teacher.h:#include#includeclass teacherprivate:char name11;int id;int work_load;int total;public:teacher();void set_teacher(char
9、 *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;wo
10、rk_load=w;void teacher:print()cout姓名:nameendl;cout编号:idendl;cout工作量:work_loadendl;Course.h:#includeclass courseprivate: char course_name15; int course_id; int week_hour; int total_hour; int N;public: course(void);void set_course(char *pname,int i,int w,int t,int n);char *get_course_name()return cour
11、se_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(
12、course_name,pname);course_id=i;week_hour=w;total_hour=t;N=n;void course:print()cout课程名:course_nameendl;cout编号:course_idendl;cout周学时:week_hourendl;cout总学时:total_hourendl;cout优先级:Nendl;Arrange.h:class arrangeprivate:int x;int y;public:arrange(void)x=0;y=0;void set_x(int a)x=a;void set_y(int b)y=b;int
13、get_x()return x;int get_y()return y;排课.cpp:#include#include #include#include#include#includeteacher.h#includecourse.h#includearrange.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);
14、/教师对课程满意度输入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,arran
15、ge *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=教师排课系统=endl; coutn; coutm; int* num=new int*n; /为每一行分配空间 for(i=0; in; +i) numi=new i
16、ntm; teacher *t; course *c; arrange *a; t=new teachern; c=new coursem; a=new arrangem; if(t=NULL|c=NULL|a=NULL) cout内存分配失败endl; 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
17、;cout 0. 退出n;coutn 输入你的选择:; int ch; do /coutnn 请选择:n;/cout 1. 输入教师基本数据n;/cout 2. 输入课程基本数据n;/cout 3. 输入教师对课程满意度n;/cout 4. 排课n;/cout 5. 输出排课结果n;/cout 6. 帮助n;/cout 0. 退出n;/coutch;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
18、: 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; in; +i) delete numi; /删除行指针数组
19、 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姓名setw(20)编号setw(20)工作量endl;int i,j,work,id;char name11,nn11;coutn 请输入教师基本数据:endl;while(1) int total=0;for(i=0;in;i+) cout第i+1个教师:n; cout id) break;els
20、e cout编号应为数字,请重新输入:endl;cin.clear();cin.ignore();coutname;for(j=0;j11;j+) if ( (!=namej&namej=)|(=namej&namej=)|=namej&namej= )nnj=0; else nnj=1;if(nn0*nn1*nn2*nn3*nn4*nn5*nn6*nn7*nn8*nn9*nn10=1) break;else cout姓名应为字母,请重新输入:endl; cin.clear(); cin.ignore();cout work) break;else cout工作量应为数字,请重新输入:m) c
21、out总工作量大于课程数,请重新输入:endl;break;ti.set_teacher(name,id,work);teachersnamesetw(20)idsetw(20)workm) continue;teachers.close();void input_course(course *c,int m) /课程基本信息输入fstream courses(d:courses.txt,ios:out);courses课程名setw(10)课程号setw(10)周学时setw(10)总学时setw(10)优先级endl;int week_hour,total_hour,d1,id,i,j;c
22、har name11;char nn11;for(i=0;im;i+) cout第i+1门课:n; cout id) break;else cout课程号应为数字,请重新输入:endl;cin.clear();cin.ignore();coutname;for(j=0;j11;j+) if ( (!=namej&namej=)|(=namej&namej=)|=namej&namej= )nnj=0; else nnj=1;if(nn0*nn1*nn2*nn3*nn4*nn5*nn6*nn7*nn8*nn9*nn10=1) break;else cout课程名应为字母,请重新输入:endl;
23、cin.clear(); cin.ignore(); cout week_hour ) break;else cout周学时应为数字,请重新输入:endl;cin.clear();cin.ignore();cout total_hour ) break;else cout总学时应为数字,请重新输入:endl;cin.clear();cin.ignore(); cout d1) break;else cout优先级应为数字,请重新输入:endl;cin.clear();cin.ignore(); ci.set_course(name,id,week_hour,total_hour,d1);cou
24、rsesnamesetw(10)idsetw(10)week_hoursetw(10)total_hoursetw(10)d1endl; courses.close();void input_num(int *num,int n,int m) /教师对课程满意度输入fstream nums(d:hope.txt,ios:out);numssetw(4)满意度setw(6);int nu,i,j,k;for(k=0;km;k+)nums第k+1门课程setw(5);numsendl;for(i=0;in;i+)nums第i+1名老师setw(3);for(j=0;jm;j+)cout第i+1位老
25、师对第j+1门课程的满意度nu;while(1) if (cin nu) break; else cout满意度应为数字,请重新输入:endl; cin.clear(); cin.ignore(); numij=nu;numsnusetw(13);numsendl;nums.close();void arranging(int *num,teacher *t,course *c,arrange *a,int n,int m) /排课int h,s,i,j,b,k=1,min,min1,q=0;min=c0.get_N();srand(unsigned)time(NULL);for(s=0;sm
26、;s+)if(cs.get_N()min)min=cs.get_N();while(h)for(i=0;im;i+) if(ci.get_N()=min) /判断课程优先级 min1=num0i;for(j=0;jn;j+)if ( numjimin1&tj.get_total()0)b=rand()%n;if(bn)continue;else if(tb.get_total()tb.get_work_load()continue;else if(numbi!=min1) /判断教师优先级continue;elseaq.set_x(b);aq.set_y(i);q+;int w=tb.get_
27、total()+1;tb.set_total(w);/k=0;cout第q次排课endl;break; /if(i=m-1) min+;min+;if(qm) h=1;else h=0;void print(teacher *t,course *c,arrange *a,int m) /输出排课结果int i,a1,b1;for(i=0;im;i+) a1=ai.get_x();b1=ai.get_y();cout第a1+1位老师上第b1+1门课endl; ta1.print();cb1.print();void print_help() /帮助函数 cout 1. 输入教师基本数据n;cou
28、t 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;void print_teacher() /输出教师信息 ifstream fin(d:teachers.txt,ios:nocreate);if(!fin)coutFile open error!n;return;char c80;while(!fin.eof() /判断文件是否读结束
29、fin.read(c,80); cout.write(c,fin.gcount(); fin.close();void print_course() /输出课程信息 ifstream fin(d:courses.txt,ios:nocreate);if(!fin)coutFile open error!n;return;char c80;while(!fin.eof() /判断文件是否读结束 fin.read(c,80); cout.write(c,fin.gcount(); fin.close();void print_num() /输出教师对课程的满意度 ifstream fin(d:ho
30、pe.txt,ios:nocreate);if(!fin)coutFile open error!n;return;char c80;while(!fin.eof() /判断文件是否读结束 fin.read(c,80); cout.write(c,fin.gcount(); fin.close();void change(int *num,teacher *t,course *c,arrange *a,int n,int m) /修改文件信息 int ch; do coutnn 请选择:n;cout 1. 修改教师基本数据n;cout 2. 修改课程基本数据n;cout 3. 修改教师对课程满
31、意度n;cout 0. 退出n;coutch;switch(ch) case 1 : change_teacher(t,n);break; case 2 : change_course(c,m);break; case 3 : change_num(t,c,num,n,m);break; case 0 : break; while(ch);void change_teacher(teacher *t,int n) /修改教师数据int i,aa,bb,k,j,ii;char na11;char nn11;coutii;for(i=0;in;i+)if(ti.get_id()=ii)cout此教
32、师原信息:endl;ti.print();k=i; cout请输入此教师新信息:endl; cout aa) break;else cout编号应为数字,请重新输入:endl;cin.clear();cin.ignore();coutna;for(j=0;j11;j+) if ( (!=naj&naj=)|(=naj&naj=)|=naj&naj= )nnj=0; else nnj=1;if(nn0*nn1*nn2*nn3*nn4*nn5*nn6*nn7*nn8*nn9*nn10=1) break;else cout姓名应为字母,请重新输入:endl; cin.clear(); cin.ign
33、ore();cout bb) break;else cout工作量应为数字,请重新输入:endl;cin.clear();cin.ignore();tk.set_teacher(na,aa,bb); fstream teachers(d:teachers.txt,ios:out);teachers姓名setw(20)编号setw(20)工作量endl; for(j=0;jn;j+) if(j=k) teachersnasetw(20)aasetw(20)bbendl; else teacherstj.get_name()setw(20)tj.get_id()setw(20)tj.get_wor
34、k_load()endl; teachers.close();void change_course(course *c,int m) /修改课程信息 int i,aa,bb,cc,dd,k,j,ii;char na11;char nn11;coutii;for(i=0;im;i+)if(ci.get_course_id()=ii)cout此课程原信息:endl;ci.print();k=i; cout请输入此课程新信息:endl;cout aa) break;else cout课程号应为数字,请重新输入:endl;cin.clear();cin.ignore();coutna;for(j=0;j11;j+) if ( (!=naj&naj=)|(