数据库课程设计报告医院病房管理系统设计

数据库课程设计报告医院病房管理系统设计
数据库课程设计报告医院病房管理系统设计

计算机科学与技术学院2010-2011 学年第1学期《数据库原理(Ⅲ)》课程设计

题目:医院病房管理系统

班级: 080341C班

学号: 080341314

教师:曹卫东

成绩:

一、需求分析

近年来,随着我国人民生活水平的迅速提高,科学技术的进一步发展,人们对将电子计算机应用于医学领域的需求就越来越迫切,一套好的医院病房管理系统在全面提高医院的整体工作效率、为病人提供方便快捷的服务等方面都能发挥出重要作用。根据调查,在西方发达国家,几乎绝大部分的医院都已经采用了医院病房管理系统,然而在国内的使用尚不普及,许多小型医院还是完全依靠手工操作在管理病人和医院员工的一切信息,这不仅劳动强度大且工作效率低,医师护士和管理人员的大量时间都消耗在事务性工作上,对其所掌握的信息也无法很好地统计应用起来,这样既无法提高医院自身的医疗水平,同时又无法很好地为病人服务。

信息时代已经来临,将计算机应用于医院的日常管理为医院的现代化带来了从未有过的动力和机遇,为医疗卫生领域的发展提供了无限的潜力。对于一个医院来说,病房管理是一个必备的环节,病房的入住、费用统计等都包含着复杂的信息,这就需要应用计算机软件来对各项工作进行管理以发挥最大的功效。采用计算机管理信息系统已成为医院管理科学化和现代化的标志,给医院带来了明显的经济效益和社会效益,它极大的提高了医务人员的工作效率,有效地解决了信息的管理问题。这次设计的目的就是为医院创建一个方便、实用、快捷的管理系统, 具备数据库维护功能,能根据用户需求进行数据的查询、添加、删除、修改,减轻医院工作人员的负担,同时这也是现代化管理的必然要求。

系统功能模块图:

各模块所能实现的功能:

登录界面:医生只有输入正确的工作证号和密码才能登录系统,如果还没有注册,可先输入相关信息进行注册。

管理主页:列出了该系统所能实现的功能,包括病人住院登记、出院结算、病人信息管理、医院内部信息管理、系统安全密码设置,医生根据需要选择对应的项目。

住院登记:登记病人基本信息,包括病历号、姓名、性别、诊断、病房号、床位号、电话号码、主治医生、住院日期,将其提交给系统。

出院结算:根据病人的入院日期、出院日期、和所住病房的收费标准,便可计算出病人所需支付的费用。

病人信息管理:可以查看全部病人信息,而且能选择科室进行分科室查看病人信息,还可以通过输入病人病历号、选择想要修改的项目来修改病人信息。

医院内部信息管理:包括科室信息管理、医生信息管理、病房信息管理、床位信息管理。其中科室信息管理实现添加科室、删除科室、更新科室、查看全部科室、查看科室医生;医生信息管理用来添加医生、删除医生、更新医生、查看所有医生、查看医生主管病人;病房信息管理实现添加病房、删除病房、更新病房以及查看全部病房;床位信息管理用来添加床位、删除床位、还可以查询床位的使用情况以便合理地为病人分配床位。

系统安全密码设置:为了保证系统的安全性,系统通过对工作证号和旧密码的验证,来修改登录密码。

病房管理系统数据流图:

数据字典:

(1) 数据结构:病人

含义说明:定义了一个病人的信息结构

组成:病历号、姓名、性别、诊断、病房号、床位号、电话号码、主治医生、住院日期(2) 数据结构:医生

含义说明:定义了一个医生的信息结构

组成:工作证号,姓名,年龄,职称,部门,电话号码,密码

(3) 数据项:病历号

含义说明:唯一标识一个病人

类型:字符型

长度:4

取值范围0000~9999

(4) 数据项:工作证号

含义说明:唯一标识一个医生

类型:字符型

长度:3

取值范围000~999

(5) 数据项:密码

含义说明:登陆本病房管理系统时所需的密码

类型:可变字符型

长度:15

(6) 数据流:病房和床位信息

说明:表示病房内每一床位的使用状态

数据来源:病房表和床位表

组成:所属科室,病房号,床位号,目前状态,收费标准

(7) 数据流:医生主管病人信息

说明:表示每一医生主治的病人信息

数据来源:病人表和医生表

组成:病历号,姓名,性别,病房号,床位号,电话号码,医生工作证号,医生姓名(8) 数据流:科室医生信息

