通讯簿管理(顺序表的应用)_C++程序.docx

上传人:scccc 文档编号:13891029 上传时间:2022-01-25 格式:DOCX 页数:8 大小:16.99KB
返回 下载 相关 举报
通讯簿管理(顺序表的应用)_C++程序.docx_第1页
第1页 / 共8页
通讯簿管理(顺序表的应用)_C++程序.docx_第2页
第2页 / 共8页
通讯簿管理(顺序表的应用)_C++程序.docx_第3页
第3页 / 共8页
通讯簿管理(顺序表的应用)_C++程序.docx_第4页
第4页 / 共8页
通讯簿管理(顺序表的应用)_C++程序.docx_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《通讯簿管理(顺序表的应用)_C++程序.docx》由会员分享,可在线阅读,更多相关《通讯簿管理(顺序表的应用)_C++程序.docx(8页珍藏版)》请在三一文库上搜索。

1、3 通讯簿管理(顺序表的应用)【问题描述】通讯簿是一个线性表,可以存储一定数量的联系人记录,提供查找、插入、删除和修改等操作。通讯簿的特点是以查找为主要操作,要求快速查找到指定对象的位置,故宜采用具有随机访问功能的顺序表。【数据结构】使用顺序表SeqList建立通讯簿。作为表项的联系人记录,至少应包括以下属性: 序号,姓名,与本人关系,电话号码其中序号具有唯一性。序号和姓名可作为查找的主要关键字。与本人关系可枚举为“亲人”、“朋友”和“同事”,主要作用是为联系人分组,并作为次要关键字。将上述联系人记录定义为一个结构(struct),在主程序中建立模板类顺序表SeqList的对象时用该结构实例化

2、表结点的类型。【主要功能】程序应为用户提供操作选择界面,必要的操作包括:查找某人电话号码,添加新记录,修改记录,删除记录,打印亲人清单、朋友清单或同事清单以及退出等。另外,为初始化方便,原始数据可存储在磁盘文件中。【主要代码】#include#includestatic n=1;enum RelationFriend,Relative,colleague;templatestruct People char Number10;/编号 char PNumber12;/电话号码 char name20;/姓名 int m;/关系 People( int &ite) m=ite; People(in

3、t &p1,char Name,char P, char item) for(int i=0;i20;i+) namei=Namei; for(int j=0;j11;j+) PNumberj=Pj; for(int k=0;k10;k+) Numberk=itemk; m=p1; ;templateclass SeqListprotected: People *data; int maxSize; int last; void reSize(int newSize);public: SeqList()data=new People; SeqList(T& x)data=new People(

4、x); People *getdata()return data; bool input(); void output(); void tianjia(); void chaxun(); void showall(); void remove(); void xiugai(); void showfriend(); void showrelative(); void showcolleague();template bool SeqList:input() static l;coutdatal.Number; coutdatal.name;coutdatal.PNumber;coutdatal

5、.m;l+;n+;return true;bool deng(char p1,char p2)bool flag=1;for(int i=0;p1i!=0|p2i!=0;i+)if(p1i!=p2i)return flag=0;return flag;template void SeqList:tianjia()this-input();cout信息已保存好!endl;template void SeqList:chaxun()char pr20;cout请输入您要查找的姓名或电话号码:pr;bool flag=1;for(int li=0;lin-1;li+)if(deng(pr,datal

6、i.name)|deng(pr,datali.PNumber)cout#datali.Numbert姓名:datali.namet电话号码:;for(int k=0;datali.PNumberk!=0;k+)coutdatali.PNumberk;coutt;switch(datali.m)case 0:cout朋友tendl;break;case 1:cout亲人tendl;break;case 2:cout同事tendl;break;default: cout关系设置错误!;break; flag=0;if(flag) cout查找失败!endl;void inface() cout e

7、ndl; couttt endl tt * endl tt 通 迅 录 endl tt * endl tt 1. 添加新联系人. 6. 显示同事信息. endl tt endl tt 2. 删除联系人. 7. 修改信息. endl tt endl tt 3. 显示所有联系人. 8.查询联系人. endl tt endl tt 4.显示亲人信息. endltt 按其他退出 endltt 5.显示朋友信息. endltt endl tt endl endl;template void SeqList:showall()cout所有人的信息如下:endl;for(int lm=0;lmn-1;lm+

8、)cout#datalm.Numbert姓名:datalm.namet电话号码:;for(int k=0;datalm.PNumberk!=0;k+)coutdatalm.PNumberk;coutt;switch(datalm.m)case 0:cout朋友tendl;break;case 1:cout亲人tendl;break;case 2:cout同事tendl;break;default: cout关系设置错误!;break;template void SeqList:showfriend()cout朋友的信息如下:endl;for(int lm=0;lmn-1;lm+)if(data

9、lm.m=0)cout#datalm.Numbert姓名:datalm.namet电话号码:;for(int k=0;datalm.PNumberk!=0;k+)coutdatalm.PNumberk;coutt;switch(datalm.m)case 0:cout朋友tendl;break;case 1:cout亲人tendl;break;case 2:cout同事tendl;break;default: cout关系设置错误!;break;template void SeqList:showrelative()cout亲人的信息如下:endl;for(int lmm=0;lmmn-1;l

