C語言程序設(shè)計-通訊錄管理系統(tǒng)_第1頁
C語言程序設(shè)計-通訊錄管理系統(tǒng)_第2頁
C語言程序設(shè)計-通訊錄管理系統(tǒng)_第3頁
C語言程序設(shè)計-通訊錄管理系統(tǒng)_第4頁
C語言程序設(shè)計-通訊錄管理系統(tǒng)_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

課程設(shè)計題目:通訊錄管理系統(tǒng)一、系統(tǒng)需求分析1、建立通訊錄新年系,信息至少包含編號、姓名、年齡、電話號碼、通訊地址等;2、能夠提供添加、刪除、查找、修改和顯示通訊錄信息等功能;3、能夠提供按不同方式查詢的功能,如按姓名或年齡等查詢;4、將通訊錄保存到文件中;5、能夠按表格方式輸出通訊錄信息。二、系統(tǒng)概要設(shè)計1、系統(tǒng)的主要功能系統(tǒng)的主要功能是實現(xiàn)基本的通訊錄的數(shù)據(jù)管理和維護。主要包括:(1)增加數(shù)據(jù)記錄:可以添加通訊錄記錄,依次輸入編號、姓名、年齡、電話號碼、通訊地址后,會提示是否繼續(xù)添加。(2)顯示數(shù)據(jù)記錄:可以以表格形式輸出所有通訊錄里的記錄。(3)刪除數(shù)據(jù)記錄:輸入欲刪除的那個人的姓名后,會自動刪除他(她)的記錄內(nèi)容。(4)查找數(shù)據(jù)記錄:可以選擇用姓名,電話,地址三種方式查詢。(5)修改數(shù)據(jù)記錄:輸入欲修改的那個人的名字后,再依次輸入編號、姓名、年齡、電話號碼、通訊地址。(6)保存數(shù)據(jù)記錄:輸入文件明(帶后綴名)后,即可將通訊錄信息保存到文件。2、系統(tǒng)的總體結(jié)構(gòu)增加數(shù)據(jù)記錄增加數(shù)據(jù)記錄顯示數(shù)據(jù)記錄刪除數(shù)據(jù)記錄查找數(shù)據(jù)記錄修改數(shù)據(jù)記錄保存數(shù)據(jù)記錄通訊錄管理系統(tǒng)3、系統(tǒng)軟件環(huán)境本程序所適用的計算機系統(tǒng)軟硬件環(huán)境要求為:硬件環(huán)境:<1>486,586及兼容機,640K基本內(nèi)存;<2>1M以上擴充內(nèi)存,10M以上的顯示內(nèi)存.軟件環(huán)境:內(nèi)置MS-DOS5.0或者Windows98,且有中文平臺.如:UCDOS等。4、數(shù)據(jù)結(jié)構(gòu)設(shè)計(1)通訊錄:typedefstruct{Charscore;Charname[10];Charnum[15];Charage[8];Charadds[20];}Person;//編號,姓名,號碼,年齡,住址Voidmain(0{intn=0;for(;;){Switch(menu_select())//主函數(shù){case1:printf(“\n\t添加記錄到通訊錄\n);ninput(pe,n);break;Case2:printf(“\n\t\t\tDisplay,n”);break;//添加記錄Case3:printf(“\n\t從通訊錄中刪除記錄\n”);n=Delete_a_record(pe,n);Printf(“\t”);system(“pause”);break;Case4:printf(“\n\t在通訊錄中查找記錄\n”);Query_a_record(pe,n);Printf(“\t”);system(“pause”);break;Case5:printf(“\n\t修改通訊錄中的記錄\n”);Change(pe,n);Printf(“\t”);system(“pause”);break;Case6:printf(“\n\t保存功能\n”);WritetoText(pe,n);Printf(“\t”);system(“pause”);break;Case0:printf(“\n\t\t謝謝使用,再見!\n”);Printf(“\n\t\t”);system(“pause”);exit(0);}}}三、系統(tǒng)的詳細設(shè)計系統(tǒng)實現(xiàn)的基本功能是通訊錄數(shù)據(jù)管理,包括:添加數(shù)據(jù)記錄、顯示數(shù)據(jù)記錄、刪除數(shù)據(jù)記錄、查找數(shù)據(jù)記錄,修改數(shù)據(jù)記錄以及保存數(shù)據(jù)記錄。(分別使用了insert()、seek()、delete()、show()、sort()等函數(shù))。其中數(shù)據(jù)的查找、數(shù)據(jù)的刪除又可通過不同的方式如按學號或姓名等進行操作。主要函數(shù)實現(xiàn)說明:1、insert()該函數(shù)可對文件的數(shù)據(jù)進行添加。在進行添加的時候需要首先打開數(shù)據(jù)文件,在該函數(shù)中調(diào)用了file1()函數(shù)將數(shù)據(jù)文件打開。之后同creatfile()中一樣的形式輸入數(shù)據(jù),輸入完之后進行保存,對插入的數(shù)據(jù)進行保存前要先確定插入點,該函數(shù)在設(shè)計時將插入點放在了文件末尾,即將添加的數(shù)據(jù)加到文件的最后。同樣以上操作為一循環(huán)過程,最后根據(jù)用戶的選擇決定循環(huán)操作是否進行。該函數(shù)與創(chuàng)建新數(shù)據(jù)文件函數(shù)除保存及被使用時間不同外,其他功能基本相同。2、show()使用該函數(shù)可以在屏幕上顯示數(shù)據(jù)文件中已經(jīng)存在的所有數(shù)據(jù)記錄。該功能設(shè)計思路比較簡單,只需先打開數(shù)據(jù)文件,讀取其中的數(shù)據(jù)記錄,然后將這些記錄按一定的形式打印在屏幕上,為是打印的效果整齊、美觀,則要對其輸出的方式、格式進行設(shè)計3、delete()該函數(shù)用來刪除不需要的數(shù)據(jù)記錄。實現(xiàn)過程為:首先輸入需要刪除的記錄的編號,將該數(shù)據(jù)逐一與以存文件中的編號進行比較,在比較過程中定義了一個變量g,并初始化為1,當找到要刪除的數(shù)據(jù)的時候,將g賦制值成0,接著就是對該記錄的刪除操作,將此記錄及其后的每一條記錄逐一用它們之后的那一條記錄替換,即實現(xiàn)了對數(shù)據(jù)的刪除。若沒有找到需要刪除的數(shù)據(jù),g的值任為1,則屏幕顯示“cannotfindthename”。在刪除記錄后需對操作結(jié)果進行保存,最后根據(jù)用戶的選擇來決定是否繼續(xù)刪除。4、seek()該函數(shù)調(diào)用了by-name()和by-number()兩個函數(shù)來實現(xiàn)不同方式的查找。具體使用什么方式查找需由用戶自己選擇,于是使用switch語句先設(shè)計一個選擇過程。當選擇按名字查找方式,就啟用by-name()函數(shù)查找,過程為先要求用戶輸入所要查找的數(shù)據(jù)名字,然后再將這個名字與以存數(shù)據(jù)名字逐個進行比較,當找到數(shù)據(jù)的時候就調(diào)用prt()函數(shù)將該數(shù)據(jù)的所有信息打印出來,否則顯示“cannotfindthename”以示沒有找到。當選擇按學號查找方式的時候,則啟用by-number()函數(shù)進行查找,過程思路與by-name()函數(shù)相同。以上過程為一循環(huán)過程,再根據(jù)用戶的選擇決定是否繼續(xù)循環(huán)操作。5、main()一個程序主函數(shù)不能少。當以上的函數(shù)均編完之后,要實現(xiàn)各個功能操作的連接,還必須有主函數(shù)將它們聯(lián)系起來,這樣才能達到理想的結(jié)果。對以上函數(shù)的連接,此程序采用了switch語句,格式清晰、容易接受。至此班級通訊錄管理的基本功能便基本實現(xiàn)。輔助函數(shù):以上介紹的是完成班級通訊錄管理這個功能,程序主要包含的函數(shù),為了使程序更有條理性或者更加完整形象,可以將主要函數(shù)經(jīng)常使用的一些功能編成一個函數(shù),這樣便可在多處很方便調(diào)用,如此程序中的file1()(用來打開數(shù)據(jù)文件的操作)、file2()(用來保存數(shù)據(jù))、prt()函數(shù)等便起到這個作用。另外還加了jm1()、jm2()進入界面、退出界面這兩個函數(shù),使本程序顯得更加完整。四、系統(tǒng)的主要源程序#include<stdio.h>//#include<stdlib.h>#include<string.h>typedefstruct{ charscore; charname[10]; charnum[15]; charage[8]; charadds[20];}Person;Personper[80];intmenu_select(){ charc; do{ system("cls"); printf("\t\t*****通訊錄*****\n"); printf("\t\t┍--------------┒\n"); printf("\t\t|1.添加記錄|\n"); printf("\t\t|2.顯示記錄|\n"); printf("\t\t|3.刪除記錄|\n"); printf("\t\t|4.查詢記錄|\n"); printf("\t\t|5.修改記錄|\n"); printf("\t\t|6.保存記錄|\n"); printf("\t\t|0.退出程序|\n"); printf("\t\t┕--------------┙\n"); printf("\t\t請您選擇(0-6):"); c=getchar(); }while(c<'0'||c>'6'); return(c-'0');}intInput(Personper[],intn){ inti=0; charsign,x[10]; while(sign!='n'&&sign!='N') { printf("\t編號:"); scanf("\t%d",&per[n+1].score); printf("\t姓名:"); scanf("\t%s",per[n+1].name); printf("\t年齡:"); scanf("\t%s",per[n+1].age); printf("\t電話號碼:"); scanf("\t%s",per[n+1].num); printf("\t通訊地址:"); scanf("\t%s",per[n+1].adds); gets(x); printf("\n\t是否繼續(xù)添加?(Y/N)"); scanf("\t%c",&sign); i++; } return(n+i);}voidDisplay(Personper[],intn){ inti; printf("----------------------------------------\n"); printf("編號姓名年齡電話號碼通訊地址\n"); printf("----------------------------------------\n"); for(i=1;i<n+1;i++) { printf("%-5d%-8s%-6s%-13s%-15s\n",per[i-1].score,per[i-1].name,per[i-1].age,per[i-1].num,per[i-1].adds); if(i>1&&i%10==0) { printf("\t----------------------------------\n"); printf("\t");system("pause"); printf("\t----------------------------------\n"); } } printf("------------------------------------\n");system("pause");}intDelete_a_record(Personper[],intn){ chars[20]; inti=0,j; printf("\t請輸入想刪除記錄中的名字:"); scanf("%s",s); while(strcmp(per[i].name,s)!=0&&i<n) i++; if(i==n) { printf("\t通訊錄中沒有此人!\n"); return(n); } for(j=i;j<n-1;j++) { 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); per[j].score=per[j+1].score; } printf("\t\t\t已經(jīng)成功刪除!\n"); return(n-1);}voidQuery_a_record(Personper[],intn){ intm; printf("\\n請選擇查詢方式:\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) { printf("輸入錯誤,請重新選擇:"); scanf("%d",&m); } if(m==1) { chars[20]; inti=0; printf("\t請輸入想查詢的姓名:"); scanf("\t%s",s); while(strcmp(per[i].name,s)!=0&&i<n) i++; if(i==n) { printf("\t通訊錄中沒有此人!\n"); return; } printf("\t此人編號:%d\n",per[i].score); printf("\t此人年齡:%s\n",per[i].age); printf("\t電話號碼:%s\n",per[i].num); printf("\t通訊地址:%s\n",per[i].adds); } if(m==2) { chars[20]; inti=0; printf("\t請輸入想查詢的電話:"); scanf("\t%s",s); while(strcmp(per[i].num,s)!=0&&i<n) i++; if(i==n) { printf("\t通訊錄中沒有此人!\n"); return; } printf("\t此人編號:%d\n",per[i].score); printf("\t此人姓名:%s\n",per[i].name); printf("\t此人年齡:%s\n",per[i].age); printf("\t通訊地址:%s\n",per[i].adds); } if(m==3) { chars[20]; inti=0; printf("\t請輸入想查詢的地址:"); scanf("\t%s",s); while(strcmp(per[i].adds,s)!=0&&i<n) i++; if(i==n) { printf("\t通訊錄中沒有此人!\n"); return; } printf("\t此人編號:%d\n",per[i].score); printf("\t此人姓名:%s\n",per[i].name); printf("\t此人年齡:%s\n",per[i].age); printf("\t電話號碼:%s\n",per[i].num); };}voidChange(Personper[],intn){ chars[20]; inti=0; printf("\t請輸入想修改的記錄中的名字:"); scanf("%s",s); while(strcmp(per[i].name,s)!=0&&i<n) i++; if(i==n) { 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].adds); printf("\t修改成功!");}voidWritetoText(Personper[],intn){ inti=0; FILE*fp; charfilename[20]; printf("\t保存到文件\n"); printf("\t請輸入所保存的文件名:"); scanf("\t%s",filename); if((fp=fopen(filename,"w"))==NULL) { printf("\t無法打開文件\n"); system("pause"); return; } fprintf(fp,"*************************通訊錄********************\n"); fprintf(fp,"編號姓名年齡電話號碼通訊地址\n"); fprintf(fp,"---------------------------------------------------\n"); while(i<n) { fprintf(fp,"%-3d\t%-6s\t%-3s\t%-13s\t%20s\n",per[i].score,per[i].name,per[i].age,per[i].num,per[i].adds); i++; } fprintf(fp,"---------------------------------------------------\n"); fprintf(fp,"*********************共有%d條記錄***************************\n",n); fclose(fp); printf("保存成功!\n");}voidmain(){ intn=0; for(;;) { switch(menu_select()) { case1:printf("\n\t添加記錄到通訊錄\n");n=Input(per,n);break; case2:printf("\n\t\t\tDisplay,n");break; case3:printf("\n\t從通訊錄中刪除記錄\n");n=Delete_a_record(per,n);printf("\t");system("pause");break;case4:printf("\n\t在通訊錄中查找記錄\n");Query_a_record(per,n);printf("\t");system("pause");break;case5:printf("\n\t修改通訊錄中的記錄\n");Change(per,n);printf("\t");system("pause");break;case6:printf("\n\t保存功能\n");WritetoText(per,n);printf("\t");system("pause");break;case0:printf("\n\t\t謝謝使用,再見!\n");printf("\n\t\t");system("pause");exit(0); } }}五、系統(tǒng)測試及調(diào)試測試是為了發(fā)現(xiàn)程序中錯誤,而執(zhí)行程序的過程。程序調(diào)試是指對程序的查錯和排錯。為了便于查錯、閱讀,在設(shè)計該程序的時候我采用了結(jié)構(gòu)化程序方法編輯,添加了盡可能多的注釋,這為我后來的調(diào)試過程帶來了很多方便。在上機調(diào)試之前我對所編的程序作了紙面上的檢查,先找出一些低級錯誤,如{}沒有搭配完整,漏寫“;號”、拼寫錯誤等。經(jīng)過仔細檢查之后進行上機調(diào)試。進行編譯,如果在編譯和連接過程中發(fā)現(xiàn)錯誤,屏幕上顯示了出錯信息,根據(jù)提示找到出錯的位置,加以改正,再進行編譯……如此反復(fù),直到順利通過編譯和連接為止。在本次實習過程中碰到的編譯、連接的錯誤主要有:1、缺少變量定義,定義位置不正確;前后有些變量前后定義和使用不一致,在錯誤信息的提示下一般還是很容易找到。需要注意的是有些函數(shù)使用同樣的變量名而表示不同的作用,因而使用要很小心,定義及定義的位置要特別留意。為減少這樣的錯誤我后來還是用不同的變量名來表示,結(jié)果引起的那些錯誤解決了。2、語法錯誤;一些語法錯誤在信息框的提示下一般是能夠排除的。3、在c語言中有些符號是不能夠一般顯示的,需要用轉(zhuǎn)義字符,我本來的目的是想打印出no兩邊的引號,但是要用\\’’才能最后輸出一個引號;注釋的時候,注釋文字應(yīng)寫在一起,中間不能包含c語言的語句,不然又引起錯誤格式不正確或是多了字符等。這又讓我學到了一點知識。編譯、連接的成功并不意味著程序的最終成功。邏輯上的錯誤機器不易檢查出來,這時需要對數(shù)據(jù)結(jié)果進行分析。運行通過后,還要對程序進行測試。要選

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論