基于C+++Mysql实现(CS界面)校友管理系统(面向对象)

2024-09-05 14:12

本文主要是介绍基于C+++Mysql实现(CS界面)校友管理系统(面向对象),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

校友管理系统(面向对象课程设计)

前言

校友管理系统要求以高校校友管理业务为背景,设计管理系统程序。

系统需要包含的主要信息有:校友基本信息:序号,姓名,电话,专业,现从事的专业,职务,工作年限,所在城市等;工作单位信息:单位名称,所属行业,单位性质(高校,企业、事业单位等),单位规模等;毕业学校信息:学校代码,校名,地址,性质(985,211,一班本科等)等;校友联系信息:校友姓名,所在城市联系人,办公地点等。系统要求能完成的功能有:(1)录入信息用文件保存;(2)能建立、修改和增删校友及单位的相关信息;(3)能够按多种方式进行查询;

本系统的信息端采取了数据库的方式来读取和储存系统中的数据,并设置了相关类型、索引、外键来建立信息之间的关系。信息的处理端采取使用Qt编写的可视化界面来进行数据的查找、筛选、排序、修改、增删等操作。

摘要

校友管理系统是典型的信息管理系统,主要功能包括对各种基本信息的建立、维护和查询。其软件开发主要包括学生基本信息的管理,档案信息的管理等。本系统要求可以进行学生基本信息的添加,删除,修改和查询,及档案信息的建立、维护和查询等。

本系统的开发采用面向对象的设计思想,所用软件环境为Qt Creator和MySQL。实现思想为将校友各项信息抽象为数据库信息存储,并利用Qt库类和SQL类的连接访问来实现对校友信息的管理。

本文档系统地介绍了校友管理系统的设计思想和开发过程。

关键词: Qt Creator;MySQL;C++;图形界面

系统总体设计

校友管理系统是一套功能强大、操作简便而又实用的校友信息管理软件,它可以被广泛的应用于各高校校友之间的信息交换。开发此校友系统的目的为了克服高校师生传统落后的信息交换方式,难以应对信息更换等突发情况,联系人过多、杂乱等问题,根据对现有校友联系信息记录模式的分析,确定了该系统需实现以下功能:

  1. 实现对校友有关的信息的添加、删除、查询、修改等操作;
  2. 实现各校友实时共享、更新联系信息;
  3. 实现各校友筛选符合条件的校友联系信息;
  4. 实现联系信息的导出、备份功能;

系统功能模块图

根据用户需求,本系统将主要实现以下功能:

其中:
读取:包括对校友信息、学校信息、公司信息的读取。
查询:针对校友信息,按编码、姓名、电话、职务等可见字段进行模糊查询。
排序:对于可见字段,按列进行排序的功能。
筛选:对于可见字段,按内容进行多列筛选显示。
添加:在信息末尾添加新的校友信息字段记录。
删除:对已存在校友信息、学校信息、公司信息进行删除操作。
打印(未完成):将校友详细信息以图片格式输出。
维护:对所有数据信息和操作进行备份、记录。

各类间关系

本系统共主要使用23种类:

  • 其中Qt类库含13种(八边形框表示):主视窗类、浮动视窗类、对话视窗类、工具栏类、按钮类、菜单栏类、表格类、关系表格模型类、数据库类、标签类、行编辑器类、下拉框类、排布器类;
  • 继承自Qt类库7种(圆角矩形框表示):主窗口类、连接视窗类、关于视窗类、表格数据视窗类、 用户视窗类、学校视窗类、公司视窗类、查找视窗类;
    自定义类2种(方角矩形框表示):筛选框类、自定义表头类;
  • 其余部分为以上主要类的对象实现(六边形框表示)。
类名父类子类对象功能
主视窗QWidget主窗口用于设计带有菜单栏、工具栏、状态栏的主窗口
浮动视窗QWidget表格数据视窗可以停靠在主视窗的窗口
对话视窗QWidget如图以窗口显示的对话框
工具栏QWidget工具栏提供可添加元件的工具栏
按钮类QObject如图用于鼠标、键盘事件响应
菜单栏QWidget菜单栏提供可添加元件的菜单栏
表格类QAbstractItemView数据表格用于显示表格数据
关系表格模型QSqlTableModel数据模型用于操作数据库内信息
数据库数据库用于接入数据库
标签类QFrame在窗口中显示文字或图片
行编辑QWidget提供可输入的文字编辑器
下拉框QWidget提供带选择的输入编辑器
排布器QLayoutlayout用于自动排布窗口中元件
主窗口主视窗Alumni添加元件后的主视窗
连接视窗对话视窗用于连接数据库的视窗
关于视窗对话视窗用于显示软件信息
表格数据视窗浮动视窗显示数据的主要窗口
用户视窗对话视窗显示用户详细信息的窗口
学校视窗对话视窗显示学校详细信息的窗口
公司视窗对话视窗显示公司详细信息的窗口
查找视窗对话视窗用于查找数据行
筛选框QWidget筛选框用于显示数据筛选窗口
自定义表头QHeaderView自定义表头用于在表格中插入筛选框元件

