




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、17c+課程設計報告2021-10-21南京航空航天大學c+課程設計報告學號:姓名: c+ 一、程序簡介二、程序功能介紹三、源程序四、編程心得及其展望*一、 程序簡介:*簡單的通訊錄*1、 add recrd;2、 delete record;3、 display all record;4、 query by name;5、 modify record;6、 add from a text file;7、 write to a text file;8、 sort;9、 quit;請選擇(19):* 此程序是對一個簡單的通訊記錄進行管理。用戶根據(jù)以上的各個選項卡進行想要的數(shù)據(jù)操作,每一個選項都有
2、相關(guān)的提示輸入輸出,簡單明了,甚是清晰。根據(jù)程序可以對一個有序鏈表進行如下操作:1、 增加一個有序的通訊記錄;2、 刪除通訊記錄上的一個記錄;3、 顯示通訊錄上所有的記錄;4、 按姓名查找有關(guān)的記錄;5、 輸入要修改的姓名查找到后對其進行修改;6、 從寫好的一個正文文件中批量增加記錄并排序;7、 把通訊錄上所有記錄寫入到一個文件內(nèi)進行保存;8、 修改當前的排序關(guān)鍵字;9、 退出程序并把本次所有記錄寫入到二進制文件中。下面是對改程序進行相關(guān)介紹。二、程序功能簡介: 此程序為一個簡單的通訊錄。通訊錄是一個簡單的數(shù)據(jù)庫,每一個記錄包含一個人的所有信息(本程序中信息包含:姓名、辦公室電話、家庭電話、手
3、機號碼、email地址)。用于管理一個小群體的通訊記錄。程序的執(zhí)行過程為:顯示主菜單,用戶通過在choice:處輸入選項(本程序為19的數(shù)字選項),按回車后接入相關(guān)程序段進行執(zhí)行!下面對本程序的19個選項進行簡單的說明:1、 add record(增加記錄):程序執(zhí)行時,有相關(guān)的提示輸入。每次輸入一個人的相關(guān)數(shù)據(jù)信息,新記錄加入后通訊錄按指定的排序順序排序。本程序中,最初默認按“姓名“進行排序,但是后面的8 sort選項可以進行相應的排列順序修改(如改為按“辦公室電話“進行排序)。2、 delete record(刪除記錄): 如果要對已建通訊錄中的某個人的信息進行刪除操作,則選2. 輸入待刪
4、除記錄的姓名,顯示該姓名的所有信息,讓用戶確認是否要刪除。3、 displayall record(顯示所有的記錄):執(zhí)行時程序按設定的排列順序?qū)νㄓ嶄浿械乃杏涗涍M行顯示,每顯示10條記錄,暫停,用戶按鍵繼續(xù)。4、 query by name(按姓名進行查詢并顯示該記錄):用戶根據(jù)執(zhí)行程序時的相關(guān)提示,輸入要查詢記錄的姓名,系統(tǒng)根據(jù)輸入的姓名在已建立的通訊錄中查找該記錄并且顯示在屏幕上。5、 modify record(按姓名查找并進行修改):用戶根據(jù)執(zhí)行程序時的提示信息輸入要修改的記錄的姓名,系統(tǒng)根據(jù)輸入的信息在已建立的通訊記錄中查找相關(guān)的記錄。本程序段是查找到要修改的記錄后顯示出來,然后
5、提示用戶重新輸入該記錄的信息(所有信息)。然后重新插入到原有通訊錄中重新排序。6、 add from a text file(從正文文件中批量添加記錄到通訊表中): 此程序段是提供給用戶事先在建立好的一個文本文件中輸入相關(guān)的記錄,然后通過此選項卡插入到通訊表中。 程序執(zhí)行是需要用戶輸入正文文件名。輸入程序從相關(guān)的文件中追加記錄。7、 write to a text file(將通訊表中的數(shù)據(jù)寫入到正文文件中): 通過該選項用戶可以把通訊表中的記錄逐一寫入到文本文件中保存起來。用戶需要輸入一個文本文件的名字即可,系統(tǒng)將通訊表中的所有記錄寫入該文件中。8、 sort(重新設置排序格式): 首先顯示
6、當前的排序關(guān)鍵字,然后提示是否需要修改,用戶根據(jù)需要回答是否需要修改。 程序中有兩種吧、排序格式,一種按姓名牌關(guān)鍵字為“1“,第二種為按辦公室電話排序,關(guān)鍵字為”2“。改變排序方式的意義是在兩種排序方式間的變換。9、 quit (退出系統(tǒng)): 退出系統(tǒng)是,系統(tǒng)根據(jù)程序自動把所有數(shù)據(jù)寫入到二進制文件中,在下一次執(zhí)行時,系統(tǒng)會由主函數(shù)自動把該二進制文件中的記錄讀入到通訊表中來。下面為程序的主頁面:三、源程序:1、以下為程序段:每個函數(shù)都有相關(guān)的說明解釋。# include # include # include # include # include class node char name10;
7、 int officephone; int homephone; char mobilephone15; char email20; node *next;public: node(char *name= ,int op=0,int hp=0,char *mp= ,char *email= ,node *next=null); void show() coutsetw(10)namesetw(11)officephonesetw(11)homephone setw(15)mobilephonesetw(20)emailnext=null;else tailptr-next=p; tailptr
8、=p; p-next=null;void addrlist:addsort(node *p) /將p指向的結(jié)點按tag指定的順序插入到鏈表中 node *p1,*p2;if(tag=1)if(headptr=null)headptr=p;tailptr=p;p-next=null;return;if( strcmp(p-name,headptr-name)next=headptr;headptr=p;return;p1=p2=headptr;while(strcmp(p-name,p2-name)0 & p2-next!=null)p1=p2;p2=p2-next;if(strcmp(p-na
9、me,p2-name)0) p2-next=p;p-next=null;tailptr=p;elsep-next=p2;p1-next=p;return;else if(tag=2)if(headptr=null)headptr=p;tailptr=p; p-next=null;return;if( (p-officephone)officephone) )p-next=headptr;headptr=p;return;p1=p2=headptr;while(p-officephone)(p2-officephone) & (p2-next!=null)p1=p2;p2=p2-next;if(
10、p-officephone)(p2-officephone) p2-next=p;p-next=null; tailptr=p; else p-next=p2; p1-next=p; return;node * addrlist:lookup(char *name) /按姓名查找結(jié)點,返回該結(jié)點指針 node *p; p=headptr; while(p!=null) if( strcmp( p-name,name )=0 ) return p; p=p-next; return null;void addrlist:delete(char *name) /刪除指定姓名的結(jié)點 node *p1
11、,*p2; if( headptr=null ) cout鏈表為空,無記錄可刪除!name,name)=0 ) p1=headptr; headptr=headptr-next; delete p1; cout已刪除相關(guān)信息!next; while(strcmp(p2-name,name)!=0 & p2-next !=null ) p1=p2; p2=p2-next; if( strcmp( p2-name,name )=0 & p2) p1-next=p2-next; delete p2; cout已刪除了相關(guān)信息!endl; else cout鏈表上沒有找到要刪除的結(jié)點!next; ad
12、dsort(p1); p1=p2; tailptr-next=null;void addrlist:showall() /顯示全部結(jié)點,每10個顯示一屏 system(cls); if(headptr=null) cout鏈表為空,沒有記錄可顯示!endl; else node *p; int n=0; coutsetw(10)姓名setw(11)辦公室電話setw(11) 家庭電話setw(15)手機號碼setw(20)e-mail地址show(); p=p-next; n+; if(n%10=0) system(pause); system(cls); coutsetw(10)姓名setw
13、(11)辦公室電話setw(11) 家庭電話setw(15)手機號碼setw(20)e-mail地址next; delete p; void addrlist:createlist(char *filename) /從二進制文件中讀入數(shù)據(jù),構(gòu)造鏈表 fstream infile(filename,ios:in|ios:binary); /filename是一個指針就不用filename了 if(!infile) cout不能讀出文件!endl; exit(1); else infile.read(char*)&tag,sizeof(int); int n; infile.read(char*)
14、&n,sizeof(int); for(int i=0; in; i+) node *p=new node; infile.read(char*)p,sizeof(node); addtail(p); infile.close();void addrlist:writetofile(char *filename) /將鏈表中數(shù)據(jù)寫入指定的二制文件 node *p; p=headptr; fstream outfile(filename,ios:out|ios:binary); outfile.write(char*)&tag,sizeof(int); if(!outfile) cout不能寫入
15、二進制文件!next) n+; outfile.write(char*)&n,sizeof(int); p=headptr; while(p!=null) outfile.write(char*)p,sizeof(node); p=p-next; outfile.close();void addrlist:writetotxtfile(char *filename) /將鏈表寫到文本文件中 node *p; p=headptr; ofstream out(filename); if(!out) cout不能寫入文件!endl; exit(3); outtagnext) n+; out寫入n個數(shù)
16、據(jù)endl; outsetw(10)姓名setw(11)辦公室電話setw(11) 家庭電話setw(15)手機號碼setw(20)e-mail地址endl; p=headptr; while(p!=null) outsetw(10)namesetw(11)officephonesetw(11) homephonesetw(15)mobilephonesetw(20)emailnext; out.close();void displaymenu() /顯示菜單char *menu= , , , , *通訊錄管理系統(tǒng)* , , 1. add record , 2. delete record,
17、3. display all record, 4. query by name, 5. modify record, 6. add from a text file, 7. write to a text file, 8. sort, 9. quit, 請選擇(1-9) : , , * , null ;system(cls);for (int i=0;menui;i+)cout menuiendl;void add(addrlist &addrlist) /按當前tag標志插入結(jié)點,插入結(jié)點后,鏈表仍然保持升序 char na10,mp15,em20; int op,hp; cout請按ent
18、er鍵轉(zhuǎn)入下一屏!endl; system(pause); system(cls); cout請輸入通訊錄上的信息:endl; cout姓名、辦公室電話、家庭電話、手機號、e-mail地址,以#結(jié)束!naophpmpem; while( strcmp(na,#)!=0 ) node *p; p=new node; p-setname(na); p-setofficephone(op); p-sethomephone(hp); p-setmobilephone(mp); p-setemail(em); addrlist.addsort(p); cinnaophpmpem; cout已經(jīng)建立一個通
19、訊錄!endl; system(pause);void del(addrlist &addrlist) /刪除一個結(jié)點 if(addrlist.getheadptr()=null) cout鏈表為空,沒有記錄可刪除!endl; system(pause); cout請按enter鍵轉(zhuǎn)入下一屏!endl; system(pause); system(cls); char na10; cout請輸入想要刪除的姓名 endl; cin.get(); cin.getline(na,10); node *p; p=addrlist.lookup(na); if(p=null) cout在通訊錄中沒有找到
20、相關(guān)信息!endl; system(pause); else cout在通訊錄中找到相關(guān)信息!是否要刪除,輸入y or n show(); char c; cinc; if(c=y) addrlist.delete(na); system(pause); void showall(addrlist &addrlist) /顯示所有結(jié)點 addrlist.showall(); coutendl; system(pause);void query(addrlist &addrlist) /按姓名查找一個結(jié)點 if(addrlist.getheadptr()=null) cout鏈表為空,沒有聯(lián)系人
21、可查找!endl; system(pause); else cout請按enter鍵轉(zhuǎn)入下一屏!endl; system(pause); system(cls); node *p; char na10; cout請輸入要查詢的姓名endl; cin.get(); cin.getline(na,10); p=addrlist.lookup(na); if(p) cout找到相關(guān)信息,數(shù)據(jù)為:show(); system(pause); else cout沒有找到要查詢的姓名!endl; system(pause); void modify(addrlist &addrlist) /修改一個結(jié)點
22、if(addrlist.getheadptr()=null) cout鏈表為空,沒有記錄可修改!endl; system(pause); else cout請按enter鍵轉(zhuǎn)入下一屏!endl; system(pause); system(cls); char na10,na110,mp15,em20; node *p; int op,hp; cout請輸入要修改人的姓名!endl; cin.get(); cin.getline (na,10); p=addrlist.lookup(na); if(p=null) cout沒有找到要修改的記錄!endl; system(pause); else
23、 cout原記錄為:show(); cout請輸入要修改的信息!na1ophpmpem; p-setname(na1); p-setofficephone(op); p-sethomephone(hp); p-setmobilephone(mp); p-setemail(em); if(addrlist.gettag()=1) addrlist.sort(1); else addrlist.sort(2); cout已經(jīng)修改! 現(xiàn)在的信息為:show(); system(pause); void addfromtxtfile(addrlist &addrlist) /從正文文件增加記錄 cou
24、t請輸入源文件的文件名:; char filename80,na10,mp15,em20; int n,op,hp; cin.get(); cin.getline(filename, 80); ifstream infile(filename); if(!infile) cout不能讀出文件!n; for(int i=0;inaophpmpem; p-setname(na); p-setofficephone(op); p-sethomephone(hp); p-setmobilephone(mp); p-setemail(em); addrlist.addsort(p); infile.cl
25、ose(); cout已將文件中的n個數(shù)據(jù)加入到了通訊錄中!endl; system(pause);void writetotxtfile(addrlist &addrlist) /將鏈表寫到正文文件中 char filename80; coutfilename; addrlist.writetotxtfile(filename); cout已將通訊錄中的所有數(shù)據(jù)寫到文件中!endl; system(pause);void sort(addrlist &addrlist) / 按姓名或辦公室電話排序 if(addrlist.getheadptr()=null) cout當前鏈表為空,沒有可以操
26、作的程序!endl; system(pause); else cout請按enter鍵轉(zhuǎn)入下一屏!endl; system(pause); system(cls); if(addrlist.gettag()=1) cout當前是按 姓名 進行排序的,是否要修改,確認請輸入y!否認請輸入n!c; if(c=y) addrlist.settag(2); addrlist.sort(2); cout已經(jīng)重新排好順序! 請查看.endl; system(pause); else if(addrlist.gettag()=2) cout當前是按辦 公室電話 進行排序的,是否要修改,確認請輸入y!否認請輸
27、入n!c; if(c=y) addrlist.settag(1); addrlist.sort(1); cout已經(jīng)重新排好順序! 請查看.endl; system(pause); void quit(addrlist &addrlist) /退出前將鏈表寫入二進制文件中 system(cls); addrlist.writetofile(addrlist.dat); cout已經(jīng)將所有通訊記錄分別寫進二進制 addrlist.dat 文件中!現(xiàn)在正在退出系統(tǒng)!endl; exit(5);void main() int choice=0,state;addrlist addrlist;addr
28、list.createlist(addrlist.dat); /從二進制文件中讀入數(shù)據(jù),構(gòu)建鏈表while (choice!=9) displaymenu(); /顯示主菜單 coutchoice; state=cin.rdstate(); if (state) /處理非法輸入,如輸入一個字符是非法的 char str80; cin.clear(); cin.getline(str,80); choice=10; switch (choice) case 1: add(addrlist); break; case 2: del(addrlist); break; case 3: showall
29、(addrlist); break; case 4: query(addrlist); break; case 5: modify(addrlist); break; case 6: addfromtxtfile(addrlist); break; case 7: writetotxtfile(addrlist); break; case 8: sort(addrlist); break; case 9: quit(addrlist); break; default : ; 2、下面的數(shù)據(jù)記錄為相關(guān)的選項的執(zhí)行記錄:(1)add record 請輸入相關(guān)信息: 姓名 辦公室電話 家庭電話 手機
30、號碼 email地址yehang 78894561 89456166hppytlijaming 89445646 78891566ljmingguhao 1495626 8123496guhaozhlang 9461264 9334545wodelui muwend 4568946 894616q451326zhbxing 8953125 1239465zhbaindff已建立一個通訊錄,請查看(2)delete record: 請輸入要刪
31、除的姓名: guhao數(shù)據(jù)為:guhao 1495626 8123496guhao 是否刪除: y已刪除! 請繼續(xù)(3)display all record: 姓名 辦公室電話 家庭電話 手機號碼 email地址yehang 78894561 89456166hppytlijaming 89445646 78891566ljmingzhlang 9461264 9334545wodelui muwend 4568946 894616q451326zhbxing 89
32、53125 1239465zhbaindff(4)query by name請輸入要查詢的姓名: yehang已找到,信息為:yehang 78894561 89456166hppyt請繼續(xù)(5)modify record: 請輸入要修改的姓名:zhbxing原紀錄為:zhbxing 8953125 1239465zhbaindff請輸入新信息:zhbaixin 8953125 1239465zhbaindff已修改,新記錄為:zhbaixin 8953125 1239465zhbaindff(6)add from a text file: 請輸入添加記錄文件的文件名: data.txt 正在加載 已加載4個新記錄!請查看姓名 辦公室電話 家庭電話 手機號碼 email地址 guh 5 6 2 3 lija
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司讀書會策劃方案
- 公司租車活動方案
- 公司文娛游戲活動方案
- 公司新人培養(yǎng)活動方案
- 公司福利房活動方案
- 公司生日小活動方案
- 公司組織電影活動方案
- 公司改善之星活動方案
- 公司新年patty活動方案
- 公司紀念活動方案
- 信息系統(tǒng)的使用與維護管理制度
- 常州保安證考試題及答案
- 《合理用藥安全教育》課件
- 稽留流產(chǎn)治療
- NES-3000 ECDIS電子海圖顯示與信息系統(tǒng)操作手冊
- 2025年上半年內(nèi)蒙古包頭市市直事業(yè)單位招考易考易錯模擬試題(共500題)試卷后附參考答案
- 雪亮工程可行性研究報告
- 2025年度人工智能產(chǎn)業(yè)投資基金入股協(xié)議4篇
- 聚脲涂料施工方案
- T-CCIASD 10012-2024 ISO 標準集裝箱用水性涂料
- 激越管理的22項建議(精神科患者激越的評估和管理)
評論
0/150
提交評論