數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)通訊錄、電話號(hào)碼查詢系統(tǒng)_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)通訊錄、電話號(hào)碼查詢系統(tǒng)_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)通訊錄、電話號(hào)碼查詢系統(tǒng)_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)通訊錄、電話號(hào)碼查詢系統(tǒng)_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)通訊錄、電話號(hào)碼查詢系統(tǒng)_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告

號(hào)

統(tǒng)

學(xué)院保):

班級(jí):

學(xué)生姓名:學(xué)號(hào).

指導(dǎo)教師:_______________

2012年12月17日到2013年1月2日

一、課程設(shè)計(jì)概述:

本次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)共完成兩個(gè)題:電話號(hào)碼查詢系統(tǒng)、通訊錄。

使用語言:C

編譯環(huán)境:VC6.0

二、課程設(shè)計(jì)題目一

[實(shí)驗(yàn)內(nèi)容]

電話號(hào)碼查詢系統(tǒng)

[問題描述]

設(shè)計(jì)散列表實(shí)現(xiàn)電話號(hào)碼查找系統(tǒng)。

[需求分析]

(1)設(shè)每個(gè)記錄有下列數(shù)據(jù)項(xiàng):電話號(hào)碼、用戶名、地址;

(2)從鍵盤輸入各記錄,分別以電話號(hào)碼和用戶名為關(guān)鍵字建立散列表;

(3)采用一定的方法解決沖突;

(4)查找并顯示給定電話號(hào)碼的記錄;

(5)查找并顯示給定用戶名的記錄。

整個(gè)系統(tǒng)必須滿足系統(tǒng)功能要求;設(shè)計(jì)不同的散列函數(shù),比較沖突率;在散列函數(shù)確定

的前提下,嘗試各種不同類型處理沖突的方法,考察平均查找長度的變化。

[概要設(shè)計(jì)]

voidgetin(Record*a)//鍵盤輸入聯(lián)系人的信息

voidShowlnformation(Record*a)//顯示輸入的用戶信息

Statuscollision(intp,int&c)//沖突處理函數(shù),采用二次探測再散列法解決沖突

voidCreateHash(HashTable*H1Record*a)//建表若哈希地址沖突,進(jìn)行沖突處理

voidSearchHash(HashTable*H,int&c)//在通訊錄里查找關(guān)鍵字

voidSave()〃保存

voidmain_menu()

[存儲(chǔ)結(jié)構(gòu)]

typedefstruct{〃記錄

NAname;

NAtel;

NAadd;

}Record;

typedefstruct{//哈希表

Record*elemLHASHSIZE];〃數(shù)據(jù)元素存儲(chǔ)基址

intcount;〃當(dāng)前數(shù)據(jù)元素個(gè)數(shù)

intsize;〃當(dāng)前容量

JHashTable;

[流程圖]

voidmain_menu()

voidgetinvoidvoidvoidStatus

ShowlnformationCreateHashSearchHashcollision

[詳細(xì)設(shè)計(jì)]

#include<iostream>//cout,cin語句的頭文件#include<stdlib.h>〃清屏函數(shù)頭文件:使用

#include<string>〃字符串頭文件csl時(shí)調(diào)用system

#include<stdio.h>

#include<fstream>

#defineMAXSIZE100〃電話薄記錄的數(shù)量

#defineMAX_SIZE50//用戶名、電話號(hào)碼、地址的最大長度

#defineHASHSIZE400//定義表長

#defineSUCCESS1〃查找

#defineUNSUCCESS-1

#defineLENsizeof(HashTable)//哈希表的長度

usingnamespacestd;

typedefintStatus;//typedef用來定義類型的別名。此處用status作為int別名,目的表達(dá)int

變量是一個(gè)狀態(tài)變量。

typedefcharNA[MAX_SIZE];//NA作為char的另!J名

typedefstruct{〃自定義一個(gè)記錄用戶名、電話號(hào)碼、聯(lián)系地址的結(jié)構(gòu)體的別名

record

NAn

ame,tel,add,way;}Record;

