版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1/3通訊錄的制作(數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言版)通訊錄的設(shè)計(jì)一、設(shè)計(jì)思路:經(jīng)過(guò)一個(gè)學(xué)期的程序設(shè)計(jì)學(xué)習(xí),我逐漸了解了計(jì)算機(jī)的基本原理和c語(yǔ)言的基本常識(shí),并可以逐漸自己來(lái)實(shí)現(xiàn)一些簡(jiǎn)單的程序任務(wù).此次程序設(shè)計(jì)我選擇了通訊錄設(shè)計(jì),通過(guò)函數(shù)、結(jié)構(gòu)體的定義以與一些基本操作運(yùn)用,經(jīng)過(guò)一個(gè)多月的編寫、調(diào)試、測(cè)試,最終完成了該程序的設(shè)計(jì).以下為我的設(shè)計(jì)思路:首先,確定通訊錄的功能,我初步設(shè)計(jì)了六項(xiàng)功能:輸入〔程序中對(duì)應(yīng)enter〔〕〕、刪除〔程序中對(duì)應(yīng)delete〔〕〕、顯示通訊錄〔程序中對(duì)應(yīng)list〔〕〕、搜索〔程序中對(duì)應(yīng)search〔〕〕、保存〔程序中對(duì)應(yīng)save〔〕〕、裝載〔程序中對(duì)應(yīng)load〔〕〕.其次,對(duì)于存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu),我則主要選擇了一下幾個(gè)方面的信息:##、性別年齡、籍貫、手機(jī)、下一個(gè)指針〔用于鏈表的操作與實(shí)現(xiàn)〕、當(dāng)前指針〔用于鏈表的操作與實(shí)現(xiàn)〕.二、程序源代碼:#include<stdio.h>structaddress{ /*創(chuàng)建一個(gè)address結(jié)構(gòu)*/ charname[10]; /*##*/ charsex[2]; /*性別*/ charage[2]; /*年齡*/ charnative[10]; /*籍貫*/ chartelephone[12];/*手機(jī)*/通訊錄的制作(數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言版)全文共10頁(yè),當(dāng)前為第1頁(yè)。 structaddress*next;/*下一個(gè)入口的指針*/通訊錄的制作(數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言版)全文共10頁(yè),當(dāng)前為第1頁(yè)。 structaddress*prior;/*當(dāng)前記錄的指針*/}list_entry;structaddress*start;/*指向列表中第一個(gè)入口*/structaddress*last;/*指向列表中最后一個(gè)入口*/voidenter<>,display<>,search<>,save<>,load<>;menu_select<>,list<>,delet<>,inputs<>;main<>{ chars[20],choice; structaddress*info; start=last=NULL;/*列表長(zhǎng)度清零*/ for<;;>{ /*列循環(huán)的一個(gè)用法*/ switch<menu_select<>>{ case1:enter<>; /*輸入1,進(jìn)入enter<>程序,是輸入通訊錄*/ break; case2:delet<>; /*輸入2,進(jìn)入delete<>程序,是刪除一個(gè)記錄*/ break; case3:list<>; /*輸入3,進(jìn)入list<>程序,是列表顯示通信錄*/通訊錄的制作(數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言版)全文共10頁(yè),當(dāng)前為第2頁(yè)。通訊錄的制作(數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言版)全文共10頁(yè),當(dāng)前為第2頁(yè)。 case4:search<>; /*輸入4,進(jìn)入search<>程序,搜索一個(gè)街道*/ break; case5:save<>; /*輸入5,保存列表到磁盤文件*/ break; case6:load<>; /*輸入6,從磁盤文件讀入列表*/ break; case7:return<0>; } }}/*選擇一個(gè)選項(xiàng)*/menu_select<>{ chars[20]; intc; printf<"1.輸入一個(gè)名字〔直接回車則退出〕\n">; printf<"2.刪除一個(gè)名字\n">; printf<"3.列表顯示\n">; printf<"4.搜索查詢\n">; printf<"5.保存文件\n">; printf<"6.裝入文件\n">; printf<"7.退出\n">; do{ printf<"\n輸入您的選擇:">; gets<s>; c=atoi<s>; }while<c<0||c>7>; returnc;}/*輸入名字和地址*/voidenter<>{ structaddress*info,*dls_store<>; for<;;>{通訊錄的制作(數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言版)全文共10頁(yè),當(dāng)前為第3頁(yè)。通訊錄的制作(數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言版)全文共10頁(yè),當(dāng)前為第3頁(yè)。 if<!info>{ printf<"\n內(nèi)存溢出">; return; } inputs<"輸入##:",info->name,10>; if<!info->name[0]>break; /*名字長(zhǎng)度為0,停止輸入*/ inputs<"輸入性別:",info->sex,2>; inputs<"輸入年齡:",info->age,2>; inputs<"輸入籍貫:",info->native,10>; inputs<"輸入:",info->telephone,12>; start=dls_store<info,start>; /*保存在第一個(gè)記錄里*/ } /*輸入循環(huán)*/}inputs<prompt,s,count>/*這個(gè)函數(shù)用于輸入長(zhǎng)度為count的一個(gè)字符串,用于防止字符串長(zhǎng)度超過(guò)它的空間,并提出警告*/char*prompt;char*s;intcount;{ charp[255]; do{ printf<prompt>; /*顯示這個(gè)函數(shù)的字符串*/ gets<p>; /*從鍵盤獲得255個(gè)輸入*/ if<strlen<p>>count>printf<"n字符串超過(guò)長(zhǎng)度!">; /*如果數(shù)組P中的長(zhǎng)度超過(guò)調(diào)用函數(shù)中的參數(shù)count,提示*/通訊錄的制作(數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言版)全文共10頁(yè),當(dāng)前為第4頁(yè)。 }while<strle通訊錄的制作(數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言版)全文共10頁(yè),當(dāng)前為第4頁(yè)。 strcpy<s,p>; /*s是目標(biāo)字符串,輸出時(shí)字符串在s中*/ return<0>;}/*產(chǎn)生一個(gè)又表,當(dāng)一個(gè)新元素插入到列表的開始時(shí),一個(gè)指向第一個(gè)元素的指針被返回*/structaddress*dls_store<i,top> /*存貯順序*/structaddress*i; /*新的元素*/structaddress*top; /*列表中的第一個(gè)元素*/{ structaddress*old,*p; if<last==NULL>{ /*列表中的第一個(gè)元素*/ i->next=NULL; i->prior=NULL; last=i; returni; } p=top; /*從列表的頂部開始*/ old=NULL; while<p>{ if<strcmp<p->name,i->name><0>{ old=p; p=p->next; } else{ if<p->prior>{ p->prior->next=i; i->next=p; i->prior=p->prior; p->prior=i; returntop; }通訊錄的制作(數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言版)全文共10頁(yè),當(dāng)前為第5頁(yè)。通訊錄的制作(數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言版)全文共10頁(yè),當(dāng)前為第5頁(yè)。 i->prior=NULL; p->prior=i; returni; } } old->next=i; /*設(shè)置未尾*/ i->next=NULL; i->prior=old; last=i; returnstart;}/*從列表中刪除一個(gè)元素*/delet<>{ structaddress*info,*find<>; chars[10]; printf<"輸入##:">; gets<s>; info=find<s>; if<info>{ if<start==info>{ start=info->next; if<start>start->prior=NULL; elselast=NULL; } else{ info->prior->next=info->next; if<info!=last> info->next->prior=info->prior; else last=info->prior; } free<info>; /*釋放空間*/ }通訊錄的制作(數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言版)全文共10頁(yè),當(dāng)前為第6頁(yè)。通訊錄的制作(數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言版)全文共10頁(yè),當(dāng)前為第6頁(yè)。}structaddress*find<name> /*一個(gè)查找##的結(jié)構(gòu)*/char*name;{ structaddress*info; info=start; while<info>{ if<!strcmp<name,info->name>>returninfo; info=info->next; /*獲得下一個(gè)地址*/ } printf<"##沒(méi)有發(fā)現(xiàn)!\n">; returnNULL; /*沒(méi)有發(fā)現(xiàn)##*/}list<> /*列表*/{ registerintt; structaddress*info; info=start; while<info>{ display<info>; info=info->next; /*獲得下一個(gè)地址*/ } printf<"\n\n">; return<0>;}voiddisplay<info> /*顯示通信錄*/structaddress*info;{ printf<"%s\n",info->name>; printf<"%s\n",info->sex>; printf<"%s\n",info->age>; printf<"%s\n",info->native>; printf<"%s\n",info->telephone>;通訊錄的制作(數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言版)全文共10頁(yè),當(dāng)前為第7頁(yè)。通訊錄的制作(數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言版)全文共10頁(yè),當(dāng)前為第7頁(yè)。}voidsearch<> /*搜索一個(gè)名字*/{ charname[10]; structaddress*info,*find<>; printf<"輸入查找的名字!">; gets<name>; if<!<info=find<name>>>printf<"沒(méi)有找到!\n">; elsedisplay<info>;}voidsave<> /*保存通信錄*/{ registerintt; structaddress*info; FILE*fp; if<<fp=fopen<"mlist","wb">>==NULL>{ /*打開文件名mlist如果錯(cuò)誤*/ printf<"沒(méi)有找到文件.\n">; exit<1>; } printf<"\n正在保存文件...\n">; info=start; while<info>{ fwrite<info,sizeof<structaddress>,1,fp>; info=info->next; /*獲得下一個(gè)地址*/ } fclose<fp>;}voidload<> /*打開一個(gè)文件*/{ registerintt;通訊錄的制作(數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言版)全文共10頁(yè),當(dāng)前為第8頁(yè)。通訊錄的制作(數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言版)全文共10頁(yè),當(dāng)前為第8頁(yè)。 FILE*fp; if<<fp=fopen<"mlist","rb">>==NULL>{ printf<"打開文件失敗...\n">; exit<1>; } while<start>{ info=start->next; free<info>; start=info; } printf<"\n正在讀取文件...\n">; start=<structaddress*>malloc<sizeof<structaddress>>; if<!start>{ printf<"存貯溢出...\n">; return; } info=start; while<!feof<fp>>{ if<1!=fread<info,sizeof<structaddress>,1,fp>>break; /*為下一個(gè)分配空間*/ info->next=<structaddress*>malloc<sizeof<structaddress>>; if<!info->next>{ printf<"存貯溢出...\n">; return; } info->prior=temp; temp=info; info=info->next; } temp->next=NULL; /*最后一個(gè)輸入*/ last=temp; start->prior=NULL; fclose<fp>;}三、調(diào)試結(jié)果調(diào)試結(jié)果初始狀態(tài)如下圖所示:以下介紹五大重點(diǎn)功能:步驟一:輸入功能.選擇1,輸入名字"X三〞,會(huì)出現(xiàn)一系列需要輸入的信息,輸入完畢后按回車,再重復(fù)以上動(dòng)作輸入兩個(gè)人:王五、李四.如下圖所示.步驟二:保存功能.按兩次回車,退出輸入狀態(tài),按5保存.如圖1所示.圖1圖2步驟三:刪除功能.選擇2,輸入"X三〞,回車;選擇5"保存〞,回車.如圖2所示.步驟四:查看功能.選擇3,回車,得到圖3所示.圖3圖4步驟五:搜索功能.選擇4,輸入"李四〞,回車,得到圖4所示.四、設(shè)計(jì)過(guò)程中存在的問(wèn)題在設(shè)計(jì)的過(guò)程中,不免出現(xiàn)過(guò)很多問(wèn)題.首先,設(shè)計(jì)第一個(gè)輸入操作時(shí)沒(méi)有考慮到返回的問(wèn)題,所以如果選擇了第一個(gè)操作則會(huì)無(wú)止境的重復(fù)輸入,后來(lái)就在第一項(xiàng)操作后面設(shè)定回車直接返回的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 專業(yè)化通風(fēng)空調(diào)安裝項(xiàng)目協(xié)議2024版A版
- 三方債務(wù)責(zé)任轉(zhuǎn)移協(xié)議2024版
- 2025年度農(nóng)業(yè)園區(qū)場(chǎng)地租賃安全管理合同范本4篇
- 專業(yè)勞務(wù)分包協(xié)議(2024年版)樣本版A版
- 二零二四實(shí)習(xí)生就業(yè)權(quán)益與培訓(xùn)協(xié)議范本規(guī)范5篇
- 2025年度測(cè)繪數(shù)據(jù)安全保密協(xié)議4篇
- 專業(yè)標(biāo)識(shí)標(biāo)牌定制及施工服務(wù)協(xié)議版B版
- 專業(yè)攝影委托協(xié)議細(xì)則(2024年)版B版
- 2024物業(yè)管理權(quán)轉(zhuǎn)讓服務(wù)合同
- 2024版食品安全購(gòu)銷合作合同范本一
- 微機(jī)原理與接口技術(shù)考試試題及答案(綜合-必看)
- 勞務(wù)投標(biāo)技術(shù)標(biāo)
- 研發(fā)管理咨詢項(xiàng)目建議書
- 濕瘡的中醫(yī)護(hù)理常規(guī)課件
- 轉(zhuǎn)錢委托書授權(quán)書范本
- 一種配網(wǎng)高空作業(yè)智能安全帶及預(yù)警系統(tǒng)的制作方法
- 某墓園物業(yè)管理日常管護(hù)投標(biāo)方案
- 蘇教版六年級(jí)數(shù)學(xué)上冊(cè)集體備課記載表
- 內(nèi)蒙古匯能煤電集團(tuán)有限公司長(zhǎng)灘露天煤礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案
- 22S702 室外排水設(shè)施設(shè)計(jì)與施工-鋼筋混凝土化糞池
- 2013日產(chǎn)天籟全電路圖維修手冊(cè)45車身控制系統(tǒng)
評(píng)論
0/150
提交評(píng)論