C++語言課程設(shè)計報告_第1頁
C++語言課程設(shè)計報告_第2頁
C++語言課程設(shè)計報告_第3頁
C++語言課程設(shè)計報告_第4頁
C++語言課程設(shè)計報告_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目 錄一、課程設(shè)計題目2二、目的:2三、內(nèi)容2四、總體設(shè)計3五、詳細(xì)設(shè)計4六、調(diào)試與測試11七、小結(jié)15八參考資料15附錄源代碼16C+語言課程設(shè)計一、課程設(shè)計題目學(xué)生信息管理系統(tǒng)的設(shè)計與實現(xiàn)二、目的:1、進一步學(xué)習(xí)和鞏固C+課程的核心內(nèi)容,加深對面向?qū)ο蟪绦蛟O(shè)計思想的正確理解。2、熟練掌握C+程序設(shè)計技能及上機調(diào)試方法,為今后學(xué)習(xí)其他專業(yè)課程打好基礎(chǔ)。3、具備一定的計算機應(yīng)用及軟件開發(fā)能力,培養(yǎng)獨立分析問題、解決問題及查閱資料、獲取新知識的能力,以適應(yīng)技術(shù)不斷更新的計算機行業(yè)特點。三、內(nèi)容按照要求設(shè)計一個學(xué)生基本信息管理系統(tǒng),實現(xiàn)對學(xué)生信息的綜合管理。學(xué)生信息包括:學(xué)號、姓名、年齡、性別、家

2、庭住址、聯(lián)系電話、寢室號等信息。用戶輸入的數(shù)據(jù)存入文本文件或二進制文件。源碼要有適當(dāng)?shù)淖⑨尅,F(xiàn)要求編寫程序來完成如下功能:(1)學(xué)生信息的輸入包含功能:對輸入的學(xué)號是否重復(fù)進行判斷(學(xué)號唯一);對輸入數(shù)據(jù)的有效性別進行判斷。其中學(xué)號、姓名、和聯(lián)系電話為必填字段。(2)學(xué)生信息的顯示包含功能:以記錄的方式顯示文件中的所有內(nèi)容,每行對應(yīng)一條記錄。(3)學(xué)生信息的查詢包含功能:實現(xiàn)按“學(xué)號、姓名、性別、寢室號”等查詢,把所有滿足該條件的記錄顯示;若非法查詢或未查到則給予提示。(4)學(xué)生信息的統(tǒng)計包含功能:統(tǒng)計學(xué)生的“男生人數(shù)、女生人數(shù)、總?cè)藬?shù)”。(5)學(xué)生信息的刪除包含功能:刪除指定學(xué)號的學(xué)生信息;

