基于JAVA和SQL SERVER数据库实现的医院病房信息管理系统

showy

发布日期: 2018-11-06 15:43:53 浏览量: 2177
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

1 系统设计

1.1 设计目标

医院病房管理系统是一种以窗体界面为基础的多功能平台,本系统最根本的目的是让使用者与数据库能够通过系统达到交互,以此来进行医院病房的管理等相关操作。管理员可以通过该平台对医生、病人、科室、病房、病床进行增加、删除、修改、查询操作,普通用户可以通过该平台查看修改自己的个人信息、进行病人住院登记、查询病人和床位信息、根据病人的住院日期、出院日期和所住病房的收费标准进行出院结算,然后删除该病人的信息。本系统在全面提高医院的整体工作效率、为病人提供快捷的服务、为医生提供人性化的管理、减轻医院工作人员的负担等方面发挥着重要作用。

1.2 需求分析

信息要求:医生基本信息包括工作证号、密码、姓名、性别、职称、年龄、联系电话、所属科室,病人基本信息包括病历号、姓名、性别、诊断结果、病房号、病床号、主治医生工作证号、联系电话、入院日期、出院日期,科室基本信息包括科室名称、科室地址、科室电话,病房基本信息包括病房号、所属科室、收费标准,病床基本信息包括病房号、病床号、目前状态。

处理要求:一名医生可以诊治多名病人,一名病人只能被一名医生诊治。一个病房可以住多名病人,一名病人只能住在一个病房。一个科室有多名医生,一个医生只属于一个科室。一个科室包含多个病房,一个病房只属于一个科室。一个病房拥有多张病床,一个病床只能位于一个科室。

安全性与完整性要求:管理员和医生只有输入正确的工作证号和密码才能登录系统,如果还没有注册,先输入相关信息进行注册。对于管理员,管理主页列出了管理员所能实现的功能,包括对医生、病人、科室、病房、病床的增加、删除、修改、查询,管理员根据需要选择对应的项目。对于用户,即医生,管理主页列出了医生所能实现的功能,包括查看修改自己的个人信息、登记病人基本信息、查询病人和床位信息、根据病人的住院日期、出院日期和所住病房的收费标准进行出院结算,然后删除该病人的信息。为了保证系统的安全性,系统提供对工作证号和旧密码的验证,来修改登录密码。

1.3 开发和运行环境选择

  • 开发工具:前台开发语言为Java编程语言

  • 后台数据库为SQL Server 2014

  • 运行环境:Windows 10

2 数据库设计

2.1 数据库概念设计

根据需求分析,可以确定该系统中的实体、属性和联系之间的关系,并画出如下所示的E-R图。

实体及属性如图2.1所示。

病人实体及属性如图2.2所示。

科室实体及属性如图2.3所示。

病房实体及属性如图2.4所示。

病床实体及属性如图2.5所示。

由该项目的处理需求可知,“医生”和“病人”之间的“治疗”联系为1:n,即一名医生可以诊治多名病人,一名病人只能被一名医生诊治。“病房”和“病人”之间的“入住”联系为1:n,即一个病房可以住多名病人,一名病人只能住在一个病房。“科室”和“医生”之间的“属于”联系为1:n,即一个科室有多名医生,一个医生只属于一个科室。“科室”和“病房”之间的“包含”联系为1:n,即一个科室包含多个病房,一个病房只属于一个科室。“病房”和“病床”之间的“拥有”联系为1:n,即一个病房拥有多张病床,一个病床只能位于一个科室。系统的实体联系图,如图2.6所示。

2.2 数据库逻辑结构设计

2.2.1 关系模式

根据转换规则和医院病房管理系统E-R图,可以得到医院病房管理系统的关系模式如下。

医生(工作证号、密码、姓名、性别、职称、年龄、联系电话、所属科室)为医生实体对应的关系模式,其中工作证号是主码,科室的主码科室名称是医生的外码。

病人(病历号、姓名、性别、诊断结果、病房号、病床号、主治医生工作证号、联系电话、入院日期、出院日期)为病人实体对应的关系模式,其中病历号是主码,医生的主码工作证号是病人的外码属性,病床的主码病房号、病床号是病人的外码属性。

科室(科室名称、科室地址、科室电话)为科室实体对应的关系模式,其中科室名称是主码。

病房(病房号、所属科室、收费标准)为病房实体对应的关系模式,其中病房号是主码,科室的主码科室名称是病房的外码。

病床(病房号病床号、目前状态)为病床实体对应的关系模式,其中病房号、病床号是主码。

2.2.2 结构设计表

医生结构设计表如表2.1所示。

