《住院病人管理系统.doc》由会员分享,可在线阅读,更多相关《住院病人管理系统.doc(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、如有侵权,请联系网站删除,仅供学习与交流住院病人管理系统【精品文档】第 21 页沈阳航空航天大学课 程 设 计 报 告课程设计名称:软件综合课程设计课程设计题目:病人住院管理 院(系):计算机学院专 业: 班 级: 学 号: 姓 名: 指导教师: 完成日期: 2011年09月09日目 录 1 系统分析1.1需求分析实现一个病人住院管理系统,系统可以连接数据库。病人入院时,住在指定科室的病房(如外科、内科、儿科等),到每个病人有一个主治医生负责,可以选择单人间和三人间病房,如果选择三人间病房,床位由系统分配。入院时通过该系统将病人的信息添加数据库中。当病人出院时计算住院期间的费用(药费、床费、餐
2、费等)。系统能够按照病人、病房、主治医生进行查询,所以查询模块至少有三个界面分别显示相关信息。1.2开发工具1.2.1Visual Basic 6.0Visual Basic是一种由微软公司开发的包含协助开发环境的事件驱动编程语言。从任何标准来说,VB都是世界上使用人数最多的语言不仅是盛赞VB的开发者还是抱怨VB的开发者的数量。它源自于BASIC编程语言。VB拥有图形用户界面(GUI)和快速应用程序开发(RAD)系统,可以轻易的使用DAO、RDO、ADO连接数据库,或者轻松的创建ActiveX控件。程序员可以轻松的使用VB提供的组件快速建立一个应用程序。VB使用了可以简单建立应用程序的GUI系
3、统,但是又可以开发相当复杂的程序。VB的程序是一种基于窗体的可视化组件安排的联合,并且增加代码来指定组件的属性和方法。因为默认的属性和方法已经有一部分定义在了组件内,所以程序员不用写多少代码就可以完成一个简单的程序。过去的版本里面VB程序的性能问题一直被放在了桌面上,但是随着计算机速度的飞速增加,关于性能的争论已经越来越少。窗体控件的增加和改变可以用拖放技术实现。一个排列满控件的工具箱用来显示可用控件(比如文本框或者按钮)。每个控件都有自己的属性和事件。默认的属性值会在控件创建的时候提供,但是程序员也可以进行更改。很多的属性值可以在运行时候随着用户的动作和修改进行改动,这样就形成了一个动态的程
4、序。举个例子来说:窗体的大小改变事件中加入了可以改变控件位置的代码,在运行时候每当用户更改窗口大小,控件也会随之改变位置。在文本框中的文字改变事件中加入相应的代码,程序就能够在文字输入的时候自动翻译或者阻止某些字符的输入。VB的程序可以包含一个或多个窗体,或者是一个主窗体和多个子窗体,类似于操作系统的样子。有很少功能的对话框窗口(比如没有最大化和最小化按钮的窗体)可以用来提供弹出功能。VB的组件既可以拥有用户界面,也可以没有。这样一来服务器端程序就可以处理增加的模块。VB使用参数计算的方法来进行垃圾收集,这个方法中包含有大量的对象,提供基本的面向对象支持。因为越来越多组建的出现,程序员可以选用
5、自己需要的扩展库。和有些语言不一样,VB对大小写不敏感,但是能自动转换关键词到标准的大小写状态,以及强制使得符号表入口的实体的变量名称遵循书写规则。默认情况下字符串的比较是对大小写敏感的,但是可以关闭这个功能。1.2.2Microsoft Office AccessMicrosoft Office Access(前名 Microsoft Access)是由微软发布的关联式数据库管理系统。它结合了 Microsoft Jet Database Engine 和 图形用户界面两项特点,是 Microsoft Office的成员之一。其实Access 也是微软公司另一个通讯程序的名字,想与 ProC
6、omm 以及其他类似程序来竞争。可是事后微软证实这是个失败计划,并且将它中止。数年后他们把名字重新命名于数据库软件。Access在2000年的时候成为了计算机等级考试中的计算机二级的一种数据库语言并且因为它的易学易用的特点正逐步取代传统的VFP成为二级中最受欢迎的数据库语言。Access 是微软公司推出的基于Windows的桌面关系数据库管理系统(RDBMS,即Relational Database Management System),是Office系列应用软件之一。它提供了表、查询、窗体、报表、页、宏、模块7种用来建立数据库系统的对象;提供了多种向导、生成器、模板,把数据存储、数据查询、界
7、面设计、报表生成等操作规范化;为建立功能完善的数据库管理系统提供了方便,也使得普通用户不必编写代码,就可以完成大部分数据管理的任务。 Access能够存取 Access/Jet、Microsoft SQL Server、Oracle(甲骨文软件公司),或者任何 ODBC 兼容数据库内的资料。熟练的软件设计师和资料分析师利用它来开发应用软件,而一些不熟练的程序员和非程序员的进阶用户则能使用它来开发简单的应用软件。虽然它支援部分面向对象(OOP)技术,但是未能成为一种完整的面向对象开发工具。与一般的RDBMS完全不同,它缺乏数据库触发和预存程序。自从MS Access 2000 (Jet 4.0)
8、,开发人员可以在查询中设定参数,这跟预存程序很相似的,但这些“预存程序”只能处理一个程序当资料表内数据发生变化时,它确实允许形式包含被引发的代码,使用是普通的透过查询和其他技术在进入营运储存的程序在方面RDBMS支援这些的。进入可提供的编程语言,当时在另一个内产品Microsoft Office家具,微软公司应用的Visual Basic。两个数据库进入信息库COM组成部分被提供:这笔遗产数据存取物体(DAO),用进入和新只可提供ActiveX数据对象(忙乱)。Microsoft Access容易被应用于小的工程,但是如果设计的不好对大工程是无用的。全部数据库质问,形式和报告被储存在数据库里,
9、并且与相关的模型的理想协调,没有与他们做一个身体上组织的阶层的可能性。一种设计技术是把进入应用在数据和计划之间进行分发。一个数据库应该只包含桌子和关系,当另一个将有全部计划时,形式,报告和质问和对第一个数据库桌子的连接。令人遗憾,当连结时,进入允许没有有关的道路,因此那些发展环境作为这种生产环境有相同的道路应该(虽然你写你们自己的能动态连接程序常规在里VBA那搜出能一定背面结束档案以透过这个目录树搜寻,如果它发现这条电流通路它不能)。 这种技术也允许开发者在不同的档案中分申请,因此一些架构是可能的。2 概要设计2.1数据库概念结构设计本系统包括的实体主要有病人、科室、病房、医生、费用等。下面分
10、别介绍各实体的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所示。病人入院时,根据病人情况选择科室和病房,每个科室有多个病人就诊,每个病房可以住多
11、个病人。一个病人由一个医生负责,作为该病人的主治医生,每个医生可能负责多个病人。病人住院期间的费用根据时间日期来计算。病人开始科室开始医生开始费用开始病房开始花费属于属于治疗日期1n1nmnmn图2.6 实体间的E-R图2.2系统模块设计整个系统可分为三个模块进行设计,主要包括病人基本信息管理,费用数据录入、查询,病人、病房、主治医生查询,系统管理等部分,系统模块图如图2.7所示。病人住院管理系统开始数据处理模块开始查询模块开始系统功能模块费用输入病人资料管理用户管理数据备份数据恢复病房查询病人查询主治医生查询图2.7 系统模块图3 详细设计3.1 数据库逻辑结构设计本系统共建立六张表:科室表
12、、病房表、医生表、病人表、费用表、操作员表。以下分别列出各表的字段说明。科室表:用于保存医院中各科室的信息。在系统中只使用科室编号和名称,将其单独列出一张表可方便用户修改科室。各字段参数如表3.1所示。表3.1 科室表字段名称数据类型字段大小是否主键说明ID自动编号是科室编号科室文本20否科室名称病房表:用于保存病房信息。包括病房编号、类型,以及不同类型病房床费。其中病房类型分为单人间和三人间,且不同房间所需床费不同。各字段参数如表3.2所示。表3.2 病房表字段名称数据类型字段大小是否主键说明ID自动编号是病房编号病房文本20否病房类型床费货币否床费医生表:用于医院所有医生的信息。病人需要医
13、生开药来计算药费,所以将药费作为医生的一个属性。各字段参数如表3.3所示。表3.3 医生表字段名称数据类型字段大小是否主键说明ID自动编号是医生编号医生文本15否医生姓名药费货币否开药药费病房表:用于保存病人基本信息。包括病人编号、姓名、性别、身份证号码、入院时间、科室、病房、主治医生及入院时所需缴纳的基本费用。其中科室、病房和医生均是各实体的编号。各字段参数如表3.4所示。表3.4 病人表字段名称数据类型字段大小是否主键说明ID自动编号是病人编号姓名文本10否病人姓名身份证文本15否身份证性别文本2否性别入院时间日期/时间否入院时间科室数字否科室编号病房数字否病房编号医生数字否医生编号基本费
14、用货币否基本费用备注备注备注信息费用表:用于保存病人住院期间的费用。由于需要按病人查询费用,所以包含了病人ID。各字段参数如表3.5所示。表3.5 费用表字段名称数据类型字段大小是否主键说明ID自动编号是序号病人ID长整型否病人编号日期日期/时间否费用日期基本费用货币否基本费用床费货币否床费药费货币否药费餐费货币否餐费总计货币否总计结算货币否结算操作员表:用于保存操作本系统人员的登录名、密码等信息。各字段参数如表3.6所示。表3.6 操作员表(User)字段名称数据类型字段大小是否主键说明Name文本15是登录名PWD文本16否登录密码UserClass字节否用户类型3.2 系统子模块设计3.
15、2.1编写全局变量和通用过程在由应用程序向导创建的程序框架中,创建了一个模块文件“Module1.bas”,在该模块中有一个名为“Sub Main”的过程,用来启动应用程序。在该模块中还定义了一下全局变量和通用过程,供其他模块使用。下面的过程用来执行针对数据库的操作,如创建/释放数据库连接,运行查询等。Public Sub Connect() 连接数据库 If IsConnect = True Then 如果连接标记为真,则返回。否则会出错 Exit Sub End If Set cnn = New ADODB.Connection 关键New用于创建新对象cnn cnn.Connection
16、String = Conn 设置连接字符串ConnectionString属性 cnn.Open 打开到数据库的连接 If cnn.State adStateOpen Then 判断连接的状态 MsgBox 数据库连接失败, vbOKOnly + vbCritical, 警告 如果连接不成功,则显示提示信息,退出程序 End End If IsConnect = True 设置连接标记,表示已经连接到数据库End SubPublic Sub Disconnect() 断开与数据库的连接 Dim rc As Long If IsConnect = False Then Exit Sub 如果连接
17、标记为假,标明已经断开连接,则直接返回 cnn.Close 关闭连接 Set cnn = Nothing IsConnect = FalseEnd SubPublic Sub SQLExt(ByVal strSQLstmt As String) 执行数据库操作语句 Dim cmd As New ADODB.Command 创建Command对象cmd Connect 连接到数据库 Set cmd.ActiveConnection = cnn 设置cmd的ActiveConnection属性,指定与其关联的数据库连接 cmd.CommandText = strSQLstmt 设置要执行的命令文本
18、 cmd.Execute Set cmd = Nothing DisconnectEnd Sub3.2.2用户管理模块用户管理是大多数信息管理系统中都需要的功能,将用户管理的功能设置为一个类,可提高代码的可重用性。用户管理类模块名称为“clsUser”,基本流程如图3.1。开始初始化数据调用SQLExt过程执行SQL语句结束查找指定用户图3.1 用户管理模块流程图3.2.3病人资料管理模块病人资料管理模块是本系统的核心,包括病人资料的增加、修改、删除等功能的实现,可以在对话框中对病人资料进行管理并连接到数据库中。“增加”按钮有两种状态,当该按钮病人入院时,进入该模块点击“增加”按钮,可以增加一
19、个病人,将病人的基本信息输入,并添加到数据库的病人表中,其流程如图3.2。从科室表中获取数据从病房表中获取数据SQL语句结束从医生表中获取数据定义SQL语句SQL语句刷新ADO控件数据SQL语句设置DataGrid1控件显示ADO控件中的数据SQL语句数据是否读取完毕设置ADO控件连接字符串为全局变量SQL语句计数器加1SQL语句是程序停止运行,返回false否开始图3.2 病人资料管理模块增加事件流程图病人入院后可能会更换病房或者出现其他变动,所以在该模块还需要实现病人资料的即时更新。当在DataGrid表格中选中一个病人记录时,“增加”按钮的标题将改变为“修改”,此时单击该按钮将修改选中记
20、录的数据,具体流程如图3.3。开始禁止使用“删除”按钮调用Status过程允许用户操作窗体各控件SQL语句结束清除数据检查用户输入或修改的数据SQL语句刷新ADO控件数据SQL语句调用Status过程禁止用户操作窗体中的控件SQL语句输入数据SQL语句数据是否输入完毕是否图3.3 病人资料管理模块修改事件流程图为了方便查询,只显示住院病人资料,若病人出院,需要将该病人的资料删除,及时更新数据库,进入该模块点击“删除”按钮,可以将病人的基本信息删除,其流程如图3.4。开始结束显示提示信息SQL语句刷新数据SQL语句病人编号大于0是否为添加状态删除SQL语句SQL语句执行SQL语句SQL语句是是否
21、否图3.4 病人资料管理模块删除事件流程图3.2.4费用输入模块费用输入模块主要用来录入病人指定时间的费用。为减少录入工作量,减少录入错误,使用列表框显示病人姓名,系统将自动填充病人的基本费用、床费、药费,用户也可以修改这些自动填充的数据。对于最终的结算数据,既可手工输入,也可单击右侧的“C”(计算)按钮自动计算。其主要流程如图3.5。开始从病房表中获取数据从病人表中获取数据SQL语句结束从医生表中获取数据调用status过程禁止用户操作窗体控件SQL语句将当前记录中“病人ID”保存到变量id中SQL语句在病人数组中逐个判断SQL语句数据是否读取完毕设置ADO控件连接字符串SQL语句将病人姓名
22、添加到组合框中SQL语句是否图3.5 费用输入模块流程图4 调试分析 (1) 信息不能全部显示l 问题描述:数据文件输出到text控件中输出数据不能全部显示。l 问题分析: text控件中且数据量比较大,窗体不够大,所以不能全部显示。l 解决方法:比较简单的方法就是把数据放到一个文本框(text)里,并在其中加上水平和垂直滚动条。具体实现步骤为:先在窗体(form)里加入一个文本框,采用默认名text1;然后,设置文本框text1的属性:text属性设置为空,multiline属性设置为true,scrollbars属性设置为3both;接着添加一段vb代码即可。(2) 运行出错l 问题描述:
23、运行点击病人资料时出错,调试时在设置ADO控件连接字符串为全局变量Conn一行出错。l 问题分析:指示出错行并未有问题,可能原因是前面定义SQL语句时出错。经检查分析,SELECT语句中医生表中并未出现“主治医生”这一参数。l 解决方法:将SELECT语句中“主治医生”改为“医生”。修改后的SELECT语句如下: strSQL2 = SELECT a.ID,姓名,d.科室,性别,身份证,入院时间,b.病房,c.医生,基本费用,备注 strSQL2 = strSQL2 & FROM 病人表 a,病房表 b,医生表 c,科室表 d strSQL2 = strSQL2 & WHERE a.病房=b.
24、ID AND a.医生=c.ID AND a.科室=d.ID5 测试及运行结果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病人资料
25、管理界面在系统主窗体中“数据/病人资料”,可以进入病人资料管理界面。操作员可以对病人资料进行添加、修改、删除等操作,并且可以直观显示在界面的表格中。如图5.6所示。图5.6 病人资料管理界面输入新的入院病人资料,单击“添加”按钮,添加时界面显示如图5.7所示。图5.7 添加病人资料显示界面新入院病人资料已添加到数据库中,添加后界面显示如图5.8所示。图5.8 添加后病人资料显示界面单击“删除”按钮,弹出对话框如图5.9所示。图5.9 弹出对话框选择“是”,可将该用户从数据库中删除,删除后显示界面如图5.10所示。图5.10 删除后病人资料显示界面参考文献1 Visual Basic课程设计案例
26、精编M.北京:清华大学出版社,20072 Visual Basic项目案例开发实例自学手册M.北京:人民邮电出版社,20083 Visual Basic完全自学手册M.北京:机械工业出版社,20094 30天学通Visual Basic项目案例开发M.北京:电子工业出版社,20095 Visual Basic从入门到精通M.北京:人民邮电出版社,2010附 录主要源程序清单:Private Sub MDIForm_Load() Me.Left = GetSetting(App.Title, Settings, MainLeft, 1000) Me.Top = GetSetting(App.Ti
27、tle, Settings, MainTop, 1000) Me.Width = GetSetting(App.Title, Settings, MainWidth, 6500) Me.Height = GetSetting(App.Title, Settings, MainHeight, 6500) LoadNewDocEnd SubPrivate Sub MDIForm_Unload(Cancel As Integer) If Me.WindowState vbMinimized Then SaveSetting App.Title, Settings, MainLeft, Me.Left
28、 SaveSetting App.Title, Settings, MainTop, Me.Top SaveSetting App.Title, Settings, MainWidth, Me.Width SaveSetting App.Title, Settings, MainHeight, Me.Height End IfEnd SubPrivate Sub mnuDataEmp_Click() frmEmp.ShowEnd SubPrivate Sub mnuDataInput_Click() frmInput.ShowEnd SubPrivate Sub mnuDataRef_Clic
29、k() frmDataRef.ShowEnd SubPrivate Sub mnuQueryFind_Click() frmSearchName.ShowEnd SubPrivate Sub mnuReportEmp_Click() frmReportEmp.ShowEnd SubPrivate Sub mnuReportPay_Click() frmReportPay.ShowEnd SubPrivate Sub mnuSysBack_Click() Dim strSoureFile As String, strDestFile As String, iRet As Integer On E
30、rror Resume Next strSoureFile = App.Path & strDB 源数据库文件 strDestFile = App.Path & BAKDATA.BAK 备份文件 If Trim(strDestFile) = Then Exit Sub If Dir(strDestFile) Then 文件存在 iRet = MsgBox(Dir(strDestFile) & 文件已经存在,是否替换?, vbYesNo, 警告) If iRet = vbNo Then Exit Sub End If End If Dim buff() As Byte, i As Long 定义
31、缓冲区 i = FileLen(strSoureFile) ReDim buff(i - 1) Open strSoureFile For Binary As #1 打开源文件 Get #1, , buff 读取数据到缓冲区 Close #1 关闭文件 Open strDestFile For Binary As #1 打开目标文件 Put #1, , buff 输入缓冲区到目标文件 Close #1 MsgBox 数据库备份完成!, vbInformation + vbOKOnly, 提示End SubPrivate Sub mnuSysPWD_Click() With frmUserEdi
32、t .Caption = 修改密码 .strOldUser = CurUser.strName .txtUserName.Text = CurUser.strName If CurUser.iUserClass = 1 Then .cmbUserClass.AddItem 管理员 Else .cmbUserClass.AddItem 操作员 End If .cmbUserClass.ListIndex = 0 .cmbUserClass.Enabled = False .txtUserName.Enabled = False 不允许修改用户名 .bModify = True .Show End
33、 WithEnd SubPrivate Sub mnuSysQuit_Click() Dim yn As String yn = MsgBox(确定要退出系统吗?, vbYesNo, 退出确定) If yn = vbYes Then Unload MeEnd SubPrivate Sub mnuSysRest_Click() Dim strSoureFile As String, strDestFile As String Dim buff() As Byte, i As Long, iRet As Integer On Error Resume Next strSoureFile = App
34、.Path + BAKDATA.BAK strDestFile = App.Path + strDB If Dir(strSoureFile) = Then MsgBox 没有发现可以恢复的数据库!, vbOKOnly + vbCritical, 警告 ElseIf Dir(strSoureFile) Then iRet = MsgBox(恢复数据库可能会丢失最近的数据,确定要恢复备份文件吗?, vbQuestion + vbYesNo, 确认) If iRet = vbYes Then i = FileLen(strSoureFile) ReDim buff(i - 1) Open strS
35、oureFile For Binary As #1 Get #1, , buff Close #1 Open strDestFile For Binary As #1 Put #1, , buff Close #1 MsgBox 成功恢复数据库! End If End IfEnd SubPrivate Sub mnuSysUser_Click() frmUser.ShowEnd SubPrivate Sub tbToolBar_ButtonClick(ByVal Button As MSComCtlLib.Button) On Error Resume Next Select Case But
36、ton.Key Case 用户 frmUser.Show 用户管理窗体 Case 关于 frmAbout.Show vbModal, Me 显示“关于”对话框 Case 退出 mnuSysQuit_Click 调用“退出”菜单 End SelectEnd SubPrivate Sub mnuViewStatusBar_Click() mnuViewStatusBar.Checked = Not mnuViewStatusBar.Checked sbStatusBar.Visible = mnuViewStatusBar.CheckedEnd Sub课程设计总结:通过这次课程设计,我了解了一个简
37、单系统实现的全过程,从最开始的需求分析,概念结构设计,逻辑结构设计和物理结构设计,到最后的实施,每一步都需要认真严谨,不能有半点的马虎,否则就会给下阶段的工作造成一些麻烦。在这次实践中,我将课堂上的理论运用到实践中,发现这不是一件简单的事情。同时学到了很多课堂上没有的知识。我在学习Visual Basic 6.0使用的同时熟悉了Access数据库。这次的设计使我们把书本的知识运用到实际的操作中来,虽然完成了设计,但从中也发现了不足之处,还有很多不明白的地方,在数据库的连接方面出现了很多的问题,还有控件的使用上不太熟练,在数据库设计阶段,要找出系统的每个实体,并且要充分认识各实体之间的联系,通过分析清楚实体与联系才能建立合理的数据库。在编码阶段,经常会为了一个语句或者一个代码而花费许多时间。因此,在每个开发阶段都要经过一番仔细的思考和推敲。通过小组成员的共同努力和指导老师的帮助,其中的困难都一一解决了,同时也学到了很多东西。同时,经过这次课程设计,也提高了自己的动手操作能力,也为自己以后的科研、工作打下了良好的基础。指导教师评语:指导教师(签字): 年 月 日课程设计成绩
限制150内