學生考勤管理系統(tǒng)課程設計.doc_第1頁
學生考勤管理系統(tǒng)課程設計.doc_第2頁
學生考勤管理系統(tǒng)課程設計.doc_第3頁
學生考勤管理系統(tǒng)課程設計.doc_第4頁
學生考勤管理系統(tǒng)課程設計.doc_第5頁
免費預覽已結束,剩余34頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、.學號12080102172012-2013 學年 第二學期高級語言程序設計課程設計報告題目:學生考勤管理系統(tǒng)專業(yè):計算機科學與技術班級:12(2 )班姓名:天棟指導教師:淮寧成績:計算機與信息工程系2013年6月30日專業(yè)資料.目錄1 設計容及要求.31 .1 設計容.31 .2 設計任務及具體要求. . . . . . . . . . . . . . . . . .32 概要設計.42. 1 該系統(tǒng)的功能簡介. . . .42. 2 總體程序框圖. . . . . . . .42. 3各 個 模 塊 之 間 的 主 要 關 系53設計過程或程序代碼.53. 1 各個 模 塊 的 程 序 流

2、程 圖 及 運 行 界 面53. 2對 關 鍵 代 碼 加 以 分 析 說 明104程 序 調 試 分析. 145小 結1 7致.17參 考 文 獻17附 : 源 程序18專業(yè)資料.1 設計容及要求1.1設計容學生考勤信息記錄了學生的缺課情況,它包括:缺課日期、第幾節(jié)課(連續(xù)用 begin-end的形式表示)、課程名稱(課程名稱中不會出現(xiàn)空格) 、學生姓名、缺課類型(遲到、早退、請假及曠課)。1.2 設計任務及具體要求任務: (1)給出軟件結構 ,說明各模塊的功能。(2) 設計相關的類,并說明該類的作用。特別要用圖形說明類之間的繼承關系。(3)編寫代碼具體要求:(1)定義相關的數(shù)據(jù) ,比如 :

3、學生學號學生姓名課程名稱上課時間到課時間出勤狀態(tài)曠課/ 病假/事假/ 遲到 /早退 專業(yè)資料.(2)能夠進行以下操作 :A能夠對數(shù)據(jù)進行增、刪、改、查操作。B能夠按學號順序列出某一課程的出勤狀況2 概要設計2.1 系統(tǒng)的功能簡介考勤管理系統(tǒng),有以下功能:( 1)錄入學生的缺課記錄:從鍵盤輸入數(shù)據(jù)(提示:為避免重復從鍵盤輸入數(shù)據(jù),測試時可將數(shù)據(jù)存儲在文件中,利用輸入重定向功能讀入) ,輸入格式為:缺課日期 第幾節(jié)課 課程名稱學生姓名 缺課類型 每行一條紀錄。 例如:2013-04-29 2-4 中國近現(xiàn)代文學史云龍 遲到 2013-04-28 2-4 大學生社交禮儀馬志鵬 曠課(2) 修改某個學

4、生的缺課記錄:可以對缺課紀錄的任意部分進行修改,然后顯示一下修改后的紀錄。(3) 查詢某個學生的缺課情況:查詢結果按照日期升序排序,同一天按照所缺課程的專業(yè)資料.時間升序排序。( 4) 統(tǒng)計某段時間(以天為單位) ,曠課學生姓名及曠課節(jié)數(shù),查詢結果先按曠課節(jié)數(shù)降序排序,曠課節(jié)數(shù)相同的學生按姓名升序排序;( 5) 統(tǒng)計某段時間,有學生曠課的課程及曠課人次,按曠課人次由多到少排序,曠課人次相同的課程按課程名稱升序排序。2.2 總體程序框圖專業(yè)資料錄入學生的缺課信息錄入缺課學生的姓名、缺課日期、缺課節(jié)次、缺課課程名稱、缺課類型修改某學生查詢某學生的缺課信息的缺課信息.修改某學生查詢某學生的缺課日的缺

5、課日期、缺課節(jié)期、缺課節(jié)次、缺課課次、缺課課程名稱、缺程名稱、缺課類型課類型統(tǒng)計某段時間內曠課學生姓名及曠課節(jié)數(shù)按時間升序顯示曠課學生姓名及曠課節(jié)數(shù)統(tǒng)計某段時間內,有學生曠課的課程及曠課人次按時間升序顯示有學生曠課的課程及曠課人次2.3 各個模塊之間的主要關系本程序用結構體新定義一種數(shù)據(jù)類型, 系統(tǒng)包含一個主函數(shù)和6 個子函數(shù)(insert() ,check(),rivise() ,Delete() ,output() ,deleteallchain() ),6 個子函數(shù)分別用來插入、查詢、修改、刪除、輸出、收回動態(tài)分配的空間, 在主函數(shù)過調用子函數(shù)來實現(xiàn)所需功能。3 設計過程或程序代碼3.1