说明:表示每一科室包含的医生信息

数据来源:科室表和医生表

组成:工作证号, 姓名, 职称, 年龄, 电话号码, 科名, 科地址, 科电话

(9) 处理过程: 登记病人信息

说明:向系统录入病人信息

输入:病历号、姓名、性别、诊断、病房号、床位号、电话号码、主治医生、住院日期处理:首先根据病人诊断的结果,从病房和床位信息中选择一个空的床位,然后将病人相关信息输入系统。

(10)处理过程: 出院结算

说明:结算病人住院期间所需费用

输入:病历号、出院日期

输出:姓名、病房号、收费标准、住院日期、应付金额

处理:根据病人的病历号,从数据库中得到相应的住院信息,由出院日期和收费标准系统可返回应支付的费用。

二、结构设计

1.概念结构设计

全局E-R图:

2.逻辑结构设计

将E-R图转换为关系模式为:

病人(病历号,姓名,性别,诊断,病房号,床位号,电话号码,主治医生,住院日期)医生(工作证号,姓名,年龄,职称,部门,电话号码,密码)

科室(科名,科电话,科地址)

病房(病房号,所属科室,收费标准)

病床(病房号,病床号,目前状态)

治疗(病历号,工作证号)

属于(工作证号,科名)

包含(科名,病房号)

入住(病历号,病房号)

拥有(病房号,病床号)

关系图如下所示:

3.物理结构设计

1) 对于医生表:

系统涉及了对工作证号、姓名、职称、部门的查询,因此为其各建立一个升序的索引。

2) 对于病人表:

系统涉及了对病历号、诊断、病房号、主治医生工作号的查询,因此为其各建立一个升序的索引。

3) 对于病房表:

系统涉及到了对病房号、所属科室的查询,因此为其各建立一个升序的索引。

4) 对于病床表:

系统涉及到了对病房号、床位号的查询,因此为其各建立一个升序的索引。

三、主要编码及描述:

1.数据库服务器端

1)视图一:

CREATE VIEW医生视图

AS

SELECT工作证号, 姓名, 职称, 年龄, 电话号码, 部门

FROM 医生

作用:医生表中有一列属性是密码,当查询医生信息时,不应显示出来,所以查询时可以直接查询该视图,输出除密码以外的信息。

视图二:

CREATE VIEW医生主管病人视图

AS

SELECT 病人.病历号,病人.姓名AS病人姓名,病人.性别, 病人.病房号,

病人.病床号,病人.电话号码,医生.姓名AS医生姓名, 医生.工作证号

FROM病人,医生

WHERE病人.主治医生工作号=医生.工作证号

ORDER BY医生.工作证号,病人.病历号

作用:该视图将医生表和病人表联系起来,当输入医生的工作证号后,可直接调用该视图,将相关的医生信息和病人信息以医生工作证号为第一顺序、病人病历号为第二顺序

输出。

视图三:

CREA TE VIEW科室医生信息情况

AS

SELECT医生.工作证号,医生.姓名, 医生.职称, 医生.年龄, 医生.电话号码, 科室.科名,科室.科地址,科室.科电话

FROM医生,科室

WHERE医生.部门= 科室.科名

ORDER BY医生.工作证号

作用:该视图将科室表和医生表联系起来,当选择科室名称后,可直接调用该视图,将相关的科室信息和医生信息按医生工作证号的顺序输出。

视图四:

CREATE VIEW出院结算视图

AS

SELECT病人.病历号, 病人.姓名, 病人.性别, 病人.诊断, 病人.住院日期,

病人.病房号, 病房.收费标准

FROM病人,病房

WHERE病人.病房号= 病房.病房号

ORDER BY病人.病历号

作用:当病人出院时结算费用,需要知道住院日期、病房号及收费标准以便进一步的计算。

该视图将病人表和病房表联系起来,输入病人病历号后,即可显示出住院日期、收

费标准等相关信息。

2)存储过程:

CREATE PROCEDURE chuyuan(@id char(20),@tm datetime,@pp int output) AS

declare @a int

declare @b int

declare @c datetime

select @a=病房号from 病人where 病历号=@id

select @b=收费标准from 病房where 病房号=@a

select @c=住院日期from 病人where 病历号=@id

select @a=datediff(day,@c,@tm)

set @pp=@a*@b

GO