Recorda[HASHSIZE];

typedefstruct{儆列表

Record*elem[HASHSIZE];〃數(shù)據(jù)元素存儲(chǔ)地址

intcount;〃數(shù)據(jù)元素個(gè)數(shù)

intsize;〃容量

JHashTable;

Statuseq(NAx,NAy)

{〃關(guān)鍵字比較,相等返回SUCCESS;否則返回UNSUCCESS

Nstrcmp(x,y)==0)〃2個(gè)字符串的大小比較s仁s2?strcmp(s1,s2)==0;s1>s2,

strcmp(s1Ss2)==1;s1<s2,strcmp(s1,s2)==-1;

returnSUCCESS;

else

returnUNSUCCESS;

StatusNUM_BER;〃記錄的個(gè)數(shù)

voidgetin(Record*a){//鍵盤輸入聯(lián)系人的信息,Record*調(diào)用Record函數(shù):a是參數(shù)

coutvv”請輸入要添加的聯(lián)系人的個(gè)數(shù):\nM;cin?NUM_BER;

inti;for(i=0;i<NUM_BER;i++){

coutvv”請輸入第"vvi+1vv”個(gè)記錄的用戶名:\n";cin?a[i].name;

coutvv”請輸入第”vvi+1vv”個(gè)記錄的電話號(hào)碼:\nn;cin?a[i].tel;

coutvv”請輸入第”vvi+1vv”個(gè)記錄的地址:\n";cin?a[i].add;

}}voidShowlnformation(Record*a)〃顯示輸入的用戶信息

(

inti;

for(i=O;i<NUM_BER;i++)

cout?"\nM"vvi+1vv”個(gè)用戶信息:\n姓名:"vva[i].namevv”\n電話號(hào)碼:

w?a[i].tel?An聯(lián)系地址:"?a[i].add?^n............\n";

}

longfold(NAs)//人名的折疊處理:將關(guān)鍵字分割成位數(shù)相同的幾部分,最后一部分位數(shù)可以不同,

然后取這幾部分的疊加和(去除進(jìn)位)作為散列地址

(

char*p;

longsum=0;

NAss;

strcpy(ss,s);〃復(fù)制字符串,不改變原字符串的大小寫

strupr(ss);//將字符串ss轉(zhuǎn)換為大寫形式

P=ss;

while(*p!='\0')

sum+=*p++;

returnsum;

}

intHashi(NAstr){//哈希函數(shù)

longn;

intm;

n=fold(str);//先將用戶名進(jìn)行折疊處理

m=n%HASHSIZE;//折疊處理后的數(shù),用除留余數(shù)法構(gòu)造哈希函數(shù)

returnm;〃并返回模值

intHash2(NAstr){//哈希函數(shù)

longn;

intm;

n=atoi(str);//把字符串轉(zhuǎn)換成整型數(shù).m=n%HASHSIZE;//用除留余數(shù)法構(gòu)造哈希函數(shù)

returnm;〃并返回模值

Statuscollision(intp,int&c){//沖突處理函數(shù),采用二次探測再散列法解決沖突

inti,q;

i=c/2+1;

while(i<HASHSIZE){

if(c%2==0){

C++;

q=(p+i*i)%HASHSIZE;

if(q>=0)returnq;

elsei=c/2+1;

)

else{

q=(p-i*i)%HASHSIZE;

C++;

if(q>=0)returnq;

elsei=c/2+1;

}

}

returnUNSUCCESS;

}

intsearchHash(HashTable*&H,NAkey,int&p,int&cJntway)

if(way==1){p=Hash1(key);

while(H->elem[p]!=NULL&&!eq(key,H->elem[p]->name))〃若哈希地址沖突,進(jìn)行沖突

處理

collision(p,++c);if(eq(key,H->elem[p]->name))return1;

elsereturn0;

}

else

(

p=Hash2(key);

while(H->elem[p]!=NULL&&!eq(key,H->elem[p]->tel))//若哈希地址沖突,進(jìn)

行沖突處理

collision(p,++c);

if(eq(key,H->elem[p]->tel))

return1;

else

return0;

)

//建表,若哈希地址沖突,進(jìn)行沖突處理voidCreateHash(HashTable*H,Record*a)

cout?"\n======建立散列表=======

cout?"\n(1).以姓名建立散列表(再散列法解決沖突)

cout?"\n⑵.以電話號(hào)碼建立散歹!J表(再散歹U法解決沖突)

J

cout?H\n☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

COUtw”請輸入選擇:";

intnum,i,p=-1,c;

cin?num;

for(i=0;i<NUM_BER;i++){

c=0;

if(num==1){

p=Hash1(a[i].name);

while(H->elem[p]!=NULL&&!eq(a[i].name,H->elem[p]->name))〃若哈希地址沖突?進(jìn)行

沖突處理

collision(p,++c);

)

else{

p=Hash2(a[i].tel);

while(H->elem[p]!=NULL&&!eq(a[i].tel,H->elem[p]->tel))//若哈希地址沖突,進(jìn)行沖突

處理

collision(p,++c);

)

H->elem[p]=a+i;//求得哈希地址,將信息存入

H->count++;

coutvv"第“vvi+1vv”個(gè)記錄沖突次數(shù)為"vvcvv”。\n”;〃需要顯示沖突次數(shù)時(shí)輸出

)

cout?"\n建表完成!\n此哈希表容量為ZvHASHSIZEvv”,當(dāng)前表內(nèi)存儲(chǔ)的記錄個(gè)數(shù)為

,,?H->count?".\n,';

)

〃查找用戶名和電話號(hào)碼的記錄;

voidSearchHash(HashTable*H,int&c){//在通訊錄里查找關(guān)鍵字,若查找成功,顯示信息

//c用來記錄沖突次數(shù),查找成功時(shí)顯示沖突次數(shù)

NAtype;

intp;

cout?'*\n======查找并顯示用戶信息記錄=======

coutvv'n⑴.查找并顯示給定用戶名的記錄

cout?"\n⑵.查找并顯示給定電話號(hào)碼的記錄

J

cout?"\n☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆";

coutvv”請輸入選擇:"intnum;

cin?num;

switch(num){

case1:

coutvv'n請輸入要查找的用戶名:\n”;cin?type;

searchHash(H,type,p,c,1);

if(eq(type,H->elem[p]->name)==1){

coukv'n查找成功!以下是您需要要查找的信息:\n\n";

coutvv"姓名:"?H->elem[p]->name?^n電話號(hào)碼:"?H->elem[p]->tel?"\n

聯(lián)系地址:"vvH->elem[p]->addvv"\rT;

)

else

cout?"\n對(duì)不起,該用戶不存在\n";

break;

case2:

cout?"\n請輸人要查找電話號(hào)碼:\nM;cin?type;

searchHash(H,type,p,c,2);

if(eq(type,H->elem[p]->tel)==1){cout?n\n查找成功!以下是您需要要查找的信息:

\n\n";

cout?H姓名:"vvH-elemlpJ,namevvQn電話號(hào)碼:M?H->elem[p]->tel?"\n聯(lián)系地

址:"vvH?>elem[p]->addvv'*\rr;

}

else

cout?H\n對(duì)不起,該用戶不存在\n";

break;

default:cout?"輸入錯(cuò)誤,請重新輸入

voidSave(){〃保存

ifstreamin;

ofstreamout;out.open("123.txt'*);

printf("\n保存成功!");

for(inti=0;i<NUM_BER;i++){

out?"姓名:"vva[i].namevv"\n電話號(hào)碼:"vva[i].telvv”\n聯(lián)系地址

"?a[i].add?"\n";

)

return;

}

voidmain_menu()

(

intc,flag=1;////定義一個(gè)布爾型變量flag并初始化為真(true)HashTable*H;

H=(HashTable*)malloc(LEN);

for(inti=O;i<HASHSIZE;i++)

H->elem[i]=NULL;

H->size=HASHSIZE;H->count=0;

while(1){//while使電話查詢系統(tǒng)執(zhí)行后返回主菜單的界面system("cls");

cout?*'\n======V(A3。/歡迎使用電話號(hào)碼查找系統(tǒng)=======

coutvv'M(1).添加用戶信息";

coutvv'M(2).讀取所有用戶信息";

cout?n\n(3).建立散列表(再散列法解決沖突)”;

cout?^n(4).查找并顯示給定用戶的記錄";

coutvv'n(5).保存

cout?,r\n(6).退出

cout?An提示:進(jìn)行4操作前請先進(jìn)行3操作.否則無法查找成功!";

cout?,r\n☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆";

cout?^n\n請選擇:

intnum;

cin?num;

switch(num){

case1:

getin(a);

system("pause");

break;

case2:

Showlnformation(a);

system("pause");

break;

case3:

CreateHash(H,a);/*建立散列表7

system("pauseM);

break;

case4:

c=0;

SearchHash(H,c);

system("pause");

break;

case5:

Save();

system("pause");

break;

case6:

return;

break;

default:

cout?"輸入錯(cuò)誤,請重新輸入

cout?"\n";

intmain(intargc,char*argv[])

main_menu();

〃執(zhí)行結(jié)束后清屏,顯示主菜單

return0;

}[調(diào)試分析]

問題一:

現(xiàn)象:每次執(zhí)行后,系統(tǒng)界面不自動(dòng)清屏?

原因:執(zhí)行每個(gè)選項(xiàng)后,沒有清屏操作的代碼。解決辦法:將CLS放到switch函數(shù)體

后面,執(zhí)行選項(xiàng)后,執(zhí)行清屏操作

問題二:

現(xiàn)象:進(jìn)行查找的時(shí)候,總是查找失?。。?!

原因:查找前沒有建立散列表。解決辦法:先建立散列表,再查找。

[運(yùn)行結(jié)果及分析]

c**C:\Docu>entsandSettings\Ad>inistrator\LocalSettings\Te*p\Rar$DIaO...日日X

uL3/迎使3

21取

31.文

4].找

.保

.存

51退

.&

61田

5一

☆'

清選擇:2

渤個(gè)

戶信

用:

屯O8

聯(lián)18

S重

請按任意鍵繼續(xù)..?

搜狗拼音半:zJ

K*C:\DocuaentsandSettingsVAdainistrator\LocalSettings\TeBp\Rar$DIaO...□|x

一感

信息

2矍

3班

4用

5存

6出

-患

.卷找成功,

☆☆☆介

☆'☆☆☆

詵擇3

I?以姓名iijft列

2一以電話年碼挈隹立..................

☆☆右☆☆石■

☆☆☆☆☆$☆☆☆☆☆☆笫1_個(gè)記錄沖突次數(shù)為0

建表完成?

魁爵IT?當(dāng)前表內(nèi)甸記錄俾汕

狗拼音半:

*C:\Docu>entsandSettings\Ad>inistrator\LocalSettings\TeBp\Rar$DIaO..

1:

5.保存

6).退出

提不:進(jìn)行4操作前請先進(jìn)行3操作?否則無法查找成功?

請選擇:4

(-一--

——

■顯H

內(nèi)

查§

☆☆白

。-請輸入選擇汽

\j

/2

VI

/3

\(

\/4

/

XI5

6

/:是

性選才仝:5

保存成功?請按任意鍵繼續(xù)???

搜狗拼音半:

品*C:ADocuMentsandSettingsV\d>inistrator\LocalSettings\Teii!p\Rar$DIaO...|

_____________)一覆加用力佶息—

一覆卓所有甩戶信息

羲立羲4羸|列出%立散列解決口[41一查找并顯示給定用戶的記錄

(6)

提$進(jìn)仃4操作前狀進(jìn)行3操作.否則土法直找成功!召壽召☆合

客玄玄矗金☆☆岳☆渥☆金承

請選擇;6

|PressNnykeytocontinue

I搜狗拼音半:

課程設(shè)計(jì)題目二

[實(shí)驗(yàn)內(nèi)容]

通訊錄

[問題描述]

管理通訊信息,包含姓名(name)、出生日期(birthday)、城市(city)、職業(yè)

(profession)、電話(tel)、00號(hào)(qq)等°

[需求分析]

1'輸入信息。

2、顯示信息。

3、分別以姓名、城市、出生日期、電話或QQ作為關(guān)鍵字查找。

4、刪除信息。

5、存盤,將數(shù)據(jù)保存在文件phonefile中,以便下次可以繼續(xù)上述工作。

測試數(shù)據(jù):自己設(shè)計(jì),不少于30人。

[概要設(shè)計(jì)]

voidTeleNumber::ReadFile(istream&in)〃從文件依次將標(biāo)準(zhǔn)輸入流中的數(shù)據(jù)讀入到變

量name,….中

voidTeleNumber::input()〃信息數(shù)據(jù)輸入

voidTeleNumber::display()//調(diào)用telenumber中的display函數(shù)輸出信息

voidTeleMessage::Remove()〃刪除

voidTeleMessage::Show()int

main()

[存儲(chǔ)結(jié)構(gòu)]

此程序的存儲(chǔ)結(jié)構(gòu)是單鏈表

voidTeleMessage::lnsert()〃插入

IEnd-^innutn:〃尾指針指向input,從單鏈表尾部插入信息

End=End->Next;coutvvendlvv”插人〃尾節(jié)點(diǎn)指向下一個(gè)節(jié)點(diǎn)

成功"vvendl;

[流程圖]

intmain()

voidTeleNumbe匚:input()voidTeleMessage::Remove()void

TeleMessage::Show()

[詳細(xì)設(shè)計(jì)]

#includeviostream>〃對(duì)標(biāo)準(zhǔn)輸入輸出文件的操作,后面有命名空間,不能用viostream.h>?

否則出錯(cuò)

#include<fstream>//是對(duì)文件操作

#include<string>

#include<stdlib.h>

usingnamespacestd;

intnum;

structTeleNumber〃用struct結(jié)構(gòu)體來存放不同類型的數(shù)據(jù)*函數(shù)

(

charname[20];〃姓名,字符必須注明長度

intphoneNumber;//電話號(hào)碼

intbirthday;〃出生日期

charcity[30];〃城市

TeleNumber*Next;

voidReadFile(istream&in);//

voidinput();〃信息輸入的函數(shù)

voiddisplay;〃信息輸出的函數(shù)

};

voidTeleNumber::ReadFile(istream&in)〃從文件依次將標(biāo)準(zhǔn)輸入流中的數(shù)據(jù)讀人到變量

name,…?中

{in?name?phoneNumber?birthday?city;

)

voidTeleNumber::input()//信息數(shù)據(jù)輸入

{coutvv”請輸入姓名"vvendl;

End->Next=newTeleNumber;〃尾節(jié)點(diǎn)指向下一個(gè)數(shù)據(jù)節(jié)點(diǎn),開辟一個(gè)新的節(jié)點(diǎn)

cin?name;

coutvv”請輸入電話號(hào)碼"vvendl;

cin?phoneNumber;

coutvv”請輸入出生日期“wendl;

cin?birthday;

coutvv”請輸入城市"vvendl;

cin?city;

)

voidTeleNumber::display()〃調(diào)用telenumber中的display函數(shù)輸出信息

{cout?M姓名:',?name?*\t,?H固定號(hào)碼:'*?phoneNumber?'\f?M出生日

期:"vvbirthdayvv'\t'vv"城市:M?city?endl;

classTeleMessage//建造一個(gè)類,表示信息功能的類

{public:

TeleMessage();//構(gòu)造數(shù)據(jù)結(jié)構(gòu)

-TeleMessage();void〃析構(gòu)函數(shù),用來釋放單鏈表

Save();〃數(shù)據(jù)保存到文件

TeleNumber*Search(char*);//定義一個(gè)查找數(shù)據(jù)的指針

voidlnsert();voidRemove();〃插入函數(shù)的定義在后面,這里要先聲明

voidChange();voidShow();//刪除

private:〃更改

//顯示

TeleNumber*End,*Head;

ifstreamin;

〃定義結(jié)構(gòu)體的頭尾指針

ofstreamout;

〃定義從文件中讀入數(shù)據(jù)

};TeleMessage::TeleMessage()

〃定義將數(shù)據(jù)寫到文件中

{Head=newTeleNumber;

〃定義信息類中的信息函數(shù)

Head->Next=newTeleNumber;

//頭插法建立單鏈表

End=Head->Next;//head指向一個(gè)新分配的節(jié)點(diǎn)

指向下一個(gè)節(jié)點(diǎn),直到指向尾節(jié)點(diǎn)〃對(duì)結(jié)構(gòu)體遍歷,頭節(jié)點(diǎn)指針依次

in.open(MTeleNumber.text'*);

)〃使屏幕暫停,而不是直接閃過〃打開外存文件,讀人數(shù)據(jù)

TeleMessage::-TeleMessage()

〃釋放單鏈表

{TeleNumber*temp;

〃定義一個(gè)數(shù)據(jù)指針temp

while(Head->Next!=End)

〃當(dāng)頭節(jié)點(diǎn)指向的下一個(gè)指針不是尾節(jié)點(diǎn)

{temp=Head->Next;

〃數(shù)據(jù)指針指向頭節(jié)點(diǎn)指向的下一個(gè)節(jié)點(diǎn)

Head=Head->Next;delete

〃頭結(jié)點(diǎn)依次指向頭結(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)

temp;

〃刪除數(shù)據(jù)指針指向的節(jié)點(diǎn)數(shù)據(jù)

deleteHead,End;

//刪除頭尾指針

voidTeleMessage::Save()

{out.openCTeleNumber.txt");數(shù)據(jù)寫入外存文件中

for(TeleNumber//保存文件

*p=Head->Next;p!=End;p=p->Next)〃建止外停文i牛TeleNumber.txt'把

out?p->name?"\t"?p->phoneNumber?"\t"?p->birthday?"\t"?p->city?endl;//將數(shù)據(jù)存至!1夕卜

存文件里

out.close();〃定義一個(gè)數(shù)據(jù)指針p,使p依次指向頭結(jié)點(diǎn)指向的下一個(gè)指針,直到p指

向尾節(jié)點(diǎn),依次寫入每個(gè)節(jié)點(diǎn)的信息

cout?"保存成功!"<<endl;

voidTeleMessage::lnsert()〃插入

{End->input();〃尾指針指向input,從單鏈表尾部插入

信息

End?>Next=newTeleNumber;〃尾節(jié)點(diǎn)指向下一個(gè)數(shù)據(jù)節(jié)點(diǎn),開辟一個(gè)新的節(jié)點(diǎn)

八、、

End=End->Next;〃尾節(jié)點(diǎn)指向下一個(gè)節(jié)點(diǎn)coutvvendkv”插入成功M?endl;

voidTeleMessage::Remove()//刪除

{charname[20];

TeleNumber*p=newTeleNumber,*temp=NULL;//定義一個(gè)數(shù)據(jù)指針,指向新的數(shù)據(jù)?定義一個(gè)

數(shù)據(jù)指針temp,指向空函數(shù)

coutvv”請輸入要?jiǎng)h除人的姓名:M?endl;cin?name;

if((p=Search(name)))〃如果找到了要?jiǎng)h除的節(jié)點(diǎn)

{if(Head->Next==p){

Head->Next=p->Next;//利用頭指針,將要?jiǎng)h除的數(shù)據(jù)拉出來,這個(gè)是經(jīng)過找很多人寫出來的。

首先非常感謝百度知友和校友

?

temp=p;〃使指針temp指向p指向的要?jiǎng)h除的節(jié)點(diǎn)

p=p->Next;//摘鏈:使p指向p指向的下一個(gè)節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)

deletetemp;//刪除temp指向的節(jié)點(diǎn)

cout?"刪除成功!"?endl;

I

else

{coukv”沒有找至!!r?endl;

?

TeleNumber*TeleMessage::Search(char*name)〃定義信息類中查找函數(shù)指針

{for(TeleNumber*p=Head->Next;p!=End;p=p->Next)〃定義一個(gè)數(shù)據(jù)指針p指向頭節(jié)點(diǎn)指向的下一個(gè)

節(jié)點(diǎn),頭節(jié)點(diǎn)沒有數(shù)據(jù),數(shù)據(jù)從頭節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)開始存儲(chǔ),P進(jìn)行遍歷

操作,直到指向尾節(jié)點(diǎn)

if(!strcmp(p->name,name))//strcmp作用是倆個(gè)變量相減,如果p所指向的name和要查找

的name相同,則strcmp值為0,非1

{p->display();

returnp;

else

cout?M查無此人"?endl;

return0;systemrcis");

voidTeleMessage::Show()

{for(TeleNumber*p=Head->Next;p!=End;p=p->Next)

p->display();

?

intmain()

{boolflag=true;〃定義一個(gè)布爾型變量flag并初始化為真(true),只認(rèn)識(shí)真(true)和假(false),

1和0,也就是成立和不成立的簡單判斷。

TeleMessagetele;

charname[20];

while(flag)〃如果flag為真

system(MclsH);

coutvv',=:=====通訊錄====="vvendl;

coutvv”1.增加信息Mvvendl;

coutvv”2.顯示信息Mvvendl;

coutvv”3.查找號(hào)碼Mvvendl;

coutvv"4.刪除信息"vvendl;

coutvv"5.保存信息nvvendl;

coutvv',6.退出系統(tǒng)Mvvendl;

cout?M-----------------------------------------------------M?endl;

coutvv”請選擇:";cin?num;

switch(num)

{case1:tele.lnsert();break;

case2:tele.Show();break;

case3:coutvv”請輸入姓名"vvendl;

cin?name;

tele.Search(name);break;

case4:tele.Remove();break;

case5:tele.Save();break;

case6:coutvv”謝謝使用!Mvvendl/eturn0;break;//return0表示退出系統(tǒng)default:

coutvv”輸入錯(cuò)誤,請重新輸入r;coutvvM\nM;

?

system("pause");

}}

[調(diào)試分析]

問題一:

現(xiàn)象:執(zhí)行查找時(shí),運(yùn)行出錯(cuò)。

原因:定義查找時(shí),出錯(cuò)了,經(jīng)過調(diào)試if語句,運(yùn)行成功

問題二:

現(xiàn)象:按0,系統(tǒng)不退出

原因:輸入0后,系統(tǒng)執(zhí)行的是break>而不是return0.

問題三:

現(xiàn)象:刪除操作時(shí),系統(tǒng)顯示倆排相同的信息

原因:定義刪除函數(shù)時(shí),一個(gè)for,一個(gè)if導(dǎo)致刪除執(zhí)行了倆次。解決辦法是for消掉

[運(yùn)行結(jié)果及分析]

^^D:\36詬盤'作業(yè)'歙據(jù)結(jié)構(gòu)作業(yè)\Deb“\通訊錄?=??del

1增加信息

2顯示信息

3箕碼

4S

信息

氟退出系統(tǒng)

清輸入電話號(hào)碼

]]一

嘴輸入紙市

品-D:\360云盤'作業(yè)數(shù)振結(jié)構(gòu)作業(yè)XDebugA通訊錄.eie.E°I

儲(chǔ)

?

Y

J:■S同22城中:也

:f-C■"B2閱城市:=q

c<.D:\360云盤'作業(yè)'數(shù)據(jù)結(jié)構(gòu)作業(yè)\Debug\通訊錄.exe-I°l

西

Fl值f

1加

2顯^M

不o

l碼

3找p

^息

4%g

5息

退

統(tǒng)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論