1、计算机科学和技术学院 年第 1学期 数据库原理()课程设计题目: 医院病房管理系统 班级: 080341C班 学号: 姓名: 李晗 老师: 曹卫东 成绩: 一、需求分析多年来,伴随中国人民生活水平快速提升,科学技术深入发展,大家对将电子计算机应用于医学领域需求就越来越迫切,一套好医院病房管理系统在全方面提升医院整体工作效率、为病人提供方便快捷服务等方面全部能发挥出关键作用。依据调查,在西方发达国家,几乎绝大部分医院全部已经采取了医院病房管理系统,然而在中国使用尚不普及,很多小型医院还是完全依靠手工操作在管理病人和医院职员一切信息,这不仅劳动强度大且工作效率低,医师护士和管理人员大量时间全部消耗
2、在事务性工作上,对其所掌握信息也无法很好地统计应用起来,这么既无法提升医院本身医疗水平,同时又无法很好地为病人服务。信息时代已经来临,将计算机应用于医院日常管理为医院现代化带来了从未有过动力和机遇,为医疗卫生领域发展提供了无限潜力。对于一个医院来说,病房管理是一个必备步骤,病房入住、费用统计等全部包含着复杂信息,这就需要应用计算机软件来对各项工作进行管理以发挥最大功效。采取计算机管理信息系统已成为医院管理科学化和现代化标志,给医院带来了显著经济效益和社会效益,它极大提升了医务人员工作效率,有效地处理了信息管理问题。这次设计目标就是为医院创建一个方便、实用、快捷管理系统, 含有数据库维护功效,能
3、依据用户需求进行数据查询、添加、删除、修改,减轻医院工作人员负担,同时这也是现代化管理肯定要求。 系统功效模块图:各模块所能实现功效:登录界面:医生只有输入正确工作证号和密码才能登录系统,假如还没有注册,可先输入相关信息进行注册。管理主页:列出了该系统所能实现功效,包含病人住院登记、出院结算、病人信息管理、医院内部信息管理、系统安全密码设置,医生依据需要选择对应项目。住院登记:登记病人基础信息,包含病历号、姓名、性别、诊疗、病房号、床位号、电话号码、主治医生、住院日期,将其提交给系统。出院结算:依据病人入院日期、出院日期、和所住病房收费标准,便可计算出病人所需支付费用。病人信息管理:能够查看全
4、部病人信息,而且能选择科室进行分科室查看病人信息,还能够经过输入病人病历号、选择想要修改项目来修改病人信息。医院内部信息管理:包含科室信息管理、医生信息管理、病房信息管理、床位信息管理。其中科室信息管理实现添加科室、删除科室、更新科室、查看全部科室、查看科室医生;医生信息管理用来添加医生、删除医生、更新医生、查看全部医生、查看医生主管病人;病房信息管理实现添加病房、删除病房、更新病房和查看全部病房;床位信息管理用来添加床位、删除床位、还能够查询床位使用情况方便合理地为病人分配床位。系统安全密码设置:为了确保系统安全性,系统经过对工作证号和旧密码验证,来修改登录密码。病房管理系统数据流图: 数据
5、字典:(1) 数据结构:病人含义说明:定义了一个病人信息结构组成:病历号、姓名、性别、诊疗、病房号、床位号、电话号码、主治医生、住院日期(2) 数据结构:医生含义说明:定义了一个医生信息结构组成:工作证号,姓名,年纪,职称,部门,电话号码,密码(3) 数据项:病历号含义说明:唯一标识一个病人类型:字符型长度:4取值范围00009999(4) 数据项:工作证号含义说明:唯一标识一个医生类型:字符型长度:3取值范围000999(5) 数据项:密码含义说明:登陆本病房管理系统时所需密码类型:可变字符型长度:15(6) 数据流:病房和床位信息说明:表示病房内每一床位使用状态数据起源:病房表和床位表组成
6、:所属科室,病房号,床位号,现在状态,收费标准(7) 数据流:医生主管病人信息说明:表示每一医生主治病人信息数据起源:病人表和医生表组成:病历号,姓名,性别,病房号,床位号,电话号码,医生工作证号,医生姓名(8) 数据流:科室医生信息说明:表示每一科室包含医生信息数据起源:科室表和医生表 组成:工作证号, 姓名, 职称, 年纪, 电话号码, 科名, 科地址, 科电话(9) 处理过程: 登记病人信息说明:向系统录入病人信息输入:病历号、姓名、性别、诊疗、病房号、床位号、电话号码、主治医生、住院日期处理:首先依据病人诊疗结果,从病房和床位信息中选择一个空床位,然后将病人相关信息输入系统。(10)处
7、理过程: 出院结算说明:结算病人住院期间所需费用 输入:病历号、出院日期输出:姓名、病房号、收费标准、住院日期、应付金额处理:依据病人病历号,从数据库中得到对应住院信息,由出院日期和收费标准系统可返回应支付费用。 二、结构设计1概念结构设计全局E-R图:2.逻辑结构设计将E-R图转换为关系模式为:病人(病历号,姓名,性别,诊疗,病房号,床位号,电话号码,主治医生,住院日期)医生(工作证号,姓名,年纪,职称,部门,电话号码,密码)科室(科名,科电话,科地址)病房(病房号,所属科室,收费标准)病床(病房号,病床号,现在状态)诊疗(病历号,工作证号)属于(工作证号,科名)包含(科名,病房号)入住(病
8、历号,病房号)拥有(病房号,病床号)关系图以下所表示:3.物理结构设计1) 对于医生表:系统包含了对工作证号、姓名、职称、部门查询,所以为其各建立一个升序索引。2) 对于病人表:系统包含了对病历号、诊疗、病房号、主治医生工作号查询,所以为其各建立一个升序索引。3) 对于病房表:系统包含到了对病房号、所属科室查询,所以为其各建立一个升序索引。4) 对于病床表:系统包含到了对病房号、床位号查询,所以为其各建立一个升序索引。三、关键编码及描述:1.数据库服务器端1)视图一:CREATE VIEW 医生视图ASSELECT 工作证号, 姓名, 职称, 年纪, 电话号码, 部门FROM 医生作用:医生表
9、中有一列属性是密码,当查询医生信息时,不应显示出来,所以查询时能够直接查询该视图,输出除密码以外信息。视图二:CREATE VIEW 医生主管病人视图ASSELECT 病人.病历号,病人.姓名 AS 病人姓名,病人.性别, 病人.病房号,病人.病床号,病人.电话号码,医生.姓名 AS 医生姓名, 医生.工作证号FROM 病人,医生 WHERE病人.主治医生工作号 =医生.工作证号ORDER BY医生.工作证号,病人.病历号 作用:该视图将医生表和病人表联络起来,当输入医生工作证号后,可直接调用该视图,将相关医生信息和病人信息以医生工作证号为第一次序、病人病历号为第二次序输出。视图三: CREA
10、TE VIEW 科室医生信息情况ASSELECT医生.工作证号,医生.姓名, 医生.职称, 医生.年纪, 医生.电话号码, 科室.科名,科室.科地址,科室.科电话FROM医生,科室 WHERE 医生.部门 = 科室.科名ORDER BY医生.工作证号 作用:该视图将科室表和医生表联络起来,当选择科室名称后,可直接调用该视图,将相关科室信息和医生信息按医生工作证号次序输出。视图四:CREATE VIEW 出院结算视图ASSELECT 病人.病历号, 病人.姓名, 病人.性别, 病人.诊疗, 病人.住院日期, 病人.病房号, 病房.收费标准FROM 病人,病房 WHERE病人.病房号 = 病房.病
11、房号ORDER BY 病人.病历号 作用:当病人出院时结算费用,需要知道住院日期、病房号及收费标准方便深入计算。该视图将病人表和病房表联络起来,输入病人病历号后,即可显示出住院日期、收费标准等相关信息。2)存放过程:CREATE PROCEDURE chuyuan(id char(20),tm datetime,pp int output) ASdeclare a intdeclare b intdeclare c datetimeselect a=病房号 from 病人 where 病历号=idselect b=收费标准 from 病房 where 病房号=aselect c=住院日期 fr
12、om 病人 where 病历号=idselect a=datediff(day,c,tm)set pp=a*bGO 作用:该存放过程将病人病历号和出院日期作为输入,分别赋值给变量id、tm,经select语句得到收费标准赋给变量b、和住院日期赋给变量c,用函数datediff(day,c,tm) 计算出住院天数,住院天数和收费标准乘积即为结算费用,将它赋给变量pp并作为输出返回。3)触发器一:create TRIGGER up ON病人 FOR INSERTASBegin Declare NR varchar(50), NB varchar(50) Select NR=病房号,NB=病床号 f
13、rom inserted Update 病床 Set 现在状态=有些人 Where 病房号=NR and 床位号=NB End作用:当有新病人登记入住时触发事件,设置病人所在床位现在状态为“有些人”,以免再有病人入住此床位时发生冲突。触发器二:create TRIGGER de ON病人 FOR deleteASBegin Declare NR varchar(50), NB varchar(50) Select NR=病房号,NB=病床号 from deleted Update 病床 Set 现在状态=无人 Where 病房号=NR and 床位号=NB End作用:当有病人出院时将其信息删
14、除,触发该事件,设置病人之前床位现在状态为“无人”,方便以后其它病人能够使用此床位。2.应用服务器端1)数据录入功效:经过“住院登记”界面,将录入病人相关信息存放到数据库病人表中; protected void Button1_Click(object sender, EventArgs e) SqlConnection SunCon = new SqlConnection(Data Source=localhost;Initial Catalog=病房管理系统;Integrated Security=True); SunCon.Open(); /打开SunCon对象所连接数据库 string
15、 StuSQL; /用来存放SQL命令字符串 StuSQL = INSERT INTO 病人(病历号,姓名,性别,诊疗,病房号,电话号码,主治医生工作号,住院日期,病床号) VALUES(; StuSQL = StuSQL + TextBox1.Text + , + TextBox2.Text + , +TextBox10 .Text + ,; StuSQL = StuSQL + TextBox4.Text + , + TextBox5.Text + , + TextBox6.Text + , + TextBox7.Text + , + TextBox8.Text + , + TextBox9
16、.Text + ); SqlCommand StuIns = new SqlCommand(StuSQL, SunCon); StuIns.ExecuteNonQuery(); /针对SunCon所连接数据库,实施StuIns对象 SunCon.Close(); /关闭SunCon对象所连接数据库 Response.Write(alert(已登记); 2)数据删除功效:经过“删除医生信息”界面,实现将数据库中医生表中对应医生信息进行删除;protected void Button1_Click(object sender, EventArgs e) SqlConnection SunCon =
17、 new SqlConnection(Data Source=localhost;Initial Catalog=病房管理系统;Integrated Security=True); SunCon.Open(); string StuSQL; StuSQL = delete from 医生 where 工作证号=+TextBox1.Text .Trim (); SqlCommand cmd = new SqlCommand(StuSQL, SunCon); cmd.ExecuteNonQuery(); Response.Write(alert(成功删除);3)数据检索功效:经过“查看科室病人信息
18、”界面,实现依据DropDownList中选择科室名称对数据库中病人表进行查询,并将查询结果显示给用户。protected void Page_Load(object sender, EventArgs e) SqlConnection SunCon = new SqlConnection(Data Source=localhost;Initial Catalog=病房管理系统;Integrated Security=True); if (!IsPostBack) /网页第一次加载时 SunCon.Open(); string StuSQL; StuSQL = SELECT 科名 FROM 科
19、室; SqlDataAdapter SunAda = new SqlDataAdapter(StuSQL, SunCon); DataSet SunSet = new DataSet(); SunAda.Fill(SunSet, 科名); DropDownList1.DataSource = SunSet; DropDownList1.DataMember = 科名; DropDownList1.DataTextField = 科名; DropDownList1.DataBind(); string StuSQL2; StuSQL2= SELECT 病历号,姓名,性别,病房号,病床号,主治医生
20、工作号,住院日期,电话号码 FROM 病人 where 诊疗 = + + DropDownList1.SelectedValue.ToString() + ; SqlCommand StuIns = new SqlCommand(StuSQL2, SunCon); SqlDataReader SunDa = StuIns.ExecuteReader(); /使用ExecuteReader方法实施SQL命令,并将结果存放在SunDa对象中 GridView1.DataSource = SunDa; GridView1.DataBind(); SunCon.Close(); protected v
21、oid DropDownList1_SelectedIndexChanged(object sender, EventArgs e) SqlConnection SunCon = new SqlConnection(Data Source=localhost;Initial Catalog=病房管理系统;Integrated Security=True); SunCon.Open(); string StuSQL3; StuSQL3 = SELECT 病历号,姓名,性别,病房号,病床号,主治医生工作号,住院日期,电话号码 FROM 病人 where 诊疗 = + + DropDownList1
22、.SelectedValue.ToString() + ; SqlCommand StuIns = new SqlCommand(StuSQL3, SunCon); SqlDataReader SunDa = StuIns.ExecuteReader(); /使用ExecuteReader方法实施SQL命令,并将结果存放在SunDa对象中 GridView1.DataSource = SunDa; GridView1.DataBind(); SunCon.Close(); 4)数据修改功效:经过“更新医生信息”界面,选择想要修改项,实现修改数据库中医生表相关项为设置新值。 protected
23、void Button2_Click(object sender, EventArgs e) SqlConnection SunCon = new SqlConnection(Data Source=localhost;Initial Catalog=病房管理系统;Integrated Security=True); SunCon.Open(); /打开SunCon对象所连接数据库 string StuSQL; /用来存放SQL命令字符串 StuSQL = UPDATE 医生 set 职称= + TextBox3.Text + where 工作证号= + TextBox1.Text+; Sql
24、Command upd = new SqlCommand(StuSQL, SunCon); upd.ExecuteNonQuery(); SunCon.Close(); /关闭SunCon对象所连接数据库 protected void Button3_Click(object sender, EventArgs e) SqlConnection SunCon = new SqlConnection(Data Source=localhost;Initial Catalog=病房管理系统;Integrated Security=True); SunCon.Open(); /打开SunCon对象所
25、连接数据库 string StuSQL; /用来存放SQL命令字符串 StuSQL = UPDATE 医生 set 年纪= + TextBox4.Text + where 工作证号= + TextBox1.Text +; SqlCommand upd = new SqlCommand(StuSQL, SunCon); upd.ExecuteNonQuery(); /针对SunCon所连接数据库,实施upd对象所包含名为StuSQLSQL命令 SunCon.Close(); /关闭SunCon对象所连接数据库 protected void Button4_Click(object sender,
26、 EventArgs e) SqlConnection SunCon = new SqlConnection(Data Source=localhost;Initial Catalog=病房管理系统;Integrated Security=True); SunCon.Open(); /打开SunCon对象所连接数据库 string StuSQL; /用来存放SQL命令字符串 StuSQL = UPDATE 医生 set 电话号码= + TextBox5.Text + where 工作证号= + TextBox1.Text +; SqlCommand upd = new SqlCommand(S
27、tuSQL, SunCon); upd.ExecuteNonQuery(); SunCon.Close(); /关闭SunCon对象所连接数据库 四、运行说明:关键界面展示床位管理说明:该界面用于管理病房床位信息。先选择科室,再从该科室所含病房中选择一个,便可实现查询此病房中各床位现在状态,以供病人登记时参考,还可实现向此病房中添加床位或删除已经有床位。住院登记说明:该界面用于病人住院时登记相关信息。确定要入住病房和床位后按要求输入病人相关信息,其中部分数据项含有一定约束条件,将其提交给系统,供医生查询其所需信息和出院时查询住院情况。修改病人信息说明:该界面用于修改病人信息。输入病人病历号,然
28、后从下拉列表中选择要修改数据项,对应那一部分就会变为可见,向其中输入新内容后,点击修改按钮,即可实现修改后台数据库病人相关信息。出院结算说明:该界面用于病人出院结算费用。输入病人病历号后,可将其住院信息显示出来。再输入出院日期,系统会调用存放过程计算出住院天数和收费标准乘积即结算费用。 病人支付费用后,可将其信息从系统删除,所住床位状态自动变为无人。五、课程设计总结在此次数据库课程设计中,我设计和开发了一个小型病房管理系统,实现了对病人住院登记、住院结算、信息查询、信息修改,对科室信息、医生信息、病房信息、床位信息增、删、查、改,和系统安全密码设置功效。设计过程中曾经碰到了不少难点和问题,如:
29、将界面和后台数据库联络起来时犯错;对数据库中信息操作时有时忽略了参考完整性;病人出院结算时输入相关信息调用存放过程, 然后将结算费用赋给变量并作为输出返回,该过程在数据库查询分析器中能够实现,但在程序中却不能正常运行;页面间参数传输实现不了;还出现了部分语法错误,和对部分控件属性及事件不熟悉等。对于上述这些难点,我花了很多时间去处理,反复看老师所给事件代码、将每一条语句全部了解透彻,查阅数据库教材和理论课课件、并借来相关书籍辅助学习,注意数据库中各个所建表主外键约束, 仔细耐心检验才能发觉部分不显著语法错误,上网搜索也让我学到很多知识,还有些问题是请教老师指导和同学之间相互讨论,最终将难点一一
30、克服。为了能够使该设计尽可能完善,我看了不少课外资料,关键是想了解一下数据库管理系统是怎样开发,我从中学到了很多相关数据库方面和软件开发知识,对软件工程和软件开发有了深入了解,知道了开发一个系统基础步骤和方法:要先做需求分析,假如需求分析做不到位,就会造成具体实现时出现很多不合理之处;然后设计对应数据库,要注意数据库实体完整性、参考完整、用户定义完整性才能使系统正常工作,设计各表要规范降低冗余,建立合适索引和存放过程对提升系统运行效率是很有必需;最终就是具体编写代码实现相关功效,将前台操作和后台数据库联络起来,完成整个系统开发。我知道,要想真正深入透彻做好病房管理系统,应该先去了解整个医院信息
31、管理机制,才能愈加好了解医院病房管理系统是怎样实现病房管理、怎样和其它软件系统交互,因为我所学知识和时间有限,这方面我做不足。还有一点就是即使我设计系统能正确实施多种功效,但容错方面不够完善,犯错时有些页面没有对应提醒信息,还应深入改善,应编写代码使适当操作出现失误时,系统返回提醒信息给用户并能继续正常运行,一个真正实用系统全部应含有良好容错能力。整体上说,这学期数据库这门课程并不难了解,理论知识学起来比较轻易,但之前对它功效及作用怎样实现缺乏实践。此次课程设计就给了我很好机会,让我将书本知识利用于实际当中,提升了我思索和处理问题能力,巩固了这个学期所学书本知识,使我对一个完整数据库设计过程有
32、了充足了解,并锻炼了做软件需求分析和将要求功效模块化设计能力,编写程序也培养了我逻辑思维能力严密性。经过课程设计,我体会到要学一门知识就应该将它学好,但不只是单纯学习书本知识,要学到精髓之处并学以致用,学到并不代表我们掌握了,只有在实践过程中才能对这些知识真正透彻、牢靠掌握。 总而言之,在此次课程设计中我很有收获,学到了不少专业知识,是对自己本身专业素质一个提升,而且增强了我在专业设计和专业知识方面信心,只要认学肯下功夫、有耐心、有恒心,就一定能够将事情做好。我还知道了怎样将学到知识利用到实际中去,不仅让我对数据库这门课程愈加好掌握,也是对锻炼我处理问题能力一个考验,同时我发觉并填补了自己一些知识方面缺点和不足。在以后,我还会继续努力,有信心去迎接挑战,在不停求索和学习中进步。