通訊錄管理系統(tǒng)說明書_第1頁(yè)
通訊錄管理系統(tǒng)說明書_第2頁(yè)
通訊錄管理系統(tǒng)說明書_第3頁(yè)
通訊錄管理系統(tǒng)說明書_第4頁(yè)
通訊錄管理系統(tǒng)說明書_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 計(jì)算機(jī)語(yǔ)言課程設(shè)計(jì) 任務(wù)書及說明書設(shè)計(jì)題目 : 通訊錄管理系統(tǒng) 學(xué) 院 專業(yè)、 年級(jí) 學(xué) 生 學(xué) 號(hào) 指 導(dǎo) 教 師 時(shí) 間 2010 年 春季 學(xué)期目錄 1摘要2 2 前言33 正文43.1系統(tǒng)分析.43.2總體設(shè)計(jì).53.3詳細(xì)設(shè)計(jì).73.4系統(tǒng)調(diào)試與測(cè)試10.4參考文獻(xiàn)13附錄:源程序141摘要隨著通訊錄在管理上越來越深入而廣泛的應(yīng)用,管理通訊錄系統(tǒng)的實(shí)施在技術(shù)上已逐步成熟。任何一個(gè)單位要生存要發(fā)展,要高效率地把內(nèi)部活動(dòng)有機(jī)地組織起來,就必須建立與自身特點(diǎn)相適應(yīng)的通訊錄管理系統(tǒng)。本人設(shè)計(jì)的是一個(gè)關(guān)于通訊錄管理的數(shù)據(jù)庫(kù)系統(tǒng),通過這個(gè)系統(tǒng)管理員可以簡(jiǎn)捷、方便的添加、刪除和修改通訊錄信息,而

2、用戶也可以通過這個(gè)系統(tǒng)按照不同方式進(jìn)行通訊錄查詢。關(guān)鍵詞: 通訊錄;管理;系統(tǒng)2前言通過該題目的設(shè)計(jì)過程,可以培養(yǎng)學(xué)生結(jié)構(gòu)化程序設(shè)計(jì)的思想,加深對(duì)高級(jí)語(yǔ)言基本語(yǔ)言要素和控制結(jié)構(gòu)的理解,針對(duì)c語(yǔ)言中的重點(diǎn)和難點(diǎn)內(nèi)容進(jìn)行訓(xùn)練,獨(dú)立完成有一定工作量的程序設(shè)計(jì)任務(wù),同時(shí)強(qiáng)調(diào)好的程序設(shè)計(jì)風(fēng)格。得到軟件工程的綜合訓(xùn)練,提高解決實(shí)際問題的能力3正文3.1系統(tǒng)分析 設(shè)計(jì)一個(gè)實(shí)用的信息管理系統(tǒng),能以簡(jiǎn)便高效的方式對(duì)職工信息進(jìn)行管理和檢索,具體功能如下:1、 系統(tǒng)以菜單方式工作,要求界面友好,易于操作;2、 能將通訊錄保存在文件中;3、 提供添加、刪除和修改通訊錄信息;4、 能夠按照不同方式查詢;5、 能夠按表格

3、方式輸出通訊錄信息。3.2總體設(shè)計(jì)創(chuàng)建通訊錄通訊錄管理通訊錄查詢添加信息修改記錄刪除記錄顯示記錄按姓名查詢按編號(hào)查詢按地址查詢將信息存入文件主要功能模塊的算法設(shè)計(jì)思路如下:1、添加信息函數(shù)(void add(link l))(1)定義指向結(jié)構(gòu)體變量的指針;(2)移動(dòng)指針,找到插入結(jié)點(diǎn);(3)在要插入的結(jié)點(diǎn)輸入信息;(4)調(diào)用保存函數(shù),打開文件,保存輸入信息。2、修改信息函數(shù)(void modify(link l))(1)定義指向結(jié)構(gòu)體變量的指針;(2)用指針檢驗(yàn)鏈表中是否有記錄,若沒記錄,返回主函數(shù);(3)根據(jù)要修改的編號(hào)查找對(duì)應(yīng)結(jié)點(diǎn);(4)修改信息;(5)打開文件,保存修改記錄。3、刪除信息

