版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)訓(xùn)報(bào)告實(shí)訓(xùn)報(bào)告題目:簡(jiǎn)易通訊錄管理系統(tǒng)院系:專業(yè):姓名:學(xué)號(hào):指導(dǎo)教師:日期:2009年9月19日桂林電子科技大學(xué)信息科技學(xué)院目錄1問(wèn)題定義…………..32系統(tǒng)設(shè)計(jì)……………………32.1總體設(shè)計(jì)………………32.2詳細(xì)設(shè)計(jì)………………42.2.1數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)…………42.2.2主控流程…………52.2.3輸入記錄模塊……………………62.2.4查詢記錄模塊……………….…62.2.5管理記錄模塊………………62.2.6輸出記錄模塊……………….…63系統(tǒng)實(shí)現(xiàn)………………………73.1編碼………………………73.1.1程序預(yù)處理……….……………73.1.2主函數(shù)main()……….………83.1.3主菜單界面………….………83.1.4保存信息并釋放內(nèi)存空間…….…………………93.1.5記錄查找(按姓名)………….…………………103.1.6輸入記錄……….…………………….…………113.1.7輸出記錄………….………………….…………113.1.8刪除記錄………….…………………….………123.2測(cè)試與調(diào)試………………………123.2.1概述………….……………123.2.2程序測(cè)試………….……………134系統(tǒng)維護(hù)………………………155歸納總結(jié)………………………165.1開發(fā)經(jīng)驗(yàn)………………………165.2設(shè)計(jì)中的不足之處……………………165.3感想和心得體會(huì)……………………16簡(jiǎn)易通訊錄管理系統(tǒng)本題目設(shè)計(jì)目的是訓(xùn)練學(xué)生的基本編程能力,了解簡(jiǎn)易通訊錄的開發(fā)流程,熟悉C語(yǔ)言的文件各種基本操作。本程序中涉及很多方面的知識(shí),通過(guò)本程序的訓(xùn)練,使學(xué)生能對(duì)C語(yǔ)言的文件操作有一個(gè)更深刻的了解,掌握對(duì)簡(jiǎn)易通訊錄實(shí)現(xiàn)的原理,進(jìn)一步開發(fā)出高質(zhì)量的通訊錄系統(tǒng)打下堅(jiān)實(shí)的基礎(chǔ)。問(wèn)題定義創(chuàng)建一個(gè)簡(jiǎn)易通訊錄管理系統(tǒng)。假設(shè)系統(tǒng)中包含輸入信息,顯示信息,增加信息,刪除信息和保存等信息。程序的運(yùn)行效果如下圖所示,選擇任意菜單后,實(shí)現(xiàn)相應(yīng)功能。在問(wèn)題定義階段要考慮題目的可行性和需求分析,接下來(lái)進(jìn)入開發(fā)階段,完成系統(tǒng)設(shè)計(jì)和系統(tǒng)實(shí)現(xiàn)的任務(wù)。系統(tǒng)設(shè)計(jì)2.1總體設(shè)計(jì)采用模塊化的程序設(shè)計(jì)方法,即將較大的任務(wù)按照一定的原則分為一個(gè)個(gè)較小的任務(wù),然后分別設(shè)計(jì)各個(gè)小任務(wù)。需要注意的是劃分出來(lái)的模塊應(yīng)該相對(duì)獨(dú)立但又相關(guān),且容易理解??梢杂媚K化層次結(jié)構(gòu)圖(即模塊圖)來(lái)分析其任務(wù)的劃分,一般從上到下進(jìn)行,最上面一層是主模塊,下面各層是其上一層模塊的逐步細(xì)化描述。通訊錄管理系統(tǒng)通訊錄管理系統(tǒng)輸入記錄模塊模塊查詢記錄模塊管理記錄模塊輸出記錄模塊從鍵盤輸入按姓名查詢添加記錄刪除記錄輸出至文件輸出至屏幕圖2.1本成績(jī)管理系統(tǒng)要求采用單鏈表實(shí)現(xiàn),如圖2.1所示,它由如下四大功能模塊組成:輸入記錄模塊。完成將數(shù)據(jù)存入單鏈表的工作。從鍵盤上逐個(gè)輸入數(shù)據(jù)。。當(dāng)從數(shù)據(jù)文件中讀入記錄時(shí),也就是把在以記錄為單位存儲(chǔ)的數(shù)據(jù)文件中,將記錄逐條復(fù)制到單鏈表中。查詢記錄模塊。完成在單鏈表中查找滿足相關(guān)條件的記錄。在此通訊錄系統(tǒng)中,用戶可以按照姓名在單鏈表中進(jìn)行查找。若找到該人物的記錄,則返回指向該人物的記錄的指針。否則返回一個(gè)值為NULL的空指針,并打印出未找到該人物記錄的提示信息。管理記錄模塊。完成在單鏈表中刪除滿足相關(guān)條件的人物記錄。按照姓名先查找,再刪除此記錄。完成在單鏈表中繼續(xù)添加人物信息的記錄。與輸入記錄模塊一樣。輸出記錄模塊。一是實(shí)現(xiàn)對(duì)人物記錄的存盤,即將記錄寫入數(shù)據(jù)文件中;二是實(shí)現(xiàn)將記錄信息以表格的形式在屏幕上打印出來(lái)。2.2詳細(xì)設(shè)計(jì)2.2.1數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)通訊錄結(jié)構(gòu)體structTelephone{charname[20];charaddrass[20];charzip[20];chartelephone[20];structTelephone*next;};結(jié)構(gòu)體structTelephone用于儲(chǔ)存通訊錄的基本信息。結(jié)構(gòu)體typedefstructTelephoneTEL;TEL*head=NULL;voidshowmenu();//菜單voidAppenditem();//添加條目voidprint();//輸出條目voidFinditem1();//查找條目(按姓名)voidRemoveitem();//刪除信息voidSaveandfree();//保存到文件voidOpen();//打開文件2.2.2主控main()函數(shù)的執(zhí)行voidmain(){charch;Open();//打開文件while(1){showmenu();//顯示菜單scanf("%c",&ch);switch(ch){case'1':Appenditem();//添加條目break;case'2':print();//輸出條目break;case'3':Finditem1();//查找條目1.按姓名break;case'4':Removeitem();//刪除信息print();//輸出刪除后的結(jié)果break;case'0':Saveandfree();//保存并釋放內(nèi)存exit(0);//退出break;default:printf("選擇錯(cuò)誤!");break;}}}先打開文件,此文件若不存在,則新件此文件.2.2.3輸入記錄模塊輸入記錄模塊主要實(shí)現(xiàn)將數(shù)據(jù)存入單鏈表中.用戶選擇voidAppenditem()函數(shù)進(jìn)行對(duì)人物記錄的輸入,即完成在單鏈表中添加記錄的操作.值得一提的是,這里的字符串和數(shù)值的輸入分別采用了函數(shù)來(lái)實(shí)現(xiàn),在函數(shù)中完成輸入數(shù)據(jù)任務(wù),并對(duì)數(shù)據(jù)進(jìn)行條件判斷,直到滿足條件為止,這樣一來(lái),大大減少了代碼的重復(fù)和冗余,符合模塊化程序設(shè)計(jì)的特點(diǎn)。2.2.4查詢記錄模塊查詢記錄模塊主要實(shí)現(xiàn)了在單鏈表中按姓名查找滿足相關(guān)條件的人物記錄。在查詢模塊函數(shù)voidFinditem1()中,p為指向保存了學(xué)生成績(jī)信息的單鏈表的首地址的指針變量。為了遵循模塊化編程的原則,我們將在單鏈表中進(jìn)行的指針定位操作,設(shè)計(jì)成了一個(gè)單獨(dú)的函數(shù)若找到該記錄,則返回指向該節(jié)點(diǎn)的指針;否則,返回一個(gè)空指針。2.2.5管理記錄模塊此模塊主要實(shí)現(xiàn)了對(duì)學(xué)生記錄的刪除、添加操作。因?yàn)閷W(xué)生記錄是以單鏈表的結(jié)構(gòu)形式存儲(chǔ)的,所以這些操作都在單鏈表中完成。(1)刪除記錄。該操作完成刪除指定學(xué)號(hào)或姓名的學(xué)生記錄,它也分兩步完成。第一步,輸入要?jiǎng)h除的姓名,輸入后調(diào)用定位函數(shù),在單鏈表中逐個(gè)對(duì)節(jié)點(diǎn)數(shù)據(jù)域中學(xué)號(hào)或姓名字段的值進(jìn)行比較,直到找到該學(xué)號(hào)或姓名的學(xué)生記錄,則返回指向該學(xué)生記錄的節(jié)點(diǎn)指針;第二步,若找到該學(xué)生記錄,將該學(xué)生記錄所在節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)的指針域,指向目標(biāo)節(jié)點(diǎn)的后繼節(jié)點(diǎn)。(2)添加記錄。該操作完成在指定學(xué)號(hào)的隨后位置插入新的學(xué)生記錄。首先,要求用戶輸入某個(gè)學(xué)生的學(xué)號(hào),新的記錄將插入在該學(xué)生記錄之后;然后,提示用戶輸入一條新的學(xué)生記錄的信息,這些信息保存在新節(jié)點(diǎn)的數(shù)據(jù)域中;最后,將該節(jié)點(diǎn)插入在指定位置學(xué)號(hào)之后.2.2.6輸出記錄模塊當(dāng)把記錄輸出至文件時(shí),調(diào)用函數(shù),將p指針?biāo)腹?jié)點(diǎn)中的各字段值,寫入文件指針fp所指的文件。當(dāng)把記錄輸出至屏幕時(shí),調(diào)用函數(shù),將單鏈表中的人物記錄信息以表格的形式在屏幕上打印出來(lái)。開始著手進(jìn)行系統(tǒng)實(shí)現(xiàn)的工作,開始程序代碼的編寫.3.系統(tǒng)實(shí)現(xiàn)3.1編碼3.1.1程序預(yù)處理包括加載頭文件,定義結(jié)構(gòu)體、常量和變量,并對(duì)它們進(jìn)行初始化工作。#include<stdio.h>#include<string.h>#include<stdlib.h>structTelephone{charname[20];charaddrass[20];charzip[20];chartelephone[20];structTelephone*next;};typedefstructTelephoneTEL;TEL*head=NULL;voidshowmenu();//菜單voidAppenditem();//添加條目voidprint();//輸出條目voidFinditem1();//查找條目(按姓名)voidRemoveitem();//刪除信息voidSaveandfree();//保存到文件voidOpen();//打開文件3.1.2主函數(shù)main()main()函數(shù)主要實(shí)現(xiàn)了對(duì)整個(gè)程序的運(yùn)行控制,以及相關(guān)功能模塊的調(diào)用。voidmain(){charch;Open();//打開文件while(1){showmenu();//顯示菜單scanf("%c",&ch);switch(ch){case'1':Appenditem();//添加條目break;case'2':print();//輸出條目break;case'3':Finditem1();//查找條目1.按姓名break;case'4':Removeitem();//刪除信息print();//輸出刪除后的結(jié)果break;case'0':Saveandfree();//保存并釋放內(nèi)存exit(0);//退出break;default:printf("選擇錯(cuò)誤!");break;}}}3.1.3主菜單界面用戶進(jìn)入通訊錄管理系統(tǒng)時(shí),需要顯示主菜單,提示用戶進(jìn)行選擇,完成相應(yīng)任務(wù)。此代碼被main()函數(shù)調(diào)用。//菜單voidshowmenu(){printf("\n*****************通訊錄系統(tǒng)*****************\n");printf("\t1.添加條目。\n");printf("\t2.輸出輸出\n");printf("\t3.按姓名查詢\n");printf("\t4.刪除條目\n");printf("\t0.保存并退出!\n");printf("*************************************************\n");printf("\t請(qǐng)選擇:\n");}3.1.4保存信息并釋放內(nèi)存空間voidSaveandfree(){TEL*p=NULL;FILE*fp;char*Book="books.txt";if(head==NULL){printf("\n記錄為空!\n");return;}elsep=head->next;if((fp=fopen(Book,"wb+"))==NULL){printf("\n打不開文件!\n");return;}while(p!=NULL)//保存信息{fwrite(p,sizeof(TEL),1,fp);p=p->next;}printf("保存完畢!");fclose(fp);//*****釋放鏈表空間*****for(;head->next!=NULL;){p=head->next;head->next=head->next->next;free(p);}free(head);}//文件信息輸出到鏈表voidOpen(){FILE*fp;TEL*p1=NULL,*p2=NULL,*temp=NULL;if((fp=fopen("books.txt","rb+"))==NULL){printf("\n****************這是一個(gè)新的通訊錄管理系統(tǒng)******************\n");return;}head=(TEL*)malloc(sizeof(TEL));head->next=NULL;temp=p2=head;while(!feof(fp))//循環(huán)讀取{p1=(TEL*)malloc(sizeof(TEL));temp=p2;p2->next=p1;p2=p1;fread(p1,sizeof(TEL),1,fp);}temp->next=NULL;fclose(fp);//關(guān)閉文件}3.1.5記錄查找(按姓名)需要先輸入姓名,找到相應(yīng)的記錄voidFinditem1(){TEL*p;charfindname[20];printf("請(qǐng)輸入要查找的姓名:\n");scanf("%s",findname);printf("**************通訊錄系統(tǒng)*********************\n");printf("姓名\t地址\t郵編\t電話\n");for(p=head->next;p!=NULL;p=p->next){if(strcmp(p->name,findname)==0)printf("%s\t%s\t%s\t%s\n",p->name,p->addrass,p->zip,p->telephone);}}3.1.6輸入記錄voidAppenditem(){TEL*p1=NULL,*p2=NULL;p1=(TEL*)malloc(sizeof(TEL));//申請(qǐng)結(jié)點(diǎn)printf("輸入姓名:\n");//添加信息scanf("%s",p1->name);printf("輸入地址:\n");scanf("%s",p1->addrass);printf("輸入郵編:\n");scanf("%s",p1->zip);printf("輸入電話:\n");scanf("%s",p1->telephone);p1->next=NULL;//保存到鏈表if(head==NULL){head=(TEL*)malloc(sizeof(TEL));//申請(qǐng)空間head->next=p1;}else{for(p2=head;p2->next!=NULL;p2=p2->next);//找到結(jié)點(diǎn)尾p2->next=p1;}printf("此信息已添加!");}3.1.7輸出記錄voidprint(){TEL*p=NULL;if(head==NULL){printf("此通訊錄中無(wú)記錄,請(qǐng)輸入記錄后在使用本功能!\n");return;}printf("**************通訊錄系統(tǒng)*********************\n");//輸出信息printf("姓名\t地址\t郵編\t電話\n");for(p=head->next;p!=NULL;p=p->next)printf("%s\t%s\t%s\t%s\n",p->name,p->addrass,p->zip,p->telephone);}3.1.8刪除記錄voidRemoveitem(){charfindname[20];//先查找后刪除TEL*p=head->next,*pr=head->next;printf("請(qǐng)輸入要?jiǎng)h除的姓名:\n");scanf("%s",findname);if(head->next==NULL){printf("無(wú)此節(jié)點(diǎn)!\n");return;}while((strcmp(p->name,findname)!=0)&&p->next!=NULL){pr=p;p=p->next;}if(strcmp(findname,p->name)==0)//輸出刪除信息{printf("%s\t%s\t%s\t%s\n",p->next->name,p->next->addrass,\p->next->zip,p->next->telephone);if(p==head->next)head->next=p->next;elsepr->next=p->next;free(p);}printf("此信息已刪除!");}3.2測(cè)試與調(diào)試3.2.1概述一般情況下,為解決一個(gè)問(wèn)題所編寫的程序代碼較長(zhǎng),可能包括幾百條甚至成千上萬(wàn)條語(yǔ)句。在檢查并排除所有語(yǔ)法錯(cuò)誤后,還會(huì)有不易發(fā)現(xiàn)的邏輯錯(cuò)誤,因此要對(duì)程序進(jìn)行認(rèn)真仔細(xì)的測(cè)試與調(diào)試。測(cè)試是通過(guò)運(yùn)行程序發(fā)現(xiàn)錯(cuò)誤的過(guò)程,常見的錯(cuò)誤有數(shù)據(jù)溢出、數(shù)組越界、進(jìn)入死循環(huán)、語(yǔ)句順序顛倒、多加“;”或少加“{}”等等。調(diào)試則是確定測(cè)試中找到的錯(cuò)誤性質(zhì)并改正錯(cuò)誤的過(guò)程。測(cè)試與調(diào)試通常交替進(jìn)行,即測(cè)試——調(diào)試——再測(cè)試——再調(diào)試。能檢查出尚未發(fā)現(xiàn)的、各種不同類型錯(cuò)誤的測(cè)試才是成功的測(cè)試。測(cè)試程序需要測(cè)試用例,測(cè)試用例可用如下公式表示:測(cè)試用例=測(cè)試數(shù)據(jù)+預(yù)期結(jié)果。好的測(cè)試用例應(yīng)該是用盡可能少的測(cè)試數(shù)據(jù)發(fā)現(xiàn)盡可能多的錯(cuò)誤,即發(fā)現(xiàn)錯(cuò)誤的概率要大。要選擇合適的測(cè)試數(shù)據(jù),使系統(tǒng)在運(yùn)行時(shí)盡量能執(zhí)行到每條語(yǔ)句,以測(cè)試各指令是否正確。還應(yīng)分別測(cè)試輸入合法數(shù)據(jù)與非法數(shù)據(jù)時(shí),程序的運(yùn)行情況,。對(duì)于合法數(shù)據(jù),還要考慮數(shù)據(jù)的一般性與特殊性,如求最大值的問(wèn)題,應(yīng)測(cè)試最大值在最前面、最后面、中間某一位置的情況。測(cè)試可按模塊測(cè)試、組裝測(cè)試和確認(rèn)測(cè)試的步驟進(jìn)行。(1)模塊測(cè)試就是分別對(duì)各模塊進(jìn)行測(cè)試的過(guò)程。在編寫一個(gè)模塊后應(yīng)立即對(duì)其進(jìn)行測(cè)試,因?yàn)檫@時(shí)對(duì)模塊記憶深刻,而且單個(gè)模塊相對(duì)較小,所以容易構(gòu)造測(cè)試數(shù)據(jù),能方便地檢查和改正錯(cuò)誤。(2)組裝測(cè)試就是把所有模塊(應(yīng)該是通過(guò)模塊測(cè)試的模塊)按預(yù)先制定的計(jì)劃逐步組裝和測(cè)試的過(guò)程。一般情況下,各模塊之間要相互傳遞數(shù)據(jù)和控制信息,因此組裝測(cè)試的主要任務(wù)是發(fā)現(xiàn)模塊接口中的錯(cuò)誤。(3)確認(rèn)測(cè)試是最后一個(gè)步驟,一般在將軟件交付用戶之前,應(yīng)確認(rèn)軟件是否確實(shí)滿足用戶的要求,通常使用接近實(shí)際的用例進(jìn)行測(cè)試。3.2.2程序測(cè)試在主菜單中選擇1當(dāng)用戶輸入1并按回車鍵后,即可進(jìn)入數(shù)據(jù)輸入界面。其
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省蘇州市昆山市2025-2026學(xué)年高一上學(xué)期期末語(yǔ)文試卷(無(wú)答案)
- 2025-2026學(xué)年統(tǒng)編版二年級(jí)語(yǔ)文下冊(cè)第四單元達(dá)標(biāo)訓(xùn)練卷(A)(含答案)
- 2024-2025學(xué)年湖南省衡陽(yáng)市船山實(shí)驗(yàn)中學(xué)九年級(jí)(上)期末道德與法治試卷(含答案)
- 飛行技術(shù)答辯
- 2026內(nèi)蒙古鄂爾多斯準(zhǔn)格爾旗民族小學(xué)招聘考試備考題庫(kù)及答案解析
- 2026陜西西安新城區(qū)同德巷社區(qū)招聘公益性崗位工作人員3人備考考試題庫(kù)及答案解析
- 市場(chǎng)調(diào)查公司數(shù)據(jù)管理制度
- 2026年甘肅省蘭州大學(xué)第二醫(yī)院西固醫(yī)院水暖工招聘?jìng)淇伎荚囋囶}及答案解析
- 新人視頻活動(dòng)策劃方案(3篇)
- 僑鄉(xiāng)書香活動(dòng)策劃方案(3篇)
- 2026內(nèi)蒙古鄂爾多斯市伊金霍洛旗九泰熱力有限責(zé)任公司招聘熱電分公司專業(yè)技術(shù)人員16人筆試模擬試題及答案解析
- 馬年猜猜樂(猜地名)打印版
- 河南豫能控股股份有限公司及所管企業(yè)2026屆校園招聘127人筆試模擬試題及答案解析
- 2025年浙江省嘉興市嘉善縣保安員考試真題附答案解析
- 要謙虛不要驕傲課件
- 2026國(guó)家保安員資格考試題庫(kù)及參考答案【完整版】
- 微生物檢驗(yàn)質(zhì)控措施分析
- 2026年黑龍江農(nóng)業(yè)工程職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能考試題庫(kù)及參考答案詳解1套
- 婦科腫瘤保留生育功能治療策略
- 宮頸癌病理課件
- 2025東航股份綜合管理部招聘筆試歷年參考題庫(kù)附帶答案詳解
評(píng)論
0/150
提交評(píng)論