基于C++的教师排课程序课程设计.doc_第1页
基于C++的教师排课程序课程设计.doc_第2页
基于C++的教师排课程序课程设计.doc_第3页
基于C++的教师排课程序课程设计.doc_第4页
基于C++的教师排课程序课程设计.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

程序类课程设计说明书指导教师: 姓 名: 学 号: 年 月 日一需求分析本应用程序是基于c+的教师排课程序该程序可以根据教师对课程的期望,课程优先级对相应课程,教师进行合理分配,既可以使每位教师达到最大满意度,又能很好的安排课程,使课程不出现重排,漏排等情况.根据要求,本程序应该实现课程信息载入,教师信息载入,保存相关信息到文件,排课,打印排课结果等同时,我们还要为使用者即客户提供一个人性化的界面,使系统应用方便快捷更重要的是,我们还要提供相应的错误处理机制二系统功能实现根据需求分析,本程序实现以下功能:. 主菜单 主菜单主要是为客户显示本程序的主要功能及相关操作提示,人性化的主菜单可以让客户很容易的使用程序相关功能本程序主菜单设计简洁,界面简单,使用者可以根据相关提示进行操作,方便快捷. 信息载入信息载入模块主要实现教师信息载入和课程信息载入教师信息主要包括教师姓名,教师号,工作量及对相应课程的期望值课程信息主要包括课程名,课程号,周学时,总学时,优先级此模块是使用者(客户)把相关信息载入数据库进行排课操作的前提,它提供了良好的交互界面,操作简单方便. 信息保存信息保存模块主要实现教师信息和课程信息的保存功能由于教师信息和课程信息载入量大,为以后查询方便最好存储在文件中,同时也算对数据的备份此模块提供路径选择功能,客户可以根据自己的情况选择相应的路径存储信息文件,安全高效. 教师排课教师排课模块主要实现根据课程优先级,教师对课程的期望值大小来安排课程情况的功能此模块考虑到不同课程优先级可能相同及不同教师对某门课程期望值可能相同的情况为让教师达到最大满意度,本模块采用随机分配原则,通过生成伪随机数来安排期望值相同的课程,从而达到公平公正原则同时,本模块实现每门课都得到安排,不出现漏课,重复选取的功能达到教师工作量得到满足且不会操工作量,合理有效. 排课结果打印此模块主要实现排课完成后相关信息的显示功能主要显示教师姓名,工作量,教授课程打印界面简单明了,易于查看. 系统保护系统保护模块主要实现非法操作时对程序的损坏或恶意破坏此模块主要应用于当操作人员(客户)没有事先载入教师信息和课程信息就进行保存,排课操作行为时的保护安全可靠. 退出此模块主要实现操作完毕后的退出功能退出时,此模块会显示一个感谢界面,并完成后台资源释放等功能,很人性化三流程图程序流程图主菜单提示按键选择操作信息载入信息保存教师排课打印结果课程信息教师信息教师信息保存课程信息保存是否继续退出系统0退出yn四数据结构设计.结点设计本程序主要采用结构体存储相关结点信息,教师信息通过tlist结构体实现,其中包括教师姓名,教师号,工作量,相应课程期望值及预留缓存区空间课程信息通过clist结构体实现,其中包括课程名,课程号,周学时,总学时,优先级,被选标记(是否已经分配)等信息tclist结构体存储教师期望值比较高的课程信息,包括课程名及教师对其期望值.结构设计本程序采用结构体存储结点信息,通过链表完成相关操作,如查询,删除等链表添加删除结点灵活高效,符合本程序要求.子类设计本程序设计一个教师类和一个课程类,教师类在其内部主要实现初始化教师链表(教师信息),保存教师信息到文件功能课程类主要实现初始化课程链表(课程信息),保存课程信息到文件功能同时,在教师类中增加一个print友元函数,实现排课结果打印功能在课程类中增加一个convert友元函数,实现由给定字符串查找相应课程结点并返回指向该结点指针的功能五类设计.教师类:数据成员tlist* pt 功能说明pt为指向教师结点的指针,维持着整个教师链表通过它可以动态添加删除教师信息成员函数void initdata();void save();friend void print(teacher&,ptlist);功能说明initdata()初始化教师链表(教师信息),save()保存教师信息到文件print(teacher&,ptlist)排课结果打印.课程类:数据成员clist* pc功能说明pc为指向课程结点的指针,维持着整个课程链表,通过它可以动态添加删除课程信息成员函数void initdata();void save();friend pclist convert(course&,char * s);功能说明initdata()初始化课程链表(课程信息)save()保存课程信息到文件convert(course&,char * s)通过给定字符串查找指向课程名与该字符串相同的课程结点的指针进而通过该指针操作相应课程结点中的数据六算法设计.难点问题描述:多个教师对某门课程具有相同期望值及多门课程具有相同优先级时的公平分配算法设计解决方案:先将课程链表按优先级由高到低排序,依次从教师链表头结点开始处理,取出该结点所对应课程期望值最高者,扫描其余教师结点,查看是否其他结点对该课程有更高的期望,若有则取出该结点所对应课程较高者,扫描其余教师结点,查看是否其他结点对该课程有更高的期望,若该结点为最高,则把该课程分配给它,并修改该课程被选标记依次重复上述过程直到该教师结点工作量得到满足然后按此过程处理其余教师结点如果出现不同教师某门课程期望值相同,则使用伪随机数生成函数rand()实现随机分配,达到公平原则函数实现void sort(teacher& t,course& c) ptlist q=t.pt;ptlist n=t.pt; ptlist m=n; 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)&(0=strcmp(,) num=rand()%2; switch(num) case 0:(convert(c,)-mc=false; break; case 1:(convert(c,)-mc=false; break; default:break; n=n-next; while(q) 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;七主要代码.主菜单:void dis_menu() bool ttag=false;bool ctag=false;char tag;int choice=0;dosystem(cls);cout欢迎使用教师排课系统,请根据提示完成相关操作endl;cout1:载入教师信息endl;cout2:载入课程信息endl;cout3:存储教师信息endl;cout4:存储课程信息endl;cout5:教师排课endl;cout6:打印排课结果endl;cout0:退出endl;fflush(stdin);cout请输入选择:choice;switch(choice)case 1:system(cls);cout*教师信息载入*endl; tea.initdata();ttag=true;break;case 2:system(cls);cout*课程信息载入*endl;cou.initdata();ctag=true;break;case 3:system(cls);cout*教师信息保存*endl;if(!ttag)cout请先载入教师信息endl;elsetea.save();break; case 4:system(cls);cout*课程信息保存*endl;if(!ctag) cout请先载入课程信息endl;elsecou.save();break;case 5:system(cls);cout*教师排序界面*endl;if(!ttag|!ctag)cout请先载入相关信息endl;elsesort(tea,cou);break;case 6:system(cls);cout*排课信息打印*endl;if(!ttag|!ctag)cout请先载入相关信息endl;elseprint(tea);break;default:system(cls);coutt*thanks for your use*endl;coutt*感谢使用本系统!*endl;exit(0);cout系统使用中.endl;cout是否继续其他操作? y/ytag;while(tag=y|tag=y);教师信息载入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-nums-work_time; cout请输入相应课程名及期望值(从高到低,默认不超过3门):endl; for(int i=0;s-tci.ipri; fflush(stdin); s-next=null; if(!pt) pt=s; p=pt; else p-next=s; p=p-next; t+; cout是否继续输入信息:tag; system(cls); while(tag=y|tag=y);.教师信息保存void teacher:save()ptlist p=pt;char path20=c: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(str);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;.课程信息载入void course:initdata()pclist p=pc;pclist s;char tag;int i=0;cout请输入课程信息:endl;cout课程名t课程号t周学时t总学时t优先级=1)cout请输入课程信息:endl; cout课程名t课程号t周学时t总学时t优先级s-names-nums-week_times-all_times-priority;fflush(stdin);s-mc=true;s-next=null;i+;if(!pc)pc=s;p=pc; else p-next=s; p=p-next; cout是否继续载入课程信息? y/ytag; system(cls);while(tag=y|tag=y);.课程信息保存void course:save()char path20=c:course.txt;pclist p=pc;char str100=0;cout请输入文件保存路径:path;ofstream outfile(path);if(!outfile)cerrname,p-num,p-week_time,p-all_time,p-priority);outfile.write(char*)str,strlen(str);p=p-next;outfile.close();cout保存成功!endl;.教师排课void sort(teacher& t,course& c) ptlist q=t.pt; ptlist n=t.pt; ptlist m=n; 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)&(0=strcmp(,) num=rand()%2; switch(num) case 0: (convert(c,)-mc=false; break; case 1: (convert(c,)-mc=false; break; default: break; n=n-next; while(q) 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;.排课结

温馨提示

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

评论

0/150

提交评论