




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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):* 此程序是對一個簡單的通訊記錄進行管理。用戶根據以上的各個選項卡進行想要的數據操作,每一個選項都有
2、相關的提示輸入輸出,簡單明了,甚是清晰。根據程序可以對一個有序鏈表進行如下操作:1、 增加一個有序的通訊記錄;2、 刪除通訊記錄上的一個記錄;3、 顯示通訊錄上所有的記錄;4、 按姓名查找有關的記錄;5、 輸入要修改的姓名查找到后對其進行修改;6、 從寫好的一個正文文件中批量增加記錄并排序;7、 把通訊錄上所有記錄寫入到一個文件內進行保存;8、 修改當前的排序關鍵字;9、 退出程序并把本次所有記錄寫入到二進制文件中。下面是對改程序進行相關介紹。二、程序功能簡介: 此程序為一個簡單的通訊錄。通訊錄是一個簡單的數據庫,每一個記錄包含一個人的所有信息(本程序中信息包含:姓名、辦公室電話、家庭電話、手
3、機號碼、email地址)。用于管理一個小群體的通訊記錄。程序的執行過程為:顯示主菜單,用戶通過在choice:處輸入選項(本程序為19的數字選項),按回車后接入相關程序段進行執行!下面對本程序的19個選項進行簡單的說明:1、 add record(增加記錄):程序執行時,有相關的提示輸入。每次輸入一個人的相關數據信息,新記錄加入后通訊錄按指定的排序順序排序。本程序中,最初默認按“姓名“進行排序,但是后面的8 sort選項可以進行相應的排列順序修改(如改為按“辦公室電話“進行排序)。2、 delete record(刪除記錄): 如果要對已建通訊錄中的某個人的信息進行刪除操作,則選2. 輸入待刪
4、除記錄的姓名,顯示該姓名的所有信息,讓用戶確認是否要刪除。3、 displayall record(顯示所有的記錄):執行時程序按設定的排列順序對通訊錄中的所有記錄進行顯示,每顯示10條記錄,暫停,用戶按鍵繼續。4、 query by name(按姓名進行查詢并顯示該記錄):用戶根據執行程序時的相關提示,輸入要查詢記錄的姓名,系統根據輸入的姓名在已建立的通訊錄中查找該記錄并且顯示在屏幕上。5、 modify record(按姓名查找并進行修改):用戶根據執行程序時的提示信息輸入要修改的記錄的姓名,系統根據輸入的信息在已建立的通訊記錄中查找相關的記錄。本程序段是查找到要修改的記錄后顯示出來,然后
5、提示用戶重新輸入該記錄的信息(所有信息)。然后重新插入到原有通訊錄中重新排序。6、 add from a text file(從正文文件中批量添加記錄到通訊表中): 此程序段是提供給用戶事先在建立好的一個文本文件中輸入相關的記錄,然后通過此選項卡插入到通訊表中。 程序執行是需要用戶輸入正文文件名。輸入程序從相關的文件中追加記錄。7、 write to a text file(將通訊表中的數據寫入到正文文件中): 通過該選項用戶可以把通訊表中的記錄逐一寫入到文本文件中保存起來。用戶需要輸入一個文本文件的名字即可,系統將通訊表中的所有記錄寫入該文件中。8、 sort(重新設置排序格式): 首先顯示
6、當前的排序關鍵字,然后提示是否需要修改,用戶根據需要回答是否需要修改。 程序中有兩種吧、排序格式,一種按姓名牌關鍵字為“1“,第二種為按辦公室電話排序,關鍵字為”2“。改變排序方式的意義是在兩種排序方式間的變換。9、 quit (退出系統): 退出系統是,系統根據程序自動把所有數據寫入到二進制文件中,在下一次執行時,系統會由主函數自動把該二進制文件中的記錄讀入到通訊表中來。下面為程序的主頁面:三、源程序:1、以下為程序段:每個函數都有相關的說明解釋。# 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指向的結點按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) /按姓名查找結點,返回該結點指針 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) /刪除指定姓名的結點 node *p1
11、,*p2; if( headptr=null ) cout鏈表為空,無記錄可刪除!name,name)=0 ) p1=headptr; headptr=headptr-next; delete p1; cout已刪除相關信息!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已刪除了相關信息!endl; else cout鏈表上沒有找到要刪除的結點!next; ad
12、dsort(p1); p1=p2; tailptr-next=null;void addrlist:showall() /顯示全部結點,每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) /從二進制文件中讀入數據,構造鏈表 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) /將鏈表中數據寫入指定的二制文件 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個數
16、據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= , , , , *通訊錄管理系統* , , 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標志插入結點,插入結點后,鏈表仍然保持升序 char na10,mp15,em20; int op,hp; cout請按ent
18、er鍵轉入下一屏!endl; system(pause); system(cls); cout請輸入通訊錄上的信息:endl; cout姓名、辦公室電話、家庭電話、手機號、e-mail地址,以#結束!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已經建立一個通
19、訊錄!endl; system(pause);void del(addrlist &addrlist) /刪除一個結點 if(addrlist.getheadptr()=null) cout鏈表為空,沒有記錄可刪除!endl; system(pause); cout請按enter鍵轉入下一屏!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、相關信息!endl; system(pause); else cout在通訊錄中找到相關信息!是否要刪除,輸入y or n show(); char c; cinc; if(c=y) addrlist.delete(na); system(pause); void showall(addrlist &addrlist) /顯示所有結點 addrlist.showall(); coutendl; system(pause);void query(addrlist &addrlist) /按姓名查找一個結點 if(addrlist.getheadptr()=null) cout鏈表為空,沒有聯系人
21、可查找!endl; system(pause); else cout請按enter鍵轉入下一屏!endl; system(pause); system(cls); node *p; char na10; cout請輸入要查詢的姓名endl; cin.get(); cin.getline(na,10); p=addrlist.lookup(na); if(p) cout找到相關信息,數據為:show(); system(pause); else cout沒有找到要查詢的姓名!endl; system(pause); void modify(addrlist &addrlist) /修改一個結點
22、if(addrlist.getheadptr()=null) cout鏈表為空,沒有記錄可修改!endl; system(pause); else cout請按enter鍵轉入下一屏!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已經修改! 現在的信息為: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個數據加入到了通訊錄中!endl; system(pause);void writetotxtfile(addrlist &addrlist) /將鏈表寫到正文文件中 char filename80; coutfilename; addrlist.writetotxtfile(filename); cout已將通訊錄中的所有數據寫到文件中!endl; system(pause);void sort(addrlist &addrlist) / 按姓名或辦公室電話排序 if(addrlist.getheadptr()=null) cout當前鏈表為空,沒有可以操
26、作的程序!endl; system(pause); else cout請按enter鍵轉入下一屏!endl; system(pause); system(cls); if(addrlist.gettag()=1) cout當前是按 姓名 進行排序的,是否要修改,確認請輸入y!否認請輸入n!c; if(c=y) addrlist.settag(2); addrlist.sort(2); cout已經重新排好順序! 請查看.endl; system(pause); else if(addrlist.gettag()=2) cout當前是按辦 公室電話 進行排序的,是否要修改,確認請輸入y!否認請輸
27、入n!c; if(c=y) addrlist.settag(1); addrlist.sort(1); cout已經重新排好順序! 請查看.endl; system(pause); void quit(addrlist &addrlist) /退出前將鏈表寫入二進制文件中 system(cls); addrlist.writetofile(addrlist.dat); cout已經將所有通訊記錄分別寫進二進制 addrlist.dat 文件中!現在正在退出系統!endl; exit(5);void main() int choice=0,state;addrlist addrlist;addr
28、list.createlist(addrlist.dat); /從二進制文件中讀入數據,構建鏈表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、下面的數據記錄為相關的選項的執行記錄:(1)add record 請輸入相關信息: 姓名 辦公室電話 家庭電話 手機
30、號碼 email地址yehang 78894561 89456166hppytlijaming 89445646 78891566ljmingguhao 1495626 8123496guhaozhlang 9461264 9334545wodelui muwend 4568946 894616q451326zhbxing 8953125 1239465zhbaindff已建立一個通訊錄,請查看(2)delete record: 請輸入要刪
31、除的姓名: guhao數據為:guhao 1495626 8123496guhao 是否刪除: y已刪除! 請繼續(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請繼續(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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育心理學在提升教師教學能力中的作用
- 情緒調節技巧在應對壓力中的應用研究
- 幼兒園室內環境裝修及設計
- 教師如何利用網絡資源提高工作效率
- 拼多多營銷策略與用戶體驗的優化
- 5G技術推動低空經濟基礎設施建設的潛力
- 大數據在財務報表分析中的應用研究
- 廣告行業與文化創意產業的融合發展研究
- 2020-2025年中國健美車行業投資研究分析及發展前景預測報告
- 中國石灰鈣項目投資可行性研究報告
- 2024年湖南省公安廳招聘警務輔助人員筆試真題
- 弘揚中國精神的課件
- 2025年高考英語全國二卷試題含答案
- 2025江蘇揚州寶應縣“鄉村振興青年人才”招聘67人筆試備考題庫及完整答案詳解一套
- 云南省玉溪市2023-2024學年高二下學期期末教學質量檢測語文試卷(含答案)
- 撫州市樂安縣招聘城市社區工作者筆試真題2024
- 網絡服務器配置與管理(微課版) 教案 項目02 虛擬化技術和VMware-2
- 2025年西式面點師(中級)面包烘焙實操考試試卷
- T/CAPEC 3-2018汽輪機制造監理技術要求
- 工程完工后的回訪與保修服務承諾
- 醫療質量管理質控科的未來發展趨勢與挑戰
評論
0/150
提交評論