C++課程設(shè)計報告--職工信息管理系統(tǒng).doc
課程設(shè)計報告 目錄一、 課程設(shè)計目的及要求.2二、 課程設(shè)計具體實現(xiàn).2(一) 總體設(shè)計.21) 職工信息管理系統(tǒng).32) 學生通訊系統(tǒng).12(二) 詳細設(shè)計.31) 職工信息管理系統(tǒng).32) 學生通訊系統(tǒng)13三、 心得體會.23四、 源代碼.24(一) 職工信息管理系統(tǒng). 24(二) 學生通訊系統(tǒng).37課程設(shè)計報告一、 課程設(shè)計目的及要求1. 設(shè)計目的l 提高和加強學生的計算機應(yīng)用與軟件開發(fā)能力,使學生由初學者向?qū)I(yè)的程序員過渡。l 培養(yǎng)學生獨立分析問題、解決問題、查閱資料以及自學能力,以適應(yīng)計算機產(chǎn)業(yè)日新月異發(fā)展的形勢。l 學習和掌握C+程序設(shè)計方法以及上機調(diào)試技巧,為今后學習其它專業(yè)課程打好基礎(chǔ)2. 設(shè)計要求(一) 職工信息管理系統(tǒng) 職工信息包括職工號、姓名、性別、年齡、學歷、工資、住址、電話等(職工號不重復(fù))。試設(shè)計一職工信息管理系統(tǒng),系統(tǒng)以菜單方式工作,使之能提供以下功能:l 職工信息錄入功能(職工信息用文件保存)l 職工信息瀏覽功能l 查詢和排序功能:按工資查詢和按學歷查詢或按年齡等查詢l 職工信息刪除、修改功能l 統(tǒng)計功能(二) 學生通訊系統(tǒng)學生通信錄信息包括:姓名、學號、年齡、性別、家庭住址、聯(lián)系電話、寢室號等信息?,F(xiàn)要求編寫程序來完成如下功能:l 學生通信錄信息的輸入l 學生的通信錄信息刪除和修改l 學生的通信錄信息查詢和統(tǒng)計功能l 學生的通信錄信息輸出顯示 二、 課程設(shè)計具體實現(xiàn)(一) 職工信息管理系統(tǒng)(1)總體設(shè)計 根據(jù)任務(wù)要求,程序主要包含五大功能模塊:1.職工信息錄入功能 2.職工信息瀏覽功能 3.職工信息查詢和排序 4.職工信息刪除和修改功能 5.職工信息統(tǒng)計功能??傮w設(shè)計圖如下:職工信息管理系統(tǒng)信息錄入信息刪除和修改信息統(tǒng)計信息查詢和排序信息瀏覽信息刪除信息修改按工資高低降序排列查 詢按年齡大小降序排 列查 詢按學歷高低降序排列查 詢(2)詳細設(shè)計 該項目文件名為職工信息管理系統(tǒng),共有8個.cpp和2個.h文件u 主菜單(在main .cpp中) 主要完成功能為:當用戶開始使用本系統(tǒng),進入登陸模塊。屏幕顯示菜單提示,用戶可根據(jù)需要選擇15進入相應(yīng)功能。具體如下:1.職工信息錄入 2.職工信息瀏覽 登錄模塊的截圖如下所示:主要使用技術(shù):switch語句以進入各個功能以及退出主要代碼:switch(scan3()case 1: /職工信息錄入input();getchar(); break;case 2: /職工信息瀏覽display();getchar(); break;case 3: /查詢和排序find();getchar(); break;case 4: /職工信息刪除、修改change();getchar(); break;case 5: /職工信息統(tǒng)計count();getchar(); break;default:cout謝謝使用,再見!nSwitch(n)Case 1:Case5:default:input()count()退出功能完成u 職工信息錄入功能(在input .cpp中) 主要功能:完成職工信息的錄入,用if語句還有文本文檔對職工信息進行錄入;在此定義N最多為二十個;建立職工信息結(jié)構(gòu)體,保存在.h文件中!將職工信息保存于文本文件: 職工基本信息.txt中。同時將輸入職工的人數(shù)保存到文本文件: 職工人數(shù) .txt中。利用for循環(huán)進行輸入。主要還是文件的輸入問題!主要代碼:for(int i=0;it;i+) /輸入職工基本信息coutn請輸入第i+1個職工的信息endl;coutperi.number; /判斷職工號是否存在 if (peri.number=peri-1.number) cout該職工號已存在,請重新輸入!endl; goto loop; outfperi.number ; coutperi.name; outfperi.name ; coutperi.sex; outfperi.sex ; coutperi.age; outfperi.age ; coutperi.rank; outfperi.rank ; coutperi.salary; outfperi.salary ; coutperi.add; outfperi.add ; coutperi.phone; outfperi.phone ;截圖如下:u 職工信息瀏覽功能(在display .cpp中) 主要功能:從文件 職工基本信息.txt 中讀出所有職工的信息,顯示到屏幕上。關(guān)鍵代碼: open(); /從文件中讀取信息 for(int i=0;iN;i+) /輸出職工信息 if(peri.number=0) break; cout職工號:peri.numberendl; cout姓名:peri.nameendl; cout性別:; xsex(peri.sex); coutendl; cout年齡:peri.ageendl; cout學歷:;xrank(peri.rank);coutendl; cout工資:peri.salaryendl; cout住址:peri.addendl; cout電話:peri.phoneendlendl; 截圖如下:u 職工信息查詢和排序(在find .cpp中) 主要功能:對信息的查詢按照三種查詢方法:1.按工資高低降序排列查詢 2. 按學歷高低降序排列查詢 3. 按年齡大小降序排列查詢主要使用技術(shù):使用 冒泡法對數(shù)據(jù)進行排序主要代碼:case 1:cout按工資從高到低排:endl; open(); person t; int i,j; for(i=0;iN;i+) /按工資高低降序排列 for(j=i+1;jN;j+) if(peri.salaryperj.salary) t=peri; peri=perj; perj=t;case 2: cout按學歷從高到低排:endl;open(); person t; int i,j; for(i=0;iN;i+) /按學歷高低降序排列 for(j=i+1;jN;j+) if(peri.rankperj.rank) t=peri; peri=perj; perj=t;case 3: cout按年齡從大到小排:endl; open(); person t; int i,j; for(i=0;iN;i+) /按年齡大小降序排列 for(j=i+1;jN;j+) if(peri.ageperj.age) t=peri; peri=perj; perj=t;截圖如下:u 職工信息修改和刪除功能(在change .cpp中) 主要功能:先從文件 職工基本信息.txt 中讀出所有職工的信息,再對職工信息進行修改和刪除,最后將修改后的信息重新讀入到 職工基本信息.txt 中,修改后的職工人數(shù)保存到 職工人數(shù).txt 中。截圖如下:u 職工信息統(tǒng)計功能(在count .cpp中)主要功能:從文件 職工基本信息.txt 中讀出所有職工的信息,統(tǒng)計所有職工中???、本科、碩士、博士學歷的人數(shù)分別是多少 和所有職工的工資情況:工資2000以下的總?cè)藬?shù)、2000-3000的總?cè)藬?shù)、工資3000-4000的總?cè)藬?shù)、工資4000以上的總?cè)藬?shù)、及所有職工的平均工資。 主要代碼:for(int i=0;iN;i+)if(peri.rank=1)k1+;else if(peri.rank=2)k2+;else if(peri.rank=3)k3+;else if(peri.rank=4)k4+;cout專科學歷的總?cè)藬?shù):k1endl;cout本科學歷的總?cè)藬?shù):k2endl;cout碩士學歷的總?cè)藬?shù):k3endl;cout博士學歷的總?cè)藬?shù):k4endlendl;for(int j=0;jN;j+) sum+=perj.salary;if(perj.salary=2000 & perj.salary=3000 & perj.salary=4000)t4+;s=renshu(); /得到職工總?cè)藬?shù) ave=(sum/s); /計算職工的平均工資 截圖如下:u 退出系統(tǒng)(二) 學生通訊系統(tǒng)(1)總體設(shè)計u 根據(jù)任務(wù)要求,該程序包含五大功能模塊:1. 學生通信錄信息的輸入功能 2. 學生的通信錄信息刪除功能 3. 學生的通信錄信息修改功能 4. 學生的通信錄信息查詢 5. 學生的通信錄信息輸出顯示功能 總體結(jié)構(gòu)圖如下:學生通訊系統(tǒng)通信錄信息的輸入通信錄信息刪除通信錄信息修改通信錄信息查詢通信錄信息的顯示按姓名查找修改按學號查找修改按姓名刪除按學號刪除按姓名查詢按學號查詢(2)詳細設(shè)計u 主菜單(在main .cpp中)主要功能:當用戶開始使用本系統(tǒng),進入登陸模塊。屏幕顯示菜單提示,用戶可根據(jù)需要選擇15進入相應(yīng)功能。具體如下:1.信息錄入 2.信息瀏覽 登錄模塊的截圖如下:u 主要代碼 int scan() /生成主菜單int n;system(cls);cout 歡迎使用學生通訊系統(tǒng)!endl; coutendl;cout 1.信息錄入 endl;cout 2.信息瀏覽 endl;cout 3.信息刪除 endl;cout 4.信息修改 endl;cout 5.信息查詢 endl;cout 0.退出. endl;coutn;if(n5)cout輸入錯誤,請重新選擇!endl;elsebreak;return n;switch (scan() /功能選擇case 1: /信息錄入Handle h1;h1.write();getchar();break;case 2: /信息瀏覽int n;Handle h2;n=h2.renshu();CStudent *p;p=h2.read();for(int i=0;idisplay();coutendl;deletep;getchar();break;case 3: /信息刪除Handle h3; h3.deletes();getchar();break;case 4: /信息修改Handle h4; h4.change();getchar();break;case 5: /信息查詢Handle h5;h5.find();getchar();case 0:quit=1;cout謝謝使用,再見!endl;輸入15選擇相應(yīng)的功能進行操作u 學生通訊錄信息的輸入主要功能:完成學生通信錄信息(姓名、學號、年齡、性別、家庭住址、聯(lián)系電話、寢室號)的錄入,將學生通信錄信息保存于文本文件: 學生通信錄信息.txt中。同時將輸入職工的人數(shù)保存到文本文件: 學生人數(shù) .txt中 主要代碼: int n,sum;CStudent *p;cout請輸入您要輸入的學生的個數(shù):n;p=new CStudentn;for(int i=0;iinput();void CStudent:input() /輸入學生通訊信息coutname; coutnumber; coutage; coutsex; coutadd;coutphone;coutid;截圖如下:u 學生通訊錄信息的刪除 主要功能:先從文件中讀出學生信息,對學生通訊錄訊息進行刪除,再將修改后的學生信息保存到文件中,并將修改后人數(shù)也保存。 主要代碼: if(d=1) cout請輸入你要刪除學生的姓名:name2;for(int i=0;iname,name2)!=0) outfname number age sex add phone id ; cout刪除完畢!endl;if(d=2)cout請輸入你要刪除學生的學號:number2;for(int i=0;inumber,number2)!=0)outfname number age sex add phone id ; cout刪除完畢!截圖如下:u 學生通訊錄信息修改 主要功能:先從文件中讀出學生信息,對學生通訊錄訊息進行刪除,再將修改后的學生信息保存到文件中。主要代碼;cout請選擇信息修改方式:endl;cout1.按姓名查找修改 2.按學號查找修改d; if(d2) cout輸入錯誤,請重新選擇!endl; else break;if(d=1) coutn請輸入你要修改學生的姓名:name2; for(int i=0;iname,name2)=0)(p+i)-change1();if(d=2) coutn請輸入你要修改學生的學號:number2; for(int i=0;inumber,number2)=0)(p+i)-change1();if(n=1)char name120;cout請輸入修改后的姓名:name1;strcpy(name,name1);cout修改完畢!endl;getchar();if(n=2)char num20;cout請輸入修改后的學號:num; strcpy(number,num);cout修改完畢!endl;getchar();if(n=3)int age1;cout請輸入修改后的年齡:age1;age=age1;cout修改完畢!endl;getchar();if(n=4)char sex12;cout請輸入修改后的性別:sex1;strcpy(sex,sex1);cout修改完畢!endl;getchar();.截圖如下:u 學生通訊錄信息的查詢 主要功能:查詢所要了解學生的通訊基本信息主要代碼:cout請選擇信息查詢方式:endl; cout1.按姓名查詢 2.按學號查詢d; if(d2) cout輸入錯誤,請重新選擇!endl; else break;if(d=1)coutn請輸入你要查詢學生的姓名:name3; for(int i=0;iname,name3)=0)(p+i)-display();if(d=2) cout請輸入你要查詢學生的學號:number3; for(int i=0;inumber,number3)=0)(p+i)-display();截圖如下:u 學生通訊錄信息的瀏覽 主要代碼:void CStudent:display() /顯示學生通訊信息cout學生的名字:nameendl; cout學生的學號:numberendl; cout學生的年齡:ageendl; cout學生的性別:sexendl; cout學生的家庭住址:addendl; cout學生的聯(lián)系電話:phoneendl; cout學生的寢室號:idendl;截圖如下:u 退出系統(tǒng)三、 心得體會回顧起此次課程設(shè)計,至今我仍感慨頗多,的確,自從拿到題目到完成整個編程,從理論到實踐,在整整三個星期的日子里,可以學到很多很多的的東西,同時不僅可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,從而提高自己的實際動手能力和獨立思考的能力。在設(shè)計的過程中遇到問題,這畢竟獨立做的,難免會遇到過各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固,比如說結(jié)構(gòu)體通過這次課程設(shè)計之后,一定要把以前所學過的知識重新溫故??傊幊逃绕涫钦{(diào)試是一項細致深入的工作,需要下工夫、動腦子、善于積累經(jīng)驗,這往往能反映出一個人的水平、經(jīng)驗和態(tài)度這次課程設(shè)計終于順利完成了,在設(shè)計中遇到了很多編程問題,最后在老師的指導(dǎo)和同學的幫助下,終于游逆而解我!同時,對他們表示忠心的感謝!四、 源代碼(一) 職工信息管理系統(tǒng)/Struct .h/ /職工基本信息struct personlong number; /職工號char name12; /姓名char sex; /性別int age; /年齡int rank; /學歷float salary; /工資char add50; /住址long phone; /電話;const int N=20;/head.h/ /函數(shù)的聲明#include#include#include#include#includevoid find();void input();void display();void change();void count();void open();int renshu();void xsex(char);void xrank(int);/main .cpp/#includehead.hint scan3() int n;system(cls);cout 歡迎使用職工信息管理系統(tǒng)endl;coutendlendl;cout請選擇所要進行的操作:n;cout1.職工信息錄入 2.職工信息瀏覽 3.查詢和排序n; cout4.職工信息刪除、修改 5.統(tǒng)計n;coutn;return(n);void main()int quit=0;while(!quit)switch(scan3()case 1: input(); /職工信息錄入getchar(); break;case 2: display(); /職工信息瀏覽getchar(); break;case 3: /查詢和排序find();getchar(); break;case 4: /職工信息刪除、修改change();getchar(); break;case 5: /職工信息統(tǒng)計count();getchar(); break;default:cout謝謝使用,再見!endl;quit=1;break;/input.cpp/#includehead.h#includestruct.hvoid input() system(cls); person perN;int t;cout 歡迎使用職工信息錄入功能endl;coutendl;coutt;ofstream outf1(人數(shù).txt,ios:out);if(!outf1)cout不能打開此文件!endl;outf1t;outf1.close(); coutn請輸入t個職工的職工號、姓名、性別、年齡、學歷、工資、住址、電話:n;ofstream outf(職工基本信息.txt,ios:out);/建立打開文件if(!outf)cout不能打開此文件!endl;for(int i=0;it;i+) /輸入職工基本信息coutn請輸入第i+1個職工的信息endl;coutperi.number; if (peri.number=peri-1.number) cout該職工號已存在,請重新輸入!endl; goto loop; outfperi.number ; coutperi.name; outfperi.name ; coutperi.sex; outfperi.sex ; coutperi.age; outfperi.age ; coutperi.rank; outfperi.rank ; coutperi.salary; outfperi.salary ; coutperi.add; outfperi.add ; coutperi.phone; outfperi.phone ;outf.close();/display.cpp/#includestruct.h#includehead.hextern person perN;void display()system(cls); cout 歡迎使用職工信息瀏覽功能endl;coutendl;open(); for(int i=0;iN;i+) /輸出職工信息 if(peri.number=0) break; cout職工號:peri.numberendl; cout姓名:peri.nameendl; cout性別:; xsex(peri.sex); coutendl; cout年齡:peri.ageendl; cout學歷:;xrank(peri.rank);coutendl; cout工資:peri.salaryendl; cout住址:peri.addendl; cout電話:peri.phoneendlendl; void xsex(char ch) /選擇性別if (ch=M|ch=m) cout男;else if (ch=W|ch=w) cout女;void xrank(int d) /選擇學歷if(d=1) cout???else if(d=2) cout本科;else if(d=3) cout碩士;else if(d=4) cout博士;/change.cpp/#includestruct.h#includehead.hextern person perN;int scan2() int d;system(cls);cout 歡迎使用職工信息刪除、修改功能endl;coutendl;coutn請選擇所要進行的操作:n;cout1.修改 2. 刪除n; coutd;return(d);void change() int quit=0;while(!quit)switch(scan2()case 1: /修改職工信息 long t; int i,n; cout請輸入所要修改職工的職工號:t; open(); for(i=0;iN;i+) if(peri.number=t) n=i;cout輸入職工的新信息:n; coutpern.name; coutpern.sex; coutpern.age; coutperi.rank; coutpern.salary; coutpern.add; coutpern.phone;coutn修改完畢!endl;ofstream outf(職工基本信息.txt,ios:out); if(!outf) cout不能打開此文件!endl; for(int m=0;mN;m+) /新信息保存到文件中 outfperi.numberperi.nameperi.sexperi.ageperi.rank peri.salaryperi.addperi.phone; outf.close(); getchar(); break;case 2: /刪除職工信息 open();long t; int i,n,s; cout請輸入所要刪除職工的職工號:t; for(i=0;iN;i+) if(peri.number=t) n=i; pern.number=0;strcpy(pern.name, );pern.sex= ;pern.age=0;pern.rank= ;pern.salary=0 ;strcpy(pern.add, );pern.phone=0;coutn刪除完畢!endl;ofstream outf(職工基本信息.txt,ios:out);if(!outf) cout不能打開此文件!endl; for(int m=0;mN;m+) /新信息保存到文件中 outfperi.numberperi.nameperi.sexperi.ageperi.rank peri.salaryperi.addperi.phone; outf.close(); ofstream outf1(人數(shù).txt,ios:out); if(!outf1) cout不能打開此文件!endl; s=renshu(); s-; outf1s; outf1.close(); getchar(); break;default:quit=1;break;/find .cpp/#includestruct.h#includehead.hextern person perN;int scan1() int n;system(cls);cout 歡迎使用職工信息查詢和排序功能endl;coutendl;coutn請選擇查詢的方式:n;cout1.按工資查詢 2. 按學歷查詢 3.按年齡查詢n; coutn;return(n);void find() system(cls);int quit=0;while(!quit)switch(scan1()case 1: cout按工資從高到低排:endl; open(); person t; int i,j; for(i=0;iN;i+) /按工資高低降序排列 for(j=i+1;jN;j+) if(peri.salaryperj.salary) t=peri; peri=perj; perj=t; for(int m=0;mN;m+) /排序后輸出職工信息 if(perm.number=0) break; cout職工號:perm.numberendl; cout姓名:perm.nameendl; cout性別:; xsex(perm.sex); coutendl; cout年齡:perm.ageendl; cout學歷:;xrank(perm.rank);coutendl; cout工資:perm.salaryendl; cout住址:perm.addendl;