版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、面向?qū)ο蠹夹g(shù)與C+課程設(shè)計任務(wù)書課 程面向?qū)ο蠹夹g(shù)與C+ 班級xxxx指導(dǎo)教師xxx題 目教師排課系統(tǒng)完成時間xxxxx至xxxxx主要內(nèi)容1問題描述每位教師都有教學(xué)工作量,教師對他所希望講授的課程表達為一個期望值,1,2,n,其中1是最高的期望值。課程也有優(yōu)先級,1,2,n,用來決定將課程分給教師的順序,其中1是最高的優(yōu)先級。設(shè)計一個程序針對某些課程給某些教師進行排課。2基本要求程序運行時,用戶輸入教師信息(姓名、教師號、工作量)、課程信息(課程名、課程號、周學(xué)時、總學(xué)時、優(yōu)先級),教師對所希望講授課程的期望值以及教學(xué)工作量等相關(guān)信息,所有信息應(yīng)保存在文件中,程序根據(jù)課程的優(yōu)先級以及教師對課
2、程的期望值進行排課。為了公平起見,程序隨機分配課程,如果10門課程都有優(yōu)先級1,程序以隨機的順序?qū)⑦@些課程分給教師,如果10位教師對某門課程的期望值為1,程序應(yīng)從10位教師中隨機選擇一個。最后輸出排課情況,即某位老師上某門課程,以及某位老師的工作量。3測試數(shù)據(jù)程序應(yīng)能實現(xiàn)對不少于20門課和10個教師的排課,并且使每個教師的滿意度達到最大,不存在工作量不滿的教師以及未分配的課等情況。設(shè)計報告要求1封面:(格式附后)2課程設(shè)計任務(wù)書3課程設(shè)計報告: 系統(tǒng)總體方案 設(shè)計思路和主要步驟 各功能模塊和流程圖 設(shè)計代碼 心得體會和參考資料說明:學(xué)生完成課程設(shè)計后,提交課程設(shè)計報告及軟件,要求文字通暢、字跡
3、工整(也可用以打?。?,文字不少于5000 字,并裝訂成冊。版面要求1.題目用黑體三號,段后距18磅(或1行),居中對齊;2.標(biāo)題用黑體四號,段前、段后距6磅(或0.3行);3.正文用小四號宋體,行距為1.25倍行距;4.標(biāo)題按“一”、“”、“1”、“”順序編號。上機時間安排星期周次一二三四五六日第17周1-41-41-41-41-4指導(dǎo)時間地點上機時間,E520一系統(tǒng)總體方案:某學(xué)校每位教師都有教學(xué)工作量,教師對他所希望講授的課程表達為一個期望值,1,2,n,其中1是最高的期望值。課程也有優(yōu)先級,1,2,n,用來決定將課程分給教師的順序,其中1是最高的優(yōu)先級。設(shè)計一個程序針對某些課程給某些教師
4、進行排課。要求:(一)程序運行時,用戶輸入教師信息(姓名、教師號、工作量)、課程信息(課程名、課程號、周學(xué)時、總學(xué)時、優(yōu)先級),教師對所希望講授課程的期望值以及教學(xué)工作量等相關(guān)信息,所有信息應(yīng)保存在文件中。(二)程序根據(jù)課程的優(yōu)先級以及教師對課程的期望值進行排課。最后輸出排課情況,即某位老師上某門課程,以及某位老師的工作量。(三)可以實現(xiàn)對文件的修改。(四)可以在各個界面中實現(xiàn)退出以及進入的循環(huán)。(五)可以退出本系統(tǒng)。(六)程序應(yīng)能實現(xiàn)對不少于20門課和10個教師的排課,并且使每個教師的滿意度達到最大,不存在工作量不滿的教師以及未分配的課等情況。方法:為了公平起見,程序隨機分配課程,如果10門
5、課程都有優(yōu)先級1,程序以隨機的順序?qū)⑦@些課程分給教師,如果10位教師對某門課程的期望值為1,程序應(yīng)從10位教師中隨機選擇一個。2.設(shè)計思路和主要步驟:我們使用面向?qū)ο蟪绦蛟O(shè)計方法的思路進行分析,得出了整個系統(tǒng)應(yīng)該涉及三個類的信息和操作,分別是教師類,課程類,排課類。各類信息以文件方式的儲存以及實現(xiàn)各種功能和界面的實現(xiàn)是在main函數(shù)中體現(xiàn)。(一)教師類 teacher:包括私有數(shù)據(jù)成員 姓名 name,編號 id ,工作量work_load ,已有工作量 total(方便判斷是否排滿課)。成員函數(shù)包括設(shè)置和得到私有成員值的成員函數(shù)與輸出教師信息的成員函數(shù)。(2)課程類 course:私有成員有
6、 課程名 course_name,課程號 course_id,周課時 week_hour,總課時 total_hour,優(yōu)先度 N。(3)由于考慮到這應(yīng)該是一個完整的排系統(tǒng),加上我們希望這個系統(tǒng)的界面能夠做到清晰、明了,我們經(jīng)討論后決定采用一個總操作界面,一個分操作界面??偛僮鹘缑鎽?yīng)該包括 (分別對應(yīng) 1.輸入教師信息 2.輸入課程信息 3輸入教師對課程期望度 4.排課 5.輸出排課結(jié)果 6.顯示操作菜單 7.輸出教師文件信息 8.輸出課程文件信息 9.輸出教師期望度文件信息 10.修改文件信息 0.退出)修改文件信息界面中又因該包括 1.修改教師文件 2.修改課程文件 3.修改教師期望度信息
7、 0.退出3.各功能模塊與流程圖:說明:以下是對應(yīng)上面系統(tǒng)功能模塊實圖的系統(tǒng)流程圖,因為制圖的不便,故只將成功完成一次操作的流程給出,而“各個流程中中途如果輸入了菜單中沒有的項以及數(shù)據(jù)保存文件中沒有的數(shù)據(jù)而被強制退出”的流程因為過于復(fù)雜(每步都要進行判斷)而沒有給出,實際情況讀者朋友一試便知。在此我們對此表示深深的歉意,我們以后一定會努力完善我們各方面的工作的。開始輸入教師基本數(shù)據(jù)輸入課程基本數(shù)據(jù)輸入教師期望度排課輸出排課結(jié)果幫助輸出教師信息輸出課程信息輸出教師期望度文件修改退出修改教師信息修改課程信息修改教師期望度信息結(jié)束各功能模塊:命令對應(yīng)函數(shù)功能描述1input_teacher輸入數(shù)據(jù)并
8、寫入文件2input_course輸入數(shù)據(jù)并寫入文件3input_num輸入數(shù)據(jù)并寫入文件4arranging排課5print輸出排課結(jié)果6print_help幫助7print_teacher輸出文件信息8print_course輸出文件信息9print_num輸出文件信息10change修改文件信息(五)程序代碼:Teacher.h:#include#includeclass teacherprivate:char name11;int id;int work_load;int total;public:teacher();void set_teacher(char *pn,int i,in
9、t 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;voi
10、d teacher:print()cout姓名:nameendl;cout編號:idendl;cout工作量:work_loadendl;Course.h:#includeclass 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()return course_name;int g
11、et_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,p
12、name);course_id=i;week_hour=w;total_hour=t;N=n;void course:print()cout課程名:course_nameendl;cout編號:course_idendl;cout周學(xué)時:week_hourendl;cout總學(xué)時:total_hourendl;cout優(yōu)先級:Nendl;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
13、 x;int get_y()return y;排課.cpp:#include#include #include#include#include#includeteacher.h#includecourse.h#includearrange.h#include /using namespace std;void input_teacher(teacher *t,int n,int m); /教師基本數(shù)據(jù)輸入void input_course(course *c,int m); /課程基本信息輸入void input_num(int *num,int n,int m); /教師對課程滿意度輸入vo
14、id arranging(int *num,teacher *t,course *c,arrange *a,int n,int m); /排課void print(teacher *t,course *c,arrange *a,int m); /輸出排課結(jié)果void print_help(); /幫助函數(shù)void print_teacher(); /輸出教師信息void print_course(); /輸出課程信息void print_num(); /輸出教師對課程的滿意度void change(int *num,teacher *t,course *c,arrange *a,int n,i
15、nt 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=教師排課系統(tǒng)=endl; coutn; coutm; int* num=new int*n; /為每一行分配空間 for(i=0; in; +i) numi=new intm; teacher
16、*t; course *c; arrange *a; t=new teachern; c=new coursem; a=new arrangem; if(t=NULL|c=NULL|a=NULL) cout內(nèi)存分配失敗endl; return ; cout 1. 輸入教師基本數(shù)據(jù)n;cout 2. 輸入課程基本數(shù)據(jù)n;cout 3. 輸入教師對課程滿意度n;cout 4. 排課n;cout 5. 輸出排課結(jié)果n;cout 6. 幫助n;cout 7. 輸出教師信息n;cout 8. 輸出課程信息n;cout 9. 輸出教師對課程滿意度n;cout 10.修改文件數(shù)據(jù)n;cout 0. 退出n;
17、coutn 輸入你的選擇:; int ch; do /coutnn 請選擇:n;/cout 1. 輸入教師基本數(shù)據(jù)n;/cout 2. 輸入課程基本數(shù)據(jù)n;/cout 3. 輸入教師對課程滿意度n;/cout 4. 排課n;/cout 5. 輸出排課結(jié)果n;/cout 6. 幫助n;/cout 0. 退出n;/coutch;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(n
18、um,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; in; +i) delete numi; /刪除行指針數(shù)組 delete num;
19、delete t; delete c; delete a; /釋放內(nèi)存void input_teacher(teacher *t,int n,int m) /教師基本數(shù)據(jù)輸入fstream teachers(d:teachers.txt,ios:out);teachers姓名setw(20)編號setw(20)工作量endl;int i,j,work,id;char name11,nn11;coutn 請輸入教師基本數(shù)據(jù):endl;while(1) int total=0;for(i=0;in;i+) cout第i+1個教師:n; cout id) break;else cout編號應(yīng)為數(shù)字,
20、請重新輸入:endl;cin.clear();cin.ignore();coutname;for(j=0;j11;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姓名應(yīng)為字母,請重新輸入:endl; cin.clear(); cin.ignore();cout work) break;else cout工作量應(yīng)為數(shù)字,請重新輸入:m) cout總工作量大于課程數(shù),
21、請重新輸入:endl;break;ti.set_teacher(name,id,work);teachersnamesetw(20)idsetw(20)workm) continue;teachers.close();void input_course(course *c,int m) /課程基本信息輸入fstream courses(d:courses.txt,ios:out);courses課程名setw(10)課程號setw(10)周學(xué)時setw(10)總學(xué)時setw(10)優(yōu)先級endl;int week_hour,total_hour,d1,id,i,j;char name11;ch
22、ar nn11;for(i=0;im;i+) cout第i+1門課:n; cout id) break;else cout課程號應(yīng)為數(shù)字,請重新輸入:endl;cin.clear();cin.ignore();coutname;for(j=0;j11;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課程名應(yīng)為字母,請重新輸入:endl; cin.clear();
23、cin.ignore(); cout week_hour ) break;else cout周學(xué)時應(yīng)為數(shù)字,請重新輸入:endl;cin.clear();cin.ignore();cout total_hour ) break;else cout總學(xué)時應(yīng)為數(shù)字,請重新輸入:endl;cin.clear();cin.ignore(); cout d1) break;else cout優(yōu)先級應(yīng)為數(shù)字,請重新輸入:endl;cin.clear();cin.ignore(); ci.set_course(name,id,week_hour,total_hour,d1);coursesnamesetw(
24、10)idsetw(10)week_hoursetw(10)total_hoursetw(10)d1endl; courses.close();void input_num(int *num,int n,int m) /教師對課程滿意度輸入fstream nums(d:hope.txt,ios:out);numssetw(4)滿意度setw(6);int nu,i,j,k;for(k=0;km;k+)nums第k+1門課程setw(5);numsendl;for(i=0;in;i+)nums第i+1名老師setw(3);for(j=0;jm;j+)cout第i+1位老師對第j+1門課程的滿意度
25、nu;while(1) if (cin nu) break; else cout滿意度應(yīng)為數(shù)字,請重新輸入:endl; cin.clear(); cin.ignore(); numij=nu;numsnusetw(13);numsendl;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;sm;s+)if(cs.get
26、_N()min)min=cs.get_N();while(h)for(i=0;im;i+) if(ci.get_N()=min) /判斷課程優(yōu)先級 min1=num0i;for(j=0;jn;j+)if ( numjimin1&tj.get_total()0)b=rand()%n;if(bn)continue;else if(tb.get_total()tb.get_work_load()continue;else if(numbi!=min1) /判斷教師優(yōu)先級continue;elseaq.set_x(b);aq.set_y(i);q+;int w=tb.get_total()+1;tb.
27、set_total(w);/k=0;cout第q次排課endl;break; /if(i=m-1) min+;min+;if(qm) h=1;else h=0;void print(teacher *t,course *c,arrange *a,int m) /輸出排課結(jié)果int i,a1,b1;for(i=0;im;i+) a1=ai.get_x();b1=ai.get_y();cout第a1+1位老師上第b1+1門課endl; ta1.print();cb1.print();void print_help() /幫助函數(shù) cout 1. 輸入教師基本數(shù)據(jù)n;cout 2. 輸入課程基本數(shù)據(jù)
28、n;cout 3. 輸入教師對課程滿意度n;cout 4. 排課n;cout 5. 輸出排課結(jié)果n;cout 6. 幫助n;cout 7. 輸出教師信息n;cout 8. 輸出課程信息n;cout 9. 輸出教師對課程滿意度n;cout 10.修改文件數(shù)據(jù)n;cout 0. 退出n;void print_teacher() /輸出教師信息 ifstream fin(d:teachers.txt,ios:nocreate);if(!fin)coutFile open error!n;return;char c80;while(!fin.eof() /判斷文件是否讀結(jié)束 fin.read(c,80
29、); cout.write(c,fin.gcount(); fin.close();void print_course() /輸出課程信息 ifstream fin(d:courses.txt,ios:nocreate);if(!fin)coutFile open error!n;return;char c80;while(!fin.eof() /判斷文件是否讀結(jié)束 fin.read(c,80); cout.write(c,fin.gcount(); fin.close();void print_num() /輸出教師對課程的滿意度 ifstream fin(d:hope.txt,ios:no
30、create);if(!fin)coutFile open error!n;return;char c80;while(!fin.eof() /判斷文件是否讀結(jié)束 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 coutnn 請選擇:n;cout 1. 修改教師基本數(shù)據(jù)n;cout 2. 修改課程基本數(shù)據(jù)n;cout 3. 修改教師對課程滿意度n;cout 0. 退
31、出n;coutch;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) /修改教師數(shù)據(jù)int i,aa,bb,k,j,ii;char na11;char nn11;coutii;for(i=0;in;i+)if(ti.get_id()=ii)cout此教師原信息:endl;ti.
32、print();k=i; cout請輸入此教師新信息:endl; cout aa) break;else cout編號應(yīng)為數(shù)字,請重新輸入:endl;cin.clear();cin.ignore();coutna;for(j=0;j11;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姓名應(yīng)為字母,請重新輸入:endl; cin.clear(); cin.ignore();cout bb
33、) break;else cout工作量應(yīng)為數(shù)字,請重新輸入: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;jn;j+) if(j=k) teachersnasetw(20)aasetw(20)bbendl; else teacherstj.get_name()setw(20)tj.get_id()setw(20)tj.get_work_load()endl;
34、 teachers.close();void change_course(course *c,int m) /修改課程信息 int i,aa,bb,cc,dd,k,j,ii;char na11;char nn11;coutii;for(i=0;im;i+)if(ci.get_course_id()=ii)cout此課程原信息:endl;ci.print();k=i; cout請輸入此課程新信息:endl;cout aa) break;else cout課程號應(yīng)為數(shù)字,請重新輸入:endl;cin.clear();cin.ignore();coutna;for(j=0;j11;j+) if (
35、(!=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課程名應(yīng)為字母,請重新輸入:endl; cin.clear(); cin.ignore(); cout bb ) break;else cout周學(xué)時應(yīng)為數(shù)字,請重新輸入:endl;cin.clear();cin.ignore();cout cc ) break;else cout總學(xué)時應(yīng)為數(shù)字,請重新輸入:endl;cin.clear();cin.igno
36、re(); cout dd) break;else cout優(yōu)先級應(yīng)為數(shù)字,請重新輸入:endl;cin.clear();cin.ignore(); ck.set_course(na,aa,bb,cc,dd);fstream courses(d:courses.txt,ios:out);courses課程名setw(10)課程號setw(10)周學(xué)時setw(10)總學(xué)時setw(10)優(yōu)先級endl; for(j=0;jm;j+) if(j=k) coursesnasetw(10)aasetw(10)bbsetw(10)ccsetw(10)ddendl; else coursescj.get
37、_course_name()setw(10)cj.get_course_id()setw(10)cj.get_week_hour()setw(10)cj.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 ii) break; else cout滿意度應(yīng)為數(shù)字,請重新輸入:endl; cin.clear(); cin.ignore(); for(i=0;in;i+)if(ti.get_id()=ii) a1=i;cout jj) break; else cout滿意度應(yīng)為數(shù)字,請重新輸入:endl; cin.clear(); cin.ignore(); for(i=0;im;i+)if(ci.get_course_id()=jj) b1=i;cout nn) break; else cout滿意
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)衛(wèi)半年工作總結(jié)范文(4篇)
- 2025年度暑假工招募及勞動保障服務(wù)合同2篇
- 2025年度四人股份合作協(xié)議書:跨境電商平臺股權(quán)合作與品牌建設(shè)3篇
- 2025年度新能源產(chǎn)品銷售代理框架協(xié)議2篇
- 2025年度工地施工機械設(shè)備智能化升級合同2篇
- 2024煤炭銷售居間服務(wù)合同范本(含稅收政策說明)3篇
- 2025版巖土工程勘測與施工合同范本6篇
- 2025年度金融機構(gòu)與中小企業(yè)跨境融資合同3篇
- 二零二五年度二手房按揭買賣合同(含貸款期限調(diào)整)
- 二零二五年大棚設(shè)施更新改造與節(jié)能降耗合同3篇
- TSG 51-2023 起重機械安全技術(shù)規(guī)程 含2024年第1號修改單
- 《正態(tài)分布理論及其應(yīng)用研究》4200字(論文)
- GB/T 45086.1-2024車載定位系統(tǒng)技術(shù)要求及試驗方法第1部分:衛(wèi)星定位
- 浙江省杭州市錢塘區(qū)2023-2024學(xué)年四年級上學(xué)期英語期末試卷
- 1古詩文理解性默寫(教師卷)
- 廣東省廣州市越秀區(qū)2021-2022學(xué)年九年級上學(xué)期期末道德與法治試題(含答案)
- 2024-2025學(xué)年六上科學(xué)期末綜合檢測卷(含答案)
- 在線教育平臺合作合同助力教育公平
- 工地鋼板短期出租合同模板
- 女排精神課件教學(xué)課件
- 2024年湖南省公務(wù)員考試《行測》真題及答案解析
評論
0/150
提交評論