版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《高血壓規(guī)范化診治》課件
- 2024年度食用菌產(chǎn)業(yè)投資基金銷售合同3篇
- 2025年南陽貨運(yùn)上崗證模擬考試題
- 2025年洛陽貨運(yùn)考試題庫
- 四川省遂寧市射洪市射洪中學(xué)校2023-2024學(xué)年八年級(jí)上學(xué)期10月月考物理試題
- 2024年版高層管理人員崗位責(zé)任合同
- 2024年時(shí)尚新品發(fā)布攤位租賃合同新品推廣合作協(xié)議3篇
- 2024年版工地建筑工人工期合同
- 2025房地產(chǎn)買賣合同逐條詳解
- 2024年版標(biāo)準(zhǔn)公交出租車租賃協(xié)議范例版B版
- 患者跌倒事件RCA分析
- 中國糖尿病足診治臨床路徑(2023版)-
- 信訪論文資料
- 2022新能源風(fēng)電場測風(fēng)成果分析報(bào)告
- 糖尿病腎病血透患者護(hù)理查房
- 車輛生產(chǎn)進(jìn)度保障措施方案
- 2023國開大數(shù)據(jù)導(dǎo)論實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)2 Hadoop開發(fā)環(huán)境部署
- 牛津深圳版五年級(jí)上冊第9單元第1課時(shí)優(yōu)秀公開課課件
- 2021-2022學(xué)年廣東省廣州市白云區(qū)五年級(jí)(上)期末英語試卷
- 發(fā)酵酸菜加工廠建設(shè)項(xiàng)目可行性研究報(bào)告
- 包豪斯對(duì)現(xiàn)代設(shè)計(jì)的影響
評(píng)論
0/150
提交評(píng)論