基于C的教師排課程序課程設(shè)計(jì)_第1頁
基于C的教師排課程序課程設(shè)計(jì)_第2頁
基于C的教師排課程序課程設(shè)計(jì)_第3頁
基于C的教師排課程序課程設(shè)計(jì)_第4頁
基于C的教師排課程序課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、程序類課程設(shè)計(jì)說明書指導(dǎo)教師: 姓 名: 學(xué) 號(hào): 年 月 日一需求分析本應(yīng)用程序是基于c+的教師排課程序該程序可以根據(jù)教師對(duì)課程的期望,課程優(yōu)先級(jí)對(duì)相應(yīng)課程,教師進(jìn)行合理分配,既可以使每位教師達(dá)到最大滿意度,又能很好的安排課程,使課程不出現(xiàn)重排,漏排等情況.根據(jù)要求,本程序應(yīng)該實(shí)現(xiàn)課程信息載入,教師信息載入,保存相關(guān)信息到文件,排課,打印排課結(jié)果等同時(shí),我們還要為使用者即客戶提供一個(gè)人性化的界面,使系統(tǒng)應(yīng)用方便快捷更重要的是,我們還要提供相應(yīng)的錯(cuò)誤處理機(jī)制二系統(tǒng)功能實(shí)現(xiàn)根據(jù)需求分析,本程序?qū)崿F(xiàn)以下功能:. 主菜單 主菜單主要是為客戶顯示本程序的主要功能及相關(guān)操作提示,人性化的主菜單可以讓客戶

2、很容易的使用程序相關(guān)功能本程序主菜單設(shè)計(jì)簡潔,界面簡單,使用者可以根據(jù)相關(guān)提示進(jìn)行操作,方便快捷. 信息載入信息載入模塊主要實(shí)現(xiàn)教師信息載入和課程信息載入教師信息主要包括教師姓名,教師號(hào),工作量及對(duì)相應(yīng)課程的期望值課程信息主要包括課程名,課程號(hào),周學(xué)時(shí),總學(xué)時(shí),優(yōu)先級(jí)此模塊是使用者(客戶)把相關(guān)信息載入數(shù)據(jù)庫進(jìn)行排課操作的前提,它提供了良好的交互界面,操作簡單方便. 信息保存信息保存模塊主要實(shí)現(xiàn)教師信息和課程信息的保存功能由于教師信息和課程信息載入量大,為以后查詢方便最好存儲(chǔ)在文件中,同時(shí)也算對(duì)數(shù)據(jù)的備份此模塊提供路徑選擇功能,客戶可以根據(jù)自己的情況選擇相應(yīng)的路徑存儲(chǔ)信息文件,安全高效. 教師

3、排課教師排課模塊主要實(shí)現(xiàn)根據(jù)課程優(yōu)先級(jí),教師對(duì)課程的期望值大小來安排課程情況的功能此模塊考慮到不同課程優(yōu)先級(jí)可能相同及不同教師對(duì)某門課程期望值可能相同的情況為讓教師達(dá)到最大滿意度,本模塊采用隨機(jī)分配原則,通過生成偽隨機(jī)數(shù)來安排期望值相同的課程,從而達(dá)到公平公正原則同時(shí),本模塊實(shí)現(xiàn)每門課都得到安排,不出現(xiàn)漏課,重復(fù)選取的功能達(dá)到教師工作量得到滿足且不會(huì)操工作量,合理有效. 排課結(jié)果打印此模塊主要實(shí)現(xiàn)排課完成后相關(guān)信息的顯示功能主要顯示教師姓名,工作量,教授課程打印界面簡單明了,易于查看. 系統(tǒng)保護(hù)系統(tǒng)保護(hù)模塊主要實(shí)現(xiàn)非法操作時(shí)對(duì)程序的損壞或惡意破壞此模塊主要應(yīng)用于當(dāng)操作人員(客戶)沒有事先載入教

