住院病人管理系统.docx
《住院病人管理系统.docx》由会员分享,可在线阅读,更多相关《住院病人管理系统.docx(28页珍藏版)》请在冰豆网上搜索。
住院病人管理系统
沈阳航空航天大学
课程设计报告
课程设计名称:
软件综合课程设计
课程设计题目:
病人住院管理
院(系):
计算机学院
专业:
班级:
学号:
姓名:
指导教师:
完成日期:
2011年09月09日
1系统分析
1.1需求分析
实现一个病人住院管理系统,系统可以连接数据库。
病人入院时,住在指定科室的病房(如外科、内科、儿科等),到每个病人有一个主治医生负责,可以选择单人间和三人间病房,如果选择三人间病房,床位由系统分配。
入院时通过该系统将病人的信息添加数据库中。
当病人出院时计算住院期间的费用(药费、床费、餐费等)。
系统能够按照病人、病房、主治医生进行查询,所以查询模块至少有三个界面分别显示相关信息。
1.2开发工具
1.2.1VisualBasic6.0
VisualBasic是一种由微软公司开发的包含协助开发环境的事件驱动编程语言。
从任何标准来说,VB都是世界上使用人数最多的语言——不仅是盛赞VB的开发者还是抱怨VB的开发者的数量。
它源自于BASIC编程语言。
VB拥有图形用户界面(GUI)和快速应用程序开发(RAD)系统,可以轻易的使用DAO、RDO、ADO连接数据库,或者轻松的创建ActiveX控件。
程序员可以轻松的使用VB提供的组件快速建立一个应用程序。
VB使用了可以简单建立应用程序的GUI系统,但是又可以开发相当复杂的程序。
VB的程序是一种基于窗体的可视化组件安排的联合,并且增加代码来指定组件的属性和方法。
因为默认的属性和方法已经有一部分定义在了组件内,所以程序员不用写多少代码就可以完成一个简单的程序。
过去的版本里面VB程序的性能问题一直被放在了桌面上,但是随着计算机速度的飞速增加,关于性能的争论已经越来越少。
窗体控件的增加和改变可以用拖放技术实现。
一个排列满控件的工具箱用来显示可用控件(比如文本框或者按钮)。
每个控件都有自己的属性和事件。
默认的属性值会在控件创建的时候提供,但是程序员也可以进行更改。
很多的属性值可以在运行时候随着用户的动作和修改进行改动,这样就形成了一个动态的程序。
举个例子来说:
窗体的大小改变事件中加入了可以改变控件位置的代码,在运行时候每当用户更改窗口大小,控件也会随之改变位置。
在文本框中的文字改变事件中加入相应的代码,程序就能够在文字输入的时候自动翻译或者阻止某些字符的输入。
VB的程序可以包含一个或多个窗体,或者是一个主窗体和多个子窗体,类似于操作系统的样子。
有很少功能的对话框窗口(比如没有最大化和最小化按钮的窗体)可以用来提供弹出功能。
VB的组件既可以拥有用户界面,也可以没有。
这样一来服务器端程序就可以处理增加的模块。
VB使用参数计算的方法来进行垃圾收集,这个方法中包含有大量的对象,提供基本的面向对象支持。
因为越来越多组建的出现,程序员可以选用自己需要的扩展库。
和有些语言不一样,VB对大小写不敏感,但是能自动转换关键词到标准的大小写状态,以及强制使得符号表入口的实体的变量名称遵循书写规则。
默认情况下字符串的比较是对大小写敏感的,但是可以关闭这个功能。
1.2.2MicrosoftOfficeAccess
MicrosoftOfficeAccess(前名MicrosoftAccess)是由微软发布的关联式数据库管理系统。
它结合了MicrosoftJetDatabaseEngine和图形用户界面两项特点,是MicrosoftOffice的成员之一。
其实Access也是微软公司另一个通讯程序的名字,想与ProComm以及其他类似程序来竞争。
可是事后微软证实这是个失败计划,并且将它中止。
数年后他们把名字重新命名于数据库软件。
Access在2000年的时候成为了计算机等级考试中的计算机二级的一种数据库语言并且因为它的易学易用的特点正逐步取代传统的VFP成为二级中最受欢迎的数据库语言。
Access是微软公司推出的基于Windows的桌面关系数据库管理系统(RDBMS,即RelationalDatabaseManagementSystem),是Office系列应用软件之一。
它提供了表、查询、窗体、报表、页、宏、模块7种用来建立数据库系统的对象;提供了多种向导、生成器、模板,把数据存储、数据查询、界面设计、报表生成等操作规范化;为建立功能完善的数据库管理系统提供了方便,也使得普通用户不必编写代码,就可以完成大部分数据管理的任务。
Access能够存取Access/Jet、MicrosoftSQLServer、Oracle(甲骨文软件公司),或者任何ODBC兼容数据库内的资料。
熟练的软件设计师和资料分析师利用它来开发应用软件,而一些不熟练的程序员和非程序员的"进阶用户"则能使用它来开发简单的应用软件。
虽然它支援部分面向对象(OOP)技术,但是未能成为一种完整的面向对象开发工具。
与一般的RDBMS完全不同,它缺乏数据库触发和预存程序。
自从MSAccess2000(Jet4.0),开发人员可以在查询中设定参数,这跟预存程序很相似的,但这些“预存程序”只能处理一个程序.当资料表内数据发生变化时,它确实允许形式包含被引发的代码,使用是普通的透过查询和其他技术在进入营运储存的程序在方面RDBMS支援这些的。
进入可提供的编程语言,当时在另一个内产品MicrosoftOffice家具,微软公司应用的VisualBasic。
两个数据库进入信息库COM组成部分被提供:
这笔遗产数据存取物体(DAO),用进入和新只可提供ActiveX数据对象(忙乱)。
MicrosoftAccess容易被应用于小的工程,但是如果设计的不好对大工程是无用的。
全部数据库质问,形式和报告被储存在数据库里,并且与相关的模型的理想协调,没有与他们做一个身体上组织的阶层的可能性。
一种设计技术是把进入应用在数据和计划之间进行分发。
一个数据库应该只包含桌子和关系,当另一个将有全部计划时,形式,报告和质问和对第一个数据库桌子的连接。
令人遗憾,当连结时,进入允许没有有关的道路,因此那些发展环境作为这种生产环境有相同的道路应该(虽然你写你们自己的能"动态连接程序"常规在里VBA那搜出能一定背面结束档案以透过这个目录树搜寻,如果它发现这条电流通路它不能)。
这种技术也允许开发者在不同的档案中分申请,因此一些架构是可能的。
2概要设计
2.1数据库概念结构设计
本系统包括的实体主要有病人、科室、病房、医生、费用等。
下面分别介绍各实体的E-R图,通过E-R图可以了解各实体的属性。
科室实体的属性图如图2.1所示。
图2.1科室实体的属性图
病房实体的属性图如图2.2所示。
图2.2病房实体的属性图
医生实体的属性图如图2.3所示。
图2.3医生实体的属性图
病人实体的属性图如图2.4所示。
图2.2病人实体的属性图
费用实体的E-R图如图2.5所示。
图2.5费用实体的属性图
实体间的E-R图如图2.6所示。
病人入院时,根据病人情况选择科室和病房,每个科室有多个病人就诊,每个病房可以住多个病人。
一个病人由一个医生负责,作为该病人的主治医生,每个医生可能负责多个病人。
病人住院期间的费用根据时间日期来计算。
图2.6实体间的E-R图
2.2系统模块设计
整个系统可分为三个模块进行设计,主要包括病人基本信息管理,费用数据录入、查询,病人、病房、主治医生查询,系统管理等部分,系统模块图如图2.7所示。
图2.7系统模块图
3详细设计
3.1数据库逻辑结构设计
本系统共建立六张表:
科室表、病房表、医生表、病人表、费用表、操作员表。
以下分别列出各表的字段说明。
科室表:
用于保存医院中各科室的信息。
在系统中只使用科室编号和名称,将其单独列出一张表可方便用户修改科室。
各字段参数如表3.1所示。
表3.1科室表
字段名称
数据类型
字段大小
是否主键
说明
ID
自动编号
是
科室编号
科室
文本
20
否
科室名称
病房表:
用于保存病房信息。
包括病房编号、类型,以及不同类型病房床费。
其中病房类型分为单人间和三人间,且不同房间所需床费不同。
各字段参数如表3.2所示。
表3.2病房表
字段名称
数据类型
字段大小
是否主键
说明
ID
自动编号
是
病房编号
病房
文本
20
否
病房类型
床费
货币
否
床费
医生表:
用于医院所有医生的信息。
病人需要医生开药来计算药费,所以将药费作为医生的一个属性。
各字段参数如表3.3所示。
表3.3医生表
字段名称
数据类型
字段大小
是否主键
说明
ID
自动编号
是
医生编号
医生
文本
15
否
医生姓名
药费
货币
否
开药药费
病房表:
用于保存病人基本信息。
包括病人编号、姓名、性别、身份证号码、入院时间、科室、病房、主治医生及入院时所需缴纳的基本费用。
其中科室、病房和医生均是各实体的编号。
各字段参数如表3.4所示。
表3.4病人表
字段名称
数据类型
字段大小
是否主键
说明
ID
自动编号
是
病人编号
姓名
文本
10
否
病人姓名
身份证
文本
15
否
身份证
性别
文本
2
否
性别
入院时间
日期/时间
否
入院时间
科室
数字
否
科室编号
病房
数字
否
病房编号
医生
数字
否
医生编号
基本费用
货币
否
基本费用
备注
备注
备注信息
费用表:
用于保存病人住院期间的费用。
由于需要按病人查询费用,所以包含了病人ID。
各字段参数如表3.5所示。
表3.5费用表
字段名称
数据类型
字段大小
是否主键
说明
ID
自动编号
是
序号
病人ID
长整型
否
病人编号
日期
日期/时间
否
费用日期
基本费用
货币
否
基本费用
床费
货币
否
床费
药费
货币
否
药费
餐费
货币
否
餐费
总计
货币
否
总计
结算
货币
否
结算
操作员表:
用于保存操作本系统人员的登录名、密码等信息。
各字段参数如表3.6所示。
表3.6操作员表(User)
字段名称
数据类型
字段大小
是否主键
说明
Name
文本
15
是
登录名
PWD
文本
16
否
登录密码
UserClass
字节
否
用户类型
3.2系统子模块设计
3.2.1编写全局变量和通用过程
在由应用程序向导创建的程序框架中,创建了一个模块文件“Module1.bas”,在该模块中有一个名为“SubMain”的过程,用来启动应用程序。
在该模块中还定义了一下全局变量和通用过程,供其他模块使用。
下面的过程用来执行针对数据库的操作,如创建/释放数据库连接,运行查询等。
PublicSubConnect()'连接数据库
IfIsConnect=TrueThen'如果连接标记为真,则返回。
否则会出错
ExitSub
EndIf
Setcnn=NewADODB.Connection'关键New用于创建新对象cnn
cnn.ConnectionString=Conn'设置连接字符串ConnectionString属性
cnn.Open'打开到数据库的连接
Ifcnn.State<>adStateOpenThen'判断连接的状态
MsgBox"数据库连接失败",vbOKOnly+vbCritical,"警告"'如果连接不成功,则显示提示信息,退出程序
End
EndIf
IsConnect=True'设置连接标记,表示已经连接到数据库
EndSub
PublicSubDisconnect()'断开与数据库的连接
DimrcAsLong
IfIsConnect=FalseThenExitSub'如果连接标记为假,标明已经断开连接,则直接返回
cnn.Close'关闭连接
Setcnn=Nothing
IsConnect=False
EndSub
PublicSubSQLExt(ByValstrSQLstmtAsString)'执行数据库操作语句
DimcmdAsNewADODB.Command'创建Command对象cmd
Connect'连接到数据库
Setcmd.ActiveConnection=cnn'设置cmd的ActiveConnection属性,指定与其关联的数据库连接
cmd.CommandText=strSQLstmt'设置要执行的命令文本
cmd.Execute
Setcmd=Nothing
Disconnect
EndSub
3.2.2用户管理模块
用户管理是大多数信息管理系统中都需要的功能,将用户管理的功能设置为一个类,可提高代码的可重用性。
用户管理类模块名称为“clsUser”,基本流程如图3.1。
图3.1用户管理模块流程图
3.2.3病人资料管理模块
病人资料管理模块是本系统的核心,包括病人资料的增加、修改、删除等功能的实现,可以在对话框中对病人资料进行管理并连接到数据库中。
“增加”按钮有两种状态,当该按钮病人入院时,进入该模块点击“增加”按钮,可以增加一个病人,将病人的基本信息输入,并添加到数据库的病人表中,其流程如图3.2。
图3.2病人资料管理模块增加事件流程图
病人入院后可能会更换病房或者出现其他变动,所以在该模块还需要实现病人资料的即时更新。
当在DataGrid表格中选中一个病人记录时,“增加”按钮的标题将改变为“修改”,此时单击该按钮将修改选中记录的数据,具体流程如图3.3。
图3.3病人资料管理模块修改事件流程图
为了方便查询,只显示住院病人资料,若病人出院,需要将该病人的资料删除,及时更新数据库,进入该模块点击“删除”按钮,可以将病人的基本信息删除,其流程如图3.4。
图3.4病人资料管理模块删除事件流程图
3.2.4费用输入模块
费用输入模块主要用来录入病人指定时间的费用。
为减少录入工作量,减少录入错误,使用列表框显示病人姓名,系统将自动填充病人的基本费用、床费、药费,用户也可以修改这些自动填充的数据。
对于最终的结算数据,既可手工输入,也可单击右侧的“C”(计算)按钮自动计算。
其主要流程如图3.5。
图3.5费用输入模块流程图
4调试分析
(1)信息不能全部显示
●问题描述:
数据文件输出到text控件中输出数据不能全部显示。
●问题分析:
text控件中且数据量比较大,窗体不够大,所以不能全部显示。
●解决方法:
比较简单的方法就是把数据放到一个文本框(text)里,并在其中加上水平和垂直滚动条。
具体实现步骤为:
先在窗体(form)里加入一个文本框,采用默认名text1;然后,设置文本框text1的属性:
text属性设置为空,multiline属性设置为true,scrollbars属性设置为3-both;接着添加一段vb代码即可。
(2)运行出错
●问题描述:
运行点击病人资料时出错,调试时在设置ADO控件连接字符串为全局变量Conn一行出错。
●问题分析:
指示出错行并未有问题,可能原因是前面定义SQL语句时出错。
经检查分析,SELECT语句中医生表中并未出现“主治医生”这一参数。
●解决方法:
将SELECT语句中“主治医生”改为“医生”。
修改后的SELECT语句如下:
strSQL2="SELECTa.ID,姓名,d.科室,性别,身份证,入院时间,b.病房,c.医生,基本费用,备注"
strSQL2=strSQL2&"FROM病人表a,病房表b,医生表c,科室表d"
strSQL2=strSQL2&"WHEREa.病房=b.IDANDa.医生=c.IDANDa.科室=d.ID"
5测试及运行结果
5.1用户登陆界面
在VB6开发环境中,选择菜单“运行/启动”命令,将显示登陆窗体,如图5.1所示。
图5.1用户登陆窗体
在登录窗体中单击“确定”按钮,即可进入系统主窗体,如图5.2所示。
图5.2系统主窗体
5.2用户管理界面
在系统主窗体中“系统/用户管理”或点击“用户”按钮,可以进入用户管理界面,如图5.3所示。
图5.3用户管理窗体
单击“添加用户”按钮,管理员和操作员都可以添加新用户,如图5.4所示。
图5.4添加用户窗体
单击“修改用户”按钮,管理员可以修改用户,如图5.5所示。
图5.5修改用户窗体
5.3病人资料管理界面
在系统主窗体中“数据/病人资料”,可以进入病人资料管理界面。
操作员可以对病人资料进行添加、修改、删除等操作,并且可以直观显示在界面的表格中。
如图5.6所示。
图5.6病人资料管理界面
输入新的入院病人资料,单击“添加”按钮,添加时界面显示如图5.7所示。
图5.7添加病人资料显示界面
新入院病人资料已添加到数据库中,添加后界面显示如图5.8所示。
图5.8添加后病人资料显示界面
单击“删除”按钮,弹出对话框如图5.9所示。
图5.9弹出对话框
选择“是”,可将该用户从数据库中删除,删除后显示界面如图5.10所示。
图5.10删除后病人资料显示界面
参考文献
[1]VisualBasic课程设计案例精编[M].北京:
清华大学出版社,2007
[2]VisualBasic项目案例开发实例自学手册[M].北京:
人民邮电出版社,2008
[3]VisualBasic完全自学手册[M].北京:
机械工业出版社,2009
[4]30天学通VisualBasic项目案例开发[M].北京:
电子工业出版社,2009
[5]VisualBasic从入门到精通[M].北京:
人民邮电出版社,2010
附录
主要源程序清单:
PrivateSubMDIForm_Load()
Me.Left=GetSetting(App.Title,"Settings","MainLeft",1000)
Me.Top=GetSetting(App.Title,"Settings","MainTop",1000)
Me.Width=GetSetting(App.Title,"Settings","MainWidth",6500)
Me.Height=GetSetting(App.Title,"Settings","MainHeight",6500)
'LoadNewDoc
EndSub
PrivateSubMDIForm_Unload(CancelAsInteger)
IfMe.WindowState<>vbMinimizedThen
SaveSettingApp.Title,"Settings","MainLeft",Me.Left
SaveSettingApp.Title,"Settings","MainTop",Me.Top
SaveSettingApp.Title,"Settings","MainWidth",Me.Width
SaveSettingApp.Title,"Settings","MainHeight",Me.Height
EndIf
EndSub
PrivateSubmnuDataEmp_Click()
frmEmp.Show
EndSub
PrivateSubmnuDataInput_Click()
frmInput.Show
EndSub
PrivateSubmnuDataRef_Click()
frmDataRef.Show
EndSub
PrivateSubmnuQueryFind_Click()
frmSearchName.Show
EndSub
PrivateSubmnuReportEmp_Click()
frmReportEmp.Show
EndSub
PrivateSubmnuReportPay_Click()
frmReportPay.Show
EndSub
PrivateSubmnuSysBack_Click()
DimstrSoureString,strDestString,iRetAsInteger
OnErrorResumeNext
strSoureFile=App.Path&strDB'源数据库文件
strDestFile=App.Path&"\BAK\DATA.BAK"'备份文件
IfTrim(strDestFile)=""ThenExitSub
IfDir(strDestFile)<>""Then'文件存在
iRet=MsgBox(Dir(strDestFile)&"文件已经存在,是否替换?
",vbYesNo,"警告")
IfiRet=vbNoThen
ExitSub
EndIf
EndIf
Dimbuff()AsByte,iAsLong'定义缓冲区
i=(strSoureFile)
ReDimbuff(i-1)
OpenstrSoureBinaryAs#1'打开源文件
Get#1,,buff'读取数据到缓冲区
Close#1'关闭文件
OpenstrDestBinaryAs#1'打开目标文件
Put#1,,buff'输入缓冲区到目标文件
Close#1
MsgBox"数据库备份完成!
",vbInformation+vbOKOnly,"提示"
EndSub
PrivateSubmnuSysPWD_Click()
WithfrmUserEdit
.Caption="修改密码"
.strOldUser=CurUser.strName
.txtUserName.Text=CurUser.strName
IfCurUser.iUserClass=1Then
.cmbUserClass.AddItem"管理员"
Else
.cmbUserClass.AddItem"操作员"
EndIf
.cmbUserClass.ListIndex=0
.cmbUserClass.Enabled=False
.txtUserName.Enabled=False'不允许修改用户名
.bModify=True
.Show
EndWith
EndSub
PrivateSubmnuSysQuit_Click()
DimynAsString
yn=MsgBox("确定要退