6、 各個模塊的程序流程圖及運行界面學生考勤管理系統(tǒng)中四個類的類層次圖為:Time 類專業(yè)資料.Xinxi 類qstu 類qkechen 類圖 2學生考勤管理系統(tǒng)中中四個類的類層次圖學生考勤管理系統(tǒng)中各功能模塊的實現(xiàn):菜單錄 入 學修 改 某查 詢 某統(tǒng)計某段時間統(tǒng)計某段時間內,生 的 缺學 生 的學 生 的內曠課學生姓有學生曠 課的課課信息缺 課 信缺 課 信名及曠課節(jié)數(shù)程及曠課人次息息圖 3學生考勤管理系統(tǒng)中菜單函數(shù)的功能圖1、學生缺課信息錄用功能模塊:專業(yè)資料學 生 缺錄入學生缺課日期課 信 息錄 用 功錄入學生缺.課節(jié)次能錄入學生缺課課程名稱錄入缺課學生姓名錄入學生缺課類型圖 4學生缺課信

7、息錄入的功能2、修改某學生缺課信息功能的模塊圖修 改 某修改某學生的缺課日期學 生 缺修改某學生的 缺課節(jié)次課 信 息功能修改某學生的缺課課程修改某學生的缺課類型圖 5學生考勤管理系統(tǒng)修改學生缺課信息功能圖3 查詢某學生缺課信息功能圖:查 詢 某輸入要查詢的學生姓名學 生 缺課 信 息功能顯示要查詢的學生缺課信息專業(yè)資料.繼續(xù)查詢或返回菜單圖 6 學生考勤管理系統(tǒng)查詢學生缺課信息功能圖4、統(tǒng)計某段時間曠課學生姓名及曠課節(jié)數(shù)功能模塊:統(tǒng)計某段統(tǒng)計某段時間內曠課學生姓名及曠課節(jié)數(shù)時間內曠課學生姓顯示某段時間內曠課學生姓名及名及曠課曠課節(jié)數(shù)節(jié)數(shù)功能返回菜單圖 7 統(tǒng)計某段時間曠課學生姓名及曠課節(jié)數(shù)功

8、能圖5、統(tǒng)計某段時間,有學生曠課的課程及曠課人次功能模塊統(tǒng)計某段統(tǒng)計某段時間內, 有學生曠課的課程及時間內,有曠課人次學生曠課的課程及顯示某段時間內,有學生曠課的課程及曠課人次曠課人次功能返回菜單圖 8 統(tǒng)計某段時間,有學生曠課的課程及曠課人次功能圖專業(yè)資料.Tine-year:int基類-month:int-day:int+time()+time()Xinxi-name20:char-kechen10:char-jieci3:char- queke10:char -tm3:char -tiaoshu:int=0+xinxi()+xinxi()+setname(n:char*):void+se

9、ttime(y:int,m:int,d:int):void+setqklx(qk: char*): void+setjieci(jc: char*):void+setkechen(kc: char*):void+getname():char*+getqklx():char*+getjieci():char*+getkechen():char*+gettime():int*qstu-jieshu:int派生-qst:int類+qstu()+qstu()+print(st1:xinxi &):void+getjs( st1:xinxi,n:int, j:int):int+setjs(js:int=

10、0):int +qstn20:char派生類派 生類qkechen-renci:int-kcshu:int=0+qkechen()+qkechen()+getrc(st1:xinxi,n:int,j:int):int+qkn20:char圖 9學生考勤管理系統(tǒng)中四個類的UML 圖專業(yè)資料.3.2 對關鍵代碼加以分析說明#include#include#includestruct chuqin/ 用結構體定義一個新的數(shù)據(jù)類型出勤chuqinchar name10,number20,subject15,time115,time215,zhuangtai10; chuqin *next;/-void