4、師信息和課程信息就進(jìn)行保存,排課操作行為時(shí)的保護(hù)安全可靠. 退出此模塊主要實(shí)現(xiàn)操作完畢后的退出功能退出時(shí),此模塊會(huì)顯示一個(gè)感謝界面,并完成后臺(tái)資源釋放等功能,很人性化三流程圖程序流程圖主菜單提示按鍵選擇操作信息載入信息保存教師排課打印結(jié)果課程信息教師信息教師信息保存課程信息保存是否繼續(xù)退出系統(tǒng)0退出yn四數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì).結(jié)點(diǎn)設(shè)計(jì)本程序主要采用結(jié)構(gòu)體存儲(chǔ)相關(guān)結(jié)點(diǎn)信息,教師信息通過tlist結(jié)構(gòu)體實(shí)現(xiàn),其中包括教師姓名,教師號(hào),工作量,相應(yīng)課程期望值及預(yù)留緩存區(qū)空間課程信息通過clist結(jié)構(gòu)體實(shí)現(xiàn),其中包括課程名,課程號(hào),周學(xué)時(shí),總學(xué)時(shí),優(yōu)先級(jí),被選標(biāo)記(是否已經(jīng)分配)等信息tclist結(jié)構(gòu)體存儲(chǔ)教

5、師期望值比較高的課程信息,包括課程名及教師對(duì)其期望值.結(jié)構(gòu)設(shè)計(jì)本程序采用結(jié)構(gòu)體存儲(chǔ)結(jié)點(diǎn)信息,通過鏈表完成相關(guān)操作,如查詢,刪除等鏈表添加刪除結(jié)點(diǎn)靈活高效,符合本程序要求.子類設(shè)計(jì)本程序設(shè)計(jì)一個(gè)教師類和一個(gè)課程類,教師類在其內(nèi)部主要實(shí)現(xiàn)初始化教師鏈表(教師信息),保存教師信息到文件功能課程類主要實(shí)現(xiàn)初始化課程鏈表(課程信息),保存課程信息到文件功能同時(shí),在教師類中增加一個(gè)print友元函數(shù),實(shí)現(xiàn)排課結(jié)果打印功能在課程類中增加一個(gè)convert友元函數(shù),實(shí)現(xiàn)由給定字符串查找相應(yīng)課程結(jié)點(diǎn)并返回指向該結(jié)點(diǎn)指針的功能五類設(shè)計(jì).教師類:數(shù)據(jù)成員tlist* pt 功能說明pt為指向教師結(jié)點(diǎn)的指針,維持著整

6、個(gè)教師鏈表通過它可以動(dòng)態(tài)添加刪除教師信息成員函數(shù)void initdata();void save();friend void print(teacher&,ptlist);功能說明initdata()初始化教師鏈表(教師信息),save()保存教師信息到文件print(teacher&,ptlist)排課結(jié)果打印.課程類:數(shù)據(jù)成員clist* pc功能說明pc為指向課程結(jié)點(diǎn)的指針,維持著整個(gè)課程鏈表,通過它可以動(dòng)態(tài)添加刪除課程信息成員函數(shù)void initdata();void save();friend pclist convert(course&,char * s

7、);功能說明initdata()初始化課程鏈表(課程信息)save()保存課程信息到文件convert(course&,char * s)通過給定字符串查找指向課程名與該字符串相同的課程結(jié)點(diǎn)的指針進(jìn)而通過該指針操作相應(yīng)課程結(jié)點(diǎn)中的數(shù)據(jù)六算法設(shè)計(jì).難點(diǎn)問題描述:多個(gè)教師對(duì)某門課程具有相同期望值及多門課程具有相同優(yōu)先級(jí)時(shí)的公平分配算法設(shè)計(jì)解決方案:先將課程鏈表按優(yōu)先級(jí)由高到低排序,依次從教師鏈表頭結(jié)點(diǎn)開始處理,取出該結(jié)點(diǎn)所對(duì)應(yīng)課程期望值最高者,掃描其余教師結(jié)點(diǎn),查看是否其他結(jié)點(diǎn)對(duì)該課程有更高的期望,若有則取出該結(jié)點(diǎn)所對(duì)應(yīng)課程較高者,掃描其余教師結(jié)點(diǎn),查看是否其他結(jié)點(diǎn)對(duì)該課程有更高的期望,若

