目 录
摘 要 I
Abstract II
目 录 III
1绪论 1
1.1选题背景及意义 1
1.2研究现状 1
1.3研究内容及论文结构 5
2系统工具 6
2.1 B/S结构 6
2.1.1 什么是B/S结构 6
2.1.2 B/S架构软件的优势与劣势 6
2.2 Java的介绍 7
2.3 SSM框架 7
2.4 MySql简介 11
3系统分析 12
3.1可行性研究 12
3.1.1 技术可行性 12
3.1.2 经济可行性 12
3.1.3 操作可行性 12
3.1.4 社会可行性 13
3.2 需求分析 13
4系统设计 14
4.1 总体设计 14
4.2 业务流程分析 15
4.2.1 科室业务流程分析 15
4.2.2 资源业务流程分析 16
4.2.3 病人管理业务流程分析 16
4.3数据流程分析 17
4.3.1 科室数据流程分析 17
4.3.2 病人数据流程分析 18
4.3.3 药品及耗材入库流程图 18
4.3.4 ER图 18
4.4数据库的构建 19
4.4.1 科室管理表 19
4.4.2 病人管理表 20
4.4.3 药品及耗材管理表 21
4.4.4 科室职员管理表 22
5系统实现 23
5.1登陆界面 23
5.2 系统首页 27
5.3 医护人员管理 27
5.4 病房管理 30
5.5 收费管理 32
5.6 留言管理 34
5.7 病人管理 36
5.8 出院管理 37
5.9 资源管理 40
5.10 角色管理 41
5.11 用户管理 41
6系统测试 45
6.1单元测试 45
6.2功能测试 46
6.3性能测试 46
总 结 48
致 谢 49
参考文献 50
3.2 需求分析
计算机技术改造医院的传统管理方式,由原始经验型管理向科学型管理的转化,是替代重复性繁重的脑力劳动的过程。只有使用计算机及信息化管理手段方能实现管理的标准化、规范化、制度化和科学化,并能排除人为干预,同时能够充分地节约医院日常工作中不必要的浪费和开支。另外医院管理计算机化也能够使各个部门工作有机衔接,方便患者就医和医院的统计分析。通过信息化管理,提高医院的管理水平,及时、准确的为医院综合管理、经济核算等提供信息;提高了医务人员工作效率;方便病人了解医疗服务和医疗费用各方面的信息,加强了医院经济管理,减少了漏洞;保证了病人费用的预收;提高了医疗和药品及耗材划价收费的准确性;保证了药品及耗材及时调价,实现了药品及耗材及时准确盘存核算、各项目的分类统计、出入院手续的办理和病人费用核算等各个环节均由计算机代替,其效率远远超过人工。利用规范严格的软件和先进的硬技术相结合,杜绝了人为因素造成损失,形成了一个以病人为中心的医院信息系统。
通过对用户需求的分析,要求本系统具有以下功能:
(1) 由于一项新的软件在被使用之前,对于使用者来说是陌生和崭新的,所以要求系统具有良好的人机界面;
(2) 原始数据修改简单方便,在系统的使用过程中支持多条件查询;
(3) 数据计算自动完成,数据的稳定性和可靠性好,尽量减少人工干预。
4系统设计
4.1 总体设计
具体说来,要求本系统具有以下六个功能模块:科室管理模块、病人管理模块、药品及耗材管理模块、科室信息模块、数据管理、财务管理。
http://www.biyezuopin.vip/onews.asp?id=11928系统整体模块图如图1所示:
各模块具体的需求描述如下:
(1)科室管理:
管理员可以对科室进行增删改查。
(2)医生管理:
管理员可以对医生进行增删改查
(3)收费管理:
用户可以选择某一个项目进行收费
(4)用户管理:
管理员可以管理所有用户信息
(5)角色管理:
管理员可以管理所有角色信息
(6)资源管理
管理员可以管理所有资源信息
package com.ian.media.util;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.StringTokenizer;
public class FileUtil {
private static String path = "D:/";
private static String filenameTemp;
/**
* 根据绝对路径获取文件名称
* **/
public String getFileName(String pathAndName){
String tempPath = pathAndName.trim();
String fileName = tempPath.substring(tempPath.lastIndexOf("/")+1);
return fileName;
}
/**
* 根据绝对路径获取除文件名意外的路径
* */
public String getPath(String pathAndName){
String path = new String();
if(StringUtil.isNotNull(pathAndName)){
String tempPath = pathAndName.trim();
path = tempPath.substring(0,tempPath.lastIndexOf("\\")+1);
/*
if("".equals(path)){
path = "\\";
}else{
path = path.replaceAll("/", "//");
}
*/
}
return path;
}
/**
* 根据路径创建文件夹
* **/
public void createDirectory(String path) {
StringTokenizer st=new StringTokenizer(path,"\\");
String tempPath =st.nextToken()+"\\";
while(st.hasMoreTokens())
{
tempPath = tempPath + st.nextToken()+"\\";
File inbox = new File(tempPath);
if(!inbox.exists())
inbox.mkdir();
}
}
/**
* 删除文件夹及文件夹中的所有文件
* @param filePath 要删除的文件夹绝对路径 如:f:\\logs,将删除logs文件夹 及logs文件夹中的所有文件和子文件夹
*/
public void deleteFolder(String filePath) {
File file = new File(filePath);
if(!file.exists()) {
return;
}
if(file.isFile()) {
this.deleteFile(file.getAbsolutePath());
} else {
File[] fileList = file.listFiles();
for(File f : fileList) {
String path = f.getAbsolutePath();
if(f.isFile()) {
this.deleteFile(path);
} else if(f.isDirectory()) {
deleteFolder(path);
}
}
}
this.deleteFile(filePath);
}
/**
* 删除单个文件
* @param fileName 被删除文件的文件名
* @return 单个文件删除成功返回true,否则返回false
*/
public boolean deleteFile(String fileName){
File file = new File(fileName);
if(file.exists()){
return file.delete();
}else{
return true;
}
}
/**
* 复制文件
* @param basicUrl 需要备份的文件根目录 如:f://ftpserverfiles 如果是磁盘则写:f:
* @param destUrl 备份文件的根目录 如:f://abs//sdf
*/
public void coryFiles(String basicUrl, String destUrl) throws Exception {
File file = new File(basicUrl);
this.copyFiles(file, basicUrl, destUrl);
}
/**
*
* @param file 根文件
* @param basicPath 需要备份文件目录
* @param destPath 备份文件目录
*/
public void copyFiles(File file, String basicPath, String destPath) throws Exception {
File[] fileList = file.listFiles();
for(File f : fileList) {
String absolutePath = f.getAbsolutePath(); //当前文件全路径
// String filePath = destPath+absolutePath.replace("\\", "//").substring(basicPath.length()); //得到备份文件全路径
String filePath = destPath+absolutePath.substring(basicPath.length()); //得到备份文件全路径
if(f.isHidden()) {
continue;
} else if(f.isDirectory()) {
this.createFile(filePath);
File newFile = new File(absolutePath);
this.copyFiles(newFile, absolutePath, filePath);
} else if(f.isFile()) {
this.writeFile(absolutePath, filePath);
}
}
}
/**
* 复制文件
* @param basicUrl 需要备份的文件根目录 如:f://ftpserverfiles 如果是磁盘则写:f:
* @param destUrl 备份文件的根目录 如:f://abs//sdf
* @throws Exception
*/
public void copyAndbackupFile(String basicUrl, String destUrl) throws Exception {
File file = new File(basicUrl);
this.copyAndbackupFile(file, basicUrl, destUrl);
}
/**
*
* @param file 根文件
* @param basicPath 需要备份文件目录
* @param destPath 备份文件目录
* @throws Exception
*/
public void copyAndbackupFile(File file, String basicPath, String destPath) throws Exception {
File[] fileList = file.listFiles();
for(File f : fileList) {
String absolutePath = f.getAbsolutePath(); //当前文件全路径
String filePath = destPath+absolutePath.substring(basicPath.length()); //得到备份文件全路径
if(f.isHidden()) {
continue;
} else if(f.isDirectory()) {
this.createFile(filePath);
File newFile = new File(absolutePath);
this.copyAndbackupFile(newFile, absolutePath, filePath);
} else if(f.isFile()) {
String bakFile = destPath+"\\"+f.getName();
if(new File(bakFile).exists()){
this.writeFile(bakFile, bakFile+".hondabak");
}
this.writeFile(absolutePath, filePath);
}
}
}
/**
* 复制文件
* @param basicPath 文件源路径: e://basic//copy.txt
* @param filePath 文件存放全路径: d://dest//copy.txt
* @throws Exception
*/
public void writeFile(String basicPath, String filePath) throws Exception {
// File basicfile = new File(basicPath);
FileInputStream in = null;
FileOutputStream out = null;
this.createFile(filePath.substring(0, filePath.lastIndexOf("\\")));
try {
in = new FileInputStream(basicPath);
out = new FileOutputStream(filePath);
} catch (FileNotFoundException e) {
e.printStackTrace();
// throw new Exception("文件找不到!!!");
}
byte[] bt = new byte[1024*1024*10];
int len = 0;
try {
while((len = in.read(bt)) > 0) {
out.write(bt, 0, len);
out.flush();
}
} catch (IOException e) {
e.printStackTrace();
// throw new Exception("文件复制失败!!!");
} finally{
try {
if(null!=in)
in.close();
} catch (IOException e) {
e.printStackTrace();
// throw new Exception("关闭输入流失败");
}
try {
if(null!=out)
out.close();
} catch (IOException e) {
e.printStackTrace();
// throw new Exception("关闭输出流失败!!!");
}
}
}
/**
* 创建文件夹
* @param url
*/
public void createFile(String url) {
File file = new File(url);
if(!file.exists()) {
file.mkdirs();
}
}
/**
* 将文本内容写入相关文件
* @throws IOException
* **/
public void writeStringToFile(String content, String path) throws IOException{
//createDirectory(this.getPath(path));
File file = new File(path);
if(!file.exists()){
file.createNewFile();
}
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write(content);
writer.close();
}
/**
* 删除path文件夹下面以fileSuffix为后缀的文件
* **/
public void deleteDiretoryFileBySuffix(String path){
File file = new File(path);
File[] files = file.listFiles();
int bakIndex = 0;
for(File f:files){
if(f.isDirectory()){
deleteDiretoryFileBySuffix(f.getAbsolutePath());
}else if(f.isFile()){
bakIndex = f.getName().lastIndexOf(".hondabak");
if(bakIndex>0){
f.delete();
}
}
}
}
/**
* 恢复文件
* @throws Exception
* **/
public void recoverFile(String path){
File file = new File(path);
File[] files = file.listFiles();
int bakIndex = 0;
for(File f:files){
if(f.isDirectory()){
recoverFile(f.getAbsolutePath());
}else if(f.isFile()){
bakIndex = f.getName().lastIndexOf(".hondabak");
if(bakIndex>0){
try {
writeFile(path+"\\"+f.getName(), path+"\\"+f.getName().substring(0,bakIndex));
} catch (Exception e) {
e.printStackTrace();
}
f.delete();
}
}
}
}
public void createTxt(String value) throws IOException
{
filenameTemp = path + "errorLog" + ".txt";
File filename = new File(filenameTemp);
if (!filename.exists()) {
filename.createNewFile();
writeStringToFile(value,filenameTemp);
}else {
writeStringToFile(value,filenameTemp);
}
}
}