作用:该存储过程将病人病历号和出院日期作为输入,分别赋值给变量id、tm,经select 语句得到收费标准赋给变量b、和住院日期赋给变量c,用函数datediff(day,@c,@tm)

计算出住院天数,住院天数和收费标准的乘积即为结算费用,将它赋给变量pp并

作为输出返回。

3)触发器一:

create TRIGGER up ON病人

FOR INSERT

AS

Begin

Declare @NR varchar(50), @NB varchar(50)

Select @NR=病房号,@NB=病床号from inserted

Update 病床

Set 目前状态="有人"

Where 病房号=@NR and 床位号=@NB

End

作用:当有新病人登记入住时触发事件,设置病人所在床位的目前状态为“有人”,以免再有病人入住此床位时发生冲突。

触发器二:

create TRIGGER de ON病人

FOR delete

AS

Begin

Declare @NR varchar(50), @NB varchar(50)

Select @NR=病房号,@NB=病床号from deleted

Update 病床

Set 目前状态="无人"

Where 病房号=@NR and 床位号=@NB

End

作用:当有病人出院时将其信息删除,触发该事件,设置病人之前床位的目前状态为“无人”,以便以后其他病人可以使用此床位。

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 StuSQL; //用来存放SQL命令的字符串

StuSQL = "INSERT INTO 病人(病历号,姓名,性别,诊断,病房号,电话号码,主治医生工作号,住院日期,病床号) V ALUES('";

StuSQL = StuSQL + TextBox1.Text + "','" + TextBox2.Text + "','" +TextBox10 .Text + "','";

StuSQL = StuSQL + TextBox4.Text + "','" + TextBox5.Text + "','" + TextBox6.Text + "','" + TextBox7.Text + "','" + TextBox8.Text + "','" + TextBox9.Text + "')";

SqlCommand StuIns = new SqlCommand(StuSQL, SunCon);

StuIns.ExecuteNonQuery(); //针对SunCon所连接的数据库,执行StuIns对象

SunCon.Close(); //关闭SunCon对象所连接的数据库

Response.Write("");

}

2)数据删除功能:通过“删除医生信息”界面,实现将数据库中医生表中的相应医生信息进行删除;

protected void Button1_Click(object sender, EventArgs e)

{

SqlConnection SunCon = 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("");

}

3)数据检索功能:通过“查看科室病人信息”界面,实现根据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 科室";

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 病历号,姓名,性别,病房号,病床号,主治医生工作号,住院日期,电话号码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 void 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.SelectedValue.ToString() + "'";

SqlCommand StuIns = new SqlCommand(StuSQL3, SunCon);

SqlDataReader SunDa = StuIns.ExecuteReader();

//使用ExecuteReader方法执行SQL命令,并将结果存储在SunDa对象中

GridView1.DataSource = SunDa;

GridView1.DataBind();

SunCon.Close();

}

4)数据修改功能:通过“更新医生信息”界面,选择想要的修改项,实现修改数据库中医生表的相关项为设置的新值。

protected 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+"'";

SqlCommand 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对象所连接的数据库

string StuSQL; //用来存放SQL命令的字符串

StuSQL = " UPDATE 医生set 年龄='" + TextBox4.Text + "' where 工作证号='" + TextBox1.Text +"'";

SqlCommand upd = new SqlCommand(StuSQL, SunCon);

upd.ExecuteNonQuery(); //针对SunCon所连接的数据库,执行upd对象所包含的名为StuSQL的SQL命令

SunCon.Close(); //关闭SunCon对象所连接的数据库

}

protected void Button4_Click(object sender, EventArgs e)

{

SqlConnection SunCon = new SqlConnection("Data Source=localhost;Initial Catalog=病房管理系统;Integrated Security=True");

SunCon.Open(); //打开SunCon对象所连接的数据库

string StuSQL; //用来存放SQL命令的字符串

StuSQL = " UPDA TE 医生set 电话号码='" + TextBox5.Text + "' where 工作证号='" + TextBox1.Text +"'";

SqlCommand upd = new SqlCommand(StuSQL, SunCon);

upd.ExecuteNonQuery();

SunCon.Close(); //关闭SunCon对象所连接的数据库

}

四、运行说明:主要界面展示

床位管理

说明:该界面用于管理病房的床位信息。先选择科室,再从该科室所含的病房中选择一个,便可实现查询此病房中各床位的目前状态,以供病人登记时参考,还可实现向此病房中添加床位或删除已有床位。

住院登记

