课程设计用c++设计一个排课程序

上传人:优*** 文档编号:47663142 上传时间:2021-12-25 格式:DOC 页数:22 大小:347.50KB
收藏 版权申诉 举报 下载
课程设计用c++设计一个排课程序_第1页
第1页 / 共22页
课程设计用c++设计一个排课程序_第2页
第2页 / 共22页
课程设计用c++设计一个排课程序_第3页
第3页 / 共22页
资源描述:

《课程设计用c++设计一个排课程序》由会员分享,可在线阅读,更多相关《课程设计用c++设计一个排课程序(22页珍藏版)》请在装配图网上搜索。

1、真诚为您提供优质参考资料,若有不当之处,请指正。课程设计论文 题 目:用c+设计一个排课程序学 院: 专业名称:电子科学与技术班级学号: 学生姓名: 指导教师: 2013年 6月 目录一、 课题背景21.1选题的意义3二、 课题要求42.1设计功能要求42.2 报告要求4三、 系统总体方案:53.1方案描述53.3各功能模块:6四、 源程序代码7五、 测试数据及结果24六、 总结25参考书籍26致谢26摘要:随着社会经济的迅速发展和科学技术的全面进步,计算机事业的飞速发展,以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。随着经济文化水平的显著提高,人们对生活质量及工作环境的要求也越来越

2、高。如何通过计算机为我们完成更多的事情,进而达到办公自动化和优化日常工作的目的,也就成了一个大众化的课题。作为计算机应用的一部分,使用计算机对信息进行管理,具有与手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。关键词:计算机 c+程序语言 排课系统1、 课题背景1.1实际应用的需要 近几年来,随着各高校办公自动化工作的推进,教务管理自动化也被摆上了日程。在教务工作中占有很大比重的一项就是每学期的课程排定工作。由于教工、教室和设备的相对紧张,如何进行合理地安排和分配,从而充分利用教学资源是我们不得不面对的问题。而人工进行排课不仅任务重,效率低,

3、而且易出错,难于维护,想要排出一张各方面都满意的课表非常困难。并且随着高校规模的扩大手工排课的难度和工作量呈几何级数增长。学校教务的管理作为高校教育信息化工作中的一项重要工作,如何构建一个具有开放性、实用性和灵活性的平台,是一个值得探讨的课题。其中,作为学校教务重点环节之一的排课系统也尤为重要。1.1选题的意义排课系统正是为了减轻教务人员的工作量,实现教务工作自动化,解决排课这一老大难问题的教务办公软件。尤其针对高校的排课一直都没有很好的解决方法,但是此问题又是每个学校在每个学期都会碰到的必要行政作业。本文在相关理论的指导下,在分析以往一些排课软件的基础上,提出一个高校通用排课系统的设计方法,

4、并对一些具体的问题给出相应解决方案。但是,由于技术、经验的有限和数据量过大,目前我们很难做出一个满足所有需要的排课系统。因为它不仅要考虑到教室冲突问题和教师冲突问题,还要考虑到分段课、单双周课时的资源利用问题;另外由于高校的教学特点,还要处理合班课、分班课、体育课与选修课等特殊课程。针对这些问题,在此专门对数据库设计作了一些探索,并于架构的选择和模块的划分上经过精心调整,在菜单的设计上也体现了人性化的操作。该设计贴近用户需求,功能完整,架构合理,并用大量的框图模型体现了系统的规划。该系统实现上机时间的安排,课程的安排,教室的安排,以及它们之间的不冲突和资源的高效利用;这更切合学院教学需要,降低

5、了排课管理工作的工作量和节省了时间,同时课程安排完成后,学院可迅速获得课表情况信息,为教学工作带来方便。本系统界面友好,操作简单,使用方便。2、 课题要求 2.1设计功能要求 程序运行时,用户输入教师信息(姓名、教师号、工作量)、课程信息(课程名、课程号、周学时、总学时、优先级)、教师对所希望讲授课程的期望值以及教学工作量等相关信息,所有信息应保存在文件中,程序根据课程的优先级以及教师对课程的期望值进行排课。为了公平起见,程序随机分配课程,如果10门课程都有优先级,程序以随机的顺序将这些课程分给教师,如果10位教师对某门课程的期望值为1,程序应从10位教师中随机选择一个。最后输出排课情况,即某