11、 insert(chuqin* &head1)/ 創(chuàng)建單向鏈表并插入數(shù)據(jù)chuqin *n; / 定義一個 chuqin類型指針 nwhile(1) / 一個死循環(huán)n=new chuqin;/ 用 new 運算符動態(tài)分配一個 chuqin 空間給指針 ncoutn-name;/ 輸入姓名if(n-name0=N)/ 判斷剛才輸入的第一個字母是否為Ndelete n; / 若輸入的第一個字母為 N ,則用 delete 運算符收回剛才動態(tài)分配的空間 break; / 跳出死循環(huán),結束插入cinn-numbern-subjectn-time1n-time2n-zhuangtai;/ 若條件不滿足,

12、則繼續(xù)輸入學號、課程、上課時間到課時間等if(!head1)head1=n,n-next=NULL;/* 假如head 指針為空,則直接讓head 指針指向n 指向的存儲空間(head=n ),將 n-next賦值為空,即不指向任存儲空間*/else n-next=head1,head1=n; / 若 head 指針非空,則將 n 指向的存儲空間插在最前面/-void check(chuqin *head)/ 子函數(shù)實現(xiàn)查詢功能char number110; / 定義一個字符串數(shù)組name1 臨時存放要查詢的姓名int flag=1;coutnumber1; / 輸入要查詢的學號while(h

13、ead) / 用 while 循環(huán)檢索查詢是否有匹配的姓名if(strcmp(number1,head-number)=0)/ 用函數(shù) strcmp ()判斷是否有匹配姓名if(flag)專業(yè)資料.cout找到 !nsetw(12)姓名 setw(12)學號 setw(12)課程 ;coutsetw(12)上課時間 setw(12)到課時間 setw(12)出勤狀態(tài) n;/* 若條件為真,則輸出提示信息*/coutsetw(12)namesetw(12)numbersetw(12)subject;coutsetw(12)time1setw(12)time2setw(12)zhuangtaine

14、xt;/更新 head 指針,是它指向下一個chuqin 類型的存儲空間if(flag) cout未找到 !; / 假如 flag 值為 1,則輸出 未找到 !/-void rivise(chuqin *head)/ 定義子函數(shù)實現(xiàn)修改功能char name110; / 定義一個字符串數(shù)組name1 臨時存放要修改的姓名coutname1;/ 輸入要查詢的姓名while(head)if(strcmp(name1,head-name)=0) cout 找到此人 !thead-subjecthead-time1head-time2head-zhuangtai;/ 輸入新的課程、上課時間、到課時間b

15、reak;head=head-next;if(head=NULL) cout未找到此人!無法修改!n;/-void Delete(chuqin* &head)/ 定義子函數(shù)實現(xiàn)刪除功能char name110;int flag=1;chuqin *p1=NULL,*p2,*p3=head;coutname1;while(head)if(strcmp(name1,head-name)=0)coutnext;delete p1;else if(p2-next=NULL) p1-next=NULL; delete p2; head=p3;else p1-next=p2-next;delete p2;

16、head=p3;flag=0;break;p1=head;head=head-next;p2=head;if(flag)cout未找到此人!無法刪除!n;/-void output(chuqin *head)/ 定義子函數(shù)實現(xiàn)輸出功能if(head=NULL) cout記錄為空! ;else cout所有的記錄依次為:nsetw(12)姓名 setw(12)學號 setw(12)課程;coutsetw(12)上課時間 setw(12)到課時間 setw(12)出勤狀態(tài) n;while(head)coutsetw(12)namesetw(12)numbersetw(12)subject; cou

