版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 課 程 設(shè) 計(jì) 任 務(wù) 書</p><p> 課程名稱 C課程設(shè)計(jì) </p><p> 課 題 通信錄管理系統(tǒng) </p><p><b> 任務(wù)書</b></p><p><b> 通信錄管理系統(tǒng)</b></p><p> 程序功
2、能:完成對若干(上限為1萬)人的通信信息進(jìn)行各種管理。</p><p><b> 設(shè)計(jì)內(nèi)容:</b></p><p> 1.確定能記錄通信信息的數(shù)據(jù)結(jié)構(gòu),至少要有編號、分組、姓名、固話、手機(jī)號、QQ號碼、E-mail、家庭住址等信息,它是本程序的核心數(shù)據(jù)結(jié)構(gòu),定義為如下的結(jié)構(gòu)體類型:</p><p> struct comm_info
3、 { /* 定義通信信息結(jié)構(gòu)體類型 */</p><p> long num; /* 編號 */</p><p> char group[16] /* 分組 */</p><p> char name[16]; /* 姓名 */</p><p&
4、gt; char hphone[16]; /* 固話home_phone */</p><p> char mphone[16]; /* 手機(jī)號mobile_phone */</p><p> char qq[16]; /* QQ號碼 */</p><p> char email[2
5、0]; /* e-mail地址 */</p><p> int len; /* 家庭住址或通信地址長度 */</p><p> char *addr; /* 家庭住址或通信地址 */</p><p> struct comm_info *prev; /
6、* 前向鏈表指針 */</p><p> struct comm_info *next; /* 后向鏈表指針 */</p><p><b> };</b></p><p> 2.程序應(yīng)具有以下基本功能:</p><p> 添加:增加一個或幾個人的記錄,并可選擇繼續(xù)輸入或退出。</p>&l
7、t;p> 查詢:可按姓名查找某人記錄,也可查找某個組的所有記錄。若找到,則顯示所有人的記錄,否則提示未找到,無論查找成功否,應(yīng)還可選擇繼續(xù)查找或退出。</p><p> 刪除:刪除已輸入的記錄。輸入姓名查找要刪除的記錄,若找到,提示是否確定刪除,若選擇是,則刪除該人信息,若選擇否,則取消;若沒找到,提示無此人信息。</p><p> 修改:修改某人的記錄。輸入姓名并查找,若找到
8、,顯示該人的所有信息,并可進(jìn)行修改;否則提示無此人信息</p><p> 排序:可分別按分組、編號或姓名進(jìn)行排序。</p><p> 3.如有時間,可為程序增加以下功能:</p><p> 登錄模塊。該模塊在進(jìn)入主界面之前先執(zhí)行,用于對進(jìn)入系統(tǒng)的用戶進(jìn)行身份驗(yàn)證,若用戶輸入正確的用戶名及用戶密碼,則進(jìn)入主界面,否則輸入超過3次錯誤則退出程序。處理方法:用戶名及
9、用戶密碼可保存在一文件中,校驗(yàn)時從文件中讀入數(shù)據(jù)進(jìn)行校驗(yàn)。在系統(tǒng)中應(yīng)增加一個用戶管理模塊,在其中可新增用戶,修改用戶信息等。</p><p> 系統(tǒng)幫助。顯示開發(fā)者姓名、班級、開發(fā)完成日期、版本號和指導(dǎo)老師等信息。</p><p><b> 目 錄</b></p><p> 需求分析………………………………………..6</p&
10、gt;<p> 二、總體設(shè)計(jì)…………………………………………7</p><p> 三、概要設(shè)計(jì)………………………………………….8</p><p> 四、詳細(xì)設(shè)計(jì)…………………………………………10</p><p> 五、調(diào)試分析…………………………………………14</p><p> 六、總結(jié)體會……………………………
11、……………15</p><p> 七、源程序清單……………………………………….15</p><p> 八、參考書目…………………………………………..26</p><p><b> 需求分析</b></p><p><b> 程序的功能</b></p><p>
12、對于M個人的學(xué)號num、姓名name、組別group、單位unit、固話telephone、qq、email進(jìn)行信息輸入,人數(shù)增加,刪除,按姓名、學(xué)號進(jìn)行查找,以及對信息建文件夾存檔、讀取。2、輸入輸出的要求</p><p> ?、?、本系統(tǒng)顯示這樣的菜單:</p><p><b> 請選擇系統(tǒng)功能項(xiàng):</b></p><p><b>
13、; 信息錄入;</b></p><p><b> 信息顯示;</b></p><p><b> 按學(xué)號查找記錄;</b></p><p><b> 按姓名查找記錄;</b></p><p><b> 刪除記錄;</b></p&g
14、t;<p><b> 增加記錄;</b></p><p><b> 保存記錄;</b></p><p><b> 讀取記錄;</b></p><p><b> 按序號顯示記錄;</b></p><p><b> 排序;&l
15、t;/b></p><p> 文件另存為一個自建文件;</p><p><b> 退出系統(tǒng)。</b></p><p> ?、?、執(zhí)行一個具體的功能之后,按任意鍵,程序?qū)⒅匦嘛@示菜單。</p><p><b> 總體設(shè)計(jì)</b></p><p> 主要函數(shù)調(diào)用關(guān)系如
16、下</p><p><b> 子函數(shù)調(diào)用關(guān)系如下</b></p><p><b> 概要設(shè)計(jì)</b></p><p> 1、程序的抽象數(shù)據(jù)類型的定義</p><p><b> 信息數(shù)據(jù)結(jié)構(gòu)</b></p><p><b> { 學(xué)號;
17、</b></p><p><b> 姓名;</b></p><p><b> 組別;</b></p><p><b> 班級;</b></p><p><b> 固話;</b></p><p><b>
18、 QQ;</b></p><p><b> Email;</b></p><p><b> }</b></p><p> 程序的模塊組成以及各個模塊的功能</p><p><b> 程序的模塊組成:</b></p><p> a&
19、gt;主函數(shù) main();</p><p> b>菜單函數(shù)int menu_select();</p><p> c>信息輸入函數(shù)int enter(ADDRESS t[]);</p><p> d>記錄顯示函數(shù)void list(ADDRESS t[],int n);</p><p> e>學(xué)號查找函數(shù)v
20、oid search(ADDRESS t[],int n);</p><p> f>輸出函數(shù)void print(ADDRESS temp);</p><p> g>姓名查找子函數(shù)int find(ADDRESS t[],int n,char *s);</p><p> h>學(xué)號查找子函數(shù)int finder(ADDRESS t[],int
21、n,char *s);</p><p> i>記錄刪除函數(shù)int delete(ADDRESS t[],int n);</p><p> j>記錄插入函數(shù)int add(ADDRESS t[],int n);</p><p> k>保存函數(shù)void save(ADDRESS t[],int n);</p><p>
22、l>讀入函數(shù)int load(ADDRESS t[]);</p><p> m>按序號顯示記錄函數(shù)void display(ADDRESS t[]);</p><p> n>排序函數(shù)void sort(ADDRESS t[],int n);</p><p> o>姓名查找函數(shù)void qseek(ADDRESS t[],int n);&
23、lt;/p><p> p>文件復(fù)制函數(shù)void copy();</p><p> main函數(shù)通過switch語句調(diào)用menu_select()函數(shù)進(jìn)入各個菜單。</p><p> 各函數(shù)的主要功能描述如下:</p><p> int enter(ADDRESS t[]); 輸入學(xué)生的各項(xiàng)信息。</p><p&g
24、t; void list(ADDRESS t[],int n); 顯示學(xué)生的各項(xiàng)信息。</p><p> void search(ADDRESS t[],int n); 按學(xué)號查找學(xué)生的信息。</p><p> int delete(ADDRESS t[],int n); 按學(xué)生的姓名刪除該學(xué)生的記錄。</p><p> int add(ADDRESS t
25、[],int n); 插入新的紀(jì)錄。</p><p> void save(ADDRESS t[],int n); 把輸入的記錄保存在當(dāng)先文件夾內(nèi)。</p><p> int load(ADDRESS t[]); 讀入先前保存的記錄。</p><p> void display(ADDRESS t[]); 按序號查找記錄,序號為列表從上到下的循序。</p
26、><p> void sort(ADDRESS t[],int n); 按姓名排序。</p><p> void qseek(ADDRESS t[],int n); 按學(xué)生姓名查找記錄。</p><p> void copy(); 把記錄報(bào)尋到另一指定的文件夾。</p><p> int menu_select(); 顯示菜單界面,通向各
27、個菜單。</p><p><b> 詳細(xì)設(shè)計(jì)</b></p><p> 點(diǎn)擊編譯連接并運(yùn)行按鈕,出現(xiàn)字幕press any key enter menu……,按任意鍵出現(xiàn)如下界面</p><p> 0. Enter record</p><p> 選擇0. Enter record選項(xiàng)按回車鍵輸入3組記錄記錄&l
28、t;/p><p> 1.list the file</p><p> 回車進(jìn)入主菜單后,選擇1.list the file出現(xiàn)如下界面</p><p> 2. Search record on num</p><p> 按任意鍵進(jìn)入菜單后,選擇2. Search record on num出現(xiàn)如下界面</p><p&g
29、t;<b> 回車出現(xiàn)如下界面</b></p><p> 3. Search record on name</p><p> 按任意鍵進(jìn)入主菜單后,選擇3. Search record on name 輸入名字zhang后出現(xiàn)如下界面</p><p> 4. Delete a record</p><p> 按
30、任意鍵進(jìn)入主菜單后,選擇4. Delete a record選項(xiàng)后輸入li后出現(xiàn)如下界面</p><p> 輸入1、回車后,在在主菜單中選擇1. List the file選項(xiàng)后出現(xiàn)如下界面</p><p> 5. add record</p><p> 按任意鍵進(jìn)入主菜單后,選擇5. add record選項(xiàng),輸入如下信息后輸入zhang,再在主菜單中選擇1
31、. List the file選項(xiàng),出現(xiàn)如下界面</p><p> 6. Save the file</p><p> 按任意鍵進(jìn)入主菜單后,選擇6. Save the file,出現(xiàn)如下界面</p><p> 可以在當(dāng)前文件夾找到相應(yīng)文件</p><p><b> 相應(yīng)文件</b></p><
32、;p> 7. Load the file</p><p> 關(guān)閉運(yùn)行窗口,重新打開后,在主菜單中選擇7. Load the file選項(xiàng),按任意鍵進(jìn)入主菜單后選擇1. List the file出現(xiàn)如下界面</p><p> 8. display record on order</p><p> 按任意鍵進(jìn)入主菜單后,選擇8. display reco
33、rd on order選項(xiàng),輸入序號2,出現(xiàn)如下界面</p><p> 9. sort to make new file</p><p> 按任意鍵進(jìn)入主菜單后,選擇9. sort to make new file選項(xiàng),任意鍵后回到主菜單</p><p> 10. copy the file to new file</p><p>
34、按任意鍵進(jìn)入主菜單后,選擇10. copy the file to new file選項(xiàng),輸入d:\file.txt:回車后出現(xiàn)如下界面</p><p> 在D盤可以找到相應(yīng)的文件</p><p><b> 相應(yīng)文件</b></p><p><b> 11. Quit</b></p><p>
35、 按任意鍵進(jìn)入主菜單后,選擇11. Quit選項(xiàng),退出程序</p><p><b> 調(diào)試分析</b></p><p> 在調(diào)試過程中,seach函數(shù)調(diào)用finder函數(shù),而delete函數(shù)和add函數(shù)都要調(diào)用find函數(shù),在整個程序中,find為最核心的函數(shù),所以要增加程序功能只,改動find函數(shù)是非常麻煩的。所以在增加search函數(shù)是,沒有改動find 而
36、是仿照find增加了一個finder函數(shù)。在其他功能的改動和添加上,也是同樣的盡量不改動find函數(shù)。整個調(diào)試過程是需要細(xì)心檢查和不斷修改的。</p><p><b> 總結(jié)體會</b></p><p> 此次課程設(shè)計(jì)使得我學(xué)會更細(xì)心的去做一件事。懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才
37、能真正為社會服務(wù),從而提高自己的實(shí)際動手能力和獨(dú)立思考的能力。在編寫過程中,我逐步的了解了程序模塊化設(shè)計(jì)的思想含義。在整個程序設(shè)計(jì)的過程中語法的錯誤還是比較容易檢查的,但是對于那些邏輯思維的問題方面的缺陷不易查出,因此常常出現(xiàn)系統(tǒng)提示沒有錯誤但是仍然不能夠正常運(yùn)行的境況,盡管有很多不足之處,但我在整個系統(tǒng)程序設(shè)計(jì)的過程中,我可以感受到自己對C語言有了一定的掌握,對整體的把握度也提高了很多。</p><p> 源
38、程序清單(帶注釋)</p><p> #include "stdio.h" /*I/O函數(shù)*/</p><p> #include "conio.h" /*屏幕操作函數(shù)*/</p><p> #include "string.h"/*字符串函數(shù)*/</p><p>
39、#include "ctype.h" /*字符操作函數(shù)*/</p><p> #define M 50 /*定義常數(shù)表示記錄數(shù)*/</p><p> typedef struct /*定義數(shù)據(jù)結(jié)構(gòu)*/</p><p><b> {</b></p><p> char name[20]; /*
40、姓名*/</p><p> char units[30]; /*單位*/</p><p> char tele[10]; /*電話*/</p><p> char qq[10]; /*QQ*/</p><p> char email[20] ;</p><p> char num[10];
41、 /* 編號 */</p><p> char group[16]; /* 分組 */</p><p><b> }ADDRESS;</b></p><p> /******以下是函數(shù)原型*******/</p><p> int enter(ADDRESS t[]); /*輸入記錄*/<
42、/p><p> void list(ADDRESS t[],int n); /*顯示記錄*/</p><p> void search(ADDRESS t[],int n); /*按姓名查找顯示記錄*/</p><p> int delete(ADDRESS t[],int n); /*刪除記錄*/</p><p> int add(A
43、DDRESS t[],int n); /*插入記錄*/</p><p> void save(ADDRESS t[],int n); /*記錄保存為文件*/</p><p> int load(ADDRESS t[]); /*從文件中讀記錄*/</p><p> void display(ADDRESS t[]); /*按序號查找顯示記錄*/</p&g
44、t;<p> void sort(ADDRESS t[],int n); /*按姓名排序*/</p><p> void qseek(ADDRESS t[],int n); /*快速查找記錄*/</p><p> void copy(); /*文件復(fù)制*/</p><p> void print(ADDRESS temp); /*顯示單條記錄
45、*/</p><p> int find(ADDRESS t[],int n,char *s) ; /*查找函數(shù)*/</p><p> int menu_select(); /*主菜單函數(shù)*/</p><p> /******主函數(shù)開始*******/</p><p><b> main()</b></p
46、><p><b> {</b></p><p><b> int i;</b></p><p> ADDRESS adr[M]; /*定義結(jié)構(gòu)體數(shù)組*/</p><p> int length; /*保存記錄長度*/</p><p> clrscr(); /*清屏
47、*/</p><p> for(;;)/*無限循環(huán)*/</p><p><b> {</b></p><p> switch(menu_select()) /*調(diào)用主菜單函數(shù),返回值整數(shù)作開關(guān)語句的條件*/</p><p><b> {</b></p><p>
48、 case 0:length=enter(adr);break;/*輸入記錄*/</p><p> case 1:list(adr,length);break; /*顯示全部記錄*/</p><p> case 2:search(adr,length);break; /*查找記錄*/</p><p> case 3:qseek(adr,length);brea
49、k; /*快速查找記錄*/</p><p> case 4:length=delete(adr,length);break; /*刪除記錄*/</p><p> case 5:length=add(adr,length); break; /*插入記錄*/</p><p> case 6:save(adr,length);break; /*保存文件*/&l
50、t;/p><p> case 7:length=load(adr); break; /*讀文件*/</p><p> case 8:display(adr);break; /*按序號顯示記錄*/</p><p> case 9:sort(adr,length);break; /*按姓名排序*/</p><p> case 10:copy
51、();break; /*復(fù)制文件*/</p><p> case 11:exit(0); /*如返回值為11則程序結(jié)束*/</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p
52、> /*菜單函數(shù),函數(shù)返回值為整數(shù),代表所選的菜單項(xiàng)*/</p><p> menu_select()</p><p><b> {</b></p><p> char *f[]=</p><p><b> {</b></p><p> "****
53、**********MENU*************",</p><p> " 0. Enter record",</p><p> " 1. List the file",</p><p> " 2. Search record on num \n",</p><p&
54、gt; " 3. Search record on name ",</p><p> " 4. Delete a record",</p><p> " 5. add record",</p><p> " 6. Save the file",</p><p&
55、gt; " 7. Load the file",</p><p> " 8. display record on order",</p><p> " 9. sort to make new file",</p><p> " 10. copy the file to new file&q
56、uot;,</p><p> " 11. Quit",</p><p><b> };</b></p><p> char s[80];</p><p><b> int i;</b></p><p> int key=0; /*記錄所壓鍵值*
57、/</p><p><b> int c=0;</b></p><p> gotoxy(1,25); /*移動光標(biāo)*/</p><p> printf("press any key enter menu......\n");/*壓任意鍵進(jìn)入主菜單*/</p><p><b> get
58、ch();</b></p><p> clrscr(); /*清屏*/</p><p> textcolor(YELLOW); /*設(shè)置文本顏色為黃色*/</p><p> textbackground(GREEN); /*設(shè)置背景顏色為蘭色*/</p><p> gotoxy(10,2);</p>&l
59、t;p> putch(0xda); /*輸出左上角邊框┏*/</p><p> for(i=1;i<44;i++)</p><p> putch(0xc4); /*輸出上邊框水平線*/</p><p> putch(0xbf); /*輸出右上角邊框 ┓*/</p><p> for(i=3;i<22;i++)/
60、*輸出左右兩邊的垂直線*/</p><p><b> {</b></p><p> gotoxy(10,i);putch(0xb3);</p><p> gotoxy(54,i);putch(0xb3);</p><p><b> }</b></p><p> go
61、toxy(10,22);putch(0xc0); /*輸出左上角邊框┗*/</p><p> for(i=1;i<44;i++)</p><p> putch(0xc4); /*輸出下邊框水平線*/</p><p> putch(0xd9); /*輸出右下角邊框┛*/</p><p> window(11,3,53,21);
62、 /* 制作顯示菜單的窗口,大小根據(jù)菜單條數(shù)設(shè)計(jì)*/</p><p> clrscr(); /*清屏*/</p><p> for(i=0;i<13;i++)</p><p><b> {</b></p><p> gotoxy(10,i+1);</p><p> cprint
63、f("%s",f[i]); /*輸出菜單項(xiàng)數(shù)組*/</p><p><b> }</b></p><p><b> i=1;</b></p><p> gotoxy(10,2); /*設(shè)置默認(rèn)選項(xiàng)在第一項(xiàng)*/</p><p> textbackground(LIGHTB
64、LUE);/*設(shè)置背景顏色為淺綠*/</p><p> cprintf("%s",f[1]); /*輸出菜單項(xiàng),表示選中*/</p><p> gotoxy(10,2); /*移動光標(biāo)到菜單的第一項(xiàng)*/</p><p> while(key!=13) /*所壓鍵不是回車鍵時*/</p><p><b&g
65、t; {</b></p><p> while(bioskey(1)==0); /*查詢是否壓下了一個鍵*/</p><p> key=bioskey(0); /*返回下一個在鍵盤壓下的鍵*/</p><p> key=key&0xff?key&0xff:key>>8; /*對所壓的鍵進(jìn)行判斷*/</p&g
66、t;<p> gotoxy(10,i+1);</p><p> textbackground(LIGHTGREEN);/*設(shè)置背景顏色為藍(lán)色*/</p><p> cprintf("%s",f[i]); /*輸出菜單項(xiàng)*/</p><p> if(key==72) i=i==1?12:i-1; /*如壓向上光標(biāo)鍵↑,i減1
67、,如已到第一行再上移,則到最后一行*/</p><p> if(key==80)i=i==12?1:i+1; /*如壓向下光標(biāo)鍵↓,i加1,如已到最后一行再下移,則到第一行*/</p><p> gotoxy(10,i+1); /*光標(biāo)移動i的下一項(xiàng)*/</p><p> textbackground(LIGHTBLUE); /*將背景顏色設(shè)為淺綠*/<
68、/p><p> cprintf("%s",f[i]); /*輸出菜單項(xiàng)*/</p><p> c=i-1; /*給代表菜單選項(xiàng)的整數(shù)賦值*/</p><p><b> }</b></p><p> textbackground(BLACK); /*設(shè)置背景顏色為黑色*/</p>
69、<p> window(1,1,80,25); /*恢復(fù)原窗口大小*/</p><p> clrscr(); /*清屏*/</p><p> return c; /*返回代表菜單選項(xiàng)的整數(shù)值*/</p><p><b> }</b></p><p> /***輸入記錄,形參為結(jié)構(gòu)體數(shù)組,函數(shù)值
70、返回類型為整型表示記錄長度*/</p><p> int enter(ADDRESS t[])</p><p><b> {</b></p><p><b> int i,n;</b></p><p><b> char *s;</b></p><
71、p> clrscr(); /*清屏*/</p><p> printf("\nplease input the num of student\n"); /*提示信息*/</p><p> scanf("%d",&n); /*輸入記錄數(shù)*/</p><p> printf("please inpu
72、t record \n"); /*提示輸入記錄*/</p><p> printf("num name group unit telephone qq email \n");</p><p> printf("--------------------------------------
73、-------------------------------------\n");</p><p> for(i=0;i<n;i++)</p><p><b> {</b></p><p> scanf("%s%s%s%s%s%s%s",t[i].num,t[i].name,t[i].group,t[
74、i].units,t[i].tele,t[i].qq,t[i].email); /*輸入記錄*/</p><p> printf("-------------------------------------------------------------------------\n");</p><p><b> }</b></p>
75、;<p> return n; /*返回記錄條數(shù)*/</p><p><b> }</b></p><p> /*顯示記錄,參數(shù)為記錄數(shù)組和記錄條數(shù)*/</p><p> void list(ADDRESS t[],int n)</p><p><b> {</b><
76、/p><p><b> int i;</b></p><p><b> clrscr();</b></p><p> printf("\n\n****************************ADDRESS****************************************\n");
77、</p><p> printf("num name group unit telephone qq email \n");</p><p> printf("--------------------------------------------------------------------
78、-----------\n");</p><p> for(i=0;i<n;i++)</p><p> printf("%-8s%-10s%-10s%-10s%-12s%-12s%-20s\n",t[i].num,t[i].name,t[i].group,t[i].units,t[i].tele,t[i].qq,t[i].email);</p&
79、gt;<p> if((i+1)%10==0) /*判斷輸出是否達(dá)到10條記錄*/</p><p><b> {</b></p><p> printf("Press any key continue...\n"); /*提示信息*/</p><p> getch(); /*壓任意鍵繼續(xù)*/<
80、;/p><p><b> }</b></p><p> printf("***********************************end*****************************************\n");</p><p><b> }</b></p>
81、<p><b> /*查找記錄*/</b></p><p> void search(ADDRESS t[],int n)</p><p><b> {</b></p><p> char s[20]; /*保存待查找姓名字符串*/</p><p> int i; /*保
82、存查找到結(jié)點(diǎn)的序號*/</p><p> clrscr(); /*清屏*/</p><p> printf("please press the num for seek\n");</p><p> scanf("%s",s); /*輸入待查找姓名*/</p><p> i=finder(t,
83、n,s); /*調(diào)用find函數(shù),得到一個整數(shù)*/</p><p> if(i>n-1) /*如果整數(shù)i值大于n-1,說明沒找到*/</p><p> printf("not found\n");</p><p><b> else</b></p><p> print(t[i]);
84、 /*找到,調(diào)用顯示函數(shù)顯示記錄*/</p><p><b> }</b></p><p> /*顯示指定的一條記錄*/</p><p> void print(ADDRESS temp)</p><p><b> {</b></p><p><b> c
85、lrscr();</b></p><p> printf("\n\n***************************************************************************\n");</p><p> printf("num name group unit tel
86、ephone qq email \n");</p><p> printf("-------------------------------------------------------------------------------\n");</p><p> printf("%-8s%-10s%-10s%-10s%
87、-12s%-12s%-20s\n",temp.num,temp.name,temp.group,temp.units,temp.tele,temp.qq,temp.email);</p><p> printf("*******************************************************************************\n");&
88、lt;/p><p><b> }</b></p><p> /*查找函數(shù),參數(shù)為記錄數(shù)組和記錄條數(shù)以及姓名s */</p><p> int find(ADDRESS t[],int n,char *s)</p><p><b> {</b></p><p><b&
89、gt; int i;</b></p><p> for(i=0;i<n;i++)/*從第一條記錄開始,直到最后一條*/</p><p><b> {</b></p><p> if(strcmp(s,t[i].name)==0) /*記錄中的姓名和待比較的姓名是否相等*/</p><p>
90、return i; /*相等,則返回該記錄的下標(biāo)號,程序提前結(jié)結(jié)束*/</p><p><b> }</b></p><p> return i; /*返回i值*/</p><p><b> }</b></p><p> /*刪除函數(shù),參數(shù)為記錄數(shù)組和記錄條數(shù)*/</p>
91、<p> int finder(ADDRESS t[],int n,char *s)</p><p><b> {</b></p><p><b> int i;</b></p><p> for(i=0;i<n;i++)/*從第一條記錄開始,直到最后一條*/</p><p&g
92、t;<b> {</b></p><p> if(strcmp(s,t[i].num)==0) /*記錄中的姓名和待比較的姓名是否相等*/</p><p> return i; /*相等,則返回該記錄的下標(biāo)號,程序提前結(jié)結(jié)束*/</p><p><b> }</b></p><p>
93、 return i; /*返回i值*/</p><p><b> }</b></p><p> /*刪除函數(shù),參數(shù)為記錄數(shù)組和記錄條數(shù)*/</p><p> int delete(ADDRESS t[],int n)</p><p><b> {</b></p><p&
94、gt; char s[20]; /*要刪除記錄的姓名*/</p><p><b> int ch=0;</b></p><p><b> int i,j;</b></p><p> printf("please deleted name\n"); /*提示信息*/</p><
95、;p> scanf("%s",s);/*輸入姓名*/</p><p> i=find(t,n,s); /*調(diào)用find函數(shù)*/</p><p> if(i>n-1) /*如果i>n-1超過了數(shù)組的長度*/</p><p> printf("no found not deleted\n"); /*顯示
96、沒找到要刪除的記錄*/</p><p><b> else</b></p><p><b> {</b></p><p> print(t[i]); /*調(diào)用輸出函數(shù)顯示該條記錄信息*/</p><p> printf("Are you sure delete it(1/0)\n&
97、quot;); /*確認(rèn)是否要刪除*/</p><p> scanf("%d",&ch); /*輸入一個整數(shù)0或1*/</p><p> if(ch==1) /*如果確認(rèn)刪除整數(shù)為1*/</p><p><b> {</b></p><p> for(j=i+1;j<n;j
98、++) /*刪除該記錄,實(shí)際后續(xù)記錄前移*/</p><p><b> {</b></p><p> strcpy(t[j-1].num,t[j].num);</p><p> strcpy(t[j-1].name,t[j].name); /*將后一條記錄的姓名拷貝到前一條*/</p><p> strcpy(
99、t[j-1].group,t[j].group);</p><p> strcpy(t[j-1].units,t[j].units); /*將后一條記錄的單位拷貝到前一條*/</p><p> strcpy(t[j-1].tele,t[j].tele); /*將后一條記錄的電話拷貝到前一條*/</p><p> strcpy(t[j-1].qq,t[i].qq
100、);</p><p> strcpy(t[j-1].email,t[i].email);</p><p><b> }</b></p><p> n--; /*記錄數(shù)減1*/</p><p><b> }</b></p><p><b> }</b
101、></p><p> return n; /*返回記錄數(shù)*/</p><p><b> }</b></p><p> /*插入記錄函數(shù),參數(shù)為結(jié)構(gòu)體數(shù)組和記錄數(shù)*/</p><p> int add(ADDRESS t[],int n)/*插入函數(shù),參數(shù)為結(jié)構(gòu)體數(shù)組和記錄數(shù)*/</p>&l
102、t;p><b> {</b></p><p> ADDRESS temp; /*新插入記錄信息*/</p><p><b> int i,j;</b></p><p> char s[20]; /*確定插入在哪個記錄之前*/</p><p> printf("please
103、 input record\n");</p><p> printf("************************************************\n");</p><p> printf("num name group unit telephone qq email
104、 \n");</p><p> printf("--------------------------------------------------------------------------------\n");</p><p> scanf("%s%s%s%s%s%s%s",temp.num,temp.name,temp.g
105、roup,temp.units,temp.tele,temp.qq,temp.email); /*輸入插入信息*/</p><p> printf("--------------------------------------------------------------------------------\n");</p><p> printf("p
106、lease input locate name \n");</p><p> scanf("%s",s); /*輸入插入位置的姓名*/</p><p> i=find(t,n,s); /*調(diào)用find,確定插入位置*/</p><p> for(j=n-1;j>=i;j--) /*從最后一個結(jié)點(diǎn)開始向后移動一條*/&l
107、t;/p><p> { strcpy(t[j+1].num,t[j].num);</p><p> strcpy(t[j+1].name,t[j].name); /*當(dāng)前記錄的姓名拷貝到后一條*/</p><p> strcpy(t[j+1].group,t[j].group);</p><p> strcpy(t[j+1].units
108、,t[j].units); /*當(dāng)前記錄的單位拷貝到后一條*/</p><p> strcpy(t[j+1].tele,t[j].tele); /*當(dāng)前記錄的電話拷貝到后一條*/</p><p> strcpy(t[j+1].qq,t[i].qq);</p><p> strcpy(t[j+1].email,t[i].email);</p>&l
109、t;p><b> }</b></p><p> strcpy(t[i].num,temp.num);</p><p> strcpy(t[i].name,temp.name); /*將新插入記錄的姓名拷貝到第i個位置*/</p><p> strcpy(t[i].group,temp.group);</p><
110、p> strcpy(t[i].units,temp.units); /*將新插入記錄的單位拷貝到第i個位置*/</p><p> strcpy(t[i].tele,temp.tele); /*將新插入記錄的電話拷貝到第i個位置*/</p><p> strcpy(t[i].qq,temp.qq);</p><p> strcpy(t[i].email,
111、temp.email);</p><p> n++; /*記錄數(shù)加1*/</p><p> return n; /*返回記錄數(shù)*/</p><p><b> }</b></p><p> /*保存函數(shù),參數(shù)為結(jié)構(gòu)體數(shù)組和記錄數(shù)*/</p><p> void save(ADDRESS
112、 t[],int n)</p><p><b> {</b></p><p><b> int i;</b></p><p> FILE *fp; /*指向文件的指針*/</p><p> if((fp=fopen("record.txt","wb"
113、))==NULL) /*打開文件,并判斷打開是否正常*/</p><p><b> {</b></p><p> printf("can not open file\n");/*沒打開*/</p><p> exit(1); /*退出*/</p><p><b> }</b
114、></p><p> printf("\nSaving file\n"); /*輸出提示信息*/</p><p> fprintf(fp,"%d",n); /*將記錄數(shù)寫入文件*/</p><p> fprintf(fp,"\r\n"); /*將換行符號寫入文件*/</p>&
115、lt;p> for(i=0;i<n;i++)</p><p><b> {</b></p><p> fprintf(fp,"%-8s%-10s%-10s%-10s%-12s%-12s%-20s",t[i].num,t[i].name,t[i].group,t[i].units,t[i].tele,t[i].qq,t[i].ema
116、il);/*格式寫入記錄*/</p><p> fprintf(fp,"\r\n"); /*將換行符號寫入文件*/</p><p><b> }</b></p><p> fclose(fp);/*關(guān)閉文件*/</p><p> printf("****save success***
117、\n"); /*顯示保存成功*/</p><p><b> }</b></p><p> /*讀入函數(shù),參數(shù)為結(jié)構(gòu)體數(shù)組*/</p><p> int load(ADDRESS t[])</p><p><b> {</b></p><p><b>
118、; int i,n;</b></p><p> FILE *fp; /*指向文件的指針*/</p><p> if((fp=fopen("record.txt","rb"))==NULL)/*打開文件*/</p><p><b> {</b></p><p>
119、 printf("can not open file\n"); /*不能打開*/</p><p> exit(1); /*退出*/</p><p><b> }</b></p><p> fscanf(fp,"%d",&n); /*讀入記錄數(shù)*/</p><p>
120、 for(i=0;i<n;i++)</p><p> fscanf(fp,"%8s%10s%10s%10s%12s%12s%20s",t[i].num,t[i].name,t[i].group,t[i].units,t[i].tele,t[i].qq,t[i].email); /*按格式讀入記錄*/</p><p> fclose(fp); /*關(guān)閉文件*
121、/</p><p> printf("You have success read data from file!!!\n"); /*顯示保存成功*/</p><p> return n; /*返回記錄數(shù)*/</p><p><b> }</b></p><p> void display(AD
122、DRESS t[])</p><p><b> {</b></p><p><b> int id,n;</b></p><p> FILE *fp; /*指向文件的指針*/</p><p> if((fp=fopen("record.txt","rb"
123、;))==NULL) /*打開文件*/</p><p><b> {</b></p><p> printf("can not open file\n"); /*不能打開文件*/</p><p> exit(1); /*退出*/</p><p><b> }</b>&l
124、t;/p><p> printf("Enter order number...\n"); /*顯示信息*/</p><p> scanf("%d",&id); /*輸入序號*/</p><p> fscanf(fp,"%d",&n); /*從文件讀入記錄數(shù)*/</p>&l
125、t;p> if(id>=0&&id<n+2) /*判斷序號是否在記錄范圍內(nèi)*/</p><p><b> {</b></p><p> fseek(fp,(id-1)*sizeof(ADDRESS),1); /*移動文件指針到該記錄位置*/</p><p> print(t[id-1]); /*調(diào)用輸出
126、函數(shù)顯示該記錄*/</p><p> printf("\r\n");</p><p><b> }</b></p><p><b> else</b></p><p> printf("no %d number record!!!\n ",id); /
127、*如果序號不合理顯示信息*/</p><p> fclose(fp); /*關(guān)閉文件*/</p><p><b> }</b></p><p> /*排序函數(shù),參數(shù)為結(jié)構(gòu)體數(shù)組和記錄數(shù)*/</p><p> void sort(ADDRESS t[],int n)</p><p><
128、;b> {</b></p><p> int i,j,flag;</p><p> ADDRESS temp; /*臨時變量做交換數(shù)據(jù)用*/</p><p> for(i=0;i<n;i++)</p><p><b> {</b></p><p> flag=0
129、; /*設(shè)標(biāo)志判斷是否發(fā)生過交換*/</p><p> for(j=0;j<n-1;j++)</p><p> if((strcmp(t[j].name,t[j+1].name))>0) /*比較大小*/</p><p><b> {</b></p><p><b> flag=1;<
130、;/b></p><p> strcpy(temp.num,t[j].num);</p><p> strcpy(temp.name,t[j].name); /*交換記錄*/</p><p> strcpy(temp.group,t[j].group);</p><p> strcpy(temp.units,t[j].unit
131、s);</p><p> strcpy(temp.tele,t[j].tele);</p><p> strcpy(temp.qq,t[j].qq);</p><p> strcpy(temp.email,t[j].email);</p><p> strcpy(t[j].num,t[j+1].num);</p><
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c語言課程設(shè)計(jì)--通信錄管理
- 課程設(shè)計(jì)--通信錄管理系統(tǒng)設(shè)計(jì)
- 手機(jī)通信錄管理系統(tǒng)課程設(shè)計(jì)
- 個人通信錄管理系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)--手機(jī)通信錄管理系統(tǒng)
- c++課程設(shè)計(jì)--通信錄管理程序
- 課程設(shè)計(jì)論文---基于c++ 的通信錄管理系統(tǒng)
- 【課程設(shè)計(jì)論文】基于c++ 的通信錄管理系統(tǒng)
- c語言課程設(shè)計(jì)--學(xué)生通信錄設(shè)計(jì)
- 手機(jī)通信錄管理系統(tǒng)課程設(shè)計(jì)2
- 班級通信錄管理系統(tǒng)(匯編課程設(shè)計(jì))
- c++通信錄設(shè)計(jì)
- c++課程設(shè)計(jì)(凌世林組)通信錄管理程序
- 個性通信錄畢業(yè)論文
- 班級通信錄管理系統(tǒng)的方案與實(shí)現(xiàn)匯編語言課程實(shí)習(xí)報(bào)告
- 簡單的通信管理系統(tǒng)--課程設(shè)計(jì)c++
- 微笑列車項(xiàng)目合作醫(yī)院通信錄
- 校友錄管理系統(tǒng)課程設(shè)計(jì)
- 企業(yè)級語音交換通信錄集成系統(tǒng).pdf
- c課程設(shè)計(jì)---圖書管理系統(tǒng)課程設(shè)計(jì)
評論
0/150
提交評論