版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、C語言程序設(shè)計課程設(shè)計通訊錄管理系統(tǒng)指導(dǎo)教師 :設(shè)計人 :班級:學號:設(shè)計時間: 2010 年 6 月 12 日目錄一、題目要求 -3二、需求分析 -3三、總體設(shè)計 -3四、詳細設(shè)計1、主函數(shù) -42、各功能模塊設(shè)計-83、公共函數(shù) -14五、上機操作 -17六、課程設(shè)計總計-21七、附錄一1、源程序代碼 -22一、題目要求具有數(shù)據(jù)插入、修改、刪除、顯示和查詢功能的電話簿管理程序.(1)數(shù)據(jù)包括 : 人名、工作單位、電話號碼和E-mail 地址 .2(2) 可對記錄中的姓名和電話號碼進行修改 .(3) 可增加或刪除記錄 .(4) 可顯示所有保存的記錄 .(5) 可按人名或電話號碼進行查詢 。二
2、、需求分析根據(jù)題目要求,由于工作人員的通訊信息是存放在文件中,所以應(yīng)提供文件的輸入、輸出等操作;在程序中需要瀏覽工作人員的通訊信息,應(yīng)提供顯示、查找、插入、刪除等操作;另外還應(yīng)提供鍵盤式選擇菜單實現(xiàn)功能選擇。三、總體設(shè)計根據(jù)上面的需求分析,可將這個系統(tǒng)的設(shè)計分為六大模塊(如圖一):添加、顯示、刪除、查詢、修改、保存。圖一系統(tǒng)功能模塊添加:可以添加通訊錄記錄,依次輸入編號、姓名、電子郵箱、通訊地址、電話號碼后,會提示是否繼續(xù)添加。顯示:可以顯示所有通訊錄里的記錄刪除:輸入欲刪除的那個人的編號后,會自動刪除他(她)的記錄內(nèi)容查詢:可以選擇用姓名、電話號碼兩種方式查詢修改:輸入欲修改的那個人的編號后
3、,再依次輸入編號、姓名、電子郵箱、通訊地址、電話號碼后即可完成修改保存:輸入文件名(帶后綴名)后,即可將通訊錄信息保存到文件四、詳細設(shè)計31、主函數(shù)主函數(shù)設(shè)計得比較簡潔,只提供輸入、處理和輸出部分的函數(shù)調(diào)用。其中各功能模塊用菜單方式選擇。其流程圖如圖二所示:開始輸入 i判斷 i添顯刪查修讀保退加通示除詢改取存出2訊通通通通文信訊訊訊訊件息信信信信息息息息輸入 i姓名電通電子訊話郵地號箱址碼關(guān)閉4圖二主函數(shù)流程圖【程序】/*主函數(shù) */void main()int j,k;char ch,ch1;char search_name40;/* 定義字符串變量*/char search_telepho
4、ne20;Data_Load();/* 聲明載入數(shù)據(jù)函數(shù)*/i-;doprintf("*MENU*n");printf("-! WELLCOME TO THE SYSTEM !-");printf("n*tSelect Function:*");printf("*t1.Add new*");printf("*t2.View the data*");printf("*t3.Delete*");printf("*t4.Searchprintf("*t5.Ins
5、ert*");printf("*t6.Save and quit*");printf("*t7.Quit*");printf("n*MENU*n");printf("tPlease choose the optionyou need:");ch=getche( );/* 輸入字符 */switch(ch)case '1':int p;printf("ntPlease input the number of people you want to add:"); scanf
6、("%d",&p);/* 增加記錄 */printf("tPlease press ENTER again");while(getch()!=0x1b&&i<p)i+; Data_Input(i);printf("Please press Enter again to continuen");if(i=p)printf("ntThe data is fulln");/* 記錄完后顯示通訊錄已滿*/break;5case '2': j=1;/* 打印所有記錄*/while
7、(getch()!=0x1b&&j<=i) Data_Show(j+);/* 聲明打印數(shù)據(jù)函數(shù)*/if(j>i) printf("ntThe system is endn");/* 顯示記錄末尾 */break;case '3':/* 刪除通訊錄中的記錄*/if(i<1)printf("ntno recordn");/* 顯示無記錄 */break;printf("ntpleaseinput the number you want to delect:");scanf("%d
8、",&k);printf("tsucceed!n");for(j=k;j<i;j+)/* 將刪除位置后的元素順序前移,即后一數(shù)據(jù)復(fù)制到前一位置,循環(huán)操作 */strcpy(,recordsj+1.name);strcpy(recordsj.addr.email,recordsj+1.addr.email);strcpy(recordsj.addr.addr,recordsj+1.addr.addr);strcpy(recordsj.telephone,recordsj+1.telephone);i-;/* 元素總數(shù)減1*/b
9、reak;case '4':/* 通訊錄搜索功能*/printf("n*tSelect Function:");printf("n*t1.according to name ");printf("n*t2.according to telephone number ");printf("ntPlease choose the optionyou need:");ch1=getche();/* 輸入字符 */switch(ch1)case '1':printf("ntPlea
10、se input the name:");/* 輸入名字 */scanf("%s", search_name);/* 獲得名字到指針型字符串變量*/for(j=1;j<=i;j+)if(strcmp(search_name,)=0)/* 比較字符串 ,即查看是否與記錄中名字相同 */Data_Show(j);printf("n");/* 搜索成功,打印記錄結(jié)束循環(huán)*/break;6if(j>i)/* 搜索失敗 */printf("ntNo Record ");/* 顯示無此記錄*/bre
11、ak;case '2':printf("ntPlease input the telephone number:");scanf("%s",search_telephone);for(j=1;j<=i;j+)if(strcmp(search_telephone,recordsj.telephone)=0)Data_Show(j);printf("n");/* 搜索成功,打印記錄結(jié)束循環(huán)*/break;if(j>i)/* 搜索失敗 */printf("ntNo Record ");/* 顯
12、示無此記錄*/break;break;case '5':printf("ntInsert No:");/* 錄入插入位置*/scanf("%d",&k);for(j=k+1;j<i;j+)/* 將插入位置后的元素順序后移,即將其復(fù)制到后一位置,循環(huán)操作 */strcpy(,); strcpy(recordsj.addr.email,recordsj-1.addr.email);strcpy(recordsj.addr.addr,recordsj-1.addr.addr)
13、;strcpy(recordsj.telephone,recordsj-1.telephone);Data_Input(k);/* 聲明增加數(shù)據(jù)函數(shù)*/i+;/* 將記錄數(shù)目加一*/break;case '6': Data_Save();printf("n");/* 聲明保存函數(shù)*/7exit(0);break;/* 保存后退出 */case '7': printf("ntsave or not ?:(y/n)");ch=getch();/* 獲得輸入字符*/if(ch='y') Data_Save();f
14、close(fp);/* 關(guān)閉 record.txt 文件 */exit(0);/* 退出程序 */default: printf("Please choose1-4n");/* 輸入的如果不是數(shù)字1-4,讓其重新輸入*/while(1);/* 每次都從第一個功能開始,循環(huán)操作*/2、各功能模塊設(shè)計添加模塊【需求分析】該模塊的功能是用戶需要添加新的通訊信息記錄 ,從鍵盤依次輸入編號、姓名、電子郵箱、通訊地址、電話號碼并逐條寫到原來的輸入文件中。添加模塊的流程圖如圖三所示。圖三添加模塊流程圖8【程序】/*添加模塊 */void add ()int p;printf("
15、;ntPlease input the number of people you want to add:");scanf("%d",&p);/*增加記錄 */printf("tPlease press ENTER again");while(getch()!=0x1b&&i<p)i+;Data_Input(i);printf("Please press Enter again to continuen");if(i=p)printf("ntThe data is fulln"
16、;);/* 記錄完后顯示通訊錄已滿*/break;顯示模塊【需求分析】該模塊的功能是顯示所有通訊錄里的記錄。顯示模塊的流程圖如圖四所示。圖四顯示模塊流程圖9【程序】/*顯示模塊 */void print ()while(getch()!=0x1b&&j<=i) Data_Show(j+);/* 聲明打印數(shù)據(jù)函數(shù)*/if(j>i) printf("ntThe system is endn");/* 顯示記錄末尾 */break;刪除模塊【需求分析】該模塊的功能是刪除通訊錄里原有的記錄。刪除模塊的流程圖如圖五所示。10圖五 刪除模塊流程圖【程序】/*
17、刪除模塊 */void delete()if(i<1)printf("ntno recordn");/* 顯示無記錄 */break;printf("ntpleaseinput the number you want to delect:");scanf("%d",&k);printf("tsucceed!n");for(j=k;j<i;j+)/* 將刪除位置后的元素順序前移,即后一數(shù)據(jù)復(fù)制到前一位置,循環(huán)操作 */strcpy(,recordsj+1.name);st
18、rcpy(recordsj.addr.email,recordsj+1.addr.email);strcpy(recordsj.addr.addr,recordsj+1.addr.addr);strcpy(recordsj.telephone,recordsj+1.telephone);i-;/* 元素總數(shù)減1*/break;查詢模塊【需求分析】該模塊的功能是可以選擇用姓名、電話號碼兩種方式查詢通訊記錄。查詢模塊的流程圖如圖六所示。11圖六查詢模塊流程圖【程序】/*查詢模塊 */void search()printf("n*tSelect Function:");print
19、f("n*t1.according to name ");printf("n*t2.according to telephone number ");printf("ntPlease choose the optionyou need:");ch1=getche();/* 輸入字符 */switch(ch1)case '1':printf("ntPlease input the name:");/* 輸入名字 */scanf("%s", search_name);/* 獲得名字到
20、指針型字符串變量*/for(j=1;j<=i;j+)12if(strcmp(search_name,)=0)/* 比較字符串 ,即查看是否與記錄中名字相同 */Data_Show(j);printf("n");/* 搜索成功,打印記錄結(jié)束循環(huán)*/break;if(j>i)/* 搜索失敗 */printf("ntNo Record ");/* 顯示無此記錄*/break;case '2':printf("ntPlease input the telephone number:");s
21、canf("%s",search_telephone);for(j=1;j<=i;j+)if(strcmp(search_telephone,recordsj.telephone)=0)Data_Show(j);printf("n");/* 搜索成功,打印記錄結(jié)束循環(huán)*/break;if(j>i)/* 搜索失敗 */printf("ntNo Record ");/* 顯示無此記錄*/break;break;插入模塊【需求分析】該模塊的功能是對通訊記錄里的內(nèi)容進行插入22。插入模塊的流程圖如圖七所示。13/* 將插入位置后的
22、元素順序后移,即將其復(fù)制到后一位置,循環(huán)【程序】/*插入模塊 */Void insert ()printf("ntInsert No:");/* 錄入插入位置*/scanf("%d",&k);for(j=k+1;j<i;j+)操作 */strcpy(,); strcpy(recordsj.addr.email,recordsj-1.addr.email);strcpy(recordsj.addr.addr,recordsj-1.addr.addr);strcpy(recordsj.te
23、lephone,recordsj-1.telephone);Data_Input(k);/* 聲明增加數(shù)據(jù)函數(shù)*/i+;/* 將記錄數(shù)目加一*/break;3、公共函數(shù)下面介紹一些在每個功能模塊中都有可能用到的一些公共函數(shù)。載入數(shù)據(jù)函數(shù)【程序】/*載入數(shù)據(jù)函數(shù) */void Data_Load()/* 定義載入數(shù)據(jù)函數(shù)*/int j;long k;fp=fopen("record.txt","r+t");/* 打開文件record.txt,進行讀寫 */if(fp!=NULL)/* 如果文件不為空*/for(i=1;i<50;i+)j=fgetc(
24、fp);/* 從 "records.txt" 文件讀入整型數(shù)字*/if(j=EOF)/* 判斷是否到了文件尾*/return;/* 如果到了結(jié)尾,返回*/k=i-1;14fseek(fp,k*sizeof(structrecord1),SEEK_SET);/* 將位置指針移到record1 結(jié)構(gòu)體所含字節(jié)的第 k 倍個字節(jié)處 */fread(&recordsi,sizeof(struct record1),1,fp);/* 讀取一條記錄*/elsefp=fopen("record.txt","w");/* 打開文件record
25、.txt ,只寫 */i=1;顯示數(shù)據(jù)函數(shù)【程序】/*顯示數(shù)據(jù)函數(shù) */void Data_Show(int j)/* 定義顯示數(shù)據(jù)函數(shù)*/printf("nntNo:%3dn",recordsj.number);/* 序號 */printf("ntname:%2sn",);/* 姓名 */printf("ntemail:%-10s",recordsj.addr.email);/*email 地址 */printf("ntaddress:%-40s",recordsj.addr.addr)
26、;/* 工作單位 */printf("ntphone%-13s",recordsj.telephone);/* 聯(lián)系電話 */void Data_Input(int j)/* 定義添加數(shù)據(jù)函數(shù) */fflush(stdin);/* 清空輸入緩沖區(qū) */recordsj.number=j;printf("nnntinputNo %d ",j);printf("ntname:");/* 輸入姓名 */scanf("%s",);fflush(stdin);/* 清空輸入緩沖區(qū) */printf(
27、"temail:");/* 輸入 email 地址 */scanf("%s",recordsj.addr.email);printf("taddress:");/* 輸入工作單位 */15scanf("%s",recordsj.addr.addr);printf("tphone:");/* 輸入聯(lián)系電話*/scanf("%s",recordsj.telephone);添加數(shù)據(jù)函數(shù)【程序】/*添加數(shù)據(jù)函數(shù) */void Data_Input(int j)/* 定義添加數(shù)據(jù)函數(shù)
28、*/fflush(stdin);/* 清空輸入緩沖區(qū) */recordsj.number=j;printf("nnntinputNo %d ",j);printf("ntname:");/* 輸入姓名 */scanf("%s",);fflush(stdin);/* 清空輸入緩沖區(qū) */printf("temail:");/* 輸入 email 地址 */scanf("%s",recordsj.addr.email);printf("taddress:"
29、;);/* 輸入工作單位 */scanf("%s",recordsj.addr.addr);printf("tphone:");/* 輸入聯(lián)系電話 */scanf("%s",recordsj.telephone);保存函數(shù)【程序】/*保存函數(shù) */void Data_Save()/* 定義保存函數(shù) */int j;fp=fopen("record.txt","w"); /* 打開文件 record.txt ,只寫 */ for(j=1;j<=i;j+)fwrite(&records
30、j,sizeof(struct record1),1,fp);/* 將結(jié)構(gòu)體變量records 的確定個數(shù)字節(jié)輸入到 record.txt 文件中 ,個數(shù)為結(jié)構(gòu)體friend1 所含字節(jié)數(shù) */16五上機操作下面是各個模塊的界面圖1)顯示的主菜單界面2)添加界面:173)顯示界面:4)刪除界面:5)查詢界面:18以姓名查詢方式為例:6)插入界面:197)保存界面:8)tongxunlu.txt 文件截圖:209)刪除后, tongxunlu.txt 文件截圖:六 課程設(shè)計總結(jié)這次的程序?qū)嵲O(shè)計實驗是對我們進入大學以來學習程序設(shè)計語言結(jié)果的一次大檢驗。自己動手,自己發(fā)現(xiàn)和解決問題。發(fā)現(xiàn)了自己的許多
31、不足。平時沒有掌握好的知識在這次實驗中徹底暴露出來,經(jīng)過不斷思考,不斷查閱資料和上機運行,解決其中大部分問題,當然還存在一些問題沒有解決。我相信在以后的學習能夠解決好它們。但是,收獲還是不小的,我不僅對 C 的操作有了進一步的掌握, 還了解到了程序設(shè)計的書寫風格及其注釋的格式。當我選擇通訊錄這個題目時,一開始想運用大量鏈表及指針來完成,但是在慢慢琢磨之后,覺得這個不一定要用鏈表,于是改變了編程思路。當然還有不少文件的讀寫問題,不過還是通過不斷測試之后順利解決了。另外一點要說的就是這個程序用了很多的循環(huán),因此對于循環(huán)的控制要十分小心,有時while 和 do-while 的區(qū)別也是十分重要的。還
32、有一點體會就是,書上和老師教的內(nèi)容是有限的,我們需要不斷地靠自己去學習,21向他人請教,了解和掌握更多的知識,這樣我們才能編出更好的C 程序??傮w來說,這次 C 語言程序設(shè)計實驗還是比較成功的,雖然最終程序還存在一些不足,但能取得這樣的成績我還是比較有成就感的。最后,要感謝學校為我們提供這次實驗機會,更要感謝老師的教導(dǎo)和學長們對我的幫助與支持。附錄1、源程序代碼#include<string.h>/* 使用字符串函數(shù) */#include<stdio.h>int i;/* 定義一個全局變量 i*/struct addr/* 定義通訊地址結(jié)構(gòu)體 */char email2
33、0;/*email 地址 */char addr60;/* 工作單位 */;struct record1/* 定義電子通訊錄結(jié)構(gòu)體 */int number;/* 序號 */char name20;/* 姓名 */struct addr addr;/* 通信地址 */char telephone13;/* 聯(lián)系電話 */records50;FILE *fp;/* 定義指向file 類型結(jié)構(gòu)體的指針變量*/void Data_Load()/* 定義載入數(shù)據(jù)函數(shù)*/int j;long k;fp=fopen("record.txt","r+t");/* 打開
34、文件record.txt,進行讀寫 */if(fp!=NULL)/* 如果文件不為空*/for(i=1;i<50;i+)j=fgetc(fp);/* 從 "records.txt" 文件讀入整型數(shù)字*/if(j=EOF)/* 判斷是否到了文件尾*/return;/* 如果到了結(jié)尾,返回*/22k=i-1;fseek(fp,k*sizeof(structrecord1),SEEK_SET);/* 將位置指針移到record1 結(jié)構(gòu)體所含字節(jié)的第 k 倍個字節(jié)處 */fread(&recordsi,sizeof(struct record1),1,fp);/* 讀
35、取一條記錄*/elsefp=fopen("record.txt","w");/* 打開文件record.txt ,只寫 */i=1;void Data_Show(int j)/* 定義顯示數(shù)據(jù)函數(shù)*/printf("nntNo:%3dn",recordsj.number);/* 序號 */printf("ntname:%2sn",);/* 姓名 */printf("ntemail:%-10s",recordsj.addr.email);/*email 地址 */prin
36、tf("ntaddress:%-40s",recordsj.addr.addr);/* 工作單位 */printf("ntphone%-13s",recordsj.telephone);/* 聯(lián)系電話 */void Data_Input(int j)/* 定義添加數(shù)據(jù)函數(shù)*/fflush(stdin);/* 清空輸入緩沖區(qū)*/recordsj.number=j;printf("nnntinputNo %d ",j);printf("ntname:");/* 輸入姓名 */scanf("%s",r
37、);fflush(stdin);/* 清空輸入緩沖區(qū)*/printf("temail:");/* 輸入 email 地址 */scanf("%s",recordsj.addr.email);printf("taddress:");/* 輸入工作單位*/scanf("%s",recordsj.addr.addr);printf("tphone:");/* 輸入聯(lián)系電話*/scanf("%s",recordsj.telephone);23void Data
38、_Save()/* 定義保存函數(shù) */int j;fp=fopen("record.txt","w"); /* 打開文件 record.txt ,只寫 */ for(j=1;j<=i;j+)fwrite(&recordsj,sizeof(struct record1),1,fp);/* 將結(jié)構(gòu)體變量records 的確定個數(shù)字節(jié)輸入到 record.txt 文件中 ,個數(shù)為結(jié)構(gòu)體friend1 所含字節(jié)數(shù) */void main()/* 主函數(shù) */int j,k;char ch,ch1;char search_name40;/* 定義字符
39、串變量*/char search_telephone20;Data_Load();/* 聲明載入數(shù)據(jù)函數(shù)*/i-;doprintf("*MENU*n");printf("-! WELLCOME TO THE SYSTEM !-");printf("n*tSelect Function:*");printf("*t1.Add new*");printf("*t2.View the data*");printf("*t3.Delete*");printf("*t4.Se
40、arch*");printf("*t5.Insert*");printf("*t6.Save and quit*");printf("*t7.Quit*");printf("n*MENU*n");printf("tPlease choose the optionyou need:");ch=getche();/* 輸入字符 */switch(ch)case '1':int p;printf("ntPlease input the number of peopl
41、e you want to add:"); scanf("%d",&p);/* 增加記錄 */printf("tPlease press ENTER again");while(getch()!=0x1b&&i<p)i+;24Data_Input(i);printf("Please press Enter again to continuen");if(i=p)printf("ntThe data is fulln");/* 記錄完后顯示通訊錄已滿*/break;case &
42、#39;2': j=1;/* 打印所有記錄*/while(getch()!=0x1b&&j<=i) Data_Show(j+);/* 聲明打印數(shù)據(jù)函數(shù)*/if(j>i) printf("ntThe system is endn");/* 顯示記錄末尾 */break;case '3':/* 刪除通訊錄中的記錄*/if(i<1)printf("ntno recordn");/* 顯示無記錄 */break;printf("ntpleaseinput the number you want
43、to delect:");scanf("%d",&k);printf("tsucceed!n");for(j=k;j<i;j+)/* 將刪除位置后的元素順序前移,即后一數(shù)據(jù)復(fù)制到前一位置,循環(huán)操作 */strcpy(,recordsj+1.name);strcpy(recordsj.addr.email,recordsj+1.addr.email);strcpy(recordsj.addr.addr,recordsj+1.addr.addr);strcpy(recordsj.telephone,recordsj+1.telephone);i-;/* 元素總數(shù)減1*/break;case '4':/* 通訊錄搜索功能*/printf("n*tSe
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度智能建筑通風防排煙系統(tǒng)安裝合同范本3篇
- 2024年度文件柜銷售與售后服務(wù)承諾合同3篇
- 2024年消防泵房培訓(xùn)與技術(shù)支持合同3篇
- 2024年度外語培訓(xùn)機構(gòu)外教招聘與任課合同3篇
- 2024企業(yè)環(huán)保項目勞務(wù)輸出與污染治理合同范本3篇
- 2024年離婚途徑對比:訴訟離婚與合同離婚速度研究一
- 2024年磚廠產(chǎn)品設(shè)計與質(zhì)量控制合同3篇
- 2024年度嬰幼兒看護服務(wù)合同范本3篇
- 2024年物流行業(yè)倉儲服務(wù)合同
- 2024年標準建筑工程承包合同條款版B版
- 北京市西城區(qū)2022-2023學年六年級上學期數(shù)學期末試卷(含答案)
- 2024秋期國家開放大學本科《經(jīng)濟學(本)》一平臺在線形考(形考任務(wù)1至6)試題及答案
- 抵押貸款行業(yè)可行性分析報告
- 小品劇本《錢多多銀行》臺詞完整版今夜現(xiàn)場秀佟銘心
- 2024年建筑業(yè)10項新技術(shù)
- 四年級上冊道法知識點匯總
- 農(nóng)村基層人大代表述職報告
- EN10204-2004中文版
- (重要)高中數(shù)學數(shù)列十種求通項和七種求和方法,練習及答案
- 300MW機組熱力系統(tǒng)計算與經(jīng)濟性分析
- 人大代表議案范文5篇優(yōu)秀版
評論
0/150
提交評論