教师排课系统课程设计报告C_第1页
教师排课系统课程设计报告C_第2页
教师排课系统课程设计报告C_第3页
教师排课系统课程设计报告C_第4页
教师排课系统课程设计报告C_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、主要内容设 计 报 告 要 求版面要求面向对象技术与 C+课程设计任务书面向对象技术与C+ 班级 xxxx教师排课系统完成时间 xxxxx 至 xxxxx指导教师xxx1 问题描述每位教师都有教学工作量,教师对他所希望讲授的课程表达为一个期望值,1,2,n,其中1是最高的期望值。课程也有优先级,1,2,n,用来决定将课程分给教师的顺序,其中1是最高的优先级。设计一个程序针对某些课程给某些教师进行排课。2 基本要求程序运行时,用户输入教师信息(姓名、教师号、工作量)、课程信息(课程名、课程号、周学时、总学时、优先级),教师对所希望讲授课程的期望值以及教学工作量等相关信息,所有信息应保存在文件中,

2、程序根据课程的优先 级以及教师对课程的期望值进行排课。为了公平起见,程序随机分配课程,如 果10门课程都有优先级1,程序以随机的顺序将这些课程分给教师,如果10位教师对某门课程的期望值为1,程序应从10位教师中随机选择一个。最后输出排课情况,即某位老师上某门课程,以及某位老师的工作量。3 测试数据程序应能实现对不少于 20门课和10个教师的排课,并且使每个教师的满 意度达到最大,不存在工作量不满的教师以及未分配的课等情况。1 封面:(格式附后)2 课程设计任务书3 .课程设计报告:系统总体方案设计思路和主要步骤 各功能模块和流程图设计代码心得体会和参考资料说明:学生完成课程设计后,提交课程设计

3、报告及软件,要求文字通畅、字迹 工整(也可用以打印),文字不少于5000字,并装订成册。1. 题目用黑体三号,段后距18磅(或1行),居中对齐;2. 标题用黑体四号,段前、段后距 6磅(或0.3行);3. 正文用小四号宋体,行距为1.25倍行距;4. 标题按“一”、“”、“ 1”、“”顺序编号。.星期 周次“ 第17周1-41-41-41-41-44 / 27指导时 间地点上机时间,E520一.系统总体方案:某学校每位教师都有教学工作量,教师对他所希望讲授的课程表达为一个期 望值,1, 2,n,其中1是最高的期望值。课程也有优先级,1, 2,n,用来 决定将课程分给教师的顺序,其中1是最高的优

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

5、方法:为了公平起见,程序随机分配课程,如果 10门课程都有优先级1,程序以 随机的顺序将这些课程分给教师,如果 10位教师对某门课程的期望值为1,程 序应从10位教师中随机选择一个。2. 设计思路和主要步骤:我们使用面向对象程序设计方法的思路进行分析, 得出了整个系统应该涉及 三个类的信息和操作,分别是教师类,课程类,排课类。各类信息以文件方式的 储存以及实现各种功能和界面的实现是在 main函数中体现。(一)教师类teacher :包括私有数据成员 姓名name,编号id ,工作量 work_load ,已有工作量 total (方便判断是否排满课) 。成员函数包括设置和 得到私有成员值的成

6、员函数与输出教师信息的成员函数。(2)课程类 course :私有成员有 课程名 course_name,课程号 course_id , 周课时 week_hour ,总课时 total_hour ,优先度 N。(3)由于考虑到这应该是一个完整的排系统,加上我们希望这个系统的界 面能够做到清晰、 明了,我们经讨论后决定采用一个总操作界面, 一个分操作界 面。总操作界面应该包括 (分别对应 1. 输入教师信息 2. 输入课程信息 3 输入 教师对课程期望度 4. 排课 5. 输出排课结果 6. 显示操作菜单 7. 输出教师文件 信息 8. 输出课程文件信息 9. 输出教师期望度文件信息 10.

7、修改文件信息 0. 退 出)修改文件信息界面中又因该包括 1. 修改教师文件 2. 修改课程文件 3. 修改 教师期望度信息 0. 退出JIX SHI*¥* 蠶聲 dx?8 嚼 W- syM-H wimi-G-0塑媚粗嵋<緯惬汪理*底喟旺坦:r平X上肩35?霍MHKKKK-MKKKMJKKMIa:g理 LIAAhKHMKaKHKMzMHKxHJn4n产亍3. 各功能模块与流程图:说明:以下是对应上面系统功能模块实图的系统流程图,因为制图的不便,故只将成功完成一次操作的流程给出,而“各个流程中中途如果输入了菜单中没有的 项以及数据保存文件中没有的数据而被强制退出”的流程因为过于复

