基于C++的教师排课程序课程设计.doc

上传人:土8路 文档编号:10270530 上传时间:2021-05-04 格式:DOC 页数:17 大小:190KB
返回 下载 相关 举报
基于C++的教师排课程序课程设计.doc_第1页
第1页 / 共17页
基于C++的教师排课程序课程设计.doc_第2页
第2页 / 共17页
基于C++的教师排课程序课程设计.doc_第3页
第3页 / 共17页
基于C++的教师排课程序课程设计.doc_第4页
第4页 / 共17页
基于C++的教师排课程序课程设计.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《基于C++的教师排课程序课程设计.doc》由会员分享,可在线阅读,更多相关《基于C++的教师排课程序课程设计.doc(17页珍藏版)》请在三一文库上搜索。

1、程序类课程设计说明书指导教师: 姓 名: 学 号: 年 月 日一需求分析本应用程序是基于C+的教师排课程序该程序可以根据教师对课程的期望,课程优先级对相应课程,教师进行合理分配,既可以使每位教师达到最大满意度,又能很好的安排课程,使课程不出现重排,漏排等情况.根据要求,本程序应该实现课程信息载入,教师信息载入,保存相关信息到文件,排课,打印排课结果等同时,我们还要为使用者即客户提供一个人性化的界面,使系统应用方便快捷更重要的是,我们还要提供相应的错误处理机制二系统功能实现根据需求分析,本程序实现以下功能:. 主菜单 主菜单主要是为客户显示本程序的主要功能及相关操作提示,人性化的主菜单可以让客户

2、很容易的使用程序相关功能本程序主菜单设计简洁,界面简单,使用者可以根据相关提示进行操作,方便快捷. 信息载入信息载入模块主要实现教师信息载入和课程信息载入教师信息主要包括教师姓名,教师号,工作量及对相应课程的期望值课程信息主要包括课程名,课程号,周学时,总学时,优先级此模块是使用者(客户)把相关信息载入数据库进行排课操作的前提,它提供了良好的交互界面,操作简单方便. 信息保存信息保存模块主要实现教师信息和课程信息的保存功能由于教师信息和课程信息载入量大,为以后查询方便最好存储在文件中,同时也算对数据的备份此模块提供路径选择功能,客户可以根据自己的情况选择相应的路径存储信息文件,安全高效. 教师

3、排课教师排课模块主要实现根据课程优先级,教师对课程的期望值大小来安排课程情况的功能此模块考虑到不同课程优先级可能相同及不同教师对某门课程期望值可能相同的情况为让教师达到最大满意度,本模块采用随机分配原则,通过生成伪随机数来安排期望值相同的课程,从而达到公平公正原则同时,本模块实现每门课都得到安排,不出现漏课,重复选取的功能达到教师工作量得到满足且不会操工作量,合理有效. 排课结果打印此模块主要实现排课完成后相关信息的显示功能主要显示教师姓名,工作量,教授课程打印界面简单明了,易于查看. 系统保护系统保护模块主要实现非法操作时对程序的损坏或恶意破坏此模块主要应用于当操作人员(客户)没有事先载入教

4、师信息和课程信息就进行保存,排课操作行为时的保护安全可靠. 退出此模块主要实现操作完毕后的退出功能退出时,此模块会显示一个感谢界面,并完成后台资源释放等功能,很人性化三流程图程序流程图主菜单提示按键选择操作信息载入信息保存教师排课打印结果课程信息教师信息教师信息保存课程信息保存是否继续退出系统0退出YN四数据结构设计.结点设计本程序主要采用结构体存储相关结点信息,教师信息通过tlist结构体实现,其中包括教师姓名,教师号,工作量,相应课程期望值及预留缓存区空间课程信息通过clist结构体实现,其中包括课程名,课程号,周学时,总学时,优先级,被选标记(是否已经分配)等信息tclist结构体存储教

5、师期望值比较高的课程信息,包括课程名及教师对其期望值.结构设计本程序采用结构体存储结点信息,通过链表完成相关操作,如查询,删除等链表添加删除结点灵活高效,符合本程序要求.子类设计本程序设计一个教师类和一个课程类,教师类在其内部主要实现初始化教师链表(教师信息),保存教师信息到文件功能课程类主要实现初始化课程链表(课程信息),保存课程信息到文件功能同时,在教师类中增加一个print友元函数,实现排课结果打印功能在课程类中增加一个convert友元函数,实现由给定字符串查找相应课程结点并返回指向该结点指针的功能五类设计.教师类:数据成员tlist* pt 功能说明pt为指向教师结点的指针,维持着整