6、位老师上某门课程,以及某位老师的工作量。测试数据:程序应能实现对不少于20门课和10个教师的排课,并且使每个教师的满意度达到最大,不存在工作量不满的教师以及未分配的课等情况。2.2 报告要求1 封面2.课程设计报告:3.系统总体方案 设计思路和主要步骤 各功能模块和流程图 设计代码 心得体会和参考资料3、 系统总体方案:3.1方案描述 某学校每位教师都有教学工作量,教师对他所希望讲授的课程表达为一个期望值,1,2,n,其中1是最高的期望值。课程也有优先级,1,2,n,用来决定将课程分给教师的顺序,其中1是高的优先级。设计一个程序针对某些课程给某些教师进行排课。 要求: (一)程序运行时,用户输

7、入教师信息(姓名、教师号、工作量)、课程信息(课程名、课程号、周学时、总学时、优先级),教师对所希望讲授课程的期望值以及教学工作量等相关信息,所有信息应保存在文件中。 (二)程序根据课程的优先级以及教师对课程的期望值进行排课。最后输出排课情况,即某位老师上某门课程,以及某位老师的工作量。 (三)可以实现对文件的修改。 (四)可以在各个界面中实现退出以及进入的循环。 (五)可以退出本系统。 (六)程序应能实现对不少于20门课和10个教师的排课,并且使每个教师的满意度达到最大,不存在工作量不满的教师以及未分配的课等情况。3.2系统设计框图: 3.3各功能模块:命令对应函数功能描述1input_te

8、acher输入数据并写入文件2input_course输入数据并写入文件3input_num输入数据并写入文件4arranging排课5print输出排课结果6print_help帮助7print_teacher输出文件信息8print_course输出文件信息9print_num输出文件信息10change修改文件信息4、 源程序代码Teacher.h:#include#includeclassteacherprivate:charname11; intid;intwork_load; inttotal;public:teacher();voidset_teacher(char*pn,int

9、i,intw); voidset_total(intt)total=t;char*get_name()returnname;intget_id()returnid;intget_work_load()returnwork_load;intget_total()returntotal;voidprint();teacher:teacher()strcpy(name,无); id=0;work_load=0; total=0;voidteacher:set_teacher(char*pn,inti,intw)strcpy(name,pn); id=i;work_load=w; voidteache

10、r:print()cout姓名:nameendl; cout编号:idendl;cout工作量:work_loadendl;Course.h:#includeclasscourseprivate:charcourse_name15; intcourse_id; intweek_hour; inttotal_hour; intN;public:course(void);voidset_course(char*pname,inti,intw,intt,intn) char*get_course_name() returncourse_name; intget_course_id()returnco

11、urse_id;intget_week_hour()returnweek_hour;intget_total_hour()returntotal_hour;intget_N()returnN;voidprint();course:course(void)strcpy(course_name,无); course_id=0; week_hour=0; total_hour=0; N=0;voidcourse:set_course(char*pname,inti,intw,intt,intn) strcpy(course_name,pname); course_id=i; week_hour=w;

12、 total_hour=t; N=n;voidcourse:print()cout课程名:course_nameendl; cout编号:course_idendl; cout周学时:week_hourendl; cout总学时:total_hourendl; cout优先级:Nendl;voidcourse:print()cout课程名:course_nameendl; cout编号:course_idendl; cout周学时:week_hourendl; cout总学时:total_hourendl; cout优先级:Nendl;x=0; y=0;voidset_x(inta)x=a;v

13、oidset_y(intb)y=b;intget_x() returnx; intget_y() returny;排课.cpp:#include#include#include#include#include#includeteacher.h#includecourse.h#includearrange.h#include/usingnamespacestd;voidinput_teacher(teacher*t,intn,intm);voidinput_course(course*c,intm);voidinput_num(int*num,intn,intm);voidarranging(i

