数据库课程设计报告校园医务室系统.docx
《数据库课程设计报告校园医务室系统.docx》由会员分享,可在线阅读,更多相关《数据库课程设计报告校园医务室系统.docx(32页珍藏版)》请在冰豆网上搜索。
![数据库课程设计报告校园医务室系统.docx](https://file1.bdocx.com/fileroot1/2023-7/22/51384f9f-caac-4419-ae25-62b81af496eb/51384f9f-caac-4419-ae25-62b81af496eb1.gif)
数据库课程设计报告校园医务室系统
数据库课程设计报告
-------校园医务室服务系统
学院:
软件学院
专业:
软件工程专业
班级:
XX级X班
姓名:
XXX
学号:
XXXXXXXXXXX
任课教师:
实验教师:
一、系统开发平台
题目:
校园医务室服务系统
数据库:
MicrosoftSqlServer2000
开发工具:
EclipsNetBeans5.5
操作系统:
MicrosoftWindowXPHomeEdition
二、数据库规划
2.1任务陈述
校园医务室服务系统的目的是为了通过收集和存储指定对象的信息数据,及控制相关人员对以上数据的操作,辅助校医务室工作人员完成对基本医疗信息的管理工作,并在必要的时候向更高管理层提供所需要的财务等信息。
另外该系统还具有对医疗保险和过敏药物两种特定信息的管理功能。
2.2任务目标
控制(添加,更新,删除)有关学生信息
控制(添加,更新,删除)有关医生信息
控制(添加,更新,删除)有关药物信息
控制(添加,更新,删除)有关库存信息
添加,查询有关医疗记录信息
添加,查询有关过敏药物信息
添加,查询有关处方信息
查询,统计有关学生信息
查询,统计有关医生信息
查询,统计有关药物信息
查询,统计有关药房信息
对药房库存信息提供报表
对有关医疗记录信息提供报表
对有关过敏药物信息提供报表
对校医务室财务信息提供报表
自动计算相关费用,核对药物信息
三、系统定义
3.1系统边界
3.2用户视图
用户视图
功能需求
学生用户
列出该用户的学生基本信息
列出指定敏感药物的详细信息
列出指定医疗记录的详细信息
输出该用户医疗记录信息
输出该用户过敏药物信息
医生用户
列出该用户的基本信息
列出指定学生的基本信息
列出指定学生的过敏药物信息
列出指定学生的医疗记录信息
列出选定药物的详细信息
自动计算相关费用
自动核对药物信息
更新库存信息
录入新处方信息
录入新库存信息
录入新医疗记录信息
录入新过敏药物信息
输出指定药房库存信息
输出指定学生的医疗记录信息
输出指定学生的过敏药物信息
管理用户
列出指定药物信息
列出指定药房信息
列出指定学生信息
列出指定医生信息
列出指定医疗记录信息
录入新药物信息
录入新药房信息
录入新学生信息
录入新医生信息
删除选定学生信息
删除选定医生信息
更新库存信息
更新学生信息
输出指定学生信息
输出指定医生信息
输出指定药房库存信息
四、需求分析
4.1用户需求说明
4.1.1数据需求
(1)学生用户视图:
基本信息:
学号,姓名,性别,年龄,班级,学院,专业,联系电话。
过敏药物信息:
编号,名称,型号,发现日期,诊断医师
医疗记录信息:
时间,处方编号,自费费用,医保费用,诊断医师
学号唯一,可决定多条过敏药物信息和医疗记录信息。
处方编号唯一,每条过敏记录由编号和学号唯一确定。
学生只可以对以上信息进行查询,不可以进行修改。
(2)医生用户视图:
医生信息:
编号,姓名,性别,年龄,所在药房编号
学生信息:
学号,姓名,性别,年龄,班级,学院,专业,联系电话
药物信息:
编号,名称,型号,价格,库存量,医保比例,注意事项
处方信息:
编号,药房编号,时间,治疗方案,自费费用,医保费用
过敏药物信息:
编号,学号,名称,型号,诊断医师
医疗记录信息:
时间,处方编号,总费用,诊断医师
学号及各编号唯一;每条治疗方案中包含多条处方信息。
值班医生可对处方信息,医疗记录信息进行更新和查询,但只可查询基本信息,学生信息和药物信息。
(3)管理用户视图:
药物信息:
编号,名称,型号,价格,库存量,医保比例,注意事项
学生信息:
学号,姓名,性别,年龄,班级,学院,专业,联系电话
处方信息:
编号,药房编号,时间,治疗方案,自费费用,医保费用
医生信息:
编号,姓名,性别,年龄,所在药房编号
药房信息:
药房编号,药物编号,现库存量
过敏药物信息:
编号,学号,名称,型号,诊断医师
医疗记录信息:
时间,处方编号,总费用,诊断医师
各编号唯一;每条医疗记录可包含多个处方编号;药方信息中,相同药物编号可对应多条药房信息。
每条值班信息由医生编号,药房编号和时间唯一确定。
校医院管理者可对药物信息和药房信息进行更新和查询,但只可查询医疗记录信息。
4.1.2事务需求
(1)学生用户视图:
数据查询:
列出该用户的学生基本信息
列出选定敏感药物的详细信息
列出选定医疗记录的详细信息
数据输出:
输出该用户医疗记录信息
输出该用户过敏药物信息
(2)医生用户视图:
数据查询:
列出该用户的基本信息
列出指定学生的基本信息
列出指定学生的过敏药物信息
列出指定学生的医疗记录信息
列出选定药物的详细信息
数据录入:
录入新处方信息
录入新库存信息
录入新医疗记录信息
录入新过敏药物信息
更新库存信息
数据输出:
输出该用户医疗记录信息
输出该用户过敏药物信息
输出指定药房库存信息
输出指定学生的医疗记录信息
输出指定学生的过敏药物信息
其它事务:
自动计算相关费用
自动核对药物信息
(3)管理用户视图:
数据查询:
列出指定药物信息
列出指定药房信息
列出指定学生信息
列出指定医生信息
列出指定医疗记录信息
数据录入:
录入新药物信息
录入新药房信息
录入新学生信息
录入新医生信息
数据输出:
输出指定学生信息
输出指定医生信息
输出指定药房库存信息
数据更新/删除:
删除选定学生信息
删除选定医生信息
更新药房库存信息
更新学生信息
4.2系统需求说明
4.2.1软件环境
软件环境需要支持Window操作系统,及SQLServer商业数据库
4.2.2硬件环境
Petium(R)4CPU1.80GHz1.82GHz,504MB内存
4.2.3初始数据库大小
大约有学生20名,医生5名,管理用户3名;
药物目录共包含40种药物,药房4处;其它记录信息为0。
4.2.4数据库增长速度
学生为每一年添加1000名左右,同时删除1000名左右;医生及其他信息增长速度不定。
4.2.5记录查找的类型和平均数量
查找医疗记录的情况………大约每天20次
查找学生信息的情况………大约每天10次
查找药物记录的情况………大约每天30次
查找过敏药物记录的情况………大约每天10次
查找药房信息记录的情况………大约每月1次
4.2.6性能
单个记录查询时间少于1秒,高峰期少于5秒
多个记录查询时间少于5秒,高峰期少于10秒
更新/保存记录时间少于1秒,高峰期少于5秒
4.2.7安全性
每个用户在进入系统时都必须有口令保护;
每个用户分配特定的用户视图所应有的访问权限;
不同用户根据其事先定义的角色不同进入不同的用户视图界面。
五、数据库逻辑设计
5.1ER图
5.2数据字典
5.2.1实体和联系属性
学生student:
学号SNo,姓名SName,性别SSex,年龄SAge,班级Grade,
学院College,专业Major,联系电话Phone,密码Password;
医生doctor:
编号DNo,姓名DName,性别DSex,年龄DAge,所在药房Room,
密码Password;
药品medicine:
编号MNo,名称MName,型号MStyle,价格MPrice,注意事项MTip
医保比例selfPercent
药房Pharmacy :
编号PHNo,位置PHName
医疗记录Record:
编号RNo,处方编号PNo,时间RDate,自付费用SelfPrice,
医保费用FreePrice,学号SNo,诊断医师编号DNo
处方Prescription:
编号PNo,时间PDate,学号SNo,诊断医师编号DNo
库存量StoreAmount:
药物编号MNo,药房编号PHNo,现库存量
过敏药物Allergy:
药物编号MNo,学号SNo,处方编号PNo
5.2.2属性描述
实体
属性
类型及大小
空
student
学号SN
CHAR(8)
否
姓名SName
varchar(16)
性别SSex
CHAR
(2)
年龄SAge
int
班级Grade
varchar(20)
学院College
varchar(20)
专业Major
varchar(20)
联系电话Phone
varchar(15)
密码Password
varchar(8)
doctor
编号DNo
CHAR(8)
否
姓名DName
varchar(16)
性别DSex
CHAR
(2)
年龄DAge
int
所在药房Room
CHAR(4)
密码Password
varchar(8)
medicine
编号MNo
CHAR(8)
否
名称MName
varchar(30)
型号MStyle
MStyleCHAR(20)
价格MPrice
int
医保比例selfPercent
int
Prescription
编号PNo
CHAR(8)
否
时间PDate
datetime
否
学号SNo
CHAR(8)
诊断医师编号DNo
CHAR(8)
Record
编号RNo
CHAR(8)
否
处方PNo
CHAR(8)
否
时间Date
datetime
自费费用SelfPrice
int
医保费用FreePrice
int
学生SNo
CHAR(8)
医生DNo
CHAR(8)
Allergy
药物MNo
CHAR(8)
否
学生SNo
CHAR(8)
否
处方PNo
CHAR(8)
StoreAmount
药物MNo
CHAR(8)
否
药房PHNo
CHAR(8)
否
现库存量Amount
int
5.3关系表
六、数据库物理设计
6.1索引
使用查询分析器运行:
USEHostipal
DBCCSHOWCONTIGWITHTABLERESULTS,ALL_INDEXES
可以得到Hostipal数据库中全部索引的相关信息,其中用户所建表的部分信息如下:
ObjectName
IndexName
ID
AverageFreeBytes
LogicalFragementation
Allergy
PK__Allergy__060DEAE8
1
7964.0
0.0
storeAmount
PK_storeAmount
1
7690.0
0.0
storeAmount
ph_key
4
7830.0
0.0
PDetail
PK_PDetail
1
7935.0
0.0
Record
PK__Record__023D5A04
1
7706.0
100.0
Record
pno_key
8
7970.0
0.0
medicine
PK__medicine__7A9C383C
1
4712.0
100.0
student
PK__student__76CBA758
1
7719.0
100.0
doctor
PK__doctor__78B3EFCA
1
7844.0
100.0
pharmacy
PK_pharmacy
1
8021.0
100.0
prescription
PK__prescription__7E6CC920
1
7823.0
0.0
在全部索引中除每张表的主键索引外还包括另外两个单独建立的索引:
(1)storeAmount中的ph_key索引:
在查询某种药品的库存量多为针对某以药房查询,而且在添加库存是也是按照药房批量更新添加,因此建立了此索引;
(2)Record中的pno_key索引:
虽然每一医疗记录都有自己的编号,但大多数情况下是对具体的处方信息进行查询,而且一条有自费和医保费用构成的财务记录也是由处方编号而定的,所以建立了此索引。
6.2视图
Hostipal数据库中主要建立了以下两个视图:
①CREATEVIEWdbo.AllergyDetialAS
SELECTdbo.Allergy.MNo,dbo.Allergy.SNo,dbo.Allergy.PNo,dbo.medicine.MName,
dbo.medicine.MStyle,dbo.medicine.MTip,dbo.student.SName,
dbo.prescription.PDate,dbo.doctor.DNo,dbo.doctor.DName
FROMdbo.AllergyINNERJOIN
dbo.medicineONdbo.Allergy.MNo=dbo.medicine.MNoINNERJOIN
dbo.studentONdbo.Allergy.SNo=dbo.student.SNoINNERJOIN
dbo.prescriptionONdbo.Allergy.PNo=dbo.prescription.PNoAND
dbo.student.SNo=dbo.prescription.SNoINNERJOIN
dbo.doctorONdbo.prescription.DNo=dbo.doctor.DNo
②CREATEVIEWdbo.PreDetailAS
SELECTdbo.prescription.PNo,dbo.prescription.PDate,dbo.prescription.SNo,
dbo.prescription.DNo,dbo.Record.RNo,dbo.Record.SelfPrice,dbo.Record.FreePrice,
dbo.medicine.MName,dbo.medicine.MStyle,dbo.medicine.MPrice,
dbo.medicine.selfPercent,dbo.student.SName,dbo.doctor.DName
FROMdbo.prescriptionINNERJOIN
dbo.RecordONdbo.prescription.PNo=dbo.Record.PNoINNERJOIN
dbo.studentONdbo.prescription.SNo=dbo.student.SNoAND
dbo.Record.SNo=dbo.student.SNoINNERJOIN
dbo.doctorONdbo.prescription.DNo=dbo.doctor.DNoAND
dbo.Record.DNo=dbo.doctor.DNoCROSSJOIN
dbo.medicine
建立以上视图主要是因为:
(1)基于以上视图实现复杂查询,以避免书写频繁执行连接操作;
(2)以上视图所包含的表的数据关系到许多用户,视图可以隐藏基本表;可以禁止所有用户访问数据库表,而要求医生等用户只能通过视图操作数据;
(3)在一定程度上保护高级语言应用程序不受某些数据库结构修改的影响。
6.3安全机制
6.3.1系统安全
为学生和医生用户在数据库中存储登录口令,登录时必须经验证一致才可进入系统;
由于管理员用户有频繁的插入删除操作且该类用户数量有限,所以为每一个管理员用户在数据库中建立单独的登录名和用户名,并为他们指定已建立的Manager角色(具有表student,doctor,medicine,storeAmount的全部权限)。
在管理员登录时,其密码由SQLSever实现验证,由于SQLSever的登录密码是经加密保存的,所以具有较高的安全性。
6.3.2数据安全
在该系统中,任何有关删除或添加数据的操作都需要二次确认才可以在数据库中真正执行。
通过高级语言应用程序的限制,不同的用户只能查询修改其有权访问的数据。
七、应用程序设计
7.1功能模块
7.1.1计算功能
(1)统计具有指定属性的群体所含个体的总量;
(2)医疗费用中医保金额和自费金额的自动计算和区分;
(3)过敏药物的判定及其与治疗药物的冲突选择。
7.1.2存储功能
存储有关对象的具体信息及学生与处方,处方与医生,医生与药房,药房与药品的关系,并能方便快速地实现对以上信息的删除增加等操作。
7.1.3输入及输出功能
输入的限定信息等数据经处理后,可以在显示器上按事先定义的格式显示,特别是在就诊过程中可以跟踪当前状态(挂号,诊疗,结算,取药)。
另外还能通过指定设备存储账单等报表,以便打印或长期保存。
7.1.4交互功能
本系统具有仿Windows窗口交互界面,会在工作人员进行输入等操作时给予必要的提示,或者在操作发生错误时给予必要的提示和帮助。
另外在医生用户的最终结算操作中具有自动计算找零的仿收银台功能。
7.2界面设计
7.2.1登录界面
7.2.2管理员用户界面
(1)查询药物
(2)报表
生成的报表:
(3)添加库存
(3)添加新药
(4)医生管理
(5)学生管理
(6)财务管理
7.2.3医生用户界面
(1)挂号
(2)新处方
部分提示信息:
(3)医疗信息
(4)结算
最终打印的账单:
7.2.4学生用户界面
(1)基本信息
(2)敏感药物
(3)医疗记录
7.3事务设计
7.3.1Datetime类型数据查询
时间是对于医疗记录是很重要的属性,本系统的数据库在存储时间时使用的是其提供的Datetime类型,这样就可以通过调用函数DATEDIFF,方便的查询某一时间点或某一时间段的指定信息。
以下是以学生查询自己某一时间段的医疗记录的实例:
if(!
todate.trim().equals("YYY-MM-DD")&&!
fromdate.trim().equals("YY-MM-DD"))
{RSTemp=RSTemp+"andDATEDIFF(dd,record.Rdate,'"+fromdate
+"')<=0andDATEDIFF(dd,record.Rdate,'"+todate+"')>=0";}
...
studentDemo.open("sa","");
Stringsql3="selectRecord.RNo,Record.PNo,RDate,PDetail.MNo,
Record.SelfPrice,Record.FreePrice,PDetail.PDetail"
+"fromRecord,prescription,PDetail"
+"whereRecord.PNo=Prescription.PNo"+RSTemp
+"andPDetail.PNo=Prescription.PNoandrecord.SNo="+this.SId;
ResultSetRecordSearchResult=studentDemo.executeQuery(sql3);
RecordSearchResult.next();
7.3.2医保信息处理
随着医疗保险改革的不断深入,对于在校学生医保信息的管理也越来越受到各方的重视。
怎样有效的掌握和利用医疗保险信息,以及实现个人医疗信息档案的信息化、规范化和集成化,实现计算机的智能化管理,提高相关工作人员的工作效率成为了需要解决的重要问题。
对于医保信息的利用是本系统的特色之一,主要包括根据药品分类自动生成医保比例和根据医保比例计算自费金额两部分内容。
前者已在文件录入中有所体现,后者则可以在医生开处方时提供方便。
(1)以下是医生在结算费用时的界面:
(2)高级程序代码中的关键部分如下:
//获取价格和医保比例并转化为可计算数据类型
StringPHMPrice=vector5.elementAt(3).toString().trim();
floatprice=Float.parseFloat(PHMPrice);
StringPHMTip=vector5.elementAt(4).toString().trim();
StringPHMPercent=vector5.elementAt(5).toString().trim();
floatpercent=Float.parseFloat(PHMPercent);
floatself=(price*(100-percent))/100;//计算自费单价和医保单价vector7.add(""+self);
floata=Float.parseFloat(selfall);//结算
intnum=Integer.parseInt(vector7.elementAt(3).toString().trim())
vector0.add(""+a*num);sellAll=sellAll+a*num;
7.3.3数据批量录入
由于在数据库构建初期以及每年新学生信息录入时,有大量格式一致的数据需要录入,所以本系统提供了文件录入功能。
现以添加药物信息为例,分析文件录入功能:
(1)药物分类信息是从政府网站下载的Excel文件中转化而得,各属性具体数据后的特殊符号是为方便高级程序分析而后期添加的,具体录入文件实例如下:
(2)在高级程序中,主要是由文件读取,按行分析,构造SQL,向数据库中添加四步操作实现文件录入功能。
部分编程代码如下:
publicvoidAddMed(Stringinform)//按行分析从文件中读取的一行信息并加入数据库中
{inta=0,b=0;
a=inform.indexOf("#");//分析得药品名称
try{if(a==-1)System.out.println("thislinenoname");//本行无信息
else{name=inform.substring(0,a);
b=inform.indexOf("$");//分析得规格
if(b==-1)System.out.println("thereisnotype.");
else{type=inform.substring(a+1,b).trim();}
......
a=inform.indexOf("类");//分析得类别
if(a==-1)System.out.println("thereisnolei.");
else{lei=inform.substring(b+1,a).trim();
if(lei.equals("甲"