4、函數(shù)(void del(link l))(1)定義指向結(jié)構(gòu)體變量的指針;(2)用指針檢驗(yàn)鏈表中是否有記錄,若沒記錄,返回主函數(shù);(3)根據(jù)要修改的編號(hào)查找要?jiǎng)h除的結(jié)點(diǎn);(4)修改鏈表,刪除對(duì)應(yīng)結(jié)點(diǎn)。4、顯示記錄函數(shù)(void disp(link l))(1)打開文件;(2)用指針檢驗(yàn)是否有記錄;(3)若無記錄,輸出提示信息,返回主函數(shù);若有記錄,移動(dòng)指針,依次輸出記錄;(4)關(guān)閉文件。5、查詢通訊錄信息(void find(link l))(1)選擇查詢方式(按姓名、編號(hào)或地址);(2)輸入查詢關(guān)鍵字:(3)在鏈表中尋找相應(yīng)結(jié)點(diǎn);(4)調(diào)用輸出函數(shù),輸出結(jié)點(diǎn)信息。3.3詳細(xì)設(shè)計(jì)各個(gè)函數(shù)的流程圖

5、如下: (添加信息) file *p,打開該磁盤文件從鍵盤輸入數(shù)據(jù)是鏈表為空否 插入表頭 插入表尾 輸出數(shù)據(jù),存入磁盤文件 關(guān)閉文件 (顯示信息) file *fp,打開該文件 p=head,使p指向第一個(gè)結(jié)點(diǎn) p指向的不是尾結(jié)點(diǎn) 真假輸出p所指向的結(jié)點(diǎn)p指向下一個(gè)結(jié)點(diǎn)關(guān)閉文件 (按姓名查找) 打開磁盤文件 是 鏈表為空 否 輸出“尚無記 錄信息” p=head 當(dāng)name2=p->name是 p是要找的結(jié)點(diǎn) 否 輸出此結(jié)點(diǎn)輸出“查無此人 “的信息 關(guān)閉文件(按編號(hào)查找) 打開磁盤文件 是 鏈表為空 否 輸出“尚無記 錄信息” p=head 當(dāng)num2=p->nun是 p是要找的結(jié)

6、點(diǎn) 否 輸出此結(jié)點(diǎn)輸出“查無此人 “的信息 關(guān)閉文件(按地址查找) 打開磁盤文件 是 鏈表為空 否 輸出“尚無記 錄信息” p=head 當(dāng)address2=p->address是 p是要找的結(jié)點(diǎn) 否 輸出此結(jié)點(diǎn)輸出“查無此人 “的信息 關(guān)閉文件3.4 系統(tǒng)調(diào)試與測(cè)試 運(yùn)行情況如下: 說明:1、運(yùn)行程序;2、添加信息;3、查詢記錄;4、顯示記錄。 調(diào)試過程中的主要問題及解決方法:1、執(zhí)行添加函數(shù)時(shí)出錯(cuò),不能打開文件。文件的打開方式錯(cuò)誤,修改為以讀寫的方式打開文件。2、編譯時(shí)無出錯(cuò)警告,連接時(shí)出現(xiàn)錯(cuò)誤。上次執(zhí)行時(shí)的窗口為關(guān)閉。3、表格輸出時(shí),格式不能對(duì)齊。未運(yùn)用格式控制字符。設(shè)計(jì)總結(jié) 在這

7、個(gè)通訊錄管理系統(tǒng)c語(yǔ)言課程設(shè)計(jì)中,完成了基本功能,能夠提供添加、刪除和修改通訊錄信息,能夠按照不同方式查詢,使用文件對(duì)記錄進(jìn)行保存和讀取功能。 在開始進(jìn)行課程設(shè)計(jì)時(shí),先進(jìn)行界面模塊的總體把握,充分了解自己要設(shè)計(jì)的程序的總體的結(jié)構(gòu),從而,在其過程中能一個(gè)模塊一個(gè)函數(shù)進(jìn)行詳細(xì)的構(gòu)思,從而在調(diào)試程序時(shí)也顯得比較輕松,雖說隨著程序代碼的不斷增多、其復(fù)雜性不斷增大,但是因?yàn)槭欠帜K函數(shù)一個(gè)一個(gè)的調(diào)試;最后在將其模塊用多文件編譯運(yùn)行時(shí)沒有遇到語(yǔ)法錯(cuò)誤。但是,運(yùn)行結(jié)果完全不正確,常常出現(xiàn)亂碼和死循環(huán)等原因,通過查找資料、與同學(xué)的相互討論及請(qǐng)教師兄,程序終于正確地運(yùn)行。在此過程中,學(xué)到的不止是如何調(diào)試這個(gè)知識(shí)

