资源描述
医院收费管理系统NIIT项目 医院收费管理系统目 录一、项目开发文档(1)1 项目需求分析(1)2 概要设计(4)3 详细设计(8)4 项目文档清单(12)5 项目命名约定(13)6 项目测试()二、项目开发进度(14)三、项目成果软件(15)四、软件安装使用说明(18)五、项目总结(19)附录1 项目成果软件代码(20)33 一、项目开发文档 1 项目需求分析1.1引言 开发一个医院收费管理系统医院收费系统是医院管理系统的最终端的一个模块,它处于整个医院管理系统的最末端,可以说是整个系统的信息入口。要从收费系统中提取并保存所需信息。与它并行的有住院管理系统,药库管理系统,之上,还有人事管理系统,后勤管理系统,最高端是院长查询系统。完整的医院收费管理系统应该包括的功能有:药品划价,门诊收费,处方的查询,收费项目的查询,其中,查询功能都需要从几个方面来考虑:医生,病人,科室,操作员,药房,并能完成相应的统计功能。本软件是利用NetBeans 5.5设计开发的医院收费信息管理系统,是医院信息系统的一个重要组成部分,可实现对医院收费信息的分类管理和数据分析,从而使信息整理快速、准确、简单,以便于相关部门给予统筹安排,从而提高改进传统的管理方法,提高医院收费管理水平。系统管理模块:此模块是系统的主要模块,主要完成用户的注册、删除和密码修改以及用户的权限设置和系统初始化。添加功能: 将新收集到的数据资料增加到知识管理数据库中,可以为其设置各种属性,包括资料的收集时间,入库时间,资料格式,大小,所属类别,与其他资料的关联性,以及该资料的摘要等。修改功能: 可以修改数据资料的各种属性,存储位置等。删除功能: 将不需要的数据资料从数据库中清理掉,以保证数据库有足够空间存放新的资料。结算功能: 根据数据资料对病人的医疗费用进行结算资料查找: 可以按照特定的资料属性,如资料的名称,收集时间,入库时间,类别等从数据库中查出所需要的各类资料。显示摘要: 当鼠标单击选中文件资料时,可以在摘要栏内看到该文件的内容简介,如果是图片,能看到预览效果。 打开资料: 选择要打开的文件,系统会自动调用该文件相应的程序来打开文件。1.2可行性分析 1.系统可行性:在医院收费系统的可行性分析过程中,利用SQL Server数据库所具有的能力,以最简洁最容易的方法,对入院登记、费用记帐、出院结算等属性进行增加、修改、删除、查询。可以安全高效地存储病人资料和操作员资料。使用Java/JSP应用程序编程,这有利于医院收费管理员有效的对医院信息的管理。收费管理系统的规模、设备状况、维护和修改系统程序,都需要相关的操作人员。对于医院的运行更加的准确、全面、及时和详实。2.技术可行性:系统采用的是MVC模式,是目前j2ee中比较流行的一种模式。MVC :model,view,control 表示,如果软件需要用到UI界面,那么就应该分成: 模型层,表示层,控制层三层,它是一个复杂的架构模式,其实现也显得非常复杂。但是,我们已经终结出了很多可靠的设计模式,多种设计模式结合在一起,使MVC模式的实现变得相对简单易行。Views可以看作一棵树,显然可以用Composite Pattern来实现。Views和Models之间的关系可以用Observer Pattern体现。Controller控制Views的显示,可以用Strategy Pattern实现。Model通常是一个调停者,可采用Mediator Pattern来实现。随着网络应用的快速增加, 通过在ASP.NET中的MVC模式编写的,具有极其良好的可扩展性。MVC模式对于Web应用的开发无疑是一种非常先进的设计思想,无论你选择哪种语言,无论应用多复杂,它都能为你理解分析应用模型时提供最基本的分析方法,为你构造产品提供清晰的设计框架,为你的软件工程提供规范的依据。3.使用可行性:使用到局域网连接技术、JSP/NetBean 5.5开发技术、SQL Server2005服务器端的T-SQL语言数据库开发技术,这些都是非常成熟的技术。项目开发在技术方面采用Java/JSP应用程序编程与数据库相结合方法来实现。要求所有数据信息的储存都由数据库来完成。1.3 运行环境设备:资料数据库服务器(可选择笔记本或台式机) 台式机最低配置: 英特尔奔腾4处理器2.6GHz,256兆内存,硬盘120G,CD-RW+DVD光驱; 推荐配置英特尔奔腾4处理器3.06GHz,512兆内存,硬盘160G,DVD刻录光驱。 一般计算机外设: 打印机、扫描仪等。如要配置网络环境,还需网络连接设备。 软件支持本系统运行过程中会需要调用打开相应数据资料的各类软件,具体要视资料的类型而定,一般为SQL数据库。接口:用户接口:本系统在Windows系统下运行。对各类文件的打印,系统将通过调用打开相应文件的程序来完成。输出、输入的响应时间将由电脑本身处理速度来决定。1.4 功能描述医院收费管理系统功能需求描述如下:不同的操作元可以按自己的用户名和密码登录到相应的界面。可以使用本系统完成查询病人资料,收费记录和打印相关账单等功能。操作员可以修改自己的账户名及密码(提高用户的安全性)。本系统要符合医院的标准,满足医院收费的工作需求,并要达到网页界面具有良好的交互性,使得页面直观,友好,方便,安全。系统具备基本的数据库维护功能, 根据用户的需求能进行相关的增加,删除,修改,更新功能。具体功能实现如下:入院登记功能:添加病人资料,查询病人资料。费用记账功能:查询费用,增加费用结账出院功能:计算医药治疗费用的总额,并要打印出消费账单。系统管理功能: 添加新用户,修改密码。使用帮助,关入本医院的信息描述医院功能分析收费管理系统是一套对医院门诊的收费开票、门诊处方、药品管理、门诊收费明细统计查询等进行全面管理的系统。该系统包括门诊收费(收费开票、退款);门诊处方(门诊处方发药、收费工作当日汇总表);药品管理(药品入库、药品基本信息设置、药品库存明细);门诊收费明细统计查询(俺接诊医师统计查询、按收费名称统计查询、按收款人统计查询、按病人姓名查询)系统维护(期间设置、经办人信息、医师信息、药品单位信息、科室表、门诊费用表)。系统可行性:本系统将在WINDOWS平台下做开发,并且采用NETBEANS5.5集成开发环境,TOMCAT作为JSP/SERVLET运行容器,SQL2005为WEB服务器.技术可行性使用到局域网连接技术、使用JSP, SERVLET,JAVABEAN,JSTL,EL技术开发、SQL Server2005服务器端的T-SQL语言数据库开发技术,这些都是非常成熟的技术。2 概要设计2.1引言医院收费管理系统的功能需求描述,可以完成查询病人资料,收费记录和打印费用清单等功能。具备数据库维护功能,根据用户要求及时进行数据的添加、删除、修改和 备份等操作。符合医院的规定,满足医院收费工作的需要,并达到操作过程的直观、方便、实用、安全等要求。2.2系统功能模块图数据库设计需求分析经过仔细分析调查有关医院收费信息需要,用户的需要主要体现在各种信息的提供、保存、更新和查询,这就要求数据库结构能充分满足个种信息的输入和输出。医院的业务流程如下: 前面已经理解了医院收费管理系统的总体框架,至此对医院收费管理系统熟悉了,接下来就可以根据这些分析定义所需的数据字典、定义数据库的实体、定义实体间的联系,数据字典定义如下:数据项 1.数据流本系统流程分析如下图所示2.概念设计 数据库逻辑设计是根据数据库的要领设计和数据库管理系统特征导出数据库的逻辑结构,也就是通过需求分析的结果进行设计,并通过完整的设计方法产生数据库管理系统可以处理的规范化的和优化的数据库逻辑模式和子模式,并相应定义逻辑模式上的完整性约束,安全性约束、函数依赖及关系和操作任务对应关系,逻辑设计是数据库设计过程中非常重要的步骤,它的设计结果将直接影响到最终形成的物理数据库及系统的成败。在逻辑设计过程中,要用到许多设计理论 和设计方法。 实体联系模型是P.PChen于1976年提出来的,ER模型中的基本语义单位是实体和联系,它可以形象的用图形来进行表示,称为ER图。ER图是直观表示概念模型的有力工具。在ER图中,以矩形框来表现实体类型(既考虑问题的对象),用菱形框表示联系类型(及实体之间的联系),用椭圆来表示实体类型和联系的属性,相应的名字均记录在框中。联系类型与其涉及的实体类型之间用直线连接,并在直线端部标注联系的种类( 1:M, M:N或者1:1) ER模型有两个明显优点:1、接近人的思想,容易理解;2、与计算机无关,用户容易接受。数据库结构示意图 3 详细设计3.1 E-R图医院收费管理系统E-R 3.2 用例图3.3 表结构1. 门诊收费记录表Checkproject字段名称数据类型说明C_id数字收费记录编号R_id数字门诊登记编号,与表Registration中的R_id字段对应P_id数字收费项目编号,与表Project中的p_id字段以及表Medicine中的M_id字段对应P_count数字收费项目数量P_type数字收费项目类型1中药2西药3其它2.处方表字段名称数据类型说明lidtype姓名1Af0003徐晓 2Cf2003张凡3A10002 李四4Vl2005王五3.药品信息表 yaopin字段名称数据类型说明Pid 阿司匹林61 白加黑52 感康53青霉素)34红霉素)44.患者信息表patien字段名称数据类型说明P_id数字患者编号P_name字符(20)患者姓名P_sex字符(2)性别P_age数字年龄P_address字符(200)地址P_job字符(50)职业5.收费项目表Project字段名称数据类型说明P_id字符(20)收费项目编号P_name字符(50)收费项目名称P_count数字库存数量P_unit字符(20)计量单位P_price数字进货单价P_saleprice数字销售单价P_producer字符(100)生产厂家6.门诊登记表Registration字段名称数据类型说明R_id数字登记编号P_id数字患者编号R_pay数字收取金额R_all数字应收金额R_date日期登记日期R_earn数字利润Userid数字操作用户编号D_id数字医生编号7.用户信息表Users字段名称数据类型说明Userid数字用户编号Username字符(20)用户名Usertype数字2普通用户Pwd字符(40)密码Empname字符(40)用户姓名在创建表users的时候,将默认的用户admin插入到表中,默认的密码为“admin4 项目文档清单 Hospital: 项目名称model.shoufei.java model中的shoufei.java文件该文件是一shoufeiJAVABEAN.文件中创建了相应的 javabean对象和属性以及方法.ShoufeiDAO.java 从数据库中查询费用信息。model. ShoufeiService.java 与ShoufeiDAO.java相对应,ShoufeiDAO.java中有几个方法,则此文件就与之对应,这里是一个一个费用查询。model.user.java 该文件用来描述用户登录的.,该文件是一个javabeanmodeUserDAO.java 对用户登录的登录惊醒验证,包括用户名,密码,以及权限model. UserService.java 这个java 类对应modeUserDAO.java,对用户登录进行处理model. shuruDAO.java shuruDAO.java 向数据库中插入一条或多条记录controller. DeleteShou.java 通过该文件,可以在前台实现对后台数据库的信息删除功能 。controller LoginServlet.java. 这是一个登录servlet,对用户登录的登录进行验证,包括用户名,密码,以及权限。view. ShoufeiForm.java 这是一个ShoufeiForm 表单的验证。5 项目命名约定 类名:大写字母开头 如:Hospital类属性:采用匈牙利命名法(即第一个字母小写并表明数据类型)如:usename类方法:每个单词均为大写字母开头 如:Type描述示例aArrayaMonthscCharactercLastNameyCurrencyyCurrentValuedDatedBirthDaytDatetimetLastModifiedbDoublebValue变量:采用匈牙利命名法(即第一个字母小写并表明数据类型) 环境变量:如: 类型描述示例c字符Customer.cLastNamed日期Customer.dBirthDayt日期时间Customer.tLastModb双精度Customer.bRatef浮点Customer.fValueg通用Customer.gPicturel逻辑Customer.lSellMailm备注Customer.mCommentsy货币Customer.yYearTDaten数值Customer.nItemsI整型Customer.iCustID6 项目测试二 项目开发进度4-14,4-15 为项目做需求分析可行性分析,拟定初步的文档。 4-16,4-17 找登陆界面的各种素材,包括图片及按钮等。 4-18,4-19 编写登陆页面程序,使得登陆功能得到实现。4-20,4-22 找主页的图片,并搭建主页的框架。 4-23,4-24创建应用程序所需的数据库和表。并使程序能成功连接到数据库 。 4-25,4-26实现对数据库删除,插入以及查询等基本功能。 4-27,4-28再对网站的页面实现美化以及对文档进行完善。 4-29,4-30对整个项目进行调试和总结。 三 项目成果软件1. 我们的登陆的界面; 2项目中要使用的数据表3.基本的查询功能展示;4.数据信息的插入5.信息的查询6.我们的联系式; 四 软件安装使用说明1. 使用的neatbeans5.5集成开发环境。2数据库使用的SQL2005. 五 项目总结医院收费管理系统采用目前比较流行的MVC模式,NetBeans IDE 5.5作为前端开发工具,后台数据库管理系统为SQL Server2005,系统的运行平台为Windows。项目是从4月中旬开始实施的,4月底完成。需求分析,编码和单元测试由所有的小组成员共同完成。由于有明确的分工,我们在开发过程的责任比较明确。但毕竟我们项目经历很少,实践的过程中也遇到了不少困难。特别是在编码的时候,很多内容都需要我们自己摸索,由于每个人的基础不一样.在交流的时候还需要考虑到对方说掌握的情况。这次只是一个作业,如果在以后的项目开发中肯定不会出现这样的情况。但在需求分析的时候,我们所有的组员都参与了严肃认真讨论交流。需求分析是软件成败很关键的一部分。另外一个问题是计划的实施。以前我们编写程序基本上没有什么计划,只是按照进展的状况而定。这次我们完全按照项目开发的要求做了比较周到的计划,但在具体实施的时候遇到了很多没有料想的东西,很多时候一个小小错误,能够耗上一整天的时间,严重影响了我们的进度。再有就是阶段评审,在项目过程中,很少能够符合事前的计划。一方面是我们项目经验不足的原因,一方面是计划阶段没有做好。还有一点是如何调动大家的积极性,因为每个人的任务不一样,碰到的困难大小也不一样,有的组员会有放弃的念头,造成积极性不强。在评审的时候我们及时分析原因,虽然每个人都有分工,但碰到比较大的问题我们都是一起讨论。遇到不能解决的,我们就虚心向周围的同学学习,最后的成功离不开每个成员的努力。这次软件工程作业让我们学到了不少知识,每个组员都有很大的收获。相信会对我们日后的学习工作起到很大的指导作用。附录1 项目成果软件代码1 Model代码Shoufei 类package hospital.model; public class Shoufei private String leixin; private int jine; private String dept; private String jingshour; private int patientID; public Shoufei(String leixin,int jine,String dept,String jingshour,int patientID) this.leixin=leixin; this.jine=jine; this.dept=dept; this.jingshour=jingshour; this.patientID=patientID; public void setLeixin (String leixin) this.leixin=leixin; public void setJine ( int jine) this.jine=jine; public void setDept (String dept) this.dept=dept; public void setJingshour (String jingshour) this.jingshour=jingshour; public void setPatientID (int patientID ) this.patientID=patientID; public String getLeixin() return leixin; public int getJine() return jine; public String getDept() return dept; public String getJingshour() return jingshour; public int getPatientID() return patientID; ShoufeiDAO 类package hospital.model;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import javax.naming.Context;import javax.naming.InitialContext;import javax.naming.NamingException;import javax.sql.DataSource;import hospital.model.shuruP;import org.omg.PortableServer.REQUEST_PROCESSING_POLICY_ID;public class ShoufeiDAO /* Creates a new instance of feiyongDAO */ public ShoufeiDAO() private static final String GETALL=select * from shuru where PID=?; private static final String DELETE=delete from shuru where PID=?; public Shoufei getAllfeiy(int pid) DataSource ds = null; Connection connection = null; PreparedStatement stmt = null; ResultSet results = null; ArrayList list=new ArrayList(); Shoufei shoufei=null; try Context context = new InitialContext(); if (context = null ) throw new RuntimeException(JNDI Context could not be found.); ds = (DataSource)context.lookup(java:comp/env/jdbc/hospitalDB); if ( ds = null ) throw new RuntimeException(DataSource could not be found.); connection = ds.getConnection(); stmt = connection.prepareStatement(GETALL); stmt.setInt(1,pid); results = stmt.executeQuery(); while ( results.next() ) String leixin=results.getString(leixin); int jine=results.getInt(jine); String dept=results.getString(dept); String jinshouren=results.getString(jingshour); shoufei=new Shoufei(leixin,jine,dept,jinshouren,pid); return shoufei; catch (SQLException se) throw new RuntimeException(A database error occured. + se.getMessage(); catch (NamingException ne) throw new RuntimeException(A JNDI error occured. + ne.getMessage(); finally if ( results != null ) try results.close(); catch (SQLException se) se.printStackTrace(System.err); if ( stmt != null ) try stmt.close(); catch (SQLException se) se.printStackTrace(System.err); if ( connection != null ) try connection.close(); catch (Exception e) e.printStackTrace(System.err); public int deletefeiy(int pid) DataSource ds = null; Connection connection = null; PreparedStatement stmt = null; ResultSet results = null; ArrayList list=new ArrayList(); Shoufei shoufei=null; int num=0; try Context context = new InitialContext(); if (context = null ) throw new RuntimeException(JNDI Context could not be found.); ds = (DataSource)context.lookup(java:comp/env/jdbc/hospitalDB); if ( ds = null ) throw new RuntimeException(DataSource could not be found.); connection = ds.getConnection(); stmt = connection.prepareStatement(DELETE); stmt.setInt(1,pid); num=stmt.executeUpdate(); return num; catch (SQLException se) throw new RuntimeException(A database error occured. + se.getMessage(); catch (NamingException ne) throw new RuntimeException(A JNDI error occured. + ne.getMessage(); finally if ( results != null ) try results.close(); catch (SQLException se) se.printStackTrace(System.err); if ( stmt != null ) try stmt.close(); catch (SQLException se) se.printStackTrace(System.err); if ( connection != null ) try connection.close(); catch (Exception e) e.printStackTrace(System.err); 2.Controller代码DeleteShouFeiServlet.java/* * DeleteShouFeiServlet.java * * Created on 2009年4月29日, 下午4:56 */package hospital.controller;import java.io.*;import java.net.*;import javax.servlet.*;import javax.servlet.http.*;import hospital.model.*;/* * * author hustlyb * version */public class DeleteShouFeiServlet extends HttpServlet protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException response.setContentType(text/html;charset=UTF-8); PrintWriter out = response.getWriter(); String pidStr=request.getParameter(pid); try int pid=Integer.parseInt(pidStr); ShoufeiService shoufeiSvc=new ShoufeiService(); int num=0; num= shoufeiSvc.deleteFei(pid); if(num=1) RequestDispatcher view=request.getRequestDispatcher(/deletAccess.jsp); view.forward(request,response); return; RequestDispatcher view=request.getRequestDispatcher(/deletfail.jsp); view.forward(request,response); return; catch(Exception e) e.printStackTrace(System.err); out.println(Exception); out.close(); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException processRequest(request, response); protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException processRequest(request, response); public String getServletInfo() return Short description; getAllfeiyong.java/* * getAllfeiyong.java * * Created on 2009年4月21日, 下午10:00 */package hospital.controller;import java.io.*;import java.net.*;import java.util.ArrayList;import hospital.model.chufang.chufangServiece;import javax.servlet.*;import javax.servlet.http.*;/* * * author Administrator * version */public class getAllfeiyong extends HttpServlet /* Processes requests for both HTTP GET and POST methods. * param request servlet request * param response servlet response */ ArrayList list=null; protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException String ids=(String)request.getParameter(id); int id=0; try id=Integer.parseInt(ids); if(id0) System.out.println(您输入的数据不能小于0); else System.out.println(插入数据成功); catch(NumberFormatException e) e.printStackTrace(); System.out.println(e.getMessage(); chufangServiece cs=null; list=cs.getAllfeiy(id); request.setAttribute(list,list); RequestDispatcher view=request.getRequestDispatcher(chaxunView); view.forward(request,response); return; / /* Handles the HTTP GET method. * param request servlet request * param response servlet response */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException processRequest(request, response); /* Handles the HTTP POST method. * param request servlet request * param response servlet response */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException processRequest(request, response); /* Returns a short description of the servlet. */ public String getServletInfo() return Short description; / 2 View代码chaxunView.java/* * chaxunView.java * * Created on 2009年4月25日, 下午4:26 */package hospital.view;import java.io.*;import java.net.*;import java.util.Iterator;import java.util.ArrayList;import javax.servlet.*;import javax.servlet.http.*;import hospital.model.shuruP;/* * * author Administrator * version */public class chaxunView extends HttpServlet /* Processes requests for both HTTP GET and POST methods. * param request servlet request * param response servlet response */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException response.setContentType(text/html;charset=UTF-8); ArrayList list=(ArrayList)request.getAttribute(list); PrintWriter out = response.getWriter(); out.println(); out.println(); out.println(费用统计); out.println(); out.println(); Iterator item=list.iterator(); out.println(); out.println(费用类型金额部门经手人); while(item.hasNext() shuruP sp=(shuruP)item.next(); out.println(); out.println(+sp.getLeixin()+); out.println(+sp.getJine()+); out.println(+sp.getDept()+); out.println(+sp.getJingshoru()+); out.println(); out.println(); out.println(a href=/chaxun
展开阅读全文