3、若無此記錄,給予提示。(6)學(xué)生信息的修改包含功能:根據(jù)接收到的待修改的學(xué)生的學(xué)號,進行對相應(yīng)信息的修改。(7)清理屏幕包含功能:把當(dāng)前屏幕上顯示的內(nèi)容清空??梢圆捎谜{(diào)用system(cls)實現(xiàn)。(8)退出包含功能:退出系統(tǒng),只有當(dāng)用戶選擇此項功能時才能退出系統(tǒng),其它情況循環(huán)。()其他除此之外,還實現(xiàn)了在查找過程中在查找結(jié)果中進一步查找,將查找結(jié)果保存到文件,在輸入結(jié)束之后自動將學(xué)生信息以學(xué)號排序等功能。四、總體設(shè)計()模塊化的設(shè)計:程序主要分為五個模塊:學(xué)生信息的添加、顯示、查找、刪除、更改。函數(shù)結(jié)構(gòu):void read_count() 讀取學(xué)生統(tǒng)計信息;void save_count()

4、 保存學(xué)生統(tǒng)計信息;bool test_number(string) 檢查學(xué)號是否重復(fù);void sort_number() 按學(xué)號排序;bool is_Num(string) 判斷字符串是否為數(shù)字字符串;void student_input() 輸入學(xué)生信息;void student_show(Student *,int) 顯示學(xué)生信息;void student_show_all() 顯示所有的學(xué)生信息;void check_num(Student *,int) 以學(xué)號查找;void check_name(Student *,int) 以姓名查找;void check_age(Student

5、 *,int) 以年齡查找;void check_sex(Student *,int) 以性別查找;void check_address(Student *,int) 以地址查找;void check_cell(Student *,int) 以電話號碼查找;void check_room_num(Student *,int) 以寢室號查找;void student_search_next(Student *,int) 進一步查找函數(shù);void student_search() 主查找函數(shù);void student_change() 更改函數(shù);void student_delete() 刪除函數(shù)

6、;void welcome() 主菜單;int main() 主函數(shù)。()模塊調(diào)用圖:主函數(shù)welcomeinputshow_allsearchdeletechangewelcome主函數(shù)五、詳細(xì)設(shè)計()學(xué)生類的設(shè)計各個學(xué)生的信息封裝在學(xué)生類Student中。Student類中包含了各個成員變量與構(gòu)造函數(shù),并重載了輸入流、輸出流運算符。()文件的設(shè)計以文本文件“count.dat”保存統(tǒng)計信息,包括男生總?cè)藬?shù)、女聲總?cè)藬?shù)、總?cè)藬?shù)。以二進制文件“SI.dat”保存學(xué)生信息。()主函數(shù)的設(shè)計首先更改控制臺前景、背景顏色,然后調(diào)用read_count函數(shù),讀取統(tǒng)計信息,最后調(diào)用welcome函數(shù)顯示

7、主菜單。()主菜單的設(shè)計首先顯示主菜單,待用戶輸入選項之后用switch語句調(diào)用各個函數(shù),并對用戶的錯誤輸入給予提示,實現(xiàn)流程的控制。()函數(shù)流程圖read_count:以輸入方式打開“count.dat”打開成功初始化統(tǒng)計數(shù)據(jù)NY以輸出方式打開文件(創(chuàng)建文件)。關(guān)閉文件student_input:提示用戶輸入判斷用戶輸入是否合法YN更新統(tǒng)計數(shù)據(jù)追加保存數(shù)據(jù)提示成功保存是否繼續(xù)錄入YN清理屏幕對數(shù)據(jù)排序保存統(tǒng)計信息返回student_show_all:清理屏幕count=0?Y提示沒有學(xué)生信息返回讀取數(shù)據(jù)文件到數(shù)組中i=0返回icount?輸出學(xué)生信息i+YNstudent_search:詢問

8、用戶查找條件1、按學(xué)號查找2、按姓名查找3、按年齡查找4、按性別查找5、按地址查找7、俺寢室號碼查找0、退出6、按電話號碼查找輸入學(xué)號輸入姓名輸入年齡輸入性別輸入地址輸入寢室號碼返回輸入電話號碼顯示查找結(jié)果顯示查找結(jié)果1、將結(jié)果保存到文本文件1、將結(jié)果保存到文本文件0、返回2、進一步查找0、返回保存查找結(jié)果詢問用戶查找條件返回student_change:清理屏幕count=0?返回讀取學(xué)生信息NY輸入學(xué)生信息判斷用戶輸入是否合法N更改信息記錄更新數(shù)據(jù)文件提示用戶成功更改返回student_delete:清理屏幕count=0?返回讀取學(xué)生信息NY輸入學(xué)生信息判斷用戶輸入是否合法N刪除信息記錄

