[畢業(yè)設計精品]手機通信錄管理系統(tǒng)的設計
學生課程設計(論文)
題 目: 通信錄管理系統(tǒng)的設計
學生姓名: 學 號:
所在院(系): 計算機學院
專 業(yè): 網(wǎng)絡工程
班 級: 09級網(wǎng)絡工程(1)班
指導教師: 職稱: 講 師
2010年6月 25日
學生處監(jiān)制
本科學生課程設計任務書
題 目
手機通信錄管理系統(tǒng)的設計
1、課程設計的目的
本課程設計的目的和任務:(1)鞏固和加深學生對C語言課程的基本知識的理解和掌握;(2)掌握C語言編程和程序調(diào)試的基本技能;(3)利用C語言進行簡單軟件設計的基本思路和方法;(4)提高運用C語言解決實際問題的能力。
2、課程設計的內(nèi)容和要求(包括原始數(shù)據(jù)、技術要求、工作要求等)
用C語言設計出模擬手機通信錄管理系統(tǒng),實現(xiàn)對手機中的通信錄進行管理。
(一)功能要求:
(1)查看功能:選擇此功能時,列出下列三類選擇。
A 辦公類 B 個人類 C 商務類 ,當選中某類時,顯示出此類所有數(shù)據(jù)中的姓名和電話號碼)
(2)增加功能:能錄入新數(shù)據(jù)(一個結點包括:姓名、電話號碼、分類(可選項有:A 辦公類 B 個人類 C 商務類)、電子郵件)。例如
楊春 13589664454 商務類 chuny@
當錄入了重復的姓名和電話號碼時,則提示數(shù)據(jù)錄入重復并取消錄入;當通信錄中超過15條信息時,存儲空間已滿,不能再錄入新數(shù)據(jù);錄入的新數(shù)據(jù)能按遞增的順序自動進行條目編號。
(3)拔號功能:能顯示出通信錄中所有人的姓名,當選中某個姓名時,屏幕上模擬打字機的效果依次顯示出此人的電話號碼中的各個數(shù)字,并伴隨相應的拔號聲音。
(4)修改功能:選中某個人的姓名時,可對此人的相應數(shù)據(jù)進行修改
(5)刪除功能:選中某個人的姓名時,可對此人的相應數(shù)據(jù)進行刪除,并自動調(diào)整后續(xù)條目的編號。
(二)其它要求:
(1) 只能使用C/C++語言,源程序要有適當?shù)淖⑨專钩绦蛉菀组喿x
(2) 至少采用文本菜單界面(如果能采用圖形菜單界面更好)
(3) 建議使用結構和鏈表等數(shù)據(jù)結構
(4) 學生可自動增加新功能模塊(視情況可另外加分)
(5)寫出課程設計報告,具體要求見相關說明文檔
3、主要參考文獻
[1]譚浩強,《C程序設計》,清華大學出版社
[2]劉振安,孫忱,劉燕君,《C程序設計課程設計》,機械工業(yè)出版社
[3]汪詩林,《數(shù)據(jù)結構算法與應用》,機械工業(yè)出版社
4、課程設計工作進度計劃
課程設計時間為一周,分四個階段完成:
1. 分析設計階段。引導學生自主學習和鉆研問題,明確設計要求,找出實現(xiàn)方法,按照需求分析、總體設計、詳細設計這幾個步驟進行。這一階段前第1天完成。
2. 編碼調(diào)試階段:根據(jù)設計分析方案編寫C語言代碼,然后調(diào)試該代碼,實現(xiàn)課題要求的功能。這一階段在第2-3天完成。
3. 總結報告階段:總結設計工作,寫出課程設計說明書,要求學生寫出需求分析、總體設計、詳細設計、編碼、測試的步驟和內(nèi)容。這一階段在第4天完成。
4. 考核階段。這一階段在第5天完成。
指導教師(簽字)
日期
年 月 日
教研室意見:
年 月 日
學生(簽字): 明安坤
接受任務時間: 年 月 日
課程設計(論文)指導教師成績評定表
題目名稱
手機通信錄管理系統(tǒng)的設計
評分項目
分值
得分
評價內(nèi)涵
工作
表現(xiàn)
20%
01
學習態(tài)度
6
遵守各項紀律,工作刻苦努力,具有良好的科學工作態(tài)度。
02
科學實踐、調(diào)研
7
通過實驗、試驗、查閱文獻、深入生產(chǎn)實踐等渠道獲取與課程設計有關的材料。
03
課題工作量
7
按期圓滿完成規(guī)定的任務,工作量飽滿。
能力
水平
35%
04
綜合運用知識的能力
10
能運用所學知識和技能去發(fā)現(xiàn)與解決實際問題,能正確處理實驗數(shù)據(jù),能對課題進行理論分析,得出有價值的結論。
05
應用文獻的能力
5
能獨立查閱相關文獻和從事其他調(diào)研;能提出并較好地論述課題的實施方案;有收集、加工各種信息及獲取新知識的能力。
06
設計(實驗)能力,方案的設計能力
5
能正確設計實驗方案,獨立進行裝置安裝、調(diào)試、操作等實驗工作,數(shù)據(jù)正確、可靠;研究思路清晰、完整。
07
計算及計算機應用能力
5
具有較強的數(shù)據(jù)運算與處理能力;能運用計算機進行資料搜集、加工、處理和輔助設計等。
08
對計算或實驗結果的分析能力(綜合分析能力、技術經(jīng)濟分析能力)
10
具有較強的數(shù)據(jù)收集、分析、處理、綜合的能力。
成果
質量
45%
09
插圖(或圖紙)質量、篇幅、設計(論文)規(guī)范化程度
5
符合本專業(yè)相關規(guī)范或規(guī)定要求;規(guī)范化符合本文件第五條要求。
10
設計說明書(論文)質量
30
綜述簡練完整,有見解;立論正確,論述充分,結論嚴謹合理;實驗正確,分析處理科學。
11
創(chuàng)新
10
對前人工作有改進或突破,或有獨特見解。
成績
指導教師評語
指導教師簽名: 年 月 日
本科課程設計(論文) 摘要
摘 要
手機作為現(xiàn)代生活通訊工具,已經(jīng)與我們的生活、學習、工作密不可分,我們不可能隨時帶上電話本和筆,記錄我們所打電話和所接電話,只要我們手指動幾下,一個新的號碼就可以儲存在電話里面,不需要筆和紙,隨時可以用。究竟是什么賦予手機這種功能呢,原來是設計人員在手機里面裝好了“手機通訊錄管理系統(tǒng)”。
作為計算機專業(yè)的我們,這樣的系統(tǒng)在學習過C語言后完全能夠編寫出來的,利用C語言相關知識,實現(xiàn)程序設計,控制。
關鍵詞: 管理系統(tǒng),switch,遞歸調(diào)用,程序
- 25 -
本科課程設計(論文) 目錄
目 錄
摘 要 I
目 錄 II
1 緒論 - 1 -
1.1課程設計背景 - 1 -
1.2課程設計思路 - 1 -
2 概要設計 - 2 -
2.1 模塊設計 - 2 -
2.2 詳細設計 - 3 -
2.2.1 信息結構體說明 - 3 -
2.2.2 函數(shù)說明 - 4 -
2.2.4 詳細設計 - 5 -
3 調(diào)試報告 - 7 -
3.1 運行中問題及解決 - 7 -
4.1 顯示信息 - 11 -
4.2 刪除信息 - 11 -
4.3 添加信息 - 11 -
4.4修改信息 - 11 -
4.5撥號功能 - 11 -
4.6保存操作并退出系統(tǒng) - 11 -
5 設計體會 - 12 -
參考文獻 - 13 -
附錄:源代碼 - 14 -
本科課程設計(論文) 緒論
1 緒論
1.1課程設計背景
生活中我們經(jīng)常遇見這種問題,就是在外面做事的時候人家有時候會給我們說聯(lián)系號碼,通常情況下我們是拿出手機直接輸入手機,這就為我們節(jié)約了時間,紙張,我們也不必為寫在紙條上的號碼的丟失而感到懊惱。雖然說我們的激勵力不錯,但是隨著聯(lián)系人的增加,我們機會是不可能的記住所有聯(lián)系人的號碼,所以,這就得靠手機通訊錄了。
1.2課程設計思路
做通訊錄最主要的就是實用性,要簡單,便于操作。程序的界面要方便與用戶之間的交互。并結合實際中遇到的問題,如加入一個信息,修改一個信息,或是刪除一個信息,這些基本的方面一定要考慮到。這就大致的確定了程序的幾個模塊。然后對每個模塊進行設計,在整合起來,那么一個完善的通訊錄就可以建立起來了。
本科課程設計(論文) 概要設計
2 概要設計
2.1 模塊設計
所謂通訊錄,就是對聯(lián)系人的信息進行輸入,修改,刪除,查找等功能,我們按照其功能劃分為幾個模塊,在程序開始后,可以自行選擇,到進入到所需要進入的功能中,所以我們就得設計幾個模塊,以實現(xiàn)不同功能。
具體的模塊關系如表2-1:
表2-1 基本模塊表
模塊
輸入
刪除
保存
查找
插入
排序
實現(xiàn)功能
填入信息
去掉信息
保存信息
具體定位
添加信息
方便查找
程序總體設計
圖1 程序的總體流程圖
圖2:程序所有功能
每一個功能都編寫一個函數(shù),多個功能函數(shù)都要用到的子模塊單獨編寫函數(shù),供各個實現(xiàn)功能的函數(shù)調(diào)用。在主函數(shù)中設置歡迎界面和菜單處理函數(shù),通過菜單處理函數(shù)調(diào)用各子函數(shù)處理模塊,從而實現(xiàn)整個通訊錄管理系統(tǒng)的功能。因為各個函數(shù)之間是并列關系,所以可以通過switch函數(shù)實現(xiàn)各個功能函數(shù)的調(diào)用。
2.2 詳細設計
2.2.1 信息結構體說明
圖3:信息結構體說明
2.2.2 函數(shù)說明
2.2.3 主要函數(shù)、結構體和鏈表
void creat();/*將文件的信息讀入結構體數(shù)組在轉存入鏈表中*/
void ShowA();
void ShowB();
void ShowC();
void ShowD();
void Show();
void Delete();
void Input();
void Alter();
void Dial();
void Save();
struct persons /*定義結構體數(shù)組用于緩存數(shù)據(jù)*/
{
int num; /*編號*/
char name[20]; /*姓名*/
char e_addr[20]; /*電子郵箱*/
char tel_no[15]; /*電話號碼*/
char sim_no; /*縮位號碼*/
char arch; /*分類*/
}persons[maxlen];
typedef struct lnode /*通訊錄結構中結點的定義*/
{
int num;
char name[20];
char e_addr[20];
char tel_no[15];
char sim_no;
char arch;
struct lnode *next;
}listnode,*linklist;
2.2.4 詳細設計
(1)、新建通訊錄文件
1.打開通訊錄文件文本;
2.如果文件存在,則用尾插法將文件中的數(shù)據(jù)依次存入鏈表中,然后關閉文件;
3.如果文件為不存在,則新建一個空的通訊錄文件文本,然后關閉文件。
(2)、顯示信息
1.在提示中界面選擇 顯示通訊錄 ;
2.輸入需要顯示的類別;
3.根據(jù)選擇的類別調(diào)用顯示函數(shù);
4.從第一個節(jié)點開始,判斷鏈表中的節(jié)點是否屬于選擇的類別;
5.如果節(jié)點屬于所選類別,則顯示該節(jié)點中所有信息;
6.如果不屬于所選類別,則將所指節(jié)點下移,直至將鏈表中所有屬于該類別的信息
全部輸出為止;
7.回到提示界面。
(3)、刪除信息
1.在提示界面中選擇 刪除通訊錄 ;
2.輸入要刪除的姓名;
3.如果通訊錄文件空,則輸出 你選擇的用戶不存在! ;
4.如果通訊錄文件不為空,則從第一個節(jié)點開始比較,若有某一節(jié)點中的姓名與輸入姓
名相同時,就釋放該節(jié)點;
5.若節(jié)點中所有姓名都與輸入姓名不相同,則輸出 你選擇的用戶不存在! ;
6.保存剛才的操作,并回到提示界面。
(4)、添加信息
1.在提示界面中選擇 添加通訊錄 ;
2.依次輸入添加的信息 姓名 電話號碼 縮位號碼 電子郵箱 類別 ;
3.保存剛才操作,并回到提示界面。
(5)、修改信息
1.在提示界面中選擇 編輯通訊錄 ;
2.輸入所要修改信息中的姓名,再依次輸入信息 姓名 電話號碼 縮位號碼 電子郵
箱 類別 ;
3.保存剛才的操作,并回到提示界面。
(6)、撥號功能
1.在提示界面中選擇 撥號功能 ,進入撥號功能區(qū);
2.若選擇1,則將按姓名撥號,輸入 姓名 ,則輸出與姓名相對應的電話號碼,并回到提示界面;若選擇2,則將按單鍵撥號,輸入 縮位號碼,則輸出與該縮位號碼相對應的姓名和電話號碼,并回到提示界面。
(7)、保存操作并退出系統(tǒng)
1.在提示界面中選擇 保存剛才操作并退出 ;
2.調(diào)用保存函數(shù),該函數(shù)將剛才所有的操作存入通訊錄文件,并關閉文件;
3.退出程序。
本科課程設計(論文) 調(diào)試報告
3 調(diào)試報告
3.1 運行中問題及解決
3.1.1 問題1:程序運行時只能運行一個函數(shù),就必須保存并退出,否則會造成運行錯誤。如Delete函數(shù)的代碼為:
void Delete()
{
system("cls"); /*清屏*/
printf("\n\n\t請輸入要刪除用戶的姓名:");
cin>>name1; /*輸入要刪除的姓名*/
p4=head;
if(p4==NULL)
cout<<"你選擇的用戶不存在!"<<endl;
else
{
if(strcmp(p4->name,name1)==0) /*根據(jù)各種情況判斷可能性*/
{
p4=p4->next;
head=p4;
}
else
{
while(strcmp(p4->next->name,name1)!=0)p4=p4->next;/*找到要刪除的節(jié)點*/
if(p4!=NULL) /*若輸入的用戶存在則刪除*/
{
p5=p4->next;
p4->next=p5->next;
free(p5);
}
else
cout<<"你選擇的用戶不存在!"<<endl; /*輸入的用戶不存在*/
}
}
}
(2)、問題一解決方法:除Show和Dial函數(shù)外,在Delete、Input、Alter等函數(shù)結尾都添加Save函數(shù)。代碼為:
void Delete()
{
system("cls"); /*清屏*/
printf("\n\n\t請輸入要刪除用戶的姓名:");
cin>>name1; /*輸入要刪除的姓名*/
p4=head;
if(p4==NULL)
cout<<"你選擇的用戶不存在!"<<endl;
else
{
if(strcmp(p4->name,name1)==0) /*根據(jù)各種情況判斷可能性*/
{
p4=p4->next;
head=p4;
}
else
{
while(strcmp(p4->next->name,name1)!=0)p4=p4->next;/*找到要刪除的節(jié)點*/
if(p4!=NULL) /*若輸入的用戶存在則刪除*/
{
p5=p4->next;
p4->next=p5->next;
free(p5);
}
else
cout<<"你選擇的用戶不存在!"<<endl; /*輸入的用戶不存在*/
}
}
Save(); //**此語句為添加的**//
}
(3)、問題2:當通訊錄文件為空時,在添加信息時,只能添加一個用戶的信息,其代碼為:
void Input()
{
system("cls"); /*清屏*/
s=(linklist)malloc(sizeof(listnode)); /*開辟一個節(jié)點,用于存放新輸入的信息*/
printf("\n\n\t請輸入該用戶的信息:\n");
cout<<"姓名:";
cin>>s->name;
cout<<"電話:";
cin>>s->tel_no;
cout<<"縮位號碼:";
cin>>s->sim_no;
cout<<"電子郵箱:";
cin>>s->e_addr;
cout<<"分類:";
cin>>s->arch;
if(head==NULL) printf("\n\n"); /*判斷原通訊錄是否為空*/
else
{
p8=head;
while(p8!=NULL&&strcmp(s->name,p8->name)!=0&&strcmp(s->tel_no,p8->tel_no)!=0) /*判斷輸入的用戶是否已存在*/
p8=p8->next;
if(p8!=NULL)
{
printf("您添加的用戶已存在!");
free(s);
}
}
if(head==NULL)
{
head=s;
head->next=NULL;
}
else
{
r->next=s;
r=s;
r->next=NULL;
}
Save();
}
(4)、問題二解決方法:該問起之時由于丟了一個語句造成的,修改后的代碼為:
void Input()
{
system("cls"); /*清屏*/
s=(linklist)malloc(sizeof(listnode)); /*開辟一個節(jié)點,用于存放新輸入的信息*/
printf("\n\n\t請輸入該用戶的信息:\n");
cout<<"姓名:";
cin>>s->name;
cout<<"電話:";
cin>>s->tel_no;
cout<<"縮位號碼:";
cin>>s->sim_no;
cout<<"電子郵箱:";
cin>>s->e_addr;
cout<<"分類:";
cin>>s->arch;
if(head==NULL) printf("\n\n"); /*判斷原通訊錄是否為空*/
else
{
p8=head;
while(p8!=NULL&&strcmp(s->name,p8->name)!=0&&strcmp(s->tel_no,p8->tel_no)!= 0) /*判斷輸入的用戶是否已存在*/
p8=p8->next;
if(p8!=NULL)
{
printf("您添加的用戶已存在!");
free(s);
}
}
if(head==NULL)
{
head=s;
r=head;
head->next=NULL;
}
else
{
r->next=s;
r=s;
r->next=NULL;
}
Save();
}
本科課程設計(論文) 用戶手冊
4 用戶手冊
4.1 顯示信息
(1).在提示中界面選擇 顯示通訊錄 ;
(2).輸入需要顯示的類別。
4.2 刪除信息
(1).在提示界面中選擇 刪除通訊錄 ;
(2).輸入要刪除的姓名。
4.3 添加信息
(1).在提示界面中選擇 添加通訊錄 ;
(2).依次輸入添加的信息 姓名 電話號碼 縮位號碼 電子郵箱 類別。
4.4修改信息
(1).在提示界面中選擇 編輯通訊錄 ;
(2).輸入所要修改信息中的姓名,再依次輸入信息 姓名 電話號碼 縮位號碼 電子郵
箱 類別。.
4.5撥號功能
(1).在提示界面中選擇 撥號功能 ,進入撥號功能區(qū);
(2).若選擇1,則將按姓名撥號,輸入姓名;若選擇2,則將按單鍵撥號,輸入縮位號碼。
4.6保存操作并退出系統(tǒng)
(1).在提示界面中選擇 保存剛才操作并退出 。
本科課程設計(論文) 設計體會
5 總 結
由于本課題中的許多知識點都沒有學過都要靠自己到課外的資料中去查找。在用的時候難免出現(xiàn)這樣那樣的錯誤。如開始設計出來的菜單不是預想的那樣,而是總個窗中出現(xiàn)混亂。解決的這個問題的辦法是調(diào)整。一個系統(tǒng)的菜單和提示信息非常重要。如果沒有這些用戶根本不知道怎么用你設計的這個系統(tǒng)。在設計的調(diào)試過程中也無法順利的完成調(diào)試工作。有了一個清晰簡單的菜單和一些提示信息這后,調(diào)試過程完成的非常順利。
回顧起此次課程設計,至今我仍感慨頗多,的確,從拿到題目到完成整個編程,從理論到實踐,在整整半個月的日子里,可以學到很多很多的東西,同時不僅可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。在設計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固,比如說結構體……通過這次課程設計之后,一定把以前所學過的知識本次課程設計結束了,對于我的影響很大。我通過這次實踐學到了許多知識。學到了設計一個簡單的系統(tǒng)。要注意哪些方面。也使我知道自己哪些方面做得還不夠。
但我出總結出了一點點的經(jīng)驗如下:
1、要對系統(tǒng)的功能和要求做出詳細的分析,并合理分解任務。
2、把分解出來的子任務,做給一個相對獨立的模塊。
3、在設計一個模塊之前,要簡單構想一下總界面的顯視情況。
4、針對構想出來的界面進行程序的編寫。
通過這次課程設計,增加了我對軟件技術的了解,雖然還不明確軟件技術包含的具體內(nèi)容,但從學習C語言這門課程開始,已發(fā)現(xiàn)程序設計的好處,他對我們數(shù)學的學習也有很大的幫助。在學習C語言的過程中也學到和鞏固了許多計算機應用基礎知識,對計算機的機體也有了一個較為詳細的了解。在具體操作中對這學期所學的C語言的理論知識得到鞏固加強,達到實訓的目的,也發(fā)現(xiàn)自己的不足之處,為我問以后的c語言學習奠定了基礎,同時體會到C語言具有的語句簡潔,使用靈活,執(zhí)行效率高等特點。發(fā)現(xiàn)上機操作的重要作用,特別是對數(shù)組和循環(huán)有了深刻的理解。通過實際操作,學會 C語言程序編程的基本步驟、基本方法,開發(fā)了自己的邏輯思維能力,培養(yǎng)了分析問題、解決問題的能力。
這不僅是程序設計,更是鍛煉我們處理問題的能力,同時也使我們了解到團隊合作的可貴.編寫程序是件細心活,稍不留神就會出錯,這就必須要求我們對待事情要認真!在編寫程序的過程中,錯誤不斷出現(xiàn),不同的類型(如少寫了一個符號,寫錯了字母,用錯了函數(shù)等等)層出不窮,這考驗我們待事細心,耐心,能不能堅持到底,不能半途而廢。
三人行必有我?guī)?遇到問題我們一起討論,研究,錯了再寫,寫了在改.經(jīng)過多次的修改,調(diào)試,運行,添加,終于最后在大家的歡呼聲中,完成了我的任務.雖說是累了點,但我也從中找到了自己的快樂,每當完成一個新的函數(shù)時,那心情是激動啊,這畢竟是自己弄出來的,同時也使我感受到了學習的快樂!
生活上我們也同樣如此,以這種精神對待生活,對待生命,我想,我們的人生會更美好,路是自己走出來的,也只有經(jīng)過無數(shù)次的磨練,無數(shù)次地堅定我們的信心,鍛煉我們的意志漸漸地使自己才能夠使自己成熟起來,走出一片屬于自己的天空。
參考文獻本科課程設計(論文) 參考文獻
參考文獻
[1]譚浩強,《C程序設計》,清華大學出版社
[2]劉振安,孫忱,劉燕君,《C程序設計課程設計》,機械工業(yè)出版社
[3]汪詩林,《數(shù)據(jù)結構算法與應用》,機械工業(yè)出版社
[4] CSDN下載頻道.
[5]朱若愚.數(shù)據(jù)結構[M]. 電子工業(yè)出版社
[6]晉良潁.數(shù)據(jù)結構[M].人民郵電出版社
[7]劉大有.數(shù)據(jù)結構[M]. 高等教育出版社
本科課程設計(論文) 源代碼
附錄:源代碼
1.源程序清單
#include <stdio.h>
#include <stdlib.h> /*與malloc.h差不多*/
#ionclude <string.h>
#include <istream.h>
#define maxlen 100
struct persons /*定義結構體數(shù)組用于緩存數(shù)據(jù)*/
{
int num; /*編號*/
char name[20]; /*姓名*/
char e_addr[20]; /*電子郵箱*/
char tel_no[15]; /*電話號碼*/
char sim_no; /*縮位號碼*/
char arch; /*分類*/
}persons[maxlen];
typedef struct lnode /*通訊錄結構中結點的定義*/
{
int num;
char name[20];
char e_addr[20];
char tel_no[15];
char sim_no;
char arch;
struct lnode *next;
}listnode,*linklist;
void Save();
linklist head=NULL,r=NULL; /*定義頭指針和尾指針*/
listnode *s,*p0,*p1,*p2,*p3,*p4,*p5,*p6,*p7,*p8,*p9;
int i;
char name1[10],ch;
char tel_no1[15];
char arch1;
char sim_no1;
char e_addr1[20];
char s1[20];
FILE *fp; /*定義文件指針*/
void creat() /*將文件的信息讀入結構體數(shù)組在轉存入鏈表中*/
{
int j;
long k; fp=fopen("通訊錄文件.txt","r t"); /*打開文件*/
if(fp!=NULL)
{
for(i=0;i<=maxlen;i++ ) /*當信息數(shù)不大于100條時,文件中的信息可以依次存入鏈表中*/
{
j=fgetc(fp);
if(j==EOF)
return;
k=i;
fseek(fp,k*sizeof(struct persons),0); /*讀取一個人的信息*/
fread(&persons[i],sizeof(struct persons),1,fp);
s=(linklist)malloc(sizeof(listnode)); /*裝存入鏈表中*/
s->num=persons[i].num;
strcpy(s->name,persons[i].name);
strcpy(s->e_addr,persons[i].e_addr);
strcpy(s->tel_no,persons[i].tel_no);
s->sim_no=persons[i].sim_no;
s->arch=persons[i].arch;
if(head==NULL) /*用尾插法將其插入鏈表中*/
{
head=s;
r=head;
head->next=NULL;
}
else
{
r->next=s;
r=s;r->next=NULL;
}
}
fclose(fp);
}
else
{
fp=fopen("通訊錄文件.txt","w"); /*不能打開另開辟一個文件*/
i=1;
}
}
/***********************************/
/*函數(shù)名:ShowA */
/*函數(shù)說明:輸出家庭類所有信息 */
/*入口參數(shù):無 */
/*出口參數(shù):無 */
/***********************************/
void ShowA()
{
p1=head;
system("cls"); /*清屏*/
while(p1!=NULL)
{
if(p1->arch=='A') /*判斷信息是否屬于該類*/
{
cout<<endl;
cout<<"姓名:"<<p1->name<<endl; /*輸出姓名*/
cout<<"電子郵箱:"<<p1->e_addr<<endl; /*輸出電子郵箱*/
cout<<"電話號碼:"<<p1->tel_no<<endl; /*輸出電話號碼*/
cout<<"縮位號碼:"<<p1->sim_no<<endl; /*輸出縮位號碼*/
cout<<"分類:"<<p1->arch<<endl;/*輸出類別*/
}
p1=p1->next;
continue;
}
}
/***********************************/
/*函數(shù)名:ShowB */
/*函數(shù)說明:輸出朋友類所有信息 */
/*入口參數(shù):無 */
/*出口參數(shù):無 */
/***********************************/
void ShowB()
{
p1=head;
system("cls"); /*清屏*/
while(p1!=NULL)
{
if(p1->arch=='B') /*判斷信息是否屬于該類*/
{
cout<<endl;
cout<<"姓名:"<<p1->name<<endl; /*輸出姓名*/
cout<<"電子郵箱:"<<p1->e_addr<<endl; /*輸出電子郵箱*/
cout<<"電話號碼:"<<p1->tel_no<<endl; /*輸出電話號碼*/
cout<<"縮位號碼:"<<p1->sim_no<<endl; /*輸出縮位號碼*/
cout<<"分類:"<<p1->arch<<endl;/*輸出類別*/
}
p1=p1->next;
continue;
}
}
/***********************************/
/*函數(shù)名:ShowC */
/*函數(shù)說明:輸出重要人士類所有信息 */
/*入口參數(shù):無 */
/*出口參數(shù):無 */
/***********************************/
void ShowC()
{
p1=head;
system("cls"); /*清屏*/
while(p1!=NULL)
{
if(p1->arch=='C') /*判斷信息是否屬于該類*/
{
cout<<endl;
cout<<"姓名:"<<p1->name<<endl; /*輸出姓名*/
cout<<"電子郵箱:"<<p1->e_addr<<endl; /*輸出電子郵箱*/
cout<<"電話號碼:"<<p1->tel_no<<endl; /*輸出電話號碼*/
cout<<"縮位號碼:"<<p1->sim_no<<endl; /*輸出縮位號碼*/
cout<<"分類:"<<p1->arch<<endl;/*輸出類別*/
}
p1=p1->next;
continue;
}
}
/***********************************/
/*函數(shù)名:ShowD */
/*函數(shù)說明:輸出其他類所有信息 */
/*入口參數(shù):無 */
/*出口參數(shù):無 */
/***********************************/
void ShowD()
{
p1=head;
system("cls"); /*清屏*/
while(p1!=NULL)
{
if(p1->arch=='D') /*判斷信息是否屬于該類*/
{
cout<<endl;
cout<<"姓名:"<<p1->name<<endl; /*輸出姓名*/
cout<<"電子郵箱:"<<p1->e_addr<<endl; /*輸出電子郵箱*/
cout<<"電話號碼:"<<p1->tel_no<<endl; /*輸出電話號碼*/
cout<<"縮位號碼:"<<p1->sim_no<<endl; /*輸出縮位號碼*/
cout<<"分類:"<<p1->arch<<endl;/*輸出類別*/
}
p1=p1->next;
continue;
}
}
/***********************************/
/*函數(shù)名:Show */
/*函數(shù)說明:輸出已有信息 */
/*入口參數(shù):無 */
/*出口參數(shù):無 */
/***********************************/
void Show()
{
char ch1;
system("cls"); /*清屏*/
printf("你想輸出哪一類信息?\n");
cout<<"A:家庭類"<<"B:朋友類"<<"C:重要人士類"<<"D:其他"<<endl;
cout<<"請選擇:"<<endl;
cin>>ch1; /*輸入選擇類別*/
switch(ch1) /*用單條件多選擇語句實現(xiàn)調(diào)用與循環(huán)*/
{
case'A':ShowA();break;
case'B':ShowB();break;
case'C':ShowC();break;
case'D':ShowD();break;
default:cout<<"error"<<endl;
}
}
/***********************************/
/*函數(shù)名:Delete */
/*函數(shù)說明:刪除信息 */
/*入口參數(shù):無 */
/*出口參數(shù):無 */
/***********************************/
void Delete()
{
system("cls"); /*清屏*/
printf("\n\n\t請輸入要刪除用戶的姓名:");
cin>>name1; /*輸入要刪除的姓名*/
p4=head;
if(p4==NULL)
cout<<"你選擇的用戶不存在!"<<endl;
else
{
if(strcmp(p4->name,name1)==0) /*根據(jù)各種情況判斷可能性*/
{
p4=p4->next;
head=p4;
}
else
{
while(strcmp(p4->next->name,name1)!=0)p4=p4->next;/*找到要刪除的節(jié)點*/
if(p4!=NULL) /*若輸入的用戶存在則刪除*/
{
p5=p4->next;
p4->next=p5->next;
free(p5);
}
else
cout<<"你選擇的用戶不存在!"<<endl; /*輸入的用戶不存在*/
}
}
Save();
}
/***********************************/
/*函數(shù)名:Input */
/*函數(shù)說明:增加一個人的信息 */
/*入口參數(shù):無 */
/*出口參數(shù):無 */
/***********************************/
void Input()
{
system("cls"); /*清屏*/
s=(linklist)malloc(sizeof(listnode)); /*開辟一個節(jié)點,用于存放新輸入的信息*/
printf("\n\n\t請輸入該用戶的信息:\n");
cout<<"姓名:";
cin>>s->name;
cout<<"電話:";
cin>>s->tel_no;
cout<<"縮位號碼:";
cin>>s->sim_no;
cout<<"電子郵箱:";
cin>>s->e_addr;
cout<<"分類:";
cin>>s->arch;
if(head==NULL) printf("\n\n"); /*判斷原通訊錄是否為空*/
else
{
p8=head;
while(p8!=NULL&&strcmp(s->name,p8->name)!=0&&strcmp(s->tel_no,p8->tel_no)!=0) /*判斷輸入的用戶是否已存在*/
p8=p8->next;
if(p8!=NULL)
{
printf("您添加的用戶已存在!");
free(s);
}
}
if(head==NULL)
{
head=s;
r=head;
head->next=NULL;
}
else
{
r->next=s;
r=s;
r->next=NULL;
}
Save();
}
/***********************************/
/*函數(shù)名:Alter */
/*函數(shù)說明:改變一個人信息 */
/*入口參數(shù):無 */
/*出口參數(shù):無 */
/***********************************/
void Alter()
{
system("cls"); /*清屏*/
printf("\n\n\t請輸入姓名:");
cin>>name1;
p3=head;
while(p3!=NULL&&strcmp(name1,p3->name)!=0)
p3=p3->next;
if(p3==NULL) /*判斷輸入的用戶是否存在*/
printf("\n\n\t您選擇的用戶不存在!");
else
{
printf("\n\n\t請輸入該用戶的新信息:\n"); /*輸入要改人的新信息*/
cout<<"姓名:";
cin>>name1;
cout<<"電話號碼:";
cin>>tel_no1;
cout<<"電子郵箱:";
cin>>e_addr1;
cout<<"縮位號碼:";
cin>>sim_no1;
cout<<"類別:";
cin>>arch1;
while(p9!=NULL&&strcmp(name1,p9->name)!=0&&strcmp(tel_no1,p9->tel_no)!=0) /*找尋輸入的用戶*/
p9=p9->next;
if(p9==NULL) /*輸入用戶存在,則修改用戶信息*/
{
strcpy(p3->name,name1);
strcpy(p3->tel_no,tel_no1);
strcpy(p3->e_addr,e_addr1);
p3->sim_no=sim_no1;
p3->arch=arch1;
}
else
printf("您添加的用戶已存在!");
}
Save();
}
/***********************************/
/*函數(shù)名:Dial */
/*函數(shù)說明:模擬撥打一個人的號碼 */
/*入口參數(shù):無 */
/*出口參數(shù):無 */
/***********************************/
void Dial()
{
int a;
char b;
system("cls"); /*清屏*/
cout<<"1.撥叫用戶:"<<endl;
cout<<"2.使用單鍵撥號:"<<endl;
cin>>a;
p0=head;
if(a==1)
{
cout<<"請輸入撥叫用戶的姓名:";
cin>>name1;
while(strcmp(name1,p0->name)!=0&&p0!=NULL) /*找尋輸入的用戶*/
p0=p0->next;
if(p0==NULL)
cout<<"您選擇的用戶不存在!";
else
{
cout<<endl;
cout<<p0->tel_no;
cout<<endl;
}
}
else
{
cout<<"請輸入單鍵號碼:";
cin>>b;
while(p0!=NULL&&b!=p0->sim_no) /*找尋輸入的用戶*/
p0=p0->next;
if(p0==NULL)
cout<<"您輸入的單鍵號碼不存在!";
else
{
cout<<endl;
cout<<p0->name<<endl;
cout<<p0->tel_no;
cout<<endl;
}
}
}
/***********************************/
/*函數(shù)名:Save */
/*函數(shù)說明:保存剛才的操作信息 */
/*入口參數(shù):無 */
/*出口參數(shù):無 */
/***********************************/
void Save()
{
int j;
fp=fopen("通訊錄文件.txt","w");
for(p2=head,j=0;p2!=NULL;j++ ,p2=p2->next)/*將信息裝出入結構體數(shù)組在出入鏈表中,避免地址的出入,造成亂碼文件*/
{
strcpy(persons[j].name,p2->name);
strcpy(persons[j].e_addr,p2->e_addr);
strcpy(persons[j].tel_no,p2->tel_no);
persons[j].sim_no=p2->sim_no;
persons[j].arch=p2->arch;
fwrite(&persons[j],sizeof(struct persons),1,fp);
}
}
vo