欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

    教师排课系统课程设计报告.docx

    • 资源ID:3555156       资源大小:44.94KB        全文页数:27页
    • 资源格式: DOCX        下载积分:6.99金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要6.99金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    教师排课系统课程设计报告.docx

    教师排课系统课程设计报告面向对象技术与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磅,居中对齐; 2.标题用黑体四号,段前、段后距6磅; 3.正文用小四号宋体,行距为1.25倍行距; 4.标题按“一”、“”、“1”、“”顺序编号。 星期 上机周次 时第17周 间安排 一 1-4 二 1-4 三 1-4 四 1-4 五 1-4 六 日 1 指导时间地点 上机时间,E520 一系统总体方案: 某学校每位教师都有教学工作量,教师对他所希望讲授的课程表达为一个期望值,1,2,n,其中1是最高的期望值。课程也有优先级,1,2,n,用来决定将课程分给教师的顺序,其中1是最高的优先级。设计一个程序针对某些课程给某些教师进行排课。 要求: 程序运行时,用户输入教师信息、课程信息,教师对所希望讲授课程的期望值以及教学工作量等相关信息,所有信息应保存在文件中。 程序根据课程的优先级以及教师对课程的期望值进行排课。最后输出排课情况,即某位老师上某门课程,以及某位老师的工作量。 可以实现对文件的修改。 可以在各个界面中实现退出以及进入的循环。 可以退出本系统。 程序应能实现对不少于20门课和10个教师的排课,并且使每个教师的满意度达到最大,不存在工作量不满的教师以及未分配的课等情况。 方法: 为了公平起见,程序随机分配课程,如果10门课程都有优先级1,程序以随机的顺序将这些课程分给教师,如果10位教师对某门课程的期望值为1,程序应从10位教师中随机选择一个。 2 2.设计思路和主要步骤: 我们使用面向对象程序设计方法的思路进行分析,得出了整个系统应该涉及三个类的信息和操作,分别是教师类,课程类,排课类。各类信息以文件方式的储存以及实现各种功能和界面的实现是在main函数中体现。 教师类 teacher:包括私有数据成员 姓名 name,编号 id ,工作量work_load ,已有工作量 total。成员函数包括设置和得到私有成员值的成员函数与输出教师信息的成员函数。 课程类 course:私有成员有 课程名 course_name,课程号 course_id,周课时 week_hour,总课时 total_hour,优先度 N。 由于考虑到这应该是一个完整的排系统,加上我们希望这个系统的界面能够做到清晰、明了,我们经讨论后决定采用一个总操作界面,一个分操作界面。 总操作界面应该包括 修改文件信息界面中又因该包括 1.修改教师文件 2.修改课程文件 3.修改教师期望度信息 0.退出 3 4 3.各功能模块与流程图: 说明:以下是对应上面系统功能模块实图的系统流程图,因为制图的不便,故只将成功完成一次操作的流程给出,而“各个流程中中途如果输入了菜单中没有的项以及数据保存文件中没有的数据而被强制退出”的流程因为过于复杂而没有给出,实际情况读者朋友一试便知。在此我们对此表示深深的歉意,我们以后一定会努力完善我们各方面的工作的。 5 开始 输入教师基本数据 输入课程基本数据 输入教师期望度 排课 输出排课结果 帮助 输出教师信息 输出课程信息 输出教师期望度 文件修改 退出 修改教修改课修改教师信息 程信息 师期望度信息 各功能模块: 命令 1 2 3 4 5 6 7 8 9 10 对应函数 input_teacher input_course input_num arranging print print_help print_teacher print_course print_num change 功能描述 输入数据并写入文件 输入数据并写入文件 输入数据并写入文件 排课 输出排课结果 帮助 输出文件信息 输出文件信息 输出文件信息 修改文件信息 结束 程序代码: 6 Teacher.h: #include<iostream.h> #include<string.h> class teacher private: 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<<"姓名:"<<name<<endl; 7 cout<<"编号:"<<id<<endl; cout<<"工作量:"<<work_load<<endl; Course.h: #include<string.h> class course private: 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; 8 void course:print cout<<"课程名:"<<course_name<<endl; cout<<"编号:"<<course_id<<endl; cout<<"周学时:"<<week_hour<<endl; cout<<"总学时:"<<total_hour<<endl; cout<<"优先级:"<<N<<endl; Arrange.h: class arrange private: 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 <stdlib.h> #include<fstream.h> #include<iomanip.h> #include<stdio.h> #include"teacher.h" #include"course.h" 9 #include"arrange.h" #include <time.h> /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; 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<<"内存分配失败"<<endl; return ; cout<<" 1. 输入教师基本数据n" cout<<" 2. 输入课程基本数据n" 10 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 输入你的选择:" int ch; do /cout<<"nn 请选择: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) 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; i<n; +i) delete numi; 11 /删除行指针数组 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; cout<<"n 请输入教师基本数据:"<<endl; while(1) int total=0; for(i=0;i<n;i+) cout<<"第"<<i+1<<"个教师:n" cout<<"编号:" while(1) if (cin >> id) break; else cout<<"编号应为数字,请重新输入:"<<endl; cin.clear; cin.ignore; cout<<"姓名:" while(1) cin>>name; for(j=0;j<11;j+) if ( ('!'<=namej&&namej<='')|(''<=namej&&namej<='')|''<=namej&&namej<='' ) nnj=0; else nnj=1; 12 if(nn0*nn1*nn2*nn3*nn4*nn5*nn6*nn7*nn8*nn9*nn10=1) break; else cout<<"姓名应为字母,请重新输入:"<<endl; cin.clear; cin.ignore; cout<<"工作量:" while(1) if (cin >> work) break; else cout<<"工作量应为数字,请重新输入:"<<endl; cin.clear; cin.ignore; total=total+work; if(total>m) cout<<"总工作量大于课程数,请重新输入:"<<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); 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;i<m;i+) cout<<"第"<<i+1<<"门课:n" cout<<"课程号:" while(1) 13 if (cin >> id) break; else cout<<"课程号应为数字,请重新输入:"<<endl; cin.clear; cin.ignore; cout<<"课程名:" while(1) cin>>name; for(j=0;j<11;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<<"周学时:" while(1) if (cin >> week_hour ) break; else cout<<"周学时应为数字,请重新输入:"<<endl; cin.clear; cin.ignore; cout<<"总学时:" 14 while(1) if (cin >> total_hour ) break; else cout<<"总学时应为数字,请重新输入:"<<endl; cin.clear; cin.ignore; cout<<"优先级:" while(1) if (cin >> 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; courses.close; void input_num(int *num,int n,int m) /教师对课程满意度输入 fstream nums("d:hope.txt",ios:out); nums<<setw(4)<<"满意度"<<setw(6); int nu,i,j,k; for(k=0;k<m;k+) nums<<"第"<<k+1<<"门课程"<<setw(5); nums<<endl; for(i=0;i<n;i+) nums<<"第"<<i+1<<"名老师"<<setw(3); for(j=0;j<m;j+) cout<<"第"<<i+1<<"位老师对第"<<j+1<<"门课程的满意度"<<endl; /cin>>nu; 15 while(1) if (cin >> nu) break; else cout<<"满意度应为数字,请重新输入:"<<endl; cin.clear; cin.ignore; numij=nu; nums<<nu<<setw(13); nums<<endl; 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;s<m;s+) if(cs.get_N<min) min=cs.get_N; while(h) for(i=0;i<m;i+) if(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; 16 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+; int w=tb.get_total+1; tb.set_total(w); /k=0; cout<<"第"<<q<<"次排课"<<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; 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" 17 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<<"File 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) cout<<"File 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) cout<<"File open error!n" 18 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 cout<<"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_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<<"此教师原信息:"<<endl; ti.print; 19 k=i; cout<<"请输入此教师新信息:"<<endl; cout<<"编号:" while(1) if (cin >> aa) break; else cout<<"编号应为数字,请重新输入:"<<endl; cin.clear; cin.ignore; cout<<"姓名:" while(1) cin>>na; for(j=0;j<11;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<<"工作量:" while(1) if (cin >> bb) break; else 20 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;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.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; cout<<"请输入要修改课程编号:" cin>>ii; for(i=0;i<m;i+) if(ci.get_course_id=ii) cout<<"此课程原信息:"<<endl; ci.print; k=i; cout<<"请输入此课程新信息:"<<endl; cout<<"课程号:" while(1) if (cin >> aa) break; else cout<<"课程号应为数字,请重新输入:"<<endl; cin.clear; cin.ignore; 21 cout<<"课程名:" while(1) cin>>na; for(j=0;j<11;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<<"周学时:" while(1) if (cin >> bb ) break; else cout<<"周学时应为数字,请重新输入:"<<endl; cin.clear; cin.ignore; cout<<"总学时:" while(1) if (cin >> cc ) break; else cout<<"总学时应为数字,请重新输入:"<<endl; cin.clear; 22 cin.ignore;

    注意事项

    本文(教师排课系统课程设计报告.docx)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开