以下是各主要类之间关系说明图:

详细设计

本系统主要功能包括:信息读取,编辑,排序,筛选,查找,打印,维护等

其中信息读取功能使用连接视窗类和表格数据视窗类来实现,编辑、排序、筛选、查找、打印功能使用表格数据视窗和详细数据视窗来实现。下面分别介绍连接视窗类,表格数据视窗类,详细数据视窗的详细设计。

连接视窗类

  • 主要功能:连接数据库
  • 具体实现流程:
    主窗口连接按钮触发弹出连接视窗
    设置、排布数据库连接相关编辑信息元件
    用户输入相关连接信息并点击连接
    返回错误信息或获得数据库指针并进入表格数据视窗界面

  • 主要定义:
    • 成员变量:layout、kindBox、hostLine、dataLine、userLine、portLine、passwordLine、connectLine、btn、db。
    • 成员函数:link、getDB。
  • 成员函数link主要功能为连接数据库,实现方式为:作为槽函数与btn按钮绑定,在按钮点击触发时读取成员变量Box和各Line的内容,并使用db数据库类进行链接。
  • 成员函数getDB主要功能为获取数据库指针,实现方式为:作为共有成员函数,在数据库连接成功后传递数据库信息至表格数据视窗内。

表格数据视窗类

  • 主要功能:显示数据信息,并进行排序、筛选、编辑等操作。
  • 具体实现流程:
    连接视窗数据库连接成功后展开表格数据视窗
    设置右键菜单、表格、数据模型、表头信息等
    右键菜单进行数据刷新、切换数据表、增加信息、查找信息
    点击表头和筛选元件进行排序、筛选
    双击数据行弹出详细数据视窗界面进行编辑信息。

  • 主要定义:
    • 成员变量:db、Parent、tableview、menu、RefreshAction、AddAction、FindAction、PeopleAction、SchoolAction、CompanyAction、showFilter、model、Filter、findwidget。
    • 成员函数:dataClick、Menu、refresh、add、find、showPeople、showSchool、showCompany、onDelete、onFilterClicked、onHeaderDataChanged、onFilterHide。
  • 成员函数dataClick主要功能为弹出详细数据视窗界面,实现方式为:作为槽函数与menu中的AddAction绑定,在菜单栏按钮点击时触发函数信号,检测model当前数据表名,并弹出相应详细数据视窗。
  • 成员函数refresh主要功能为读取数据信息,实现方式为:作为槽函数与menu中的RefreshAction绑定,在菜单栏按钮点击时触发函数信号,刷新model中的数据信息,并刷新showFilter中的筛选信息。
  • 成员函数add主要功能为添加信息,实现方式为:作为槽函数与menu中的AddAction绑定,在菜单栏按钮点击时触发函数信号,添加一行空白数据,并呼出详细数据视窗进行编辑。
  • 成员函数find主要功能为查找信息,实现方式为:作为槽函数与menu中的FindAction绑定,在菜单栏按钮点击时触发函数信号,呼出findwidget窗口进行数据查找。
  • 成员函数showPeople、showSchool、showCompany主要功能为切换数据表,实现方式为:作为槽函数与menu中相应的Action绑定,在菜单栏按钮点击时触发函数信号,初始化表格数据并切换数据表。
  • 成员函数onDelete、onFilterClicked、onHeaderDataChanged、onFilterHide主要功能为处理筛选框事件,实现方式为:作为槽函数与showFilter中的信号触发函数绑定,在筛选框编辑时时触发相应函数信号,实现数据筛选功能。

详细数据视窗类

  • 主要功能:显示和编辑某一条数据的详细信息
  • 具体实现流程:
    鼠标双击某一条数据或触发addAction
    设置、排布数据相关编辑信息元件
    信息元件链接数据表数据
    用户编辑修改信息,点击保存、取消或删除
    提交信息并保存,检测是否提交成功
    返回表格数据视窗

  • 主要定义:
    • 成员变量:layout、mapper、btn、model、Row、若干Edit、若干Box
    • 成员函数:save、remove、cancel
  • 成员函数save主要功能为保存数据,实现方式为:作为槽函数与btn按钮绑定,在按钮点击触发时读取成员变量Box和各Line的内容,并使用mapper数据映射实现数据保存。
  • 成员函数remove主要功能为删除数据,实现方式为:作为槽函数与btn按钮绑定,在按钮点击触发时调用model的成员函数removeRow删除一行数据。
  • 成员函数cancel主要功能为取消操作,实现方式为:作为槽函数与btn按钮绑定,在按钮点击触发时调用窗口类的成员函数close关闭详细数据视窗并返回父窗口。