10、mm+)if(datalmm.m=1)cout#datalmm.Numbert姓名:datalmm.namet电话号码:;for(int k=0;datalmm.PNumberk!=0;k+)coutdatalmm.PNumberk;coutt;switch(datalmm.m)case 0:cout朋友tendl;break;case 1:cout亲人tendl;break;case 2:cout同事tendl;break;default: cout关系设置错误!;break;template void SeqList:showcolleague()cout同事的信息如下:endl;for(

11、int lmp=0;lmpn-1;lmp+)if(datalmp.m=2)cout#datalmp.Numbert姓名:datalmp.namet电话号码:;for(int k=0;datalmp.PNumberk!=0;k+)coutdatalmp.PNumberk;coutt;switch(datalmp.m)case 0:cout朋友tendl;break;case 1:cout亲人tendl;break;case 2:cout同事tendl;break;default: cout关系设置错误!;break;template void SeqList:xiugai()char ptk20

12、;coutptk;bool flag=1;for(int lp=0;lpn-1;lp+)if(deng(ptk,datalp.name)|deng(ptk,datalp.PNumber)coutdatalp.Number; coutdatalp.name;coutdatalp.PNumber;coutdatalp.m;flag=0;if(flag) cout您要修改的人不存在!endl;template void SeqList:remove()char ptr20;coutptr;bool flag=1;for(int lr=0;lrn-1;lr+)if(deng(ptr,datalr.na

13、me)|deng(ptr,datalr.PNumber)strcpy(datalr.Number,datan-2.Number); strcpy(datalr.name,datan-2.name);strcpy(datalr.PNumber,datan-2.PNumber);datalr.m=datan-2.m;n-;cout信息已删除!endl; flag=0;if(flag) cout删除失败!endl; void main() bool flag1=0; inface(); int x=0; SeqList a(x); while (1) coutttmmm; switch (mmm)

14、case 1: a.tianjia();/添加联系人 break; case 2: a.remove();/删除联系人 break; case 3: a.showall();/显示所有联系人 break;case 4: a.showrelative();/显示亲人清单 break; case 5: a.showfriend();/显示朋友清单 break;case 6: a.showcolleague();/显示同事清单 break;case 7: a.xiugai();/修改信息 break; case 8: a.chaxun();/查询联系人 break; case 0: cout end

15、l 谢谢使用! endl endl; flag1=1; break; default: break; if(flag1) break; 【实验过程】 * 通 迅 录 * 1. 添加新联系人. 6. 显示同事信息. 2. 删除联系人. 7. 修改信息. 3. 显示所有联系人. 8.查询联系人. 4.显示亲人信息. 按其他退出 5.显示朋友信息. 选择:1请输入您要添加的人的姓名:kuang请输入您要添加人的电话号码:15150031011请输入您要添加人与您的关系(0为朋友,1为亲人,2为同事):0信息已保存好!选择:1请输入您要添加的人的姓名:huqiong请输入您要添加人的电话号码:1891

16、3453476请输入您要添加人与您的关系(0为朋友,1为亲人,2为同事):1信息已保存好!选择:3所有人的信息如下:#1姓名:kuang电话号码:15150031011朋友#2姓名:huqiong电话号码:18913453476亲人选择:2请输入您要删除的姓名或电话号码:kuang信息已删除!选择:3所有人的信息如下:#1姓名:huqiong电话号码:18913453476亲人选择:8请输入您要查找的姓名或电话号码:18913453476#1姓名:huqiong电话号码:18913453476亲人选择:0谢谢使用!Press any key to continue【实验体会】再写通讯录时,开始

17、遇到了很多问题,最主要的一个就是通过顺序表来存放一个人的信息,到底是存放这个节点,还是存放这个节点的指针。再一个就是字符串的输入,如果用cin.getline()函数,将产生很多预想不到的错误,而且整个过程中,如果有多个cin.getline()函数,运行的时候却只运行一个。同样的,添加函数中,也存在一个动态分配的问题,只要有动态分配,就会出现内存的问题。在参数传弟过程中,应该特别注意这个问题。刚开始,在控制输入删除函数中,用了个静态的变量来控制结点的个数。这样也会引起内存的不协调。后来改成了,全局变量。编号设置成默认的,删除函数,如果删除的是第i个位置的结点,那么就用最后一个结点来代替第i个位置的结点。这是考虑到通训录的顺序影响并不大的原因。8

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1