9、更新數(shù)據(jù)文件提示用戶成功刪除返回六、調(diào)試與測試在程序調(diào)試與測試過程中也遇到了不少問題,不斷改進,下面是程序調(diào)試與測試高城中遇到的一些問題:1、在將查找結(jié)果保存到文件時發(fā)現(xiàn)如果保存為中文文件名會出現(xiàn)文件名亂碼,于是改為英文文件名;2、調(diào)試查找函數(shù)時發(fā)現(xiàn)在進一步查找結(jié)束時不會直接返回主菜單的bug,查看源代碼后發(fā)現(xiàn)是由于查找函數(shù)調(diào)用流程出錯造成,修正;3、測試過程中發(fā)現(xiàn)如果在程序運行時直接關(guān)閉窗口,下次打開時會出現(xiàn)統(tǒng)計信息不正確的情況,之后發(fā)現(xiàn)是由于保存統(tǒng)計信息的函數(shù)是在程序正常退出時才調(diào)用的,改為在增刪學(xué)生信息后及時修改統(tǒng)計信息文件后正常;4、基本完成后再次通讀了源代碼,發(fā)現(xiàn)代碼冗余,及時刪除后

10、又優(yōu)化了主界面;5、最終測試對學(xué)生信息查找結(jié)果輸出格式不太滿意,更改為表格輸出。圖1 主菜單圖2 輸入學(xué)生信息,提示學(xué)號已存在圖3 表格顯示學(xué)生信息圖4 學(xué)生信息的查找圖5 輸出統(tǒng)計信息圖6 學(xué)生信息的刪除圖7 學(xué)生信息的更改七、小結(jié)此次課程設(shè)計經(jīng)過了模塊設(shè)計,分塊編碼,分塊調(diào)試,整合,整體調(diào)試,最終測試幾個階段。通過此次課程設(shè)計,加強了我對模塊化程序設(shè)計的理解,進一步培養(yǎng)了獨立分析問題、解決問題及查閱資料、獲取新知識的能力,為適應(yīng)技術(shù)不斷更新的計算機行業(yè)打下了基礎(chǔ)。八參考資料譚浩強著.C+面向?qū)ο蟪绦蛟O(shè)計.北京.清華大學(xué)出版社.2006年1月第一版附錄源代碼12345678910111213

11、141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114

12、214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124

13、224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134

14、234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144

15、244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154

16、254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164

17、264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174

18、274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184

19、284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194

20、29439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000#include#include#include#include#includeusing namespace std;/int m_count,f_count,count;/全局變量/定義學(xué)生類以及構(gòu)造函數(shù)、運算符重載class Studentp

21、ublic:Student ()num=;name=;age=0;sex=;address=;cell=;room_num=;friend istream & operator (istream &input,Student &temp);friend ostream & operator (istream &input,Student &temp)temp.agetemp.sextemp.addresstemp.celltemp.room_num;return input;ostream & operator (ostream &output,St

22、udent &temp)outputsetiosflags(ios:left)setw(12)temp.numsetw(6)setw(4)temp.agesetw(4)temp.sexsetw(18)temp.addresssetw(12)temp.cellsetw(6)temp.room_num;return output;void read_count()/讀取f_count,m_count,count.ifstream infile(count.dat,ios:in);if (!infile)count=0;m_count=0;f_count=0;ofstream ou

23、tfile(count.dat,ios:out);if (!outfile)cerrsave_count寫入count.dat文件出錯!endl;exit (13);outfilecount f_count countf_countm_count;infile.close();void save_count()/保存f_count,m_count,count.ofstream outfile(count.dat,ios:out);if (!outfile)cerrsave_count寫入count.dat文件出錯!endl;exit (13);outfilecount f_count m_co

24、unt;outfile.close();bool test_number(string num)/檢查學(xué)號是否存在int i=0;Student *p=new Studentcount;ifstream infile(SI.dat,ios:in|ios:binary);if(!infile)cerrtest_number函數(shù)打開文件失??!endl;exit (14);infile.read(char *)p,count*sizeof(Student);infile.close();for(i=0;icount;i+)if(pi.num=num)return true;return false;

25、void sort_number()/按學(xué)號排序int i=0,j=0;Student temp;Student *p=new Studentcount;ifstream infile(SI.dat,ios:in|ios:binary);if(!infile)cerrsort_number函數(shù)打開文件失??!endl;exit (15);infile.read(char *)p,count*sizeof(Student);infile.close();for(i=0;icount;i+)for(j=i+1;jcount;j+)if(pj.numpi.num)temp=pj;pj=pi;pi=te

