C語(yǔ)言課程設(shè)計(jì)報(bào)告(通訊錄)_第1頁(yè)
C語(yǔ)言課程設(shè)計(jì)報(bào)告(通訊錄)_第2頁(yè)
C語(yǔ)言課程設(shè)計(jì)報(bào)告(通訊錄)_第3頁(yè)
C語(yǔ)言課程設(shè)計(jì)報(bào)告(通訊錄)_第4頁(yè)
C語(yǔ)言課程設(shè)計(jì)報(bào)告(通訊錄)_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

PAGEPAGE18面向過(guò)程程序設(shè)計(jì)(C語(yǔ)言)課程設(shè)計(jì)設(shè)計(jì)說(shuō)明書(shū)通訊錄系統(tǒng)起止日期:2011年01月03日至2011年01月08日學(xué)生姓名XXX班級(jí)學(xué)號(hào)成績(jī)指導(dǎo)教師(簽字)計(jì)算機(jī)與通信學(xué)院2011年01月08日

課題任務(wù)設(shè)計(jì)一個(gè)通訊錄管理系統(tǒng)。課題的主要任務(wù)是:1.對(duì)通訊錄信息有添加、查找、顯示、保存、刪除、修改等操作功能。2.可以將輸入的數(shù)據(jù)保存在文本文件中,并可以將其調(diào)出使用。我的主要任務(wù)是編寫(xiě)主函數(shù),查找模塊和修改模塊。二、設(shè)計(jì)要求建立通訊錄信息,信息至少包含姓名、住址、單位、固定電話、移動(dòng)手機(jī)、分類(如同事、朋友、同學(xué)、家人等)、E-mail、QQ等。該系統(tǒng)提供添加、刪除、修改和查找功能,其中按姓名方式刪除、修改,按姓名、單位、分類方式查找。將通訊錄保存在文件中。能夠輸出通訊錄中的信息。程序的功能設(shè)計(jì)創(chuàng)建:創(chuàng)建通訊錄文件并對(duì)其命名添加:添加通訊錄記錄輸出:顯示通訊錄記錄刪除:刪除通訊錄記錄查找:查詢通訊錄記錄修改:修改通訊錄記錄保存:將信息保存到文件中四、程序的數(shù)據(jù)設(shè)計(jì)該系統(tǒng)用下面六個(gè)功能模塊編寫(xiě),每個(gè)模塊執(zhí)行不同的功能,體現(xiàn)了模塊化設(shè)計(jì)的思想。下面六個(gè)模塊都是利用C語(yǔ)言文件,向文件中追加數(shù)據(jù)、修改數(shù)據(jù)、查詢數(shù)據(jù)和刪除數(shù)據(jù)。創(chuàng)建:用fopen()建立一個(gè)文本文件,然后用fprintf()向其中輸入數(shù)據(jù)(例如,向文件中輸入“姓名”,“地址”等),并對(duì)文件進(jìn)行命名。添加:可以添加通訊錄記錄,利用C語(yǔ)言文件,向文件中按順序輸入姓名、住址、單位、固定電話、手機(jī)號(hào)碼、分類(如同事、朋友、同學(xué)、家人等)、E-mail、QQ,再用fclose()函數(shù)關(guān)閉并保存文件。輸出:也是用通過(guò)循環(huán)依次輸出文件中的數(shù)據(jù),即輸出所有通訊錄里的記錄。刪除:輸入你要?jiǎng)h除的人的姓名后,系統(tǒng)會(huì)自動(dòng)刪除他(她)的記錄,在刪除通過(guò)switch語(yǔ)句滿足提示你確認(rèn)刪除的功能,只有等你確認(rèn)刪除后才會(huì)刪除。查找:為了滿足用戶的實(shí)際需求,設(shè)計(jì)了三種查詢方式,可以用姓名、單位、分類三種方式查找通訊錄記錄。這里用到strcmp()函數(shù),通過(guò)比較字符串是否相同來(lái)判別是否找到相關(guān)信息,找到后,就把文件中的數(shù)據(jù)賦給對(duì)應(yīng)的變量,再把變量所帶的值輸出到屏幕上。修改:輸入你要修改的那個(gè)人的姓名后,系統(tǒng)會(huì)查找該通訊錄文件(此時(shí)用發(fā)ftell()函數(shù)來(lái)跟蹤文件指針的指向地址,找到個(gè)人的記錄后,會(huì)顯示他(她)的記錄,然后通過(guò)fseek()函數(shù)來(lái)找到修改處的地址,然后用戶再依次輸入他(她)的相關(guān)信息來(lái)替代以前的記錄。保存:用到fclose()函數(shù),每次操作成功后會(huì)自動(dòng)保存到指定的文件中。如下圖所示:個(gè)人通訊錄管理系統(tǒng)個(gè)人通訊錄管理系統(tǒng)創(chuàng)建添加查找修改輸出刪除退出姓名單位分類確定刪除不刪除五、程序的函數(shù)設(shè)計(jì)下面是主函數(shù)部分:voidmain()while(1)/*通過(guò)一個(gè)無(wú)限循環(huán)來(lái)完成無(wú)數(shù)條記錄的輸入*/ { intn; printf("\n\t*******************歡迎使用通訊錄系統(tǒng)************************\n\n"); printf("\n\t創(chuàng)建,請(qǐng)按1"); printf("\n\t添加,請(qǐng)按2"); printf("\n\t查找,請(qǐng)按3"); printf("\n\t修改,請(qǐng)按4"); printf("\n\t輸出,請(qǐng)按5"); printf("\n\t刪除,請(qǐng)按6"); printf("\n\t退出,請(qǐng)按0"); printf("\n\t*************************************************************\n\n"); printf("\n請(qǐng)選擇(0--5):"); scanf("%d",&n); if(n<=6&&n>=0) { switch(n) { case1:creat();break;case2:add();break; case3:search();break; case4:modify();break; case5:output();break; case6:del();break; case0:exit(1); } printf("\n\n操作完成,請(qǐng)?jiān)俅芜x擇!"); } else printf("\n\n選擇錯(cuò)誤,請(qǐng)?jiān)俅芜x擇!"); }}上面主要是菜單部分,用來(lái)提醒用戶需要選擇哪些功能。這部分是來(lái)通過(guò)一個(gè)無(wú)限循環(huán)(用while(1))來(lái)執(zhí)行上述所有的功能模塊,不斷的輸出菜單項(xiàng)目,用switch語(yǔ)句來(lái)執(zhí)行用戶選擇的功能模塊,每一個(gè)case后面就是對(duì)應(yīng)的功能函數(shù),(比如,用戶輸入數(shù)字2,那么就是執(zhí)行添加功能,相應(yīng)的就是執(zhí)行case2后面的add()函數(shù),然后用break語(yǔ)句跳出循環(huán),再輸出主菜單,如果用戶要退出的話,只需選擇“0”就可以成功退出并且自動(dòng)將數(shù)據(jù)保存到指定的文件中。如果用戶選擇的時(shí)輸入的數(shù)據(jù)有誤的話,會(huì)提示“選擇錯(cuò)誤,請(qǐng)?jiān)俅芜x擇!”,這樣,用戶就能夠再次輸入數(shù)據(jù)。查找模塊:該查找功能分3種方式查找,姓名查找(按1),分類查找(按2),單位查找(按3)。這是通過(guò)switch語(yǔ)句來(lái)實(shí)現(xiàn),case1后面是按姓名查找函數(shù),case2后面是按分類查找函數(shù),case3后面是按單位查找函數(shù)。如果用戶要選擇一種方式查找通訊錄記錄,只需輸入對(duì)應(yīng)的數(shù)字就可以。三種方法大同小異,下面就說(shuō)明姓名查找吧!查找用戶,進(jìn)入查找界面后并且鍵入“1”后,就執(zhí)行姓名查找方式,此時(shí)界面上會(huì)顯示“請(qǐng)輸入姓名”,然后系統(tǒng)將用戶輸入的姓名賦給對(duì)應(yīng)的變量,然后用循環(huán)(用while(!feof(fp))這條語(yǔ)句來(lái)完成)來(lái)找出這個(gè)人的所有記錄,并將其輸出到屏幕上。如果沒(méi)有此人的記錄,那就會(huì)輸出“對(duì)不起,通訊錄中沒(méi)有此人的記錄”或“對(duì)不起,通訊錄中沒(méi)有此類人的記錄”或“對(duì)不起,通訊錄中沒(méi)有此單位的記錄”,這里輸出視查找方式而定。執(zhí)行查找功能后會(huì)返回主菜單,并提示用戶再次選擇。修改模塊:用戶使用這個(gè)功能的時(shí)候,界面上會(huì)顯示“請(qǐng)你輸入要修改人的姓名:”等用戶輸入數(shù)據(jù)后,系統(tǒng)會(huì)通過(guò)循環(huán)從文件中尋找此人,該過(guò)程和刪除模塊是一樣的,每次從文件中讀取數(shù)據(jù)后,便把數(shù)據(jù)賦給相應(yīng)的變量,再用該數(shù)據(jù)與用戶輸入字符串比較,如果相同,那就說(shuō)明已找到該人的數(shù)據(jù);如果不同,那就執(zhí)行下一個(gè)循環(huán),直到找出為止,在尋找過(guò)程中,用ftell()函數(shù)來(lái)跟蹤地址,修改的時(shí)候用fseek()函數(shù)來(lái)尋找地址,找到要修改的地址后,系統(tǒng)會(huì)顯示該人的所有記錄,然后輸出“請(qǐng)輸入新的姓名、住址、工作(或?qū)W習(xí))單位、固定電話、手機(jī)號(hào)碼、郵箱、QQ以及分類。”這時(shí)用戶要按順序輸入數(shù)據(jù)。用戶輸入完成后,系統(tǒng)會(huì)顯示“已修改!”并且返回主菜單。六、函數(shù)編碼及調(diào)試編寫(xiě)的程序中很容易出現(xiàn)一些低級(jí)語(yǔ)法錯(cuò)誤,(比如,有時(shí)候把%s寫(xiě)成了%d),當(dāng)然這很容易找出并且更正,主要是一些算法錯(cuò)誤很難找到,在調(diào)試的過(guò)程中,最令我頭痛的就是編寫(xiě)修改模塊時(shí)用到的ftell和fseek函數(shù),好郁悶的,改了好幾天都沒(méi)有進(jìn)展,最后在機(jī)房里的時(shí)候請(qǐng)教了一下老師,經(jīng)老師指點(diǎn)后,我就頓然開(kāi)朗啦,原來(lái)是在尋找地址的時(shí)候出了錯(cuò),但是待我修改后還是不可以,每次執(zhí)行修改的時(shí)候總是修改了別的數(shù)據(jù),不過(guò)我發(fā)現(xiàn)這個(gè)被修改的數(shù)據(jù)和我想修改的數(shù)據(jù)的都靠在一起,我就想是不是我輸入數(shù)據(jù)的時(shí)候漏掉了一個(gè)字符?本來(lái)文本文件用ftell和fseek函數(shù)的時(shí)候就特別容易出錯(cuò),所以我碰到這個(gè)麻煩的時(shí)候,心情一點(diǎn)也不好,但潛意識(shí)告訴我,我不能放棄,然后我就再把程序看了幾遍,我試著把下列的程序fprintf(fp,"%-10s%-20s%-20s%-15s%-15s%-20s%-15s%-10s",,one.addr,one.work_place,one.fixed_telephone,one.mobile_phone,one.e_mail,one.QQ,one.category);改為fprintf(fp,"%-10s%-20s%-20s%-15s%-15s%-20s%-15s%-10s\n",,one.addr,one.work_place,one.fixed_telephone,one.mobile_phone,one.e_mail,one.QQ,one.category);改的時(shí)候就加了一個(gè)轉(zhuǎn)義字符“\n”,然后我再運(yùn)行了一下,結(jié)果竟然對(duì)了,太巧了,我把整個(gè)程序仔細(xì)一看,原來(lái)是在添加和創(chuàng)建模塊的時(shí)候都有這個(gè)字符,如果后面修改的時(shí)候不加的話,文件上就會(huì)在排版上不符合導(dǎo)致在修改的時(shí)候修改錯(cuò)位置,嘿嘿,終于找到錯(cuò)誤了,好有成就感的,就是這個(gè)小小的字符害我花了好幾天時(shí)間,不過(guò)也獲得了一個(gè)教訓(xùn),那就是寫(xiě)程序的時(shí)候一定要注意前后的格式,要整體把握。七、總結(jié)這個(gè)課題是設(shè)計(jì)一個(gè)通訊錄系統(tǒng),該通訊系統(tǒng)能夠較好的管理好我們的通訊錄記錄,也擁有比較完善的功能,但是該系統(tǒng)依舊有漏洞,此程序必須按照系統(tǒng)提示的操作來(lái)執(zhí)行,不然的話就會(huì)使程序進(jìn)入死循環(huán),比如,如果我輸入字符串的長(zhǎng)度過(guò)長(zhǎng)的話,程序就會(huì)終止運(yùn)行了,并且還沒(méi)有提示;后面的刪除模塊所用的方法是用空格替代,雖然可以刪除,但達(dá)不到理想的效果。在編寫(xiě)過(guò)程中,我逐步的了解了程序模塊化設(shè)計(jì)的思想含義。在整個(gè)程序設(shè)計(jì)的過(guò)程中語(yǔ)法的錯(cuò)誤還是比較容易檢查的,但是對(duì)于那些邏輯思維的問(wèn)題方面的缺陷不易查出,因此常常出現(xiàn)系統(tǒng)提示沒(méi)有錯(cuò)誤但是仍然不能夠正常運(yùn)行的境況,盡管有很多不足之處,但我在整個(gè)系統(tǒng)程序設(shè)計(jì)的過(guò)程中,我可以感受到自己對(duì)C語(yǔ)言有了一定的掌握,對(duì)整體的把握度也提高了很多。此外編程是一項(xiàng)高精度的工作,所以我們要有規(guī)范化,標(biāo)準(zhǔn)化的代碼編寫(xiě)習(xí)慣,良好的編寫(xiě)習(xí)慣,不但有助于代碼的糾錯(cuò),也有助于不同人員之間的協(xié)作。