8、,學(xué)到得最多的是一種遇到不懂問題怎么去解決的方法和在遇到困難時(shí)心態(tài)的調(diào)節(jié)。 通過這次課程設(shè)計(jì),我對(duì)c語(yǔ)言有了更深刻的了解,增強(qiáng)了程序的編寫能力,鞏固了專業(yè)知識(shí),對(duì)程序的模塊化觀念也又模糊逐漸變的清晰了。我也認(rèn)識(shí)到了自己的薄弱之處,如對(duì)鏈表相關(guān)知識(shí)的欠缺,文件運(yùn)用的不熟練,在以后的學(xué)習(xí)中我要集中精力、端正態(tài)度,爭(zhēng)取把知識(shí)學(xué)得更扎實(shí)、更全面。4參考文獻(xiàn)1 c/c+程序設(shè)計(jì),王連相等,中國(guó)科學(xué)技術(shù)出版社,20042 c語(yǔ)言程序設(shè)計(jì),譚浩強(qiáng),清華大學(xué)出版社,19993 c程序設(shè)計(jì)題解與上機(jī)指導(dǎo),譚浩強(qiáng),清華大學(xué)出版社,19994 c語(yǔ)言實(shí)用程序薈萃,西安電子科技大學(xué)出版社,19935 c語(yǔ)言函數(shù)手冊(cè),

9、機(jī)械工業(yè)出版社,1999附錄:源程序#include "stdio.h " /*標(biāo)準(zhǔn)輸入輸出函數(shù)庫(kù)*/#include "stdlib.h" /*標(biāo)準(zhǔn)函數(shù)庫(kù)*/#include "string.h" /*字符串函數(shù)庫(kù)*/#define header1 " -所有記錄- n"#define header2 " | 編號(hào) | 姓名 | 電話號(hào)碼 |年齡| 地址 | 郵箱 |n"#define header3 " |-|-|-|- |-|-|n "#define format &q

10、uot;|%-6s|%-15s|%-12s |%d |%-10s|%-20s|n"#define data p->data.num,p-> ,p->data. phone,p->data.age,p->data.address,p->data.email#define end "- n"int save=0; /*是否需要存盤的標(biāo)志變量*/*定義與聯(lián)系人有關(guān)的數(shù)據(jù)結(jié)構(gòu)*/ struct person /*標(biāo)記為person*/char num6; /*聯(lián)系人編號(hào)*/ char name15 ;/*聯(lián)系人姓名*/

11、char phone12;/*聯(lián)系人電話號(hào)碼*/int age; /*聯(lián)系人年齡*/char address10; /*聯(lián)系人地址*/char email20; /*聯(lián)系人電子郵箱*/; /*定義每條記錄或結(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu),標(biāo)記為:node*/typedef struct nodestruct person data; /*數(shù)據(jù)域*/struct node *next; /*指針域*/node,*link; /*node為node類型的結(jié)構(gòu)變量,*link為node類型的指針變量*/void menu() /*主菜單*/printf(" (200704135086)的通訊錄n"

12、;);printf(" *menu*n");printf(" * 1 添加記錄 2 刪除記錄 *n");printf(" * 3 修改記錄 4 查詢記錄 *n");printf(" * 5 顯示記錄 6 保存記錄 *n");printf(" * 0 退出系統(tǒng) *n"); printf(" *n");void printhead() /*格式化輸出表頭*/ printf(header1); printf(header2); printf(header3);void printd

13、ata(node *pp) /*格式化輸出表中數(shù)據(jù)*/ node* p; p=pp; printf(format,data); /*顯示單鏈表l中存儲(chǔ)的聯(lián)系人記錄,內(nèi)容為person結(jié)構(gòu)中定義的內(nèi)容*/void disp(link l) node *p;p=l->next; /*l存儲(chǔ)的是單鏈表中頭結(jié)點(diǎn)的指針,該頭結(jié)點(diǎn)沒有存儲(chǔ)聯(lián)系人信息,指針域指向的后繼結(jié)點(diǎn)才有聯(lián)系人信息*/if(!p) /*p=null,null在stdlib中定義為0*/ printf("n=>沒有記錄!n"); return;printf("nn");printhead