病人结构设计表如表2.2所示。

科室结构设计表如表2.3所示。

病房结构设计表如表2.4所示。

病床结构设计表如表2.5所示。

2.2.3 数据字典

数据项描述如表2.3所示。

数据结构描述如表2.4所示。

3 医院病房管理系统详细设计

3.1 系统功能

医院病房管理系统主要分为用户模块和管理员模块(分为医生、病人、科室、病房、病床信息增删改查功能)。其中用户模块包括查看修改自己的个人信息、进行病人住院登记、查询病人和床位信息、根据病人的住院日期、出院日期和所住病房的收费标准进行出院结算,然后删除该病人的信息。管理员模块包括对医生、病人、科室、病房、病床进行增加、删除、修改、查询操作。

3.2 数据库以及表的建立

医院病房管理系统数据库中包含五张表,分别为医生(Doctor)、病人(Patient)、科室(Department)、病房(Ward)、病床(Bed),相关代码如下。

  1. CREATE TABLE Doctor
  2. (Dno CHAR(10) PRIMARY KEY,
  3. Dpassword VARCHAR(15) NOT NULL,
  4. Dname CHAR(20) NOT NULL,
  5. Dsex CHAR(2) NOT NULL,
  6. Dtitle CHAR(10) NOT NULL,
  7. Dage SMALLINT NOT NULL,
  8. Dtel CHAR(11) NOT NULL,
  9. Deptname CHAR(20) NOT NULL,
  10. FOREIGN KEY(Deptname) REFERENCES Department(Deptname)
  11. );
  12. CREATE TABLE Department
  13. (Deptname CHAR(20) PRIMARY KEY,
  14. Deptaddress CHAR(20) NOT NULL,
  15. Depttel CHAR(11) NOT NULL
  16. );
  17. CREATE TABLE Ward
  18. (Wno CHAR(9) PRIMARY KEY,
  19. Deptname CHAR(20) NOT NULL,
  20. Wcharge INT NOT NULL,
  21. FOREIGN KEY(Deptname) REFERENCES Department(Deptname)
  22. );
  23. CREATE TABLE Bed
  24. (Wno CHAR(9),
  25. Bno CHAR(9),
  26. Bstate CHAR(20) ,
  27. PRIMARY KEY(Wno,Bno),
  28. FOREIGN KEY(Wno) REFERENCES Ward(Wno)
  29. );
  30. CREATE TABLE Patient
  31. (Pno CHAR(10) PRIMARY KEY,
  32. Pname CHAR(20) NOT NULL,
  33. Psex CHAR(2) NOT NULL,
  34. Pdiagnose CHAR(20) NOT NULL,
  35. Wno CHAR(9) NOT NULL,
  36. Bno CHAR(9) NOT NULL,
  37. Dno CHAR(10) NOT NULL,
  38. Ptel CHAR(11) NOT NULL,
  39. Pindate DATE NOT NULL,
  40. Poutdate DATE ,
  41. FOREIGN KEY(Wno,Bno) REFERENCES Bed(Wno,Bno),
  42. FOREIGN KEY(Dno) REFERENCES Doctor(Dno)
  43. );

3.3 连接数据库

连接数据库的代码及设置和连接操作的相关代码如下。

  1. package linkdatabase;
  2. package linkdatabase;
  3. import java.sql.Connection;
  4. import java.sql.DriverManager;
  5. import java.sql.PreparedStatement;
  6. import java.sql.ResultSet;
  7. import java.sql.SQLException;
  8. public class linkdatabase {
  9. static Connection connection;
  10. public linkdatabase(){
  11. //数据库驱动
  12. String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";
  13. //连接的数据库
  14. String url="jdbc:sqlserver://localhost:1433;DatabaseName=HWMS";
  15. String user="sa";
  16. String password="yyl13593519418";
  17. //加载JDBC-MySQL数据库驱动
  18. try {
  19. Class.forName(driverName);
  20. connection = (Connection) DriverManager.getConnection(url,user,password);
  21. System.out.println("数据库连接成功");
  22. }
  23. catch(Exception e) {
  24. e.printStackTrace();
  25. System.out.println("数据库连接失败:"+e.getMessage());
  26. }
  27. }
  28. public static Connection getConnection(){
  29. new linkdatabase();
  30. return connection;
  31. }
  32. public void setConnection(Connection connection){
  33. this.connection = connection;
  34. }
  35. public static void closeAll(ResultSet rs,PreparedStatement ps,Connection con){
  36. if(rs != null){
  37. try{
  38. rs.close();
  39. }catch(SQLException e){
  40. e.printStackTrace();
  41. }
  42. }
  43. if(ps != null){
  44. try{
  45. ps.close();
  46. }catch(SQLException e) {
  47. e.printStackTrace();
  48. }
  49. }
  50. if(con != null){
  51. try{
  52. con.close();
  53. }catch(SQLException e){
  54. e.printStackTrace();
  55. }
  56. }
  57. }
  58. }