14、nt*num,teacher*t,course*c,arrange*a,intn,intm);voidprint(teacher*t,course*c,arrange*a,intm);voidprint_help();voidprint_teacher();voidprint_course();voidprint_num();voidchange(int*num,teacher*t,course*c,arrange*a,intn,intm);voidchange_teacher(teacher*t,intn);voidchange_course(course*c,intm);voidchang

15、e_num(teacher*t,course*c,int*num,intn,intm);voidmain()inti,n,m;cout=教师排课系统=endl; coutn; coutm;int*num=newint*n;for(i=0;in;+i)numi=newintm; teacher*t; course*c; arrange*a; t=newteachern; c=newcoursem; a=newarrangem;if(t=NULL|c=NULL|a=NULL) cout内存分配失败endl; return cout1.输入教师基本数据n; cout2.输入课程基本数据n; cout

16、3.输入教师对课程满意度n; cout4.排课n;cout5.输出排课结果n; cout6.帮助n;cout7.输出教师信息n; cout8.输出课程信息n;cout9.输出教师对课程满意度n; cout10.修改文件数据n; cout0.退出n;coutn输入你的选择:; intch; Do/coutnn请选择:n; /cout1.输入教师基本数据n; /cout2.输入课程基本数据n; /cout3.输入教师对课程满意度n; /cout4.排课n; /cout5.输出排课结果n; /cout6.帮助n; /cout0.退出n;/coutch; switch(ch)case1:input_t

17、eacher(t,n,m);break; case2:input_course(c,m);break; case3:input_num(num,n,m);break; case4:arranging(num,t,c,a,n,m);break; case5:print(t,c,a,m);break; case6:print_help();break; case7:print_teacher();break; case8:print_course();break; case9:print_num();break; case10:change(num,t,c,a,n,m);break; case0:

18、break;while(ch);for(i=0;in;+i)deletenumi; deletenum; deletet; deletec; deletea; voidinput_teacher(teacher*t,intn,intm)fstreamteachers(d:teachers.txt,ios:out);teachers姓名setw(20)编号setw(20)工作量 endl; inti,j,work,id;charname11,nn11;coutn请输入教师基本数据:endl;while(1)inttotal=0; for(i=0;in;i+)cout第i+1个教师:n;couti

19、d)break;elsecout编号应为数字,请重新输入: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;elsecout姓名应为字母,请重新输入”endl; cin.clear(); cin.ignore();coutwork)break;elsecout工作量应为数字,请重新输入

20、:m)cout总工作量大于课程数,请重新输入:endl;break;ti.set_teacher(name,id,work);teachersnamesetw(20)idsetw(20)workm)continue;teachers.close();voidinput_course(course*c,intm)fstreamcourses(d:courses.txt,ios:out);courses课程名setw(10)课程号setw(10) 周学时setw(10)总学时setw(10)优先级 endl; intweek_hour,total_hour,d1,id,i,j; charname1

21、1; charnn11; for(i=0;im;i+)cout第i+1门课:n; coutid)break; elsecout课程号应为数字,请重新输入:endl; cin.clear(); cin.ignore();coutname;for(j=0;j11;j+)if(!=namej&namej=)|(=namej&name j=)|=namej&namej=)nnj=0;elsennj=1;if(nn0*nn1*nn2*nn3*nn4*nn5*nn6*nn7*nn8*nn9*nn10=1)break;elsecout课程名应为字母,请重新输入:endl;cin.clear();cin.ig

22、nore();coutweek_hour)break;elsecout周学时应为数字,请重新输入:endl; cin.clear(); cin.ignore(); coutweek_hour)break;elsecout周学时应为数字,请重新输入:endl; cin.clear(); cin.ignore(); couttotal_hour)break; elsecout总学时应为数字,请重新输入:endl; cin.clear(); cin.ignore(); coutd1)break; elsecout优先级应为数字,请重新输入:endl; cin.clear();cin.ignore()