我們還要有模塊化思維能力,模塊化思維就是編程任何一個(gè)功能模塊或函數(shù)的時(shí)候,要多想一些,不要局限在完成當(dāng)前任務(wù)的簡(jiǎn)單思路上,想想看該模塊是否可以脫離這個(gè)系統(tǒng)存在,是否可以通過(guò)簡(jiǎn)單的修改參數(shù)的方式在其他系統(tǒng)和應(yīng)用環(huán)境下直接引用,這樣就能極大的避免重復(fù)性的工作。另外我們要重視程序的算法,在程序中,算法是靈魂,我們要努力學(xué)習(xí)各種先進(jìn)的算法,提高自己的編程能力。附:系統(tǒng)的主要程序代碼主函數(shù)部分:#include<stdio.h>#include<string.h>#include<stdlib.h>structperson{ charname[10];/*姓名*/charmobile_phone[16];/*手機(jī)號(hào)碼*/ charfixed_telephone[16];/*固定電話*/ charwork_place[20];/*工作單位*/ charaddr[20];/*家庭住址*/ chare_mail[30];/*郵箱*/ charQQ[12];/*QQ聊天軟件*/charcategory[10];/*分類*/};chardir_name[20]="e:\\通訊錄.txt";FILE*fp;voidcreat();/*創(chuàng)建一個(gè)通訊錄并命名,下次如果要打開(kāi)以前的通訊錄話,就在創(chuàng)建的時(shí)候輸入以前的文件名稱。*/voidoutput();/*輸出模塊*/voidadd();/*添加模塊*/voidmodify();/*修改模塊*/voiddel();/*刪除模塊*/voidsearch();/*查找模塊*/voidmain(){while(1)/*一次完成無(wú)數(shù)條記錄的輸入*/ { intn; printf("\n\t*******************歡迎使用通訊錄系統(tǒng)************************\n\n"); printf("\n\t創(chuàng)建,請(qǐng)按1"); printf("\n\t添加,請(qǐng)按2"); printf("\n\t查找,請(qǐng)按3"); printf("\n\t修改,請(qǐng)按4"); printf("\n\t輸出,請(qǐng)按5"); printf("\n\t刪除,請(qǐng)按6"); printf("\n\t退出,請(qǐng)按0"); printf("\n\t*************************************************************\n\n"); printf("\n請(qǐng)選擇(0--5):"); scanf("%d",&n); if(n<=6&&n>=0) { switch(n) { case1:creat();break;case2:add();break; case3:search();break; case4:modify();break; case5:output();break; case6:del();break; case0:exit(1); } printf("\n\n操作完成,請(qǐng)?jiān)俅芜x擇!"); } else printf("\n\n選擇錯(cuò)誤,請(qǐng)?jiān)俅芜x擇!"); }}查找模塊:voidsearch(){ structpersonone; intk,j=0; if((fp=fopen(dir_name,"r"))==NULL) { printf("\n不能打開(kāi)通訊錄"); getchar(); exit(1); } printf("\n姓名查找請(qǐng)按1"); printf("\n分類查找請(qǐng)按2"); printf("\n單位查找請(qǐng)按3"); printf("\n請(qǐng)選擇查找方式(按回車鍵輸入):"); scanf("%d",&k); switch(k) { case1: { chars_name[10]; printf("\n請(qǐng)輸入姓名:"); scanf("%s",s_name);while(!feof(fp)) {fscanf(fp,"%s%s%s%s%s%s%s%s",,one.addr,one.work_place,one.fixed_telephone, one.mobile_phone,one.e_mail, one.QQ,one.category); if(!strcmp(s_name,)) {printf("\n已經(jīng)查到此人,記錄為:\n"); printf("\n%-10s%-20s%-20s%-15s%-15s%-20s%-15s%-10s",,one.addr,one.work_place, one.fixed_telephone,one.mobile_phone,one.e_mail,one.QQ,one.category); j=1; } } if(!j)printf("\n對(duì)不起,通訊錄中沒(méi)有此人的記錄"); fclose(fp); } break; case2: { chars_category[10]; printf("\n請(qǐng)輸入類別:"); scanf("%s",s_category); while(!feof(fp)) { fscanf(fp,"%s%s%s%s%s%s%s%s",,one.addr,one.work_place,one.fixed_telephone, one.mobile_phone,one.e_mail, one.QQ,one.category); if(!strcmp(s_category,one.category)) { printf("\n已經(jīng)查到此類人,記錄為:\n"); printf("\n%-10s%-20s%-20s%-15s%-15s%-20s%-15s%-10s",,one.addr,one.work_place, one.fixed_telephone,one.mobile_phone,one.e_mail,one.QQ,one.category); j=1; } } if(!j)printf("\n對(duì)不起,通訊錄中沒(méi)有此類人的記錄"); fclose(fp); } break; case3: { chars_workplace[20]; printf("\n請(qǐng)輸入工作單位:"); scanf("%s",s_workplace); while(!feof(fp)) { fscanf(fp,"%s%s%s%s%s%s%s%s",,one.addr,one.work_place, one.fixed_telephone,one.mobile_phone,one.e_mail,one.QQ,one.category); if(!strcmp(s_workplace,one.work_place)) { printf("\n已經(jīng)查到此單位,記錄為:\n"); printf("\n%-10s%-20s%-20s%-15s%-15s%-20s%-15s%-10s",,one.addr,one.work_place, one.fixed_telephone,one.mobile_phone,one.e_mail,one.QQ,one.category); j=1; } } if(!j)printf("\n對(duì)不起,通訊錄中沒(méi)有此單位的記錄"); fclose(fp); } break; } }修改模塊:voidmodify(){ structpersonone; intk=0; longst; charname_modify[10]; printf("\n請(qǐng)你輸入要修改人的姓名:"); scanf("%s",name_modify); if((fp=fopen(dir_name,"r+"))==NULL) { printf("\n不能打開(kāi)通訊錄!"); getchar(); exit(1); } while(!feof(fp)) { st=ftell(f

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論