3.4 登录系统

登录系统为进入系统的首要操作,相关代码如下。

  1. package Hospitallogin;
  2. import java.awt.Button;
  3. import java.awt.Color;
  4. import java.awt.Cursor;
  5. import java.awt.Font;
  6. import java.awt.event.ActionEvent;
  7. import java.awt.event.ActionListener;
  8. import java.awt.event.WindowAdapter;
  9. import java.awt.event.WindowEvent;
  10. import java.sql.Connection;
  11. import java.sql.PreparedStatement;
  12. import java.sql.ResultSet;
  13. import javax.swing.ImageIcon;
  14. import javax.swing.JFrame;
  15. import javax.swing.JLabel;
  16. import javax.swing.JOptionPane;
  17. import javax.swing.JPanel;
  18. import javax.swing.JTextField;
  19. import Doctorfunction.Main;
  20. import Hospitaladmin.admin_frame;
  21. import Hospitalresponse.Alter;
  22. import Hospitalresponse.Register;
  23. import geng.handle.HandleLogin;
  24. import geng.model.Login;
  25. import linkdatabase.linkdatabase;
  26. public class LoginFrame extends JFrame implements ActionListener{
  27. String sql;
  28. Login login = new Login();
  29. HandleLogin handleLogin = new HandleLogin();
  30. JLabel l1 = new JLabel("欢迎登陆医院病房管理系统");
  31. JLabel l2 = new JLabel("账号:");
  32. JLabel l3 = new JLabel("密码:");
  33. JLabel l4 = new JLabel("账号不存在!");
  34. JLabel l5 = new JLabel("<HTML><U>"+"注册账号"+"</U></HTML>");
  35. JLabel l6 = new JLabel("<HTML><U>"+"修改密码"+"</U></HTML>");
  36. JTextField t1 = new JTextField();
  37. JTextField t2 = new JTextField();
  38. Button b1 = new Button("登陆");
  39. Button b2 = new Button("取消");
  40. public LoginFrame() {
  41. // TODO Auto-generated constructor stub
  42. //设置标题
  43. super("欢迎登陆医院病房管理系统");//创建标题为欢迎登陆医院病房管理系统的窗口
  44. setBounds(300,100,910,500);//设置窗口在屏幕上的位置及大小
  45. String path = "lib/login.jpeg";
  46. ImageIcon backgroundimage=new ImageIcon(path);//使标签有图片,用此创建背景图片
  47. JLabel jLabel = new JLabel(backgroundimage);//标签为用户提示信息
  48. jLabel.setBounds(0, 0, this.getWidth(), this.getHeight());//标签在窗口上的位置及大小
  49. JPanel jPanel1 = (JPanel) this.getContentPane();//初始化一个内容面板,这样才可以把内容面板设置成透明的 jPanel1下面是我们要添加的图片,上面是我们的组件
  50. jPanel1.setOpaque(false);//使组件不会显示其中的某些像素,允许组件下面的像素显现出来,即设置透明
  51. jPanel1.setLayout(null);
  52. this.getLayeredPane().add(jLabel,new Integer(Integer.MIN_VALUE));
  53. setVisible(true);
  54. // 登陆界面配置
  55. l1.setBounds(450, 70, 450, 35);
  56. l1.setFont(new Font("宋体", Font.BOLD, 30));
  57. l2.setBounds(470, 140, 70, 25);
  58. l2.setFont(new Font("宋体",Font.BOLD,23));
  59. l3.setBounds(470, 200, 70, 25);
  60. l3.setFont(new Font("宋体",Font.BOLD,23));
  61. l4.setBounds(120, 200, 150, 20);
  62. l4.setFont(new Font("宋体",Font.BOLD,23));
  63. l5.setBounds(730,140,70,25);
  64. l5.setFont(new Font("微软雅黑",Font.BOLD,15));
  65. l5.setForeground(Color.blue);
  66. l5.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
  67. l5.addMouseListener(new Register());
  68. l6.setBounds(730,200,70,25);
  69. l6.setFont(new Font("微软雅黑",Font.BOLD,15));
  70. l6.setForeground(Color.blue);
  71. l6.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
  72. l6.addMouseListener(new Alter());
  73. t1.setBounds(540, 140, 160, 25);
  74. t1.setFont(new Font("宋体",0,18));
  75. t2.setBounds(540, 200, 160, 25);
  76. t2.setFont(new Font("宋体",0,18));
  77. b1.setBounds(540, 260, 70, 30);
  78. b1.setFont(new Font("宋体",0,15));
  79. b1.addActionListener(this);
  80. b2.setBounds(660, 260, 70, 30);
  81. b2.setFont(new Font("宋体",0,15));
  82. b2.addActionListener(this);
  83. super.add(l1);
  84. super.add(l2);
  85. super.add(l3);
  86. super.add(l5);
  87. super.add(l6);
  88. super.add(t1);
  89. super.add(t2);
  90. super.add(b1);
  91. super.add(b2);
  92. super.setLayout(null);
  93. super.setVisible(true);
  94. //当单击窗口右上方的关闭图标时,监视器调用windowClosing方法,如果在该方法中使用System.exit(0)退出程序的运行
  95. super.addWindowListener(new WindowAdapter() {
  96. @Override
  97. public void windowClosing(WindowEvent e) {
  98. // TODO Auto-generated method stub
  99. super.windowClosing(e);
  100. System.exit(0);
  101. }
  102. });
  103. super.setResizable(false);
  104. }
  105. public static void main(String[] args) {
  106. // TODO Auto-generated method stub
  107. new LoginFrame();
  108. }
  109. @Override
  110. //事件源触发ActionEvent事件后,监视器调用接口中的此方法对发生的事件做出处理
  111. public void actionPerformed(ActionEvent e) {
  112. // TODO Auto-generated method stub
  113. Object source = e.getSource();//返回添加事件监听的对象
  114. Connection con = null;
  115. PreparedStatement ps = null;
  116. ResultSet rs = null;
  117. if(source == b1) {
  118. String name = t1.getText();
  119. String pass = t2.getText();
  120. Login login = new Login();
  121. login.setDno(name);
  122. try {
  123. con = linkdatabase.getConnection();
  124. if("".equals(name.trim()) || "".equals(pass.trim())) {
  125. JOptionPane.showMessageDialog(null, "请输入完整的登陆信息!","系统提示",JOptionPane.ERROR_MESSAGE);
  126. }else if(name.equals("admin") && pass.equals("123456")) {
  127. new admin_frame();
  128. super.dispose();
  129. }else {
  130. login.setDno(name);
  131. login.setDpassword(pass);
  132. login = handleLogin.queryVerify(login);
  133. if(login.getLoginSuccess() == true) {
  134. System.out.println("登录成功了!");
  135. new Main(login);
  136. super.dispose();
  137. }else {
  138. System.out.println("登录失败了!");
  139. JOptionPane.showMessageDialog(null, "登录失败,请重新登录","系统提示",JOptionPane.WARNING_MESSAGE);
  140. }
  141. }
  142. } catch (Exception e1) {
  143. // TODO Auto-generated catch block
  144. e1.printStackTrace();
  145. }finally {
  146. linkdatabase.closeAll(rs, ps, con);
  147. }
  148. }
  149. if(source == b2) {
  150. System.exit(0);
  151. }
  152. }
  153. }