8、該結(jié)點(diǎn)為最高,則把該課程分配給它,并修改該課程被選標(biāo)記依次重復(fù)上述過程直到該教師結(jié)點(diǎn)工作量得到滿足然后按此過程處理其余教師結(jié)點(diǎn)如果出現(xiàn)不同教師某門課程期望值相同,則使用偽隨機(jī)數(shù)生成函數(shù)rand()實(shí)現(xiàn)隨機(jī)分配,達(dá)到公平原則函數(shù)實(shí)現(xiàn)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;i<m;i+) while(m) m=n->next; if(m=null) break; fo

9、r(int j=0;j<m;j+) if(m->tci.ipri=n->tcj.ipri)&&(0=strcmp(m->,n->) num=rand()%2; switch(num) case 0:(convert(c,q->)->mc=false; break; case 1:(convert(c,q->)->mc=false; break; default:break; n=n->next; while(q) for(int i=0;i<

10、m;i+) if(convert(c,q->)->mc) sum+=(convert(c,q->)->all_time;(convert(c,q->)->mc=false; if(i=0) strcpy(q->cbuf,q->); else strcat(q->cbuf," "); strcat(q->cbuf,q->); if(sum>=q->work_time) break; sum=0; q=q->next

11、; cout<<"課程已排好!"<<endl;七主要代碼.主菜單:void dis_menu() bool ttag=false;bool ctag=false;char tag;int choice=0;dosystem("cls");cout<<">>>>>>>歡迎使用教師排課系統(tǒng),請(qǐng)根據(jù)提示完成相關(guān)操作<<<<<<<<<<<<<<<<<<<<&

12、quot;<<endl;cout<<">>>>>>>1:載入教師信息"<<endl;cout<<">>>>>>>2:載入課程信息"<<endl;cout<<">>>>>>>3:存儲(chǔ)教師信息"<<endl;cout<<">>>>>>>4:存儲(chǔ)課程信息"<

13、;<endl;cout<<">>>>>>>5:教師排課"<<endl;cout<<">>>>>>>6:打印排課結(jié)果"<<endl;cout<<">>>>>>>0:退出"<<endl;fflush(stdin);cout<<"請(qǐng)輸入選擇:"<<endl;cin>>choice;sw

14、itch(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<<"*教師信息保存*"<<en

15、dl;if(!ttag)cout<<"請(qǐng)先載入教師信息"<<endl;elsetea.save();break; case 4:system("cls");cout<<"*課程信息保存*"<<endl;if(!ctag) cout<<"請(qǐng)先載入課程信息"<<endl;elsecou.save();break;case 5:system("cls");cout<<"*教師排序界面*"<&l

16、t;endl;if(!ttag|!ctag)cout<<"請(qǐng)先載入相關(guān)信息"<<endl;elsesort(tea,cou);break;case 6:system("cls");cout<<"*排課信息打印*"<<endl;if(!ttag|!ctag)cout<<"請(qǐng)先載入相關(guān)信息"<<endl;elseprint(tea);break;default:system("cls");cout<<"t*

17、thanks for your use*"<<endl;cout<<"t*感謝使用本系統(tǒng)!*"<<endl;exit(0);cout<<"系統(tǒng)使用中."<<endl;cout<<"是否繼續(xù)其他操作? y/y"<<endl;cin>>tag;while(tag='y'|tag='y');教師信息載入void teacher:initdata()char tag;ptlist p=pt;ptlist s

18、;int t=0;cout<<"請(qǐng)輸入教師信息:"<<endl;cout<<"姓名t教師號(hào)t工作量"<<endl; do if(t>=1) cout<<"請(qǐng)輸入教師信息:"<<endl; cout<<"姓名t教師號(hào)t工作量"<<endl; s=(ptlist)malloc(sizeof(tlist); cin>>s->name>>s->num>>s->work_

19、time; cout<<"請(qǐng)輸入相應(yīng)課程名及期望值(從高到低,默認(rèn)不超過3門):"<<endl; for(int i=0;i<m;i+) cin>>s->>>s->tci.ipri; fflush(stdin); s->next=null; if(!pt) pt=s; p=pt; else p->next=s; p=p->next; t+; cout<<"是否繼續(xù)輸入信息:"<<endl; fflush(stdin); cin>

20、;>tag; system("cls"); while(tag='y'|tag='y');.教師信息保存void teacher:save()ptlist p=pt;char path20="c:teacher.txt"char str50='0'cout<<"請(qǐng)選擇保存教師信息文件的路徑:"<<endl;cin>>path;ofstream outfile(path);if(!outfile)cerr<<"保存失敗,請(qǐng)檢查

21、所選路徑是否正確!"<<endl;return;sprintf(str,"姓名t教師號(hào)t工作量n");outfile.write(char*)str,strlen(str);while(p)sprintf(str,"%st%st%dn",p->name,p->num,p->work_time);outfile.write(char*)str,strlen(str);sprintf(str,"對(duì)相應(yīng)課程的期望值:n");outfile.write(char*)str,strlen(str);for

22、(int i=0;i<m;i+) sprintf(str,"%st%dn",p->,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;pclis

23、t s;char tag;int i=0;cout<<"請(qǐng)輸入課程信息:"<<endl;cout<<"課程名t課程號(hào)t周學(xué)時(shí)t總學(xué)時(shí)t優(yōu)先級(jí)"<<endl;doif(i>=1)cout<<"請(qǐng)輸入課程信息:"<<endl; cout<<"課程名t課程號(hào)t周學(xué)時(shí)t總學(xué)時(shí)t優(yōu)先級(jí)"<<endl;s=(pclist)malloc(sizeof(clist);cin>>s->name>>s-&

24、gt;num>>s->week_time>>s->all_time>>s->priority;fflush(stdin);s->mc=true;s->next=null;i+;if(!pc)pc=s;p=pc; else p->next=s; p=p->next; cout<<"是否繼續(xù)載入課程信息? y/y"<<endl; cin>>tag; system("cls");while(tag='y'|tag='y

25、9;);.課程信息保存void course:save()char path20="c:course.txt"pclist p=pc;char str100='0'cout<<"請(qǐng)輸入文件保存路徑:"<<endl;cin>>path;ofstream outfile(path);if(!outfile)cerr<<"保存失敗,請(qǐng)檢查輸入路徑是否正確"return;sprintf(str,"課程名t課程號(hào)t周學(xué)時(shí)t總學(xué)時(shí)t優(yōu)先級(jí)n");outfile.w

26、rite(char*)str,strlen(str); while(p) sprintf(str,"%st%st%dt%dt%dn",p->name,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) ptl

27、ist q=t.pt; ptlist n=t.pt; ptlist m=n; int sum=0; int num=-1; srand(time(0); for(int i=0;i<m;i+) while(m) m=n->next; if(m=null) break; for(int j=0;j<m;j+) if(m->tci.ipri=n->tcj.ipri)&&(0=strcmp(m->,n->) num=rand()%2; switch(num) case 0: (convert(c,q->t

28、)->mc=false; break; case 1: (convert(c,q->)->mc=false; break; default: break; n=n->next; while(q) for(int i=0;i<m;i+) if(convert(c,q->)->mc) sum+=(convert(c,q->)->all_time; (convert(c,q->)->mc=false; if(i=0) strcpy(q->cbuf,q->); else strcat(q->cbuf," "); strcat(q->cbuf,q->);

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論