第一篇:通訊錄管理系統(tǒng)大全
課 程 設(shè) 計(jì) 任 務(wù) 書(shū)
題
目
C語(yǔ)言課程設(shè)計(jì)
系
(部)
專(zhuān)
業(yè)
班
級(jí)
學(xué)生姓名
學(xué)
號(hào)
06 月
信息科學(xué)與電氣工程學(xué)院
計(jì)算機(jī)科學(xué)與技術(shù)
計(jì)職141
王雪
140819139 日至
07 月
04 日
共
周 指導(dǎo)教師
院
長(zhǎng)
2015 年 6月 23日
一、課程設(shè)計(jì)目的
將理論教學(xué)中涉及到的知識(shí)點(diǎn)貫穿起來(lái),對(duì)不同的數(shù)據(jù)類(lèi)型、程序控制結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)作一比較和總結(jié),結(jié)合設(shè)計(jì)題目進(jìn)行綜合性應(yīng)用,對(duì)所學(xué)知識(shí)達(dá)到融會(huì)貫通的程度。通過(guò)課程設(shè)計(jì),學(xué)生在下述各方面的能力應(yīng)該得到鍛煉:
(1)進(jìn)一步鞏固、加深學(xué)生所學(xué)專(zhuān)業(yè)課程《C++程序設(shè)計(jì)語(yǔ)言》的基本理論知識(shí),理論聯(lián)系實(shí)際,進(jìn)一步培養(yǎng)學(xué)生綜合分析問(wèn)題,解決問(wèn)題的能力。
(2)全面考核學(xué)生所掌握的基本理論知識(shí)及其實(shí)際業(yè)務(wù)能力,從而達(dá)到提高學(xué)生素質(zhì)的最終目的。
(3)利用所學(xué)知識(shí),開(kāi)發(fā)小型應(yīng)用系統(tǒng),掌握運(yùn)用C++語(yǔ)言編寫(xiě)調(diào)試應(yīng)用系統(tǒng)程序,訓(xùn)練獨(dú)立開(kāi)發(fā)應(yīng)用系統(tǒng),進(jìn)行數(shù)據(jù)處理的綜合能力。
(4)對(duì)于給定的設(shè)計(jì)題目,如何進(jìn)行分析,理清思路,并給出相應(yīng)的數(shù)學(xué)模型。
(5)掌握結(jié)構(gòu)化程序設(shè)計(jì)方法,熟悉面向?qū)ο蟪绦蛟O(shè)計(jì)方法。(6)熟練掌握C++語(yǔ)言的基本語(yǔ)法,靈活運(yùn)用各種數(shù)據(jù)類(lèi)型。(7)進(jìn)一步掌握在集成環(huán)境下如何調(diào)試程序和修改程序。設(shè)計(jì)功能
錄入聯(lián)系人信息(包括姓名、電話(huà)號(hào)碼、地址等信息);通訊錄管理系統(tǒng)要求實(shí)現(xiàn)以下功能:
1、輸入每一位聯(lián)系人記錄,將其信息存入文件中。
2、查詢(xún)所有聯(lián)系人的信息,并按可選的自定義規(guī)則進(jìn)行排序;
3、記錄修改,將修改的記錄信息保存于文件中。設(shè)計(jì)要求
1、設(shè)一個(gè)通信錄由以下幾項(xiàng)數(shù)據(jù)信息構(gòu)成: 數(shù)據(jù)項(xiàng) 類(lèi)型
姓名 字符串
地址 字符串
郵政編碼 字符串
電話(huà)號(hào)碼 字符串
試為通信錄數(shù)據(jù)定義類(lèi)型和定義通信錄變量,實(shí)現(xiàn)功能:存取、顯示、刪除記錄、查詢(xún)記錄等功能。
2、要求:界面友好,易于操作 總體設(shè)計(jì) 系統(tǒng)功能模塊圖:
添加:可以添加通訊錄記錄,依次輸入編號(hào)、姓名、年齡、電話(huà)號(hào)碼、通訊地址、電子郵箱等后,會(huì)提示是否繼續(xù)添加。
顯示:可以以表格形式輸出所有通訊錄里的記錄
刪除:輸入欲刪除的那個(gè)人的名字后,會(huì)自動(dòng)刪除他(她)的記錄內(nèi)容 查詢(xún):可以選擇用姓名、電話(huà)、地址三種方式查詢(xún)
修改:輸入欲修改的那個(gè)人的名字后,再依次輸入編號(hào)、姓名、年齡、電話(huà)號(hào)碼、通訊地址、電子郵箱即可完成修改
保存:,輸入文件名(帶后綴名)后,即可將通訊錄信息保存到文件
課程設(shè)計(jì)名稱(chēng)及內(nèi)容
課程設(shè)計(jì)名稱(chēng):?jiǎn)雾?xiàng)選擇題標(biāo)準(zhǔn)化考試系統(tǒng)
設(shè)計(jì)內(nèi)容:設(shè)計(jì)并實(shí)現(xiàn)一個(gè)單項(xiàng)選擇題標(biāo)準(zhǔn)化考試系統(tǒng)。該系統(tǒng)可以完成試題錄入、試題抽取、自動(dòng)判卷等功能。
任務(wù)和要求
功能要求:
(1)用文件保存試題庫(kù)。(每個(gè)試題包括題干、4個(gè)備選答案、標(biāo)準(zhǔn)答案)(2)試題錄入:可隨時(shí)增加試題到試題庫(kù)中
(3)試題抽?。好看螐脑囶}庫(kù)中可以隨機(jī)抽出N道題(N由鍵盤(pán)輸入)(4)答題:用戶(hù)可實(shí)現(xiàn)輸入自己的答案
(5)自動(dòng)判卷:系統(tǒng)可根據(jù)用戶(hù)答案與標(biāo)準(zhǔn)答案的對(duì)比實(shí)現(xiàn)判卷并給出成績(jī)。
(二)其它要求:
(1)只能使用C/C++語(yǔ)言,源程序要有適當(dāng)?shù)淖⑨專(zhuān)钩绦蛉菀组喿x(2)至少采用文本菜單界面(如果能采用圖形菜單界面更好)(3)學(xué)生可自動(dòng)增加新功能模塊(視情況可另外加分)
主要知識(shí)點(diǎn)
l 面向?qū)ο蟪绦蛟O(shè)計(jì)方法
l 界面制作,switch的應(yīng)用。l 類(lèi)和對(duì)象。l 動(dòng)態(tài)數(shù)組(鏈表)類(lèi)模板。l 文件的讀寫(xiě)。
五、其他
程序設(shè)計(jì)可在Microsoft VC++6.0、Borland C++ Builder環(huán)境下進(jìn)行。
六、參考資料
【1】《C語(yǔ)言程序設(shè)計(jì)》,譚浩強(qiáng)編,清華大學(xué)出版社,2008年 出版 【2】《C語(yǔ)言程序設(shè)計(jì)》,吳明發(fā)編,北京理工大學(xué)出版社,2007年出版 【3】《C語(yǔ)言參考手冊(cè)》邱仲潘 機(jī)械工業(yè)出版社,2004年出版
【4】《C語(yǔ)言課程設(shè)計(jì)案例精編》 姜靈之 清華大學(xué)出版社 2008年出版
詳細(xì)設(shè)計(jì)(1).通訊錄: 主要代碼
#include
//結(jié)構(gòu)體 {
};class inter { private: student st[35];char no[13];char name[20];char address[100];char tel_no[12];char post_code[7];char e_mail[40];public: void add(char no[13],char name[20],char address[100],char tel_no[12],char post_code[7],char e_mail[40]);
void del(char name[20]);void find1(char no[13]);void find2(char name[20]);void list1();void list2();int correct(char name[20]);void read();void write();void format();int back(){
cout<<“
返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫(xiě)):
”;
} void print(int i){
cout<<“學(xué)號(hào):”<
};
} cout<<“電話(huà)號(hào)碼:”< inter a;a.format();char select1;cout< 計(jì)職141 ” < <<“tt★★★★★★★★★★★★★★★★★★★★★★★★★★” < ※” < 通 迅 錄 ※” < ※” < ※” < ※” < ※” < <<“tt ”< <<“ttt選擇 :”;cin>>select1; switch(select1){ case '1':cout<<“ (1)添加:”< cout<<“ (2)刪除:”< (3)修改:”< 請(qǐng)選擇:”< 輸入添加的資料:”< char name[20]; char address[100]; char tel_no[12]; char post_code[7]; char e_mail[40]; cout<<“ 輸入學(xué)號(hào):”< 輸入姓名:”< 輸入地址:”< 輸入電話(huà)號(hào)碼:”< 輸入郵編:”< cout<<“ 輸入E_mail:”< cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫(xiě)): ”; char back_add;cin>>back_add;if(back_add=='R'||back_add=='r')goto top;else goto bottom;break;case '2':cout<<“ 輸入要?jiǎng)h除人的姓名:”< char name2[20];cin>>name2;a.del(name2); cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫(xiě)): ”; char back_del;cin>>back_del;if(back_del=='R'||back_del=='r')goto top;else goto bottom;break;case '3':cout<<“ 輸入需要修改人的姓名:”< char name3[20];cin>>name3;if(a.correct(name3)) } goto top;else goto bottom;break;break;case '2':cout<<“ (1)根據(jù)姓名查找”< cout<<“ (2)根據(jù)學(xué)號(hào)查找”< 請(qǐng)選擇: ”;cin>>select3;switch(select3){ case '1':char name4[20]; cout<<“ 輸入姓名: ”;cin>>name4;a.find2(name4); cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫(xiě)): ”; char back_f1;cin>>back_f1;if(back_f1=='R'||back_f1=='r')goto top;else goto bottom;break;case '2':char no4[13];cout<<“ 輸入學(xué)號(hào): ”;cin>>no4; a.find1(no4); cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫(xiě)): ”; } break;char back_f2;cin>>back_f2;if(back_f2=='R'||back_f2=='r')goto top;else goto bottom;break;case '3':a.write();cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫(xiě)): ”; char back_w;cin>>back_w;if(back_w=='R'||back_w=='r')goto top;else goto bottom;break;case '4':cout<<“ (1)按學(xué)號(hào)排序:”< cout<<“ (2)按姓名排序:”< 請(qǐng)選擇:”;char select4;cin>>select4;switch(select4){ case '1':a.list1(); cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫(xiě)): ”; char back;cin>>back;if(back=='R'||back=='r')goto top;else goto bottom;break;case '2':a.list2(); cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫(xiě)): ”; } break;char back1;cin>>back1;if(back1=='R'||back1=='r')goto top;else goto bottom;break;case '5':a.read();cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫(xiě)): ”; char back_r;cin>>back_r;if(back_r=='R'||back_r=='r') goto top;else goto bottom;break;case '6':cout<<“ 請(qǐng)確認(rèn)刪除所有資料!(Y/N) ”; char select5;cin>>select5;if(select5=='Y'||select5=='y')a.format();cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫(xiě)): ”; } char back_f;cin>>back_f;if(back_f=='R'||back_f=='r')goto top;else goto bottom;break;bottom:cout<<“ ★★★★★★★★★★★★歡迎使用本軟件!★★★★★★★★★★★ ”< void inter::add(char no[13],char name[20],char address[100],char tel_no[12],char post_code[7],char e_mail[40]){ int x=1;for(int i=0;i<35;i++)return 0; } { } if(!strcmp(st[i].no,“0”)){ } if(x==0)break;strcpy(st[i].address,address);strcpy(st[i].e_mail,e_mail);strcpy(st[i].name,name);strcpy(st[i].no,no);strcpy(st[i].post_code,post_code);strcpy(st[i].tel_no,tel_no);x=0;//刪除聯(lián)系人 void inter::del(char name[20]){ int x=1;for(int i=0;i<35;i++){ if(!strcmp(st[i].name,name)){ strcpy(st[i].address,“0”); strcpy(st[i].e_mail,“0”);strcpy(st[i].name,“0”);strcpy(st[i].no,“0”);strcpy(st[i].post_code,“0”);strcpy(st[i].tel_no,“0”); } } } else x=0;if(x==0)cout<<“ error:輸入姓名錯(cuò)誤!”< int inter::correct(char name[30]){ int x;for(int i=0;i<35;i++){ } char select;cout<<“ (1)修改姓名:”< (2)修改學(xué)號(hào):”< (3)修改地址:”< (4)修改郵編:”< (5)修改電話(huà)號(hào)碼:”< (6)修改E_MAIL:”< 請(qǐng)選擇:”;cin>>select;switch(select){ case '1':cout<<“ 輸入要修改的姓名:”;char name1[30];if(!strcmp(st[i].name,name))x=i; cin>>name1;strcpy(st[x].name,name1);cout<<“ 修改成功!”< 輸入要修改的學(xué)號(hào):”; char no1[13];cin>>no1;strcpy(st[i].no,no1);cout<<“ 修改成功!”< 輸入要修改的地址:”; char address1[100];cin>>address1;strcpy(st[x].address,address1);cout<<“ 修改成功!”< 輸入要修改的郵編:”; char post_code1[7];cin>>post_code1;strcpy(st[x].post_code,post_code1);cout<<“ 修改成功!”< 輸入要修改的電話(huà)號(hào)碼:”;char tel_no1[12]; cin>>tel_no1;strcpy(st[x].tel_no,tel_no1);cout<<“ 修改成功!”< 輸入要修改的E_MAIL:”; char e_mail1[40]; cin>>e_mail1; strcpy(st[x].e_mail,e_mail1); cout<<“ 修改成功!”< return back(); break;} } //按學(xué)號(hào)查詢(xún)聯(lián)系人 void inter::find1(char no[13]){ int x,y=1,z=1;for(int i=0;i<35;i++){ if(!strcmp(st[i].no,no)) { x=i; z=0; } else y=0; if(z==0)break; } if(y==0)cout<<“ 輸入的學(xué)號(hào)查找不到?。 ? print(x);} //按姓名查詢(xún)聯(lián)系人 void inter::find2(char name[20]){ } //讀取文件 void inter::read(){ int x,y=1,z=1;for(int i=0;i<35;i++){ } if(y==0)cout<<“ 輸入的姓名查找不到?。 ? } else y=0;if(z==0)break;x=i;z=0; print(x); char name1[20];cout<<“ 輸入你要導(dǎo)入的文件名: ”;cin>>name1;strcat(name1,“.txt”);ifstream file(name1);char line[120];char no[120];char name[120];char address[120];char post_code[120];char tel_no[120];char e_mail[120];int time=0;file.getline(line,120);while(!file.eof()){ for(int k=0;k<35;k++){ if(time==0){ strcpy(no,line);time=1;for(int i=0;i<120;i++){ if(no[i]==':'){ i++;for(int j=0;j<13;j++) } } { } st[k].no[j]=no[i];i++;file.getline(line,120,'n');} if(time==1){ } if(time== 2){ strcpy(name,line);time=2; for(int i=0;i<120;i++){ } file.getline(line,120,'n');if(name[i]==':'){ } i++;for(int j=0;j<20;j++){ } st[k].name[j]=name[i];i++; } strcpy(address,line);time=3;for(int i=0;i<120;i++){ } file.getline(line,120,'n');if(address[i]==':'){ } i++;for(int j=0;j<100;j++){ } st[k].address[j]=address[i];i++;if(time==3){ strcpy(tel_no,line);time=4;for(int i=0;i<120;i++){ if(tel_no[i]==':'){ i++;for(int j=0;j<12;j++){ st[k].tel_no[j]=tel_no[i]; } } } } i++;file.getline(line,120,'n'); if(time==4){ } if(time==5){ strcpy(e_mail,line);strcpy(post_code,line);time=5;for(int i=0;i<120;i++){ } file.getline(line,120,'n');if(post_code[i]==':'){ } i++;for(int j=0;j<7;j++){ } st[k].post_code[j]=post_code[i];i++; } } } } time=0;for(int i=0;i<120;i++){ } file.getline(line,120,'n');if(e_mail[i]==':'){ } i++;for(int j=0;j<40;j++){ } st[k].e_mail[j]=e_mail[i];i++; file.close();//寫(xiě)入文件 void inter::write(){ char name[20];cout<<“ 輸入要保存的文件名 ”;cin>>name;strcat(name,“.txt”);ofstream savefile(name);for(int i=0;i<35;i++) } { } savefile.close();savefile << “學(xué)號(hào):”< savefile << “姓名:”< savefile << “地址:”< savefile << “電話(huà)號(hào)碼:”< savefile << “郵編:”< savefile << “E_MAIL:”< strcpy(no,st[j].no);strcpy(st[j].no,st[j+1].no);for(int i=0;i<34;i++){ for(int j=0;j<35-i;j++){ if(strcmp(st[j].no,st[j+1].no)>0){ char no[13]; char name[20]; char address[100]; char tel_no[12]; char post_code[7]; char e_mail[40]; strcpy(st[j+1].no,no); strcpy(name,st[j].name);strcpy(st[j].name,st[j+1].name);strcpy(st[j+1].name,name); strcpy(address,st[j].address); } for(int k=0;k<35;k++){ int x=0;if(strcmp(st[k].no,“0”)) } } strcpy(st[j].address,st[j+1].address);strcpy(st[j+1].address,address); strcpy(tel_no,st[j].tel_no);strcpy(st[j].tel_no,st[j+1].tel_no);strcpy(st[j+1].tel_no,tel_no); strcpy(post_code,st[j].post_code);strcpy(st[j].post_code,st[j+1].post_code);strcpy(st[j+1].post_code,post_code); strcpy(e_mail,st[j].e_mail);strcpy(st[j].e_mail,st[j+1].e_mail);strcpy(st[j+1].e_mail,e_mail); { } if(x==1){ cout< } } } //按姓名排序 void inter::list2(){ for(int i=0;i<34;i++){ for(int j=0;j<35-i;j++){ if(strcmp(st[j].name,st[j+1].name)>0){ char no[13]; char name[20]; char address[100]; char tel_no[12]; char post_code[7]; char e_mail[40]; strcpy(no,st[j].no);strcpy(st[j].no,st[j+1].no);strcpy(st[j+1].no,no); strcpy(name,st[j].name);strcpy(st[j].name,st[j+1].name);strcpy(st[j+1].name,name); strcpy(address,st[j].address); } for(int k=0;k<35;k++){ } } strcpy(st[j].address,st[j+1].address);strcpy(st[j+1].address,address); strcpy(tel_no,st[j].tel_no);strcpy(st[j].tel_no,st[j+1].tel_no);strcpy(st[j+1].tel_no,tel_no); strcpy(post_code,st[j].post_code);strcpy(st[j].post_code,st[j+1].post_code);strcpy(st[j+1].post_code,post_code); strcpy(e_mail,st[j].e_mail);strcpy(st[j].e_mail,st[j+1].e_mail);strcpy(st[j+1].e_mail,e_mail); } } int x=0;if(strcmp(st[k].no,“0”)){ } if(x==1){ } cout< void inter::format(){ } for(int i=0;i<35;i++){ } strcpy(st[i].address,“0”);strcpy(st[i].e_mail,“0”);strcpy(st[i].name,“0”);strcpy(st[i].no,“0”);strcpy(st[i].post_code,“0”);strcpy(st[i].tel_no,“0”); (2).工作流程圖: 1.通訊錄主界面 2.添加:添加通訊錄記錄 3.顯示:查詢(xún)通訊錄記錄 4.刪除:刪除通訊錄記錄 5.修改:修改通訊錄記錄 小結(jié)(收獲和建議)這次的程序?qū)嵲O(shè)計(jì)實(shí)驗(yàn)是對(duì)我們進(jìn)入大學(xué)以來(lái)學(xué)習(xí)程序設(shè)計(jì)語(yǔ)言結(jié)果的一次大檢驗(yàn),面對(duì)許多不懂得知識(shí),通過(guò)他人的幫助,以及參考他人的成果,自己動(dòng)手嘗試,修改等,才完成。這個(gè)課程設(shè)計(jì),花費(fèi)了我近兩個(gè)星期的時(shí)間,這也是因?yàn)闀?shū)本不熟悉。通過(guò)這次設(shè)計(jì),使我對(duì)《C語(yǔ)言》這門(mén)課程有了更深一步的了解。它不僅是計(jì)算機(jī)程序設(shè)計(jì)的重要理論技術(shù)基礎(chǔ),也在我們電子與信息專(zhuān)業(yè)的學(xué)習(xí)中占據(jù)著十分重要的地位。同時(shí)也使我們知道,要學(xué)好這門(mén)課程,僅學(xué)習(xí)書(shū)本上的知識(shí)是不夠的,還要有較強(qiáng)的實(shí)踐能力。因?yàn)槲覀儗W(xué)習(xí)知識(shí)就是為了實(shí)踐。而只有多實(shí)踐,多編寫(xiě)程序,才能更好的理解與掌握書(shū)本上的東西。利用計(jì)算機(jī)來(lái)編寫(xiě)程序,也讓我感受到了編程的樂(lè)趣,極大的激發(fā)了我的興趣。 摘 要 為了人們對(duì)他人信息的記憶方便而設(shè)計(jì),開(kāi)發(fā)的一套“通訊錄管理系統(tǒng)“軟件。通過(guò)該題目的設(shè)計(jì)過(guò)程,可以培養(yǎng)學(xué)生結(jié)構(gòu)化程序設(shè)計(jì)的思想,加深對(duì)高級(jí)語(yǔ)言基本語(yǔ)言要素和控制結(jié)構(gòu)的理解,針對(duì)c語(yǔ)言中的重點(diǎn)和難點(diǎn)內(nèi)容進(jìn)行訓(xùn)練,獨(dú)立完成有一定工作量的程序設(shè)計(jì)任務(wù),同時(shí)強(qiáng)調(diào)好的程序設(shè)計(jì)風(fēng)格。得到軟件工程的綜合訓(xùn)練,提高解決實(shí)際問(wèn)題的能力。 關(guān)鍵字:信息;管理;實(shí)用 Abstract Designed for people to others the memory of information convenient, developed a set of “mail list management system” software.Through the design process of this subject, students can be structured programming ideas, deepen our understanding of the advanced language basic language elements and control the understanding of the structure, conduct training for emphasis and difficulty in C language, independently complete the program design has a certain work tasks, while emphasizing the good programming style.Comprehensive training in software engineering, improving the ability to solve practical problems.Keywords: Information;management;practical 目 錄 概述.........................................................................1 1.1設(shè)計(jì)目的..................................................................1 1.2設(shè)計(jì)要求..................................................................1 1.3系統(tǒng)功能需求分析..........................................................2 2 總體設(shè)計(jì).....................................................................3 2.1總體功能模塊圖............................................................3 2.2程序的數(shù)據(jù)設(shè)計(jì)............................................................4 3詳細(xì)設(shè)計(jì).....................................................................5 3.1功能及工作流程圖..........................................................5 3.2源程序代碼................................................................8 4調(diào)試分析....................................................................19 4.1測(cè)試.....................................................................19 4.2問(wèn)題思考與調(diào)試:.........................................................27 5總結(jié)........................................................................28 參考文獻(xiàn)......................................................................29 致 謝........................................................................27 概述 1.1設(shè)計(jì)目的 隨著信息社會(huì)的高速發(fā)展,人與人之間的聯(lián)系越來(lái)越頻繁,通訊方式越來(lái)越多樣化,如何保證與朋友、同學(xué)、同事、領(lǐng)導(dǎo)、親戚等之間的聯(lián)系,并能方便快捷的查找、記錄、修改其相關(guān)通訊信息。僅靠以前單獨(dú)的手工記錄已遠(yuǎn)遠(yuǎn)不能滿(mǎn)足當(dāng)前的需要。 開(kāi)發(fā)一個(gè)通訊錄管理系統(tǒng),借助計(jì)算機(jī)可以方便、快捷、靈活的管理個(gè)人的朋友及相關(guān)人員的通訊信息,了解友人相關(guān)信息,幫助與友人保持聯(lián)絡(luò)。 所以設(shè)計(jì)一個(gè)通訊錄管理系統(tǒng)管理各人的通訊信息是是非必要的。 設(shè)計(jì)“通訊錄管理系統(tǒng)”使其具有數(shù)據(jù)插入、修改、刪除、顯示和查詢(xún)等功能。(1)數(shù)據(jù)包括:人名、工作單位、電話(huà)號(hào)碼和E-mail地址。(2)可對(duì)記錄中的姓名和電話(huà)號(hào)碼進(jìn)行修改。(3)可增加或刪除記錄。(4)可顯示所有保存的記錄。(5)可按人名或電話(huà)號(hào)碼進(jìn)行查詢(xún)。 1.2設(shè)計(jì)要求 建立通訊錄信息,信息至少包含姓名、住址、單位、固定電話(huà)、移動(dòng)手機(jī)、分類(lèi)(如同事、朋友、同學(xué)、家人等)、E-mail、QQ等。 該系統(tǒng)提供添加、刪除、修改和查找功能,其中按姓名方式刪除、修改,按姓名、單位、分類(lèi)方式查找。 將通訊錄保存在文件中。能夠輸出通訊錄中的信息。 1.3系統(tǒng)功能需求分析 主要包含一下多種功能: 添加:添加通訊錄記錄 顯示:顯示通訊錄記錄 刪除:刪除通訊錄記錄 查詢(xún):查詢(xún)通訊錄記錄 修改:修改通訊錄記錄 保存:將信息保存到文件 本系統(tǒng)為通訊錄管理系統(tǒng),可由用戶(hù)自由添加,刪除和修改信息,還可以將通訊錄信息導(dǎo)出到文本文檔,極大的方便了用戶(hù)的使用。 總體設(shè)計(jì) 思路:我們首先設(shè)計(jì)出了主函數(shù),然后根據(jù)去要實(shí)現(xiàn)的功能分別設(shè)計(jì)錄入聯(lián)系人信息、瀏覽、查詢(xún)、修改、刪除功能的子函數(shù)。刪除函數(shù)的設(shè)計(jì)是首先從文件內(nèi)找到要?jiǎng)h除的人,然后通過(guò)寫(xiě)一個(gè)實(shí)現(xiàn)刪除目的的FOR循環(huán)實(shí)現(xiàn)刪除。修改也大體和刪除相同,添加函數(shù)在設(shè)計(jì)時(shí)通過(guò)申請(qǐng)一片空間,然后通過(guò)指針將需要添加的信息添加進(jìn)去,從而實(shí)現(xiàn)添加功能。 2.1總體功能模塊圖 圖2.1 總體功能模塊圖 添加:可以添加通訊錄記錄,依次輸入編號(hào)、姓名、年齡、電話(huà)號(hào)碼、通訊地址、電子郵箱后,會(huì)提示是否繼續(xù)添加。 顯示:可以以表格形式輸出所有通訊錄里的記錄。 刪除:輸入欲刪除的那個(gè)人的名字后,會(huì)自動(dòng)刪除他(她)的記錄內(nèi)容。查詢(xún):可以選擇用姓名、電話(huà)、地址三種方式查詢(xún)。 修改:輸入欲修改的那個(gè)人的名字后,再依次輸入編號(hào)、姓名、年齡、電話(huà)號(hào)碼、通訊地址、電子郵箱即可完成修改。 保存:輸入文件名(帶后綴名)后,即可將通訊錄信息保存到文件。運(yùn)行所需環(huán)境:win7及以下各版本windows,visual C++6.0。2.2程序的數(shù)據(jù)設(shè)計(jì) 該系統(tǒng)用下面六個(gè)功能模塊編寫(xiě),每個(gè)模塊執(zhí)行不同的功能,體現(xiàn)了模塊化設(shè)計(jì)的思想。下面六個(gè)模塊都是利用C語(yǔ)言文件,向文件中追加數(shù)據(jù)、修改數(shù)據(jù)、查詢(xún)數(shù)據(jù)和除數(shù)據(jù)。 創(chuàng)建:用fopen()建立一個(gè)文本文件,然后用fprintf()向其中輸入數(shù)據(jù)(例如,向文件中輸入“姓名”,“地址”等),并對(duì)文件進(jìn)行命名。 添加:可以添加通訊錄記錄,利用C語(yǔ)言文件,向文件中按順序輸入姓名、住址、單位、固定電話(huà)、手機(jī)號(hào)碼、分類(lèi)(如同事、朋友、同學(xué)、家人等)、E-mail、QQ,再用fclose()函數(shù)關(guān)閉并保存文件。 輸出:也是用通過(guò)循環(huán)依次輸出文件中的數(shù)據(jù),即輸出所有通訊錄里的記錄。刪除:輸入你要?jiǎng)h除的人的姓名后,系統(tǒng)會(huì)自動(dòng)刪除他(她)的記錄,在刪除通過(guò)switch語(yǔ)句滿(mǎn)足提示你確認(rèn)刪除的功能,只有等你確認(rèn)刪除后才會(huì)刪除。查找:為了滿(mǎn)足用戶(hù)的實(shí)際需求,設(shè)計(jì)了三種查詢(xún)方式,可以用姓名、單位、分類(lèi)三種方式查找通訊錄記錄。這里用到strcmp()函數(shù),通過(guò)比較字符串是否相同來(lái)判別是否找到相關(guān)信息,找到后,就把文件中的數(shù)據(jù)賦給對(duì)應(yīng)的變量,再把變量所帶的值輸出到屏幕上。 修改:輸入你要修改的那個(gè)人的姓名后,系統(tǒng)會(huì)查找該通訊錄文件(此時(shí)用發(fā)ftell()函數(shù)來(lái)跟蹤文件指針的指向地址,找到個(gè)人的記錄后,會(huì)顯示他(她)的記錄,然后通過(guò)fseek()函數(shù)來(lái)找到修改處的地址,然后用戶(hù)再依次輸入他(她)的相關(guān)信息來(lái)替代以前的記錄。 保存:用到fclose()函數(shù),每次操作成功后會(huì)自動(dòng)保存到指定的文件中。 3詳細(xì)設(shè)計(jì) 3.1功能及工作流程圖 ①添加:添加通訊錄記錄,依次輸入編號(hào)、姓名、年齡、電話(huà)號(hào)碼、通訊地址、電子郵箱后,會(huì)提示是否繼續(xù)添加。 圖3.1(1)添加流程圖 ②顯示:以表格形式輸出所有通訊錄里的 圖3.1(2)顯示流程圖 ③刪除::輸入欲刪除的那個(gè)人的名字后,會(huì)自動(dòng)刪除他(她)的記錄內(nèi)容。 圖3.1(3)刪除流程圖 ④查詢(xún):可以選擇用姓名、電話(huà)、地址三種方式查詢(xún)。 圖3.1(4)查詢(xún)流程圖 ⑤修改:輸入欲修改的那個(gè)人的名字后,再依次輸入編號(hào)、姓名、年齡、電話(huà)號(hào)碼、通訊地址、電子郵箱即可完成修改。 圖3.1(5)修改流程圖 3.2源程序代碼 #include typedef struct Person pe[80]; int menu_select() { char c;do{ system(“cls”); printf(“tt *****通訊錄***** n”); printf(“tt┌───────┐n”); printf(“tt│ 1.添加記錄 │n”);printf(“tt│ 2.顯示記錄 │n”);printf(“tt│ 3.刪除記錄 │n”);printf(“tt│ 4.查詢(xún)記錄 │n”);printf(“tt│ 5.修改記錄 │n”);{ char score; /*編號(hào)*/ char name[10]; /*姓名*/ char num[15]; /*號(hào)碼*/ char email[20];char age[8];char adds[20]; /*郵箱*/ /*年齡*/ /*住址*/ }Person; } printf(“tt│ 6.保存記錄 │n”);printf(“tt│ 0.退出程序 │n”);printf(“tt└───────┘n”);printf(“tt請(qǐng)您選擇(0-6):”);c=getchar(); }while(c<'0'||c>'6');return(c-'0'); int Input(Person per[],int n){ gets(x); int i=0; char sign,x[10]; while(sign!='n'&&sign!='N'){ printf(“t編號(hào):”); scanf(“t%d”,&per[n+i].score);printf(“t姓名:”); scanf(“t%s”,per[n+i].name);printf(“t年齡:”);scanf(“t%s”,per[n+i].age);printf(“t電話(huà)號(hào)碼:”);scanf(“t%s”,per[n+i].num);printf(“t通訊住址:”);scanf(“t%s”,per[n+i].adds);printf(“t電子郵箱:”);scanf(“t%s”,per[n+i].email); } } printf(“nt是否繼續(xù)添加?(Y/N)”);scanf(“t%c”,&sign);i++; return(n+i); void Display(Person per[],int n) { int i; printf(“--------n”); /*格式*/ printf(“%-5d%-8s%-6s%-13s%-15s%-15sn”,per[i-1].score,per[i-1].name,per[i-1].age,perprintf(“編號(hào) 姓名 年齡 電話(huà)號(hào)碼 通訊地址 電子郵箱n”);printf(“--------n”); for(i=1;i { [i-1].num,per[i-1].adds,per[i-1].email); } printf(“--------n”);system(“pause”);if(i>1&&i%10==0) { } printf(“t----n”);printf(“t”);system(“pause”); printf(“t----n”);} int Delete_a_record(Person per[],int n){ } char s[20];int i=0,j; printf(“t請(qǐng)輸入想刪除記錄中的名字:”);scanf(“%s”,s); while(strcmp(per[i].name,s)!=0&&i } for(j=i;j } printf(“ttt已經(jīng)成功刪除!n”);return(n-1);strcpy(per[j].num,per[j+1].num);strcpy(per[j].name,per[j+1].name);strcpy(per[j].age,per[j+1].age);strcpy(per[j].adds,per[j+1].adds);strcpy(per[j].email,per[j+1].email);per[j].score=per[j+1].score;printf(“t通訊錄中沒(méi)有此人!n”);return(n);void Query_a_record(Person per[],int n){ int m;printf(“tn請(qǐng)選擇查詢(xún)方式:n”); printf(“t┌──────┐n”); printf(“t│1------姓名 │n”); printf(“t│2------電話(huà) │n”); printf(“t│3------地址 │n”); printf(“t│4------返回 │n”); printf(“t└──────┘n”); printf(“請(qǐng)選擇:”); scanf(“%d”,&m); while(m!=1&&m!=2&&m!=3&&m!=4) { if(m==1){ char s[20];int i=0; printf(“t請(qǐng)輸入想查詢(xún)的姓名:”);scanf(“t%s”,s); while(strcmp(per[i].name,s)!=0&&i } printf(“輸入錯(cuò)誤,請(qǐng)重新選擇:”);scanf(“%d”,&m); };} return; printf(“t此人編號(hào): %dn”,per[i].score);printf(“t此人年齡: %sn”,per[i].age);printf(“t電話(huà)號(hào)碼: %sn”,per[i].num);printf(“t通訊地址: %sn”,per[i].adds);printf(“t電子郵箱: %sn”,per[i].email);if(m==2){ char s[20];int i=0; printf(“t請(qǐng)輸入想查詢(xún)的電話(huà):”);scanf(“t%s”,s); while(strcmp(per[i].num,s)!=0&&i };} printf(“t此人編號(hào): %dn”,per[i].score);printf(“t此人姓名: %sn”,per[i].name);printf(“t此人年齡: %sn”,per[i].age);printf(“t通訊地址: %sn”,per[i].adds);printf(“t電子郵箱: %sn”,per[i].email); } if(m==3){ };char s[20];int i=0; printf(“t請(qǐng)輸入想查詢(xún)的地址:”);scanf(“t%s”,s); while(strcmp(per[i].adds,s)!=0&&i } printf(“t此人編號(hào): %dn”,per[i].score);printf(“t此人姓名: %sn”,per[i].name);printf(“t此人年齡: %sn”,per[i].age);printf(“t電話(huà)號(hào)碼: %sn”,per[i].num);printf(“t電子郵箱: %sn”,per[i].email);printf(“t通訊錄中沒(méi)有此人!n”);return; void Change(Person per[],int n){ char s[20];int i=0; printf(“t請(qǐng)輸入想修改的記錄中的名字:”);scanf(“%s”,s); while(strcmp(per[i].name,s)!=0&&i printf(“t通訊錄中沒(méi)有此人!n”); return; } printf(“t編號(hào):”); scanf(“t%d”,&per[i].score); printf(“t姓名:”); scanf(“t%s”,per[i].name); printf(“t年齡:”); scanf(“t%s”,per[i].age);printf(“t電話(huà)號(hào)碼:”); scanf(“t%s”,per[i].num); printf(“t通訊住址:”); scanf(“t%s”,per[i].adds);printf(“t電子郵箱:”);scanf(“t%s”,per[i].email);printf(“t修改成功!”);} void WritetoText(Person per[],int n) { int i=0; FILE *fp; char filename[20]; printf(“t保存到文件n”); printf(“t請(qǐng)輸入所保存的文件名:”); scanf(“t%s”,filename); if((fp=fopen(filename,“w”))==NULL) /*定義文件指針*/ /*定義文件名*/ /*輸入文件名*/ { } fprintf(fp,“****************************************** 通 訊 錄printf(”t無(wú)法打開(kāi)文件n“);system(”pause“);return; ******************************************n”);fprintf(fp,“編號(hào) 姓名 年齡 電話(huà)號(hào)碼 通訊地址 電子郵箱n”);; fprintf(fp,“%-3dt%-6st%-3st%-13st%-20st%-20sn”,per[i].score,per[i].name,per[i].agwhile(i ;fprintf(fp,“***************************************共有%d 條記錄 } fprintf(fp,”----------------------------n“)i++; ****************************************n”,n); } void main() /*主函數(shù)*/ { int n=0;fclose(fp); /*關(guān)閉文件*/ printf(“保存成功!n”);for(;;){ switch(menu_select()) { case 1: printf(“nt添加記錄到通訊錄n”); n=Input(pe,n);break; case 2: printf(“nttt 通訊錄記錄表n”);Display(pe,n); break; case 3: printf(“nt從通訊錄中刪除記錄n”);n=Delete_a_record(pe,n); printf(“t”); system(“pause”);break; case 4: printf(“nt在通訊錄中查找記錄n”);Query_a_record(pe,n); printf(“t”); system(“pause”); break; case 5: /*添加記錄*/ /*顯示記錄*/ /*刪除記錄*/ /*查找記錄*/ printf(“nt修改通訊錄中的記錄n”); Change(pe,n); printf(“t”); system(“pause”); break; case 6: printf(“nt保存功能n”); WritetoText(pe,n); printf(“t”); system(“pause”); break; case 0: printf(“ntt謝謝使用,再見(jiàn)!n”); printf(“ntt”); system(“pause”); exit(0); } } } /*修改數(shù)據(jù)*/ /*保存數(shù)據(jù)*/ /*結(jié)束程序*/ 4調(diào)試分析 調(diào)試的意義和目的:在管理信息系統(tǒng)的開(kāi)發(fā)過(guò)程中,面對(duì)著錯(cuò)綜復(fù)雜的各種問(wèn)題,人的主觀(guān)認(rèn)識(shí)不可能完全符合客觀(guān)現(xiàn)實(shí),開(kāi)發(fā)人員之間的思想交流也不可能十分完善。所以,在管理信息系統(tǒng)開(kāi)發(fā)周期的各個(gè)階段都不可避免地會(huì)出現(xiàn)差錯(cuò)。開(kāi)發(fā)人員應(yīng)力求在每個(gè)階段結(jié)束之前進(jìn)行認(rèn)真、嚴(yán)格的技術(shù)審查,盡可能早的發(fā)現(xiàn)并糾正錯(cuò)誤,否則等到系統(tǒng)投入運(yùn)行后再回頭來(lái)改正錯(cuò)誤將在人力、物力上造成很大的浪費(fèi),有時(shí)甚至導(dǎo)致整個(gè)系統(tǒng)的癱瘓。然而,經(jīng)驗(yàn)表明,單憑審查并不能發(fā)現(xiàn)全部差錯(cuò),加之在程序設(shè)計(jì)階段也不可避免還會(huì)產(chǎn)生新的錯(cuò)誤,所以,對(duì)系統(tǒng)進(jìn)行調(diào)試是不可缺少的,是保證系統(tǒng)質(zhì)量的關(guān)鍵步驟。統(tǒng)計(jì)資料表明,對(duì)于一些較大規(guī)模的系統(tǒng)來(lái)說(shuō),系統(tǒng)調(diào)試的工作量往往占程序系統(tǒng)編制開(kāi)發(fā)總工作量的40%以上。 調(diào)試的目的在于發(fā)現(xiàn)其中的錯(cuò)誤并及時(shí)糾正,所以在調(diào)試時(shí)應(yīng)想方設(shè)法使程序的各個(gè)部分都投入運(yùn)行,力圖找出所有錯(cuò)誤。錯(cuò)誤多少與程序質(zhì)量有關(guān)。即使這樣,調(diào)試通過(guò)也不能證明系統(tǒng)絕對(duì)無(wú)誤,只不過(guò)說(shuō)明各模塊、各子系統(tǒng)的功能和運(yùn)行情況正常,相互之間連接無(wú)誤,系統(tǒng)交付用戶(hù)使用以后,在系統(tǒng)的維護(hù)階段仍有可能發(fā)現(xiàn)少量錯(cuò)誤并進(jìn)行糾正,這也是正常的。 4.1測(cè)試 1).顯示的主菜單界面: 圖4.1(1)主菜單界面 2).添加界面: 圖4.1(2)添加界面 3).顯示界面: 圖4.1(3)顯示界面 4).刪除界面: 圖4.1(4)刪除前界面 刪除后,通訊錄里的顯示記錄: 圖(4)刪除后界面 5).查詢(xún)界面:以姓名查詢(xún)方式為例: 圖4.1(5)查詢(xún)界面 6).修改界面: 圖4.1(6)修改前界面 修改后,通訊錄里的顯示記錄: 圖4.1(6)修改后界面 7).保存界面: 圖4.1(7)保存界面 通訊錄.txt 文件截圖: 圖4.1文件截圖 4.2問(wèn)題思考與調(diào)試: 1.當(dāng)我在進(jìn)行刪除、查詢(xún)、修改、保存等功能時(shí),以查詢(xún)?yōu)槔?,輸入名字按回?chē)后,雖然會(huì)顯示該人的所有記錄,但是顯示后,它馬上自動(dòng)消失了,還沒(méi)來(lái)得及等我看內(nèi)容。因此,向別人請(qǐng)教后,在一些地方加入了system(“pause”);這個(gè)語(yǔ)言,用來(lái)對(duì)某項(xiàng)操作完成后進(jìn)行暫停。 2.現(xiàn)在這個(gè)程序的界面?zhèn)€人感覺(jué)很清爽。但在最初,每次進(jìn)行一項(xiàng)操作,運(yùn)行窗口里的內(nèi)容會(huì)一直保留著,感覺(jué)很雜亂,如下圖(添加后,進(jìn)行顯示操作): 圖4.2分析圖 之后,我去網(wǎng)上尋求解決辦法,知道可以使用system(“cls”);這一語(yǔ)句可以解決這個(gè)問(wèn)題,最后,修改成功。5總結(jié) 這次的程序?qū)嵲O(shè)計(jì)實(shí)驗(yàn)是對(duì)我們進(jìn)入大學(xué)以來(lái)學(xué)習(xí)程序設(shè)計(jì)語(yǔ)言結(jié)果的一次大檢驗(yàn)。自己動(dòng)手,自己發(fā)現(xiàn)和解決問(wèn)題。發(fā)現(xiàn)了自己的許多不足。平時(shí)沒(méi)有掌握好的知識(shí)在這次實(shí)驗(yàn)中徹底暴露出來(lái),經(jīng)過(guò)不斷思考,不斷查閱資料和上機(jī)運(yùn)行,解決其中大部分問(wèn)題,當(dāng)然還存在一些問(wèn)題沒(méi)有解決。我相信在以后的學(xué)習(xí)能夠解決好它們。但是,收獲還是不小的,我不僅對(duì)C的操作有了進(jìn)一步的掌握,還了解到了程序設(shè)計(jì)的書(shū)寫(xiě)風(fēng)格及其注釋的格式。 當(dāng)我選擇通訊錄這個(gè)題目時(shí),一開(kāi)始想運(yùn)用大量鏈表及指針來(lái)完成,但是在慢慢琢磨之后,覺(jué)得這個(gè)不一定要用鏈表,于是改變了編程思路。當(dāng)然還有不少文件的讀寫(xiě)問(wèn)題,不過(guò)還是通過(guò)不斷測(cè)試之后順利解決了。另外一點(diǎn)要說(shuō)的就是這個(gè)程序用了很多的循環(huán),因此對(duì)于循環(huán)的控制要十分小心,有時(shí)while和do-while的區(qū)別也是十分重要的。 還有一點(diǎn)體會(huì)就是,書(shū)上和老師教的內(nèi)容是有限的,我們需要不斷地靠自己去學(xué)習(xí),向他人請(qǐng)教,了解和掌握更多的知識(shí),這樣我們才能編出更好的C程序。 總體來(lái)說(shuō),這次C語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)還是比較成功的,雖然最終程序還存在一些不足,但能取得這樣的成績(jī)我還是比較高興的。 最后,要感謝學(xué)校為我們提供這次實(shí)驗(yàn)機(jī)會(huì),也要感謝老師的教導(dǎo)和好心人對(duì)我的幫助與支持。 參考文獻(xiàn) [1]譚浩強(qiáng),張基溫。C語(yǔ)言程序設(shè)計(jì)教程。第三版。北京:高等教育出版社,2006 [2]譚浩強(qiáng),張基溫。C語(yǔ)言習(xí)題集與上機(jī)指導(dǎo)。第三版。北京:高等教育出版社,2006 [3]譚浩強(qiáng)。C程序設(shè)計(jì)(第三版)。北京:清華大學(xué),2005 [4]譚浩強(qiáng)。C程序設(shè)計(jì)(第二版)。北京:清華大學(xué),1999 [5]林建秋,韓靜萍,等.C語(yǔ)言程序設(shè)計(jì)【M】.電子工業(yè)出版社,2004.[6]譚浩強(qiáng).C語(yǔ)言程序設(shè)計(jì)【M】.清華大學(xué)出版社,2006.[7]黃維通.C語(yǔ)言設(shè)計(jì)教程.清華大學(xué)出版社,2005.[8]王成瑞.C語(yǔ)言程序設(shè)計(jì).中國(guó)水利水電出版社,2005.[9]張基溫.C語(yǔ)言程序設(shè)計(jì)案例教程.清華大學(xué)出版社,2004.[10]蘇小紅,陳惠鵬.C語(yǔ)言大學(xué)實(shí)用教程【M】.電子工業(yè)出版社,2007.致 謝 在這里我要感謝楊書(shū)鴻老師,她對(duì)我進(jìn)行了無(wú)私的指導(dǎo)和幫助,不厭其煩的幫助進(jìn)行論文的修改和改進(jìn)。另外,在校圖書(shū)館查找資料的時(shí)候,圖書(shū)館的老師也給我提供了很多方面的支持與幫助。在此向幫助和指導(dǎo)過(guò)我的各位老師表示最中心的感謝!感謝這篇論文所涉及到的各位學(xué)者,如果沒(méi)有各位學(xué)者的研究成果的幫助和啟發(fā),我將很難完成本篇論文的寫(xiě)作。感謝我的同學(xué)和朋友,在我寫(xiě)論文的過(guò)程中給予我很多素材,還在論文的撰寫(xiě)和排版等過(guò)程中提供熱情的幫助。由于我的學(xué)術(shù)水平有限,所寫(xiě)論文難免有不足之處,懇請(qǐng)各位老師和學(xué)友批評(píng)和指正! 黑龍江工程學(xué)院 第一章 問(wèn)題分析和任務(wù)定義 1.1 問(wèn)題分析 問(wèn)題: 編寫(xiě)一個(gè)通訊錄管理系統(tǒng)。要求包括通訊錄建立、增加號(hào)碼、刪除號(hào)碼、查詢(xún)號(hào)碼(按姓名、按號(hào)碼)、修改號(hào)碼、號(hào)碼分組、打印通訊錄(全部或分組號(hào)碼)等功能,并設(shè)計(jì)主控菜單和子菜單供用戶(hù)選擇要執(zhí)行的操作。 分析: 實(shí)現(xiàn)以下功能: 1)通訊錄編輯(添加、刪除); 2)按不同的項(xiàng)進(jìn)行查找; 3)對(duì)已存在的通訊錄按不同的項(xiàng)排序; 4)將通訊錄寫(xiě)入文件; 5)從文件讀入通訊錄。 1.2 任務(wù)定義 創(chuàng)建一個(gè)鏈表,每個(gè)節(jié)點(diǎn)有姓名和號(hào)碼以及關(guān)系三個(gè)信息。增加號(hào)碼操作為增加節(jié)點(diǎn),刪除號(hào)碼操作為刪除節(jié)點(diǎn),查找號(hào)碼為鏈表的遍歷。每個(gè)功能以函數(shù)的形式出現(xiàn),由主控菜單控制。并以文件的形式對(duì)號(hào)碼信息進(jìn)行保存。 第二章 詳細(xì)設(shè)計(jì) 主函數(shù)(main()函數(shù))是通過(guò)一個(gè)多分支語(yǔ)句(switch(i)語(yǔ)句)實(shí)現(xiàn)的。顯示菜單函數(shù)(displaymenu()函數(shù))顯示與用戶(hù)交互的界面。以下是各個(gè)模塊實(shí)現(xiàn)程序各項(xiàng)功能的函數(shù)的詳細(xì)設(shè)計(jì): 1、插入新的記錄:insert()函數(shù) 定義變量,設(shè)計(jì)loop模塊,模塊的功能是用來(lái)輸入記錄:輸入姓名、性別、電話(huà)號(hào)碼、地址的信息。用for語(yǔ)句查找是否輸入了與原有記錄相同的記錄,用strcmp 函數(shù)比較,if 語(yǔ)句判斷,如果輸入了重復(fù)的記錄,提示信息:“此記錄已存在,請(qǐng)重新輸入!”并且用 goto語(yǔ)句返回到loop,重新輸入信息。設(shè)計(jì)一個(gè)a模塊:鍵盤(pán)輸入一個(gè)字符,必須是“Y”“y”“N”“n”,否則重新輸入。最后if 語(yǔ)句判斷變量的值是否重新輸入信息,如果輸入的是“Y”或“y”,返回到loop,黑龍江工程學(xué)院 用戶(hù)可以輸入下一條信息,直到用戶(hù)輸入“N”或“n”返回主界面。每插入一條記錄n的值加1。功能的實(shí)現(xiàn)見(jiàn)源程序: 2、示好友的信息:display()函數(shù) 定義整型變量i用來(lái)循環(huán)輸出記錄。分別輸出每條記錄,并輸出記錄的個(gè)數(shù)。 3、查找好友的信息search()函數(shù) 定義字符型變量c,字符型數(shù)組a,定義loop模塊,功能:通過(guò)鍵盤(pán)輸入要查找的信息。首先顯示提示信息:“輸入你要查找的好友的姓名”然后從鍵盤(pán)輸入姓名。For語(yǔ)句循環(huán)內(nèi)嵌if語(yǔ)句,用strcmp 函數(shù)查找信息,并且顯示該記錄的所有信息,并跳出循環(huán)。再用for 語(yǔ)句內(nèi)嵌if語(yǔ)句判斷,如果沒(méi)有查到顯示提示信息:“如果沒(méi)有查到相關(guān)語(yǔ)句,是否重新查找(Y/N)?定義abc模塊的功能輸入一個(gè)字符(“Y”或“y”“N”“n”)用來(lái)判斷是否重新查找。如果輸入“Y”或“y”,則用goto語(yǔ)句返回loop重新查找。否則令i的值為n跳出循環(huán)。最后返回主界面。 4、刪除好友信息:del()函數(shù) 首先定義字符數(shù)組、變量和a、b兩個(gè)goto標(biāo)識(shí)符。在a模塊中用scanf函數(shù)輸入要?jiǎng)h除的好友的姓名,用for循環(huán)和if 語(yǔ)來(lái)實(shí)現(xiàn)對(duì)好友的查找,如果找到記錄末尾,提示查無(wú)此人。在b模塊中,用來(lái)實(shí)現(xiàn)刪除功能。先確認(rèn)是否刪除,如果鍵盤(pán)輸入Y 或y來(lái)確認(rèn)要?jiǎng)h除再執(zhí)行for循環(huán),通過(guò)strcmpy函數(shù)把后一條記錄復(fù)制到前一條記錄。進(jìn)行刪除記錄后,并把原末尾記錄數(shù)據(jù)賦空字符,按任意鍵刪除,按任意鍵返回主菜單。 5、修改記錄:modify()函數(shù) 定義了a、b兩個(gè)goto標(biāo)識(shí)符。在a模塊中,用scanf函數(shù)輸入要修改人的姓名,用for 循環(huán)、if語(yǔ)句及strcmp函數(shù)找到該姓名的記錄,若到記錄末尾提示“查無(wú)此人”是否繼續(xù)重新輸入姓名,黑龍江工程學(xué)院 如果重新輸入姓名再用goto語(yǔ)句再執(zhí)行重新查找。在b模塊中,用于修改記錄,如果要修改記錄則從鍵盤(pán)輸入Y或y,用scanf函數(shù)來(lái)輸入新的記錄數(shù)據(jù)來(lái)實(shí)現(xiàn)修改記錄。 6、排序:sort()函數(shù) 選擇法排序的方法。定義變量i,j,用于循環(huán),定義4個(gè)字符型數(shù)組,用于替換的中間變量;用兩個(gè)for循環(huán)語(yǔ)句,用strcmp函數(shù)比較。按姓名升序排序。比較前一條記錄和后一條記錄的姓名,如果strcmp函數(shù)值大于0,則將這兩條記錄的所有信息替換,4個(gè)字符型數(shù)組用作替換的中間變量。最后調(diào)用display()(顯示結(jié)果)顯示排序后的結(jié)果。 第三章 程序編碼 #include 黑龍江工程學(xué)院 void format();int back(){ cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫(xiě)): ”; char back; cin>>back; if(back=='R'||back=='r') return 1; else return 0;} void print(int i){ cout<<“學(xué)號(hào):”< cout<<“姓名:”< cout<<“地址:”< cout<<“電話(huà)號(hào)碼:”< cout<<“郵編:”< cout<<“E_MAIL:”< <<“tt★★★★★★★★★★★★★★★★★★★★★★★★★★” < <<“tt※ ※” < <<“tt※ 通 迅 錄 ※” < <<“tt※ ※” < <<“tt※ 1.通訊錄編輯.4.按序排列.※” < <<“tt※ ※” < <<“tt※ 2.查詢(xún)聯(lián)系人.5.將文件讀入程序.※” < <<“tt※ ※” < <<“tt※ 3.將資料寫(xiě)入文件.6.格式化(慎用).※” < <<“tt※ ※” < <<“tt★★★★★★★★★★★★★★★★★★★★★★★★★★” < <<“tt ”< <<“ttt選擇 :”;cin>>select1;switch(select1) 黑龍江工程學(xué)院 { case '1':cout<<“(1)添加:”< cout<<“(2)刪除:”< cout<<“(3)修改:”< char select2; cout<<“ 請(qǐng)選擇:”< cin>>select2; switch(select2) { case '1':cout<<“ 輸入添加的資料:”< char no[13];char name[20];char address[100];char tel_no[12];char post_code[7];char e_mail[40]; cout<<“ 輸入學(xué)號(hào):”< cin>>no; cout<<“ 輸入姓名:”< cin>>name; cout<<“ 輸入地址:”< cin>>address; cout<<“ 輸入電話(huà)號(hào)碼:”< cin>>tel_no; cout<<“ 輸入郵編:”< cin>>post_code;cout<<“ 輸入E_mail:”< cin>>e_mail; a.add(no,name,address,tel_no,post_code,e_mail); cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫(xiě)): ”; char back_add; cin>>back_add; if(back_add=='R'||back_add=='r') goto top; else goto bottom; break; case '2':cout<<“ 輸入要?jiǎng)h除人的姓名:”< char name2[20]; cin>>name2; a.del(name2); cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫(xiě)): ”; 黑龍江工程學(xué)院 “; ”; char back_del; cin>>back_del; if(back_del=='R'||back_del=='r') goto top; else goto bottom; break;case '3':cout<<“ 輸入需要修改人的姓名:”< char name3[20]; cin>>name3; if(a.correct(name3)) goto top; else goto bottom; break;} break;case '2':cout<<“(1)根據(jù)姓名查找”< cout<<“ 輸入姓名: ”; cin>>name4; a.find2(name4); cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫(xiě)): char back_f1;cin>>back_f1;if(back_f1=='R'||back_f1=='r') goto top;else goto bottom;break;case '2':char no4[13];cout<<” 輸入學(xué)號(hào): “;cin>>no4;a.find1(no4); cout<<” 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫(xiě)): char back_f2;cin>>back_f2; 黑龍江工程學(xué)院 “; ”; if(back_f2=='R'||back_f2=='r') goto top; else goto bottom; break;} break;case '3':a.write();cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫(xiě)): ”;char back_w;cin>>back_w;if(back_w=='R'||back_w=='r') goto top;else goto bottom;break;case '4':cout<<“(1)按學(xué)號(hào)排序:”< cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫(xiě)): char back;cin>>back;if(back=='R'||back=='r') goto top;else goto bottom;break;case '2':a.list2();cout<<” 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫(xiě)): } char back1;cin>>back1;if(back1=='R'||back1=='r')goto top;else goto bottom;break; 黑龍江工程學(xué)院 break;case '5':a.read(); cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫(xiě)): ”; char back_r; cin>>back_r; if(back_r=='R'||back_r=='r') goto top; else goto bottom; break;case '6':cout<<“ 請(qǐng)確認(rèn)刪除所有資料!(Y/N)”; char select5; cin>>select5; if(select5=='Y'||select5=='y') a.format(); cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫(xiě)): ”; char back_f; cin>>back_f; if(back_f=='R'||back_f=='r') goto top; else goto bottom; break;} bottom:cout<<“ ★★★★★★★★★★★★★★★★★★★★★★★ ”< void inter::add(char no[13],char name[20],char address[100],char tel_no[12],char post_code[7],char e_mail[40]){ int x=1;for(int i=0;i<35;i++){ if(!strcmp(st[i].no,“0”)) { strcpy(st[i].address,address); strcpy(st[i].e_mail,e_mail); strcpy(st[i].name,name); strcpy(st[i].no,no); strcpy(st[i].post_code,post_code); strcpy(st[i].tel_no,tel_no); x=0; } 黑龍江工程學(xué)院 if(x==0) break;} } //刪除聯(lián)系人 void inter::del(char name[20]){ int x=1;for(int i=0;i<35;i++){ if(!strcmp(st[i].name,name)) { strcpy(st[i].address,“0”); strcpy(st[i].e_mail,“0”); strcpy(st[i].name,“0”); strcpy(st[i].no,“0”); strcpy(st[i].post_code,“0”); strcpy(st[i].tel_no,“0”); } else x=0;} if(x==0) cout<<“ error:輸入姓名錯(cuò)誤!”< int inter::correct(char name[30]){ int x;for(int i=0;i<35;i++){ if(!strcmp(st[i].name,name)) x=i;} char select;cout<<“(1)修改姓名:”< 黑龍江工程學(xué)院 char name1[30]; cin>>name1; strcpy(st[x].name,name1); cout<<“ 修改成功!”< return back(); break;case '2':cout<<“ 輸入要修改的學(xué)號(hào):”; char no1[13]; cin>>no1; strcpy(st[i].no,no1); cout<<“ 修改成功!”< return back(); break;case '3':cout<<“ 輸入要修改的地址:”; char address1[100]; cin>>address1; strcpy(st[x].address,address1); cout<<“ 修改成功!”< return back(); break;case '4':cout<<“ 輸入要修改的郵編:”; char post_code1[7]; cin>>post_code1; strcpy(st[x].post_code,post_code1); cout<<“ 修改成功!”< return back(); break;case '5':cout<<“ 輸入要修改的電話(huà)號(hào)碼:”; char tel_no1[12]; cin>>tel_no1; strcpy(st[x].tel_no,tel_no1); cout<<“ 修改成功!”< return back(); break;case '6':cout<<“ 輸入要修改的E_MAIL:”; char e_mail1[40]; cin>>e_mail1; strcpy(st[x].e_mail,e_mail1); cout<<“ 修改成功!”< return back(); break;} } //按學(xué)號(hào)查詢(xún)聯(lián)系人 黑龍江工程學(xué)院 void inter::find1(char no[13]){ int x,y=1,z=1;for(int i=0;i<35;i++){ if(!strcmp(st[i].no,no)) { x=i; z=0; } else y=0; if(z==0) break;} if(y==0) cout<<“ 輸入的學(xué)號(hào)查找不到?。 ? } //按姓名查詢(xún)聯(lián)系人 void inter::find2(char name[20]){ int x,y=1,z=1;for(int i=0;i<35;i++){ if(!strcmp(st[i].name,name)) { x=i; z=0; } else y=0; if(z==0) break;} if(y==0) cout<<“ 輸入的姓名查找不到?。 ? void inter::read(){ char name1[20];cout<<“ 輸入你要導(dǎo)入的文件名: ”;cin>>name1; 黑龍江工程學(xué)院 strcat(name1,“.txt”);ifstream file(name1);char line[120];char no[120];char name[120];char address[120];char post_code[120];char tel_no[120];char e_mail[120];int time=0;file.getline(line,120);while(!file.eof()){ for(int k=0;k<35;k++){ if(time==0) { strcpy(no,line); time=1; for(int i=0;i<120;i++) { if(no[i]==':') { i++; for(int j=0;j<13;j++) { st[k].no[j]=no[i]; i++; } } } file.getline(line,120,'n'); } if(time==1){ strcpy(name,line); time=2; for(int i=0;i<120;i++) { if(name[i]==':') { i++; for(int j=0;j<20;j++) { 黑龍江工程學(xué)院 st[k].name[j]=name[i]; i++; } } } file.getline(line,120,'n');} if(time== 2){ strcpy(address,line);time=3;for(int i=0;i<120;i++){ if(address[i]==':') { i++; for(int j=0;j<100;j++) { st[k].address[j]=address[i]; i++; } } } file.getline(line,120,'n');} if(time==3){ strcpy(tel_no,line);time=4;for(int i=0;i<120;i++){ if(tel_no[i]==':') { i++; for(int j=0;j<12;j++) { st[k].tel_no[j]=tel_no[i]; i++; } } } file.getline(line,120,'n');} 黑龍江工程學(xué)院 if(time==4) { strcpy(post_code,line); time=5; for(int i=0;i<120;i++) { if(post_code[i]==':') { i++; for(int j=0;j<7;j++) { st[k].post_code[j]=post_code[i]; i++; } } } file.getline(line,120,'n'); } if(time==5) { strcpy(e_mail,line); time=0; for(int i=0;i<120;i++) { if(e_mail[i]==':') { i++; for(int j=0;j<40;j++) { st[k].e_mail[j]=e_mail[i]; i++; } } } file.getline(line,120,'n'); } } } file.close();} //寫(xiě)入文件 void inter::write(){ char name[20]; 黑龍江工程學(xué)院 cout<<“ 輸入要保存的文件名 ”;cin>>name;strcat(name,“.txt”);ofstream savefile(name);for(int i=0;i<35;i++){ savefile << “學(xué)號(hào):”< savefile << “姓名:”< savefile << “地址:”< savefile << “電話(huà)號(hào)碼:”< savefile << “郵編:”< savefile << “E_MAIL:”< void inter::list1(){ for(int i=0;i<34;i++){ for(int j=0;j<35-i;j++) { if(strcmp(st[j].no,st[j+1].no)>0) { char no[13];char name[20];char address[100];char tel_no[12];char post_code[7];char e_mail[40]; strcpy(no,st[j].no); strcpy(st[j].no,st[j+1].no); strcpy(st[j+1].no,no); strcpy(name,st[j].name); strcpy(st[j].name,st[j+1].name); strcpy(st[j+1].name,name); strcpy(address,st[j].address); strcpy(st[j].address,st[j+1].address); strcpy(st[j+1].address,address); strcpy(tel_no,st[j].tel_no); 黑龍江工程學(xué)院 strcpy(st[j].tel_no,st[j+1].tel_no); strcpy(st[j+1].tel_no,tel_no); strcpy(post_code,st[j].post_code); strcpy(st[j].post_code,st[j+1].post_code); strcpy(st[j+1].post_code,post_code); strcpy(e_mail,st[j].e_mail); strcpy(st[j].e_mail,st[j+1].e_mail); strcpy(st[j+1].e_mail,e_mail); } } } for(int k=0;k<35;k++){ int x=0; if(strcmp(st[k].no,“0”)) { print(k); x=1; } if(x==1) { cout< cout<<“---------------”< } } } //按姓名排序 void inter::list2(){ for(int i=0;i<34;i++){ for(int j=0;j<35-i;j++) { if(strcmp(st[j].name,st[j+1].name)>0) { char no[13];char name[20];char address[100];char tel_no[12];char post_code[7]; 黑龍江工程學(xué)院 char e_mail[40]; strcpy(no,st[j].no); strcpy(st[j].no,st[j+1].no); strcpy(st[j+1].no,no); strcpy(name,st[j].name); strcpy(st[j].name,st[j+1].name); strcpy(st[j+1].name,name); strcpy(address,st[j].address); strcpy(st[j].address,st[j+1].address); strcpy(st[j+1].address,address); strcpy(tel_no,st[j].tel_no); strcpy(st[j].tel_no,st[j+1].tel_no); strcpy(st[j+1].tel_no,tel_no); strcpy(post_code,st[j].post_code); strcpy(st[j].post_code,st[j+1].post_code); strcpy(st[j+1].post_code,post_code); strcpy(e_mail,st[j].e_mail); strcpy(st[j].e_mail,st[j+1].e_mail); strcpy(st[j+1].e_mail,e_mail); } } } for(int k=0;k<35;k++){ int x=0; if(strcmp(st[k].no,“0”)) { print(k); x=1; } if(x==1) { cout< cout<<“-------”< } } 黑龍江工程學(xué)院 } //格式化 void inter::format(){ for(int i=0;i<35;i++){ strcpy(st[i].address,“0”); strcpy(st[i].e_mail,“0”); strcpy(st[i].name,“0”); strcpy(st[i].no,“0”); strcpy(st[i].post_code,“0”); strcpy(st[i].tel_no,“0”);} } 第四章 程序調(diào)試與測(cè)試 運(yùn)行程序,首頁(yè)顯示如下: 按1選擇通訊錄編輯,編輯通訊錄,顯示(1)添加,(2)刪除,(3)修改,運(yùn)行后結(jié)果如下: 黑龍江工程學(xué)院 第一次使用,按1添加聯(lián)系人,填入相關(guān)信息,運(yùn)行圖如下: 返回首頁(yè),按2可以查找聯(lián)系人,可以根據(jù)姓名查找和學(xué)號(hào)查找,本次運(yùn)用學(xué)號(hào)查找,運(yùn)行如下: 返回首頁(yè),按4可以進(jìn)行排序,可以根據(jù)姓名和學(xué)號(hào)排序,按姓名排序需要自己編輯的姓氏排序規(guī)則才能使用,本次使用學(xué)號(hào)排序,運(yùn)行如下: 將資料寫(xiě)入文件功能是將編輯好的通訊錄寫(xiě)入文本文件,文本文件的名字可以自己輸入。將文件讀入程序,是將文本文件中的信息讀入程序,進(jìn)行添加,修改,刪除,排序等功能。 第五章 結(jié)果分析 總體上可以滿(mǎn)足一般的應(yīng)用需求,但是還有一定的不足,程序運(yùn)行流暢,沒(méi)有未知錯(cuò)誤。 第六章 設(shè)計(jì)創(chuàng)新及心得 黑龍江工程學(xué)院 程設(shè)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí) ,發(fā)現(xiàn),提出,分析和解決實(shí)際問(wèn)題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對(duì)我們的實(shí)際工作能力的具體訓(xùn)練和考察過(guò)程.隨著科學(xué)技術(shù)發(fā)展的日新月異,當(dāng)今計(jì)算機(jī)應(yīng)用在生活中可以說(shuō)得是無(wú)處不在。因此作為二十一世紀(jì)的大學(xué)來(lái)說(shuō)掌握程序開(kāi)發(fā)技術(shù)是十分重要的,而C++語(yǔ)言又是最常見(jiàn),功能最強(qiáng)大的一種高級(jí)語(yǔ)言,因此做好C++語(yǔ)言課程設(shè)計(jì)是十分必要的。 通過(guò)幾天的課程設(shè)計(jì)使我們懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過(guò)程中遇到問(wèn)題,可以說(shuō)得是困難重重,這畢竟第一次真真的做程序設(shè)計(jì),難免會(huì)遇到過(guò)各種各樣的問(wèn)題,同時(shí)在設(shè)計(jì)的過(guò)程中發(fā)現(xiàn)了自己的不足之處,對(duì)一些前面學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固,比如說(shuō)結(jié)構(gòu)體,指針??通過(guò)這次課程設(shè)計(jì)之后,我們把前面所學(xué)過(guò)的知識(shí)又重新溫故了一遍。 我做的是班級(jí)通訊錄的課程設(shè)計(jì),雖然是很簡(jiǎn)單的一個(gè)小的程序,但對(duì)我來(lái)說(shuō)卻是一個(gè)很大的困難。更加是第一次做課程設(shè)計(jì),所以在機(jī)房做了一個(gè)下午卻絲毫沒(méi)有進(jìn)展,最主要是不知從何開(kāi)始,這個(gè)時(shí)候才知道上課老師們不厭其煩的教導(dǎo)是多么的寶貴,這個(gè)時(shí)候才后悔上課的時(shí)候沒(méi)有認(rèn)真的聽(tīng)講??墒乾F(xiàn)在一切都晚了,還好時(shí)間還算是充裕,只好拿出書(shū)本重新復(fù)習(xí)一下。 開(kāi)始的時(shí)候真的感覺(jué)編程是一件很無(wú)聊的事情,不過(guò)當(dāng)一個(gè)程序運(yùn)行成功的時(shí)候那種喜悅是無(wú)法言語(yǔ)的,那種成就感是無(wú)法比擬的。又經(jīng)過(guò)幾天的努力,終于把程序完成了,盡管程序還是有很多功能上的欠缺和漏洞,可我還是很高興的。無(wú)論如何是自己的勞動(dòng)成果,是自己經(jīng)過(guò)努力得到的成績(jī),同時(shí)也是學(xué)習(xí)C++語(yǔ)言的一次實(shí)踐作業(yè),自己進(jìn)步的證明。 在課程設(shè)計(jì)過(guò)程中,收獲知識(shí),提高能力的同時(shí),我也學(xué)到了很多人生的哲理,懂得怎么樣去制定計(jì)劃,怎么樣去實(shí)現(xiàn)這個(gè)計(jì)劃,并掌握了在執(zhí)行過(guò)程中怎么樣去克服心理上的不良情緒。因此在以后的生活和學(xué)習(xí)的過(guò)程中,我一定會(huì)把課程設(shè)計(jì)的精神帶到生活中,不畏艱難,勇往直前! 1.題目名稱(chēng) 通訊錄管理系統(tǒng) 2.基本功能 (1)顯示:將所有聯(lián)系人的信息顯示出來(lái)(2)查找:按姓名、手機(jī)號(hào)碼、QQ號(hào)碼進(jìn)行查找 (3)添加:從鍵盤(pán)上錄入聯(lián)系人的有關(guān)信息,包括姓名、手機(jī)號(hào)碼、QQ號(hào)碼、家庭地址 (4)修改:根據(jù)用戶(hù)需要,修改聯(lián)系人的指定信息 (5)刪除:刪除不需要的信息 源代碼 #include char number[13];//電話(huà) char qq[11];//qq號(hào) char add[30];//家庭地址 };void ClearScreen()//清屏函數(shù) { system(“cls”);} void printf1()//主界面 { printf(“nnnnttt 歡迎來(lái)到通訊錄!”);printf(“nntt 請(qǐng)選擇操作:”);printf(“nnttt1.顯示通訊錄”);printf(“nttt2.查找通訊錄”);printf(“nttt3.添加通訊錄”);printf(“nttt4.修改通訊錄”);printf(“nttt5.刪除通訊錄”);printf(“nttt6.退出n”);} void printf2()//修改頁(yè)面 { printf(“請(qǐng)選擇操作:n”);printf(“t1.按姓名查找n”);printf(“t2.按手機(jī)號(hào)碼查找n”);printf(“t3.按QQ號(hào)碼查找n”);printf(“t4.返回上一頁(yè)n”);} void Show()//顯示函數(shù) { struct Per * p,person;FILE *fp;int i=0;p=&person;ClearScreen();printf(“姓名tt 電話(huà)t QQt 家庭地址nn”);if((fp=fopen(“aa.txt”,“r”))==NULL){ printf(“cannot open filen”);exit(0);} while(!feof(fp)&&fread(p,LEN,1,fp)){ printf(“%-17s%-13s%-11s%-30sn”,p->name,p->number,p->qq,p->add); i++;} if(i==0) printf(“沒(méi)有聯(lián)系人n”);else printf(“ntttttt共有%d位聯(lián)系人n”,i);fclose(fp);printf(“n按回車(chē)鍵返回上一頁(yè)”);getchar();getchar();} void Seek()//查找 { char name[17],tel[13],qq[11];int n,i;FILE *fp;struct Per * p,person;p=&person;fp=fopen(“aa.txt”,“r”);while(1){ rewind(fp);ClearScreen();printf2();printf(“請(qǐng)選擇您的操作:n”);scanf(“%d”,&n);if(n==1){ i=0; ClearScreen(); printf(“請(qǐng)輸入要查找的聯(lián)系人的姓名:n”); scanf(“%s”,name);while(!feof(fp)){ fread(p,LEN,1,fp); if(strcmp(name,p->name)==0) { i++; if(i==1) { printf(“姓名tt 電話(huà)t QQt 家庭地址nn”);} printf(“%-17s%-13s%-11s%-30sn”,p->name,p->number,p->qq,p->add); memset(p,0,LEN); } } if(i==0)printf(“沒(méi)有該聯(lián)系人的信息n”); printf(“n按回車(chē)鍵返回上一頁(yè)”);getchar();getchar();} else if(n==2){ i=0;ClearScreen();printf(“請(qǐng)輸入要查找的手機(jī)號(hào)碼:n”);scanf(“%s”,tel);while(!feof(fp)){ fread(p,LEN,1,fp);if(strcmp(tel,p->number)==0){ i++; if(i==1) { printf(“姓名tt 電話(huà)t QQt 家庭地址 nn”);} printf(“%-17s%-13s%-11s%-30sn”,p->name,p->number,p->qq,p->add); memset(p,0,LEN); } } if(i==0)printf(“沒(méi)有該聯(lián)系人的信息n”);printf(“n按回車(chē)鍵返回上一頁(yè)”);getchar();getchar(); } else if(n==3){ i=0;ClearScreen();printf(“請(qǐng)輸入要查找的QQ號(hào)碼:n”);scanf(“%s”,qq);while(!feof(fp)){ fread(p,LEN,1,fp); if(strcmp(qq,p->qq)==0) { i++; if(i==1) { printf(“姓名tt 電話(huà)t QQt 家庭地址nn”);} printf(“%-17s%-13s%-11s%-30sn”,p->name,p->number,p->qq,p->add); memset(p,0,LEN); } } if(i==0) printf(“沒(méi)有該聯(lián)系人的信息n”); printf(“n按回車(chē)鍵返回上一頁(yè)”);getchar();getchar(); } else if(n==4) break;} fclose(fp);getchar();} void Add()//添加函數(shù) { int n;FILE *fp;struct Per * p,person;p=&person; printf(“請(qǐng)選擇您的操作 1 添加 2 返回上一頁(yè)nn”);scanf(“%d”,&n);if(n!=1&&n!=2){ printf(“請(qǐng)選擇您的操作 1 添加 2 返回上一頁(yè)n”);scanf(“%d”,&n);} while(n==1){ memset(p,0,LEN);//機(jī)構(gòu)體的初始化 ClearScreen();fp=fopen(“aa.txt”,“a”);printf(“請(qǐng)輸入姓名n”);scanf(“%s”,p->name);printf(“請(qǐng)輸入手機(jī)號(hào)碼n”);scanf(“%s”,p->number);printf(“請(qǐng)輸入qq(沒(méi)有請(qǐng)輸入無(wú))n”);scanf(“%s”,p->qq);printf(“請(qǐng)輸入地址n”);scanf(“%s”,p->add); fwrite(p,LEN,1,fp);fclose(fp);printf(“保存成功!n”);printf(“您想 1繼續(xù)添加 2退出n”);scanf(“%d”,&n);if(n!=1&&n!=2) { printf(“請(qǐng)選擇您的操作 1 添加 2 退出nn”);scanf(“%d”,&n); } } } void Alter()//修改 { char name[17],tel[13],qq[11],add[30];int n,len,i=0;FILE *fp;struct Per *p,person;p=&person;fp=fopen(“aa.txt”,“r+”);printf(“請(qǐng)輸入要修改的聯(lián)系人的姓名n”);scanf(“%s”,name);while(!feof(fp)&&fread(p,LEN,1,fp)){ if(strcmp(name,p->name)==0) { i++; len=ftell(fp);printf(“n姓名tt 電話(huà)t QQt 家庭地址nn”); printf(“%-17s%-13s%-11s%-30sn”,p->name,p->number,p->qq,p->add); } } printf(“n”);if(i==0){ printf(“沒(méi)有該聯(lián)系人的信息n”);getchar(); printf(“按回車(chē)鍵返回主菜單n”);} else { printf(“1.修改該聯(lián)系人的姓名n”);printf(“2.修改該聯(lián)系人的手機(jī)號(hào)碼n”);printf(“3.修改該聯(lián)系人的QQ號(hào)碼n”);printf(“4.修改該聯(lián)系人的家庭地址n”);printf(“5.修改該聯(lián)系人的全部信息n”); printf(“6.返回上一頁(yè)nn”);printf(“請(qǐng)輸入您的操作序號(hào)n”);scanf(“%d”,&n); switch(n) { case 1: ClearScreen();fseek(fp,len-71,SEEK_SET);printf(“請(qǐng)輸入姓名n”);scanf(“%s”,name); fwrite(&name,sizeof(name),1,fp);printf(“修改成功n”); printf(“按回車(chē)鍵返回主菜單n”);getchar(); break; case 2: ClearScreen();fseek(fp,len-54,SEEK_SET);printf(“請(qǐng)輸入手機(jī)號(hào)碼n”);scanf(“%s”,tel); fwrite(&tel,sizeof(tel),1,fp);printf(“修改成功n”); printf(“按回車(chē)鍵返回主菜單n”);getchar(); break; case 3: ClearScreen();fseek(fp,len-41,SEEK_SET);printf(“請(qǐng)輸入qq號(hào)碼n”);scanf(“%s”,qq); fwrite(&qq,sizeof(qq),1,fp);printf(“修改成功n”); printf(“按回車(chē)鍵返回主菜單n”);getchar(); break; case 4: ClearScreen();fseek(fp,len-30,SEEK_SET);printf(“請(qǐng)輸入家庭地址n”);scanf(“%s”,add); fwrite(&add,sizeof(add),1,fp);printf(“修改成功n”); printf(“按回車(chē)鍵返回主菜單n”);getchar(); break; case 5: ClearScreen();fseek(fp,len-71,SEEK_SET); printf(“請(qǐng)輸入姓名n”);scanf(“%s”,p->name);printf(“ 請(qǐng) 輸 入 手 機(jī) 號(hào) 碼n”);scanf(“%s”,p->number);printf(“請(qǐng)輸入n”);scanf(“%s”,p->qq);printf(“請(qǐng)輸入地址n”);scanf(“%s”,p->add);fwrite(p,LEN,1,fp);printf(“修改成功n”); printf(“按回車(chē)鍵返回主菜單n”);getchar(); break; case 6:; } } fclose(fp);getchar(); } qq(沒(méi)有請(qǐng)輸入無(wú))void Delete()//刪除 { int i=0,j,l;char name[17];struct Per * p,person;FILE *fp,*fp1;p=&person;fp=fopen(“aa.txt”,“a+”);printf(“請(qǐng)輸入要?jiǎng)h除的聯(lián)系人的姓名n”);scanf(“%s”,name);while(!feof(fp)&&fread(p,LEN,1,fp))//顯示要?jiǎng)h除的聯(lián)系人的信息 { if(strcmp(name,p->name)==0) { i++; if(i==1) {printf(“姓名tt 電話(huà)t QQt 家庭地址nn”);} printf(“%-17s%-13s%-11s%-30sn”,p->name,p->number,p->qq,p->add); memset(p,0,LEN); } } rewind(fp);if(i==0)printf(“沒(méi)有該聯(lián)系人的信息n”);else { printf(“n此聯(lián)系人將被刪除n”); printf(“1.確定 2.取消n”); scanf(“%d”,&j); if(j==1) { fp1=fopen(“bb.txt”,“a”); while(!feof(fp)&&fread(p,LEN,1,fp)) { if(strcmp(name,p->name)!=0) { fwrite(p,LEN,1,fp1); } } fclose(fp); fclose(fp1); remove(“aa.txt”); rename(“bb.txt”,“aa.txt”); printf(“n該聯(lián)系人已刪除 按回車(chē)鍵返回上一頁(yè)n”);getchar();getchar(); } if(j==2) { fclose(fp);printf(“n按回車(chē)鍵返回上一頁(yè)n”);getchar();getchar(); } } } int Select()//主菜單輸入 { int n;printf(“選擇您想要的操作 請(qǐng)輸入序號(hào)!n”);scanf(“%d”,&n);while(n<1||n>6){ printf(“輸入錯(cuò)誤,請(qǐng)重新輸入!n”); scanf(“%d”,&n); } return(n);} int main(){ while(1){ ClearScreen(); printf1(); switch(Select()){ case 1:ClearScreen();Show();break; case 2:ClearScreen();Seek();break; case 3:ClearScreen();Add();break; case 4:ClearScreen();Alter();break; case 5:ClearScreen();Delete();break; case 6:exit(0);} } return 0;} “學(xué)生通訊信息記錄系統(tǒng)”的設(shè)計(jì)與實(shí)現(xiàn) 一、設(shè)計(jì)要求 1.問(wèn)題的描述 “學(xué)生通訊信息記錄系統(tǒng)”是為了實(shí)現(xiàn)快速的對(duì)學(xué)生信息進(jìn)行錄入、刪除、查找、顯示。各個(gè)功能靠函數(shù)實(shí)現(xiàn)。2.需求分析 (1)應(yīng)該包括以下功能:輸入信息、顯示信息、查找以姓名作為關(guān)鍵字、刪除信息(2)作為一個(gè)完整的系統(tǒng),應(yīng)具有友好的界面和較強(qiáng)的容錯(cuò)能力 二、概要設(shè)計(jì) 1.主界面設(shè)計(jì) 2.儲(chǔ)存結(jié)構(gòu)設(shè)計(jì) 本系統(tǒng)主要采用鏈表類(lèi)型來(lái)表示儲(chǔ)存“學(xué)生信息記錄系統(tǒng)”中的信息。程序中定義了address結(jié)構(gòu)。其中,包括學(xué)生的姓名、宿舍信息和學(xué)號(hào)。3.系統(tǒng)功能的設(shè)計(jì) 1)輸入信息——enter();2)顯示信息———display();3)查找以姓名作為關(guān)鍵字 ———search();4)刪除信息———delete(); 三、模塊設(shè)計(jì) 1.模塊設(shè)計(jì) 本成績(jī)包含兩個(gè)模塊:主程序模塊和鏈表操作模塊。2.系統(tǒng)的程序及功能設(shè)計(jì) (1)插入學(xué)生信息 void enter() /*輸入函數(shù),本函數(shù)循環(huán)輸入資料,當(dāng)輸入姓名為空時(shí)退出*/ { struct address *info; /*定義當(dāng)前結(jié)點(diǎn)*/ for(;;){ info=(struct address *)malloc(sizeof(struct address)); /*為當(dāng)前結(jié)點(diǎn)分配空間*/ if(!info) { printf(“n Out of memory”); exit(0); /*如果分配空間失敗,退出程序*/ } printf(“輸入空姓名結(jié)束:n”); inputs(“請(qǐng)輸入 姓名:”,info->name,10); if(!info->name[0]) break; /*如果輸入姓名為空,結(jié)束循環(huán)*/ inputs(“請(qǐng)輸入 院系:”,info->street,50); inputs(“請(qǐng)輸入宿舍樓:”,info->city,15); inputs(“請(qǐng)輸入宿舍號(hào):”,info->state,15); inputs(“請(qǐng)輸入 學(xué)號(hào):”,info->eip,7); insert(info,&start,&last); /*調(diào)用結(jié)點(diǎn)插入函數(shù)*/ } } 五、測(cè)試分析 1.輸入學(xué)生信息 4.刪除信息 5.退出 struct address *start; /*首結(jié)點(diǎn)*/ struct address *last; /*尾結(jié)點(diǎn)*/ struct address *find(char *); /*聲明查找函數(shù)*/ void enter(); /*函數(shù)聲明*/ void search();void save(); void load();void list();void ddelete(struct address **start,struct address **last);void insert(struct address *i,struct address **start,struct address **last);void inputs(char *,char *,int);void display(struct address *);int menu_select(void); void main(){ int c; printf(“n 歡迎使用學(xué)生通訊錄系統(tǒng)”); printf(“nn”); printf(“t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓n”); printf(“t┃************************************************************┃n”); printf(“t┃* * *┃n”); printf(“t┃* 1.輸入信息 * 2.刪除信息 *┃n”); printf(“t┃* * *┃n”); printf(“t┃************************************************************┃n”); printf(“t┃* * *┃n”); printf(“t┃* 3.顯示信息 * 4.查找 *┃n”); printf(“t┃* * *┃n”); printf(“t┃************************************************************┃n”); printf(“t┃ 5.退出 ┃ n”); printf(“t┃************************************************************┃n”); exit(0); /*如果分配空間失敗,退出程序*/ } printf(“輸入空姓名結(jié)束:n”); inputs(“請(qǐng)輸入 姓名:”,info->name,10); if(!info->name[0])break; /*如果輸入姓名為空,結(jié)束循環(huán)*/ inputs(“請(qǐng)輸入 院系:”,info->street,50); inputs(“請(qǐng)輸入宿舍樓:”,info->city,15); inputs(“請(qǐng)輸入宿舍號(hào):”,info->state,15); inputs(“請(qǐng)輸入 學(xué)號(hào):”,info->eip,7); insert(info,&start,&last); /*調(diào)用結(jié)點(diǎn)插入函數(shù)*/ } void inputs(char *prompt,char *s,int count) /*輸入函數(shù),有越界檢測(cè)功能*/ { char p[255]; do } i->next=NULL; i->prior=NULL; *last=i; *start=i; return; } else { (*last)->next=i; i->prior=*last;i->next=NULL; *last=(*last)->next; } } void ddelete(struct address **start,struct address **last) /*刪除函數(shù)*/ { struct address *info; char s[80]; inputs(“請(qǐng)輸入 姓名:”,s,10); /*輸入欲刪除結(jié)點(diǎn)的name域內(nèi)容*/ info=find(s); if(info) { printf(“Deleting......n”);if(*start==info) 點(diǎn)的下驅(qū)作為新的首結(jié)點(diǎn)(入口)*/ { *start=info->next; if(*start)(*start)->prior=NULL; else *last=NULL; } else 結(jié)點(diǎn)*/ { info->prior->next=info->next; info=info->next; } printf(“未找到相關(guān)信息.n”); return NULL;} /*輸出整個(gè)鏈表*/ void list(void){ struct address *info; info=start; if(info==NULL)printf(“當(dāng)前記錄為空!”);else printf(“姓名t院系t宿舍樓t宿舍號(hào)t學(xué)號(hào)tn”); while(info) { };display(info);if(info->next==NULL){break;} info=info->next; printf(“nn”);} /*查找函數(shù)*/ /*輸入欲查找的姓名*/ /*如果沒(méi)找到,顯示Not found*/ /*如果找到,顯示該結(jié)點(diǎn)資料*/ 七、用戶(hù)使用手冊(cè) (1)本程序的執(zhí)行文件為“學(xué)生通訊錄管理系統(tǒng).exe”。 (2)進(jìn)入本系統(tǒng)之后,隨即顯示系統(tǒng)住菜單界面。用戶(hù)可以在該界面下根據(jù)提示輸入并按回車(chē)鍵確定,執(zhí)行相應(yīng)的菜單命令。 (3)本系統(tǒng)可以對(duì)學(xué)生信息進(jìn)行錄入和刪除。 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 課題:學(xué)生成績(jī)管理系統(tǒng) 姓名:孫軒宇 學(xué)號(hào):E01014316 專(zhuān)業(yè):計(jì)算機(jī)科技 院系:計(jì)科院 2010.10.8 班級(jí):10第二篇:通訊錄管理系統(tǒng)
第三篇:C++通訊錄管理系統(tǒng)
第四篇:通訊錄管理系統(tǒng)
第五篇:學(xué)生通訊錄管理系統(tǒng)