4 系统测试以及界面

4.1 订书单位信息查询测试

测试注册账号,界面如图4.1所示。

注册账号成功,结果如图4.2所示。

4.2 病人出院结算测试

进入病人出院结算界面,点击查询与结算,得出病人出院费用,结果如图4.3所示。

结算出院成功,结果如图4.4所示。

5 总结

在本次数据库课程设计中,我设计开发了一个小型的医院病房管理系统,实现了对病人的住院登记、出院结算、信息查询,对医生信息、病人信息、科室信息、病房信息、病床信息的增加、删除、修改、查询的功能。设计过程中曾经遇到了不少难点和问题,如:将界面和后台数据库连接起来时出错;对数据库中信息操作时有时忽略了参照完整性;病人出院结算时无法调用数据库中存储的信息;页面间参数传递实现不了;还出现了一个语法错误,对一些控件的属性及方法不熟悉等。对于上述这些难点,我花了很多时间去解决,查阅数据库教材和理论课的课件、并借来相关书籍辅助学习,注意数据库中各个所建表的主外键约束,上网搜索也让我学到很多知识,还有些问题是与同学之间的相互讨论,最终将难点一一克服。

上传的附件 cloud_download 基于JAVA和SQL SERVER数据库实现的医院病房信息管理系统.7z ( 4.94mb, 360次下载 )
error_outline 下载需要5点积分

发送私信

如果你错过了爱,便错过了生活

11
文章数
11
评论数
eject