14、(); /*輸出表格頭部*/while(p) /*逐條輸出鏈表中存儲(chǔ)的聯(lián)系人信息*/ printdata(p); p=p->next; /*移動(dòng)直下一個(gè)結(jié)點(diǎn)*/ printf(header3);/*作用:用于定位鏈表中符合要求的節(jié)點(diǎn),并返回指向該節(jié)點(diǎn)的指針參數(shù):findmess保存要查找的具體內(nèi)容; nameornum保存按什么查找; 在單鏈表l中查找;*/node* locate(link l,char findness,char nameornum)node *r;if(strcmp(nameornum,"num")=0) /*按編號(hào)查詢*/ r=l->ne

15、xt; while(r) if(strcmp(r->data.num,findness)=0) /*若找到findmess值的學(xué)號(hào)*/ return r; r=r->next; else if(strcmp(nameornum,"name")=0) /*按姓名查詢*/r=l->next; while(r) if(strcmp(r->,findness)=0) /*若找到findmess值的聯(lián)系人姓名*/ return r; r=r->next;else if(strcmp(nameornum,"address&quo

16、t;)=0) /*按地址查詢*/r=l->next; while(r) if(strcmp(r->data.address,findness)=0) /*若找到findmess值的聯(lián)系人地址*/ return r; r=r->next;return 0; /*若未找到,返回一個(gè)空指針*/*輸入字符串*/void stringinput(char *t,int lengths,char *attention) char n255; do printf(attention); /*顯示提示信息*/ scanf("%s",n); /*輸入字符串*/ if(str

17、len(n) > lengths)printf("n 超過設(shè)定長(zhǎng)度! n"); /*進(jìn)行長(zhǎng)度校驗(yàn),超過lengths值重新輸入*/ while(strlen(n) > lengths); strcpy(t,n); /*將輸入的字符串拷貝到字符串t中*/ /*輸入age中的數(shù)字*/int numberinput(char *attention)int t=0;printf(attention);scanf("%d",&t);return t;/*增加聯(lián)系人記錄*/void add(link l)node *p,*r,*s; /*實(shí)現(xiàn)添加

18、操作的臨時(shí)的結(jié)構(gòu)體指針變量*/char flag=0,num6;r=l;s=l->next;disp(l); /*先打印出已有的聯(lián)系人信息*/while(r->next!=null) r=r->next; /*將指針移至于鏈表最末尾,準(zhǔn)備添加記錄*/while(l) /*一次可輸入多條記錄,直至輸入學(xué)號(hào)為0的記錄結(jié)點(diǎn)添加操作*/while(l) /*輸入學(xué)編號(hào),保證該編號(hào)沒有被使用,若輸入編號(hào)為0,則退出添加記錄操作*/stringinput(num,6,"輸入編號(hào)(按'0'返回主菜單):"); /*格式化輸入編號(hào)并檢驗(yàn)*/ flag=0;

