基于C++实现(控制台+界面)通讯录管理系统【100010012】

news2024/9/22 15:43:58

个人通讯录管理系统

问题描述:

主要内容

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

具体要求

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

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

  • 提供查找在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样式

二、添加槽函数 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版本):

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

主界面

添加菜单

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

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

查看联系人详细信息:

编辑联系人信息:

生日选择:

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

生成祝贺文本:

使用说明

程序的使用:

由界面提示操作即可。

开发环境:

  • 控制台版本:VS2015

    • 如果使用低版本vs打开,请先设置项目的平台工具集属性

    • 设置方式

      • 项目–>属性–>常规–>平台工具集–>当前VS对应的那个选项
  • Qt界面版本:Qt_5_6_0_MinGW_32bit

    • 注意不是使用VS下的Qt插件,必须安装Qt5.6来打开项目,而不是用VS打开。

    • 注意,Qt项目的目录路径不能含有中文,有中文无法编译

♻️ 资源

在这里插入图片描述

大小: 3.27MB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87247954

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/79680.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python小炼(2):文件操作

"一封信,写下太多如果" 如果有一定语言基础的,一定对文件操作十分得"熟悉"!当然,这种熟悉是 引起人恼怒的 也不为过。 python 也有自己的文件操作,那它跟C\C又有何不同呢? 一、文件的基本操作 (…

中国宗教活动场所数据库(数据+python代码)

通常研究,宗教活动场所与公司避税行为,社会整体信任水平以及民营企业创始资金来源等元素相关联。例如,企业注册地的宗教传统负向影响公司避税,企业注册地的宗教传统通过提高管理者的道德意识和强化管理者的风险规避倾向两条机制抑…

Swagger总结

目录 简介: openAPI Springfox: 简介 Springfox的使用 SwaggerUI的使用 Swagger配置 设置扫描的包 设置范围 Swagger常用注解: 控制类、方法生成接口信息 ApiParam ApiModel ApiModelProperty ApiIgnore ApiImplicitParam 部分图片来自百…

SpringBoot日志详解

⭐️前言⭐️ 🍉博客主页: 🍁【如风暖阳】🍁 🍉精品Java专栏【JavaEE进阶】、【JavaEE初阶】、【MySQL】、【数据结构】 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 …

rocketMq相关机制

rocketMq相关机制 topic读写队列 perm字段表示Topic的权限。有三个可选项。 2:禁写禁订阅,4:可订 阅,不能写,6:可写可订阅 这其中,写队列会真实的创建对应的存储文件,负责消息写入。…

小蓝本 第一本《因式分解技巧》第四章 拆项与添项 笔记(第四天)

小蓝本 第一本《因式分解技巧》第四章 拆项与添项 笔记(第四天)前言拆项与添项目的方法分组分解走平均分配分组分解走瞄准公式旧事重提第二章公式(9)好题习题4题目题解错题题号改错经验前言 芜湖,坚持做小蓝本的第四天,今天的知识…

基于LSTM、BP神经网络实现电力系统负荷预测(Python代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

房屋装修设计技巧有哪些?有哪些注意事项

拥有自己的家是每个人的愿望,拥有一座新的房子是一种幸福。但是,作为一个装修小白,装修新房是一件很麻烦的事情。那么,房屋装修设计技巧是什么?房屋的装修设计应该注意些什么?下面我将详细解释一下。 房屋装…

pandas数据分析

目录 题目001: 把list变成一个Series 题目002: 把dict变成一个Series 题目003: 把Series转换成list 题目004: 把series变成一个DataFrame 题目005:用numpy创建Series 题目006:转换series的数据类型 …

【亲测可用】2022最新酒桌小游戏喝酒小程序源码_带流量主

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 喝酒神器3.6,原版本没有广告位,修改增加了广告位, 由多个喝酒小游戏组合而成,具体如下: 大话骰(带音效) 愤怒大叔(带音效,多个皮肤模板用户可选择) …

【大数据入门核心技术-ElasticSearch】(二)ElasticSearch整体架构和重要工作原理

目录 一、整体架构图 二、重要工作原理 1、文档写入原理 2、文档检索原理 一、整体架构 二、重要工作原理 1、文档写入原理 1)选择任意一个DataNode发送请求,例如:node2。此时,node2就成为一个coordinating node(…

我也和 chatGPT 聊了聊

我也和 chatGPT 聊了聊,都是因为最近 chatGPT 太火了! 这是一个大型的 AI 语言模型。你不仅可以和它聊天,问它各种各样的问题,还可以让它写代码、写论文、解数学题、解bug,等等。 可以说,chatGPT 是目前最…

软件安全测试-Web安全测试详解-CSRF攻击

1. 什么是CSRF攻击? CSRF(Cross Site Request Forgery),中文是跨站点请求伪造。CSRF攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击页面,利用目标网站对用户的信任,以用户身份在攻击页…

基于java+springmvc+mybatis+jsp+mysql的洗衣店管理系统

项目介绍 洗衣店管理系统是信息时代的产物,它是洗衣店管理的一个好帮手。有了它不再需要繁重的纸质登记,有了它洗衣店管理员不在需要繁重的工作,一些收费标准和干洗业务等基本信息可以由管理人员及时的对信息进行查询、更新、修改和删除&…

【自然语言处理】【ChatGPT系列】大模型的涌现能力

大语言模型的涌现能力《Emergent Abilities of Large Language Models》论文地址:https://arxiv.org/pdf/2206.07682.pdf 相关博客 【自然语言处理】【ChatGPT系列】大模型的涌现能力 【自然语言处理】【文本生成】CRINEG Loss:学习什么语言不建模 【自然…

web前端期末大作业——餐品后台管理系统(html+css+javascript)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

MySQL 日志之 binlog 格式 → 关于 MySQL 默认隔离级别的探讨

背景问题 再讲 binlog 之前,我们先来回顾下主流关系型数据库的默认隔离级别,是默认隔离级别,不是事务有哪几种隔离级别,别会错题意了 1、Oracle、SQL Server 的默认隔离级别是什么,MySQL 的呢 ? 2、为什…

基于C#+SQL Server2008 开发三层架构(WinForm)图书管理系统【100010014】

图书管理系统 一、项目背景及意义 当今由于信息技术的飞速发展,图书馆作为社会知识信息媒介的功能日益重要,网络环境下的信息资源建设知识仓库的设计,开放存取学术交流模式,知识管理系统,智能检索,数字参…

SDE论文阅读

论文链接:Score-Based Generative Modeling through Stochastic Differential Equations 文章目录摘要引文背景基于郎之动力学的去噪分数匹配/SMLD去噪扩散概率模型/DDPMSDEs的基于分数的生成模型SDEs下的受扰动数据逆转SDE生成样本估计SDE的分数例子:VE…

spring——Spring自动装配——示例

1. 不使用自动装配(autowire"no") autowire"no" 表示不使用自动装配&#xff0c;此时我们必须通过 <bean> 元素的 <constructor-arg>和 <property> 元素的 ref 属性维护 Bean 的依赖关系。 2. 按名称自动装配(autowire"byName"…