26、mp;ofstream outfile(SI.dat,ios:binary|ios:out);if(!outfile)cerrsort_number函數(shù)保存文件失??!endl;exit (16);outfile.write(char *)p,count*sizeof(Student);outfile.close();delete p;/學(xué)生信息的輸入、數(shù)據(jù)校驗、保存數(shù)據(jù);使用了變量:f_count,m_count,count;追加到二進制文件:SI.datbool is_Num(string a)/數(shù)據(jù)校驗函數(shù),判斷字符串是否都是數(shù)字int i;for(i=0;ia.size();i+)if(

27、ai9)return false;return true;void student_input()/輸入函數(shù)system(cls);system(color 3f);Student temp;int i,flag=1;string fl;for(i=1;flag;i+)/輸入流程控制cout請依次輸入第【i】個學(xué)生的學(xué)號【位】、姓名、年齡、性別【m/f】、地址、手機號碼【位】、寢室號【寢室樓號碼+宿舍房間號(共位)】:temp;/對數(shù)據(jù)進行合法性校驗if (temp.num.size()!=12)cout您輸入的學(xué)號長度有誤,請重新輸入:endl;i-;continue;if (temp.se

28、x!=m&temp.sex!=f)cout您輸入的性別有誤,請重新輸入:endl;i-;continue;if (temp.cell.size()!=11)cout您輸入的手機號碼長度有誤,請重新輸入:endl;i-;continue;if (temp.room_num.size()!=4)cout您輸入的寢室號長度有誤,請重新輸入:endl;i-;continue;if (temp.age200)cout您輸入的年齡有誤,請重新輸入:endl;i-;continue;if (!is_Num(temp.num)cout您輸入的學(xué)號有誤,請重新輸入:endl;i-;continue;if (!i

29、s_Num(temp.cell)cout您輸入的手機號碼有誤,請重新輸入:endl;i-;continue;if (!is_Num(temp.room_num)cout您輸入的寢室號長度有誤,請重新輸入:endl;i-;continue;if(count!=0)if(test_number(temp.num)cout您輸入的學(xué)號已存在,請重新輸入:endl;i-;continue;/統(tǒng)計男生、女生、總?cè)藬?shù)if(temp.sex=m)m_count+;if(temp.sex=f)f_count+;count+;ofstream outfile(SI.dat,ios:binary|ios:app)

30、;if(!outfile)cerrstudent_input函數(shù)保存數(shù)據(jù)文件失敗!endl;exit(1);outfile.write(char *)&temp,sizeof(temp);outfile.close();cout學(xué)號為temp.num的學(xué)生信息成功保存!endl;cout是否繼續(xù)錄入?(Y/N)fl;if(fl=Y|fl=y)continue;elsesystem(cls);break;/輸入正確,跳出輸入循環(huán)sort_number();/輸入完成自動排序save_count();/更改count.dat文件內(nèi)容;/顯示函數(shù),兩個參數(shù):Student類數(shù)組指針p,要顯示的學(xué)生個

31、數(shù)n。void student_show(Student* p,int n)coutendl;cout 學(xué) 號 姓名 年齡性別 地 址 手機號碼 寢室號endl;/行寬度:for(int i=0;in;i+)coutendl;coutpiendl;coutendl;/學(xué)生信息顯示函數(shù);以輸入方式打開二進制文件SI.dat,void student_show_all()system(cls);if(count=0)cout當(dāng)前沒有學(xué)生信息可供顯示!endl;return ;system(color 5f);ifstream infile(SI.dat,ios:binary|ios:in);/打開

32、文件if (!infile)cerrstudent_show函數(shù)打開文件失?。ndl;exit(2);Student *p=new Studentcount;infile.read(char *)p,count*sizeof(Student);/將學(xué)生信息保存到數(shù)組中infile.close();/格式化顯示cout全部學(xué)生信息如下:endl;student_show(p,count);delete p;/以下是信息查找函數(shù),void student_search_next(Student *p,int n);/聲明進一步查找的函數(shù)void check_num(Student *p,int

33、n)/以學(xué)號精確查找string s;Student *save_s=new Student;int flag=0,i=0,j=0;cout請輸入您要查找的學(xué)號:s;for(i=0;in;i+)if(pi.num=s)*save_s=pi;break;else flag+;if(flag=n)/如果不存在則提示用戶cout沒有此學(xué)號!endl;return;cout查找結(jié)果:endl;student_show(save_s,1);/顯示查詢結(jié)果flag=1;while(flag)cout請選擇:endl;cout1、將結(jié)果保存到文件endl;cout0、返回flag;switch(flag)c

34、ase 1:ofstream outfile(search_number.txt,ios:out);if(!outfile)cerrcheck_num函數(shù)保存數(shù)據(jù)錯誤!endl;exit (5);outfilesave_s0;outfile.close();cout查找結(jié)果已保存到當(dāng)前文件夾下search_number.txt文件中。endl;flag=0;break;case 0:system(cls);break;default:cout您的輸入有誤,請重新選擇。endl;delete save_s;void check_name(Student *p,int n)/以姓名查找string

35、 s;Student *save_s=new Studentn;int flag=0,i=0,j=0;cout請輸入您要查找的姓名:s;for(i=0;in;i+)if(=s)save_sj=pi;j+;else flag+;if(flag=n)cout沒有此姓名!endl;return;cout查詢結(jié)果:endl;student_show(save_s,j);flag=1;while(flag)cout請選擇:endl;cout1、將結(jié)果保存到文件endl;cout2、進一步查找endl;cout0、返回flag;switch(flag)case 1:ofstream outf

36、ile(search_name.txt,ios:out);if(!outfile)cerrcheck_name函數(shù)保存數(shù)據(jù)錯誤!endl;exit (5);for(i=0;ij;i+)outfilesave_siendl;outfile.close();cout查找結(jié)果已保存到當(dāng)前文件夾下search_name.txt文件中。endl;flag=0;break;case 2:student_search_next(save_s,j);flag=0;break;case 0:system(cls);break;default:cout您的輸入有誤,請重新選擇。endl;delete save_s

37、;void check_age(Student *p,int n)/以年齡查找int a;Student *save_s=new Studentn;int flag=0,i=0,j=0;cout請輸入您要查找的年齡:a;for(i=0;in;i+)if(pi.age=a)save_sj=pi;j+;else flag+;if(flag=n)cout沒有此年齡的學(xué)生信息!endl;return;cout查詢結(jié)果:endl;student_show(save_s,j);flag=1;while(flag)cout請選擇:endl;cout1、將結(jié)果保存到文件endl;cout2、進一步查找endl

38、;cout0、返回flag;switch(flag)case 1:ofstream outfile(search_age.txt,ios:out);if(!outfile)cerrcheck_age函數(shù)保存數(shù)據(jù)錯誤!endl;exit (6);for(i=0;ij;i+)outfilesave_siendl;outfile.close();cout查找結(jié)果已保存到當(dāng)前文件夾下search_age.txt文件中。endl;flag=0;break;case 2:student_search_next(save_s,j);flag=0;break;case 0:system(cls);break;

39、default:cout您的輸入有誤,請重新選擇。endl;delete save_s;void check_sex(Student *p,int n)/以性別查找string s;Student *save_s=new Studentn;int flag=0,i=0,j=0;cout請輸入您要查找的性別:s;for(i=0;in;i+)if(pi.sex=s)save_sj=pi;j+;else flag+;if(flag=n)cout查詢結(jié)果為空!endl;return;cout查詢結(jié)果:endl;student_show(save_s,j);flag=1;while(flag)cout請選擇:endl;cout1、將結(jié)果保存到文件endl;cout2、進一步查找endl;cout0、返回flag;switch(flag)case 1:ofstream outfile(search_sex.txt,ios:out);if(!outfile)cerrcheck_sex函數(shù)保存數(shù)據(jù)錯誤!endl;exit (5);for(i=0;ij;i

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論