8、杂(每步都要进行判断)而没有给出,实际情况读者朋友一试便知。在此我们对此表示深深 的歉意,我们以后一定会努力完善我们各方面的工作的。28 / 27开始输入教师基本数据厂输入课 程基本 数据各功能模块:命令对应函数功能描述1in put_teacher输入数据并写入文件2in put_course输入数据并写入文件3in put_ num输入数据并写入文件4arranging排课5print输出排课结果6prin t_help帮助7prin t_teacher输出文件信息8prin t_course输出文件信息9print_num输出文件信息10change修改文件信息(五)程序代码:Teach

9、er.h:#i nclude<iostream.h>#i nclude<stri ng.h>class teacherprivate:char n ame11;int id;int work_load;int total;public:teacher();void set_teacher(char *pn ,i nt i,i nt w); void set_total( int t) _total=t;char *get_ name()return n ame;int get_id()return id;int get_work_load()retur n work_l

10、oad;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<<" 姓名 :"<<name<<endl;cout<<" 编号 :"

11、<<id<<endl;cout<<" 工作量 :"<<work_load<<endl;Course.h:#include<string.h>class 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(

12、)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

13、,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_name<<endl;cout<<" 编号 :"<<course_id<<endl;cout<<" 周学时: "<<week_hour<<endl;cout<<

14、" 总学时: "<<total_hour<<endl;cout<<" 优先级: "<<N<<endl;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<iostream.h> #include

15、<stdlib.h> #include<fstream.h> #include<iomanip.h> #include<stdio.h> #include"teacher.h" #include"course.h" #include"arrange.h" #include <time.h> /using namespace std;void input_teacher(teacher *t,int n,int m); / void input_course(course *c

16、,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(); /帮助函

17、数输出教师信息 输出课程信息 输出教师对课程的满意度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<<&

18、quot;=教师排课系统="<<endl;cout<<" 教师人数: "cin >>n;cout<<" 课程数: "cin>>m;int* num=new int*n; / 为每一行分配空间 for(i=0; i<n; +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<

19、;<" 内存分配失败 "<<endl;return ;cout<<" 1.输入教师基本数据 n"cout<<" 2.输入课程基本数据 n"cout<<" 3.输入教师对课程满意度 n"cout<<" 4.排课 n"cout<<" 5.输出排课结果 n"cout<<" 6.帮助n"cout<<" 7.输出教师信息 n"cout<&l

20、t;" 8.输出课程信息 n"cout<<" 9.输出教师对课程满意度 n"cout<<" 10.修改文件数据 n"cout<<" 0.退出n"cout<<"n输入你的选择 :"int ch;do/cout<<"nn请选择 :n"/cout<<" 1.输入教师基本数据 n"/cout<<" 2.输入课程基本数据 n"/cout<<"

21、 3.输入教师对课程满意度 /cout<<" 4.排课n"/cout<<" 5.输出排课结果 n"/cout<<" 6.帮助n"/cout<<" 0.退出 n"/cout<<"n cin>>ch; switch(ch)输入你的选择 :" case 1 : input_teacher(t,n,m);break; case 2 : input_course(c,m);break;case 3 : input_num(num,n,

22、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; i<n; +i)delete nu

23、mi;/ 删除行指针数组 delete num; delete t; delete c; delete a; / 释放内存void input_teacher(teacher *t,int n,int m) / 教师基本数据输入 fstream teachers("d:teachers.txt",ios:out);teachersvv"姓名"<<setw(20)vv"编号"<<setw(20)vv"工作量"<<endl; int i,j,work,id;char name11,n

24、n11; cout<<"n 请输入教师基本数据 :"<<endl;while(1)int total=0;for(i=0;i<n;i+)coutvv"第"<<i+1<<"个教师:n" cout<<" 编号:"while(1)if (cin >> id) break;elsecout<<" 编号应为数字,请重新输入: "<<endl;cin.clear();cin.ignore();cout<

25、;<" 姓名 :"while(1)cin>>name; for(j=0;j<11;j+) if('!'<=namej&&n amejv='')|(''v=namej&&n amejv='、')|''v=na mej&&namej<='' )nnj=0;elsennj=1;if(nn0*nn1*nn2*nn3*nn4*nn5*nn6*nn7*nn8*nn9*nn10=1) break;elsecou

26、t<<" 姓名应为字母,请重新输入: "<<endl;cin.clear();cin.ignore();cout<<" 工作量 :"while(1)if (cin >> work) break;elsecout<<" 工作量应为数字,请重新输入: "<<endl;cin.clear();cin.ignore();total=total+work;if(total>m) cout<<" 总工作量大于课程数, 请重新输入: "&l

