医院管理系统设计免费毕业设计论文.docx
《医院管理系统设计免费毕业设计论文.docx》由会员分享,可在线阅读,更多相关《医院管理系统设计免费毕业设计论文.docx(67页珍藏版)》请在冰豆网上搜索。
医院管理系统设计免费毕业设计论文
医院管理系统设计
设计者:
学号:
班级:
1.系统设计目的和意义
2.系统功能设计
2.1系统设计原则••…
2.2应用体系结构
2.3网络服务体系结构
2.4系统功能设计••…
3.数据库及数据表设计
3.1数据库
3.2数据表设计•……
4.界面设计与实现…
4.1系统登陆…………
4.2系统主界面………
4.3密码修改…………
5.文件结构说明………
6.致谢…………………
7.参考资料,,,,,,,,,,,,,,,
第一章系统设计目的和意义
本系统设计目的:
为了建立规范的业务流程、建立高效的数据处理机制。
本系统设计意义:
1.计算机已经成为我们学习和工作的得力助手,使用其可方便的管理病人及医师今天,计算机的价格已经十分低廉,性能却有了长足的进步。
它已经应用于许多领域。
现在我国的病人及医师管理水平绝大部分还停留在纸介质的基础上,这样的机制已经不能适应时代的发展,因为它浪费了许多人力和物力,在信息时代这种传统的管理方法必然被计算机为基础的信息管理所取代。
我作为一个计算机应用专业的毕业生,希望可以在这方面有所贡献。
改革的总设计师邓小平同志说过“科学技术是第一生产力”,我希望能用我所学的知识编制出一个实用的程序来帮助医疗机构进行病人及医师管理。
开发这一系统的好处大约有以下几点:
第一、可以存储历年病人及医师的信息,安全、高效;第二、只需一到二名档案录入员即可操作系统,节省人力;第三、可以迅速查到病人及医师的各类信息。
2.为将来医疗机构上网做好准备
跟据2003年中国电信的调查报告显示我国的上网人数已达到1870万,互联网已经十分普及,本系统为医疗机构将来的上网作了先期工作,比如医疗机构的网络管理模式的建立。
2.系统功能设计
HIS:
医院信息系统(HospitalInformationSystem)。
是国际医术届已公认的新兴的医学信息学的重要分支。
其定义如下:
利用电子计算机和通信设备,为医院所属各部门提供病人诊疗信息和行政管理信息的采集、存储、处理、提取和数据交换的能力,并满足所有授权用户的功能需求。
工作站:
指一系列功能的集合,它构成了系统的基本使用单元,这些功能可以根据需要分布在不同或相同的物理计算机中,而这些计算机又位于不同的物理工作岗位。
门诊子系统中的工作站的设计:
我们这个系统涉及到的检验检查工作站。
该工作站专门为检验检查医生设计,用于对
检验检查工作中的所有信息进行管理,主要功能包括:
预约申请、样本管理、数据处理、报告处理、设备质控、业务统计、设备使用登记。
通过检查检验工作站可以实现两个方向的打通,首先是医生工作站与检验检查工作站的连通,即可以网上发送和接收检验检查报告;其次是检验检查工作站与检验检查设备的连通,即自动或者有效获取各类数据。
同时,通过该工作站提供较强的数据分析功能,提高报告质量。
在每个检验检查可是提供多台工作站。
对检验科、功能科、影像科、病理科、超声波检查室分别配置一台或多台计算机。
并根据不同的检验检查内容,安装不同功能的检验检查工作站。
2.1系统设计原则
(1)、立足当今计算机实用性技术,放眼计算机技术发展方向,建设一个先进的、开放的信息网络系统。
(2)、充分考虑正在进行的金卫工程的要求以及卫生系统未来工作的需要,建设具有合理超
前性的网络系统。
(3)、通过对病人入全过程的动态管理,达到以病人为中心的目的,并通过网络管理实现信息全院流通,解决医院工作效率低,药品和资金大量流失等问题。
(4)、在效益驱动的原则下,采取自上而下规划,自下而上实施的模式,统一规划,突出重点,建立榜样。
(5)、系统具有先进性、灵活性和开放性,能够容易地将系统根据需要进行扩张和升级。
2.2应用体系结构
应用体系结构是描述MIS集成技术的框架,通过这个框架可以有效地管理和应用计算机系统,使生产过程的信息流、物流和资金流在开放式的计算机网络基础上集成起来,形成能够使生产活动优化运转的模式,是一种面向计算机信息处理系统的该粘膜时。
2.3网络服务体系结构
网络由三级组成:
主干网采用多模光纤,基于交换技术,提供高速网络通道,负责全局数据管理和网络管理以及与Internet的联系工作;第二层为各子系统,通过集线器连接各职能部门及主交换机;第三层为单元层,负责信息采集。
2.4系统功能设计
因为所有的功能都是
增加、修改、删除、显示、查询中的一种或几种组合
所以对共用的主体功能模块作以说明:
这里以门诊为例,其它栏目相同。
增加/复制
menzhenadd.asp
思路:
增加:
客户端文本框中输入内容,以表单形式发送到服务器,服务器接收,处理,打开库连接,对门诊表进行写操作,增加一条记录到门诊表,新加的这个记录的内容就是接收到的各
参数。
增加完成后转回到列表页(menzhenlist.asp)
复制:
是变相的增加只不过是不用客户输入全部的内容,而是复制了已有的某条记录。
把这
条记录的内容作为参数发送到服务器处理,插入表中。
过程与上相同。
实现功能的主要代码:
'接收表单传来参数
x_id=Request.Form("x_id")
x_name=Request.Form("x_name")
x_nianling=Request.Form("x_nianling")
x_xingbie=Request.Form("x_xingbie")
'打开库表连接,
strsql="SELECT*
FROM[menzhen]WHERE0=1"
Setrs=Server.CreateObject("ADODB.Recordset")
打开记录集,
rs.Openstrsql,conn,1,2
rs.AddNew'增加动作
rs.Update'增加后要有一个更新
rs.Close'关记录集
Setrs=Nothing'清空记录集,不占内存conn.Close'关库连接
Setconn=Nothing'青空库连接,不占资源
Response.Clear
Response.Redirect"menzhenlist.asp"'重定向导至U歹U表页
修改、
menzhenEdit.asp
思路:
从库表中读取对应某ID的一条记录,将库表变量取出放到客户端文本框中显示出来,管理员修改文本内容,后再以表单形式发送到服务器,服务器接收,处理,打开库连接,对门诊表进行修改操作,更新对应ID的唯一一条记录在门诊表中,完成后转回到列表页
(menzhenlist.asp)
实现功能的主要代码:
从库中取出内容;
tkey=""&key&""tkey就是tempkey暂时的变量strsql="SELECT*FROM[menzhen]WHERE[id]="&tkeySetrs=Server.CreateObject("ADODB.Recordset")rs.Openstrsql,conn开库表?
己录集
Ifrs.EofThen
Response.Clear
Response.Redirect"menzhenlist.asp"
Else
rs.MoveFirst
EndIf
'取出库表一条记录存到变量中
x_id=rs("id")
x_name=rs("name")x_nianling=rs("nianling")x_xingbie=rs("xingbie")rs.Close关记录集
Setrs=Nothing
'更新UPDATA
tkey='
”'&key&""
strsql="SELECT*FROM[menzhen]WHERE[id]="&tkey
Setrs=Server.CreateObject("ADODB.Recordset")
rs.Openstrsql,conn,1,2
Ifrs.EofThen
Response.Clear
Response.Redirect"menzhenlist.asp"
EndIf
tmpFld=Trim(xname)把变量再存到暂时变量中,中转一下,不这样做也行,这样做更清楚
IfTrim(tmpFld)&"x"="x"ThentmpFld=Null如果姓名连上“X”与“X”相同,那证明姓名变量是空的,那就把姓名变量直接设成空的NULL
rs("name")=tmpFld不管是否为空,只要用暂时变量更新一定不问题,所有的问
题大前面都解决了,这就是使用暂时变量的好处。
下面相同
tmpFId=Trim(x_nianling)
IfTrim(tmpFId)&"x"="x"ThentmpFId=Null
rs("nianling")=tmpFld
tmpFld=Trim(x_xingbie)
IfTrim(tmpFld)&"x"="x"ThentmpFld=Null
rs("xingbie")=tmpFld
rs.Update参数传完了,要更新一下记录集
rs.Close关了
Setrs=Nothing
conn.Close
Setconn=Nothing
Response.Clear
Response.Redirect"menzhenlist.asp"
删除、
思路:
接收参数ID号,按ID找到对应记录,删除就行了。
代码:
key=Request.querystring("key")'接收参数ID号
Ifkey=""OrIsNull(key)Then
key=Request.Form("key")
EndIf
Ifkey=""OrIsNull(key)ThenResponse.Redirect"menzhenlist.asp"如果KEY就是ID,如
果是空的,就转回列表页,
sqlKey=sqlKey&"[id]="&""&key&""否则就组成SQL语句的一部分,ID=接收的ID
strsql="SELECT*FROM[menzhen]WHERE"&sqlKey
上面这条SQL语句是删除的关键
Setrs=Server.CreateObject("ADODB.Recordset")
rs.Openstrsql,conn,1,2
DoWhileNotrs.Eof
rs.Delete就是这个语句完成了删除操作,
rs.MoveNext
Loop
rs.Close
Setrs=Nothing
显示、
思路:
对应表,开库,读出所有记录,用表格形式一条一条的循环显示出来,一页显示太长,只显
20条,多出来的用分页方式显示
代码:
#FFFFFF;"> order=<%=Server.URLEncode("id")%>"style="color: #FFFFFF;">id <%If OrderBy="id"Then%><%_| IfSession("menzhen_OT") ="ASC"Then%>5<%ElseIfSession("menzhen_OT")="DESC" Then%>6<%EndIf%><%EndIf%>
| #FFFFFF;"> order=<%=Server.URLEncode(”name")%>"style="color: _| #FFFFFF;">name (*)<%IfOrderBy="name"Then%>class="ewTableOrderlndicator"><%IfSession("menzhen_OT")="ASC"Then%>5<%ElselfSession("menzhen_OT")="DESC"Then%>6<%EndIf%> <%EndIf%>
| #FFFFFF;"> order=<%=Server.URLEncode(”nianling")%>"style="color: #FFFFFF;">nianling (*)<%IfOrderBy="nianling"Then%>class="ewTableOrderlndicator"><%IfSession("menzhen_OT")="ASC"Then%>5<%ElseIfSession("menzhen_OT")="DESC"Then%>6<%EndIf%> <%EndIf%>
| #FFFFFF;"> order=<%=Server.URLEncode("xingbie")%>"style="color: #FFFFFF;">xingbie (*)<%IfOrderBy="xingbie"Then%>class="ewTableOrderIndicator"><%IfSession("menzhen_OT")="ASC"Then%>5<%ElseIfSession("menzhen_OT")="DESC"Then%>6<%EndIf%> <%EndIf%>
| | | | <%
'Avoidstartingrecord>totalrecords|
IfCLng(startRec)>CLng(totalRecs)Then|
startRec=totalRecs
EndIf
'Setthelastrecordtodisplay
stopRec=startRec+displayRecs-1
'MovetofirstrecorddirectlyforperformaneereasonrecCount=startRec-1
IfNotrs.EofThen
rs.MoveFirst
rs.MovestartRec-1
EndIf
recActual=0
DoWhile(Notrs.Eof)And(recCount记录就显示,这里涉及到分页部分的代码,分页部分是现成的组件模块,从书抄来的。
原理
明白,就是总共如果有72条记录,每页显示10条,应为8页,72/10=7余2,每一页就是从1到10是一页,从11到20是第二页,21到30是三页等等类推,就是第N页从N*10开始,到N*10+10结束。
这就是分页的思路。
recCount=recCount+1
IfCLng(recCount)>=CLng(startRec)Then
recActual=recActual+1%>
<%
'Setrowcolorbgcolor="#FFFFFF"%>
<%
'Displayalternatecolorforrows
IfrecCountMod2<>0Thenbgcolor="#F5F5F5"
EndIf
%>
<%
'LoadKeyforrecord
key=rs("id")
x_id=rs("id")
x_name=rs("name")
x_nianling=rs("nianling")
x_xingbie=rs("xingbie")
%>
">
<%Response.Writex_id%> |
<%Response.Writex_name%> | <%Response.Writex_nianling%> | <%Response.Writex_xingbie%> | IfNotIsNull(key)Then Response.Write"menzhenview.asp? key="&Server.URLEncode(key)ElseResponse.Write"javascript: alert('InvalidRecord! Keyisnull');"EndIf%>">View | _|
IfNotIsNull(key)ThenResponse.Write"menzhenadd.asp? key="&Server.URLEncode(key)ElseResponse.Write"javascript: alert('InvalidRecord! Keyisnull');"EndIf%>">Copy | IfNotIsNull(key)ThenResponse.Write"menzhendelete.asp? key="&Server.URLEncode(key)ElseResponse.Write"javascript: alert('InvalidRecord! Keyisnull');"EndIf%>">Delete | <%
EndIf
rs.MoveNext记录指针向下走一个
Loop'循环向下走一步
%>
查询
思路:
SQL查询语句的组合,把查询条件设成一个变量,变量值是用户从文本框中输入的。
用LIKE可以实现模糊查询。
如:
sql="select*from数据表where字段名like%字段值%'orderby字段名[desc]"
代码:
'取得传来参数,是用户输入的查询关键字pSearch
pSearch=Request.QueryString("psearch")
pSearchType=Request.QueryString("psearchType")
IfpSearch<>""Then
pSearch=Replace(pSearch,""',"”")
pSearch=Replace(pSearch,"[","[[]")
IfpSearchType<>""Then
WhileInStr(pSearch,"")>0
pSearch=Replace(pSearch,"","")
Wend
arpSearch=Split(Trim(pSearch),"")
ForEachkwInarpSearch
b_search=b_search&"("
b_search=b_search&"[name]LIKE'%"&Trim(kw)&"%'OR"
b_search=b_search&"[nianling]LIKE'%"&Trim(kw)&"%'OR"
b_search=b_search&"[xingbie]LIKE'%"&Trim(kw)&"%'OR"
上面组合在一起表示在姓名中或性别中或年龄中有与关键字相似的条件,它们将作为查询语句的条件,与库连接后打开记录集的SQL语句组合在一起,完成查询功能。
组合后的整个SQL语句应类似于这样:
sql="select*from数据表where字段名like'%字段值%'OR[nianling]LIKE'%"&Trim(kw)
&"%'OR[xingbie]LIKE'%"&Trim(kw)&"%'”
IfRight(b_search,4)="OR"Thenb_search=Left(b_search,Len(b_search)-4)b_search=b_search&")"&pSearchType&””
Next
EndIf
EndIf
分页部分是现成的组件模块,从书抄来的。
原理明白,就是总共如果有72条记录,每页显
示10条,应为8页,72/10=7余2,每一页就是从1到10是一页,从11到20是第二页,21到30是三页等等类推,就是第N页从N*10开始,到N*10+10结束。
这就是