23、; ci.set_course(name,id,week_hour,total_hour,d1);coursesnamesetw(10)idsetw(10)week_hour setw(10)total_hoursetw(10)d1endl;courses.close();voidinput_num(int*num,intn,intm)/教师对课程满意度输入fstreamnums(d:hope.txt,ios:out); numssetw(4)满意度setw(6); intnu,i,j,k; for(k=0;km;k+)nums第k+1门课程setw(5);numsendl;for(i=0;i

24、n;i+)nums第i+1名老师setw(3);for(j=0;jm;j+)cout第i+1位老师对第j+1门课程的 满意度nu;while(1)if(cinnu)break;elsecout满意度应为数字,请重新输入:endl;cin.clear();cin.ignore();numij=nu;numsnusetw(13);numsendl; nums.close();voidarranging(int*num,teacher*t,course*c,arrange*a,intn,intm)/排课inth,s,i,j,b,k=1,min,min1,q=0; min=c0.get_N();sra

25、nd(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;elseif(tb.get_total()tb.get_work_load() continue; elseif(numbi!=min1)continue;elseaq.set_x(b);aq.s

26、et_y(i);q+; intw=tb.get_total()+1; tb.set_total(w); /k=0;cout第q次排课endl;break;/if(i=m-1)min+; min+;if(qm)h=1;elseh=0;voidprint(teacher*t,course*c,arrange*a,intm)/输出排课结果inti,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();voidprint_help()/帮助函数cout1.输入教

27、师基本数据n;cout2.输入课程基本数据n;cout3.输入教师对课程满意度n;cout4.排课n;cout5.输出排课结果n;cout6.帮助n;cout7.输出教师信息n;cout8.输出课程信息n;cout9.输出教师对课程满意度n;cout10.修改文件数据n;cout0.退出n;voidprint_teacher()/输出教师信息ifstreamfin(d:teachers.txt,ios:nocreate);if(!fin)coutFileopenerror!n;return;charc80;while(!fin.eof()/判断文件是否读结束fin.read(c,80);cou

28、t.write(c,fin.gcount();fin.close();voidprint_course()/输出课程信息ifstreamfin(d:courses.txt,ios:nocreate);if(!fin) coutFileopenerror!n;return;charc80;while(!fin.eof()fin.read(c,80);cout.write(c,fin.gcount();fin.close(); voidprint_num()/输出教师对课程的满意度ifstreamfin(d:hope.txt,ios:nocreate); if(!fin)if(!fin)coutF

29、ileopenerror!n; return; charc80; while(!fin.eof()/判断文件是否读结束fin.read(c,80);cout.write(c,fin.gcount();fin.close();voidchange(int*num,teacher*t,course*c,arran ge*a,intn,intm)/修改文件信息intch; docoutnn请选择:n;cout1.修改教师基本数据n;cout2.修改课程基本数据n;cout3.修改教师对课程满意度n;cout0.退出n;coutch;switch(ch)case1:change_teacher(t,n

30、);break; case2:change_course(c,m);break; case3:change_num(t,c,num,n,m);break; case0:break;while(ch); voidchange_teacher(teacher*t,intn)inti,aa,bb,k,j,ii; charna11; charnn11;coutii;for(i=0;in;i+)if(ti.get_id()=ii)cout此教师原信息:endl;ti.print();k=i;cout请输入此教师新信息:endl;coutaa)break;elsecout编号应为数字,请重新输入:endl

31、; 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;endl; cin.clear(); cin.ignore();coutbb)break; elsecout工作量应为数字,请重新输入:endl;cin.clear();cin.ignore(); tk.set_tea

32、cher(na,aa,bb);fstreamteachers(d:teachers.txt,ios:out); teachers姓名setw(20)编号setw(20)工作量endl; for(j=0;jn;j+)if(j=k)teachersnasetw(20)aasetw(20)bbendl; elseteacherstj.get_name()setw(20)tj.get_id()setw(20)tj.get_work_load()endl;teachers.close();voidchange_course(course*c,intm)/修改课程信息inti,aa,bb,cc,dd,k,

33、j,ii; charna11;charnn11;coutii;for(i=0;im;i+)if(ci.get_course_id()=ii) cout此课程原信息:endl; ci.print(); k=i;cout请输入此课程新信息:endl; coutaa)break; elsecout课程号应为数字,请重新输入:endl; cin.clear(); cin.ignore();coutna;for(j=0;j11;j+)if(!=naj&naj=)|(=naj&naj=)|=naj&naj=)nnj=0;elsennj=1;if(nn0*nn1*nn2*nn3*nn4*nn5*nn6*nn

34、7*n n8*nn9*nn10=1)break;elsecout课程名应为字母,请重新输入:endl; cin.clear(); cin.ignore(); coutbb)break; elsecout周学时应为数字,请重新输入:endl; cin.clear(); cin.ignore();coutcc)break; elsecout总学时应为数字,请重新输入:endl;cin.clear();cin.ignore();coutdd)break; elsecout优先级应为数字,请重新输入:endl; cin.clear(); cin.ignore();ck.set_course(na,aa

35、,bb,cc,dd);fstreamcourses(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;elsecoursescj.get_course_name()setw(10)cj.get_course_id()setw(10)cj.get_week_hour()setw(10)cj.get_total_hour()setw(10

36、)cj.get_N()endl;courses.close();voidchange_num(teacher*t,course*c,int*num,intn,intm)intii,jj,i,j,k,nn,a1,b1,c1;coutii)break;elsecout满意度应为数字,请重新输入:endl;cin.clear();cin.ignore();for(i=0;in;i+)if(ti.get_id()=ii)a1=i;coutjj)break;elsecout满意度应为数字,请重新输入:endl;cin.clear();cin.ignore();for(i=0;im;i+)if(ci.ge

37、t_course_id()=jj)b1=i;coutnn)break;elsecout满意度应为数字,请重新输入:endl;cin.clear(); cin.ignore();fstreamnums(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+)/cout第i+1位老师对第j+1门课程的满意度nu;if(i=a1&j=b1)numsnnsetw(13);numa1b1=nn; elsec1=numij;numsc1setw(13); nums

