通讯簿管理(C++顺序表的应用)

更新时间:2024-01-01 19:13:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

3 通讯簿管理(顺序表的应用)

【问题描述】通讯簿是一个线性表,可以存储一定数量的联系人记录,提供查找、插入、

删除和修改等操作。通讯簿的特点是以查找为主要操作,要求快速查找到指定对象的位置,故宜采用具有随机访问功能的顺序表。

【数据结构】使用顺序表SeqList建立通讯簿。作为表项的联系人记录,至少应包括以下

属性:

{ 序号,姓名,与本人关系,电话号码}

其中序号具有唯一性。序号和姓名可作为查找的主要关键字。与本人关系可枚举为“亲人”、“朋友”和“同事”,主要作用是为联系人分组,并作为次要关键字。

将上述联系人记录定义为一个结构(struct),在主程序中建立模板类顺序表SeqList的对象时用该结构实例化表结点的类型。

【主要功能】程序应为用户提供操作选择界面,必要的操作包括:查找某人电话号码,添

加新记录,修改记录,删除记录,打印亲人清单、朋友清单或同事清单以及退出等。另外,为初始化方便,原始数据可存储在磁盘文件中。

【主要代码】

#include #include #include static n=1;

enum Relation{Friends,Familiers,Colleague}; template struct Person

{ char Num[10];//编号

char PhoNum[12];//电话号码 char Name[20];//姓名 int m;//关系

Person( int &ite) {m=ite;}

Person(int &p1,char Name[],char P[], char item[]) { for(int i=0;i<20;i++){ Name[i]=Name[i]; } for(int j=0;j<11;j++){PhoNum[j]=P[j];} for(int k=0;k<10;k++) {Num[k]=item[k];} m=p1; }};

template class SeqList {protected:

Person *data; public:

SeqList(T& x){data=new Person(x);} bool Input(); void Output(); void Insert(); void Search(); void Show_All(); void Delete(); void Correct();

void Show_Select(); void Show_Friends(); void Show_Familiers(); void Show_Colleague(); };

1

template

bool SeqList::Input() { static l;

cout<<\请输入您要添加的人的编号:\cout<<\请输入您要添加的人的姓名:\cout<<\请输入您要添加的人的电话:\

cout<<\请输入您要添加人与您的关系亲人(1)朋友(2)同事(3)\ l++; n++; return true; }

template

void SeqList::Insert()

{ this->Input(); cout<<\信息已保存好!\template

void SeqList::Search() { char pr[20];

cout<<\请输入您要查找的序号或姓名:\cin>>pr; bool flag=1;

for(int li=0;li

{ if(IfEqual(pr,data[li].Name)||IfEqual(pr,data[li].Num)) {

cout<<\序号:\姓名:\电话:\

for(int k=0;data[li].PhoNum[k]!='\\0';k++) {cout<

cout<<'\\t';Switch(data[li].m);flag=0; } }

if(flag) cout<<\查找失败!请查证后再试!\}

template

void SeqList::Show_All()

{ cout<<\所有人的信息如下:\ for(int lm=0;lm

cout<<\序号:\姓名:\电话:\

for(int k=0;data[lm].PhoNum[k]!='\\0';k++) {cout<

cout<<'\\t'; Switch(data[lm].m); } }

template

void SeqList::Show_Select()

{cout<<\请选择要显示联系人与您的关系:亲人(1),朋友(2),同事(3),个人(4):\ int m;cin>>m; switch(m) {

case 1:{Show_Familiers();break;} case 2:{Show_Friends();break;} case 3:{Show_Colleague();break;} case 4:{Search();break;}

default: {cout<<\关系设置错误!\ }}

template

void SeqList::Show_Friends()

{ cout<<\所有朋友的信息如下:\ for(int lm=0;lm

cout<<\序号:\姓名:

2

\电话:\

for(int k=0;data[lm].PhoNum[k]!='\\0';k++) {cout<

template

void SeqList::Show_Familiers()

{ cout<<\所有亲人的信息如下:\ for(int lmm=0;lmm

cout<<\序号:\姓名:\电话:\

for(int k=0;data[lmm].PhoNum[k]!='\\0';k++) {cout<

cout<<'\\t'; Switch(data[lmm].m); } }}

template

void SeqList::Show_Colleague()

{ cout<<\所有同事的信息如下:\ for(int lmp=0;lmp

cout<<\序号:\姓名:\电话:\

for(int k=0;data[lmp].PhoNum[k]!='\\0';k++) {cout<

cout<<'\\t'; Switch(data[lmp].m); } }}

template

void SeqList::Correct() { char ptk[20];

cout<<\请输入您要修改联系人的序号或姓名:\ bool flag=1; for(int lp=0;lp>data[lp].Num; cout<<\修改姓名:\ cin>>data[lp].Name; cout<<\修改电话号码:\ cin>>data[lp].PhoNum; cout<<\修改与您的关系:亲人(1),朋友(2),同事(3):\ cin>>data[lp].m; flag=0; } }

if(flag) cout<<\您要修改的联系人不存在!\}

template

void SeqList::Delete() { char ptr[20];

cout<<\请输入您要删除的联系人的序号或姓名:\ for(int lr=0;lr

if(flag) cout<<\删除失败!\

3

void Switch(int i) { switch(i) {

case 1: {cout<<\亲人\ case 2: {cout<<\朋友\ case 3: {cout<<\同事\ default: {cout<<\关系设置错误!\ }}

int IfEqual(char p1[],char p2[])

{ int flag=strcmp(p1,p2); return flag; } void Menu() { cout<<\★★★★★★★★★★★★★★★★★★★★★★★★★★\

<<\※ ※\

<<\※ ※我※的※通※迅※录※ ※\

<<\※ ※\

<<\※ 1. 添加新联系人. 4. 修改信息. ※\

<<\※ ※\

<<\※ 2. 删除联系人. 5. 查询联系人. ※\

<<\※ ※\

<<\※ 3. 显示所有联系人. 6. 关闭通讯簿. ※\

<<\※ ※\

<<\★★★★★★★★★★★★★★★★★★★★★★★★★★\<

void main()

{ cout<<\欢迎使用通讯簿!\

char ptr[20];cout<<\安全验证,请输入密码:\ { int flag=strcmp(ptr,\洪咏波\ if(flag==0)cout<<\通过验证!\ else { cout<<\对不起,您无访问权限!\ }

bool flag1=0; Menu(); int x=0; SeqList hyb(x); while (1) {

cout<<\请选择菜单 :\ int n; cin>>n; switch (n) {

case 1: hyb.Insert();break;//添加联系人 case 2: hyb.Delete();break;//删除联系人

case 3: hyb.Show_All();break;//显示所有联系人 case 4: hyb.Correct();break;//修改联系人信息

case 5: hyb.Show_Select();break;//选择查询联系人

case 6: cout <<\安全退出\ default: break;

4

}

if(flag1) break; } }

【实验过程】

【实验体会】小小的顺序表应用于实际的电话簿还真有些难度,Switch开关语句也用得比较多,写完后想想应该给通讯簿加把锁,查资料才搞清楚包含在stdlib.h中的exit(1)可以判断后直接退出程序。以前一直以为exit(1)可有可无,现在在实际应用中才理解了它的意思。看来课本上的内容还是蛮有用的。程序还存在一些缺陷,设想加入Output语句用来输出每次操作后的结果,减少程序的代码,不必要调用函数每次都自己写输出,但是没有试验成功,还有待改进!

5

本文来源:https://www.bwwdw.com/article/2qdx.html

Top