第一篇:通訊錄管理系統(tǒng)
淮北師范大學(xué)
軟件系列課程設(shè)計(jì)
通訊錄管理系統(tǒng)
學(xué)
院
計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院
學(xué) 生 姓 名
陳 文 超
學(xué)
號
20081201011
指導(dǎo)教師姓名
陳 美 榮
2010年 06月 20日
目 錄
摘 要........................................................1.緒論.......................................................1.1 開發(fā)背景簡介.........................................1.2 管理系統(tǒng)的發(fā)展趨勢??????????????????
1.2 目的目的和意義........................................2.開發(fā)工具的選擇............................................3.系統(tǒng)分析...................................................3.1題目需求分析............................................3.2系統(tǒng)功能分析............................................4.系統(tǒng)總體規(guī)劃...............................................4.1概要設(shè)計(jì)...............................................5.系統(tǒng)設(shè)計(jì)...................................................5.1系統(tǒng)操作流程圖..........................................5.2系統(tǒng)詳細(xì)設(shè)計(jì)............................................6.調(diào)試.......................................................7.全文總結(jié)...................................................8.致 謝.....................................................參考文獻(xiàn).....................................................通訊錄管理系統(tǒng)
摘要:
通訊錄管理系統(tǒng)是每一個用戶管理通訊錄的不可缺少的一個管理信息系統(tǒng),它的內(nèi)容對于用戶的管理者來說是至關(guān)重要的,所以通訊錄管理系統(tǒng)應(yīng)該能夠?yàn)槊恳粋€用戶的管理者提供充足的信息和快捷的查詢手段,大大的方便用戶合理的管理通訊錄。
隨著科學(xué)技術(shù)的不斷提高,計(jì)算機(jī)科學(xué)日漸成熟,網(wǎng)上通訊工具的迅速發(fā)展,其強(qiáng)大的功能已為人們深刻認(rèn)識,它已進(jìn)入人類社會的各個領(lǐng)域并發(fā)揮著越來越重要的作用。
作為計(jì)算機(jī)應(yīng)用的一部分,使用計(jì)算機(jī)對通訊錄進(jìn)行管理,具有著手工管理所無法比擬的優(yōu)點(diǎn),如:檢索迅速、查找方便、可靠性高、存儲量大、保密性好、壽命長、成本低等。這些優(yōu)點(diǎn)能夠極大地提高通訊錄管理的效率,也是用戶理財(cái)?shù)目茖W(xué)化、正規(guī)化管理,與先進(jìn)科學(xué)技術(shù)接軌的重要條件。
因此,開發(fā)這樣一套管理軟件成為很有必要的事情,對于我們即將計(jì)算機(jī)專業(yè)畢業(yè)的學(xué)員來說,也是一次將計(jì)算機(jī)應(yīng)用于現(xiàn)實(shí)管理的一次很有意義的實(shí)踐活動。
關(guān)鍵詞:通訊錄 管理信息系統(tǒng) 計(jì)算機(jī)科學(xué) 用戶
1.1開發(fā)背景簡介
隨著信息活動在國民經(jīng)濟(jì)中主導(dǎo)地位的確立和信息產(chǎn)業(yè)的崛起信息資源管理(Informetion Resouces Management,簡稱IRM)作為一個專有名詞和獨(dú)立的學(xué)科逐漸發(fā)展起來。如何積極開發(fā)、合理配置和有效利用信息資源,日益成為社會生活中亟待解決的問題。由于計(jì)算機(jī)和通信技術(shù)的高速發(fā)展,推廣應(yīng)用計(jì)算機(jī)進(jìn)行信息、管理成為推動信息化工作的重要內(nèi)容,管理信息系統(tǒng)正是應(yīng)用計(jì)算機(jī)信息化過程中出現(xiàn)的新生事物。它是一個利用計(jì)算機(jī)軟硬件資源進(jìn)行電子數(shù)據(jù)處理的人——機(jī)系統(tǒng),它能提供信息,支持企業(yè)或組織的運(yùn)行,具有管理和支持決策的功能利用計(jì)算機(jī)能把生產(chǎn)經(jīng)營過程中的巨大數(shù)據(jù)流收集組織起來。經(jīng)過處理轉(zhuǎn)換為對各部門不可缺少的數(shù)據(jù),經(jīng)過對這些數(shù)據(jù)的分析使其變?yōu)楦骷壒芾砣藛T做出決策具有重要意義的信息??傊?,管理信息系統(tǒng)用于管理中可以大大減輕管理人員的工作負(fù)擔(dān),提高工作效率,使管理更加程序化、科學(xué)化。
對一個組織而言,內(nèi)部管理的好壞直接關(guān)系到組織的存在與良好運(yùn)行,而內(nèi)部管理中非常重要的一項(xiàng)就是對他人的聯(lián)系,他人的具體情況,如:手機(jī)號、電子郵箱、家庭住址??;一旦工作人員沒有及時出現(xiàn)在自己的崗位時、及其他情況發(fā)生變化,可以迅速聯(lián)系或找到本人甚至其家人及時了解情況;引入計(jì)算機(jī)管理信息系統(tǒng),可以提高工作效率,改善管理情況,使管理工作系統(tǒng)化、科學(xué)化、提高整體的管理的水平。
本系統(tǒng)是針對通訊錄管理系統(tǒng)編寫的。對于許多人來說,已經(jīng)認(rèn)識到一個好的通訊錄是很必要的,可以方便和他人的聯(lián)系;但是應(yīng)用計(jì)算機(jī)來進(jìn)行管理,他們還無法自己實(shí)現(xiàn),這就需要有專門的管理軟件來幫助實(shí)現(xiàn)。
隨著科技的進(jìn)步和信息產(chǎn)業(yè)的飛速發(fā)展,通訊錄成為了現(xiàn)代生活中一個重要的工具。本通訊錄管理系統(tǒng)利用計(jì)算機(jī)對通訊錄進(jìn)行統(tǒng)一管理,包括添加、修改、查詢記錄等功能,實(shí)現(xiàn)通訊錄管理工作的系統(tǒng)化、規(guī)范化和自動化,為人們的工作和生活提供便利。整個系統(tǒng)程序采用c語言來實(shí)現(xiàn)。c語言是目前國際上比較流行的計(jì)算機(jī)高級編程語言之一,因其簡潔、使用方便且具備強(qiáng)大的功能而受到編程人員的普通青睞。它既適合作為系統(tǒng)描述語言,也可用來編寫系統(tǒng)軟件,還可用來編寫應(yīng)用軟件。
1.2 管理信息系統(tǒng)的發(fā)展趨勢 現(xiàn)代管理信息系統(tǒng)軟件的規(guī)模越來越大,且管理思想越來越復(fù)雜,以至于超出了軟件開發(fā)者在合理的時間和價值內(nèi)設(shè)計(jì)、描述、開發(fā)和驗(yàn)證它們的能力。因此,在開發(fā)管理信息系統(tǒng)的時候,需要利用可靠的構(gòu)件,或者是以前開發(fā)的很小但經(jīng)過驗(yàn)證的較小的程序模塊,在可接受的時間范圍內(nèi)組建出可靠而復(fù)雜的軟件系統(tǒng)。
一般情況下,管理信息系統(tǒng)的體系結(jié)構(gòu)采用自上而下的縱向分層、橫向分塊來設(shè)計(jì)實(shí)現(xiàn)。分層為管理軟件的復(fù)雜度及重用提供了一個很好的解決方法,在分層系統(tǒng)的等級組織形式中,每一層都給下一層提供服務(wù),對其下層則要求得到服務(wù)。分塊指按信息系統(tǒng)軟件實(shí)現(xiàn)的功能將軟件分為若干塊,每一塊既是一獨(dú)立的子系統(tǒng),又是大系統(tǒng)的一個組成部分。塊與塊之間通過數(shù)據(jù)表進(jìn)行耦合。
在確定的分層分塊的體系結(jié)構(gòu)中,再采取自下而上的方法,首先,對最底層的功能模塊,對該功能模塊包含的管理思想標(biāo)準(zhǔn)化、模型化,使其具有通用性,再進(jìn)行構(gòu)件化設(shè)計(jì),并按照軟構(gòu)件應(yīng)該具有的可移植性、互操作性、擴(kuò)展性、可配置性和可維護(hù)性等特點(diǎn),進(jìn)行參數(shù)化設(shè)置;其次,對該功能的上一層進(jìn)行構(gòu)件化改造,減少模塊間的重疊,這樣層層改造之后,對于類似企業(yè)的管理信息系統(tǒng)的開發(fā),只需要針對該企業(yè)的個性,對某些局部的構(gòu)件進(jìn)行改動就可以完成了
1.3開發(fā)的目的和意義
計(jì)算機(jī)已經(jīng)成為我們學(xué)習(xí)和工作的得力助手,使用其可方便的管理通訊錄 今天,計(jì)算機(jī)的價格已經(jīng)十分低廉,性能卻有了長足的進(jìn)步。它已經(jīng)被應(yīng)用于許多領(lǐng)域。
現(xiàn)在我國的通訊錄管理水平還停留在紙介質(zhì)的基礎(chǔ)上,這樣的機(jī)制已經(jīng)不能適應(yīng)時代的發(fā)展,因?yàn)樗速M(fèi)了許多人力和物力,在信息時代這種傳統(tǒng)的管理方法必然被計(jì)算機(jī)為基礎(chǔ)的信息管理所取代。我作為一個計(jì)算機(jī)應(yīng)用專業(yè)的畢業(yè)生,希望可以在這方面有所貢獻(xiàn)。改革的總設(shè)計(jì)師鄧小平同志說過“科學(xué)技術(shù)是第一生產(chǎn)力”,我希望能用我所學(xué)的知識編制出一個實(shí)用的程序來幫助用戶進(jìn)行財(cái)務(wù)管理。
開發(fā)這一系統(tǒng)的好處大約有以下幾點(diǎn):
第一、可以存儲大量的通訊錄信息,安全、高效; 第二、只需一檔案錄入員即可操作系統(tǒng),節(jié)省人力; 第三、可以迅速查到所需通訊錄信息。
根據(jù)2003年中國電信的調(diào)查報告顯示我國的上網(wǎng)人數(shù)已達(dá)到1870萬,互聯(lián)網(wǎng)已經(jīng)十分普及,況且現(xiàn)在網(wǎng)上通訊已經(jīng)出現(xiàn),本系統(tǒng)為用戶將來的上網(wǎng)作了先期工作。
2.開發(fā)工具
Microsoft Visual Studio是一種可視化的、面向?qū)ο蠛驼{(diào)用事件驅(qū)動方式的結(jié)構(gòu)化高級程序設(shè)計(jì),可用于開發(fā)Windows環(huán)境下的種類應(yīng)用程序。它簡單易學(xué)、效率高,且功能強(qiáng)大,可以與Windows的專業(yè)開發(fā)工具SDK相媲美,而且程序開發(fā)人員不必具有C/C++編程基礎(chǔ)。在 Microsoft Visual Studio環(huán)境下,利用事件驅(qū)動的編程機(jī)制、新穎易用的可視化設(shè)計(jì)工具,使用Windows內(nèi)部的應(yīng)用程序接口(API)函數(shù),以及動態(tài)鏈接庫(DLL)、動態(tài)數(shù)據(jù)交換(DDE)、對象的鏈接與嵌入(OLE)、開放式數(shù)據(jù)訪問(ODBC)等技術(shù),可以高效、快速地開發(fā)出Windows環(huán)境下功能強(qiáng)大、圖形界面豐富的應(yīng)用軟件系統(tǒng)。
3.1需求分析
設(shè)計(jì)題目及要求:
◆ 建立通訊錄信息,信息至少包含姓名、年齡、電話、通訊地址、電子郵箱、郵政編碼等;
◆ 能夠提供添加、刪除和修改通訊錄信息的功能;
◆ 能夠提供安不同方式查詢的功能;如按姓名或年齡、電話等查詢; ◆ 將通訊錄保存在文件中;
◆ 能夠按表格方式輸出通訊錄信息。
3.2系統(tǒng)功能需求分析:
主要包含一下多種功能:
添加:添加通訊錄記錄 顯示:顯示通訊錄記錄 刪除:刪除通訊錄記錄 查詢:查詢通訊錄記錄 修改:修改通訊錄記錄 保存:將信息保存到文件
4.1概要設(shè)計(jì)
系統(tǒng)功能模塊圖:
添加:可以添加通訊錄記錄,依次輸入姓名、年齡、電話號碼、通訊地址、電子郵箱郵、政編碼后,會提示是否繼續(xù)添加。顯示:可以以表格形式輸出所有通訊錄里的記錄
刪除:輸入欲刪除的那個人的名字后,會自動刪除他(她)的記錄內(nèi)容 查詢:可以選擇用姓名、電話、地址三種方式查詢
修改:輸入欲修改的那個人的名字后,再依次輸入姓名、年齡、電話號碼、通訊地址、電子郵箱、郵政編碼即可完成修改
保存:,輸入文件名(帶后綴名)后,即可將通訊錄信息保存到文件
5.1操作系統(tǒng)流程圖:
①添加:添加通訊錄記錄
②顯示:顯示通訊錄記錄
③刪除:刪除通訊錄記錄
④查詢:查詢通訊錄記錄
先選擇查詢方式,以姓名查詢方式為例
⑤修改:修改通訊錄記錄
5.2詳細(xì)設(shè)計(jì)
(1).通訊錄:
typedef struct
{
char name[10];
/*姓名*/
char num[15];
/*號碼*/
char email[20];
/*郵箱*/
char age[8];
/*年齡*/
char adds[20];
/*住址*/
Char post[10];
/*郵政編碼*/ }Person;
void main()
/*主函數(shù)*/
{
int n=0;for(;;){
switch(menu_select())
{
case 1:
printf(“nt添加記錄到通訊錄n”);
/*添加記錄*/
n=Input(pe,n);
break;
case 2:
printf(“nttt
通訊錄記錄表n”);
Display(pe,n);
break;
case 3:
printf(“nt從通訊錄中刪除記錄n”);
n=Delete_a_record(pe,n);
printf(“t”);
system(“pause”);
break;
case 4:
printf(“nt在通訊錄中查找記錄n”);
Query_a_record(pe,n);
printf(“t”);
system(“pause”);
break;
case 5:
printf(“nt修改通訊錄中的記錄n”);
Change(pe,n);
printf(“t”);
system(“pause”);
break;
case 6:
printf(“nt保存功能n”);
WritetoText(pe,n);
printf(“t”);
system(“pause”);break;
/*顯示記錄*/
/*刪除記錄*/
/*查找記錄*/
/*修改數(shù)據(jù)*/
/*保存數(shù)據(jù)*/
}
} case 0:
printf(“ntt謝謝使用,再見!n”);
/*結(jié)束程序*/ printf(“ntt”);system(“pause”);exit(0);}
六.調(diào)試
7.全文總結(jié)
在本系統(tǒng)的開發(fā)過程中,由于本人是初次開發(fā)軟件,在知識、經(jīng)驗(yàn)方面都存在著不足。另外,在整個開發(fā)的過程中,時間也比較倉促。因此,該系統(tǒng)必然會存在一些缺陷和不足。因?yàn)閷νㄓ嶄浶畔⒐芾淼恼麄€流程不夠熟悉,在需求分析時未能做到完全滿足用戶的需求。
盡管本管理系統(tǒng)存在著很多不足,但通過開發(fā)這個系統(tǒng),我掌握了的項(xiàng)目基本開發(fā)過程,用到的知識鞏固了我對Visual C++的學(xué)習(xí),在這次設(shè)計(jì)中的最大收獲并不是掌握這幾門開發(fā)工具的應(yīng)用,而是學(xué)會了設(shè)計(jì)系統(tǒng)的思維方法,以及與同學(xué)們之間相互幫助的精神。8.致 謝
從接受課題到現(xiàn)在完成設(shè)計(jì)論文,衷心的感謝我的指導(dǎo)老師給予了精心的指導(dǎo)和熱情的幫助,尤其在課題設(shè)計(jì)的前期準(zhǔn)備階段和本人的設(shè)計(jì)階段,導(dǎo)師提出許多寶貴的設(shè)計(jì)意見,在最后的測試修改階段老師在百忙之中抽出時間為我們提供了必要的幫助,這樣使得我得以順利的完成畢業(yè)設(shè)計(jì)開發(fā)工作,老師淵博的知識、敏銳的思路和實(shí)事求是的工作作風(fēng)給我留下了深刻的印象,這將使得我終身受益,謹(jǐn)此向老師表示衷心的感謝和崇高的敬意!
參考文獻(xiàn)
[1] 史濟(jì)明等編著,軟件工程-原理、方法與應(yīng)用,高等教育出版社,2002 [2] 汪孝宜等,信息系統(tǒng)開發(fā)實(shí)例精粹,電子工業(yè)出版社,2006 [3] 譚浩強(qiáng).C程序設(shè)計(jì)[M].3版.北京:清華大學(xué)出版社,2005 [4] 張基溫.C語言程序設(shè)計(jì)案例教程[M].北京:清華大學(xué)出版社,2004 [5] C語言程序設(shè)計(jì)教程 第三版,高等教育出版社
第二篇:通訊錄管理系統(tǒng)
課 程 設(shè) 計(jì) 任 務(wù) 書
題
目
C語言課程設(shè)計(jì)
系
(部)
專
業(yè)
班
級
學(xué)生姓名
學(xué)
號
06 月
信息科學(xué)與電氣工程學(xué)院
計(jì)算機(jī)科學(xué)與技術(shù)
計(jì)職141
王雪
140819139 日至
07 月
04 日
共
周 指導(dǎo)教師
院
長
2015 年 6月 23日
一、課程設(shè)計(jì)目的
將理論教學(xué)中涉及到的知識點(diǎn)貫穿起來,對不同的數(shù)據(jù)類型、程序控制結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)作一比較和總結(jié),結(jié)合設(shè)計(jì)題目進(jìn)行綜合性應(yīng)用,對所學(xué)知識達(dá)到融會貫通的程度。通過課程設(shè)計(jì),學(xué)生在下述各方面的能力應(yīng)該得到鍛煉:
(1)進(jìn)一步鞏固、加深學(xué)生所學(xué)專業(yè)課程《C++程序設(shè)計(jì)語言》的基本理論知識,理論聯(lián)系實(shí)際,進(jìn)一步培養(yǎng)學(xué)生綜合分析問題,解決問題的能力。
(2)全面考核學(xué)生所掌握的基本理論知識及其實(shí)際業(yè)務(wù)能力,從而達(dá)到提高學(xué)生素質(zhì)的最終目的。
(3)利用所學(xué)知識,開發(fā)小型應(yīng)用系統(tǒng),掌握運(yùn)用C++語言編寫調(diào)試應(yīng)用系統(tǒng)程序,訓(xùn)練獨(dú)立開發(fā)應(yīng)用系統(tǒng),進(jìn)行數(shù)據(jù)處理的綜合能力。
(4)對于給定的設(shè)計(jì)題目,如何進(jìn)行分析,理清思路,并給出相應(yīng)的數(shù)學(xué)模型。
(5)掌握結(jié)構(gòu)化程序設(shè)計(jì)方法,熟悉面向?qū)ο蟪绦蛟O(shè)計(jì)方法。(6)熟練掌握C++語言的基本語法,靈活運(yùn)用各種數(shù)據(jù)類型。(7)進(jìn)一步掌握在集成環(huán)境下如何調(diào)試程序和修改程序。設(shè)計(jì)功能
錄入聯(lián)系人信息(包括姓名、電話號碼、地址等信息);通訊錄管理系統(tǒng)要求實(shí)現(xiàn)以下功能:
1、輸入每一位聯(lián)系人記錄,將其信息存入文件中。
2、查詢所有聯(lián)系人的信息,并按可選的自定義規(guī)則進(jìn)行排序;
3、記錄修改,將修改的記錄信息保存于文件中。設(shè)計(jì)要求
1、設(shè)一個通信錄由以下幾項(xiàng)數(shù)據(jù)信息構(gòu)成: 數(shù)據(jù)項(xiàng) 類型
姓名 字符串
地址 字符串
郵政編碼 字符串
電話號碼 字符串
試為通信錄數(shù)據(jù)定義類型和定義通信錄變量,實(shí)現(xiàn)功能:存取、顯示、刪除記錄、查詢記錄等功能。
2、要求:界面友好,易于操作 總體設(shè)計(jì) 系統(tǒng)功能模塊圖:
添加:可以添加通訊錄記錄,依次輸入編號、姓名、年齡、電話號碼、通訊地址、電子郵箱等后,會提示是否繼續(xù)添加。
顯示:可以以表格形式輸出所有通訊錄里的記錄
刪除:輸入欲刪除的那個人的名字后,會自動刪除他(她)的記錄內(nèi)容 查詢:可以選擇用姓名、電話、地址三種方式查詢
修改:輸入欲修改的那個人的名字后,再依次輸入編號、姓名、年齡、電話號碼、通訊地址、電子郵箱即可完成修改
保存:,輸入文件名(帶后綴名)后,即可將通訊錄信息保存到文件
課程設(shè)計(jì)名稱及內(nèi)容
課程設(shè)計(jì)名稱:單項(xiàng)選擇題標(biāo)準(zhǔn)化考試系統(tǒng)
設(shè)計(jì)內(nèi)容:設(shè)計(jì)并實(shí)現(xiàn)一個單項(xiàng)選擇題標(biāo)準(zhǔn)化考試系統(tǒng)。該系統(tǒng)可以完成試題錄入、試題抽取、自動判卷等功能。
任務(wù)和要求
功能要求:
(1)用文件保存試題庫。(每個試題包括題干、4個備選答案、標(biāo)準(zhǔn)答案)(2)試題錄入:可隨時增加試題到試題庫中
(3)試題抽取:每次從試題庫中可以隨機(jī)抽出N道題(N由鍵盤輸入)(4)答題:用戶可實(shí)現(xiàn)輸入自己的答案
(5)自動判卷:系統(tǒng)可根據(jù)用戶答案與標(biāo)準(zhǔn)答案的對比實(shí)現(xiàn)判卷并給出成績。
(二)其它要求:
(1)只能使用C/C++語言,源程序要有適當(dāng)?shù)淖⑨?,使程序容易閱讀(2)至少采用文本菜單界面(如果能采用圖形菜單界面更好)(3)學(xué)生可自動增加新功能模塊(視情況可另外加分)
主要知識點(diǎn)
l 面向?qū)ο蟪绦蛟O(shè)計(jì)方法
l 界面制作,switch的應(yīng)用。l 類和對象。l 動態(tài)數(shù)組(鏈表)類模板。l 文件的讀寫。
五、其他
程序設(shè)計(jì)可在Microsoft VC++6.0、Borland C++ Builder環(huán)境下進(jìn)行。
六、參考資料
【1】《C語言程序設(shè)計(jì)》,譚浩強(qiáng)編,清華大學(xué)出版社,2008年 出版 【2】《C語言程序設(shè)計(jì)》,吳明發(fā)編,北京理工大學(xué)出版社,2007年出版 【3】《C語言參考手冊》邱仲潘 機(jī)械工業(yè)出版社,2004年出版
【4】《C語言課程設(shè)計(jì)案例精編》 姜靈之 清華大學(xué)出版社 2008年出版
詳細(xì)設(shè)計(jì)(1).通訊錄: 主要代碼
#include
//結(jié)構(gòu)體 {
};class inter { private: student st[35];char no[13];char name[20];char address[100];char tel_no[12];char post_code[7];char e_mail[40];public: void add(char no[13],char name[20],char address[100],char tel_no[12],char post_code[7],char e_mail[40]);
void del(char name[20]);void find1(char no[13]);void find2(char name[20]);void list1();void list2();int correct(char name[20]);void read();void write();void format();int back(){
cout<<“
返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫):
”;
} void print(int i){
cout<<“學(xué)號:”<
};
} cout<<“電話號碼:”< inter a;a.format();char select1;cout< 計(jì)職141 ” < <<“tt★★★★★★★★★★★★★★★★★★★★★★★★★★” < ※” < 通 迅 錄 ※” < ※” < ※” < ※” < ※” < <<“tt ”< <<“ttt選擇 :”;cin>>select1; switch(select1){ case '1':cout<<“ (1)添加:”< cout<<“ (2)刪除:”< (3)修改:”< 請選擇:”< 輸入添加的資料:”< char name[20]; char address[100]; char tel_no[12]; char post_code[7]; char e_mail[40]; cout<<“ 輸入學(xué)號:”< 輸入姓名:”< 輸入地址:”< 輸入電話號碼:”< 輸入郵編:”< cout<<“ 輸入E_mail:”< cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫): ”; char back_add;cin>>back_add;if(back_add=='R'||back_add=='r')goto top;else goto bottom;break;case '2':cout<<“ 輸入要刪除人的姓名:”< char name2[20];cin>>name2;a.del(name2); cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫): ”; char back_del;cin>>back_del;if(back_del=='R'||back_del=='r')goto top;else goto bottom;break;case '3':cout<<“ 輸入需要修改人的姓名:”< char name3[20];cin>>name3;if(a.correct(name3)) } goto top;else goto bottom;break;break;case '2':cout<<“ (1)根據(jù)姓名查找”< cout<<“ (2)根據(jù)學(xué)號查找”< 請選擇: ”;cin>>select3;switch(select3){ case '1':char name4[20]; cout<<“ 輸入姓名: ”;cin>>name4;a.find2(name4); cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫): ”; char back_f1;cin>>back_f1;if(back_f1=='R'||back_f1=='r')goto top;else goto bottom;break;case '2':char no4[13];cout<<“ 輸入學(xué)號: ”;cin>>no4; a.find1(no4); cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫): ”; } break;char back_f2;cin>>back_f2;if(back_f2=='R'||back_f2=='r')goto top;else goto bottom;break;case '3':a.write();cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫): ”; char back_w;cin>>back_w;if(back_w=='R'||back_w=='r')goto top;else goto bottom;break;case '4':cout<<“ (1)按學(xué)號排序:”< cout<<“ (2)按姓名排序:”< 請選擇:”;char select4;cin>>select4;switch(select4){ case '1':a.list1(); cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫): ”; char back;cin>>back;if(back=='R'||back=='r')goto top;else goto bottom;break;case '2':a.list2(); cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫): ”; } break;char back1;cin>>back1;if(back1=='R'||back1=='r')goto top;else goto bottom;break;case '5':a.read();cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫): ”; char back_r;cin>>back_r;if(back_r=='R'||back_r=='r') goto top;else goto bottom;break;case '6':cout<<“ 請確認(rèn)刪除所有資料!(Y/N) ”; char select5;cin>>select5;if(select5=='Y'||select5=='y')a.format();cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫): ”; } char back_f;cin>>back_f;if(back_f=='R'||back_f=='r')goto top;else goto bottom;break;bottom:cout<<“ ★★★★★★★★★★★★歡迎使用本軟件!★★★★★★★★★★★ ”< void inter::add(char no[13],char name[20],char address[100],char tel_no[12],char post_code[7],char e_mail[40]){ int x=1;for(int i=0;i<35;i++)return 0; } { } if(!strcmp(st[i].no,“0”)){ } if(x==0)break;strcpy(st[i].address,address);strcpy(st[i].e_mail,e_mail);strcpy(st[i].name,name);strcpy(st[i].no,no);strcpy(st[i].post_code,post_code);strcpy(st[i].tel_no,tel_no);x=0;//刪除聯(lián)系人 void inter::del(char name[20]){ int x=1;for(int i=0;i<35;i++){ if(!strcmp(st[i].name,name)){ strcpy(st[i].address,“0”); strcpy(st[i].e_mail,“0”);strcpy(st[i].name,“0”);strcpy(st[i].no,“0”);strcpy(st[i].post_code,“0”);strcpy(st[i].tel_no,“0”); } } } else x=0;if(x==0)cout<<“ error:輸入姓名錯誤!”< int inter::correct(char name[30]){ int x;for(int i=0;i<35;i++){ } char select;cout<<“ (1)修改姓名:”< (2)修改學(xué)號:”< (3)修改地址:”< (4)修改郵編:”< (5)修改電話號碼:”< (6)修改E_MAIL:”< 請選擇:”;cin>>select;switch(select){ case '1':cout<<“ 輸入要修改的姓名:”;char name1[30];if(!strcmp(st[i].name,name))x=i; cin>>name1;strcpy(st[x].name,name1);cout<<“ 修改成功!”< 輸入要修改的學(xué)號:”; char no1[13];cin>>no1;strcpy(st[i].no,no1);cout<<“ 修改成功!”< 輸入要修改的地址:”; char address1[100];cin>>address1;strcpy(st[x].address,address1);cout<<“ 修改成功!”< 輸入要修改的郵編:”; char post_code1[7];cin>>post_code1;strcpy(st[x].post_code,post_code1);cout<<“ 修改成功!”< 輸入要修改的電話號碼:”;char tel_no1[12]; cin>>tel_no1;strcpy(st[x].tel_no,tel_no1);cout<<“ 修改成功!”< 輸入要修改的E_MAIL:”; char e_mail1[40]; cin>>e_mail1; strcpy(st[x].e_mail,e_mail1); cout<<“ 修改成功!”< return back(); break;} } //按學(xué)號查詢聯(lián)系人 void inter::find1(char no[13]){ int x,y=1,z=1;for(int i=0;i<35;i++){ if(!strcmp(st[i].no,no)) { x=i; z=0; } else y=0; if(z==0)break; } if(y==0)cout<<“ 輸入的學(xué)號查找不到??!”< print(x);} //按姓名查詢聯(lián)系人 void inter::find2(char name[20]){ } //讀取文件 void inter::read(){ int x,y=1,z=1;for(int i=0;i<35;i++){ } if(y==0)cout<<“ 輸入的姓名查找不到?。 ? } else y=0;if(z==0)break;x=i;z=0; print(x); char name1[20];cout<<“ 輸入你要導(dǎo)入的文件名: ”;cin>>name1;strcat(name1,“.txt”);ifstream file(name1);char line[120];char no[120];char name[120];char address[120];char post_code[120];char tel_no[120];char e_mail[120];int time=0;file.getline(line,120);while(!file.eof()){ for(int k=0;k<35;k++){ if(time==0){ strcpy(no,line);time=1;for(int i=0;i<120;i++){ if(no[i]==':'){ i++;for(int j=0;j<13;j++) } } { } st[k].no[j]=no[i];i++;file.getline(line,120,'n');} if(time==1){ } if(time== 2){ strcpy(name,line);time=2; for(int i=0;i<120;i++){ } file.getline(line,120,'n');if(name[i]==':'){ } i++;for(int j=0;j<20;j++){ } st[k].name[j]=name[i];i++; } strcpy(address,line);time=3;for(int i=0;i<120;i++){ } file.getline(line,120,'n');if(address[i]==':'){ } i++;for(int j=0;j<100;j++){ } st[k].address[j]=address[i];i++;if(time==3){ strcpy(tel_no,line);time=4;for(int i=0;i<120;i++){ if(tel_no[i]==':'){ i++;for(int j=0;j<12;j++){ st[k].tel_no[j]=tel_no[i]; } } } } i++;file.getline(line,120,'n'); if(time==4){ } if(time==5){ strcpy(e_mail,line);strcpy(post_code,line);time=5;for(int i=0;i<120;i++){ } file.getline(line,120,'n');if(post_code[i]==':'){ } i++;for(int j=0;j<7;j++){ } st[k].post_code[j]=post_code[i];i++; } } } } time=0;for(int i=0;i<120;i++){ } file.getline(line,120,'n');if(e_mail[i]==':'){ } i++;for(int j=0;j<40;j++){ } st[k].e_mail[j]=e_mail[i];i++; file.close();//寫入文件 void inter::write(){ char name[20];cout<<“ 輸入要保存的文件名 ”;cin>>name;strcat(name,“.txt”);ofstream savefile(name);for(int i=0;i<35;i++) } { } savefile.close();savefile << “學(xué)號:”< savefile << “姓名:”< savefile << “地址:”< savefile << “電話號碼:”< savefile << “郵編:”< savefile << “E_MAIL:”< strcpy(no,st[j].no);strcpy(st[j].no,st[j+1].no);for(int i=0;i<34;i++){ for(int j=0;j<35-i;j++){ if(strcmp(st[j].no,st[j+1].no)>0){ char no[13]; char name[20]; char address[100]; char tel_no[12]; char post_code[7]; char e_mail[40]; strcpy(st[j+1].no,no); strcpy(name,st[j].name);strcpy(st[j].name,st[j+1].name);strcpy(st[j+1].name,name); strcpy(address,st[j].address); } for(int k=0;k<35;k++){ int x=0;if(strcmp(st[k].no,“0”)) } } strcpy(st[j].address,st[j+1].address);strcpy(st[j+1].address,address); strcpy(tel_no,st[j].tel_no);strcpy(st[j].tel_no,st[j+1].tel_no);strcpy(st[j+1].tel_no,tel_no); strcpy(post_code,st[j].post_code);strcpy(st[j].post_code,st[j+1].post_code);strcpy(st[j+1].post_code,post_code); strcpy(e_mail,st[j].e_mail);strcpy(st[j].e_mail,st[j+1].e_mail);strcpy(st[j+1].e_mail,e_mail); { } if(x==1){ cout< } } } //按姓名排序 void inter::list2(){ for(int i=0;i<34;i++){ for(int j=0;j<35-i;j++){ if(strcmp(st[j].name,st[j+1].name)>0){ char no[13]; char name[20]; char address[100]; char tel_no[12]; char post_code[7]; char e_mail[40]; strcpy(no,st[j].no);strcpy(st[j].no,st[j+1].no);strcpy(st[j+1].no,no); strcpy(name,st[j].name);strcpy(st[j].name,st[j+1].name);strcpy(st[j+1].name,name); strcpy(address,st[j].address); } for(int k=0;k<35;k++){ } } strcpy(st[j].address,st[j+1].address);strcpy(st[j+1].address,address); strcpy(tel_no,st[j].tel_no);strcpy(st[j].tel_no,st[j+1].tel_no);strcpy(st[j+1].tel_no,tel_no); strcpy(post_code,st[j].post_code);strcpy(st[j].post_code,st[j+1].post_code);strcpy(st[j+1].post_code,post_code); strcpy(e_mail,st[j].e_mail);strcpy(st[j].e_mail,st[j+1].e_mail);strcpy(st[j+1].e_mail,e_mail); } } int x=0;if(strcmp(st[k].no,“0”)){ } if(x==1){ } cout< void inter::format(){ } for(int i=0;i<35;i++){ } strcpy(st[i].address,“0”);strcpy(st[i].e_mail,“0”);strcpy(st[i].name,“0”);strcpy(st[i].no,“0”);strcpy(st[i].post_code,“0”);strcpy(st[i].tel_no,“0”); (2).工作流程圖: 1.通訊錄主界面 2.添加:添加通訊錄記錄 3.顯示:查詢通訊錄記錄 4.刪除:刪除通訊錄記錄 5.修改:修改通訊錄記錄 小結(jié)(收獲和建議)這次的程序?qū)嵲O(shè)計(jì)實(shí)驗(yàn)是對我們進(jìn)入大學(xué)以來學(xué)習(xí)程序設(shè)計(jì)語言結(jié)果的一次大檢驗(yàn),面對許多不懂得知識,通過他人的幫助,以及參考他人的成果,自己動手嘗試,修改等,才完成。這個課程設(shè)計(jì),花費(fèi)了我近兩個星期的時間,這也是因?yàn)闀静皇煜ぁMㄟ^這次設(shè)計(jì),使我對《C語言》這門課程有了更深一步的了解。它不僅是計(jì)算機(jī)程序設(shè)計(jì)的重要理論技術(shù)基礎(chǔ),也在我們電子與信息專業(yè)的學(xué)習(xí)中占據(jù)著十分重要的地位。同時也使我們知道,要學(xué)好這門課程,僅學(xué)習(xí)書本上的知識是不夠的,還要有較強(qiáng)的實(shí)踐能力。因?yàn)槲覀儗W(xué)習(xí)知識就是為了實(shí)踐。而只有多實(shí)踐,多編寫程序,才能更好的理解與掌握書本上的東西。利用計(jì)算機(jī)來編寫程序,也讓我感受到了編程的樂趣,極大的激發(fā)了我的興趣。 摘 要 為了人們對他人信息的記憶方便而設(shè)計(jì),開發(fā)的一套“通訊錄管理系統(tǒng)“軟件。通過該題目的設(shè)計(jì)過程,可以培養(yǎng)學(xué)生結(jié)構(gòu)化程序設(shè)計(jì)的思想,加深對高級語言基本語言要素和控制結(jié)構(gòu)的理解,針對c語言中的重點(diǎn)和難點(diǎn)內(nèi)容進(jìn)行訓(xùn)練,獨(dú)立完成有一定工作量的程序設(shè)計(jì)任務(wù),同時強(qiáng)調(diào)好的程序設(shè)計(jì)風(fēng)格。得到軟件工程的綜合訓(xùn)練,提高解決實(shí)際問題的能力。 關(guān)鍵字:信息;管理;實(shí)用 Abstract Designed for people to others the memory of information convenient, developed a set of “mail list management system” software.Through the design process of this subject, students can be structured programming ideas, deepen our understanding of the advanced language basic language elements and control the understanding of the structure, conduct training for emphasis and difficulty in C language, independently complete the program design has a certain work tasks, while emphasizing the good programming style.Comprehensive training in software engineering, improving the ability to solve practical problems.Keywords: Information;management;practical 目 錄 概述.........................................................................1 1.1設(shè)計(jì)目的..................................................................1 1.2設(shè)計(jì)要求..................................................................1 1.3系統(tǒng)功能需求分析..........................................................2 2 總體設(shè)計(jì).....................................................................3 2.1總體功能模塊圖............................................................3 2.2程序的數(shù)據(jù)設(shè)計(jì)............................................................4 3詳細(xì)設(shè)計(jì).....................................................................5 3.1功能及工作流程圖..........................................................5 3.2源程序代碼................................................................8 4調(diào)試分析....................................................................19 4.1測試.....................................................................19 4.2問題思考與調(diào)試:.........................................................27 5總結(jié)........................................................................28 參考文獻(xiàn)......................................................................29 致 謝........................................................................27 概述 1.1設(shè)計(jì)目的 隨著信息社會的高速發(fā)展,人與人之間的聯(lián)系越來越頻繁,通訊方式越來越多樣化,如何保證與朋友、同學(xué)、同事、領(lǐng)導(dǎo)、親戚等之間的聯(lián)系,并能方便快捷的查找、記錄、修改其相關(guān)通訊信息。僅靠以前單獨(dú)的手工記錄已遠(yuǎn)遠(yuǎn)不能滿足當(dāng)前的需要。 開發(fā)一個通訊錄管理系統(tǒng),借助計(jì)算機(jī)可以方便、快捷、靈活的管理個人的朋友及相關(guān)人員的通訊信息,了解友人相關(guān)信息,幫助與友人保持聯(lián)絡(luò)。 所以設(shè)計(jì)一個通訊錄管理系統(tǒng)管理各人的通訊信息是是非必要的。 設(shè)計(jì)“通訊錄管理系統(tǒng)”使其具有數(shù)據(jù)插入、修改、刪除、顯示和查詢等功能。(1)數(shù)據(jù)包括:人名、工作單位、電話號碼和E-mail地址。(2)可對記錄中的姓名和電話號碼進(jìn)行修改。(3)可增加或刪除記錄。(4)可顯示所有保存的記錄。(5)可按人名或電話號碼進(jìn)行查詢。 1.2設(shè)計(jì)要求 建立通訊錄信息,信息至少包含姓名、住址、單位、固定電話、移動手機(jī)、分類(如同事、朋友、同學(xué)、家人等)、E-mail、QQ等。 該系統(tǒng)提供添加、刪除、修改和查找功能,其中按姓名方式刪除、修改,按姓名、單位、分類方式查找。 將通訊錄保存在文件中。能夠輸出通訊錄中的信息。 1.3系統(tǒng)功能需求分析 主要包含一下多種功能: 添加:添加通訊錄記錄 顯示:顯示通訊錄記錄 刪除:刪除通訊錄記錄 查詢:查詢通訊錄記錄 修改:修改通訊錄記錄 保存:將信息保存到文件 本系統(tǒng)為通訊錄管理系統(tǒng),可由用戶自由添加,刪除和修改信息,還可以將通訊錄信息導(dǎo)出到文本文檔,極大的方便了用戶的使用。 總體設(shè)計(jì) 思路:我們首先設(shè)計(jì)出了主函數(shù),然后根據(jù)去要實(shí)現(xiàn)的功能分別設(shè)計(jì)錄入聯(lián)系人信息、瀏覽、查詢、修改、刪除功能的子函數(shù)。刪除函數(shù)的設(shè)計(jì)是首先從文件內(nèi)找到要刪除的人,然后通過寫一個實(shí)現(xiàn)刪除目的的FOR循環(huán)實(shí)現(xiàn)刪除。修改也大體和刪除相同,添加函數(shù)在設(shè)計(jì)時通過申請一片空間,然后通過指針將需要添加的信息添加進(jìn)去,從而實(shí)現(xiàn)添加功能。 2.1總體功能模塊圖 圖2.1 總體功能模塊圖 添加:可以添加通訊錄記錄,依次輸入編號、姓名、年齡、電話號碼、通訊地址、電子郵箱后,會提示是否繼續(xù)添加。 顯示:可以以表格形式輸出所有通訊錄里的記錄。 刪除:輸入欲刪除的那個人的名字后,會自動刪除他(她)的記錄內(nèi)容。查詢:可以選擇用姓名、電話、地址三種方式查詢。 修改:輸入欲修改的那個人的名字后,再依次輸入編號、姓名、年齡、電話號碼、通訊地址、電子郵箱即可完成修改。 保存:輸入文件名(帶后綴名)后,即可將通訊錄信息保存到文件。運(yùn)行所需環(huán)境:win7及以下各版本windows,visual C++6.0。2.2程序的數(shù)據(jù)設(shè)計(jì) 該系統(tǒng)用下面六個功能模塊編寫,每個模塊執(zhí)行不同的功能,體現(xiàn)了模塊化設(shè)計(jì)的思想。下面六個模塊都是利用C語言文件,向文件中追加數(shù)據(jù)、修改數(shù)據(jù)、查詢數(shù)據(jù)和除數(shù)據(jù)。 創(chuàng)建:用fopen()建立一個文本文件,然后用fprintf()向其中輸入數(shù)據(jù)(例如,向文件中輸入“姓名”,“地址”等),并對文件進(jìn)行命名。 添加:可以添加通訊錄記錄,利用C語言文件,向文件中按順序輸入姓名、住址、單位、固定電話、手機(jī)號碼、分類(如同事、朋友、同學(xué)、家人等)、E-mail、QQ,再用fclose()函數(shù)關(guān)閉并保存文件。 輸出:也是用通過循環(huán)依次輸出文件中的數(shù)據(jù),即輸出所有通訊錄里的記錄。刪除:輸入你要刪除的人的姓名后,系統(tǒng)會自動刪除他(她)的記錄,在刪除通過switch語句滿足提示你確認(rèn)刪除的功能,只有等你確認(rèn)刪除后才會刪除。查找:為了滿足用戶的實(shí)際需求,設(shè)計(jì)了三種查詢方式,可以用姓名、單位、分類三種方式查找通訊錄記錄。這里用到strcmp()函數(shù),通過比較字符串是否相同來判別是否找到相關(guān)信息,找到后,就把文件中的數(shù)據(jù)賦給對應(yīng)的變量,再把變量所帶的值輸出到屏幕上。 修改:輸入你要修改的那個人的姓名后,系統(tǒng)會查找該通訊錄文件(此時用發(fā)ftell()函數(shù)來跟蹤文件指針的指向地址,找到個人的記錄后,會顯示他(她)的記錄,然后通過fseek()函數(shù)來找到修改處的地址,然后用戶再依次輸入他(她)的相關(guān)信息來替代以前的記錄。 保存:用到fclose()函數(shù),每次操作成功后會自動保存到指定的文件中。 3詳細(xì)設(shè)計(jì) 3.1功能及工作流程圖 ①添加:添加通訊錄記錄,依次輸入編號、姓名、年齡、電話號碼、通訊地址、電子郵箱后,會提示是否繼續(xù)添加。 圖3.1(1)添加流程圖 ②顯示:以表格形式輸出所有通訊錄里的 圖3.1(2)顯示流程圖 ③刪除::輸入欲刪除的那個人的名字后,會自動刪除他(她)的記錄內(nèi)容。 圖3.1(3)刪除流程圖 ④查詢:可以選擇用姓名、電話、地址三種方式查詢。 圖3.1(4)查詢流程圖 ⑤修改:輸入欲修改的那個人的名字后,再依次輸入編號、姓名、年齡、電話號碼、通訊地址、電子郵箱即可完成修改。 圖3.1(5)修改流程圖 3.2源程序代碼 #include typedef struct Person pe[80]; int menu_select() { char c;do{ system(“cls”); printf(“tt *****通訊錄***** n”); printf(“tt┌───────┐n”); printf(“tt│ 1.添加記錄 │n”);printf(“tt│ 2.顯示記錄 │n”);printf(“tt│ 3.刪除記錄 │n”);printf(“tt│ 4.查詢記錄 │n”);printf(“tt│ 5.修改記錄 │n”);{ char score; /*編號*/ char name[10]; /*姓名*/ char num[15]; /*號碼*/ char email[20];char age[8];char adds[20]; /*郵箱*/ /*年齡*/ /*住址*/ }Person; } printf(“tt│ 6.保存記錄 │n”);printf(“tt│ 0.退出程序 │n”);printf(“tt└───────┘n”);printf(“tt請您選擇(0-6):”);c=getchar(); }while(c<'0'||c>'6');return(c-'0'); int Input(Person per[],int n){ gets(x); int i=0; char sign,x[10]; while(sign!='n'&&sign!='N'){ printf(“t編號:”); scanf(“t%d”,&per[n+i].score);printf(“t姓名:”); scanf(“t%s”,per[n+i].name);printf(“t年齡:”);scanf(“t%s”,per[n+i].age);printf(“t電話號碼:”);scanf(“t%s”,per[n+i].num);printf(“t通訊住址:”);scanf(“t%s”,per[n+i].adds);printf(“t電子郵箱:”);scanf(“t%s”,per[n+i].email); } } printf(“nt是否繼續(xù)添加?(Y/N)”);scanf(“t%c”,&sign);i++; return(n+i); void Display(Person per[],int n) { int i; printf(“--------n”); /*格式*/ printf(“%-5d%-8s%-6s%-13s%-15s%-15sn”,per[i-1].score,per[i-1].name,per[i-1].age,perprintf(“編號 姓名 年齡 電話號碼 通訊地址 電子郵箱n”);printf(“--------n”); for(i=1;i { [i-1].num,per[i-1].adds,per[i-1].email); } printf(“--------n”);system(“pause”);if(i>1&&i%10==0) { } printf(“t----n”);printf(“t”);system(“pause”); printf(“t----n”);} int Delete_a_record(Person per[],int n){ } char s[20];int i=0,j; printf(“t請輸入想刪除記錄中的名字:”);scanf(“%s”,s); while(strcmp(per[i].name,s)!=0&&i } for(j=i;j } printf(“ttt已經(jīng)成功刪除!n”);return(n-1);strcpy(per[j].num,per[j+1].num);strcpy(per[j].name,per[j+1].name);strcpy(per[j].age,per[j+1].age);strcpy(per[j].adds,per[j+1].adds);strcpy(per[j].email,per[j+1].email);per[j].score=per[j+1].score;printf(“t通訊錄中沒有此人!n”);return(n);void Query_a_record(Person per[],int n){ int m;printf(“tn請選擇查詢方式:n”); printf(“t┌──────┐n”); printf(“t│1------姓名 │n”); printf(“t│2------電話 │n”); printf(“t│3------地址 │n”); printf(“t│4------返回 │n”); printf(“t└──────┘n”); printf(“請選擇:”); scanf(“%d”,&m); while(m!=1&&m!=2&&m!=3&&m!=4) { if(m==1){ char s[20];int i=0; printf(“t請輸入想查詢的姓名:”);scanf(“t%s”,s); while(strcmp(per[i].name,s)!=0&&i } printf(“輸入錯誤,請重新選擇:”);scanf(“%d”,&m); };} return; printf(“t此人編號: %dn”,per[i].score);printf(“t此人年齡: %sn”,per[i].age);printf(“t電話號碼: %sn”,per[i].num);printf(“t通訊地址: %sn”,per[i].adds);printf(“t電子郵箱: %sn”,per[i].email);if(m==2){ char s[20];int i=0; printf(“t請輸入想查詢的電話:”);scanf(“t%s”,s); while(strcmp(per[i].num,s)!=0&&i };} printf(“t此人編號: %dn”,per[i].score);printf(“t此人姓名: %sn”,per[i].name);printf(“t此人年齡: %sn”,per[i].age);printf(“t通訊地址: %sn”,per[i].adds);printf(“t電子郵箱: %sn”,per[i].email); } if(m==3){ };char s[20];int i=0; printf(“t請輸入想查詢的地址:”);scanf(“t%s”,s); while(strcmp(per[i].adds,s)!=0&&i } printf(“t此人編號: %dn”,per[i].score);printf(“t此人姓名: %sn”,per[i].name);printf(“t此人年齡: %sn”,per[i].age);printf(“t電話號碼: %sn”,per[i].num);printf(“t電子郵箱: %sn”,per[i].email);printf(“t通訊錄中沒有此人!n”);return; void Change(Person per[],int n){ char s[20];int i=0; printf(“t請輸入想修改的記錄中的名字:”);scanf(“%s”,s); while(strcmp(per[i].name,s)!=0&&i printf(“t通訊錄中沒有此人!n”); return; } printf(“t編號:”); scanf(“t%d”,&per[i].score); printf(“t姓名:”); scanf(“t%s”,per[i].name); printf(“t年齡:”); scanf(“t%s”,per[i].age);printf(“t電話號碼:”); scanf(“t%s”,per[i].num); printf(“t通訊住址:”); scanf(“t%s”,per[i].adds);printf(“t電子郵箱:”);scanf(“t%s”,per[i].email);printf(“t修改成功!”);} void WritetoText(Person per[],int n) { int i=0; FILE *fp; char filename[20]; printf(“t保存到文件n”); printf(“t請輸入所保存的文件名:”); scanf(“t%s”,filename); if((fp=fopen(filename,“w”))==NULL) /*定義文件指針*/ /*定義文件名*/ /*輸入文件名*/ { } fprintf(fp,“****************************************** 通 訊 錄printf(”t無法打開文件n“);system(”pause“);return; ******************************************n”);fprintf(fp,“編號 姓名 年齡 電話號碼 通訊地址 電子郵箱n”);; fprintf(fp,“%-3dt%-6st%-3st%-13st%-20st%-20sn”,per[i].score,per[i].name,per[i].agwhile(i ;fprintf(fp,“***************************************共有%d 條記錄 } fprintf(fp,”----------------------------n“)i++; ****************************************n”,n); } void main() /*主函數(shù)*/ { int n=0;fclose(fp); /*關(guān)閉文件*/ printf(“保存成功!n”);for(;;){ switch(menu_select()) { case 1: printf(“nt添加記錄到通訊錄n”); n=Input(pe,n);break; case 2: printf(“nttt 通訊錄記錄表n”);Display(pe,n); break; case 3: printf(“nt從通訊錄中刪除記錄n”);n=Delete_a_record(pe,n); printf(“t”); system(“pause”);break; case 4: printf(“nt在通訊錄中查找記錄n”);Query_a_record(pe,n); printf(“t”); system(“pause”); break; case 5: /*添加記錄*/ /*顯示記錄*/ /*刪除記錄*/ /*查找記錄*/ printf(“nt修改通訊錄中的記錄n”); Change(pe,n); printf(“t”); system(“pause”); break; case 6: printf(“nt保存功能n”); WritetoText(pe,n); printf(“t”); system(“pause”); break; case 0: printf(“ntt謝謝使用,再見!n”); printf(“ntt”); system(“pause”); exit(0); } } } /*修改數(shù)據(jù)*/ /*保存數(shù)據(jù)*/ /*結(jié)束程序*/ 4調(diào)試分析 調(diào)試的意義和目的:在管理信息系統(tǒng)的開發(fā)過程中,面對著錯綜復(fù)雜的各種問題,人的主觀認(rèn)識不可能完全符合客觀現(xiàn)實(shí),開發(fā)人員之間的思想交流也不可能十分完善。所以,在管理信息系統(tǒng)開發(fā)周期的各個階段都不可避免地會出現(xiàn)差錯。開發(fā)人員應(yīng)力求在每個階段結(jié)束之前進(jìn)行認(rèn)真、嚴(yán)格的技術(shù)審查,盡可能早的發(fā)現(xiàn)并糾正錯誤,否則等到系統(tǒng)投入運(yùn)行后再回頭來改正錯誤將在人力、物力上造成很大的浪費(fèi),有時甚至導(dǎo)致整個系統(tǒng)的癱瘓。然而,經(jīng)驗(yàn)表明,單憑審查并不能發(fā)現(xiàn)全部差錯,加之在程序設(shè)計(jì)階段也不可避免還會產(chǎn)生新的錯誤,所以,對系統(tǒng)進(jìn)行調(diào)試是不可缺少的,是保證系統(tǒng)質(zhì)量的關(guān)鍵步驟。統(tǒng)計(jì)資料表明,對于一些較大規(guī)模的系統(tǒng)來說,系統(tǒng)調(diào)試的工作量往往占程序系統(tǒng)編制開發(fā)總工作量的40%以上。 調(diào)試的目的在于發(fā)現(xiàn)其中的錯誤并及時糾正,所以在調(diào)試時應(yīng)想方設(shè)法使程序的各個部分都投入運(yùn)行,力圖找出所有錯誤。錯誤多少與程序質(zhì)量有關(guān)。即使這樣,調(diào)試通過也不能證明系統(tǒng)絕對無誤,只不過說明各模塊、各子系統(tǒng)的功能和運(yùn)行情況正常,相互之間連接無誤,系統(tǒng)交付用戶使用以后,在系統(tǒng)的維護(hù)階段仍有可能發(fā)現(xiàn)少量錯誤并進(jìn)行糾正,這也是正常的。 4.1測試 1).顯示的主菜單界面: 圖4.1(1)主菜單界面 2).添加界面: 圖4.1(2)添加界面 3).顯示界面: 圖4.1(3)顯示界面 4).刪除界面: 圖4.1(4)刪除前界面 刪除后,通訊錄里的顯示記錄: 圖(4)刪除后界面 5).查詢界面:以姓名查詢方式為例: 圖4.1(5)查詢界面 6).修改界面: 圖4.1(6)修改前界面 修改后,通訊錄里的顯示記錄: 圖4.1(6)修改后界面 7).保存界面: 圖4.1(7)保存界面 通訊錄.txt 文件截圖: 圖4.1文件截圖 4.2問題思考與調(diào)試: 1.當(dāng)我在進(jìn)行刪除、查詢、修改、保存等功能時,以查詢?yōu)槔?,輸入名字按回車后,雖然會顯示該人的所有記錄,但是顯示后,它馬上自動消失了,還沒來得及等我看內(nèi)容。因此,向別人請教后,在一些地方加入了system(“pause”);這個語言,用來對某項(xiàng)操作完成后進(jìn)行暫停。 2.現(xiàn)在這個程序的界面?zhèn)€人感覺很清爽。但在最初,每次進(jìn)行一項(xiàng)操作,運(yùn)行窗口里的內(nèi)容會一直保留著,感覺很雜亂,如下圖(添加后,進(jìn)行顯示操作): 圖4.2分析圖 之后,我去網(wǎng)上尋求解決辦法,知道可以使用system(“cls”);這一語句可以解決這個問題,最后,修改成功。5總結(jié) 這次的程序?qū)嵲O(shè)計(jì)實(shí)驗(yàn)是對我們進(jìn)入大學(xué)以來學(xué)習(xí)程序設(shè)計(jì)語言結(jié)果的一次大檢驗(yàn)。自己動手,自己發(fā)現(xiàn)和解決問題。發(fā)現(xiàn)了自己的許多不足。平時沒有掌握好的知識在這次實(shí)驗(yàn)中徹底暴露出來,經(jīng)過不斷思考,不斷查閱資料和上機(jī)運(yùn)行,解決其中大部分問題,當(dāng)然還存在一些問題沒有解決。我相信在以后的學(xué)習(xí)能夠解決好它們。但是,收獲還是不小的,我不僅對C的操作有了進(jìn)一步的掌握,還了解到了程序設(shè)計(jì)的書寫風(fēng)格及其注釋的格式。 當(dāng)我選擇通訊錄這個題目時,一開始想運(yùn)用大量鏈表及指針來完成,但是在慢慢琢磨之后,覺得這個不一定要用鏈表,于是改變了編程思路。當(dāng)然還有不少文件的讀寫問題,不過還是通過不斷測試之后順利解決了。另外一點(diǎn)要說的就是這個程序用了很多的循環(huán),因此對于循環(huán)的控制要十分小心,有時while和do-while的區(qū)別也是十分重要的。 還有一點(diǎn)體會就是,書上和老師教的內(nèi)容是有限的,我們需要不斷地靠自己去學(xué)習(xí),向他人請教,了解和掌握更多的知識,這樣我們才能編出更好的C程序。 總體來說,這次C語言程序設(shè)計(jì)實(shí)驗(yàn)還是比較成功的,雖然最終程序還存在一些不足,但能取得這樣的成績我還是比較高興的。 最后,要感謝學(xué)校為我們提供這次實(shí)驗(yàn)機(jī)會,也要感謝老師的教導(dǎo)和好心人對我的幫助與支持。 參考文獻(xiàn) [1]譚浩強(qiáng),張基溫。C語言程序設(shè)計(jì)教程。第三版。北京:高等教育出版社,2006 [2]譚浩強(qiáng),張基溫。C語言習(xí)題集與上機(jī)指導(dǎo)。第三版。北京:高等教育出版社,2006 [3]譚浩強(qiáng)。C程序設(shè)計(jì)(第三版)。北京:清華大學(xué),2005 [4]譚浩強(qiáng)。C程序設(shè)計(jì)(第二版)。北京:清華大學(xué),1999 [5]林建秋,韓靜萍,等.C語言程序設(shè)計(jì)【M】.電子工業(yè)出版社,2004.[6]譚浩強(qiáng).C語言程序設(shè)計(jì)【M】.清華大學(xué)出版社,2006.[7]黃維通.C語言設(shè)計(jì)教程.清華大學(xué)出版社,2005.[8]王成瑞.C語言程序設(shè)計(jì).中國水利水電出版社,2005.[9]張基溫.C語言程序設(shè)計(jì)案例教程.清華大學(xué)出版社,2004.[10]蘇小紅,陳惠鵬.C語言大學(xué)實(shí)用教程【M】.電子工業(yè)出版社,2007.致 謝 在這里我要感謝楊書鴻老師,她對我進(jìn)行了無私的指導(dǎo)和幫助,不厭其煩的幫助進(jìn)行論文的修改和改進(jìn)。另外,在校圖書館查找資料的時候,圖書館的老師也給我提供了很多方面的支持與幫助。在此向幫助和指導(dǎo)過我的各位老師表示最中心的感謝!感謝這篇論文所涉及到的各位學(xué)者,如果沒有各位學(xué)者的研究成果的幫助和啟發(fā),我將很難完成本篇論文的寫作。感謝我的同學(xué)和朋友,在我寫論文的過程中給予我很多素材,還在論文的撰寫和排版等過程中提供熱情的幫助。由于我的學(xué)術(shù)水平有限,所寫論文難免有不足之處,懇請各位老師和學(xué)友批評和指正! 黑龍江工程學(xué)院 第一章 問題分析和任務(wù)定義 1.1 問題分析 問題: 編寫一個通訊錄管理系統(tǒng)。要求包括通訊錄建立、增加號碼、刪除號碼、查詢號碼(按姓名、按號碼)、修改號碼、號碼分組、打印通訊錄(全部或分組號碼)等功能,并設(shè)計(jì)主控菜單和子菜單供用戶選擇要執(zhí)行的操作。 分析: 實(shí)現(xiàn)以下功能: 1)通訊錄編輯(添加、刪除); 2)按不同的項(xiàng)進(jìn)行查找; 3)對已存在的通訊錄按不同的項(xiàng)排序; 4)將通訊錄寫入文件; 5)從文件讀入通訊錄。 1.2 任務(wù)定義 創(chuàng)建一個鏈表,每個節(jié)點(diǎn)有姓名和號碼以及關(guān)系三個信息。增加號碼操作為增加節(jié)點(diǎn),刪除號碼操作為刪除節(jié)點(diǎn),查找號碼為鏈表的遍歷。每個功能以函數(shù)的形式出現(xiàn),由主控菜單控制。并以文件的形式對號碼信息進(jìn)行保存。 第二章 詳細(xì)設(shè)計(jì) 主函數(shù)(main()函數(shù))是通過一個多分支語句(switch(i)語句)實(shí)現(xiàn)的。顯示菜單函數(shù)(displaymenu()函數(shù))顯示與用戶交互的界面。以下是各個模塊實(shí)現(xiàn)程序各項(xiàng)功能的函數(shù)的詳細(xì)設(shè)計(jì): 1、插入新的記錄:insert()函數(shù) 定義變量,設(shè)計(jì)loop模塊,模塊的功能是用來輸入記錄:輸入姓名、性別、電話號碼、地址的信息。用for語句查找是否輸入了與原有記錄相同的記錄,用strcmp 函數(shù)比較,if 語句判斷,如果輸入了重復(fù)的記錄,提示信息:“此記錄已存在,請重新輸入!”并且用 goto語句返回到loop,重新輸入信息。設(shè)計(jì)一個a模塊:鍵盤輸入一個字符,必須是“Y”“y”“N”“n”,否則重新輸入。最后if 語句判斷變量的值是否重新輸入信息,如果輸入的是“Y”或“y”,返回到loop,黑龍江工程學(xué)院 用戶可以輸入下一條信息,直到用戶輸入“N”或“n”返回主界面。每插入一條記錄n的值加1。功能的實(shí)現(xiàn)見源程序: 2、示好友的信息:display()函數(shù) 定義整型變量i用來循環(huán)輸出記錄。分別輸出每條記錄,并輸出記錄的個數(shù)。 3、查找好友的信息search()函數(shù) 定義字符型變量c,字符型數(shù)組a,定義loop模塊,功能:通過鍵盤輸入要查找的信息。首先顯示提示信息:“輸入你要查找的好友的姓名”然后從鍵盤輸入姓名。For語句循環(huán)內(nèi)嵌if語句,用strcmp 函數(shù)查找信息,并且顯示該記錄的所有信息,并跳出循環(huán)。再用for 語句內(nèi)嵌if語句判斷,如果沒有查到顯示提示信息:“如果沒有查到相關(guān)語句,是否重新查找(Y/N)?定義abc模塊的功能輸入一個字符(“Y”或“y”“N”“n”)用來判斷是否重新查找。如果輸入“Y”或“y”,則用goto語句返回loop重新查找。否則令i的值為n跳出循環(huán)。最后返回主界面。 4、刪除好友信息:del()函數(shù) 首先定義字符數(shù)組、變量和a、b兩個goto標(biāo)識符。在a模塊中用scanf函數(shù)輸入要刪除的好友的姓名,用for循環(huán)和if 語來實(shí)現(xiàn)對好友的查找,如果找到記錄末尾,提示查無此人。在b模塊中,用來實(shí)現(xiàn)刪除功能。先確認(rèn)是否刪除,如果鍵盤輸入Y 或y來確認(rèn)要刪除再執(zhí)行for循環(huán),通過strcmpy函數(shù)把后一條記錄復(fù)制到前一條記錄。進(jìn)行刪除記錄后,并把原末尾記錄數(shù)據(jù)賦空字符,按任意鍵刪除,按任意鍵返回主菜單。 5、修改記錄:modify()函數(shù) 定義了a、b兩個goto標(biāo)識符。在a模塊中,用scanf函數(shù)輸入要修改人的姓名,用for 循環(huán)、if語句及strcmp函數(shù)找到該姓名的記錄,若到記錄末尾提示“查無此人”是否繼續(xù)重新輸入姓名,黑龍江工程學(xué)院 如果重新輸入姓名再用goto語句再執(zhí)行重新查找。在b模塊中,用于修改記錄,如果要修改記錄則從鍵盤輸入Y或y,用scanf函數(shù)來輸入新的記錄數(shù)據(jù)來實(shí)現(xiàn)修改記錄。 6、排序:sort()函數(shù) 選擇法排序的方法。定義變量i,j,用于循環(huán),定義4個字符型數(shù)組,用于替換的中間變量;用兩個for循環(huán)語句,用strcmp函數(shù)比較。按姓名升序排序。比較前一條記錄和后一條記錄的姓名,如果strcmp函數(shù)值大于0,則將這兩條記錄的所有信息替換,4個字符型數(shù)組用作替換的中間變量。最后調(diào)用display()(顯示結(jié)果)顯示排序后的結(jié)果。 第三章 程序編碼 #include 黑龍江工程學(xué)院 void format();int back(){ cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫): ”; char back; cin>>back; if(back=='R'||back=='r') return 1; else return 0;} void print(int i){ cout<<“學(xué)號:”< cout<<“姓名:”< cout<<“地址:”< cout<<“電話號碼:”< cout<<“郵編:”< cout<<“E_MAIL:”< <<“tt★★★★★★★★★★★★★★★★★★★★★★★★★★” < <<“tt※ ※” < <<“tt※ 通 迅 錄 ※” < <<“tt※ ※” < <<“tt※ 1.通訊錄編輯.4.按序排列.※” < <<“tt※ ※” < <<“tt※ 2.查詢聯(lián)系人.5.將文件讀入程序.※” < <<“tt※ ※” < <<“tt※ 3.將資料寫入文件.6.格式化(慎用).※” < <<“tt※ ※” < <<“tt★★★★★★★★★★★★★★★★★★★★★★★★★★” < <<“tt ”< <<“ttt選擇 :”;cin>>select1;switch(select1) 黑龍江工程學(xué)院 { case '1':cout<<“(1)添加:”< cout<<“(2)刪除:”< cout<<“(3)修改:”< char select2; cout<<“ 請選擇:”< cin>>select2; switch(select2) { case '1':cout<<“ 輸入添加的資料:”< char no[13];char name[20];char address[100];char tel_no[12];char post_code[7];char e_mail[40]; cout<<“ 輸入學(xué)號:”< cin>>no; cout<<“ 輸入姓名:”< cin>>name; cout<<“ 輸入地址:”< cin>>address; cout<<“ 輸入電話號碼:”< cin>>tel_no; cout<<“ 輸入郵編:”< cin>>post_code;cout<<“ 輸入E_mail:”< cin>>e_mail; a.add(no,name,address,tel_no,post_code,e_mail); cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫): ”; char back_add; cin>>back_add; if(back_add=='R'||back_add=='r') goto top; else goto bottom; break; case '2':cout<<“ 輸入要刪除人的姓名:”< char name2[20]; cin>>name2; a.del(name2); cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫): ”; 黑龍江工程學(xué)院 “; ”; char back_del; cin>>back_del; if(back_del=='R'||back_del=='r') goto top; else goto bottom; break;case '3':cout<<“ 輸入需要修改人的姓名:”< char name3[20]; cin>>name3; if(a.correct(name3)) goto top; else goto bottom; break;} break;case '2':cout<<“(1)根據(jù)姓名查找”< cout<<“ 輸入姓名: ”; cin>>name4; a.find2(name4); cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫): char back_f1;cin>>back_f1;if(back_f1=='R'||back_f1=='r') goto top;else goto bottom;break;case '2':char no4[13];cout<<” 輸入學(xué)號: “;cin>>no4;a.find1(no4); cout<<” 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫): char back_f2;cin>>back_f2; 黑龍江工程學(xué)院 “; ”; if(back_f2=='R'||back_f2=='r') goto top; else goto bottom; break;} break;case '3':a.write();cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫): ”;char back_w;cin>>back_w;if(back_w=='R'||back_w=='r') goto top;else goto bottom;break;case '4':cout<<“(1)按學(xué)號排序:”< cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫): char back;cin>>back;if(back=='R'||back=='r') goto top;else goto bottom;break;case '2':a.list2();cout<<” 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫): } char back1;cin>>back1;if(back1=='R'||back1=='r')goto top;else goto bottom;break; 黑龍江工程學(xué)院 break;case '5':a.read(); cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫): ”; char back_r; cin>>back_r; if(back_r=='R'||back_r=='r') goto top; else goto bottom; break;case '6':cout<<“ 請確認(rèn)刪除所有資料!(Y/N)”; char select5; cin>>select5; if(select5=='Y'||select5=='y') a.format(); cout<<“ 返回還是回到主菜單(T為退出,R為回到主菜單,不計(jì)大小寫): ”; char back_f; cin>>back_f; if(back_f=='R'||back_f=='r') goto top; else goto bottom; break;} bottom:cout<<“ ★★★★★★★★★★★★★★★★★★★★★★★ ”< void inter::add(char no[13],char name[20],char address[100],char tel_no[12],char post_code[7],char e_mail[40]){ int x=1;for(int i=0;i<35;i++){ if(!strcmp(st[i].no,“0”)) { strcpy(st[i].address,address); strcpy(st[i].e_mail,e_mail); strcpy(st[i].name,name); strcpy(st[i].no,no); strcpy(st[i].post_code,post_code); strcpy(st[i].tel_no,tel_no); x=0; } 黑龍江工程學(xué)院 if(x==0) break;} } //刪除聯(lián)系人 void inter::del(char name[20]){ int x=1;for(int i=0;i<35;i++){ if(!strcmp(st[i].name,name)) { strcpy(st[i].address,“0”); strcpy(st[i].e_mail,“0”); strcpy(st[i].name,“0”); strcpy(st[i].no,“0”); strcpy(st[i].post_code,“0”); strcpy(st[i].tel_no,“0”); } else x=0;} if(x==0) cout<<“ error:輸入姓名錯誤!”< int inter::correct(char name[30]){ int x;for(int i=0;i<35;i++){ if(!strcmp(st[i].name,name)) x=i;} char select;cout<<“(1)修改姓名:”< 黑龍江工程學(xué)院 char name1[30]; cin>>name1; strcpy(st[x].name,name1); cout<<“ 修改成功!”< return back(); break;case '2':cout<<“ 輸入要修改的學(xué)號:”; char no1[13]; cin>>no1; strcpy(st[i].no,no1); cout<<“ 修改成功!”< return back(); break;case '3':cout<<“ 輸入要修改的地址:”; char address1[100]; cin>>address1; strcpy(st[x].address,address1); cout<<“ 修改成功!”< return back(); break;case '4':cout<<“ 輸入要修改的郵編:”; char post_code1[7]; cin>>post_code1; strcpy(st[x].post_code,post_code1); cout<<“ 修改成功!”< return back(); break;case '5':cout<<“ 輸入要修改的電話號碼:”; char tel_no1[12]; cin>>tel_no1; strcpy(st[x].tel_no,tel_no1); cout<<“ 修改成功!”< return back(); break;case '6':cout<<“ 輸入要修改的E_MAIL:”; char e_mail1[40]; cin>>e_mail1; strcpy(st[x].e_mail,e_mail1); cout<<“ 修改成功!”< return back(); break;} } //按學(xué)號查詢聯(lián)系人 黑龍江工程學(xué)院 void inter::find1(char no[13]){ int x,y=1,z=1;for(int i=0;i<35;i++){ if(!strcmp(st[i].no,no)) { x=i; z=0; } else y=0; if(z==0) break;} if(y==0) cout<<“ 輸入的學(xué)號查找不到??!”< } //按姓名查詢聯(lián)系人 void inter::find2(char name[20]){ int x,y=1,z=1;for(int i=0;i<35;i++){ if(!strcmp(st[i].name,name)) { x=i; z=0; } else y=0; if(z==0) break;} if(y==0) cout<<“ 輸入的姓名查找不到??!”< void inter::read(){ char name1[20];cout<<“ 輸入你要導(dǎo)入的文件名: ”;cin>>name1; 黑龍江工程學(xué)院 strcat(name1,“.txt”);ifstream file(name1);char line[120];char no[120];char name[120];char address[120];char post_code[120];char tel_no[120];char e_mail[120];int time=0;file.getline(line,120);while(!file.eof()){ for(int k=0;k<35;k++){ if(time==0) { strcpy(no,line); time=1; for(int i=0;i<120;i++) { if(no[i]==':') { i++; for(int j=0;j<13;j++) { st[k].no[j]=no[i]; i++; } } } file.getline(line,120,'n'); } if(time==1){ strcpy(name,line); time=2; for(int i=0;i<120;i++) { if(name[i]==':') { i++; for(int j=0;j<20;j++) { 黑龍江工程學(xué)院 st[k].name[j]=name[i]; i++; } } } file.getline(line,120,'n');} if(time== 2){ strcpy(address,line);time=3;for(int i=0;i<120;i++){ if(address[i]==':') { i++; for(int j=0;j<100;j++) { st[k].address[j]=address[i]; i++; } } } file.getline(line,120,'n');} if(time==3){ strcpy(tel_no,line);time=4;for(int i=0;i<120;i++){ if(tel_no[i]==':') { i++; for(int j=0;j<12;j++) { st[k].tel_no[j]=tel_no[i]; i++; } } } file.getline(line,120,'n');} 黑龍江工程學(xué)院 if(time==4) { strcpy(post_code,line); time=5; for(int i=0;i<120;i++) { if(post_code[i]==':') { i++; for(int j=0;j<7;j++) { st[k].post_code[j]=post_code[i]; i++; } } } file.getline(line,120,'n'); } if(time==5) { strcpy(e_mail,line); time=0; for(int i=0;i<120;i++) { if(e_mail[i]==':') { i++; for(int j=0;j<40;j++) { st[k].e_mail[j]=e_mail[i]; i++; } } } file.getline(line,120,'n'); } } } file.close();} //寫入文件 void inter::write(){ char name[20]; 黑龍江工程學(xué)院 cout<<“ 輸入要保存的文件名 ”;cin>>name;strcat(name,“.txt”);ofstream savefile(name);for(int i=0;i<35;i++){ savefile << “學(xué)號:”< savefile << “姓名:”< savefile << “地址:”< savefile << “電話號碼:”< savefile << “郵編:”< savefile << “E_MAIL:”< void inter::list1(){ for(int i=0;i<34;i++){ for(int j=0;j<35-i;j++) { if(strcmp(st[j].no,st[j+1].no)>0) { char no[13];char name[20];char address[100];char tel_no[12];char post_code[7];char e_mail[40]; strcpy(no,st[j].no); strcpy(st[j].no,st[j+1].no); strcpy(st[j+1].no,no); strcpy(name,st[j].name); strcpy(st[j].name,st[j+1].name); strcpy(st[j+1].name,name); strcpy(address,st[j].address); strcpy(st[j].address,st[j+1].address); strcpy(st[j+1].address,address); strcpy(tel_no,st[j].tel_no); 黑龍江工程學(xué)院 strcpy(st[j].tel_no,st[j+1].tel_no); strcpy(st[j+1].tel_no,tel_no); strcpy(post_code,st[j].post_code); strcpy(st[j].post_code,st[j+1].post_code); strcpy(st[j+1].post_code,post_code); strcpy(e_mail,st[j].e_mail); strcpy(st[j].e_mail,st[j+1].e_mail); strcpy(st[j+1].e_mail,e_mail); } } } for(int k=0;k<35;k++){ int x=0; if(strcmp(st[k].no,“0”)) { print(k); x=1; } if(x==1) { cout< cout<<“---------------”< } } } //按姓名排序 void inter::list2(){ for(int i=0;i<34;i++){ for(int j=0;j<35-i;j++) { if(strcmp(st[j].name,st[j+1].name)>0) { char no[13];char name[20];char address[100];char tel_no[12];char post_code[7]; 黑龍江工程學(xué)院 char e_mail[40]; strcpy(no,st[j].no); strcpy(st[j].no,st[j+1].no); strcpy(st[j+1].no,no); strcpy(name,st[j].name); strcpy(st[j].name,st[j+1].name); strcpy(st[j+1].name,name); strcpy(address,st[j].address); strcpy(st[j].address,st[j+1].address); strcpy(st[j+1].address,address); strcpy(tel_no,st[j].tel_no); strcpy(st[j].tel_no,st[j+1].tel_no); strcpy(st[j+1].tel_no,tel_no); strcpy(post_code,st[j].post_code); strcpy(st[j].post_code,st[j+1].post_code); strcpy(st[j+1].post_code,post_code); strcpy(e_mail,st[j].e_mail); strcpy(st[j].e_mail,st[j+1].e_mail); strcpy(st[j+1].e_mail,e_mail); } } } for(int k=0;k<35;k++){ int x=0; if(strcmp(st[k].no,“0”)) { print(k); x=1; } if(x==1) { cout< cout<<“-------”< } } 黑龍江工程學(xué)院 } //格式化 void inter::format(){ for(int i=0;i<35;i++){ strcpy(st[i].address,“0”); strcpy(st[i].e_mail,“0”); strcpy(st[i].name,“0”); strcpy(st[i].no,“0”); strcpy(st[i].post_code,“0”); strcpy(st[i].tel_no,“0”);} } 第四章 程序調(diào)試與測試 運(yùn)行程序,首頁顯示如下: 按1選擇通訊錄編輯,編輯通訊錄,顯示(1)添加,(2)刪除,(3)修改,運(yùn)行后結(jié)果如下: 黑龍江工程學(xué)院 第一次使用,按1添加聯(lián)系人,填入相關(guān)信息,運(yùn)行圖如下: 返回首頁,按2可以查找聯(lián)系人,可以根據(jù)姓名查找和學(xué)號查找,本次運(yùn)用學(xué)號查找,運(yùn)行如下: 返回首頁,按4可以進(jìn)行排序,可以根據(jù)姓名和學(xué)號排序,按姓名排序需要自己編輯的姓氏排序規(guī)則才能使用,本次使用學(xué)號排序,運(yùn)行如下: 將資料寫入文件功能是將編輯好的通訊錄寫入文本文件,文本文件的名字可以自己輸入。將文件讀入程序,是將文本文件中的信息讀入程序,進(jìn)行添加,修改,刪除,排序等功能。 第五章 結(jié)果分析 總體上可以滿足一般的應(yīng)用需求,但是還有一定的不足,程序運(yùn)行流暢,沒有未知錯誤。 第六章 設(shè)計(jì)創(chuàng)新及心得 黑龍江工程學(xué)院 程設(shè)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識 ,發(fā)現(xiàn),提出,分析和解決實(shí)際問題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對我們的實(shí)際工作能力的具體訓(xùn)練和考察過程.隨著科學(xué)技術(shù)發(fā)展的日新月異,當(dāng)今計(jì)算機(jī)應(yīng)用在生活中可以說得是無處不在。因此作為二十一世紀(jì)的大學(xué)來說掌握程序開發(fā)技術(shù)是十分重要的,而C++語言又是最常見,功能最強(qiáng)大的一種高級語言,因此做好C++語言課程設(shè)計(jì)是十分必要的。 通過幾天的課程設(shè)計(jì)使我們懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實(shí)際動手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過程中遇到問題,可以說得是困難重重,這畢竟第一次真真的做程序設(shè)計(jì),難免會遇到過各種各樣的問題,同時在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,對一些前面學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,比如說結(jié)構(gòu)體,指針??通過這次課程設(shè)計(jì)之后,我們把前面所學(xué)過的知識又重新溫故了一遍。 我做的是班級通訊錄的課程設(shè)計(jì),雖然是很簡單的一個小的程序,但對我來說卻是一個很大的困難。更加是第一次做課程設(shè)計(jì),所以在機(jī)房做了一個下午卻絲毫沒有進(jìn)展,最主要是不知從何開始,這個時候才知道上課老師們不厭其煩的教導(dǎo)是多么的寶貴,這個時候才后悔上課的時候沒有認(rèn)真的聽講??墒乾F(xiàn)在一切都晚了,還好時間還算是充裕,只好拿出書本重新復(fù)習(xí)一下。 開始的時候真的感覺編程是一件很無聊的事情,不過當(dāng)一個程序運(yùn)行成功的時候那種喜悅是無法言語的,那種成就感是無法比擬的。又經(jīng)過幾天的努力,終于把程序完成了,盡管程序還是有很多功能上的欠缺和漏洞,可我還是很高興的。無論如何是自己的勞動成果,是自己經(jīng)過努力得到的成績,同時也是學(xué)習(xí)C++語言的一次實(shí)踐作業(yè),自己進(jìn)步的證明。 在課程設(shè)計(jì)過程中,收獲知識,提高能力的同時,我也學(xué)到了很多人生的哲理,懂得怎么樣去制定計(jì)劃,怎么樣去實(shí)現(xiàn)這個計(jì)劃,并掌握了在執(zhí)行過程中怎么樣去克服心理上的不良情緒。因此在以后的生活和學(xué)習(xí)的過程中,我一定會把課程設(shè)計(jì)的精神帶到生活中,不畏艱難,勇往直前! 1.題目名稱 通訊錄管理系統(tǒng) 2.基本功能 (1)顯示:將所有聯(lián)系人的信息顯示出來(2)查找:按姓名、手機(jī)號碼、QQ號碼進(jìn)行查找 (3)添加:從鍵盤上錄入聯(lián)系人的有關(guān)信息,包括姓名、手機(jī)號碼、QQ號碼、家庭地址 (4)修改:根據(jù)用戶需要,修改聯(lián)系人的指定信息 (5)刪除:刪除不需要的信息 源代碼 #include char number[13];//電話 char qq[11];//qq號 char add[30];//家庭地址 };void ClearScreen()//清屏函數(shù) { system(“cls”);} void printf1()//主界面 { printf(“nnnnttt 歡迎來到通訊錄!”);printf(“nntt 請選擇操作:”);printf(“nnttt1.顯示通訊錄”);printf(“nttt2.查找通訊錄”);printf(“nttt3.添加通訊錄”);printf(“nttt4.修改通訊錄”);printf(“nttt5.刪除通訊錄”);printf(“nttt6.退出n”);} void printf2()//修改頁面 { printf(“請選擇操作:n”);printf(“t1.按姓名查找n”);printf(“t2.按手機(jī)號碼查找n”);printf(“t3.按QQ號碼查找n”);printf(“t4.返回上一頁n”);} void Show()//顯示函數(shù) { struct Per * p,person;FILE *fp;int i=0;p=&person;ClearScreen();printf(“姓名tt 電話t QQt 家庭地址nn”);if((fp=fopen(“aa.txt”,“r”))==NULL){ printf(“cannot open filen”);exit(0);} while(!feof(fp)&&fread(p,LEN,1,fp)){ printf(“%-17s%-13s%-11s%-30sn”,p->name,p->number,p->qq,p->add); i++;} if(i==0) printf(“沒有聯(lián)系人n”);else printf(“ntttttt共有%d位聯(lián)系人n”,i);fclose(fp);printf(“n按回車鍵返回上一頁”);getchar();getchar();} void Seek()//查找 { char name[17],tel[13],qq[11];int n,i;FILE *fp;struct Per * p,person;p=&person;fp=fopen(“aa.txt”,“r”);while(1){ rewind(fp);ClearScreen();printf2();printf(“請選擇您的操作:n”);scanf(“%d”,&n);if(n==1){ i=0; ClearScreen(); printf(“請輸入要查找的聯(lián)系人的姓名:n”); scanf(“%s”,name);while(!feof(fp)){ fread(p,LEN,1,fp); if(strcmp(name,p->name)==0) { i++; if(i==1) { printf(“姓名tt 電話t QQt 家庭地址nn”);} printf(“%-17s%-13s%-11s%-30sn”,p->name,p->number,p->qq,p->add); memset(p,0,LEN); } } if(i==0)printf(“沒有該聯(lián)系人的信息n”); printf(“n按回車鍵返回上一頁”);getchar();getchar();} else if(n==2){ i=0;ClearScreen();printf(“請輸入要查找的手機(jī)號碼:n”);scanf(“%s”,tel);while(!feof(fp)){ fread(p,LEN,1,fp);if(strcmp(tel,p->number)==0){ i++; if(i==1) { printf(“姓名tt 電話t QQt 家庭地址 nn”);} printf(“%-17s%-13s%-11s%-30sn”,p->name,p->number,p->qq,p->add); memset(p,0,LEN); } } if(i==0)printf(“沒有該聯(lián)系人的信息n”);printf(“n按回車鍵返回上一頁”);getchar();getchar(); } else if(n==3){ i=0;ClearScreen();printf(“請輸入要查找的QQ號碼:n”);scanf(“%s”,qq);while(!feof(fp)){ fread(p,LEN,1,fp); if(strcmp(qq,p->qq)==0) { i++; if(i==1) { printf(“姓名tt 電話t QQt 家庭地址nn”);} printf(“%-17s%-13s%-11s%-30sn”,p->name,p->number,p->qq,p->add); memset(p,0,LEN); } } if(i==0) printf(“沒有該聯(lián)系人的信息n”); printf(“n按回車鍵返回上一頁”);getchar();getchar(); } else if(n==4) break;} fclose(fp);getchar();} void Add()//添加函數(shù) { int n;FILE *fp;struct Per * p,person;p=&person; printf(“請選擇您的操作 1 添加 2 返回上一頁nn”);scanf(“%d”,&n);if(n!=1&&n!=2){ printf(“請選擇您的操作 1 添加 2 返回上一頁n”);scanf(“%d”,&n);} while(n==1){ memset(p,0,LEN);//機(jī)構(gòu)體的初始化 ClearScreen();fp=fopen(“aa.txt”,“a”);printf(“請輸入姓名n”);scanf(“%s”,p->name);printf(“請輸入手機(jī)號碼n”);scanf(“%s”,p->number);printf(“請輸入qq(沒有請輸入無)n”);scanf(“%s”,p->qq);printf(“請輸入地址n”);scanf(“%s”,p->add); fwrite(p,LEN,1,fp);fclose(fp);printf(“保存成功!n”);printf(“您想 1繼續(xù)添加 2退出n”);scanf(“%d”,&n);if(n!=1&&n!=2) { printf(“請選擇您的操作 1 添加 2 退出nn”);scanf(“%d”,&n); } } } void Alter()//修改 { char name[17],tel[13],qq[11],add[30];int n,len,i=0;FILE *fp;struct Per *p,person;p=&person;fp=fopen(“aa.txt”,“r+”);printf(“請輸入要修改的聯(lián)系人的姓名n”);scanf(“%s”,name);while(!feof(fp)&&fread(p,LEN,1,fp)){ if(strcmp(name,p->name)==0) { i++; len=ftell(fp);printf(“n姓名tt 電話t QQt 家庭地址nn”); printf(“%-17s%-13s%-11s%-30sn”,p->name,p->number,p->qq,p->add); } } printf(“n”);if(i==0){ printf(“沒有該聯(lián)系人的信息n”);getchar(); printf(“按回車鍵返回主菜單n”);} else { printf(“1.修改該聯(lián)系人的姓名n”);printf(“2.修改該聯(lián)系人的手機(jī)號碼n”);printf(“3.修改該聯(lián)系人的QQ號碼n”);printf(“4.修改該聯(lián)系人的家庭地址n”);printf(“5.修改該聯(lián)系人的全部信息n”); printf(“6.返回上一頁nn”);printf(“請輸入您的操作序號n”);scanf(“%d”,&n); switch(n) { case 1: ClearScreen();fseek(fp,len-71,SEEK_SET);printf(“請輸入姓名n”);scanf(“%s”,name); fwrite(&name,sizeof(name),1,fp);printf(“修改成功n”); printf(“按回車鍵返回主菜單n”);getchar(); break; case 2: ClearScreen();fseek(fp,len-54,SEEK_SET);printf(“請輸入手機(jī)號碼n”);scanf(“%s”,tel); fwrite(&tel,sizeof(tel),1,fp);printf(“修改成功n”); printf(“按回車鍵返回主菜單n”);getchar(); break; case 3: ClearScreen();fseek(fp,len-41,SEEK_SET);printf(“請輸入qq號碼n”);scanf(“%s”,qq); fwrite(&qq,sizeof(qq),1,fp);printf(“修改成功n”); printf(“按回車鍵返回主菜單n”);getchar(); break; case 4: ClearScreen();fseek(fp,len-30,SEEK_SET);printf(“請輸入家庭地址n”);scanf(“%s”,add); fwrite(&add,sizeof(add),1,fp);printf(“修改成功n”); printf(“按回車鍵返回主菜單n”);getchar(); break; case 5: ClearScreen();fseek(fp,len-71,SEEK_SET); printf(“請輸入姓名n”);scanf(“%s”,p->name);printf(“ 請 輸 入 手 機(jī) 號 碼n”);scanf(“%s”,p->number);printf(“請輸入n”);scanf(“%s”,p->qq);printf(“請輸入地址n”);scanf(“%s”,p->add);fwrite(p,LEN,1,fp);printf(“修改成功n”); printf(“按回車鍵返回主菜單n”);getchar(); break; case 6:; } } fclose(fp);getchar(); } qq(沒有請輸入無)void Delete()//刪除 { int i=0,j,l;char name[17];struct Per * p,person;FILE *fp,*fp1;p=&person;fp=fopen(“aa.txt”,“a+”);printf(“請輸入要刪除的聯(lián)系人的姓名n”);scanf(“%s”,name);while(!feof(fp)&&fread(p,LEN,1,fp))//顯示要刪除的聯(lián)系人的信息 { if(strcmp(name,p->name)==0) { i++; if(i==1) {printf(“姓名tt 電話t QQt 家庭地址nn”);} printf(“%-17s%-13s%-11s%-30sn”,p->name,p->number,p->qq,p->add); memset(p,0,LEN); } } rewind(fp);if(i==0)printf(“沒有該聯(lián)系人的信息n”);else { printf(“n此聯(lián)系人將被刪除n”); printf(“1.確定 2.取消n”); scanf(“%d”,&j); if(j==1) { fp1=fopen(“bb.txt”,“a”); while(!feof(fp)&&fread(p,LEN,1,fp)) { if(strcmp(name,p->name)!=0) { fwrite(p,LEN,1,fp1); } } fclose(fp); fclose(fp1); remove(“aa.txt”); rename(“bb.txt”,“aa.txt”); printf(“n該聯(lián)系人已刪除 按回車鍵返回上一頁n”);getchar();getchar(); } if(j==2) { fclose(fp);printf(“n按回車鍵返回上一頁n”);getchar();getchar(); } } } int Select()//主菜單輸入 { int n;printf(“選擇您想要的操作 請輸入序號!n”);scanf(“%d”,&n);while(n<1||n>6){ printf(“輸入錯誤,請重新輸入!n”); scanf(“%d”,&n); } return(n);} int main(){ while(1){ ClearScreen(); printf1(); switch(Select()){ case 1:ClearScreen();Show();break; case 2:ClearScreen();Seek();break; case 3:ClearScreen();Add();break; case 4:ClearScreen();Alter();break; case 5:ClearScreen();Delete();break; case 6:exit(0);} } return 0;}第三篇:通訊錄管理系統(tǒng)
第四篇:C++通訊錄管理系統(tǒng)
第五篇:通訊錄管理系統(tǒng)