用QT实现一个界面化的医院信息管理
2.1 程序结构
程序主要分为三个模块,图形化界面,数据结构和程序运行代码
程序运行的流程为:初始化医生数据库——将数据库信息读入内存——主窗口界面生成——根据用户的选择生成子菜单,同时将用户输入的信息传递到内存,并作出相应的更改——刷新数据库内容,程序退出
其中,数据结构用到的类:Doctor类,Date类,为组合关系,Date是Doctor的一个私有数据成员
程序功能实现的类:DoctorInterface,其中包含了对数据成员可行的操作,查找,增加,删除
图形化界面的类:
/*总体架构,流程,类及类之间的关系*/
2.2 主要功能
1.界面化菜单,方便快捷查找,修改,展示医生信息
实现方法:界面的生成,展示,切换
当前界面接收命令之后,调用函数隐藏当前界面,并构造下一个界面
点击返回按钮,当前界面会被析构,之前隐藏的界面重新显示
编辑键悬浮在界面之上,点击时被构造,点击取消按钮时析构
2.医生信息的存储
实现方法:文件+内存
医生的信息储存在DoctorData数据库中,在打开程序时将医生信息初始化到内存,内存采用QList<Doctor*>链表来储存一个科室的医生信息,全部医院的医生信息储存在Qlist<Doctor*>[20]数组中,考虑到医院规模,数组大小应该足够代表科室数目,另外,未使用的链表只有一个nullptr,占用的内存空间可以忽略不计。
分科室储存医生信息,可以提升查找效率,在对医生信息进行查找时不必遍历全部的数据。
3.对医生信息的操作
实现方法:基于QList,QString的函数
插入:对于已经存在的科室增加医生,直接根据传入的Qstring数组(储存了新医生信息),转换为相应的数据类型,检查新医生的科室,定位到相应的Qlist<Doctor*>,调用Qlist::append()函数插入到数组末尾
对于未存在的科室增加新医生,则需要创建新的科室,将一个Qlist<Doctor*>链表初始化,其他操作相同
:主要的问题在于找到相应的医生,然后调用QList::removeAt()即可,
如果删除之后相应的科室为空,则需要删除空科室。
查找:在通过名字查找的情况下,需要遍历整个数据结构,利用QString可以直接进行等价判断的特性,返回相应的医生。
编辑:最大的困难在于,编辑之后医生会丢失原来的信息,导致在内存中无法定位,因此引入了tempDoctor指针,记录当前正在被编辑的医生位置
- 点赞
- 收藏
- 关注作者
评论(0)