19、if(strcmp(num,"0")=0) /*輸入為0,則退出添加操作,返回主界面*/ return;s=l->next;while(s) /*查詢?cè)摼幪?hào)是否已經(jīng)存在,若存在則要求重新輸入一個(gè)未被占用的學(xué)號(hào)*/if(strcmp(s->data.num,num)=0) flag=1; break;s=s->next; if(flag=1) /*提示用戶是否重新輸入*/ printf("=>編號(hào) %s 已經(jīng)存在,是否重試?",num); else break; p=(node *)malloc(sizeof(node); /*申請(qǐng)

20、內(nèi)存空間*/ if(!p) printf("n 申請(qǐng)內(nèi)存空間失敗 "); /*如沒有申請(qǐng)到,打印提示信息*/ return ; /*返回主界面*/ strcpy(p->data.num,num); /*將字符串num拷貝到p->data.num中*/ stringinput(p->,15,"name:"); stringinput(p->data.phone,12,"phone:"); p->data.age=numberinput("age"); stringinp

21、ut(p->data.address,10,"address:"); stringinput(p->data.email,20,"email:"); p->next=null; /*表明這是鏈表的尾部結(jié)點(diǎn)*/ r->next=p; /*將新建的結(jié)點(diǎn)加入鏈表尾部中*/ r=p; save=1; return ;/*查詢記錄*/void find(link l) /*按編號(hào)或姓名,查詢電話記錄*/int select; /*1:按編號(hào)查,2:按姓名查,3:按地址查找,其他:返回主界面(菜單)*/char searchinput20;

22、/*保存用戶輸入的查詢內(nèi)容*/node *p;if(!l->next) /*若鏈表為空*/ printf("n=>無!n"); return;printf("n =>1 按編號(hào)查詢 =>2 按姓名查詢 =>3 按地址查詢n");printf(" 請(qǐng)選擇1,2,3:");scanf("%d",&select);if(select=1) /*按編號(hào)查詢*/stringinput(searchinput,6,"請(qǐng)輸入已存在的編號(hào):"); p=locate(l,se

23、archinput,"num");/*在l中查找學(xué)號(hào)為searchinput值的節(jié)點(diǎn),并返回節(jié)點(diǎn)的指針*/if(p) /*若p!=null*/ printhead(); printdata(p); printf(end); printf("按任意鍵返回");elseprintf("n=>找不到此人!n");else if(select=2) /*按姓名查詢*/stringinput(searchinput,15,"請(qǐng)輸入已存在的姓名:");p=locate(l,searchinput,"name&q

24、uot;);if(p) printhead(); printdata(p); printf(end); printf("按任意鍵返回"); else printf("n=>找不到此人!n"); if(select=3) /*按地址查詢*/stringinput(searchinput,15,"請(qǐng)輸入已存在的地址:");p=locate(l,searchinput,"address");if(p) printhead(); printdata(p); printf(end); printf("按任意鍵

25、返回"); else printf("n=>找不到此人!n"); else printf("n*error:輸入錯(cuò)誤! 按任意鍵繼續(xù)*n");/*按姓名刪除學(xué)生記錄:先找到保存該聯(lián)系人記錄的節(jié)點(diǎn),然后刪除該節(jié)點(diǎn)*/void del(link l)node *p,*r;char findmess20;if(!l->next) printf("n=>找不到此人的記錄!n"); return;stringinput(findmess,15,"input the existing person name&

26、quot;);p=locate(l,findmess,"name"); if(p) r=l; while(r->next!=p) r=r->next; r->next=p->next; free(p); printf("n=>delete success!n"); save=1; else printf("n=>not find this person!n"); /*修改電話記錄。先按輸入的編號(hào)查詢到該記錄,然后提示用戶修改編號(hào)之外的值,編號(hào)不能修改*/void modify(link l)node

27、 *p;char findmess20;if(!l->next) printf("n=>no person record!n"); return; printf("modify person recorder");disp(l);stringinput(findmess,6,"input the existing person number:"); /*輸入并檢驗(yàn)該學(xué)號(hào)*/p=locate(l,findmess,"num"); /*查詢到該節(jié)點(diǎn)*/if(p) /*若p!=null,表明已經(jīng)找到該節(jié)點(diǎn)*/

28、 printf("number:%s,n",p->data.num);printf("name:%s,",p->);stringinput(p->,15,"input new name:");p->data.age=numberinput("age");stringinput(p->data.phone,12,"input new phonenumber:");stringinput(p->data.address,10,&

29、quot;input new address:");stringinput(p->data.email,20,"email:");printf("n=>modify success!n" );disp(l);save=1;elseprintf("n=>not find this person!n");/*數(shù)據(jù)存盤,若用戶沒有專門進(jìn)行此操作且對(duì)數(shù)據(jù)有修改,在退出系統(tǒng)時(shí), 會(huì)提示用戶存盤*/void save(link l)file* fp;node *p;fp=fopen("c:phonebook&

30、quot;,"wb");/*以只寫方式打開二進(jìn)制文件*/if(fp=null) /*打開文件失敗*/ printf("n=>open file error!n"); return ;p=l->next;while(p)if(fwrite(p,sizeof(node),1,fp)=1)/*每次寫一條記錄或一個(gè)節(jié)點(diǎn)信息至文件*/ p=p->next; else break; save=0;fclose(fp); /*關(guān)閉此文件*/ /*主函數(shù)*/ void main()link l; /*定義鏈表*/ file *fp; /*文件指針*/int select; /*保存選擇結(jié)果變量*/ char ch; /*保存(y,y,n,n)*/ node *p,*r; /*定義記錄指針變量*/ l=(node*)malloc(sizeof(node);if(!l) printf("n apply for memory failure "); /*如沒有申請(qǐng)到,打印提示信息*/ return ; /*返回主界面*/ l-

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論