基于C++和QT实现的个人通讯录管理系统

资源下载地址:https://download.csdn.net/download/sheziqiong/85722043
资源下载地址:https://download.csdn.net/download/sheziqiong/85722043

个人通讯录管理系统

问题描述

主要内容:

个人通讯录是记录了同学(包含一起上学的学校名称)、同事(包含共事的单位名称)、朋友(包含认识的地点)、亲戚(包含称呼)等与本人有关人员的数据集。

具体要求:

提供录入个人信息、修改个人信息(姓名和出生日期除外)、删除个人信息等编辑功能。

提供按姓名查询个人信息的功能。

提供查找在 5 天之内过生日的人员的信息,以便发出祝贺电话或 E-mail。

按照姓名或出生日期排序,显示输出。

统计在给定月份出生的人数,并显示输出。

能列出全体人员的姓名、出生日期、电话和 email 地址。

能分别列出同学、同事、朋友、亲戚的所有信息。

用菜单形式提供程序的各种功能的选择。

系统设计

开发环境:

控制台版本:VS2015

Qt 界面版本:Qt_5_6_0_MinGW_32bit

控制台版本与界面版本:

程序共有两个版本,控制台版本和界面版本。在程序设计之初,我们为了由易到难循序渐进,我们先在控制台下实现通讯录的各个功能。在完成并完善了控制台下最初版本之后,再设计并实现最终的界面版本。

类体系设计:

程序结构中以 Person 类为基类,以 Relative、Friend、Colleague 和 Classmate 为其派生类。程序通过生成这四个派生类的对象来存储通讯录联系人信息。基类 Person 类中包含了姓名、电话、地址等基本信息,每一个派生类各自增加了不同的数据成员以及相应返回其数据成员的成员函数。

程序中还定义了 AddressBook 类,这个类严格意义来说就是我们所理解的通讯录。其数据成员中包含了一个 Person 类型的指针数组。其成员函数共有七个,七个函数可对该 Person 类型指针数组进行操作,以完成题目所要求的添加联系人、删除联系人、显示所有联系人并排序等功能。

类体系设计框架如图。

在这里插入图片描述

类定义:(图片代码中有注释详细说明)

基类 Person 类:

数据成员:

在这里插入图片描述

成员函数:

派生类 Relative:

派生类 Colleague:

派生类 Friend:

派生类 Classmate:

在这里插入图片描述

通讯录类 Addressbook:

头文件:

Cpp 文件:

通讯录 Addressbook 类各部分功能:

输入联系人信息:

删除联系人:

在这里插入图片描述

对联系人进行排序:

保存到文件夹

读取文件

查找联系人

另外需要说明的是,控制台版本中基类 Person 类设为抽象类,函数 Print、Print2 为纯虚函数。(Print 输出中文如“姓名、电话号码”等等,Print2 则输出相应的具体成员信息) 四个派生类都有其版本的虚函数以满足输出不同信息的要求。

因为读写兼容性问题(二进制文本读写和虚函数似乎不兼容,这个问题我们一直未能解决。目前已将该情况向老师说明,但暂时还未得到解决)因此我们在控制台版本中继续采用抽象类以及虚函数,并将二进制文本读写改为文本读写。在界面版本中我们则放弃采用抽象类和虚函数,继续使用二进制文本读取。这样也是为了更多使用我们所学知识。

界面实现技术细节:

添加菜单:

  • 添加 QToolButton 控件,清除 text,icon 为空,设置属性 arrowType 为
  • **DownArrow”” ,这样就变成一个倒三角形状。
  • 弹出菜单
  • 添加菜单。
  • 设置样式。
  • 关联菜单信号和槽函数。

响应菜单选中信号(写槽函数)。

补充:弹出右键菜单。

从指定控件的类派生出一个类,把这个控件提升为这个派生类。

重写 contextMenuEvent ,在这里创建菜单和关联信号和槽函数。

写对应槽函数。

重写界面边框

在这里插入图片描述

原理实际就是去掉边框,然后添加 label 和 按钮控件手动模拟。

去掉系统默认边框的显示

界面布局

左边添加一个 label 控件,去掉 text,设置 pixmap 属性,来设置图片。

中间放一个 label 空间,然后是 3 个按钮控件。

设置对应的图片,这里用 QSS 样式设置。

QSS 样式设置。

代码实现

响应 3 个按钮点击信号,弹出菜单前面已经提到。

按住标题移动功能,重写 mousePressEvent mouseReleaseEvent

mouseMoveEvent 事件。

搜索功能,编辑框虚字提示

设置编辑框属性 placeholderText ,即可实现上面的虚字提示功能,(有输入虚字提示消失)。

搜索按钮 和 上面最小化 按钮 QSS 设置一样。

ListWidget 控件自定义窗口

思路:

ListWidget 控件下的每一个 Item(QListWidgetItem)都可以看作一个窗口,只要把窗口设置成自定义的窗口即可。

创建子窗口,关联子窗口和 ListWidget,关联子窗口和父窗口的信号和槽函数。

槽函数之删除子窗口。

判断信号子窗口。

使用 takeItem 来去除子窗口。

些函数。

TabWidget 控件

这里实际当按钮使用,使用 TabWidget 方便创建多个按钮和响应时间。

QSS 样式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yU01y9da-1655788050259)(https://www.writebug.com/myres/static/uploads/2022/6/20/aa5133ff237628d58e866378360c2e52.writebug)]

添加槽函数 void MainWindow::on_tabWidget_currentChanged(int index)

ListItem 子窗口

设置 label 的图片 和 按钮的样式

移入显示按钮,移出隐藏按钮(重写 enterEvent leaveEvent)

弹出(创建)窗口

日期的计算和选择

双击显示详细信息

重写 ListItemForm 的 mouseDoubleClickEvent 事件即可(不是在主窗口的 ListWidget 响应双击事件)

窗口编辑和查看切换

编辑模式:

查看模式:

思路:

通过 setEnabled 函数来设置是否可编辑。

通过 setStyleSheet 函数来改变显示的样式。

禁用控件之后,字体会变灰(包括上面的 Tab 控件也是这样来避免禁用后难看的问题)。

通过 样式表里面的 color 属性来设置字体,避免字体变灰。

编辑框边框隐藏。通过设置样式表里面 border 属性大小为 0px 来隐藏边框

TabWidget 设置 Tab 按钮的样式。

DataWidget 控件,设置 上面的样式并没有 去除边框 和 黑色背景。

所以使用一个 label 控件来显示查看模式,编辑模式才显示 DataEdit 控件。

弹出文件选择框:

EXE 文件图标设置:

把图标文件 icon.ico 复制到项目目录下

在 .pro 文件以下一下语句

程序测试

界面设计细节(QT 版本):

页面设计与基本功能如下:

主界面:

在这里插入图片描述

添加菜单:

搜索功能,编辑框虚字提醒:

搜索编辑框自动补全功能:

查看联系人详细信息:

编辑联系人信息:

生日选择:

查询最近生日与生日提醒:

资源下载地址:https://download.csdn.net/download/sheziqiong/85722043
资源下载地址:https://download.csdn.net/download/sheziqiong/85722043

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shejizuopin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值