通訊錄的制作數(shù)據(jù)結(jié)構(gòu)c語言版_第1頁
通訊錄的制作數(shù)據(jù)結(jié)構(gòu)c語言版_第2頁
通訊錄的制作數(shù)據(jù)結(jié)構(gòu)c語言版_第3頁
通訊錄的制作數(shù)據(jù)結(jié)構(gòu)c語言版_第4頁
通訊錄的制作數(shù)據(jù)結(jié)構(gòu)c語言版_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、通訊錄的設(shè)計、設(shè)計思路:經(jīng)過一個學(xué)期的程序設(shè)計學(xué)習(xí),我逐漸了解了計算機的基本原理和 c語言的 基本常識,并可以逐漸自己來實現(xiàn)一些簡單的程序任務(wù)。此次程序設(shè)計我選擇了通訊錄設(shè)計,通過函數(shù)、結(jié)構(gòu)體的定義以及一些基本操作運用,經(jīng)過一個多月的編寫、調(diào)試、測試,最終完成了該程序的設(shè)計。以下為我的設(shè)計思路:首先,確定通訊錄的功能,我初步設(shè)計了六項功能:輸入(程序中對應(yīng)enter ()、刪除(程序中對應(yīng)delete ()、顯示通訊錄(程序中對應(yīng)list ()、 搜索(程序中對應(yīng)search ()、保存(程序中對應(yīng)save ()、裝載(程序 中對應(yīng)load ()。其次,對于存儲的數(shù)據(jù)結(jié)構(gòu),我則主要選擇了一下幾

2、個方面的信息:姓名、 性別年齡、籍貫、手機、下一個指針(用于鏈表的操作與實現(xiàn))、當前指針(用于鏈表的操作與實現(xiàn))。二、程序源代碼:#include struct address/*創(chuàng)建一個address結(jié)構(gòu)*/char name10;/* 姓名*/char sex2;/* 性別*/char age2;/* 年齡*/char native10;/* 籍貫*/char telephone12; /* 手機*/struct address *next; /* 下一個入口的指針*/struct address *prior; /*當前記錄的指針*/ list_entry;struct address

3、*start; /* 指向列表中第一個入口 */struct address *last; /*指向列表中最后一個入口 */voidenter(),display(),search(),save(),load();menu_select(),list(),delet(),inputs();break;main()char s20,choice;struct address *info;start=last=NULL; /* 列表長度清零*/for(;) /*列循環(huán)的一個用法*/switch(menu_select()case 1: enter(); /*輸入 1, 進入enter()程序,是輸

4、入通訊錄*/break;case 2:delet(); /* 輸入 2, 進入delete()程序,是刪除一個記錄*/break;case 3:list();/* 輸入3,進入list()程序,是列表顯不通 信錄*/break;case 4:search(); /*輸入4 ,進入search()程序,搜索一個街道*/case 5:save();/*輸入5,保存列表到磁盤文件*/break;case 6:load();/* 輸入6,從磁盤文件讀入列表*/break;case 7:return(0);/*選擇一個選項*/menu_select()char s20;int c;printf(1.輸入

5、一個名字(直接回車則退出)n);printf(2.刪除一個名字 n);printf(3.列表顯示 n);printf(4.搜索查詢 n);printf(5.保存文件 n);printf(6.裝入文件 n);printf(7.退出 n);doprintf(n 輸 入您 的選擇:”);gets(s);c=atoi(s);while (c7);return c;/*輸入名字和地址*/void enter()structaddress*info,*dls_store();for(;)info=(struct address *) malloc(sizeof(list_entry);if (!info)

6、 printf(n 內(nèi)存溢出);return;inputs( 輸 入 姓 名:,info-name,10);if (!info-name0)break;/*名字長度為0,停止輸入*/ TOC o 1-5 h z inputs(輸入性別:,info-sex,2);inputs(輸入年齡:,info-age,2);inputs(輸入籍貫:,info-native,10);inputs(輸入電iS:,info-telephone,12);start=dls_store(info,start);/*保存在第一個記錄里*/*輸入循環(huán)*/inputs(prompt,s,count) /*這個函數(shù)用于輸入長

7、度為count的一個 字符串,用于防止字符串長度超過它的空間,并提出警告*/char *prompt;char *s;int count;char p255;doprintf(prompt);/*顯示這個函數(shù)的字符用*/gets(p);/* 從鍵盤獲得255個輸入*/if(strlen(p)count)printf(n 字符串超過長度!);/*如果數(shù)組P中的長度超過調(diào)用 函數(shù)中的參數(shù)count ,提示*/while (strlen(p)count);/*如果輸入的字符串長度超過 count ,循環(huán)重新輸入,否則退出,返 回調(diào)用者*/strcpy(s,p); /*s 是目標字符申,輸出時字符串在

8、s中*/return(0);/*產(chǎn)生一個又鏈接表,當一個新元素插入到列表的開始時,一個指向第一個元素的指針被返回*/struct address *dls_store(i,top)/*存貯順序*/struct address *i;/*新的元素*/struct address *top;/*列表中的第一個元素*/struct address *old,*p;if(last=NULL) /* 列表中的第一個元素*/i-next=NULL;i-prior=NULL;last=i;return i;p=top; /*從列表的頂部開始*/old=NULL;while(p)if(strcmp(p-nam

9、e,i-name)next;elseif (p-prior) p-prior-next=i;i-next=p;i-prior=p-prior;p-prior=i;return top;i-next=p; /* 新的第一個元素*/i-prior=NULL;p-prior=i;return i;old-next=i;/* 設(shè)置未尾*/i-next=NULL;i-prior=old;last=i;return start;/*從列表中刪除一個元素*/delet()struct address *info,*find();char s10;printf(輸入姓名:);gets(s);info=find

10、(s);if(info)if (start=info)start=info-next;if(start)start-prior=NULL;else last=NULL;else info-prior-next=info-next;if (info!=last)info-next-prior=info-prior;elselast=info-prior;free(info); /* 釋放空問*/return(0);struct address *find(name)/* 一個查找姓名的結(jié)構(gòu)*/char *name;struct address *info;info=start;while(inf

11、o)if(!strcmp(name,info-name) return info;info=info-next;/*獲得下一個地址*/printf(姓名沒有發(fā)現(xiàn)!n);return NULL; /* 沒有發(fā)現(xiàn)女4名*/list()/* 列表*/register int t;struct address *info;info=start;while(info)display(info);info=info-next;/*獲得下一個地址*/printf(nn);return(0);void display(info) /* 顯示通信錄*/struct address *info;printf(%s

12、n,info-name);printf(%sn,info-sex);printf(%sn,info-age);printf(%sn,info-native);printf(%sn,info-telephone);printf(nn);void search() /* 搜索一個名字*/char name10;struct address *info,*find();printf(輸入查找的名字!);gets(name);if(!(info=find(name)printf(沒有找到!n);else display(info);void save()/*保存通信錄*/register int t;

13、struct address *info;FILE *fp;if(fp=fopen(mlist,wb)=NULL) /*打開文件名mlist如果錯誤*/printf( 沒有找到文 件.n);exit;printf(n 正在 保存文 件n);info=start;while(info)fwrite(info,sizeof(structaddress),1,fp);info=info-next;/*獲得下一個地址*/fclose(fp);void load()/* 打開一個文件*/register int t;structaddress*info,*temp=NULL;FILE *fp;if(fp

14、=fopen(mlist,rb)=NULL)printf( 打開文件失 敗n);exit(1);while(start)info=start-next;free(info);start=info;printf(n 正在 讀取文 件n);start=(struct address*)malloc(sizeof(struct address);if(!start)printf(存貯溢出n);return;info=start;while(!feof(fp)if(1!=fread(info,sizeof(structaddress ),1,fp) break;/*為下一個分配空間*/ info-ne

15、xt=(structaddress*)malloc (sizeof(structaddress);if(!info-next) printf( 存貯溢temp-next=NULL; /* 最后一個輸入*/last=temp;start-prior=NULL;fclose(fp);出n);return;info-prior=temp;temp=info;info=info-next;三、調(diào)試結(jié)果調(diào)試結(jié)果初始狀態(tài)如下圖所示:以下介紹五大重點功能: 步驟一:輸入功能。選才 1,輸入名字“張三”,會出現(xiàn)一系列需要輸入的信息,輸入完畢后接回車,再重復(fù)以上動作輸入兩個人:王五、李四。如下圖所示。步驟二:保存功能。按兩次回車,退出輸入狀態(tài),按 5保存。如圖1所示。圖1圖2步驟三:刪除功能。選才 2,輸入“張三”,回車;選擇5 “保存”,回車。如圖2所示。步驟四:查看功能。選才3,回車,得到圖3所示。圖3圖4步驟五:搜索功能。選才4,輸入“李四”,回車,得到圖4所示。四、設(shè)計過程中存在的問題在設(shè)計的過程中,不免出現(xiàn)過很多問題。首先,設(shè)計第一個輸入操作時沒有 考慮到返回的問題,所以如果選擇了第一個操作則會無止境的重復(fù)輸入, 后來就 在第一項

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論