G
N
I
D
A
O
L

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


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

前 言

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

系统需要包含的主要信息有:校友基本信息:序号,姓名,电话,专业,现从事的专业,职务,工作年限,所在城市等;工作单位信息:单位名称,所属行业,单位性质(高校,企业、事业单位等),单位规模等;毕业学校信息:学校代码,校名,地址,性质(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 提供带选择的输入编辑器
    排布器 QLayout layout 用于自动排布窗口中元件
    主窗口 主视窗 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组:

    i Id Name Address Properties List
    1 1 school1 address_school_1 211工程院校
    2 2 school2 address_school_2 985工程院校
    3 3 s 其他
    4 4444444 address_four 省属本科院校
    45 23 兰州理工大学 中国-甘肃-兰州-1校区 小学
    54 32 兰州理工大学 中国-甘肃-兰州-2校区 985工程院校
  • Company测试数据共10组:

    i Name Address Trade Properties Scale List
    1 company1 address_one 其他 其他 其他
    2 company2 信息传输业 集体所有制企业 其他
    3 company4 address_fourrrr…… 其他 其他 特大型企业
    4 company333…… address_five 交通运输业 三资企业 小型企业
    5 腾讯 中国-深圳 软件和信息技术服务业 三资企业 特大型企业
    6 网易 中国-广州 软件和信息技术服务业 三资企业 特大型企业
    7 其他 其他 其他
    9 1 1 其他 国有企业 其他
    80 one one 其他 其他 中小微企业
    1000 ???? ???? 餐饮业 其他 其他
  • People测试数据共10组:

    i Id Name Phone Major Job Work Time Address School Company List
    1 1 one 1373333 其他 其他 其他 1 oooo 1 1
    2 2 two 1372222222 中医临床基础 仓储保管 其他 22 wwww 2 1
    3 3 ? ??? 光学 其他 其他 0 ??? 4 1000
    4 4 其他 仓储保管 其他
    5 5 张三 13712345678 公共管理 体育用品制作 假肢制作装配工人 2 中国-北京 4 80
    6 6 李四 0 免疫学 其他 修理工 5 中国天津 45 1000
    8 44 -1 -1 其他 其他 其他 0 -1 4 7
    9 23 王五 111111…… 儿科学 仓储保管 修理工 9999999 1111111…… 4 4
    10 1111 同学1号 7777 其他 其他 其他 1 address 地址 1 3 9
    1 1 one 1373333 其他 其他 其他 1 oooo 1 1

总结

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

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

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

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

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

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

参考文献

  1. 陈维兴,林小茶.C++面向对象程序设计教程.清华大学出版社,2009
  2. 张基温.C++程序开发教程. 清华大学出版社,2002
  3. 吴祖峰,陈文宇,张松梅. C++语言教程.电子科技大学出版社,2008
  4. 谭浩强.C语言程序设计(第二版).清华大学出版社,1999
  5. 温秀梅,丁学钧.C++语言程序设计教程与实验.清华大学出版社,2008
  6. 王育坚.Visual C++面向对象编程教程(第2版). 清华大学出版社,2003

致谢

本次课程设计所使用的图形界面编译器Qt,是C++实习时所用到的。感谢实习老师给我的灵感和图形界面编程思路。

此外,在本次编程过程中,所使用的MySQL服务器架设使用了独立开发者Lceee的PHPCUSTOM,感谢网友人人为我、我为人人的互联网精神。

感谢指导老师为我批评,指导。

特别感谢朋友在我测试和修改系统的过程中提供的部分测试数据。感谢室友和朋友们协助我进行BUG测试,寻找错误,感谢他们为我提供使用反馈信息。


文章作者: AnglesD
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 AnglesD !
评论