C語言實訓(通訊錄)_第1頁
C語言實訓(通訊錄)_第2頁
C語言實訓(通訊錄)_第3頁
C語言實訓(通訊錄)_第4頁
C語言實訓(通訊錄)_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

《c語言》課程設(shè)計實砌

實訓報告

題目:簡易通訊錄管理系統(tǒng)

院系:

專業(yè):

姓名:

學號:

指導教師:

日期:2009年9月19日

桂林電3科技丈名信息和枝等就

目錄

1問題定義............................................................3

2系統(tǒng)設(shè)計.......................................................3

2.1總體設(shè)計...............................................................3

2.2詳細設(shè)計...............................................................4

2.2.1數(shù)據(jù)結(jié)構(gòu)設(shè)L................................................4

2.2.2主控流程..........................................................5

2.2.3輸入記錄模塊......................................................6

2.2.4查詢記錄模塊......................................................6

2.2.5管理記錄模塊.....................................6

2.2.6輸出記錄模塊.....................................................6

3系統(tǒng)實現(xiàn).........................................................7

3.1編碼.........................................................7

3.1.1程序預處理.......................................................7

3.1.2主函數(shù)main。...................................................8

3.1.3主菜單界面.....................................................8

3.1.4保存信息并釋放內(nèi)存空間............................................9

3.1.5記錄查找(按姓名)................................................10

3.1.6輸入記錄..........................................................11

3.1.7輸出記錄..........................................................11

3.1.8刪除記錄..........................................................12

3.2測試與調(diào)試.........................................................12

3.2.1概述.........................................................12

3.2.2程序測試.........................................................13

4系統(tǒng)維護15

5歸納總結(jié)16

5.1開發(fā)經(jīng)驗.........................................................16

5.2設(shè)計中的不足之處.......................................................16

5.3感想和心得體會........................................................16

簡易通訊錄管理系統(tǒng)

本題目設(shè)計目的是訓練學生的基本編程能力,了解簡易通訊錄的開發(fā)流程,熟

悉C語言的文件各種基本操作。本程序中涉及很多方面的知識,通過本程序的

訓練,使學生能對C語言的文件操作有一個更深刻的了解,掌握對簡易通訊錄

實現(xiàn)的原理,進一步開發(fā)出高質(zhì)量的通訊錄系統(tǒng)打下堅實的基礎(chǔ)。

1.問題定義

創(chuàng)建一個簡易通訊錄管理系統(tǒng)。假設(shè)系統(tǒng)中包含輸入信息,顯示信息,增加信

息,刪除信息和保存等信息。程序的運行效果如下圖所示,選擇任意菜單后,實

現(xiàn)相應功能。

****************這是一個新的通訊錄言理系統(tǒng)**M**M*M*M**M*M*M*

::::跳

退

請選擇:

在問題定義階段要考慮題目的可行性和需求分析,接下來進入開發(fā)階段,完成

系統(tǒng)設(shè)計和系統(tǒng)實現(xiàn)的任務(wù)。

2.系統(tǒng)設(shè)計

2.1總體設(shè)計

采用模塊化的程序設(shè)計方法,即將較大的任務(wù)按照一定的原則分為一

個個較小的任務(wù),然后分別設(shè)計各個小任務(wù)。需要注意的是劃分出來的模塊應該

相對獨立但又相關(guān),且容易理解??梢杂媚K化層次結(jié)構(gòu)圖(即模塊圖)來分析

其任務(wù)的劃分,一般從上到下進行,最上面一層是主模塊,下面各層是其上一層

模塊的逐步細化描述。

結(jié)構(gòu)體structTelephone用于儲存通訊錄的基本信息。

結(jié)構(gòu)體

typedefstructTelephoneTEL;

TEL*head=NULL;

voidshowmenu();〃菜單

voidAppenditem();〃添加條目

voidprint();〃輸出條目

voidFinditem1();〃查找條目(按姓名)

voidRemoveitem();〃刪除信息

voidSaveandfree();//保存到文件

voidOpen();〃打開文件

2.2.2主控main。函數(shù)的執(zhí)行

voidmain()

charch;

Open();〃打開文件

vvhile(l)