系统测试

测试方法

软件测试的一般方法有:白盒测试、黑盒测试、灰盒测试

白盒测试是指:借助程序内部的逻辑和相关信息,通过检测内部动作是否按照设计规格说明书的设定进行,检查每一条通路能否正常工作。

黑盒测试是指:把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。

灰盒测试是指:介于黑盒测试和白盒测试之间。灰盒测试除了重视输出相对于出入的正确性,也看重其内部表现。但是它不可能像白盒测试那样详细和完整。它只是简单的靠一些象征性的现象或标志来判断其内部的运行情况,因此在内部结果出现错误,但输出结果正确的情况下可以采取灰盒测试方法。

本系统采用黑盒测试方法进行测试

测试用例

本系统使用MySQL进行数据存储,采用Navicat进行数据管理测试,所用数据表有:people、company、school、job、major、scale、trade、work、propertiesc、propertiess。其中job、major、scale、trade、work、propertiesc、propertiess为预设数据,不可通过本系统进行编辑。

  • School测试数据共6组:
iIdNameAddressPropertiesList
11school1address_school_1211工程院校
22school2address_school_2985工程院校
33s其他
44444444address_four省属本科院校
4523兰州理工大学中国-甘肃-兰州-1校区小学
5432兰州理工大学中国-甘肃-兰州-2校区985工程院校
  • Company测试数据共10组:
iNameAddressTradePropertiesScaleList
1company1address_one其他其他其他
2company2信息传输业集体所有制企业其他
3company4address_fourrrr……其他其他特大型企业
4company333……address_five交通运输业三资企业小型企业
5腾讯中国-深圳软件和信息技术服务业三资企业特大型企业
6网易中国-广州软件和信息技术服务业三资企业特大型企业
7其他其他其他
911其他国有企业其他
80oneone其他其他中小微企业
1000???????餐饮业其他其他
  • People测试数据共10组:
iIdNamePhoneMajorJobWorkTimeAddressSchoolCompanyList
11one1373333其他其他其他1oooo11
22two1372222222中医临床基础仓储保管其他22wwww21
33????光学其他其他0???41000
44其他仓储保管其他
55张三13712345678公共管理体育用品制作假肢制作装配工人2中国-北京480
66李四0免疫学其他修理工5中国天津451000
844-1-1其他其他其他0-147
923王五111111……儿科学仓储保管修理工99999991111111……44
101111同学1号7777其他其他其他1address 地址 139
11one1373333其他其他其他1oooo11

总结

本次课程设计共10个课时,其中设计阶段1课时,接着7个课时一边学习数据库和图形界面程序设计一边用于完成课程设计,剩余2个课时分别对文件进行了整理工作,对程序进行BUG检测和分析,完成设计说明书和总结反思。

此次课程设计为第二次课程设计,相较于第一次课程设计,本次课程设计是一个一边学习一边应用的过程。在本次课程设计中遇到了更多的难题,缺少资料且在网络上缺乏相应的参考信息。

本系统设计参考了Excel、Access等数据库相关应用,结合第一次实习所使用的图形界面IDE编译器Qt Creator和过往搭建MySQL数据库服务器的经验结合而成。

在编程实现的过程中,由于第一次实际应用Qt和MySQL,在图形界面和数据库搭建方面存在诸多问题。更因为网络上缺乏相关资料,没有使用经验,所以编译过程遇到诸多的疑难杂症。秉持着独立思考的精神,诸多问题被一一修复。在这一过程中,我也学习到了许多相关的技术和经验。

最终,本系统原计划的信息读取,编辑,排序,筛选,查找,打印,维护等7种功能共实现6种,其中的打印功能由于时间原因并未完成。尽管如此,本次课程设计弱化了对功能多样性的需求,将程序设计重点放在了图形界面的设计优化上,大大降低了系统的操作难度,提高了用户体验。

除此以外,本次课程设计使用了类的思想,封装了大部分的功能性元件,其具有良好的移植功能,也便于对程序各功能作出修改或升级。

这篇关于基于C+++Mysql实现(CS界面)校友管理系统(面向对象)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1139186

相关文章

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

如何去写一手好SQL

MySQL性能 最大数据量 抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。 《阿里巴巴Java开发手册》提出单表行数超过500万行或者单表容量超过2GB,才推荐分库分表。性能由综合因素决定,抛开业务复杂度,影响程度依次是硬件配置、MySQL配置、数据表设计、索引优化。500万这个值仅供参考,并非铁律。 博主曾经操作过超过4亿行数据

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数

2. c#从不同cs的文件调用函数

1.文件目录如下: 2. Program.cs文件的主函数如下 using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Windows.Forms;namespace datasAnalysis{internal static

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