版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目 录 第 1 章 课题概述.1 1.1 课题的目的 .1 1.2.1 输入输出的要求 .1 1.2.2 程序所要实现的功能 .1 第 2 章 设计思路.2 2.1 存储结构的确定 .2 2.2 程序流程图 .2 第 3 章 程序实现.3 3.1 存储结构与方式 .3 3.2 程序中各函数分析 .3 第 4 章 问题与解决.12 第 5 章 程序测试.13 第 6 章 总 结.16 参考文献.17 1 第 1 章 课题概述 1.1 课题的目的 课程设计题目:设计一个排课程序; 每位教师都有教学工作量,教师对他所希望讲授的课程表达为一个期望值, 1,2,n,其中 1 位最高的期望值。课程也有优先
2、级,1,2,n,用来决定 将课程分给教师的顺序,其中 1 时最高的优先级。设计一个程序针对某些课程 给某些教师进行排课。 1.2.1 输入输出的要求 (1)输入的教师及课程信息以文件形式保存; 1.2.2 程序所要实现的功能 程序需要实现的功能有: (1)教师及课程信息的录入(保存文件是可指定文件名及路径) ; (2)程序随机给教师分配课程。根据教师对课程的期望值,进行排序; (3)排课结果浏览功能; 2 第 2 章 设计思路 2.1 存储结构的确定 课题要求教师及课程信息以文件形式保存,存储结构确定为结构体。 2.2 程序流程图 整个程序的流程如图 2-1 所示。 图 2-1 3 第 3 章
3、 程序实现 3.1 存储结构与方式 在程序运行时,文件以结构体的方式存储在内存中,再以文件形式保存到硬盘。 typedef struct tcnode/课程期望结构体 char name20;/课程名称 int ipri;/期望值 tclist,*ptclist;/结构体变量及指针 typedef struct node/教师信息结构体 char name20;/教师名 char num20;/教师号 int work_time;/工作量 tclist tcm;/课程期望的结构体数组 char cbufsize; struct node *next; tlist,*ptlist; typede
4、f struct node/课程信息结构体 char name20;/课程名 char num20;/课程号 int week_time;/周学时 int all_time;/总学时 int priority;/优先级 bool mc;/是否被选 struct node *next; clist,*pclist; 3.2 程序中各函数分析 表 3-1 程序中的函数列表 函数名函数功能 main() 主函数 teacher:initdata() 输入教师信息及教师对课程的期望值 teacher:save() 将教师信息保存到文件 course:initdata() 输入课程信息 course:s
5、ave() 将课程信息保存到文件 sort(teacher (2) teacher:initdata() 该函数的功能是输入教师信息及对课程的期望值。先输入教师信息,包括姓名、教师号、工作 量。在程序开头定义教师类,教师结构体用来存储教师。存储时以链表的方式存储。通过指针的后 移,将教师信息存储到链表中。 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-
6、nums-work_time; cout请输入相应课程名及期望值:endl; for(int i=0;s-tci.ipri; fflush(stdin); s-next=null; if(!pt) 5 pt=s; p=pt; else p-next=s; p=p-next; t+; cout是否继续输入信息:tag; system(cls); while(tag=y|tag=y) (3) teacher:save() 将教师信息保存到文件。先在指定位置新建一个指定文件名以及文件类型的文件。使用 sprintf()函数,将所需要写入文件的内容保存到字符串中,再使用outfi
7、le.write()函数 将字符串写入文件。 void teacher:save() ptlist p=pt; char path20=d:teacher.txt; char str50=0; cout请选择保存教师信息文件的路径:path; ofstream outfile(path); if(!outfile) cerr保存失败,请检查所选路径是否正确!name,p-num,p-work_time); outfile.write(char*)str,strlen(str); sprintf(str,对相应课程的期望值:n); outfile.write(char*)str,strlen(s
8、tr); for(int i=0;,p-tci.ipri); outfile.write(char*)str,strlen(str); sprintf(str,n); outfile.write(char*)str,strlen(str); p=p-next; outfile.close(); cout保存成功!endl; (4) course:initdata() 输入课程信息,与“输入教师信息”功能类似,原理类似。 (5) course:save() 保存课程信息,与“保存教师信息”功能类似,原理类似 (6) sort(teacher ptlist n=t.pt; ptl
9、ist m=n; 7 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)/利用伪随机函数 rand 来进行随机选择 switch(num) case 0: (convert(c,)-mc=false; break; case 1: (convert(c,)-mc=false; break; default: break; n=n-next; whi
10、le(q) 8 for(int i=0;)-mc) sum+=(convert(c,)-all_time; (convert(c,)-mc=false; if(i=0) strcpy(q-cbuf,); else strcat(q-cbuf, ); strcat(q-cbuf,); if(sum=q-work_time) break; sum=0; q=q-next; cout课程已排好!endl; (7) print(teacher cout最终排课情况:endl; cout教师姓名t 工作量t
11、 教授课程endl; 9 while(p) coutnamettwork_timetcbufnext; (8) dis_menu() 显示菜单。根据输入的选项调用子函数。 void dis_menu() bool ttag=false; bool ctag=false; char tag; int choice=0; do system(cls); cout欢迎使用教师排课系统,请根据提示完成相关操作 endl; cout1:载入教师信息endl; cout2:载入课程信息endl; cout3:存储教师信息endl; cout4:存储课程信息endl; cout5:教师排课endl; cou
12、t6:打印排课结果endl; cout0:退出endl; fflush(stdin); cout请输入选择:choice; switch(choice) case 1: system(cls); cout*教师信息载入*endl; tea.initdata(); ttag=true; 10 break; case 2: system(cls); cout*课程信息载入*endl; cou.initdata(); ctag=true; break; case 3: system(cls); cout*教师信息保存*endl; if(!ttag) cout请先载入教师信息endl; else te
13、a.save(); break; case 4: system(cls); cout*课程信息保存*endl; if(!ctag) cout请先载入课程信息endl; else cou.save(); break; case 5: system(cls); cout*教师排序界面*endl; if(!ttag|!ctag) cout请先载入相关信息endl; else sort(tea,cou); break; case 6: system(cls); cout*排课信息打印*endl; if(!ttag|!ctag) 11 cout请先载入相关信息endl; else print(tea);
14、 break; default: system(cls); coutt*感谢使用本系统!*endl; exit(0); cout系统使用中.endl; cout是否继续其他操作? y/ytag; while(tag=y|tag=y); 12 第 4 章 问题与解决 编写程序的过程中遇到了很多问题,但是通过询问老师和与同组同学讨论 都一一解决了,这些问题主要是以下几种类别: 一、程序编写时遇到的问题与解决 没有编写类似教复杂的程序的经验,先前都是做的一些小功能。虽然单个 功能的编写不会有太大问题,但将他们组合在一起时有种无从下手的感觉。在 经过老师的和参考网上的类似程序,终于将程序完成。在初次编
15、写时,使用了 多个全局变量,导致在程序实现的过程中出现了多个问题,数次修改无果,询 问老师后,老师给的建议是,尽量少用全局变量。经过修改后,程序思路变得 清晰了,错误也解决了。 二、程序实现时遇到的问题 q1:当教师个数是多个的时候不能进行排课; a1:在进行单步调试后发现在排课的循环中出现了问题,所以当老师个数 大于一个的时候不能排序。由于找不出解决方案,所以换了一个排课的算法, 先对课程进行比对按照课程优先级将课程排给老师。 三、程序改进 q1:排课过程中要将课程优先级高的课程先排,需要将每个课程都读取一 遍,程序效率不高; a1:在课程信息输入时进行排序,按照优先级高低。读取时按照顺序,
16、这 样效率更高。或者把优先级相同的课程分一组,按照优先级高低依次编号,这 样也可以提高效率。 13 第 5 章 程序测试 图 6-1 程序主菜单 图 6-2 输入教师信息界面 图 6-3 输入课程信息界面 14 图 6-4 保存教师信息界面及结果 图 6-5 保存课程信息界面及结果 15 图 6-6 运行排课程序,排课成功 图 6-7 查看排课结果 16 第 6 章 总 结 经过一学年的 c+学习,我们掌握了 c+的基础知识,上学期学的是 c 语言, c+与其有一定的区别,但也有联系。平时的程序设计大多是以填空、纠错的形 式出现,做的编程题也都是一些小程序。而这一周的课程设计,却让我们完完 全全用自己学到的知识编写一个完整的体统程序。这是一个新的挑战,也是一 种新的学习。 我选择的是教师排课系统。这需要我们自己设计一个系统,可以将几门课 程按照课程本身的优先级以及教师的期望值合理的拍个各个老师。初看到这个 题目觉得很简单,但当我做到电脑前准备开始编写代码的时候才发现无从下手。 通过去图书馆查找程序设计相关的书籍,和上网参考前人编写的类似程序,我 脑中才有了一个大概方向。 在这次课程设计的过程中,我运用了老师交给我们的方法:先将一个个的 小功能编写出来,再将他们串联起来,组合成一个程序。初步串联起来后会有 各种奇怪的问题出现。在理清楚了整
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度特许经营合同标的为连锁餐饮的协议2篇
- 南京市二零二四年度存量房买卖电子签约法律效力确认合同
- 印刷业的市场需求分析考核试卷
- 南宁2024年度写字楼租赁合同协议
- 企业文化与核心价值观培训考核试卷
- 2024年度体育赛事主办方汽车停车位租赁合同协议书2篇
- 2024年度地砖供需合同模板2篇
- 2024年度旅游景区地砖铺设承包合同3篇
- 2024年度版权转让合同标的:小说出版权转让
- 广告效能与市场反馈考核试卷
- 2024年双11电商消费回顾及趋势总结报告-flywheel飞未-202411
- 浙江省初中名校发展共同体2024-2025学年九年级上学期期中考试科学试卷
- 中华人民共和国建筑法
- 2024江西吉安县政务服务大厅人员招聘11人笔试备考题库及答案解析
- 礼仪培训第一
- 四年级数学(四则混合运算带括号)计算题专项练习与答案
- 人教版一年级上册数学第5单元《6-10的认识和加减法》试卷及答案
- 团员发展纪实簿
- 2024年中学生编程(图形化)竞赛试题
- DB11T 1213-2015 自来水单位产量能源消耗限额
- 2024-2025学年统编版七年级语文上册 第四单元 单元测试卷
评论
0/150
提交评论