{

showmcnu();〃顯示菜單

scanf(u%c",&ch);

switch(ch)

(

case'r:Appenditem();〃添加條目

break;

case2:prinl();〃輸出條目

break;

case3:Finditeml();〃查找條目1.按姓名

break;

case'4':Removeitem();〃刪除信息

print();〃輸出刪除后的結(jié)果

break;

case'O^SaveandfreeO;〃保存并釋放內(nèi)存

exit(O);〃退出

break;

default:

printf("選擇錯誤!,

break;

}

)

)

先打開文件,此文件若不存在,則新件此文件.

223輸入記錄模塊

輸入記錄模塊主要實現(xiàn)將數(shù)據(jù)存入單鏈表中.用戶選擇voidAppenditem。函

數(shù)進行對人物記錄的輸入,即完成在單鏈表中添加記錄的操作.值得一提的是,這

里的字符串和數(shù)值的輸入分別采用了函數(shù)來實現(xiàn),在函數(shù)中完成愉入數(shù)據(jù)任務(wù),

并對數(shù)據(jù)進行條件判斷,直到滿足條件為止,這樣一來,大大減少了代碼的重復

和冗余,符合模塊化程序設(shè)計的特點。

2.2.4查詢記錄模塊

查詢記錄模塊主要實現(xiàn)了在單鏈表中按姓名查找滿足相關(guān)條件的人物記

錄。在查詢模塊函數(shù)voidFindilemlO中,p為指向保存了學生成績信息的單鏈表的

首地址的指針變量。為了遵循模塊化編程的原則,我們將在單鏈表中進行的指針

定位操作,設(shè)計成了一個單獨的函數(shù)若找到該記錄,則返回指向該節(jié)點的指針;

否則,返回一個空指針。

2.2.5管理記錄模塊

此模塊主要實現(xiàn)了對學生記錄的刪除、添加操作。因為學生記錄是以單鏈表

的結(jié)構(gòu)形式存儲的,所以這些操作都在單鏈表中完成。

(1)刪除記錄。該操作完成刪除指定學號或姓名的學生記錄,它也分兩步完

成。

第一步,輸入要刪除的姓名,輸入后調(diào)用定位函數(shù),在單鏈表中逐個對節(jié)點數(shù)據(jù)

域中學號或姓名字段的值進行比較,直到找到該學號或姓名的學生記錄,則返回

指向該學生記錄的節(jié)點指針;

第二步,若找到該學生記錄,將該學生記錄所在節(jié)點的前驅(qū)節(jié)點的指針域,

指向目標節(jié)點的后繼節(jié)點。

(2)添加記錄。該操作完成在指定學號的隨后位置插入新的學生記錄。首先,

要求用戶輸入某個學生的學號,新的記錄將插入在該學生記錄之后;然后,提示

用戶輸入一條新的學生記錄的信息,這些信息保存在新節(jié)點的數(shù)據(jù)域中;最后,

將該節(jié)點插入在指定位置學號之后.

226輸出記錄模塊

當把記錄輸出至文件時,調(diào)用函數(shù),將p指針所指節(jié)點中的各字段值,寫入

文件指針fp所指的文件。當把記錄輸出至屏幕時,調(diào)用函數(shù),將單鏈表中的人

物記錄信息以表格的形式在屏幕上打印出來。

開始著手進行系統(tǒng)實現(xiàn)的工作,開始程序代碼的編寫.

3.系統(tǒng)實現(xiàn)

3.1編碼

3.1.1程序預處理

包括加載頭文件,定義結(jié)構(gòu)體、常量利變量,并對它們進行初始化工

作。

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

structTelephone

(

charname[2()];

charaddrass[201;

charzip[20];

chartelephone[20]:

structTelephone*next:

I;

typedefstructTelephoneTEL;

TEL*head=NULL;

voidshowmenu();〃菜單

voidAppenditem();〃添加條目

voidprinl();〃輸出條目

voidFinditem1();〃查找條目(按姓名)

voidRemoveitem();〃刪除信息

voidSaveandfree();//保存到文件

voidOpen();〃打開文件

3.1.2主函數(shù)main。

main。函數(shù)主要實現(xiàn)了對整個程序的運行控制,以及相關(guān)功能模塊的調(diào)用。

voidmain()

(

charch;

Opcn();〃打開文件

while(l)

(

showmenu();〃顯示菜單

scanf(n%cn,&ch);

switch(ch)

(

case'r:Appenditem();〃添加條目

break;

case2:print();〃輸出條目

break;

case3:Findileml();〃查找條目1.按姓名

break;

case4:Removeitem();//刪除信息

print。;〃輸出刪除后的結(jié)果

break;

case'O^SavcandfrccO;〃保存并釋放內(nèi)存

exit(O);//退出

break;

default:

primf("選擇錯誤!)

break;

)

)

3.1.3主菜單界面

用戶進入通訊錄管理系統(tǒng)時,需要顯示主菜單,提示用戶進行選擇,完

成相應任務(wù)。此代碼被main。函數(shù)調(diào)用。

〃菜單

voidshowmenu()

printf("\n*****************通訊錄系統(tǒng)****************

printf("\tl.添加條0o\n");

printf("Z輸出輸出七”);

printf("\t3.按姓名查詢\n");

printf("\t4.刪除條目\n");

printf("\tO.保存并退出!\n");

printf(”\t請選擇:\n");

3.1.4保存信息并釋放內(nèi)存空間

voidSaveandfree()

{

TEL*p=NULL;

PILE*fp;

char*Book=,,books.txtM;

if(head==NULL)

{

printf("\n記錄為空!\n");

return;

)

else

p=hcad->ncxt;

if((fp=fopen(Book,"wb+M))==NULL)

(

printf("\n打不開文件!\n”);

return;

)

while(p!=NULL)〃保存信息

(

fwrite(p,sizeof(TEL),IJp);

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=NULU*p2=NULL,*temp=NULL;

if((fp=fopen("books.txt,V,rb+,,))==NULL)

print***************—*個新的通訊錄管理系統(tǒng)

******************\n”)?

return;

)

head=(TEL*)malloc(sizeof(TEL));

head->next=NULL;

temp=p2=head;

while(!feof(fp))〃循環(huán)讀取

pl=(TEL*)malloc(sizeof(TEL));

temp二p2;

p2->next=pl;

p2=pl;

fread(p1,sizeof(TEL),1,fp);

}

tcmp->ncxt=NULL;

fclose(fp);〃關(guān)閉文件

)

3.1.5記錄查找(按姓名)

需要先輸入姓名,找到相應的記錄

voidFinditem1()

TEL*p;

charfindname[20];

primf("請輸入要查找的姓名:\n't);

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)==O)

printf("%s\t%s\t%s\t%s\n",p->name,p->addrass,p->zip,p->telephone);

}

3.1.6輸入記錄

voidAppenditem()

(

TEL*pl=NULL,*p2=NULL;

pl=(TEL*)malloc(sizeof(TEL));〃申請結(jié)點

printf("輸入姓名:\n");〃添加信息

scanf("%s",pl->name);

printf("輸入地址:\n");

scanf("%sn,pl->addrass);

printf("輸入郵編:\n");

scanf("%s",pl->zip);

printf("輸入電話:\nH);

scanf(,'%s,,,p1->telephone);

p1->next=NULL;〃保存到鏈表

if(head==NULL)

{

head=(TEL*)malloc(sizeof(TEL));〃申請空間

head->nexi=pl;

)

else

1

for(p2=head;p2->nexl!=NULL;p2=p2->next);//找到結(jié)點尾

p2->next=pl;

)

printf("此信息已添加!”);

3.L7輸出記錄

voidprint()

{

TEL*p=NULL;

if(head==NULL)

(

printf("此通訊錄中無記錄,請輸入記錄后在使用本功能!\nM);

return;

)

***********通訊錄系統(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=hcad->ncxt,*pr=hcad->ncxt;

printf("請輸入要刪除的姓名:\n");

scanf(H%s",findname);

if(head->next==NULL)

(

printf("無此節(jié)點!\n");

return;

)

while((strcmp(p->name,findname)!=O)&&p->next!=NULL)

(

pr=p;

p=p->next;

I

if(strcmp(findname,p->name)==0)〃輸出刪除信息

(

printf("%s\t%s\t%s\t%s\n'\p->next->name,p->next->addrass,\

p->ncxt->zip,p->ncxt->tclcphonc);

if(p==head->next)

head->next=p->next;

else

pr->next=p->next;

free(p);

)

printf(”此信息已刪除!”);

1

3.2測試與調(diào)試

3.2.1概述

一般情況下,為解決一個問題所編寫的程序代碼較長,可能包括幾百條甚至

成千上萬條語句。在檢查并排除所有語法錯誤后,還會有不易發(fā)現(xiàn)的邏輯錯誤,

因此要對程序進行認真仔細的測試與調(diào)試。

測試是通過運行程序發(fā)現(xiàn)錯誤的過程,常見的錯誤有數(shù)據(jù)溢出、數(shù)組越界、

進入死循環(huán)、語句順序顛倒、多加或少加“{}”等等。調(diào)試則是確定刎試

中找到的錯誤性質(zhì)并改正錯誤的過程。測試與調(diào)試通常交替進行,即測試一一調(diào)

試一一再測試一一再調(diào)試。

能檢查出尚未發(fā)現(xiàn)的、各種不同類型錯誤的測試才是成功的測試。測試程序

需要測試用例,測試用例可用如下公式表示:測試用例=測試數(shù)據(jù)+預期結(jié)果。

好的測試用例應該是用盡可能少的測試數(shù)據(jù)發(fā)現(xiàn)盡可能多的錯誤,即發(fā)現(xiàn)錯

誤的概率要大。要選擇合適的測試數(shù)據(jù),使系統(tǒng)在運行時盡量能執(zhí)行到每條語句,

以測試各指令是否正確。還應分別測試輸入合法數(shù)據(jù)與非法數(shù)據(jù)時,程序的運行

情況,。對于合法數(shù)據(jù),還要考慮數(shù)據(jù)的一般性與特殊性,如求最大值的問題,

應測試最大值在最前面,最后面,中間某一位置的情況。

測試可按模塊測試、組裝測試和確認測試的步驟進行。

(1)模塊測試就是分別對各模塊進行測試的過程。在編寫一個模塊后應立

即對其進行測試,因為這時對模塊記憶深刻,而且單個模塊相對較小,所以容易

構(gòu)造測試數(shù)據(jù),能方便地檢查和改正錯誤。

(2)組裝測試就是把所有模塊(應該是通過模塊測試的模塊)按預先制定

的計劃逐步組裝和測試的過程。一般情況下,各模塊之間要相互傳遞數(shù)據(jù)和控制

信息,因此組裝測試的主要任務(wù)是發(fā)現(xiàn)模塊接口中的錯誤。

(3)確認測試是最后一個步驟,一般在將軟件交付用戶之前,應確認軟件

是否確實滿足用戶的要求,通常使用接近實際的用例進行測試。

3.2.2程序測試

?在主菜單中選擇1

當用戶輸入1并按回車鍵后,即可進入數(shù)據(jù)輸入界面。其輸入記錄過程如圖

3.1所示,這里輸入了1條學生記錄。

Efl"C:\DOCUMEHTSANDSETmGS\ADMIMISTRATOR\桌面\qqq\Debug\qqq.exe"X

這是一個新的通訊錄管理系統(tǒng)******************

加i

。

西

退

請選擇:

『人姓名:

in

入地址:

uilin

U人郵編:

41200

入電話:

813333

此信息己添加!

**—***********通訊錄系統(tǒng)

瑾1.添隹加鯉條目詢。

;:盛靠il出!

請選擇:

圖3.1

?在主菜單中選擇2

當用戶輸入2并按回車鍵后,即可顯示輸出界面.如圖3.2所示.

i”通訊錄系統(tǒng)i***

性名地址郵編電話

guilin5412006813333

一飛

1目

2^。

3查

4目

0退

圖3.2

?在主菜單中選擇3

當用戶輸入3并按回車鍵后,即可進入記錄查找界面。如圖3.3所示.

請選擇:

3

請輸入要查找的姓名:

qin

xxxxxxxxxxxxxxi電訊錄系統(tǒng)*******

姓名地址郵編電話

qinguilin5412006813333

通訊錄系統(tǒng)?

圖3.3

?在主菜單中選擇4

當用戶輸入4并接回車鍵后,即可進入刪除界面。先得添加多個記錄草能運

行刪除功能。

請選擇:

3輸入要刪除的姓名:

eeeee

gqqqqqqq

此信息已刪除!"XXXXXXMXXXXX通訊錄系統(tǒng)*

處名地址郵編電話

qinqwqi,qwqviqwqvi

qqqqqqqq

統(tǒng)

加條

,

1目

2出

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論