说明:该界面用于病人住院时登记相关信息。确定要入住的病房和床位后按要求输入病人的相关信息,其中一些数据项含有一定的约束条件,将其提交给系统,供医生查询其所需信息以及出院时查询住院情况。

修改病人信息

说明:该界面用于修改病人信息。输入病人的病历号,然后从下拉列表中选择要修改的数据项,相应的那一部分就会变为可见,向其中输入新内容后,点击修改按钮,即可实现修改后台数据库病人的相关信息。

出院结算

说明:该界面用于病人出院结算费用。输入病人的病历号后,可将其住院信息显示出来。再输入出院日期,系统会调用存储过程计算出住院天数和收费标准的乘积即结算费用。

病人支付费用后,可将其信息从系统删除,所住床位的状态自动变为无人。

五、课程设计总结

在本次数据库课程设计中,我设计和开发了一个小型的病房管理系统,实现了对病人的住院登记、住院结算、信息查询、信息修改,对科室信息、医生信息、病房信息、床位信息的增、删、查、改,和系统安全密码设置的功能。设计过程中曾经遇到了不少难点和问题,如:将界面和后台数据库联系起来时出错;对数据库中信息操作时有时忽略了参照完整性;病人出院结算时输入相关信息调用存储过程, 然后将结算费用赋给变量并作为输出返回,该过程在数据库的查询分析器中可以实现,但在程序中却不能正常运行;页面间参数传递实现不了;还出现了一些语法错误,和对一些控件的属性及事件不熟悉等。对于上述这些难点,我花了很多时间去解决,反复看老师所给的事件代码、将每一条语句都理解透彻,查阅数据库教材和理论课的课件、并借来相关书籍辅助学习,注意数据库中各个所建表的主外键约束,仔细耐心检查才能发现一些不明显的语法错误,上网搜索也让我学到很多知识,还有些问题是请教老师的指导和同学之间的互相讨论,最终将难点一一克服。

为了能够使该设计尽可能完善,我看了不少课外资料,主要是想了解一下数据库管理系统是如何开发的,我从中学到了许多有关数据库方面和软件开发的知识,对软件工程和软件开发有了进一步的了解,知道了开发一个系统的基本步骤和方法:要先做需求分析,如果需求分析做的不到位,就会导致具体实现时出现很多不合理之处;然后设计相应的数据库,要注意数据库的实体完整性、参照完整、用户定义的完整性才能使系统正常工作,设计各表要规范减少冗余,建立适当的索引和存储过程对提高系统运行的效率是很有必要的;最后就是具体编写代码实现相关功能,将前台操作与后台数据库联系起来,完成整个系统的开发。我知道,要想真正深入透彻的做好病房管理系统,应该先去了解整个医院的信息管理机制,才能更好的理解医院病房管理系统是如何实现病房管理、如何与其他软件系统交互的,由于我所学知识和时间有限,这方面我做的不足。还有一点就是虽然我设计的系统能正确的执行各种功能,但容错方面不够完善,出错时有些页面没有相应的提示信息,还应进一步的改进,应编写代码使得当操作出现失误时,系统返回提示信息给用户并能继续正常运行,一个真正实用的系统都应具有良好的容错能力。

整体上说,这学期的数据库这门课程并不难理解,理论知识学起来比较容易,但之前对它的功能及作用如何实现缺乏实践。本次课程设计就给了我很好的机会,让我将书本知识运用于实际当中,提高了我思考和解决问题的能力,巩固了这个学期所学的课本知识,使我对一个完整的数据库的设计过程有了充分的理解,并锻炼了做软件需求分析以及将要求的功能模块化设计的能力,编写程序也培养了我逻辑思维能力的严密性。通过课程设计,我体会到要学一门知识就应该将它学好,但不只是单纯的学习课本知识,要学到精髓之处并学以致用,学到的并不代表我们掌握了,只有在实践的过程中才能对这些知识真正透彻、牢固的掌握。

总之,在此次课程设计中我很有收获,学到了不少专业知识,是对自己自身专业素质的一种提高,而且增强了我在专业设计和专业知识方面的信心,只要认学肯下功夫、有耐心、有恒心,就一定可以将事情做好。我还懂得了如何将学到的知识运用到实际中去,不仅让我对数据库这门课程更好的掌握,也是对锻炼我解决问题能力的一个考验,同时我发现并弥补了自己的某些知识方面的缺陷和不足。在今后,我还会继续努力,有信心去迎接挑战,在不断的求索与学习中进步。

相关文档
最新文档