27、t;<endl;break; ti.set_teacher(name,id,work);teachers<<name<<setw(20)<<id<<setw(20)<<work<<endl;if(total=m) break;if(total>m) continue;teachers.close();void input_course(course *c,int m) / 课程基本信息输入fstream courses("d:courses.txt",ios:out);coursesvv&q

28、uot;课程名"<<setw(10)vv"课程号"<<setw(10)vv"周学时 "<<setw(10)vv"总学时"<<setw(10)<<"优先级"<<endl;int week_hour,total_hour,d1,id,i,j;char name11;char nn11;for(i=0;i<m;i+) cout<<" 第"vvi+1<v"门课:n"cout<

29、;<"课程号:"while(1)if (cin >> id) break;elsecout<<" 课程号应为数字,请重新输入: "<<endl;cin.clear();cin.ignore();cout<<" 课程名 :"while(1)cin>>name;for(j=0;j<11;j+)if('!'<=namej&&n amej<='')|(''<=namej&&n

30、 amejv='、')|''v=na mej&&namej<='' )nnj=0;elsennj=1;if(nn0*nn1*nn2*nn3*nn4*nn5*nn6*nn7*nn8*nn9*nn 10=1) break;elsecout<<" 课程名应为字母,请重新输入: "<<endl; cin.clear();cin.ignore();cout<<" 周学时 :" while(1) if (cin >> week_hour ) brea

31、k; else cout<<" 周学时应为数字,请重新输入: "<<endl; cin.clear();cin.ignore();cout<<" 总学时 :" while(1)if (cin >> total_hour ) break;elsecout<<" 总学时应为数字,请重新输入: "<<endl; cin.clear();cin.ignore();cout<<" 优先级 :" while(1) if (cin >>

32、; d1) break; else cout<<" 优先级应为数字,请重新输入: "<<endl; cin.clear();cin.ignore(); ci.set_course(name,id,week_hour,total_hour,d1);courses<<name<<setw(10)<<id<<setw(10)<<week_hour<<setw(10)<<total _hour<<setw(10)<<d1<<endl; co

33、urses.close();void input_num(int *num,int n,int m) / 教师对课程满意度输入 fstream nums("d:hope.txt",ios:out);nu ms<<setw(4)vv"满意度"<<setw(6);int nu,i,j,k; for(k=0;k<m;k+)nums«第"vvk+1<v"门课程"<<setw(5);nums<<endl;for(i=0;i<n;i+)nums«第&q

34、uot;<<i+1<<"名老师"<<setw(3);for(j=0;j<m;j+)coutvv"第"<<i+1<<"位老师对第"vvj+1vv"门课程的满意度 "<<endl;/cin>>nu;while(1)if (cin >> nu) break;elsecout<<" 满意度应为数字,请重新输入: "<<endl; cin.clear();cin.ignore();

