一、课程设计题目
医院管理系统
二、课程设计目的
数据库系统课程设计是为了配合学习数据库系统原理及应用开发而设置的,是计算机科学与技术、大数据、信息安全、物联网工程、软件工程、智能制造等专业集中实践的教学环节,是将关系数据库理论知识转化为解决实际问题能力的重要环节。数据库系统课程设计目的在于加深对关系数据库理论知识的理解,通过使用具体的 DBMS,掌握一种实际的数据库管理系统并掌握其操作技术,熟练掌握使用数据库前端开发工具(如 VB、C++、Java、JSP、Delphi、PowerBuilder 等),进一步提高同学们运用数据库技术解决实际问题的能力。
三、总体设计
1、背景知识
(1)java的GUI界面设计
AWT,Java最早的界面库,需要调用本地系统方法来实现功能,属重量级控件。Swing,是对AWT的扩展。(javax.swing:在AWT的基础上, 建立的一套图像界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻量级组件。)而JavaFX,JDK1.8引入的新的界面库。
而在这次设计中我用了swing和awt 进行界面的设计。Java Swing 图形界面开发
(2)Java的JDBC的连接数据库
JDBC:Java DataBase Connectivity(Java 数据库连接技术),它是将Java与SQL结合且独立于特定的数据库系统的应用程序编程接口。我使用了的是ideal和mysql这两种。JDBC从入门到熟练使用——功能类详解、增删改查(CRUD)、sql注入、事务、连接池
2、模块介绍
- 登录主页面和注册主页面
用不同工作人员进行登录,如护士和医生可以进行住院办理,而高级的领导可以进入员工管理模块,而物资模块只有药师才可以进入的,注册页面只要医院的工作人员才可以进行登录,其他非医院员工不可进行注册和登录。 - 住院办理模块菜单界面
住院办理有病人管理办理和病床管理办理,医生和护士可以对其进行增删改查。 - 员工管理模块菜单界面
员工管理有员工一览,工资报表和人事调动的菜单,高一级的领导才可以进入并进行增删改查。 - 物资清单模块菜单页面
物质清单有药品清单和仪器清单,而药师可以进入系统并对其进行增删改查的操作,其他人员不能进入。
3、设计步骤
(1)先建立数据库的表
(2)设计各模块界面
(3)java与数据库连接并使用其中的数据(即使用jdbc)
(4)调试和修改
(把一些存在的报错进行解决或标志提醒)
四、详细设计
1 系统需求分析
通过一个医院管理系统,使医院的管理工作系统化、规范化、自动化,从而达到提高医院管理效率的目的。
1.1 系统功能分析
医院管理系统需要完成功能主要有:
- 员工各种信息的输入,包括员工基本信息、职称、岗位等。
- 员工各种信息的查询、修改,包括员工基本信息、职称、岗位、工资等。
- 员工的人事调动管理。
- 病人信息的管理。
- 医院病床的管理。
- 药剂资源管理。
- 仪器资源管理。
- 系统用户管理、权限管理。
1.2 系统功能模块设计(划分)
根据系统功能要求,可以将系统分解成几个模块来分别设计应用程序界面,如图 1 所示。设计者可只实现住院部、员工管理两个模块的相关功能,其中门诊部、药品和仪器两个模块可根据时间选做。
1.3 与其它系统的关系
1.4 数据流程图
医院管理系统的数据流程如图 2 所示(由设计者完成)。
2 数据库设计
2.1 数据库需求分析
通过对医院管理的内容和数据关系分析,我们设计的数据项和数据结构如下:
- 员工基本状况包括的数据项有员工号、员工姓名、性别、所在部门、身份证号、生日、籍贯、国籍、民族、婚姻状况、健康状况、参加工作时间、员工状态、家庭住址、联系电话等。
- 员工基本状况包括的数据项有员工号、员工姓名、性别、所在部门、身份证号、生日、籍贯、国籍、民族、婚姻状况、健康状况、参加工作时间、员工状态、家庭住址、联系电话等。
- 员工工资状况包括的数据项有员工号、工资项别、工资金额等。
- 医院工作岗位信息包括的数据库项有工作岗位代号、工作岗位名称等。
- 医院部门信息包括的数据项有部门代号、部门名称、部门负责人等。
- 病人信息包括的数据项有病人姓名、病人性别、入院时间、病人所属科室、病人状况、病人主治医生、房问号、病床号等。
- 药剂资源管理信息包括的数据项有药剂代号、药剂名称、药剂价格、药剂库存数量、 备注等。
- 医疗仪器管理包括的数据项有仪器代号、仪器名称、仪器价格、仪器数量、备注等。
有了上面的数据结构、数据项和数据关系,我们就能进行下面的数据库设计。
2.2 数据库概念结构设计
本系统根据上面的设计规划出的实体有员工实体、部门实体、岗位实体、病人实体、药剂实体、仪器实体。实体和实体之间的关系 E-R 图模型如图 3 所示。
2.3 数据库逻辑结构设计
在上面的实体以及实体之间关系的基础上,我们就可以形成数据库中的表格以及各个表格之间的关系。医院管理系统数据库中各个表格的设计结果如表 1 到表 7 所示。
3 各功能模块的设计与实现
3.1 功能说明
1、员工信息的管理。
2、病人信息的管理。
3、医院病床的管理。
4、药剂仪器资源的管理。
5、系统用户管理、权限管理。
3.2 用户界面设计
完成数据库创建和功能说明以后,我们可以进行下一步工作,即设计用户界面。我们把医院管理系统的窗体分成5个主要部分,如图所示。
1、系统欢迎界面及登录界面设计
主要代码:
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new regest();
f.dispose();
}
});
button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String username=id.getText().trim();
String password1= String.valueOf(password.getPassword())/*password.getPassword().toString()*/;
System.out.println(password.getPassword());
String pass=String.valueOf(password.getPassword());
if (j.getSelectedItem().equals("住院办理")) {
connection_mysql connection = new connection_mysql();
Connection conn = connection.getConnect();
PreparedStatement pr = null;
ResultSet rs = null;
try {
pr = conn.prepareStatement("select * from tms_1 where TMS_user=? and TMS_paswd=?");
pr.setString(1, id.getText());
pr.setString(2, pass);
rs = pr.executeQuery();
if(rs.next()) {
new inpatien_system();
f.dispose();
}
else {
JOptionPane.showMessageDialog(null, "密码或用户或用户类型错误", "提示", JOptionPane.WARNING_MESSAGE);
}
pr.close();
rs.close();
conn.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
else if (j.getSelectedItem().equals("员工管理"))
{
connection_mysql connection = new connection_mysql();
Connection conn = connection.getConnect();
PreparedStatement pr = null;
ResultSet rs = null;
try {
pr = conn.prepareStatement("select * from tms_2 where tms2user=? and tms2paswd=?");
pr.setString(1, id.getText());
pr.setString(2, pass);
rs = pr.executeQuery();
if(rs.next())
{
new employee_managemwnt();
f.dispose();
} else
{
JOptionPane.showMessageDialog(null, "密码或用户或用户类型错误", "提示", JOptionPane.WARNING_MESSAGE);
}
pr.close();
rs.close();
conn.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
}else if(j.getSelectedItem().equals("物资清单"))
{
connection_mysql connection = new connection_mysql();
Connection conn = connection.getConnect();
PreparedStatement pr = null;
ResultSet rs = null;
try {
pr = conn.prepareStatement("select * from tms_3 where tms3user=? and tms3paswd=?");
pr.setString(1, id.getText());
pr.setString(2, pass);
rs = pr.executeQuery();
if(rs.next()) {
new material_list();
f.dispose();
}
else {
JOptionPane.showMessageDialog(null, "密码或用户或用户类型错误", "提示", JOptionPane.WARNING_MESSAGE);
}
pr.close();
rs.close();
conn.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
2、注册模块界面
主要代码:
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String username = id.getText().trim();
String password1 = String.valueOf(password.getPassword());
String password3 = String.valueOf(password2.getPassword());
System.out.print(password1.equals(password3));
if (password1.equals(password3)) {
connection_mysql connection = new connection_mysql();
Connection conn = connection.getConnect();
PreparedStatement pr = null;
PreparedStatement pr1 = null;
ResultSet rs = null;
try {
pr = conn.prepareStatement("select * from personnel where per_name=?");
pr1 = conn.prepareStatement("insert into tms_all values(?,?)");
pr.setString(1, id.getText());
//pr.setString(2, String.valueOf(password.getPassword()));
rs = pr.executeQuery();
if (rs.next()) {
pr1.setString(1, id.getText());
pr1.setString(2, String.valueOf(password.getPassword()));
pr1.execute();
JOptionPane.showMessageDialog(null, "注册成功!", "提示", JOptionPane.WARNING_MESSAGE);
new login();
f.dispose();
} else {
JOptionPane.showMessageDialog(null, "你不是该医院的员工,请退出!", "警告", JOptionPane.WARNING_MESSAGE);
}
pr.close();
rs.close();
conn.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
} else {
JOptionPane.showMessageDialog(null, "两次密码不一样,请重新输入!", "提示", JOptionPane.WARNING_MESSAGE);
}
}
});
2、住院部管理模块主界面
代码展示:
public inpatien_system() {
JFrame f = new JFrame("住院办理界面");//相当html的<body></body>启动设置
//设置窗口大小
f.setSize(700, 500);//css中的height,width设置
//使窗口居中
f.setLocationRelativeTo(null);//css的left,right
//设置窗口背景图案
ImageIcon i = new ImageIcon("src/files/4_1.png");//相当url地址格式
JLabel jLable = new JLabel(i);//JLabel类似<a></a><p></p>等块、行、行块级等标签
jLable.setBounds(0, -45, 600, 600);
JPanel panel1 = new JPanel();//JPanel相当网页中div标签
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
JPanel panel4 = new JPanel();
JPanel panel5 = new JPanel();
JPanel panel6 = new JPanel();
/*添加大标题:图书管理系统*/
JLabel lable = new JLabel("请选择住院办理类型");
Font font = new Font("宋体", Font.BOLD, 40);//设置字体
lable.setFont(font);
panel1.add(lable);
panel1.setBounds(140, 60, 400, 300);//设置面板大小
f.add(panel1);//类似body中加div
//类似设置一个div方便修改位置和大小内容因为有标签修改有限制,然后把<p></p>等放进div中
JRadioButton rb1=new JRadioButton("病床管理");
JRadioButton rb2=new JRadioButton("病人管理");
rb1.setFont(font);
rb2.setFont(font);
panel2.add(rb1,BorderLayout.EAST);
panel3.add(rb2,BorderLayout.EAST);
panel2.setBounds(140, 120, 400, 300);
panel3.setBounds(140,200,400,300);
panel3.add(rb2);
panel2.add(rb1);
f.add(panel2);
f.add(panel3);
ButtonGroup bg=new ButtonGroup();
bg.add(rb1);
bg.add(rb2);
/*注册登陆按钮*/
JButton button1 = new JButton("确定");
JButton button2 = new JButton("取消");
Font font3 = new Font("宋体", Font.BOLD, 20);
button1.setFont(font3);
button2.setFont(font3);
Dimension dimension2 = new Dimension(100, 50);
button1.setPreferredSize(dimension2);
button2.setPreferredSize(dimension2);
panel5.add(button1);
panel6.add(button2);
panel5.setBounds(170, 310, 170, 400);
panel6.setBounds(350, 310, 170, 400);
f.add(panel5);
f.add(panel6);
//把组件变成透明
panel1.setOpaque(false);//类似浮动隐藏display:block的作用很重要
panel2.setOpaque(false);
panel3.setOpaque(false);
panel4.setOpaque(false);
panel5.setOpaque(false);
panel6.setOpaque(false);
f.add(jLable);
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(rb1.isSelected())
{
new patientroom();
f.dispose();
}
else
{
new patient();
f.dispose();
}
}
});
button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Object[] option={"是","否"};
int n=JOptionPane.showOptionDialog(null,"是否继续","提示",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null,option,option[0]);
if(n==0)
{
JOptionPane.showMessageDialog(null, "亲!请选择办理类型", "提示!", JOptionPane.WARNING_MESSAGE);
}
else {
new login();
f.dispose(); }
}
});
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
3、员工管理模块主界面
代码展示:
public employee_managemwnt() {
JFrame f = new JFrame("员工管理界面");//相当html的<body></body>启动设置
//设置窗口大小
f.setSize(700, 500);//css中的height,width设置
//使窗口居中
f.setLocationRelativeTo(null);//css的left,right
//设置窗口背景图案
ImageIcon i = new ImageIcon("src/files/4_3.png");//相当url地址格式
JLabel jLable = new JLabel(i);//JLabel类似<a></a><p></p>等块、行、行块级等标签
jLable.setBounds(0, -45, 600, 600);
JPanel panel1 = new JPanel();//JPanel相当网页中div标签
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
JPanel panel4 = new JPanel();
JPanel panel5 = new JPanel();
JPanel panel6 = new JPanel();
/*添加大标题:图书管理系统*/
JLabel lable = new JLabel("请选择查询类型");
Font font = new Font("宋体", Font.BOLD, 30);//设置字体
lable.setFont(font);
panel1.add(lable);
panel1.setBounds(140, 60, 400, 300);//设置面板大小
f.add(panel1);//类似body中加div
//类似设置一个div方便修改位置和大小内容因为有标签修改有限制,然后把<p></p>等放进div中
JRadioButton rb1=new JRadioButton("员工一览");
JRadioButton rb2=new JRadioButton("工资报表");
JRadioButton rb3=new JRadioButton("人事调动");
rb1.setFont(font);
rb2.setFont(font);
rb3.setFont(font);
panel2.add(rb1,BorderLayout.EAST);
panel3.add(rb2,BorderLayout.EAST);
panel4.add(rb3,BorderLayout.EAST);
panel2.setBounds(140, 120, 400, 200);
panel3.setBounds(140,200,400,200);
panel4.setBounds(140,280,400,200);
panel3.add(rb2);
panel2.add(rb1);
panel4.add(rb3);
f.add(panel2);
f.add(panel3);
f.add(panel4);
ButtonGroup bg=new ButtonGroup();
bg.add(rb1);
bg.add(rb2);
bg.add(rb3);
/*注册登陆按钮*/
JButton button1 = new JButton("确定");
JButton button2 = new JButton("取消");
Font font3 = new Font("宋体", Font.BOLD, 20);
button1.setFont(font3);
button2.setFont(font3);
Dimension dimension2 = new Dimension(100, 50);
button1.setPreferredSize(dimension2);
button2.setPreferredSize(dimension2);
panel5.add(button1);
panel6.add(button2);
panel5.setBounds(170, 350, 170, 400);
panel6.setBounds(350, 350, 170, 400);
f.add(panel5);
f.add(panel6);
//把组件变成透明
panel1.setOpaque(false);//类似浮动隐藏display:block的作用很重要
panel2.setOpaque(false);
panel3.setOpaque(false);
panel4.setOpaque(false);
panel5.setOpaque(false);
panel6.setOpaque(false);
f.add(jLable);
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(rb1.isSelected())
{
new employee_information();
f.dispose();
}
if (rb2.isSelected())
{
new pay_sheet();
f.dispose();
}
if(rb3.isSelected())
{
new personnel_transfer();
f.dispose();
}
}
});
button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Object[] option={"是","否"};
int n=JOptionPane.showOptionDialog(null,"是否继续","提示",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null,option,option[0]);
if(n==0)
{
JOptionPane.showMessageDialog(null, "亲!请选择查询类型", "提示!", JOptionPane.WARNING_MESSAGE);
}
else {
new login();
f.dispose();
}
}
});
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
4、物资清单模块主界面
代码展示:
public material_list() {
JFrame f = new JFrame("物资清单界面");//相当html的<body></body>启动设置
//设置窗口大小
f.setSize(700, 500);//css中的height,width设置
//使窗口居中
f.setLocationRelativeTo(null);//css的left,right
//设置窗口背景图案
ImageIcon i = new ImageIcon("src/files/4_2.png");//相当url地址格式
JLabel jLable = new JLabel(i);//JLabel类似<a></a><p></p>等块、行、行块级等标签
jLable.setBounds(0, -45, 600, 600);
JPanel panel1 = new JPanel();//JPanel相当网页中div标签
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
JPanel panel4 = new JPanel();
JPanel panel5 = new JPanel();
JPanel panel6 = new JPanel();
/*添加大标题:图书管理系统*/
JLabel lable = new JLabel("请选择清单类型");
Font font = new Font("宋体", Font.BOLD, 40);//设置字体
lable.setFont(font);
panel1.add(lable);
panel1.setBounds(140, 60, 400, 300);//设置面板大小
f.add(panel1);//类似body中加div
JRadioButton rb1=new JRadioButton("药品清单");
JRadioButton rb2=new JRadioButton("仪器清单");
rb1.setFont(font);
rb2.setFont(font);
panel2.add(rb1,BorderLayout.EAST);
panel3.add(rb2,BorderLayout.EAST);
panel2.setBounds(140, 120, 400, 300);
panel3.setBounds(140,200,400,300);
panel3.add(rb2);
panel2.add(rb1);
f.add(panel2);
f.add(panel3);
ButtonGroup bg=new ButtonGroup();
bg.add(rb1);
bg.add(rb2);
/*注册登陆按钮*/
JButton button1 = new JButton("确定");
JButton button2 = new JButton("取消");
Font font3 = new Font("宋体", Font.BOLD, 20);
button1.setFont(font3);
button2.setFont(font3);
Dimension dimension2 = new Dimension(100, 50);
button1.setPreferredSize(dimension2);
button2.setPreferredSize(dimension2);
panel5.add(button1);
panel6.add(button2);
panel5.setBounds(170, 310, 170, 400);
panel6.setBounds(350, 310, 170, 400);
f.add(panel5);
f.add(panel6);
//把组件变成透明
panel1.setOpaque(false);//类似浮动隐藏display:block的作用很重要
panel2.setOpaque(false);
panel3.setOpaque(false);
panel4.setOpaque(false);
panel5.setOpaque(false);
panel6.setOpaque(false);
f.add(jLable);
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(rb1.isSelected()) {
new drug_list();
f.dispose();
}
else
{
new instrument_list();
f.dispose();
}
}
});
button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Object[] option={"是","否"};
int n=JOptionPane.showOptionDialog(null,"是否继续","提示",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null,option,option[0]);
if(n==0)
{
JOptionPane.showMessageDialog(null, "亲!请选择清单类型", "提示!", JOptionPane.WARNING_MESSAGE);
}
else {
new login();
f.dispose();
}
}
});
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
3.3 各主界面的各功能模块的实现
1、住院部管理模块主界面设计
(1)病床管理模块界面设计
五、结果与分析
各个模块基本上都有增删改查等功能,结果已基本设计出了除了打印报表没有实现 。
六、小结与心得体会
开始做的时候还真是一脸懵逼,不仅下载的软件出了bug,还有个各种的软件不匹配等等各种的调试才进入了数据库的建立,然后再进行页面设计,最后和数据库的数据相连接起来了。不过最难的还是卡bug,不停的在找问题解决问题的路上,最后能自己搞成功也是一份成就感。
文章出处登录后可见!