




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考一設(shè)計(jì)內(nèi)容(通訊錄)本系統(tǒng)應(yīng)完成一下幾方面的功能:?輸入信息enter();?顯示信息display();?查找以姓名作為關(guān)鍵字search();?刪除信息delete();?存盤save();?裝入load();設(shè)計(jì)要求:?每條信息至包含:姓名(NAME)街道(STREET)城市(CITY)郵編(EIP)國家(STATE)幾項(xiàng)?作為一個(gè)完整的系統(tǒng),應(yīng)具有友好的界面和較強(qiáng)的容錯(cuò)能力二設(shè)計(jì)思路通過visualc+6.0(用的是C語言)編寫一個(gè)dos界面的控制臺程序,該程序通過鏈表的操作,文件存儲(chǔ)來實(shí)現(xiàn)通訊錄的基本功能stru
2、ctaddress/*定義結(jié)構(gòu)*/charname10;/*姓名*/charstreet50;/*街道*/來源網(wǎng)絡(luò),僅供參考charstreet50;/*街道*/來源網(wǎng)絡(luò),僅供參考ehareity10;/*城市*/eharstate15;/*國家*/ehareip7;/*郵編*/struetaddress*next;/*后繼指針*/struetaddress*prior;/*前驅(qū)指針*/鏈表的插入,刪除來實(shí)現(xiàn)通訊錄里的內(nèi)容的插入刪除當(dāng)操作完成通過文件件來存儲(chǔ)鏈表的信息,下次打開程序時(shí),讀取文件里的內(nèi)容到內(nèi)存中,放在鏈表,然后又可以對鏈表進(jìn)行操作;存儲(chǔ)內(nèi)存鏈表彳文件內(nèi)存鏈表彳文件在這里面,文件內(nèi)
3、容不可以在外部更改,只能通過讀取到內(nèi)存鏈表中,通過程struetaddress*last;/*尾結(jié)點(diǎn)*struetaddress*last;/*尾結(jié)點(diǎn)*/structaddress*find(char*);/*聲明查找函數(shù)*/voidenter();structaddress*find(char*);/*聲明查找函數(shù)*/voidenter();voidseareh();voidsave();/*函數(shù)聲明*/*查找,查找過程中調(diào)用find函數(shù)*/*存盤,將鏈表信息保存到文件中*/voidload();/*導(dǎo)入,將文件內(nèi)容導(dǎo)入到內(nèi)存鏈表中*/voidload();/*導(dǎo)入,將文件內(nèi)容導(dǎo)入到內(nèi)存鏈表
4、中*/voidddelete(structaddress*,structaddress*);voidinsert(structaddress*i,structaddress*start,structaddress*last);voidinputs(char*,char*,int);voiddisplay(structaddress*);intmenu_select(void);三.詳細(xì)設(shè)計(jì)主界面設(shè)計(jì)通過switch語句調(diào)用各種函數(shù),實(shí)現(xiàn)各種操作。然后把switch嵌套到無限的for循環(huán)(for(;)中,使完成每一步操作都回到到選擇操作的主界面函數(shù)之間的相互調(diào)用voidmain()start二l
5、ast二NULL;for(;)/*無限循環(huán)*/switch(menu_select()/*調(diào)用主界面的選擇函數(shù),帶回返回值*/case1:enter();continue;case2:ddelete(&start,&last);continue;case3:list();continue;case4:search();continue;case5:save();continue;case6:load();continue;i_s,chars80;intc;printf(八歡迎使用DOS通訊錄系統(tǒng)八n);printf(“*請?jiān)谧銎渌僮髑跋葘?dǎo)入*n);printf(*n);printf(*1.輸
6、入信息*n);printf(*2.刪除信息*n);來源網(wǎng)絡(luò),僅供參考printf(*printf(*3.顯示信息*n);printf(*printf(*3.顯示信息*n);來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考printf(*4.查找printf(*5.存盤*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*iI1Jprintf(*6.導(dǎo)入*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*iI1Jprintf(*7.退出*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*iI1Jprintf(
7、*n);doprintf(nPleaseenteryourchoice:n);gets(s);c=atoi(s);/*將獲取的字符串轉(zhuǎn)換成整型*/while(c7);returnc;/*返回輸入值*/輸入信息函數(shù)輸入函數(shù):structaddress*info;/*定義當(dāng)前結(jié)點(diǎn)*/for(;)/*為當(dāng)前結(jié)點(diǎn)分配空間info=(structaddress*)malloc(sizeof(structaddress);/*為當(dāng)前結(jié)點(diǎn)分配空間*/if(!info)來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考printf(nOutofmemory);exit(0);退出程序*/
8、*如果分配空間失敗,printf(輸入空姓名結(jié)束:n);inputs(“請輸入姓名:,info-name,10);if(!info-nameO)break;結(jié)束循環(huán)*/*如果輸入姓名為空,inputs(請輸入街道:,info-street,50);inputs(請輸入城市:,info-city,15);inputs(請輸入國家:,info-state,15);inputs(請輸入郵編:,info-eip,7);insert(info,&start,&last);/*調(diào)用結(jié)點(diǎn)插入函數(shù)*/輸入函數(shù)調(diào)用到另外兩個(gè)函數(shù),inputs和insert其中inputs中還用到fgets(str,n,fp),
9、把鍵盤的輸入信息傳到字符串中charp255;doprintf(prompt);fgets(p,254,stdin);fgets(p,254,stdin);/*stdin,標(biāo)準(zhǔn)輸入緩存,獲取鍵盤輸入信息*/fgets(p,254,stdin);fgets(p,254,stdin);/*stdin,標(biāo)準(zhǔn)輸入緩存,獲取鍵盤輸入信息*/來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考if(strlen(p)count)printf(nTooLongn);while(strlen(p)count);pstrlen(p)-1=0;strcpy(s,p);insert是關(guān)鍵函數(shù),每
10、當(dāng)輸入完一條信息都會(huì)調(diào)用到insert函數(shù),將信息插入到鏈表中if(*last=NULL)/*如果尾結(jié)點(diǎn)為空,意味著當(dāng)前鏈表為空*/*則將該結(jié)點(diǎn)賦給頭尾結(jié)點(diǎn)*/i-next二NULL;i-prior二NULL;*last二i;*start二i;return;else/*如果鏈表不為空,則將信息插入到鏈表尾,作為尾結(jié)點(diǎn)*/(*last)-next=i;i-prior=*last;來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考i-next=NULL;*last=(*last)-next;刪除査找顯示函數(shù)刪除函數(shù)調(diào)用find函數(shù),通過姓名,查找到該節(jié)點(diǎn),然后刪除該節(jié)點(diǎn)信息,
11、這其中涉及到頭尾節(jié)點(diǎn),及其變化;先判斷是否為頭結(jié)點(diǎn),如果為頭結(jié)點(diǎn),則把原頭結(jié)點(diǎn)的后繼作為新的頭結(jié)點(diǎn)如果不為頭結(jié)點(diǎn),則該節(jié)點(diǎn)的前驅(qū)的next指向該節(jié)點(diǎn)的后繼如果該節(jié)點(diǎn)為尾結(jié)點(diǎn),則讓該節(jié)點(diǎn)的前驅(qū)作為新的尾結(jié)點(diǎn)struetaddress*info;chars80;inputs(請輸入姓名:,s,10);info=find(s);if(info)printf(Deletingn);if(*start=info)*start=info-next;if(*start)(*start)-prior=NULL;else*last=NULL;elseinfo-prior-next二info-next;if(in
12、fo!=*last)info-next-prior二info-prior;else*lasor;free(info);printf(-Ok,刪除成功!n);與刪除相比,查找就簡單的多,只需要調(diào)用find的函數(shù),找到該節(jié)點(diǎn)記錄并顯示出來就行了,在search本身里面只要調(diào)整下輸出的界面就行了structaddress*find(char*name)/*查找函數(shù),形參為欲查找結(jié)點(diǎn)的name域*/structaddress*info;info=start;while(info)if(!strcmp(name,info-name)returninfo;printf(Namenotfound.n);re
13、turnNULL;輸出函數(shù)更簡單,直接輸出鏈表即可if(info=NULL)printf(當(dāng)前記錄為空!);elseprintf(姓名t街道tt城市t國家t郵編tn);while(info)display(info);/*display為輸出節(jié)點(diǎn)函數(shù),一些列print組成*/if(info-next=NULL)break;info=info-next;存儲(chǔ)與導(dǎo)入存儲(chǔ)存儲(chǔ)時(shí)通過fopen打開文件(沒有該文件時(shí)則創(chuàng)建)fp=fopen(record.txt,wb);/*生成文件*/if(!fp)printf(Cannotopenfile.n);return然后通過fwrite將鏈表信息寫入文件wh
14、ile(info)/*把鏈表寫入文件*/fwrite(info,sizeof(structaddress),1,fp);info=info-next;fwrite每次從info讀取一個(gè)sizeof(structaddress)長度的數(shù)據(jù),寫入fp文件中。寫入完畢后即關(guān)閉文件fclose(fp);導(dǎo)入導(dǎo)入時(shí)先建立鏈表,為節(jié)點(diǎn)分配內(nèi)存空間然后打開文件,將文件的內(nèi)容寫入內(nèi)存鏈表中registerintt,size;struetaddress*info,*temp=0;char*p;FILE*fp;/*打開文件*/if(fp二fopen(record.txt,r)二二NULL)printf(Canno
15、topenfile!n);return;printf(nnLoading.n);/*調(diào)用文件*/size=sizeof(structaddress);/*為結(jié)點(diǎn)分配內(nèi)存*/start=(structaddress*)malloc(size);if(!start)/*如果讀取失敗,返回*/printf(Outofmemory!n);exit(0);info=start;p=(char*)info;while(*p+=getc(fp)!=EOF)s+”)*p+=getc(fp);info-next=(structaddress*)malloc(size)if(printf(Outofmemory!
16、n);info-prior二temp;temp二info;info=info-next;p=(char*)info;temp-next=0;last=temp;start-prior=0;來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考fclose(fp);注意:每次文件存儲(chǔ)的時(shí)候都會(huì)覆蓋以前存在文件里的內(nèi)容,而每次導(dǎo)入的時(shí)候都會(huì)改變鏈表的內(nèi)容。因此每次打開程序時(shí)請先導(dǎo)入存儲(chǔ)在文件里的數(shù)據(jù),或者將record.txt備份存儲(chǔ)起來,避免數(shù)據(jù)丟失。通過本次課程設(shè)計(jì),我學(xué)到了很多東西。以前從沒有用過文件方面的知識,而這次設(shè)計(jì)中用到了,剛開始使用時(shí)出了很多問題
17、,在文件存儲(chǔ)時(shí)經(jīng)常遇到意外錯(cuò)誤而導(dǎo)致程序終止了。這次的實(shí)驗(yàn)使我對結(jié)構(gòu)體,鏈表的認(rèn)識更深刻,使用更熟練,剛開始時(shí)在鏈表插入時(shí)遇到好多次內(nèi)存方面的錯(cuò)誤,還有插入操作時(shí)對指針的使用不太熟練。通過一次次的思考與實(shí)驗(yàn),思路更加清晰,程序的容錯(cuò)能力也越來越強(qiáng)。這次實(shí)驗(yàn)讓我學(xué)到很多書本上沒有的東西。程序里多次用到for(;)循環(huán),還有(structaddress*)malloc(sizeof(structaddress)為節(jié)點(diǎn)分配內(nèi)存空間。在文件操作中主要涉及到的函數(shù)有:fopen(”文件名”,”使用文件方式”);fwrite(info,sizeof(structaddress),1,fp);fclose(
18、文件指針);五參考資料C程序設(shè)計(jì)(第三版)譚浩強(qiáng)清華大學(xué)出版社數(shù)據(jù)結(jié)構(gòu)(C+版)李根強(qiáng)中國水利水電出版社附完整源碼:#include#include#includestructaddress/*structaddress/*定義結(jié)構(gòu)*/charname10;charstreet50;charcity10;charstate15;chareip7;structaddress*next;structaddress*next;/*后繼指針*/structaddress*next;structaddress*next;/*后繼指針*/來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供
19、參考structaddress*prior;/*前驅(qū)指針*/;structaddress*start;/*首結(jié)點(diǎn)*/structaddress*last;/*尾結(jié)點(diǎn)*/structaddress*find(char*);/*聲明査找函數(shù)*/voidenterQ;/*函數(shù)聲明*/voidsearch。;voidsave();voidload。;voidlist。;voidddelete(structaddress*start,structaddress*last);voidinsert(structaddress*i,structaddress*start,structaddress*last)
20、;voidinputs(char*,char*,int);來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考voiddisplay(structaddress*);intmenu_select(void);voidmain()start=last=NULL;for(;)一case1:enter();continue;case2:ddelete(&start,&last);continue;case3:list();continue;case4:search();continue;case5:save();continue;case6:loadO;continue;;一”c
21、hars80;intc;printf(人歡迎使用DOS通訊錄系統(tǒng)通訊錄系統(tǒng)an);printf(*printf(*請?jiān)谧銎渌僮髑跋葘?dǎo)入*n);先導(dǎo)入*n);pMntfpMntf(*);printf(w*1輸入信息*、n)printf(*w*2刪除信息*、n)printf(*w*);printf(w*1輸入信息*、n)printf(*w*2刪除信息*、n)printf(*w*3顯示信息*、n)printf(*4查找*、n)printf(*w*5存盤*、n)printf(*w*6導(dǎo)入*n).printf(*w*7退出*、n)printf(*n)printf(doprintf(nPleaseent
22、eryourchoice:n)gets(s);c=atoi(s);while(c7);returnc;/*返回輸入值*/voidenterO/*輸入函數(shù),本函數(shù)循環(huán)輸入資料,當(dāng)輸入姓名為空時(shí)退出*/*定義/*定義structaddress*info;當(dāng)前結(jié)點(diǎn)*/for(;)info=(structaddress*)malloc(sizeof(structaddress);/*為當(dāng)前結(jié)點(diǎn)分配空間*/if(!info)printf(nOutofmemory);exit(0);exit(0);/*如果分配空間失敗,退出程序*/來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考來
23、源網(wǎng)絡(luò),僅供參考來源網(wǎng)絡(luò),僅供參考prinf(輸入空姓名結(jié)束:n);inputs(請輸入姓名:,info-name,10);if(!info-name0)break;/*如果輸入姓名為空,結(jié)束循環(huán)*/inputs(請輸入街道:,info-street,50);inputs(請輸入城市:,info-city,15);inputs(請輸入國家:,info-state,15);inputs(請輸入郵編:,info-eip,7);insert(info,&start,&last);/*調(diào)用結(jié)點(diǎn)插入函數(shù)*/voidinputs(char*prompt,char*s,intcount)/*輸入函數(shù),有越界
24、檢測功能*/charp255;doprintf(prompt);fgets(p,254,stdin);if(strlen(p)count)printf(nTooLongn);while(strlen(p)count);pstrlen(p)-1=0;voidinsert(/*數(shù)據(jù)插入函數(shù)*/structaddress*i,structaddress*start,structaddress*last)if(*last=NULL)/*如果尾結(jié)點(diǎn)為空,意味著當(dāng)前鏈表為空*/一i-prior=NULL;*last=i;*start=i;else(*last)-next=i;i-prior=*last;i
25、-next=NULL;*last=(*last)-next;voidddelete(structaddress*start,structaddress*last)/*刪除函數(shù)*/structaddress*info;chars80;inputs(請輸入姓名:,s,10);/*輸入欲刪除結(jié)點(diǎn)的name域內(nèi)容*/info=find;/*査找該內(nèi)容*/if(info)/*如果找到*/*如果printf(Deletingn);/*如果if(*start=info)該結(jié)點(diǎn)為首結(jié)點(diǎn),把該結(jié)點(diǎn)的下驅(qū)作為新的首結(jié)點(diǎn)(入口)*/*start=info-next;if(*start)(*start)-prior=NULL;else*last=NULL;else/*如果欲刪除的結(jié)點(diǎn)不是首結(jié)點(diǎn)*/info-prior-next=info-next;/*令該結(jié)點(diǎn)的前驅(qū)的next指針指向該結(jié)點(diǎn)的后驅(qū),*又令該結(jié)點(diǎn)的后驅(qū)的prior指點(diǎn)指向該結(jié)點(diǎn)的前驅(qū)*/if(info!=*last)/*如果該結(jié)點(diǎn)是尾結(jié)點(diǎn),則令該結(jié)點(diǎn)的前驅(qū)為尾結(jié)點(diǎn)*/info-next-prior=info-prior;else*last=info-prior;free(info);/*釋放該結(jié)點(diǎn)所占用的內(nèi)存*/printf(-Ok,刪除成功!n);_structaddress*info;info=start;if(!s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國樹脂腰扣市場分析及競爭策略研究報(bào)告
- 2025至2030年中國小型高爾夫打擊練習(xí)器市場分析及競爭策略研究報(bào)告
- 2025至2030年中國圓頭螺絲市場分析及競爭策略研究報(bào)告
- 2025至2030年中國內(nèi)爆脹栓市場分析及競爭策略研究報(bào)告
- 2025至2030年中國五金沖壓成型件市場分析及競爭策略研究報(bào)告
- 2025至2030年中國V35網(wǎng)橋市場分析及競爭策略研究報(bào)告
- 幼兒園宣傳文案撰寫培訓(xùn)
- 手工活動(dòng):甜甜的西瓜制作指南
- 2025年吉林省電工證考試試卷帶解析及答案(新)內(nèi)部題庫
- 輸尿管軟鏡鈥激光碎石術(shù)護(hù)理
- 重癥監(jiān)護(hù)ICU護(hù)理實(shí)習(xí)生出科考試試題及答案
- GB/Z 22074-2008塑料外殼式斷路器可靠性試驗(yàn)方法
- GB/T 32360-2015超濾膜測試方法
- GB/T 15558.1-2015燃?xì)庥寐竦鼐垡蚁?PE)管道系統(tǒng)第1部分:管材
- GB/T 11060.8-2020天然氣含硫化合物的測定第8部分:用紫外熒光光度法測定總硫含量
- 中藥學(xué)全套(完整版)課件
- 工程施工停止點(diǎn)檢查表
- 國開專科《外國文學(xué)》十年期末考試題庫及答案
- 《滅火器維修》GA95-2015(全文)
- 浙江義務(wù)教育學(xué)校校園飲水質(zhì)量提升工程建設(shè)和維護(hù)浙江教育廳
- 高中美術(shù)素描教案(8篇)
評論
0/150
提交評論