A09-C++实现通讯录管理系统

1 通讯录的要求

 这整个通讯录的要求已经将其划分成了好几个不同的模块,因此很容易联想到要用switch-case语   句来实现。

2 自己编写的程序

思路:设计一个结构体来存储联系人信息->在main函数体内申明联系人数组->在main函数体直接进行switch-case的操作。

(1)添加联系人:在已有数组中姓名为空的元素中添加。

(2)显示联系人:将数组中的元素全部打印显示。

(3)删除联系人:根据姓名找到数组中对应的联系人,将其信息全部赋值为空。

(4)查找联系人:根据姓名查找数组中的联系人。

(5)修改联系人:根据姓名来查找联系人,将其信息重新赋值。

(6)清空联系人:利用for循环遍历数组,全部赋值为空。

(7)退出通讯录:利用return立即结束该段程序或状态标志位退出循环。

【大体程序】

 

 

 以上是前面三个小步骤的程序,这样写的程序存在以下几点问题(作为程序本身和练习):

(1)添加联系人始终是往数组后面空的位置上进行添加,如果前面有位置已经被删除称为空,则不能再次被添加进去。

(2)显示联系人的时候把所有的都打印出来,十分浪费时间。

(3)没有使用到函数封装。

(4)没有使用到指针。

3 老师的程序

思路:申明两个结构体变量,一个是通讯录结构体,一个是联系人结构体,通讯录结构体内是一个联系人结构体数组和长度(用来存储联系人的个数),联系人结构体存储联系人信息->利用switch-case结构来调用各类函数->函数的封装此时可以调用一个通讯录结构体指针(就直接包含了联系人结构体和长度),也可以再传输进去用户的输入来实现项目功能

【大体程序】

(1)主函数体

 (2)封装的添加联系人函数

(3)封装的显示联系人函数

 

(4)封装的删除联系人函数 

注意:此处是一个逻辑删除(在文章后面进行解释)

【这段程序解决了哪些问题】

(1)由于存在数组长度,则在显示的时候没有必要全部打印;

(2)删除联系人的时候使用了逻辑删除,即程序覆盖,这使得整个数组往前移位了,这样就不存在中间的元素被删了,数组中间空出来了;

(3)利用上了函数封装;

(4)利用了指针

 【该程序的一些启发】

(1)Cin是c++的标准输入流,他可以忽略空,tab,换行

(2)使用return 可以有效解决立刻结束某个程序体的问题,可以不使用标志符号

(3)定义了两个结构体,结构体1是通讯录结构体,结构体2是联系人结构体,在通讯录结构体中添加了联系人结构体,在主函数体当中申明变量,然后封装函数,利用指针指向结构体内存

(4)三目运算符的使用可以大大提高效率,比如在判断男女的时候,输入是1或2,那么使用三目运算符1输出男,2输出女

(5)逻辑删除,

删除有两种办法,第一种是在数组中找到联系人,初始化其全部的信息,第二种是我们建立的数组,将数组元素前移,既可以实现删除

实际代码实现:&S->Array[i]=&S->Array[i+1]

用逻辑删除可以保证数组长度中始终有元素,否则数组中删除的元素仍然在数组长度中

(6)逻辑清空:

逻辑清空cmS5->c_Size = 0;直接让长度为0,在查找,显示等操作的时候,一般要先用for循环来遍历数组,由于Size的长度回到了0,这个时候就找不到数组元素了,相当于清空。

但是这种方法没有把内存清空。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值