教师排课系统课程设计报告(C).doc

上传人:wux****ua 文档编号:9307204 上传时间:2020-04-04 格式:DOC 页数:27 大小:177KB
返回 下载 相关 举报
教师排课系统课程设计报告(C).doc_第1页
第1页 / 共27页
教师排课系统课程设计报告(C).doc_第2页
第2页 / 共27页
教师排课系统课程设计报告(C).doc_第3页
第3页 / 共27页
点击查看更多>>
资源描述
面向对象技术与C+课程设计任务书课 程面向对象技术与C+ 班级xxxx指导教师xxx题 目教师排课系统完成时间xxxxx至xxxxx主要内容1问题描述每位教师都有教学工作量,教师对他所希望讲授的课程表达为一个期望值,1,2,n,其中1是最高的期望值。课程也有优先级,1,2,n,用来决定将课程分给教师的顺序,其中1是最高的优先级。设计一个程序针对某些课程给某些教师进行排课。2基本要求程序运行时,用户输入教师信息(姓名、教师号、工作量)、课程信息(课程名、课程号、周学时、总学时、优先级),教师对所希望讲授课程的期望值以及教学工作量等相关信息,所有信息应保存在文件中,程序根据课程的优先级以及教师对课程的期望值进行排课。为了公平起见,程序随机分配课程,如果10门课程都有优先级1,程序以随机的顺序将这些课程分给教师,如果10位教师对某门课程的期望值为1,程序应从10位教师中随机选择一个。最后输出排课情况,即某位老师上某门课程,以及某位老师的工作量。3测试数据程序应能实现对不少于20门课和10个教师的排课,并且使每个教师的满意度达到最大,不存在工作量不满的教师以及未分配的课等情况。设计报告要求1封面:(格式附后)2课程设计任务书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是最高的优先级。设计一个程序针对某些课程给某些教师进行排课。要求:(一)程序运行时,用户输入教师信息(姓名、教师号、工作量)、课程信息(课程名、课程号、周学时、总学时、优先级),教师对所希望讲授课程的期望值以及教学工作量等相关信息,所有信息应保存在文件中。(二)程序根据课程的优先级以及教师对课程的期望值进行排课。最后输出排课情况,即某位老师上某门课程,以及某位老师的工作量。(三)可以实现对文件的修改。(四)可以在各个界面中实现退出以及进入的循环。(五)可以退出本系统。(六)程序应能实现对不少于20门课和10个教师的排课,并且使每个教师的满意度达到最大,不存在工作量不满的教师以及未分配的课等情况。方法:为了公平起见,程序随机分配课程,如果10门课程都有优先级1,程序以随机的顺序将这些课程分给教师,如果10位教师对某门课程的期望值为1,程序应从10位教师中随机选择一个。2.设计思路和主要步骤:我们使用面向对象程序设计方法的思路进行分析,得出了整个系统应该涉及三个类的信息和操作,分别是教师类,课程类,排课类。各类信息以文件方式的储存以及实现各种功能和界面的实现是在main函数中体现。(一)教师类 teacher:包括私有数据成员 姓名 name,编号 id ,工作量work_load ,已有工作量 total(方便判断是否排满课)。成员函数包括设置和得到私有成员值的成员函数与输出教师信息的成员函数。(2)课程类 course:私有成员有 课程名 course_name,课程号 course_id,周课时 week_hour,总课时 total_hour,优先度 N。(3)由于考虑到这应该是一个完整的排系统,加上我们希望这个系统的界面能够做到清晰、明了,我们经讨论后决定采用一个总操作界面,一个分操作界面。总操作界面应该包括 (分别对应 1.输入教师信息 2.输入课程信息 3输入教师对课程期望度 4.排课 5.输出排课结果 6.显示操作菜单 7.输出教师文件信息 8.输出课程文件信息 9.输出教师期望度文件信息 10.修改文件信息 0.退出)修改文件信息界面中又因该包括 1.修改教师文件 2.修改课程文件 3.修改教师期望度信息 0.退出3.各功能模块与流程图:说明:以下是对应上面系统功能模块实图的系统流程图,因为制图的不便,故只将成功完成一次操作的流程给出,而“各个流程中中途如果输入了菜单中没有的项以及数据保存文件中没有的数据而被强制退出”的流程因为过于复杂(每步都要进行判断)而没有给出,实际情况读者朋友一试便知。在此我们对此表示深深的歉意,我们以后一定会努力完善我们各方面的工作的。开始输入教师基本数据输入课程基本数据输入教师期望度排课输出排课结果帮助输出教师信息输出课程信息输出教师期望度文件修改退出修改教师信息修改课程信息修改教师期望度信息结束各功能模块:命令对应函数功能描述1input_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 *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姓名: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 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课程名: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 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); /教师对课程满意度输入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=教师排课系统=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=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;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 : 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; /删除行指针数组 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;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.ignore();cout work) break;else cout工作量应为数字,请重新输入:m) cout总工作量大于课程数,请重新输入: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;char 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; 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);coursesnamesetw(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位老师对第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;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_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;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;void print_teacher() /输出教师信息 ifstream fin(d:teachers.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_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:hope.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. 修改教师对课程满意度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此教师原信息: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.ignore();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_work_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=)|(=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();cin.ignore(); cout dd) break;else cout优先级应为数字,请重新输入:endl;cin.clear();cin.ignore(); ck.set_course(na,aa,bb,cc,dd);fstream courses(d:courses.txt,ios:out);courses课程名setw(10)课程号setw(10)周学时setw(10)总学时setw(10)优先级endl; for(j=0;jm;j+) if(j=k) coursesnasetw(10)aasetw(10)bbsetw(10)ccsetw(10)ddendl; else coursescj.get_course_name()setw(10)cj.get_course_id()setw(10)cj.get_week_hour()setw(10)cj.get_total_hour()setw(10)cj.get_N()endl; courses.close();void change_num(teacher *t,course *c,int *num,int n,int m) /修改教师对课程满意度int ii,jj,i,j,k,nn,a1,b1,c1;cout ii) break; else cout满意度应为数字,请重新输入:endl; cin.clear(); cin.ignore(); for(i=0;in;i+)if(ti.get_id()=ii) a1=i;cout jj) break; else cout满意度应为数字,请重新输入:endl; cin.clear(); cin.ignore(); for(i=0;im;i+)if(ci.get_course_id()=jj) b1=i;cout nn) break; else cout满意度应为数字,请重新输入:endl; cin.clear(); cin.ignore(); fstream nums(d:hope.txt,ios:out);numssetw(4)满意度setw(6);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门课程的满意度nu;if(i=a1&j=b1)numsnnsetw(13);numa1b1=nn;elsec1=numij;numsc1setw(13);numsendl;nums.close();6.总结、心得与体会通过这次课题设计,我觉得做好一个程序,灵活运用是关键。把基础学好不一定能把程序编好,但基础知识不好,一定编不出好程序。做大规模的程序不只是一个人努力就行了,一定要有团队合作能力。编程最主要是思路清晰,只要你把思路理顺了,就有利于你在编程的过程中少走弯路。 运行正确的程序并不一定是好程序,编程员时刻要牢记的一条就是自己写的程序不仅是给自己看的,也要让别人能轻易地看懂。我们在分块设计时就因为都太“以自我为中心“了,直接导致最后把程序汇总的时候才发现”错误“一大堆!当然、这也使我们更加体会到了程序可读性的重要之所在。要想学好C+我觉得除了在课堂上认真学习之外也要做好以下几点:1.认真对待每一个程序的编写 2.做好对每一个所编程序的总结 3.写程序尽量要规范、严谨,效率尽量要高 4.养成自我测试的习惯 5.多看一些别人编的程序,把好的思路和方法记下来,以备不时之需 6.要有恃之以恒的精神以及严谨的科学研究作风 在这短短的两个星期的努力奋斗中、在杨老师的辛勤指导下。我们终于把本次课题设计顺利完成。回想起课题设计过程中面对程序错误一大堆的失望与成功完成程序中每一个模块的喜悦时,我真正的体会到了:1.团队合作的好坏直接影响到了做好一件工作的质量与效率;2.细节决定成败;3.学术不管是哪一门,只要你用心去对待它,它也会用心地来回报你,这也正印证了一句话:“一分耕耘一分收获”!展望无限美好的21世纪,我们青年学生更应该好好学习、努力拼搏,为将来成长为一名对祖国、对人民、对社会的有用之才而不断奋斗!8.参考书目1.面向对象程序设计 C+版/钱丽萍等编:机械工业出版社,2007.72.面向对象程序设计实验/徐孝凯等编:中央广播电视大学出版社,2008.33. C+程序设计教程/钱能主编:清华大学出版社,2000.114. Visual C+程序设计基础/戴锋编著:清华大学出版社,2001.45.标准C+程序设计教程/林丽闽主编:电子工业出版社,2003.6 6. C+程序设计/谭浩强主编:清华大学出版社,2004.67.美迪特尔(Deitel H.M.)美迪特尔(Deitel P.J.) 薛万鹏等 译者: 薛万鹏等译,C+程序设计教程,机械工业出版社,2004.10
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!