的个人通讯录管理系统)
♻️ 资源大小3.27MB➡️资源下载https://download.csdn.net/download/s1t16/87430311个人通讯录管理系统问题描述主要内容个人通讯录是记录了同学包含一起上学的学校名称、同事包含共事的单位名称、朋友包含认识的地点、亲戚包含称呼等与本人有关人员的数据集。具体要求提供录入个人信息、修改个人信息姓名和出生日期除外、删除个人信息等编辑功能。提供按姓名查询个人信息的功能。提供查找在 5 天之内过生日的人员的信息以便发出祝贺电话或 E-mail。按照姓名或出生日期排序显示输出。统计在给定月份出生的人数并显示输出。能列出全体人员的姓名、出生日期、电话和 email 地址。能分别列出同学、同事、朋友、亲戚的所有信息。用菜单形式提供程序的各种功能的选择。系统设计开发环境控制台版本VS2015Qt 界面版本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 控件清除 texticon 为空设置属性 arrowType 为**DownArrow”” 这样就变成一个倒三角形状。弹出菜单添加菜单。设置样式。关联菜单信号和槽函数。响应菜单选中信号写槽函数。补充弹出右键菜单。从指定控件的类派生出一个类把这个控件提升为这个派生类。重写 contextMenuEvent 在这里创建菜单和关联信号和槽函数。写对应槽函数。重写界面边框原理实际就是去掉边框然后添加 label 和 按钮控件手动模拟。去掉系统默认边框的显示界面布局左边添加一个 label 控件去掉 text设置 pixmap 属性来设置图片。中间放一个 label 空间然后是 3 个按钮控件。设置对应的图片这里用 QSS 样式设置。QSS 样式设置。代码实现响应 3 个按钮点击信号弹出菜单前面已经提到。按住标题移动功能重写 mousePressEvent mouseReleaseEventmouseMoveEvent 事件。搜索功能编辑框虚字提示设置编辑框属性 placeholderText 即可实现上面的虚字提示功能有输入虚字提示消失。搜索按钮 和 上面最小化 按钮 QSS 设置一样。ListWidget 控件自定义窗口思路ListWidget 控件下的每一个 ItemQListWidgetItem都可以看作一个窗口只要把窗口设置成自定义的窗口即可。创建子窗口关联子窗口和 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 项目的目录路径不能含有中文有中文无法编译收获体会及建议收获1.Qt 编程学习和使用。2.GUI 编程的学习。小项目的开发经验。编程能力提高。资料查询能力提高。Debug 能力提高。团队合作经验增加。建议定义类结构的时候定义好接口就不要再改变即使后面改变了也应该再类内部改变实现而不能改变接口的形式因为本次大作业是采用在控制台下实现基本功能再转移到 Qt 上实现界面。所以在控制台下设计的接口难免会不合适这就导致需要修改参数类型等的问题。由于是直接改原函数的参数并且调用的地方有多处这就给修改带来了很大的麻烦。如果采用原来的调用不变在类里面更改参数的实现那么就可以直接改一处地方类内部而不需要寻找和修改所有调用的地方的参数这样也许会导致程序的效率降低一些但是这是值得的。查询文档看博客的时候要仔细读懂每一句话在 Qt 添加自定义列表就是列表控件里面有按钮或其他控件而不是默认的编辑框控件的时候在第一次查找到的关于自定义控件的资料里面已经提到了具体的实现细节。由于当时看不懂并且没有仔细研究跳过了那篇文档导致了后面查找了大量的资料和其他东西。虽然其中也学到了一些知识但是大部分都做了无用功。变量命名要有意义风格一致以提高代码可读性。先设计好整个程序的框架再编写代码。不要畏难哪怕走弯路也是积累经验。。设计程序要由易到难循序渐进。从用户需求角度上设计程序。合理估算解决问题时间