17、tsetw(12)time1setw(12)time2setw(12)zh uangtainext;/-void deleteallchain(chuqin *head)/ 定義子函數(shù)來收回所有動態(tài)分配的存儲空間專業(yè)資料.chuqin *p;while(head) p=head; head=head-next; delete p;/-void main()/ 主函數(shù)int a; / 定義一個整型變量chuqin *head ; / 定義一個 head 指針head=NULL;while(1) / 死循環(huán)cout請輸入一個數(shù)字(1 表示插入, 2 表示查詢, 3 表示修改, ;couta;/ 輸

18、入一個整型值if(a=6) break;/ 若該值為 6 則跳出整個循環(huán)switch(a) / 若 a 值不為 6,執(zhí)行一下程序case 1: insert(head);break;case 2: check(head);break;case 3: rivise(head);break;case 4: Delete(head);break;case 5: output(head);break;default: cout輸入有誤,請重新輸入n; /* 若輸入的 a 值不符合要求,則輸出提示信息*/deleteallchain(head);/ 調用函數(shù) deleteallchain ()收回所有動

19、態(tài)分配的存儲空間4 設計結果與分析專業(yè)資料.系統(tǒng)調試程序編寫完成后,我進行了程序調試。調試過程中,出現(xiàn)了以下問題:當錄入學生缺課信息時,出現(xiàn)了無法退出錄入函數(shù)的情況,主要原因是輸入函數(shù)中while 循環(huán)語句沒有設置跳出循環(huán)的條件。除此之外,修改某學生缺課信息時,如果沒有該學生的缺課信息,系統(tǒng)沒有提示要用戶沒有該學生信息,也沒有建議用戶重新輸入要修改的學生姓名。由此我發(fā)現(xiàn)了該系統(tǒng)修改學生缺課信息的不足。于是,我對修改函數(shù)進行了修改與完善。在該函數(shù)中,我設置了if 語句用來判斷系統(tǒng)中是否存有用戶要修改的學生缺課信息。如果沒有,則提示用戶沒有該學生的缺課信息,用戶可以選擇繼續(xù)輸入要修改的學生姓名或者

20、退出修改環(huán)節(jié),可以在循環(huán)語句中改變循環(huán)進行的條件從而終止循環(huán)。至于在修改后顯示該學生的缺課信息,運行時發(fā)現(xiàn)系統(tǒng)并沒有做到這一點,對源代碼檢查之后發(fā)現(xiàn)是修改函數(shù)中顯示函數(shù)的調用出了點問題,顯示函數(shù)的實參有誤,應該把要修改缺課信息的學生所在的信息類對象作為實參,然后用顯示函數(shù)的形參引用實參對象,通過對象調用信息類的成員函數(shù),從而實現(xiàn)顯示功能。專業(yè)資料.5 小 結這次的課設,我寫的程序也沒有什么獨到之處,函數(shù)參數(shù)設定不夠完美,整個程序中對指針的運用比較少。對于指針的巧妙運用把握得不夠。還有就是容易missing;或者是 ,這都是些應該改掉的毛病。除此以外,我對于怎樣用文件保存數(shù)據(jù)還沒深入了解,但我將

21、數(shù)據(jù)保存到文件后又因文件打不開而無法訪問文件中的數(shù)據(jù),對于動態(tài)鏈表,我不是很清晰,也就是說無法做到熟稔運用。在調試過程中我發(fā)現(xiàn)在主函數(shù)中把字符數(shù)組名name 賦值給字符指針p即 p=name; 然后用 coutp; 語句可以輸出字符數(shù)組里全部的容, 但利用函數(shù)返回指針值卻不能做到這一點,在我思考一番后終于明白了,這與存中的地址值有關。致在這次 C 語言課程設計中, 我不僅參考了大量資料和翻閱了圖書館的相關書籍,而專業(yè)資料.且我的老師和同學給了我及大的幫助。特別是我的指導老師淮寧老師和寧。在此,我對他們表示感,感他們在我面對學習上的困難時給了我?guī)椭椭С?。也感那些給我?guī)椭乃型瑢W!參考文獻 1

22、 維富 建平 建芳 春明, C+ 程序設計,北京,清華大學出版社, 2007 2 岳新, Visual C+ 程序設計,大學出版社, 2002 3 和克智,C+ 程序設計(第二版),交通大學出版社, 1999 4 挺 會平 賈麗麗 錫山, C+ 程序設計,北京,清華大學出版社, 2005附錄:源程序清單#include#include#includeusing namespace std;/ 時間類class time專業(yè)資料.public:time(int y=0,int m=0,int d=0)year=y;month=m;day=d;time()protected:int year,mo

23、nth,day;/ 信息類class xinxi:public time public:xinxi() tiaoshu+;xinxi()tiaoshu-;void setname(char *n)strcpy(name,n);void settime(int y,int m,int d)year=y;month=m;day=d;void setqklx(char *qk)strcpy(queke,qk);void setjieci(char *jc)strcpy(jieci,jc);void setkechen(char *kc)strcpy(kechen,kc);char *getname(

24、)char *n;n=name;return n;char *getqklx()char *qk=queke;return qk;char *getjieci()char *jc;jc=jieci;return jc;char *getkechen()char *gk;gk=kechen;return gk;專業(yè)資料.int *gettime();private:char name20; / 姓名char jieci3,kechen10,queke10;int tm3;static int tiaoshu;int xinxi:tiaoshu=0;int *xinxi:gettime() int