6、个教师链表通过它可以动态添加删除教师信息成员函数void initdata();void save();friend void print(teacher&,ptlist);功能说明initdata()初始化教师链表(教师信息),save()保存教师信息到文件print(teacher&,ptlist)排课结果打印.课程类:数据成员clist* pc功能说明pc为指向课程结点的指针,维持着整个课程链表,通过它可以动态添加删除课程信息成员函数void initdata();void save();friend pclist convert(course&,char * s);功能说明initda

7、ta()初始化课程链表(课程信息)save()保存课程信息到文件convert(course&,char * s)通过给定字符串查找指向课程名与该字符串相同的课程结点的指针进而通过该指针操作相应课程结点中的数据六算法设计.难点问题描述:多个教师对某门课程具有相同期望值及多门课程具有相同优先级时的公平分配算法设计解决方案:先将课程链表按优先级由高到低排序,依次从教师链表头结点开始处理,取出该结点所对应课程期望值最高者,扫描其余教师结点,查看是否其他结点对该课程有更高的期望,若有则取出该结点所对应课程较高者,扫描其余教师结点,查看是否其他结点对该课程有更高的期望,若该结点为最高,则把该课程分配给它

8、,并修改该课程被选标记依次重复上述过程直到该教师结点工作量得到满足然后按此过程处理其余教师结点如果出现不同教师某门课程期望值相同,则使用伪随机数生成函数rand()实现随机分配,达到公平原则函数实现void sort(teacher& t,course& c) ptlist q=t.pt;ptlist n=t.pt; ptlist m=n; int sum=0; int num=-1; srand(time(0); for(int i=0;inext; if(m=NULL) break; for(int j=0;jtci.ipri=n-tcj.ipri)&(0=strcmp(m-tci.nam

9、e,n-tcj.name) num=rand()%2; switch(num) case 0:(convert(c,q-tcnum.name)-mc=false; break; case 1:(convert(c,q-tcnum.name)-mc=false; break; default:break; n=n-next; while(q) for(int i=0;itci.name)-mc) sum+=(convert(c,q-tci.name)-all_time;(convert(c,q-tci.name)-mc=false; if(i=0) strcpy(q-cbuf,q-tci.nam

10、e); else strcat(q-cbuf, ); strcat(q-cbuf,q-tci.name); if(sum=q-work_time) break; sum=0; q=q-next; cout课程已排好!endl;七主要代码.主菜单:void dis_menu() bool ttag=false;bool ctag=false;char tag;int choice=0;dosystem(cls);cout欢迎使用教师排课系统,请根据提示完成相关操作endl;cout1:载入教师信息endl;cout2:载入课程信息endl;cout3:存储教师信息endl;cout4:存储课程信

11、息endl;cout5:教师排课endl;cout6:打印排课结果endl;cout0:退出endl;fflush(stdin);cout请输入选择:choice;switch(choice)case 1:system(cls);cout*教师信息载入*endl; tea.initdata();ttag=true;break;case 2:system(cls);cout*课程信息载入*endl;cou.initdata();ctag=true;break;case 3:system(cls);cout*教师信息保存*endl;if(!ttag)cout请先载入教师信息endl;elsetea

12、.save();break; case 4:system(cls);cout*课程信息保存*endl;if(!ctag) cout请先载入课程信息endl;elsecou.save();break;case 5:system(cls);cout*教师排序界面*endl;if(!ttag|!ctag)cout请先载入相关信息endl;elsesort(tea,cou);break;case 6:system(cls);cout*排课信息打印*endl;if(!ttag|!ctag)cout请先载入相关信息endl;elseprint(tea);break;default:system(cls);

13、coutt*THANKS FOR YOUR USE*endl;coutt*感谢使用本系统!*endl;exit(0);cout系统使用中.endl;cout是否继续其他操作? y/Ytag;while(tag=y|tag=Y);教师信息载入void teacher:initdata()char tag;ptlist p=pt;ptlist s;int t=0;cout请输入教师信息:endl;cout姓名t教师号t工作量=1) cout请输入教师信息:endl; cout姓名t教师号t工作量s-names-nums-work_time; cout请输入相应课程名及期望值(从高到低,默认不超过3

14、门):endl; for(int i=0;is-tci.names-tci.ipri; fflush(stdin); s-next=NULL; if(!pt) pt=s; p=pt; else p-next=s; p=p-next; t+; cout是否继续输入信息:tag; system(cls); while(tag=y|tag=Y);.教师信息保存void teacher:save()ptlist p=pt;char path20=C:teacher.txt;char str50=0;cout请选择保存教师信息文件的路径:path;ofstream outfile(path);if(!o

15、utfile)cerr保存失败,请检查所选路径是否正确!name,p-num,p-work_time);outfile.write(char*)str,strlen(str);sprintf(str,对相应课程的期望值:n);outfile.write(char*)str,strlen(str);for(int i=0;itci.name,p-tci.ipri); outfile.write(char*)str,strlen(str);sprintf(str,n); outfile.write(char*)str,strlen(str);p=p-next;outfile.close();cou

16、t保存成功!endl;.课程信息载入void course:initdata()pclist p=pc;pclist s;char tag;int i=0;cout请输入课程信息:endl;cout课程名t课程号t周学时t总学时t优先级=1)cout请输入课程信息:endl; cout课程名t课程号t周学时t总学时t优先级s-names-nums-week_times-all_times-priority;fflush(stdin);s-mc=true;s-next=NULL;i+;if(!pc)pc=s;p=pc; else p-next=s; p=p-next; cout是否继续载入课程信

17、息? y/Ytag; system(cls);while(tag=y|tag=Y);.课程信息保存void course:save()char path20=C:course.txt;pclist p=pc;char str100=0;cout请输入文件保存路径:path;ofstream outfile(path);if(!outfile)cerrname,p-num,p-week_time,p-all_time,p-priority);outfile.write(char*)str,strlen(str);p=p-next;outfile.close();cout保存成功!endl;.教师

18、排课void sort(teacher& t,course& c) ptlist q=t.pt; ptlist n=t.pt; ptlist m=n; int sum=0; int num=-1; srand(time(0); for(int i=0;inext; if(m=NULL) break; for(int j=0;jtci.ipri=n-tcj.ipri)&(0=strcmp(m-tci.name,n-tcj.name) num=rand()%2; switch(num) case 0: (convert(c,q-tcnum.name)-mc=false; break; case 1

19、: (convert(c,q-tcnum.name)-mc=false; break; default: break; n=n-next; while(q) for(int i=0;itci.name)-mc) sum+=(convert(c,q-tci.name)-all_time; (convert(c,q-tci.name)-mc=false; if(i=0) strcpy(q-cbuf,q-tci.name); else strcat(q-cbuf, ); strcat(q-cbuf,q-tci.name); if(sum=q-work_time) break; sum=0; q=q-

20、next; cout课程已排好!endl;.排课结果打印void print(teacher& t)ptlist p=t.pt;cout最终排课情况:endl;cout教师姓名t工作量t教授课程endl;while(p) coutnamettwork_timetcbufnext;.课程结点匹配pclist convert(course& c,char * s)pclist p=c.pc;while(p)if(0=strcmp(p-name,s)return p;elsep=p-next;cout应用程序出错!endl;return NULL;.八系统运行结果样例样例中测试数据在截图中可以体现.

21、主菜单.教师信息载入界面.课程信息载入界面.教师信息保存界面.课程信息保存界面.教师排课界面.排课结果打印界面.系统保护界面.退出系统界面九结束语1、通过本课程设计,充分培养了我的上机动手能力,不仅巩固C/C+语言程序设计课程学习的内容,而且掌握了工程软件设计的基本方法,为后续各门计算机课程的学习打下坚实基础。.在程序设计过程中锻炼自己发现问题,解决问题的能力,使自己的思想更成熟,完善同时,我还发现自己程序设计方面经验的不足,设计出来的类多少存在些问题,还有待进一步提高.设计完成后,我发现如果将友元类和其他全局函数抽象为一个新的排课类会更符合面向对象的思想总之,这次程序设计是我们将理论知识应用于实际的表现,作为计算机专业的我们,应该多动手,培养自己的动手能力,思考能力此次课程设计,我真的收获不小,感谢老师的安排!

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1