35、numij=nu; nums<<nu<<setw(13);nums<<endl;nums.close();m) /void arranging(int *num,teacher *t,course *c,arrange *a,int n,int 排课int h,s,i,j,b,k=1,min,min1,q=0; min=c0.get_N();srand(unsigned)time(NULL); for(s=0;s<m;s+)if(cs.get_N()<min)min=cs.get_N();while(h)for(i=0;i<m;i+)if(

36、ci.get_N()=min) / 判断课程优先级min1=num0i;for(j=0;j<n;j+)if( numji<min1&&tj.get_total()<tj.get_work_load() )min1=numji;while(1>0)b=rand()%n;if(b>n)continue;else if(tb.get_total()>tb.get_work_load()continue;else if(numbi!=min1) / 判断教师优先级 continue;else aq.set_x(b);aq.set_y(i);q+; i

37、nt w=tb.get_total()+1; tb.set_total(w);/k=0;cout«"第"vvqvv"次排课"<<endl;break;/if(i=m-1) min+;min+;if(q<m) h=1;else h=0;void print(teacher *t,course *c,arrange *a,int m) /输出排课结果int i,a1,b1;for(i=0;i<m;i+)a1=ai.get_x();b1=ai.get_y();coutvv"第"<<a1+1<

38、;<"位老师上第"vvb1+1vv"门课"<<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

39、.帮助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)cout<<" error!n&qu

40、ot;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)cout<<" error!n" return;char c80;while(!fin.eof() / 判断文件是否读结束fin.read(c,80);cout.write(c,fin.gco

41、unt();fin.close();void print_num() / 输出教师对课程的满意度ifstream fin("d:hope.txt",ios:nocreate);if(!fin)cout<<" error!n"return;char c80;while(!fin.eof() / 判断文件是否读结束fin.read(c,80);cout.write(c,fin.gcount();fin.close();m) /void change(int *num,teacher *t,course *c,arrange *a,int n,in

42、t 修改文件信息int ch;docout<<"nn请选择 :n"cout<<" 1.修改教师基本数据 n"cout<<" 2.修改课程基本数据 n"cout<<" 3.修改教师对课程满意度 n"cout<<" 0.退出n"cout<<"n输入你的选择 :"cin>>ch;switch(ch) case 1 : change_teacher(t,n);break;case 2 : change

43、_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;cout<<" 请输入要修改教师编号: " cin>>ii;for(i=0;i<n;i+)if(ti.get_id()=ii) cout<<" 此教师原信息: "<<e

44、ndl; ti.print();k=i;cout<<" 请输入此教师新信息: "<<endl;cout<<" 编号 :"while(1)if (cin >> aa) break;elsecout<<" 编号应为数字,请重新输入: "<<endl; cin.clear();cin.ignore();cout<<" 姓名 :"while(1)cin>>na;for(j=0;j<11;j+) if('!'

45、<=naj&&n aj<='')|(''<=naj&&n ajv='、')|''v=naj&&na j<='' )nnj=0;elsennj=1;if(nn0*nn1*nn2*nn3*nn4*nn5*nn6*nn7*nn8*nn9*nn 10=1) break;elsecout<<" 姓名应为字母,请重新输入: "<<endl; cin.clear();cin.ignore();cout<<

46、;" 工作量 :"while(1)if (cin >> bb) break;elsecout<<" 工作量应为数字,请重新输入: "<<endl; cin.clear();cin.ignore(); tk.set_teacher(na,aa,bb);fstream teachers("d:teachers.txt",ios:out);teachersvv"姓名"<<setw(20)vv"编号"<<setw(20)vv"工作量&

47、quot;<<endl; for(j=0;j<n;j+) if(j=k) teachers<<na<<setw(20)<<aa<<setw(20)<<bb<<endl;else teachers<<tj.get_name()<<setw(20)<<tj.get_id()<<setw(20)<<tj.ge t_work_load()<<endl;teachers.close();void change_course(course *c,

48、int m) /修改课程信息int i,aa,bb,cc,dd,k,j,ii;char na11;char nn11;cout<<" 请输入要修改课程编号: "cin>>ii;for(i=0;i<m;i+) if(ci.get_course_id()=ii) cout<<" 此课程原信息: "<<endl; ci.print(); k=i;cout<<" 请输入此课程新信息: "<<endl;cout<<" 课程号 :"whi

49、le(1)if (cin >> aa) break;elsecout<<" 课程号应为数字,请重新输入: "<<endl; cin.clear(); cin.ignore();cout<<" 课程名 :"while(1)cin>>na;for(j=0;j<11;j+)if('!'<=naj&&n aj<='')|(''<=naj&&n ajv='、')|''v=

50、naj&&na j<='' ) nnj=0;elsennj=1;if(nn0*nn1*nn2*nn3*nn4*nn5*nn6*nn7*nn8*nn9*nn10=1) break;elsecout<<" 课程名应为字母,请重新输入: "<<endl; cin.clear();cin.ignore();cout<<" 周学时 :"while(1)if (cin >> bb ) break;elsecout<<" 周学时应为数字,请重新输入: "

51、;<<endl;cin.clear();cin.ignore();cout<<" 总学时 :"while(1)if (cin >> cc ) break;elsecout<<" 总学时应为数字,请重新输入: "<<endl;cin.clear();cin.ignore();cout<<"优先级 :"while(1)if (cin >> dd) break;elsecout<<" 优先级应为数字,请重新输入: "<&

52、lt;endl;cin.clear();cin.ignore(); ck.set_course(na,aa,bb,cc,dd);fstream courses("d:courses.txt",ios:out);coursesvv"课程名"<<setw(10)vv"课程号"<<setw(10)vv"周学时 "<<setw(10)vv"总学时"<<setw(10)<<"优先级"<<endl;for(j=0;j

53、<m;j+) if(j=k)courses<<na<<setw(10)<<aa<<setw(10)<<bb<<setw(10)<<cc<<setw(10)<<dd<< endl;elsecourses<<cj.get_course_name()<<setw(10)<<cj.get_course_id()<<setw(10)<<cj.get_week_hour()<<setw(10)<<c

54、j.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<<" 请输入要修改的教师的编号: "while(1)if (cin >> ii) break;elsecout<<" 满意度应为数字,请重新输入: "<<endl;cin.clear();cin.ignore();for(i=0;i<n;i+)if(ti.get_id()=ii) a1=i;cout<<" 请输入要修改的课程的编号 :"while(1)if (cin >> jj) break;elsecout<

温馨提示

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

评论

0/150

提交评论