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