教师排课系统课程设计报告.docx

上传人:牧羊曲112 文档编号:3555156 上传时间:2023-03-13 格式:DOCX 页数:27 大小:44.94KB
返回 下载 相关 举报
教师排课系统课程设计报告.docx_第1页
第1页 / 共27页
教师排课系统课程设计报告.docx_第2页
第2页 / 共27页
教师排课系统课程设计报告.docx_第3页
第3页 / 共27页
教师排课系统课程设计报告.docx_第4页
第4页 / 共27页
教师排课系统课程设计报告.docx_第5页
第5页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《教师排课系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《教师排课系统课程设计报告.docx(27页珍藏版)》请在三一办公上搜索。

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课程设计报告: 系统总体方案 设计思路和主要步骤 各功能模块和流程图 设计代码 心得体会和参考资料 说明:学生完成课程设计后,提交课程设计报告及软件,要求文字通畅、字迹工整,文字不少于5000

3、 字,并装订成册。 版面要求1.题目用黑体三号,段后距18磅,居中对齐; 2.标题用黑体四号,段前、段后距6磅; 3.正文用小四号宋体,行距为1.25倍行距; 4.标题按“一”、“”、“1”、“”顺序编号。 星期 上机周次 时第17周 间安排 一 1-4 二 1-4 三 1-4 四 1-4 五 1-4 六 日 1 指导时间地点 上机时间,E520 一系统总体方案: 某学校每位教师都有教学工作量,教师对他所希望讲授的课程表达为一个期望值,1,2,n,其中1是最高的期望值。课程也有优先级,1,2,n,用来决定将课程分给教师的顺序,其中1是最高的优先级。设计一个程序针对某些课程给某些教师进行排课。

4、要求: 程序运行时,用户输入教师信息、课程信息,教师对所希望讲授课程的期望值以及教学工作量等相关信息,所有信息应保存在文件中。 程序根据课程的优先级以及教师对课程的期望值进行排课。最后输出排课情况,即某位老师上某门课程,以及某位老师的工作量。 可以实现对文件的修改。 可以在各个界面中实现退出以及进入的循环。 可以退出本系统。 程序应能实现对不少于20门课和10个教师的排课,并且使每个教师的满意度达到最大,不存在工作量不满的教师以及未分配的课等情况。 方法: 为了公平起见,程序随机分配课程,如果10门课程都有优先级1,程序以随机的顺序将这些课程分给教师,如果10位教师对某门课程的期望值为1,程序

5、应从10位教师中随机选择一个。 2 2.设计思路和主要步骤: 我们使用面向对象程序设计方法的思路进行分析,得出了整个系统应该涉及三个类的信息和操作,分别是教师类,课程类,排课类。各类信息以文件方式的储存以及实现各种功能和界面的实现是在main函数中体现。 教师类 teacher:包括私有数据成员 姓名 name,编号 id ,工作量work_load ,已有工作量 total。成员函数包括设置和得到私有成员值的成员函数与输出教师信息的成员函数。 课程类 course:私有成员有 课程名 course_name,课程号 course_id,周课时 week_hour,总课时 total_hour

6、,优先度 N。 由于考虑到这应该是一个完整的排系统,加上我们希望这个系统的界面能够做到清晰、明了,我们经讨论后决定采用一个总操作界面,一个分操作界面。 总操作界面应该包括 修改文件信息界面中又因该包括 1.修改教师文件 2.修改课程文件 3.修改教师期望度信息 0.退出 3 4 3.各功能模块与流程图: 说明:以下是对应上面系统功能模块实图的系统流程图,因为制图的不便,故只将成功完成一次操作的流程给出,而“各个流程中中途如果输入了菜单中没有的项以及数据保存文件中没有的数据而被强制退出”的流程因为过于复杂而没有给出,实际情况读者朋友一试便知。在此我们对此表示深深的歉意,我们以后一定会努力完善我们

7、各方面的工作的。 5 开始 输入教师基本数据 输入课程基本数据 输入教师期望度 排课 输出排课结果 帮助 输出教师信息 输出课程信息 输出教师期望度 文件修改 退出 修改教修改课修改教师信息 程信息 师期望度信息 各功能模块: 命令 1 2 3 4 5 6 7 8 9 10 对应函数 input_teacher input_course input_num arranging print print_help print_teacher print_course print_num change 功能描述 输入数据并写入文件 输入数据并写入文件 输入数据并写入文件 排课 输出排课结果 帮助 输

8、出文件信息 输出文件信息 输出文件信息 修改文件信息 结束 程序代码: 6 Teacher.h: #include #include class teacher private: char name11; 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

9、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姓名:nameendl; 7 cout编号:idendl; cout工作量:work_loadendl; Course.h: #include class cou

10、rse private: 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 course_name; int get_course_id return course_id; int get_week_hour return week_hour; int get_total_hour retur

11、n 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; 8 void course:print cout课程名:cour

12、se_nameendl; cout编号:course_idendl; cout周学时:week_hourendl; cout总学时:total_hourendl; cout优先级:Nendl; Arrange.h: class arrange private: 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 get_x return x; int get_y return y; ; 排课.cpp: #include #include #include

13、#include #include #includeteacher.h #includecourse.h 9 #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); /教师对课程满意度输入 void arranging(int *num,teacher *t,course *c,a

14、rrange *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,

15、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 intm; teacher *t; course *c; arrange *a; t=new teachern; c

16、=new coursem; a=new arrangem; if(t=NULL|c=NULL|a=NULL) cout内存分配失败endl; return ; cout 1. 输入教师基本数据n; cout 2. 输入课程基本数据n; 10 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; coutn 输入你的选择:; int ch; do /cou

17、tnn 请选择: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 : arranging(num,t,c,a,n,m);break;

18、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; 11 /删除行指针数组 delete num; delete t; delete c; delete

19、 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; else cout编号应为数字,请重新输入:endl; cin.c

20、lear; cin.ignore; coutname; for(j=0;j11;j+) if ( (!=namej&namej=)|(=namej&namej=)|=namej&namej= ) nnj=0; else nnj=1; 12 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) cout总工作量大于课程数,请重新输入:endl;br

21、eak; 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; char name11; char nn1

22、1; 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; cin.clear; cin

23、.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); coursesnamesetw(10)ids

24、etw(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位老师对第j+1门课程的

25、满意度nu; 15 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;s+) i

26、f(cs.get_Nmin) 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_total0) b=rand%n; 16 if(bn) continue; else if(tb.get_totaltb.get_work_load) continue; else if(numbi!=min1) /判断教师优先级 continue; else aq.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;

28、cout 2. 输入课程基本数据n; cout 3. 输入教师对课程满意度n; cout 4. 排课n; cout 5. 输出排课结果n; cout 6. 帮助n; 17 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(!fi

29、n.eof) /判断文件是否读结束 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 /输出教师对课程的满意度 ifs

30、tream fin(d:hope.txt,ios:nocreate); if(!fin) coutFile open error!n; 18 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. 修改课程基

31、本数据n; cout 3. 修改教师对课程满意度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

32、;in;i+) if(ti.get_id=ii) cout此教师原信息:endl; ti.print; 19 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姓

33、名应为字母,请重新输入:endl; cin.clear; cin.ignore; cout bb) break; else 20 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

34、setw(20)tj.get_idsetw(20)tj.get_work_loadendl; 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; c

35、in.clear; cin.ignore; 21 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.ignore; cout bb ) break; else cout周学时应为数字,请重新输入:endl; cin.clear; cin.ignore; cout cc ) break; else cout总学时应为数字,请重新输入:endl; cin.clear; 22 cin.ignore;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号