25、 *t; t=tm; tm0=year; tm1=month; tm2=day; return t;/ / 缺課課程類class qkechen:public xinxipublic:專業(yè)資料/ 公有數(shù)據(jù)成員.qkechen()kcshu+;qkechen()kcshu-;int getrc(xinxi st1,int n,int j);char qkn20;private:int renci;static int kcshu; / 靜態(tài)數(shù)據(jù)成員;int qkechen:kcshu=0;int qkechen:getrc(xinxi st1,int n,int j) renci=0; renc

26、i+;for(int i=0;in;i+) if(*(st1i+1.gettime()+1)=*(st1j.gettime()+1)&*(st1i+1.gettime()+2)= *(st1j.gettime()+2)if(strcmp(qkn,st1i.getkechen()=0)renci+;return renci;專業(yè)資料./ 缺課學生類class qstu:public xinxipublic:qstu()qst+;qstu()qst-;void print(xinxi &st1);int getjs(xinxi st1,int n,int j);int setjs(int js=0

27、)jieshu=js;char qstn20;private:int jieshu;static int qst; / 靜態(tài)數(shù)據(jù)成員;int qstu:qst=0;/ 類的實現(xiàn)void qstu:print(xinxi &st1)cout|缺課日期|第幾節(jié)課|課程名稱|缺課類型 |endl;cout|*st1.gettime()|*(st1.gettime()+1)*(st1.gettime()+2)|專業(yè)資料.st1.getjieci()|st1.getkechen()|st1.getqklx()|endl;int qstu:getjs(xinxi st1,int n,int j) int

28、i=0,js=0; xinxi min; if(*(st1j.getjieci()+2)!=0) js=+2;else js+;for(i=0;in;i+)if(*(st1i+1.gettime()+1)=*(st1j.gettime()+1)&*(st1i+1.gettime()+2)=*(st1j.gettime()+2)if(strcmp(st1i+1.getname(),qstn)=0)if(*(st1i.getjieci()+2)!=0)js=+2;elsejs+;專業(yè)資料.jieshu=js;return jieshu;/ 函數(shù)聲明int shuru(xinxi st1);void

29、 chaxun(xinxi st1,qstu qt);void xiugai(xinxi st1,int n);void tongji1(xinxi st1,qstu qt1);void tongji2(xinxi st1,qkechen qk1);void caidan();void xiansi(xinxi &st1);void setqstn(xinxi st1,qstu qt1,int n);void setqkn(xinxi st1,qkechen qk,int n);/ 全局變量int g,k=1,b=1;int q=-1;char name20,kechen10,queke10,

30、jieci3;int y,m,d;/ 主函數(shù)專業(yè)資料.int main() xinxi tl15; qstu qt10; qkechen qk6; int ch; while(1)/ 定義 15 條信息類對象cout*歡迎進入學生考勤管理系統(tǒng)!*endl;caidan();cout- 請選擇菜單項 :ch;switch(ch)case 1: g=shuru(tl); break;case 2: xiugai(tl,g); break;case 3: chaxun(tl,qt); break;case 4: tongji1(tl,qt); break;case 5: tongji2(tl,qk)

31、; break;case 6: exit(0);return 0;/ 菜單函數(shù)專業(yè)資料.void caidan() system(color A);cout*endl;cout*學生考勤管理 系 統(tǒng)*endl;cout*endl; cout1.- 錄 入 學 生 的 缺 課 記 錄 -*endl;cout2.-修改學生的缺課記錄 -*endl;cout3.-查詢學生的缺課情況 -*endl;cout4.-統(tǒng)計某段時間曠課學生姓名及曠課節(jié)數(shù)-*endl;cout5.-統(tǒng)計某段時間曠課的課程及曠課人次 -*endl;cout6.-退出系統(tǒng) -*endl;/ 輸入函數(shù)int shuru(xinxi

32、st1) char a;cout- 輸入開始! -endl;do q+;cout 請輸入學生姓名 name;專業(yè)資料.st1q.setname(name);cout 請輸入課程名稱 kechen;st1q.setkechen(kechen);cout 請輸入缺課日期 ymd;st1q.settime(y,m,d);cout 請輸入缺課類型 queke;st1q.setqklx(queke);cout 請輸入缺課節(jié)次 jieci;st1q.setjieci(jieci);cout 是否還要繼續(xù)輸入 :(y/n)a;while(a=y);return q+1;/ 修改函數(shù)void xiugai(xinxi st1,int n)int k=1,j=0,a10;專業(yè)資料.int flgh;int h;while(k=1) cout 請輸入你要修改缺課記錄的學生姓名 name;flgh=0;for(int i=0;in;i+) if(strcmp(name,st1i.getnam

溫馨提示

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

評論

0/150

提交評論