38、endl; nums.close();5、 测试数据及结果6、 总结 1、 通过这次创新实践,锻炼了动手能力,同时也让我们把理论与实践结合起来对以后的学习及工作都有很大的帮助。这次实践设计也增长了学习的兴趣、激发了实践与创新的热情。 2、在做测试技术的实验前,我以为不会难做,就像以前做物理实验一样,做完实验,然后两下子就将实验报告做完.直到做完测试实验时,我才知道其实并不容易做,但学到的知识与难度成正比,使我受益匪浅. 在做实验前,一定要将原理上的知识吃透,因为这是做实验的基础,否则,在实验时就会搞不懂,这将使你在做实验时的难度加大,浪费做实验的宝贵时间.比如做这个的实验,你要清楚各电子元件的

39、各种接法,如果你不清楚,在做实验时才去摸索,这将使你极大地浪费时间,使你事倍功半.做实验时,一定要亲力亲为,务必要将每个步骤,每个细节弄清楚,弄明白,实验后,还要复习,思考,这样,你的印象才深刻,记得才牢固,否则,过后不久你就会忘得一干二净,这还不如不做.做实验时,老师还会根据自己的亲身体会,将一些课本上没有的知识教给我们,拓宽我们的眼界,使我们认识到这次课程设计的应用是那么的广泛. 通过这次课设技术的实验,使我学到了不少实用的知识,更重要的是,做实验的过程,思考问题的方法,这与做其他的实验是通用的。参考书籍1朱立华 俞琼编.面向对象程序设计及C+,人民邮电出版社。2011.102谭浩强编. C程序设计,清华大学出版社,2010.03致谢 能顺利完成这次课程设计及论文的写作,我非常的欣慰。在此非常感谢我的指导老师陈常婷老师,他给了我很大的鼓励和帮助,让我对论文的完成充满了信心。 在我查找资料和整理论文的过程中王庆老师给了我许多建设性的意见。再次表示感谢!但是因工作原因时间紧、任务重。同时由于自身专业知识资质不足,资料搜 集不够全面,最终综合分析研究不足,相关测试、分析资料不全,难免有错漏之 处和认识上的肤浅。谢谢!22 / 22

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


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