




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、蕆一需求分析肄功能需求:莁 1 、錄入學(xué)生的缺勤記錄;芀 2 、修改某個(gè)學(xué)生的缺勤記錄;薆 3 、查詢某個(gè)學(xué)生的缺勤情況;蒄 4 、統(tǒng)計(jì)某段時(shí)間內(nèi),缺勤學(xué)生學(xué)號(hào)及缺勤次數(shù),按缺勤權(quán)值統(tǒng)計(jì)學(xué)生的負(fù)分值,并能進(jìn)行排序;膁 5 、統(tǒng)計(jì)某段時(shí)間內(nèi),有學(xué)生曠課的課程及曠課人次,按曠課人次由多到少排序;羈 6 、系統(tǒng)以菜單方式工作羈數(shù)據(jù)需求袃 本系統(tǒng)主要涉及的數(shù)據(jù)有學(xué)生缺課信息類和有關(guān)信息排序類。 學(xué)生缺課信息包括缺課時(shí)間,學(xué)生姓名,課程名稱,第幾節(jié),學(xué)生遲到次數(shù),早退次數(shù),請(qǐng)假次數(shù),曠課次數(shù)。有關(guān)信息排序類包括對(duì)課程排序和對(duì)姓名排序。袂性能需求聿要求系統(tǒng)具有可靠性,速度要快肇二、系統(tǒng)的主要功能薆(1)、
2、錄入學(xué)生的缺課記錄,函數(shù)代碼void input(records *r)模塊中。首先提示用戶按照正確的格式進(jìn)行學(xué)生缺課記錄的錄入,這個(gè)步驟比較簡(jiǎn)單,只需要不斷地將記錄的每個(gè)數(shù)據(jù)項(xiàng)存入結(jié)構(gòu)體對(duì)應(yīng)的成員中。螞 (2) 、修改某個(gè)學(xué)生的缺課記錄,函數(shù)代碼 void edt(records *r) 模塊中。首先必須查找到你所需要修改的那位的學(xué)生全部缺課記錄。這個(gè)模塊不需要定義新的結(jié)構(gòu)體。在修改前當(dāng)然要檢查記錄是否為空了,不為空的話,可以設(shè)置下面這五個(gè)菜單供用戶選擇: 1、缺課日期 2、第幾節(jié)課 3、課程名稱 4、學(xué)生姓名 5、缺課類型 6、退出修改程序并返回系統(tǒng)主菜單。修改很簡(jiǎn)單,僅需要對(duì)該學(xué)生的某個(gè)
3、部分進(jìn)行替換即可。采用switch 語(yǔ)句很快就解決。最后實(shí)現(xiàn)對(duì)所選記錄的修改,完成后更新原有的學(xué)生記錄。膀(3)、查詢某個(gè)學(xué)生的缺課情況,函數(shù)代碼void search(records *r)模塊中。達(dá)到查詢結(jié)果按照日期升序排序,同一天內(nèi)按照所缺課程的時(shí)間升序排序的目的,膅 (4) 、統(tǒng)計(jì),函數(shù)代碼為 void order_c() 和 void order_s() 的類模塊中。其中實(shí)現(xiàn)對(duì)課程排序和對(duì)學(xué)生姓名的排序。羆三、流程圖莃學(xué)生考勤系統(tǒng)結(jié)構(gòu)圖:羈薇蒅肅罿蚆襖袃肁肈基類的數(shù)據(jù)成員和成員描述芄薄 record袈 String date,cname,sname;膆 int cno,type;蚃
4、void set();肀 string tostr();衿芅類名 / 函數(shù)名膂描述袀類名 / 函數(shù)名蚇 record袆基類薁 edt()螆 records芅實(shí)現(xiàn)學(xué)生曠課情況排序芁 del()的類膈 wt/rd()蚅實(shí)現(xiàn)對(duì)文件的輸入和輸肂 search()出蒅 input()芃錄入學(xué)生的缺課記錄羈 search_s ()羈描述螈修改學(xué)生信息蝿刪除學(xué)生信息肀查找學(xué)生信息袇一定范圍查找學(xué)生信息袇 edt ()螂修改學(xué)生信息螁 main()羈主函數(shù)羆四、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)膂 此程序運(yùn)用多種條件語(yǔ)句, 主體采用的是動(dòng)態(tài)數(shù)組、 指針。系統(tǒng)的設(shè)計(jì)采用了數(shù)組語(yǔ)句、選擇語(yǔ)句和循環(huán)語(yǔ)句 , 在需要處理大量同類數(shù)據(jù)時(shí) ,
5、 這樣就使程序書寫更加簡(jiǎn)潔。程序使用了布爾函數(shù)。選擇語(yǔ)句多采用 if 多分支選擇結(jié)構(gòu)與 switch 語(yǔ)句。首先計(jì)算 switch 表達(dá)式,然后在 caes 子句中尋找值相等的常量表達(dá)式,并以此為入口符號(hào),由此開始順序執(zhí)行。循環(huán)語(yǔ)句采用了 for 語(yǔ)句等、 do-while 語(yǔ)句, for 語(yǔ)句用于已知循環(huán)次數(shù)的循環(huán)結(jié)構(gòu),括號(hào)中的三個(gè)量分別用來(lái)表示循環(huán)變量初值、 循環(huán)終值和循環(huán)增量。 do-while 語(yǔ)句先循環(huán)后判斷, Break 語(yǔ)句在 switch 語(yǔ)句中,保證多分支情況的正確執(zhí)行,在循環(huán)語(yǔ)句中,強(qiáng)制終止本層循環(huán)。保存和讀取函數(shù)是典型的函數(shù)功能,一個(gè)程序是由若干個(gè)函數(shù)組成的,保存和讀取函
6、數(shù)是和其他函數(shù)互相調(diào)用的蒂再有使用有關(guān)類的設(shè)計(jì),學(xué)生缺課信息類和有關(guān)信息排序類,如下:羀 class record/學(xué)生缺課信息類肄裊 public:膂 void set(string d,int cno,string c,string s,int type)螇 蕆芄羂袈薅date.assign(d);/日期cname.assign(c);/課程名字sname.assign(s);/學(xué)生姓名this-cno=cno;/對(duì)缺課類型的選擇為 int型this-type=type;/缺課類型蚄 葿 void set(record re)袀 袇膃腿蚇肆date.assign(re.date);cnam
7、e.assign(ame);sname.assign(re.sname);this-cno=o;this-type=re.type;薂 罿 string date,cname,sname;蝿 int cno,type;膄;羂蝕 class records /實(shí)現(xiàn)學(xué)生曠課情況排序的類螀蒆 public:莁records() /構(gòu)造函數(shù)莀 薇蚅肅膁蠆r=new record100;n=0;void order_s() /姓名的排序羇薄袁蒆肆羃蟻蕆芄莃莂蕿薆int i;int j;string *s=new stringn;int *c=new int n;s0.assign(r
8、0.sname);c0=1;int k=1,flag;for( i=1;in;i+)flag=0;for( j=0;jk;j+)if(ri.sname=sj)螂cj+;膂莆蚅芁袂蒈肇羅荿葿膅莄聿芆芄螄衿莈蚆膃薀flag=1;break;if(!flag)sk=ri.sname;ck+=1;for(i=1;i0;j-)if(cjcj-1)int tmp=cj;cj=cj-1;cj-1=tmp;string stmp=sj;sj=sj-1;sj-1=stmp;荿螅螞莀cout 曠課學(xué)生姓名 t 曠課次數(shù) endl;for(i=0;ik;i+)coutsittciendl;膆膇肂void order
9、_c() /課程排序肁羋芅螅螁荿莄膄薁肇螆蚄節(jié)膈襖int i,j;string *s=new stringn;int *c=new int n;s0.assign(ame);c0=1;int k=1,flag;for( i=1;in;i+)flag=0;for(j=0;jk;j+)if(ame=sj)cj+;flag=1;break;肅肂艿芇蒃螃肇蒞袂艿肈蒄莁罿腿袆肅螀羇羄蒄蒀羈if(!flag)sk=ame;ck+=1;for(i=1;i0;j-)if(cjcj-1)int tmp=cj;cj=cj-1;cj-1=tmp;string stmp=sj;sj=sj
10、-1;sj-1=stmp;cout 課程名 t曠課人次 endl;for(i=0;ik;i+)coutsitciendl;莇 袃 record *r;芀 int n;肀;蒅把所有的學(xué)生記錄都保存到一個(gè)文件里面,然后根據(jù)需要再將里面需要查找的元素進(jìn)行查找,相應(yīng)的排序可能就是將他們盡可能壓進(jìn)關(guān)聯(lián)式容器map,有的部分就壓入set 里面,這些都是根據(jù)模塊的功能來(lái)選定的。可以這么說(shuō),選擇好合理的數(shù)據(jù)結(jié)構(gòu)查找與排序就可以一勞永逸了。這點(diǎn)在后面部分會(huì)有詳細(xì)的說(shuō)明。還有就是對(duì)各功能子函數(shù)的編寫應(yīng)用。芃五、類設(shè)計(jì)羈系統(tǒng)中主要涉及了兩個(gè)類:袇一個(gè)是 class record /關(guān)于學(xué)生考勤基本信息類袇另一個(gè)是
11、class records/實(shí)現(xiàn)學(xué)生曠課情況排序的類螂六、主要算法設(shè)計(jì)螁關(guān)鍵算法:羈曠課情況的排序:羆 class records/ 實(shí)現(xiàn)學(xué)生曠課情況排序的類膂蒂 public:羀records() /構(gòu)造函數(shù)肄 裊 r=new record100;膂 n=0;螇曠課記錄的修改:蕆 cout 請(qǐng)輸入要修改缺課記錄的學(xué)生姓名 : tmp;蚄 t1.assign(tmp);葿 for(i=0;in;i+)袀 if(r-ri.sname=t1)袇 膃flag=7;腿break;蚇 肆 if(!flag)薂 罿蝿cout 查無(wú)此學(xué)生 !ri.date;蝕 t2=o;螀 t3=r-ri.c
12、name;蒆 t4=r-ri.sname;莁 t5=r-ri.type;莄曠課項(xiàng)目的修改!薁 cout 請(qǐng)輸入要修改的項(xiàng)目 :n(1. 缺課日期 2. 缺課節(jié)次 3. 缺課名稱 4. 學(xué)生姓名5. 缺課類型 6. 全部 ) flag;肄 switch(flag)薂 羈 case 1:goto e1;蒈 case 2:goto e2;裊 case 3:goto e3;莀 case 4:goto e4;聿 case 5:goto e5;袇 case 6:goto e1;薅 default:goto e0;蒁 膈用到的知識(shí)點(diǎn)有:函數(shù)的作用域、函數(shù)的調(diào)用、數(shù)組賦值、函數(shù)循環(huán)、以及類的定義,另外還用到了
13、 for 函數(shù)、 getch 函數(shù)、 switch 函數(shù)、 case 函數(shù)、 default函數(shù)等等。莆七、主要代碼蒞第一部分:學(xué)生考勤管理系統(tǒng)蒃#include stdlib.h薀#include hanshushixian.h螆#include record.h肆#include 芀#include 蚈#include 膅#include 螆 using namespace std;莁#include record.h肁衿 int main()節(jié)蒃 c1: / 主菜單實(shí)現(xiàn)腿 system(cls);羋 肅 cout*endl;芀cout* 歡迎 訪問學(xué)生 考勤管理 系統(tǒng) *endl;羋 c
14、out*endl;螇cout* 系 統(tǒng)主 菜 單 :1.顯 示所 有 學(xué) 生 的缺 課 記 錄*endl;螃cout*2.錄入 學(xué)生 的缺 課 信 息記 錄*endl;芁cout*3.查詢 某個(gè) 學(xué)生 的 缺 課情 況*endl;蝕cout*4. 修改 某個(gè) 學(xué)生 的 缺 課記 錄*endl;膇cout*5.刪除 某個(gè) 學(xué)生 的 缺 課記 錄*endl;薄cout*6.統(tǒng)計(jì) 某段 時(shí)間 內(nèi) 曠 課情 況*endl;莃cout*7. 退 出 系 統(tǒng)*endl;螈 cout*endl;薆芄 膀肁coutO( _)O 請(qǐng)選擇你所需要的操作 O( _ )O: chose;if(chose=7)exit
15、(0);records *r=new records();rd(r);switch(chose)case 1:pri(r);break;case 2:input(r);break;肀蝕薈芆肂螈羇羆case 3:search(r);break;case 4:edt(r);break;case 5:del(r);break;case 6:search_s(r);break;default:goto c2;cout 是否返回主菜單 ? (y/n)你的選擇 : yn;if(yn=y)goto c1;else if(yn=n)exit(0);else goto c3;袆return 0;膃肂莇第二部分:
16、 record.h(類的設(shè)計(jì)部分)芅#include 羃#include 肅 using namespace std;螀羈#ifndef record_class蚃#define record_class袁袈 class record /關(guān)于學(xué)生考勤基本信息類莈蒄 public:羂 void set(string d,int cno,string c,string s,int type)芀 螇膄羃荿芇date.assign(d);cname.assign(c);sname.assign(s);this-cno=cno;this-type=type;羅 螁 void set(record & r
17、e)螁 蚆蚅袂袀肅date.assign(re.date);/assign可以避免不必要的內(nèi)存分配,可以提高效率cname.assign(ame);sname.assign(re.sname);this-cno=o;this-type=re.type;蒞 袃 string tostr()羈 蝿膆蟻莀膈袆螂葿蚇莂襖袁肇肅string s;char tmp3;s.assign(date);itoa(cno,tmp,10);s.append(#);s.append(tmp);/直接添加另一個(gè)完整的字符串s.append(#);s.append(cname);s.append(#)
18、;s.append(sname);itoa(type,tmp,10);s.append(#);s.append(tmp);return s;蟻 罿 string date;蒆 string cname;袃 string sname;螞 int cno;肈 int type;羆;薃螄#endif record_class蒀蒞#ifndef records_class莄#define records_class薁蕿 class records/ 實(shí)現(xiàn)學(xué)生曠課情況排序的類肈肄 public:薂records() /構(gòu)造函數(shù)羈 蒈裊莀聿袇薅蒁膈莆蒞r=new record100;n=0;void or
19、der_s() /姓名的排序int i;int j;string *s=new stringn;int *c=new int n;s0.assign(r0.sname);蒃薀螆肆芀蚈膅螆莁肁衿節(jié)蒃腿羋肅芀羋螇螃芁c0=1;int k=1,flag;for( i=1;in;i+)flag=0;for( j=0;jk;j+)if(ri.sname=sj)cj+;flag=1;break;if(!flag)sk=ri.sname;ck+=1;for(i=1;i0;j-)蝕if(cjcj-1)膇薄莃螈薆芄膀肁羅羄膂艿蠆螅芃int tmp=cj;cj=cj-1;cj-1=tmp;string stmp=
20、sj;sj=sj-1;sj-1=stmp;cout 曠課學(xué)生姓名 t 曠課次數(shù) endl;for(i=0;ik;i+)coutsittciendl;void order_c() /課程排序莇膈蒅肀蝕薈芆int i,j;string *s=new stringn;int *c=new int n;s0.assign(ame);c0=1;int k=1,flag;for( i=1;in;i+)肂螈羇羆膃膁莆螆羀艿袆膃肂莇芅羃肅螀蚇莂蕿薇flag=0;for(j=0;jk;j+)if(ame=sj)cj+;flag=1;break;if(!flag)sk=ame;ck+
21、=1;for(i=1;i0;j-)if(cjcj-1)int tmp=cj;cj=cj-1;肇膃蟻罿蒆袃螞肈羅cj-1=tmp;string stmp=sj;sj=sj-1;sj-1=stmp;cout 課程名 t曠課人次 endl;for(i=0;ik;i+)coutsitciendl;薃 蒀 record *r;蒀 int n;蒞;莄#endif records_class薁薈第三部分: hanshushixian.h(功能子函數(shù)的實(shí)現(xiàn)部分)螄#include record.h肄#include 薂#include 蚇#include 蕆#include stdlib.h襖#include
22、 莀 using namespace std;聿袇薅 void wt(records *r)/實(shí)現(xiàn)對(duì)文件的輸出蒁膇 ofstream outf(data.txt);莆 for(int i=0;in;i+)肁 outfri.tostr()endl;蒂outf!endl;薀螆螂 void rd(records *r)/實(shí)現(xiàn)對(duì)文件的輸入芀蚈 ifstream inf(data.txt);膅 if(inf.eof()薂 莁螇cout 記錄為空 !n=0;肅 while(true)芀 芇螇螃芁蝕膆薃聿螈薆芄膀inf.getline(tmp,10,#);if(tmp0=!)break;t1.assign(
23、tmp);inf.getline(tmp,3,#);t2=atoi(tmp);inf.getline(tmp,30,#);t3.assign(tmp);inf.getline(tmp,30,#);t4.assign(tmp);inf.getline(tmp,3);t5=atoi(tmp);r-rr-n+.set(t1,t2,t3,t4,t5);袆 羅羄膁 bool timechk(string t1)艿蒅 int year=atoi(t1.substr(0,2).c_str();螅 int month=atoi(t1.substr(2,2).c_str();罿 int day=atoi(t1.
24、substr(4,2).c_str();莇 if(!(t1.length()=6&year0&year0&month0&day32)襖 蒅肀cout 日期錄入有誤 !請(qǐng)重新錄入 : endl;return false;蝕 薇 else return true;羈肂袈 void input(records *r)/錄入學(xué)生的缺課記錄羇螞string t1,t3,t4;衿 int t2,t5,flag=0;羆 char yn;莆cout 錄入一條學(xué)生缺課記錄 :endl;/endl表示終止一行并刷新緩沖區(qū)蒂 m1:羀cout 請(qǐng)輸入缺課日期 : ( 例如 110627) t1;裊 if(!(tim
25、echk(t1)goto m1;膂 m2:肂 cout 請(qǐng)輸入缺第幾節(jié)課 : t2;芅 if(t210)羃 衿 cout 節(jié)次錄入有誤 ! 請(qǐng)重新錄入 : endl;螀 goto m2;蚄 蚃 cout 請(qǐng)輸入缺課名稱 : t3;袈 cout 請(qǐng)輸入缺課學(xué)生姓名 : t4;蒄 m3:羂羆螇膄cout 請(qǐng)輸入缺課類型 : (1.遲到 2. 早退 3. 請(qǐng)假 4. 曠課 ) t5;if(t54)蝿荿cout 類型輸入有誤 !請(qǐng)重新錄入 : endl;goto m3;芆 羄 for(int i=0;in;i+)螁if(r-ri.date=t1&o=t2&ame=t3&r-
26、ri.sname=t4& r-ri.type=t5)蕆 蚆cout 該條記錄已存在 , 是否添加為新記錄 ? (y/n) yn;衿if(yn=y)break;肅else if(yn=n)goto n2;蒞else goto n1;蠆 羈 r-rr-n+.set(t1,t2,t3,t4,t5);薄 n2:袁 cout 是否繼續(xù)輸入 ? (y/n) yn;羄 if(yn=y)goto m1;螞 else if(yn=n)螂 葿蚇莂蕿cout 保存修改 ? (y/n) yn;if(yn=y)wt(r);else return;肆 肇 else goto n3;膃蟻罿 void prione(reco
27、rd r)蒆袃 coutr.datett螞 ot肈 amett羅 r.snamett薃 flush;蒀 switch(r.type)蒀 蒞 case 1:cout 遲到 endl;break;莄 case 2:cout 早退 endl;break;薁 case 3:cout 請(qǐng)假 endl;break;薈 case 4:cout 曠課 n=0)聿 袇 cout 記錄為空 !endl;薅 return;蒁 膇coutn序號(hào) t缺課日期節(jié)次 t課程名稱 t學(xué)生姓名 t缺課類型 endl;莆 for(int i=0;in;i+)肁 蒂薀coutitri);蠆 螅芄薂 void edt
28、(records *r)/修改學(xué)生信息腿蒆int i;芅蝕if(r-n=0)薈 芆 cout 記錄為空 !endl;莆 return;肅 羇 cout 請(qǐng)輸入要修改缺課記錄的學(xué)生姓名 : tmp;蚇 t1.assign(tmp);芅 for(i=0;in;i+)薄 if(r-ri.sname=t1)肀 蕆flag=7;羂break;螞 薀 if(!flag)膈 肄螀cout 查無(wú)此學(xué)生 !ri.date;膅 t2=o;膃 t3=ame;莈 t4=r-ri.sname;蚈 t5=r-ri.type;羂 cout 請(qǐng)輸入要修改的項(xiàng)目 :n(1. 缺課日期 2. 缺課節(jié)次 3. 缺課名稱 4. 學(xué)生姓名 5.缺課類型 6. 全部 ) flag;葿羄蚃蒁裊肅螂羀蚅袃switch(flag)case 1:goto e1;case 2:goto
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 雙方意向合作合同范本
- 賣房合同范本200字
- 保溫施工承攬合同范本
- 單位補(bǔ)簽合同范本
- 代工合同范本 文庫(kù)
- 半掛車買賣合同范本
- ktv酒水供銷合同范本
- 雙面合同范本
- 分布式光伏居間合同范本
- 打井合同范本共
- 張燕芳《國(guó)際貿(mào)易實(shí)務(wù)》(第5版)-參考答案示例-已認(rèn)證老師可下載
- 2025屆新高考地理熱點(diǎn)沖刺復(fù)習(xí):糧食安全、農(nóng)業(yè)技術(shù)措施及可持續(xù)發(fā)展
- 政府招商大使合作協(xié)議書
- 完整廣東梅大高速路面塌方災(zāi)害學(xué)習(xí)課件
- AQ/T 9009-2015 生產(chǎn)安全事故應(yīng)急演練評(píng)估規(guī)范(正式版)
- 個(gè)人租房合同范本-房屋租賃合同范本
- 火鍋店運(yùn)營(yíng)管理的問題與解決方案
- CJJ2-2008城市橋梁工程施工與質(zhì)量驗(yàn)收規(guī)范
- 新媒體營(yíng)銷:營(yíng)銷方式+推廣技巧+案例實(shí)訓(xùn) 微課版 第2版 教學(xué)大綱
- 德育教育研究課題申報(bào)書
- 2024年岳陽(yáng)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)匯編
評(píng)論
0/150
提交評(píng)論