1、 0医院管理系统1.课程设计的目的面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。现代化的医院也应该有现代化的管理系统。在科技日益发达的今天,人们的身体健康也在不断受到重视。因此,医院进行现代化管理就变得尤为重要,需要建立一个使用的医院管理系统。为了进一步巩固 JAVA 相关的知识,深刻把握 JAVA 语言的重要概念及其面向对象的特性,锻炼学生熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设了 JAVA 程序设计课程设计。 通过此次课程设计,使学生通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握 JAVA 语言的编
2、程思想及面向对象程序设计的方法,为今后的学习和工作打下基础。2.设计方案论证2.1 开发环境JAVA 编程工具 JDK 1.5.0 ,操作系统 Windows 7.2.2 系统功能描述系统需要完成功能主要有:(1)医生各种信息的输入,包括员工基本细细、职称、岗位。(2)医生各种的查询、修改,包括员工基本信息、职称、岗位、工资等。(3)医生的人事调动管理。(4)病人信息、病床、药剂、仪器的管理。(5)系统用户管理、权限管理。2.3 系统功能模块设计在系统功能分析的基础上,考虑 Microsoft Visual Studio 2008 程序编制的特点,得到如图 1 所示的系统功能模块图。1图 1
3、系统功能模块图2.4 数据库需求分析在数据库应用系统的开发过程中,数据库的结构设计是一个非常重要的问题。数据库结构设计的好坏将直接对应用系统的效率以及实现的效果产生影响,好的数据库结构会减小数据库的存储量,数据的完整性和一致性比较高,系统具有较快的相应速度,简化基于此数据库的应用程序的实现等。在数据库系统开始设计的时候应该尽量考虑全面,尤其应该仔细考虑用户的各种需求,避免浪费不要的人力和物力。数据库需求分析是数据结构设计的第一阶段,是非常重要的一个阶段。在这个阶段主要是收集基本数据、数据结构以及确定数据处理的流程,组成一份详尽的数据字典,为以后进一步设计打下基础。在仔细调查医院管理过程的基础上
4、,我们得到本系统所处理的数据关系如图 2 所示。2图 2 数据关系图2.5 数据库设计通过对医院管理的内容和数据关系分析,我们设计的数据项和数据结构如下:员工基本状况包括的数据项有员工号、员工姓名、性别、所在部门、身份证号、生日、籍贯、国籍、民族、婚姻状况、健康状况、参加工作时间、员工状态、家庭住址、联系电话等。员工工资状况包括的数据项有员工号、工资项别、工资金额等。医院工作岗位信息包括的数据项有工作岗位代号、工作岗位名称等。 医院部门信息包括的数据项有部门代号、部门名称、部门负责人等。病人信息包括的数据项有病人姓名、病人性别、入院时间、病人所属科室、病人状况、病人主治医生、房间号、病床号等。
5、药剂资源管理信息包括的数据项有药剂代号、药剂名称、药剂价格、药剂库存数量、备注等。医疗仪器管理包括的数据项有仪器代号、仪器名称、仪器价格、仪器数量、备注等。这一设计阶段是在需求分析的基础上,设计出能够满足用户需求的各种实体,以及确定他们之间的关系,为后面的逻辑结构设计打下基础。本实例根据上面的设计规划出的实体有员工实体、部门实体、岗位实体、病人实体、药剂实体、仪器实体。实体和实体之间的关系 E-R 图如图 3 所示。3图 3 实体之间关系 E-R 图我们需要将上面的数据库概念结构转化为 Microsoft Visual Studio 2008 数据库系统所支持的实际数据模型,也就是数据库的逻辑
6、结构。在上面的实体以及实体之间关系的基础上,我们就可以形成数据库中的表格以及各个表格之间的关系。医院管理系统数据库中各个表格的设计结果如表。每个表格对应在数据库中的一个表。42 .6 功能模块的创建5首先设计的是登录界面(如图 4 所示,所有程序代码参照“程序原代码” ) 。图 4 登陆界面然后设计的是登录后的主界面(如图 5 所示) 。图 5 主界面之后设计病人挂号界面(如图 6 所示) 。6图 6 病人挂号界面药品管理界面(如图 7 所示)图 7 药品管理界面3. 设计结果分析7首先我们运行程序,弹出登录界面在输入用户名和密码之后(如图 8 所示) ,进入主界面(如图 9 所示) 。图 8
7、 登录图 9 登录后的主界面然后我们进行病人登记(如图 10 所示) ,在输入一系列的信息之后,单击添加挂号,成功添加一个新挂号。8图 10 病人挂号界面之后我们在数据库中添加一系列的相关数据,再进行退药管理(如图 11 所示) 。图 11 退药界面4.设计体会9通过这一次 JAVA 课程设计,我深深的理解到面向对象编程的方便与快捷和JAVA 的重要性,也使我本学期所学的 JAVA 知识得到巩固和应用,在设计的过程中我遇到了很到问题,为了解决问题进行了各种各样的实验和资料的查找,这此课程设计还让我懂得了写程序不能闭门造车,要努力拓宽知识面,丰富知识。它还让我学会了在网上查阅那些无限的资料。通过
8、对此课题的开发,使我对用 JAVA 开发系统有了一个比较清楚的认识,体会到理论和实践的重要性。由于自己的分析设计和程序经验不足,该系统设计和实现过程中,还有许多没有完善的地方,比如用户界面设计不够美观,异常出错处理比较差等多方面问题,这些都有待进一步完善和提高。本次课程设计对我将来的学习工作必会起到很大的帮助作用。5.参考文献1.范立南,刘天惠等 . SQL Server 2000 实用教程M. 北京: 清华大学出版社,2004.02:47-1382.李诚等. Java2 简明教程M,第 2 版. 北京:清华大学出版社,2004.08:165-2013. 陈轶.姚晓昆编著 .Java 程序设计
9、实验指导.北京:清华大学出版社,20064. 杨昭编著 .二级 Java 语言程序设计教程.北京:中国水利水电出版社,20065 .美Herbert Schidt 著.Java 参考大全.鄢爱兰.鹿江春译 .北京:清华大学出版社,2006附录:namespace Hospital_MISpublic partial class Frm_login : Formdatabaseoperate myoperate = new databaseoperate();public Frm_login()InitializeComponent();private void btn_exit_Click(o
10、bject sender, EventArgs e)Application.Exit();10private void Frm_login_FormClosed(object sender, FormClosedEventArgs e)Application.Exit();private void btn_ok_Click(object sender, EventArgs e)/首先查询数据库,获取与指定用户名和密码匹配的信息SqlDataReader sqlread = myoperate.getread(“select name,password,discipline from emplo
11、yee “ +“ where name=“ + txt_name.Text.Trim() +“ and password=“ + txt_pwd.Text.Trim() + “);trysqlread.Read();/读取SqlDataReaderif (sqlread.HasRows)/如果存在匹配行/在operateinfo中记录用户名信息operateinfo.operatename =txt_name.Text.Trim();/显示主窗体Frm_Main newfrm = new Frm_Main();this.Hide();newfrm.Show();else/如果密码错误,则显示提
12、示信息并要求用户重新输入MessageBox.Show(“用户名或密码错误!“, “ 提示“,MessageBoxButtons.OK,MessageBoxIcon.Information);11txt_name.Text = “;txt_pwd.Text = “;txt_name.Focus();finally/如果己经实例化了SqlDataReaderif (sqlread != null)/关闭SqlDataReadersqlread.Close(); 主界面代码及挂号界面代码namespace Hospital_MISpublic partial class Frm_appointme
13、nt : Formdatabaseoperate myoperate = new databaseoperate();public Frm_appointment()InitializeComponent();private void button3_Click(object sender, EventArgs e)/获取病人的编号operateinfo.patientno = txt_patientno.Text.Trim();/实例化并显示打印预览窗口12Frm_printreg frm = new Frm_printreg();frm.Show ();private void Frm_a
14、ppointment_Load(object sender, EventArgs e)/进行病人名称的自动完成操作this.cmb_name.AutoCompleteMode = AutoCompleteMode.SuggestAppend;this.cmb_name.AutoCompleteSource = AutoCompleteSource.ListItems;/添加要进行操作的类型cmb_optype.Items.Add(“预约“);cmb_optype.Items.Add(“预约挂号“);cmb_optype.Items.Add(“现场挂号“);cmb_optype.Selected
15、Index = 0; /将病人信息的文本框控件设置为不可用SetControlFalse();/加载病人姓名this.getname();/添加医师名称以及预约科室DataSet getdocnameds = myoperate.getds(“select ID,name,discipline from employee“, “employee“);for (int i = 0; i getdocnameds.Tables0.Rows.Count; i+)/将预约科室添加到ComboBox 控件中this.cmb_docdiscipline.Items.Add(getdocnameds.Tab
16、les0.Rowsi2);/对医师信息进行数据绑定cmb_docname.DataSource = getdocnameds.Tables0;cmb_docname.DisplayMember = “name“;cmb_docname.ValueMember = “ID“;/添加员工表中所有员工的信息,绑定到预约医生 ComboBox控件中13DataSet getappointdocds = myoperate.getds(“select ID,name from employee“, “employee“);cmb_appointdoc.DataSource = getappointdoc
17、ds.Tables0;cmb_appointdoc.DisplayMember = “name“;cmb_appointdoc.ValueMember = “ID“;/添加挂号名称到ComboBox控件中DataSet getregnameds = myoperate.getds(“select name from dict_reg“, “dict_reg“);for (int i = 0; i getregnameds.Tables0.Rows.Count; i+)this.cmb_regname.Items.Add(getregnameds.Tables0.Rowsi0);cmb_regn
18、ame.SelectedIndex = 0;private void SetControlFalse()txt_balance.Enabled = false;txt_birthday.Enabled = false;txt_cardname.Enabled = false;txt_celladdress.Enabled = false;txt_cellphone.Enabled = false;txt_email.Enabled = false;txt_patientno.Enabled = false;txt_sex.Enabled = false;txt_sidno.Enabled =
19、false;txt_sidtype.Enabled = false;private void cmb_optype_SelectedIndexChanged(object sender, EventArgs e)this.getname();14if (cmb_optype.SelectedItem.ToString() = “预约 “)cmb_regname.Enabled = false;cmb_regfee.Enabled = false;if (cmb_optype.SelectedItem.ToString() = “预约挂号 “)cmb_regname.Enabled = true
20、;cmb_regfee.Enabled = true;if (cmb_optype.SelectedItem.ToString() = “现场挂号 “)cmb_regname.Enabled = true;cmb_regfee.Enabled = true;private void getname()if (cmb_optype.SelectedItem.ToString() = “预约 “)cmb_name.Items.Clear();DataSet getnameds = myoperate.getds(“select name from patient“, “patient“);for
21、(int i = 0; i getnameds.Tables0.Rows.Count; i+)this.cmb_name.Items.Add(getnameds.Tables0.Rowsi0);if (cmb_optype.SelectedItem.ToString() = “预约挂号 “)cmb_name.Items.Clear();15DataSet getnameds = myoperate.getds(“select patientname from appointment where appointment_done=1“, “appoint“);for (int i = 0; i
22、getnameds.Tables0.Rows.Count; i+)this.cmb_name.Items.Add(getnameds.Tables0.Rowsi0);if (cmb_optype.SelectedItem.ToString() = “现场挂号 “) cmb_name.Items.Clear();DataSet getnameds = myoperate.getds(“select name from patient“, “patient“);for (int i = 0; i getnameds.Tables0.Rows.Count; i+)this.cmb_name.Item
23、s.Add(getnameds.Tables0.Rowsi0);private void cmb_name_SelectedIndexChanged(object sender, EventArgs e)if (cmb_optype.SelectedItem.ToString() = “挂号 “ )string tempstr = cmb_name.Text;DataSet chanagenameds = myoperate.getds(“select * from patient where name=“ + tempstr + “, “patient“);txt_sidtype.Text
24、= chanagenameds.Tables0.Rows0“sidtype“.ToString();txt_sidno.Text = chanagenameds.Tables0.Rows0“sidno“.ToString();txt_sex.Text = chanagenameds.Tables0.Rows0“sex“.ToString();txt_patientno.Text = chanagenameds.Tables0.Rows0“patientno“.ToString();txt_email.Text = chanagenameds.Tables0.Rows0“e_mail“.ToSt
25、ring();16txt_cellphone.Text = chanagenameds.Tables0.Rows0“cellphone“.ToString();txt_celladdress.Text = chanagenameds.Tables0.Rows0“celladdress“.ToString();txt_cardname.Text = chanagenameds.Tables0.Rows0“cardtype“.ToString();txt_birthday.Text = chanagenameds.Tables0.Rows0“birthday“.ToString();txt_bal
26、ance.Text = chanagenameds.Tables0.Rows0“balance“.ToString();DataSet appinfods=myoperate .getds(“Select * from appointment where patientname=“ + tempstr + “ and appointment_done=1“,“appointment“);cmb_docname.SelectedItem = appinfods.Tables0.Rows0“doctor“.ToString();cmb_docdiscipline.SelectedItem = ap
27、pinfods.Tables0.Rows0“discipline“.ToString();dtp_thisdate.Value = Convert.ToDateTime(appinfods.Tables0.Rows0“thisdate“);dtp_thistime.Value = Convert.ToDateTime(appinfods.Tables0.Rows0“thistime“);elsestring tempstr = cmb_name.Text;DataSet chanagenameds = myoperate.getds(“select * from patient where n
28、ame=“ + tempstr + “, “patient“);txt_sidtype.Text = chanagenameds.Tables0.Rows0“sidtype“.ToString();txt_sidno.Text = chanagenameds.Tables0.Rows0“sidno“.ToString();txt_sex.Text = chanagenameds.Tables0.Rows0“sex“.ToString();txt_patientno.Text = chanagenameds.Tables0.Rows0“patientno“.ToString();txt_emai
29、l.Text = chanagenameds.Tables0.Rows0“e_mail“.ToString();txt_cellphone.Text = chanagenameds.Tables0.Rows0“cellphone“.ToString();txt_celladdress.Text = chanagenameds.Tables0.Rows0“celladdress“.ToString();txt_cardname.Text = chanagenameds.Tables0.Rows0“cardtype“.ToString();txt_birthday.Text = chanagena
30、meds.Tables0.Rows0“birthday“.ToString();txt_balance.Text = chanagenameds.Tables0.Rows0“balance“.ToString();17private void btn_addappointment_Click(object sender, EventArgs e)if (cmb_optype.SelectedItem.ToString() != “预约“)/如果操作类型不为预约时,则提示用户MessageBox.Show(“请将操作类型设为预约!“);else/如果没有指定病人姓名,也不能进行预约if (cmb
31、_name.Text = “)MessageBox.Show(“请选择预约人的姓名!“);else/如果没有指定预约医生,不能进行预约if (cmb_docname.Text = “)MessageBox.Show(“请选择预约医生!“);else/同时要指定预约科室if (cmb_docdiscipline.Text = “)MessageBox.Show(“请选择预约科室!“);else/如果预约的各个条件都符合,则调用执行插入语句插入到数据库中myoperate.getcom(“insert into appointment(patientname,patientno,“ +“docto
32、r,discipline,thisdate,thistime,appointment_done)“+ “ values(“ + cmb_name.SelectedItem.ToString() + “,“+ txt_patientno.Text.Trim() + “,“+ cmb_docname.SelectedValue.ToString() + “,“+ cmb_docdiscipline.SelectedItem.ToString() + “,“+ dtp_thisdate.Value.ToShortDateString() + “,“+ dtp_thistime.Value.ToSho
33、rtTimeString() + “,“+ Convert.ToSByte(true) + “)“);18MessageBox.Show(“添加预约成功!“);/提示添加成功this.gridviewinit();/重新刷新GridView控件private void btn_addreg_Click(object sender, EventArgs e)if (cmb_optype.SelectedItem.ToString() = “预约 “)MessageBox.Show(“请将操作类型选成挂号!方可进行挂号!“);else/this.getname();if (cmb_name.Tex
34、t = “)MessageBox.Show(“请选择预约人的姓名!“);elseif (cmb_docname.Text = “)MessageBox.Show(“请选择预约医生!“);elseif (cmb_docdiscipline.Text = “)MessageBox.Show(“请选择预约科室!“);elseif (cmb_regname.Text = “)MessageBox.Show(“请选择挂号名称!“);else19if (cmb_optype.SelectedItem.ToString() = “预约挂号“)myoperate.getcom(“Update appointm
35、ent set reg_name=“ + cmb_regname.SelectedItem.ToString() + “,reg_fee=“ + cmb_regfee.Text + “,reg_done=1 where patientno=“ + txt_patientno.Text.Trim() + “);MessageBox.Show(“添加挂号成功!“);this.gridviewinit();elsemyoperate.getcom(“insert into appointment(patientname,patientno,doctor,discipline,thisdate,thi
36、stime,appointment_done,reg_name,reg_fee,reg_done)“+ “ values(“ + cmb_name.Text + “,“ + txt_patientno.Text.Trim() + “,“ + cmb_docname.SelectedValue.ToString() + “,“ + cmb_docdiscipline.SelectedItem.ToString() + “,“ + dtp_thisdate.Value.ToShortDateString() + “,“ + dtp_thistime.Value.ToShortTimeString(
37、) + “,1,“+cmb_regname .SelectedItem .ToString ()+“,“+cmb_regfee .Text +“,1)“);MessageBox.Show(“添加挂号成功!“);this.gridviewinit();private void cmb_regtype_SelectedIndexChanged(object sender, EventArgs e)20this.getname();private void gridviewinit()/获取预约表中的指定医师在指定时间内的预约信息DataSet view1ds = myoperate.getds(“
38、select appointmentid as 预约号,“+“patientname as 病人姓名,patientno as 病历号,doctor as 预约医生,“+“discipline as 预约科室,thistime as 预约时间from appointment “+“where doctor=“+cmb_appointdoc.SelectedValue .ToString ()+“ and thisdate=“+dtp_appointdate .Value .ToShortDateString ()+“, “appointment“);/绑定预约信息到DataGridView控件
39、上this.dataGridView1.DataSource = view1ds.Tables0;/获取值班表中当前日期和指定医师的值班信息DataSet view2ds = myoperate.getds(“select ID as 编号,doc as 医师,“+“Part as 科室 ,StartDate as 开始时间,EndDate as 结束时间,“+“CurrentDate as 日期from duty where doc=“+ cmb_appointdoc.SelectedValue.ToString() +“ and currentDate=“+System.DateTime
40、.Now.Date.ToString()+“, “值班表“);/将值班信息保存到DataGridView2 控件上this.dataGridView2.DataSource = view2ds.Tables0; private void cmb_appointdoc_SelectedIndexChanged(object sender, EventArgs e)this.gridviewinit();/根据选择的挂号名称获得挂号费用21private void cmb_regname_SelectedIndexChanged(object sender, EventArgs e)string
41、tempstr = cmb_regname.SelectedItem.ToString();DataSet regfreeds = myoperate.getds(“select price from dict_reg where name=“ + tempstr + “, “dict_reg“);for (int i = 0; i regfreeds.Tables0.Rows.Count; i+)this.cmb_regfee.Text = regfreeds.Tables0.Rowsi0.ToString();private void btn_addnewpatient_Click(obj
42、ect sender, EventArgs e)Frm_patient frm = new Frm_patient();frm.MdiParent = ActiveForm;frm.Show();药品管理代码namespace Hospital_MISpublic partial class Frm_medimanage : Formdatabaseoperate myoperate = new databaseoperate();private int savevalue;public Frm_medimanage()InitializeComponent();/定义查询Medica表的SQ
43、L语句22private string sqlstr = “select ID as 编号,name as 药品名 ,“ +“Unit as 单位,Price as 价格,Style as 规格,Chinese as 拼音码,“ +“Class as 类别,Better as 功能,factory as 厂家,num as 数量,“ +“ableuse as 是否可用,note as 备注from Medica“ ;private string mytable = “药品表“; /指定表名BindingSource mybdsource = new BindingSource();/定义Bin
44、dingSource进行绑定private void Frm_medimanage_Load(object sender, EventArgs e)/调用getds方法执行SQL并返回一个填充了数据的DataSetDataSet myds = myoperate.getds(sqlstr, mytable);mybdsource.DataSource = myds.Tables0;/绑定BindingSource/将DataGridView控件绑定到BindingSource控件this.dataGridView1.DataSource = mybdsource;/将BindingNaviga
45、tor控件绑定到BindingSourcethis.bindingNavigator1.BindingSource = mybdsource;/隐藏药品编号的显示txt_id.Visible = false;txt_id.DataBindings.Add(“text“, mybdsource, “编号“);SetControlToFalse();/将控件的可用状态设为falseprivate void SetControlToFalse()txt_unit.Enabled = false;txt_style.Enabled = false;txt_num.Enabled = false;txt
46、_note.Enabled = false;txt_name.Enabled = false;txt_factory.Enabled = false;txt_class.Enabled = false;txt_chinese.Enabled = false;23txt_better.Enabled = false;nud_price.Enabled = false;chk_ableuse.Enabled = false;private void init()DataSet myds = myoperate.getds(sqlstr, mytable);mybdsource.DataSource
47、 = myds.Tables0;this.dataGridView1.DataSource = mybdsource;this.bindingNavigator1.BindingSource = mybdsource;private void bindingNavigatorAddNewItem_Click(object sender, EventArgs e)SetControlToTrue();txt_name.Focus();savevalue = 1;private void SetControlToTrue()txt_unit.Enabled = true;txt_style.Ena
48、bled = true;txt_num.Enabled = true;txt_note.Enabled = true;txt_name.Enabled = true;24txt_factory.Enabled = true;txt_class.Enabled = true;txt_chinese.Enabled = true;txt_better.Enabled = true;nud_price.Enabled = true;chk_ableuse.Enabled = true;private void 保存SToolStripButton_Click( object sender, EventArgs e)if (savevalue = 1)/savevalue为表示新增状态if (txt_name.Tex