教师排课系统课程设计报告C.docx
- 文档编号:24536572
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:38
- 大小:133.07KB
教师排课系统课程设计报告C.docx
《教师排课系统课程设计报告C.docx》由会员分享,可在线阅读,更多相关《教师排课系统课程设计报告C.docx(38页珍藏版)》请在冰豆网上搜索。
教师排课系统课程设计报告C
面向对象技术与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-4
1-4
1-4
1-4
1-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.各功能模块与流程图:
说明:
以下是对应上面系统功能模块实图的系统流程图,因为制图的不便,故只将成功完成一次操作的流程给出,而“各个流程中中途如果输入了菜单中没有的项以及数据保存文件中没有的数据而被强制退出”的流程因为过于复杂(每步都要进行判断)而没有给出,实际情况读者朋友一试便知。
在此我们对此表示深深的歉意,我们以后一定会努力完善我们各方面的工作的。
各功能模块:
命令
对应函数
功能描述
1
input_teacher
输入数据并写入文件
2
input_course
输入数据并写入文件
3
input_num
输入数据并写入文件
4
arranging
排课
5
print
输出排课结果
6
print_help
帮助
7
print_teacher
输出文件信息
8
print_course
输出文件信息
9
print_num
输出文件信息
10
change
修改文件信息
(五)程序代码:
Teacher.h:
#include
#include
classteacher
{
private:
charname[11];
intid;
intwork_load;
inttotal;
public:
teacher();
voidset_teacher(char*pn,inti,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;
}
voidteacher:
:
print()
{
cout<<"姓名:
"< cout<<"编号: "< cout<<"工作量: "< } Course.h: #include classcourse { private: charcourse_name[15]; 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() {returncourse_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; total_hour=t; N=n; } voidcourse: : print() { cout<<"课程名: "< cout<<"编号: "< cout<<"周学时: "< cout<<"总学时: "< cout<<"优先级: "< } Arrange.h: classarrange { private: intx; inty; public: arrange(void) { x=0; y=0; } voidset_x(inta) { x=a; } voidset_y(intb) { y=b; } intget_x() {returnx;} intget_y() {returny;} }; 排课.cpp: #include #include #include #include #include #include"teacher.h" #include"course.h" #include"arrange.h" #include //usingnamespacestd; voidinput_teacher(teacher*t,intn,intm);//教师基本数据输入 voidinput_course(course*c,intm);//课程基本信息输入 voidinput_num(int**num,intn,intm);//教师对课程满意度输入 voidarranging(int**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);//修改课程信息 voidchange_num(teacher*t,course*c,int**num,intn,intm);//修改教师对课程满意度 voidmain() { inti,n,m; cout<<"==========================教师排课系统==========================="< cout<<"教师人数: ";cin>>n; cout<<"课程数: ";cin>>m; int**num=newint*[n];//为每一行分配空间 for(i=0;i { num[i]=newint[m]; } teacher*t; course*c; arrange*a; t=newteacher[n]; c=newcourse[m]; a=newarrange[m]; if(t==NULL||c==NULL||a==NULL) {cout<<"内存分配失败"< 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"; cout<<"\n输入你的选择: "; intch; do { //cout<<"\n\n请选择: \n"; //cout<<"1.输入教师基本数据\n"; //cout<<"2.输入课程基本数据\n"; //cout<<"3.输入教师对课程满意度\n"; //cout<<"4.排课\n"; //cout<<"5.输出排课结果\n"; //cout<<"6.帮助\n"; //cout<<"0.退出\n"; //cout<<"\n输入你的选择: "; cin>>ch; switch(ch) {case1: input_teacher(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: break; } } while(ch); //删除每一行分配的空间 for(i=0;i { delete[]num[i]; } //删除行指针数组 delete[]num; delete[]t; delete[]c; delete[]a;//释放内存 } voidinput_teacher(teacher*t,intn,intm)//教师基本数据输入 { fstreamteachers("d: \\teachers.txt",ios: : out); teachers<<"姓名"< inti,j,work,id; charname[11],nn[11]; cout<<"\n请输入教师基本数据: "< while (1) { inttotal=0; for(i=0;i { cout<<"第"< \n"; cout<<"编号: "; while (1) { if(cin>>id)break; else { cout<<"编号应为数字,请重新输入: "< cin.clear(); cin.ignore(); } } cout<<"姓名: "; while (1) { cin>>name; for(j=0;j<11;j++) { if(('! '<=name[j]&&name[j]<='@')||('['<=name[j]&&name[j]<='`')||'{'<=name[j]&&name[j]<='~') nn[j]=0; else nn[j]=1; } if(nn[0]*nn[1]*nn[2]*nn[3]*nn[4]*nn[5]*nn[6]*nn[7]*nn[8]*nn[9]*nn[10]==1)break; else { cout<<"姓名应为字母,请重新输入: "< cin.clear(); cin.ignore(); } } cout<<"工作量: "; while (1) { if(cin>>work)break; else { cout<<"工作量应为数字,请重新输入: "< cin.clear(); cin.ignore(); } } total=total+work; if(total>m){cout<<"总工作量大于课程数,请重新输入: "< t[i].set_teacher(name,id,work); teachers< } if(total==m)break; if(total>m)continue; } teachers.close(); } voidinput_course(course*c,intm)//课程基本信息输入 { fstreamcourses("d: \\courses.txt",ios: : out); courses<<"课程名"< intweek_hour,total_hour,d1,id,i,j; charname[11]; charnn[11]; for(i=0;i {cout<<"第"< \n"; cout<<"课程号: "; while (1) { if(cin>>id)break; else { cout<<"课程号应为数字,请重新输入: "< cin.clear(); cin.ignore(); } } cout<<"课程名: "; while (1) { cin>>name; for(j=0;j<11;j++) { if(('! '<=name[j]&&name[j]<='@')||('['<=name[j]&&name[j]<='`')||'{'<=name[j]&&name[j]<='~') nn[j]=0; else nn[j]=1; } if(nn[0]*nn[1]*nn[2]*nn[3]*nn[4]*nn[5]*nn[6]*nn[7]*nn[8]*nn[9]*nn[10]==1)break; else { cout<<"课程名应为字母,请重新输入: "< cin.clear(); cin.ignore(); } } cout<<"周学时: "; while (1) { if(cin>>week_hour)break; else { cout<<"周学时应为数字,请重新输入: "< cin.clear(); cin.ignore(); } } cout<<"总学时: "; while (1) { if(cin>>total_hour)break; else { cout<<"总学时应为数字,请重新输入: "< cin.clear(); cin.ignore(); } } cout<<"优先级: "; while (1) { if(cin>>d1)break; else { cout<<"优先级应为数字,请重新输入: "< cin.clear(); cin.ignore(); } } c[i].set_course(name,id,week_hour,total_hour,d1); courses<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教师 系统 课程设计 报告