为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

医院门诊收费管理系统设计与实现【精华】6

2018-01-14 50页 doc 2MB 12阅读

用户头像

is_594905

暂无简介

举报
医院门诊收费管理系统设计与实现【精华】6医院门诊收费管理系统设计与实现【精华】6 康达医院门诊收费管理系统的分析与设计 ................................................................................... 1 AF业设计+门诊收费管理系统设计与实现论文 ........................................................................ 25 基于JAVA的医院门诊信息管理系统设计与实现 ....................
医院门诊收费管理系统设计与实现【精华】6
医院门诊收费管理系统设计与实现【精华】6 康达医院门诊收费管理系统的分析与设计 ................................................................................... 1 AF业设计+门诊收费管理系统设计与实现论文 ........................................................................ 25 基于JAVA的医院门诊信息管理系统设计与实现 ...................................................................... 62 门诊收费系统的设计与实现 ......................................................................................................... 49 医院门诊收费系统设计 ................................................................................................................. 23 医院管理信息系统设计 ................................................................................................................. 25 医院门诊管理系统_毕业设计论文_开题报告 ............................................................................. 39 MIS课程设计实验报告——医院门诊处理系统 ......................................................................... 43 医院门诊收费管理系统设计与实现 ............................................................................................. 55 医院门诊收费系统的设计与实现 ............................................................................................... 103 医院门诊信息系统课程设计 ....................................................................................................... 117 康达医院门诊收费管理系统的分析与设计 1 康达医院门诊收费管理系统的分析与设计 【摘要】本文针对医院信息化管理问题,通过对康达医院门诊日常业务进行详细调研,对其工作流程进行研究,建立门诊信息处理模型,并在此基础上设计门诊收费信息管理软件的方案,并加以实施。 本文主要对医院门诊的现状进行了需求分析,达到了相应的用户需求,功能需求以及相应的业务流程,重点阐述了系统的分析、设计的思路和,以及系统数据库设计的方法。最后介绍了对系统的概要设计、系统实现的主要应用技术等。本系统主要实现了挂号管理、处方管理、划价管理和基础资料管理等。 建立医院门诊管理系统使康达医院门诊管理工作规范化,系统化,程序化,避免管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效地进行信息查询和修改。提高了直接或间接的经济效益,提升医疗管理和行政管理水平,改善医患关系,增强医疗服务竞争力,实现优质服务。 【关键词】医院信息管理系统 数据库 挂号 门诊收费系统 随着卫生事业的发展,医院经济管理的数据结构及处理也日益复杂。医院门诊收费系统不仅要求准确无误地保留有关经济数据,而且要求迅速可靠地采用各种数据信息进行综合分析和决策。计算机所具有的数字化技术和交互式的处理能力,使其对数据庞大、程序复杂的各类信息进行综合处理,从而为医院经济管理的运行提供决策依据。 本文阐述了医院门诊收费管理系统的设计与实现,以病人为中心,以时间为轴线,围绕病人的就医全过程,详细地、完整地收集所有数据。借助于信息系统的杠杆作用,平衡各医疗关联方的需要,将管理信息和临床专业信息做集成,使得相关人员在任何时间、任何地点都能得到相关信息。其主要目标是协助完成医院对日常的收费统计和科室管理等业务,减轻医务人员处理业务的劳动强度,提高医务人员的工作效率和工作质量,全面提高了医院的综合管理水平和服务质量,为医院带来一定的经济效益产生积极作用。 本文分为四个部分,分别阐述了系统设计、开发、实施、调试的整个过程。第一部分主要是介绍了门诊收费管理系统的现状和可行性分析等;第二部分主要是对系统的分析,包括需求分析、业务流程分析、数据流程分析等;第三部分是关于系统的设计,重点描述了系统的整体框架,数据库设计,功能说明等;第四部分是对系统开发的一些总结。 第一部分 概述 医院信息系统(英文缩写为HIS,英文全称为Hospital Information System)是指利用计算机软硬件技术、网络通讯技术等现代化手段,对医院及其所属各部门对人流、物流、财流进行综合管理,对在医疗活动各阶段中产生的数据进行采集、存贮、处理、提取、传输、汇总、加工生成各种信息,从而为医院的整体运行提供全面的、自动化的管理及各种服务的信息系统。医院信息系统是现代化医院建设中不可缺少的基础设施与支撑环境。 HIS将计算机技术和医院的管理特点、管理思想、医院各部门业务特点、业务经验有机地结合起来,用数据库方式管理、储存信息,利用计算机网络加速信息流通和传递速度,对医院发展和医院改革具有重要意义。 医院门诊收费管理系统在HIS系统中占有重要的地位,从以医院管理和经济管理为主转向为以病人为关注点,随着社会发展、人民生活水平不断提高,医院的一切程序都逐渐实施人性化服务,自动化、无纸化管理。对医院的服务要求也越来越高,作为现代化医院的门诊收费管理,必须以人为本,从软件、硬件上,上一新的台阶,才可能最大限度地提高医院对患 2 者服务的效率,提高医院的资源利用率和能力,最大限度的产生良好的社会与经济效益。 1. 康达医院简介 该院建于20世纪中期,现有职工700余人,业务科室:心脏科、肾脏科、血液科、消化科、内分泌科、心胸外科、肺外科、泌尿科、普外科、妇科、产科、儿科、神经外科、神经内科、药剂科、财务科、总务科等。 该院具有卓越的医院文化,以―呵护健康,关爱生命‖为宗旨,以―一流的医疗设备,一流的医疗技术,一流的医院管理,一流的服务质量‖为理念,坚持―质量建院、科技兴院‖,法德结合,从严治院的方针,使医院不断发展、完善,真正成为―优质高效,百姓放心‖的现代化综合医院。 2. 问题的提出 医院信息系统是一个综合性的信息系统,它的应用软件功能涉及到国家有关部委制定的法律、法规。包括医疗、教育、科研、财务、会计、审计、统计、病案、人事、药品、保险、物资、设备……等等。因此医院信息系统首先必须保证与我国现行的有关法律、法规、规章制度相一致,并能满足各级医疗机构和各级卫生行政部门对信息的要求。 随着人们对健康重视的加深,就诊要求不断提高,医院门诊收费管理在整个社会中占有越来越重要的地位。在传统医院管理过程中,门诊收费与查询管理都非常的耗费人力物力,同时由于采用手工操作,不可避免地造成一些错误。门诊收费管理系统是建立一个全院性的门诊信息管理系统,从实现挂号到处方信息录入,划价收费信息的计算机化,把医院的信息系统开发工作从单个部门推向整个医院,推动医院的现代化建设,改进医院服务质量,提高收费透明度。 本系统以康达医院应用背景,通过研究当前医院系统的管理现状、存在问题以及现实需求,设计一个针对医院门诊收费管理工作的门诊收费管理系统。缩短了信息流转时间,使得医院的管理层次分明,为医生诊治与病人查询提供依据,对于提高医院管理的经营效率、加快门诊管理的自动化具有重要的意义。 3. 研究现状及背景 医院信息系统是以计算机为基础,用于简化所有医院医疗和管理信息,在国际学术界己公认为新兴的医学信息学的重要分支。 美国该领域的著名教授Morns F.Collen于1988年曾著文为医院信息系统下了如下定义:利用电子计算机和通讯设备,为医院所属各部门提供病人诊疗信息(Patient Care Information)和行政管理信息(Administration Information)的收集(Collect)、存储(Store)、处理(Process)、提取(Retrieve)和数据交换(Communicate)的能力,并满足所有授权用户(Authorized)的功能需求。 医院信息系统属于企业级信息系统中最复杂的一类。这是医院本身的目标、任务和性质决定的。它不仅要同其它MIS(Management Information System,管理信息系统)一样追踪管理伴随人流、财流、物流所产生的管理信息,从而提高整个医院的运作效率,而且还应该支持以病人医疗信息记录为中心的整个医疗、教学、科研活动。门诊收费管理系统作为医院信息系统的主要的业务分支,它是伴随着医院信息系统的发展而发展的。 (1)国内发展情况 我国医院信息系统的起步也可追溯到20世纪70年代末,以南京军区医院用DJS一313小型机开发的医院信息系统软件为开端。随着信息技术的发展,医院信息系统在上世纪末、本世纪初获得普及。2002年卫生部对国内6921家医院进行调查,其中有2179家建设了医院信息系统(HIS),占31.96%,华东地区医院建设HIS比例接近80.96%。 目前全国有300多家公司在生产与医疗信息化相关的产品。国内的一些知名公司占据一定的市场份额,东软凭借在影像上的传统优势亦进军HIS市场。国内软件具有天然本土优势,符合国内传统的工作流程,用户易接受,操作简单。 3 但是我国医院信息系统产品在使用中也存在一些普遍性的问题,医院缺少首席执行官(Chief Information Officer,简称CIO)机制,信息专业人才匾乏;卫生信息立法滞后;系统的可靠性和可用性上存在问题,死锁现象时有发生;系统占用的数据库空间无谓膨胀过快且导致系统性能下降;产品功能需要增加、扩充和提高,特别是需要增加临床信息管理功能;产品应用软件缺乏化,难以实现信息共享:用户需求和设计变动不少,程序修改要求频繁,而又不易修改;产品维护和技术支持的工作量过大,企业疲于应付,又使成本居高不下;市场产品类似,竞争激烈,又几乎是同水平重复甚至低水平重复。客观地说,现有的医院信息管理产品在性能和功能上实际上还不能满足中大型医院信息化管理的需求。 自2000年来,一些境外的HIS产品陆续进入中国内地市场,北京东华公司代理澳大利亚的MEDTRAK、新加坡的SCS、韩国的WIN&WIN、台湾的东宜等,其市场定位在国内的三级以上的高端医院。这些来自海外的医院信息系统,在产品思想构建上、内在管理理念上都要优于国内的产品,但由于管理模式的不同,也存在着―水土不服‖等洋软件的通病,尤其在门诊处理模式以及财务管理上普遍存在着―硬伤‖,当然价格亦不菲。 (2)国外发展情况 美国在医院信息化方面一马当先。早在1987年,美国就组织了对―卫生信息传输标准‖这一战略技术的开发与推广,从克林顿总统时代开始,美国展开了一系列的立法,要求医疗机构尽快进入数字时代。布什总统在2004年众议院的年度国情咨文中专门强调医院信息系统建设,要求在10年内,确保绝大多数美国人拥有共享的电子健康记录,并史无前例地设立一个新的、级别仅低于内阁部长的卫生信息技术协调官员职位。 总部设在芝加哥的美国卫生信息与管理系统协会是美国医学信息学界一个重要的学术组织。2004年1月,在对2000多名医疗机构的信息总监进行调查的基础上,HIMSS发表了一份客观反映美国医院信息化现状和发展方向的调查报告。报告显示到2002年,全美只有不足30%的医院没有信息化规划,也反映了信息化医院网络化的发展重点和方向。 2005年春,英国卫生部签署了一份为期10年,价值55亿英镑的合同,支持发展电子病历、网上预约、网上处方,以及用数字图像取代X光片,使远程病情咨询成为可能。这可能是世界上最大的一笔民用信息技术采购订单,将造福于英国全部病人和100万医护人员。 欧洲委员会第五个框架计划实施的重点,是放在支持信息化远程医疗保健应用与服务技术的进一步发展与研究上。医学信息学与生物医学工程学的共同作用,将有利于新的个人保健监控系统的发展,加强其服务功能,加大公民参与自身保健活动的力度,增强其对自身健康状况的责任感,因此,对以公民为中心的保健体系的发展方向也给予了肯定。 韩国已经完成了第一个卫生信息系统10年计划(1991~2000年),第二阶段计划(2001一2010年)也己经在实施中。目前重点放在标准化和司法问题(如隐私、远程医疗等方面的立法)等信息化基础工作,以及公立医院与私立医院系统的整合。在政府的强力推动下,该国95%的医院和诊所通过网络链接了国家医疗保险部门进行结算,而且大多数三级医院已经安装了医嘱录入系统,其中1/3安装了图片文件交流系统。 4. 系统开发的意义 目前,国内大多数医院均不同程度将计算机技术应用于医院管理。HIS的开发已经从最初的―以财务管理为中心‖为主要模式逐步向―以病人为中心、以医疗信息为主线‖的全新管理模式转变。 有些医院的领导者缺乏强烈的信息化意识,在管理思想上不能及时适应要求,习惯使用旧的管理模式,对于医院的信息管理工作的重要性和对HIS在整个医院管理工作中的重要作用认识不够,造成了在整个HIS建设过程中进度缓慢,影响了医院信息系统的有效建设。应用计算机对医院各个方面的信息进行管理,具有着手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低、数据高度共享,无纸 4 化信息传递,不但降低管理成本,而且大幅度提高管理数据的准确性和实时性。这些优点能够极大地提高医院运作的效率,也是现代医院的科学化、正规化管理,与世界接轨的重要条件。因此开发医院门诊收费系统,从而提高了处理的速度与精度,减轻医务人员的工作强度,提高管理水平,降低管理成本,使医院一高效率运转。 5. 可行性分析 可行性分析是在建立一个管理信息系统的前期对项目的一种考察和鉴定,主要是对在操作上,技术上,经济上可能存在的问题进行分析。目前,开发与应用管理信息系统的程度已经成为衡量一个国家、部门、企事业单位科学技术与经济实力的重要标志之一。其重要目标是:用最小的代价在尽可能短的时间内确定问题是否能够解决。 本系统设计的―康达医院门诊收费管理系统‖软件是用来满足康达医院对于就诊病人管理工作的需要,实现管理自动化、信息化。门诊收费管理系统的介入改变了传统的门诊收费管理工作的繁琐现状,使就诊该院的患者的管理工作更加快捷、方便,管理的方式更加合理,从根本上改善了门诊收费管理工作的质量。 在分析设计之前,本文先对康达医院门诊收费管理系统做如下可行性分析: (1)技术可行性 本系统的建立所需的基本软硬件设备经过调查,康达医院门诊部完全具备件条件,该系统的开发在技术上完全可行的。 (2)经济可行性 经济可行性研究是对组织的经济现状和投资能力进行分析,对系统建设运行和维护费用进行估算,对系统建成后可能取得的社会和经济效益进行估计。主要解决资金可得性和经济合理性两个问题。作为开发本系统的主要的软件环境是Microsoft Visual Basic 6.0和Microsoft Access 2000,这两个软件已经是市面上比较常见,技术上比较成熟的两个软件开发工具,因此,在软件上本系统的开发成本是可以被接受的。在外围设备方面,该系统只需要最常见的普通输出设备,如打印机。除此之外,在系统投入运行后,能提高医务人员的工作效率,协同工作能力进一步的加强,时间效益得到进一步的提高,优化生产关系,提高生产力,加快了病人就诊的速度,全面提高了医院的综合管理水平和服务质量。所以,本系统的开发在经济上是可行的。 (3)管理可行性 主要是管理员对开发信息系统是否支持、现有管理制度和方法是否科学,规章制度是否齐全、原始数据是否正确等。医院根据所开发的系统进行策略上的发展和改变可以获得新的收益,系统应该具有操作简单、易于理解,界面友好等特点,管理员经过短时间的培训就可以熟练地使用该系统。因此本系统的开发在管理上可行。 第二部分 系统分析 系统分析是系统开发的重要阶段。系统分析的目的是要回答新系统将要―做什么‖这个关键性问题。在这个阶段要集中精力,认真分析用户需求,用科学的方法来表达新系统的逻辑方案,建立新系统的逻辑模型。 系统分析要在总体规划的基础上,与用户密切配合,用系统的思想和方法,对业务活动进行全面的调查分析,详细掌握有关的工作流程,收集票据、账单、报表等资料,分析现行系统的局限性和不足之处,找到制约现行系统的―瓶颈‖,确定新系统的逻辑功能,根据条件找出集中可能的解决方案,分析比较这些方案的投资和可能的收益。 系统分析工作开始与用户提出新系统的要求,进行初步调查与可行性分析后,确认新系统开发为可行即可进行详细调查与分析,提出新系统逻辑模型,最后写出系统分析报告。 系统分析工作步骤如图所示。 5 初 建步 立接详调系是 新转受细查统可 系下用调与分行 统阶户查可析否 逻段 请与行报 辑求 分性告 模析 分 型 析 1. 需求分析 否 需求分析简单地说就是分析用户的要求。需求分析是设计数据库的起点,需求分析的结果是准确地反映了用户的实际要求,将直接影响到后面各个阶段的设计,并影响到设计结果是否合理和实用。 在需求分析阶段要完成的任务是通过详细调查现实世界要处理的对象,充分了解原系统工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。新系统必须充分考虑近乎可能的扩充和改变,不能仅按当前应用需求来设计数据库。 通过实践调查,根据对系统要完成的任务进行全面完整剖析和理解,该系统要实现的主要功能如下: 1.医院相关基本信息管理 (1)科室基本信息管理 (2)医生基本信息管理 (3)药品基本信息管理 2.患者基本信息管理 3.病案基本信息管理 (1)挂号信息管理 (2)处方信息管理 4.门诊管理员管理 5.日常工作管理 (1)按病案号进行划价查询 (2)按药品属性进行查询 6.信息统计分析管理:对每日总体收入和执行科室进行统计。 2. 组织结构分析 组织在这里是指医院门诊,组织结构是指医院门诊内部的部门划分以及他们的相互关系,先行系统中的信息流动以组织结构为背景的。康达医院门诊收费管理系统的组织结构图,如图所示。 门 诊 6 药房 放射科 检验科 挂号处 收费处 服务处 3. 业务流程分析 进行业务流程分析时,需要按照原有信息流动过程,逐个地调查分析所有环节的处理业务、处理内容、处理顺序和对处理时间的要求,弄清各个环节需要的信息、信息来源、流径去向、处理方法、计算方法、提供信息的时间和信息形态等。 业务流程分析可以用业务流程图来完成。所谓业务流程图就是一种表明系统内各单位、人员之间的业务关系、作业顺序和管理信息流动的流程图,它用一些规定的符号及连线来表示某个具体业务处理过程。业务流程图基本图符如图所示。 外部实体 数据存档 数据流向 内部实体 康达医院门诊收费管理系统的业务流程图如图所示。 个人信息 挂号信息表 患者 挂号员 4. 数据流程分析 处方信息表 收费信息表 医生 收费员 数据流程是指数据在系统中产生、传输、加工处理、使用、存储的过程。数据是信息的载体,是今后系统要处理的主要对象。因此必须对系统调查中所搜集的数据以及统计处理数据的过程进行分析和整理。数据与数据流程分析是今后建立数据库系统和设计功能模块处理过程的基础。 数据流程分析是把数据组织内部的流动情况抽象地独立出来,舍去了具体结构组织、信息载体、处理工具、物质、材料等,单从数据流动过程来考虑实际业务的数据处理模式。其中数据流程图是描述系统逻辑模型的主要工具,它以少数几种符号综合地反映出信息在系统中的流动、存储和传递。数据流程图基本图符如图2.5所示。 数据存储 数据处理 数据流 外部实体 对康达医院门诊收费系统的数据流程分析,得到以下数据流程图,如图所示。 D1挂号信息表 患者 D2 处方信息表 门诊收费 7 管理系统 医生 D3 划价信息表 5(数据字典 数据流程图描述了系统的分解,即描述了系统由哪几部分组成、各部分之间有什么联系等等,但还没有说明系统中各个成分的含义。数据字典主要用来描述数据流程图中的数据流、数据存储、处理过程和外部实体。它有助于数据的进一步管理和控制,为设计人员和数据库管理员在数据库设计、实现和运行阶段控制有关数据提供依据。 数据字典中有六类条目:数据元素、数据结构、数据流、数据存储、数据处理、外部实体。 第三部分 系统设计 系统设计就是详细定义基于计算机的各种活动的解决方案。在系统设计阶段,把系统分析过程当中得到的逻辑模型结合相应的网络技术、数据库技术等详细的描述出来,并为系统实施阶段的各种工作准备必要的技术资料和有关文件。 系统设计的基本目标就是要使所设计的系统必须满足系统逻辑模型的各项功能要求,同时尽可能地提高系统的性能。系统设计的目标是评价和衡量系统设计方案优劣的基本标准,也是选自系统设计方案的主要依据。评价与衡量系统设计目标实现程度的指标主要有以下方面:系统的效率、系统的工作质量、系统的可变更性、系统的通用性、系统的可靠性。 1. 系统开发工具的选择 (1)开发工具的选择 通过研究目前市场最普遍的几种开发工具产品:VB,VC,C++,C#,ASP,JSP,PHP,以及各种.NET 和数据库开发工具Oracle,Sybase,SQL Server 2000,Access 2000等。考虑到硬件设备的兼容性以及所作相应软件环境的要求,本系统采用Visual Basic 6.0 和 Access 2000 作为开发工具。 (2)Visual Basic 6.0及Access 2000技术简介 Visual Basic是由美国微软公司于1991年开发的一种可视化的、面向对象和采用事件驱动方式的结构化高级程序设计语言,可用于开发 Windows 环境下的各类应用程序。它简单易学、效率高,且功能强大可以与 Windows 专业开发工具SDK相媲美。在Visual Basic环境下,利用事件驱动的编程机制、新颖易用的可视化设计工具,使用Windows内部的广泛应用程序接口(API)函数,动态链接库(DLL)、对象的链接与嵌入(OLE)、开放式数据连接(ODBC)等技术,可以高效、快速地开发Windows环境下功能强大、图形界面丰富的应用软件系统。其特点如下: ? 面向对象 VB采用了面向对象设计思想,它基本思路是把复杂设计问题分解为个个能够完成独立功能——相对简单对象集合。所谓―对象‖就是个可操作实体如窗体、窗体中命令按钮、标签、文本框等面向对象编程就好像搭积木样员可根据和界面设计要求直接在屏幕上画出窗口、菜单、按钮等区别类型对象并为每个对象设置属性。 ? 事件驱动 在Windows环境下是以事件驱动方式运行每个对象的都能响应多个区别事件,每个事件都 8 能驱动段代码——事件过程该代码决定了对象功能,通常称这种机制为事件驱动事件可由用户操作触发也可以由系统或应用触发,例如单击个命令按钮就触发了按钮Click(单击)事件该事件中代码就会被执行若用户未进行任何操作(未触发事件)则就处于等待状态整个应用就是由彼此独立事件过程构成。 ? 软件Software集成式开发 VB为编程提供了个集成开发环境在这个环境中编程者可设计界面、编写代码、调试直至把应用编译成可在Windows中运行可执行文件并为它生成安装VB集成开发环境为编程者提供了很大方便。 ? 结构化设计语言 VB具有丰富数据类型是种符合结构化设计思想语言而且简单易学此外作为种设计语言VB还有许多独到的处。 ? 强大数据库访问功能 VB利用数据Control控件可以访问多种数据库VB 6.0提供ADOControl控件不但可以用最少代码实现数据库操作和控制也可以取代DataControl控件和RDOControl控件。 ? 支持对象链接和嵌入技术 VB核心是对对象链接和嵌入(OLE)技术支持它是访问所有对象种思路方法利用OLE技术能够开发集声音、图像、动画、字处理、Web等对象于体。 ? 网络功能 VB 6.0提供了DltTML设计工具,利用这种技术可以动态创建和编辑Web页面使用户在VB中开发多功能网络应用软件Software 。 ? 多个应用向导 VB提供了多种向导如应用向导、安装向导、数据对象向导和数据窗体向导通过它们可以快速地创建区别类型、区别功能应用。 ? 支持动态交换、动态链接技术 通过动态数据交换(DDE)编程技术VB开发应用能和其他Windows应用的间建立数据通信通过动态链接库技术在VB中可方便地用C语言或汇编语言编写也可Windows应用接口((API) 。 ? 联机帮助功能 在VB中利用帮助菜单和F1功能键用户可随时方便地得到所需要帮助信息VB帮助窗口中显示了有关举例代码通过复制、粘贴操作可获取大量举例代码为用户学习和使用提供方便。 Microsoft Office Access是由微软发布的关联式数据库管理系统。它结合了 Microsoft Jet Database Engine 和 图形用户界面两项特点,是 Microsoft Office的成员之一。数据必须经过多层处理步骤,才能转换为有用的信息。Access是一个可满足不同需求者的应用软件。其以数据库管理系统的概念,设计数据库、分析数据库所使用的表,并且创建数据库的结构。Access还是C语言的一个函数名和一种交换机的主干道模式。它提供了表、查询、窗体、报表、页、宏、模块7种用来建立数据库系统的对象;提供了多种向导、生成器、模板,把数据存储、数据查询、界面设计、报表生成等操作规范化;为建立功能完善的数据库管理系统提供了方便,也使得普通用户不必编写代码,就可以完成大部分数据管理的任务。其优点为: ? 存储方式单一 Access管理的对象有表、查询、窗体、报表、页、宏和模块,以上对象都存放在后缀为(.mdb)的数据库文件种,便于用户的操作和管理。 ? 面向对象 9 Access是一个面向对象的开发工具,利用面向对象的方式将数据库系统中的各种功能对象化,将数据库管理的各种功能封装在各类对象中。它将一个应用系统当作是由一系列对象组成的,对每个对象它都定义一组方法和属性,以定义该对象的行为,用户还可以按需要给对象扩展方法和属性。通过对象的方法、属性完成数据库的操作和管理,极大地简化了用户的开发工作。同时,这种基于面向对象的开发方式,使得开发应用程序更为简便。 ? 界面友好、易操作 Access是一个可视化工具,是风格与Windows完全一样,用户想要生成对象并应用,只要使用鼠标进行拖放即可,非常直观方便。系统还提供了表生成器、查询生成器、报表设计器以及数据库向导、表向导、查询向导、窗体向导、报表向导等工具,使得操作简便,容易使用和掌握。 ? 集成环境、处理多种数据信息 Access基于Windows操作系统下的集成开发环境,该环境集成了各种向导和生成器工具,极大地提高了开发人员的工作效率,使得建立数据库、创建表、设计用户界面、设计数据查询、报表打印等可以方便有序地进行。 ? Access支持ODBC 开发数据库互连,(Open Data Base Connectivity),利用Access强大的DDE(动态数据交换)和OLE(对象的联接和嵌入)特性,可以在一个数据表中嵌入位图、声音、Excel表格、Word文档,还可以建立动态的数据库报表和窗体等。Access还可以将程序应用于网络,并与网络上的动态数据相联接。利用数据库访问页对象生成HTML文件,轻松构建Internet/Intranet的应用。 2. 系统的软硬件环境 本系统的建立所需的基本硬件设备有:电脑、打印机等。操作系统为Windows XP,开发工具为 Microsoft Visual Basic 6.0,数据库采用 Microsoft Access 2000。 3. 系统结构设计 (1)功能结构设计 系统的功能分析主要是针对实际要求,对系统要完成的任务进行全面完整剖析和理解,而本系统需要完成的主要任务是: 挂号管理:挂号员对患者就诊医院时基本信息的录入,使患者获取诊疗的病案号。 处方管理:收费员将患者就医后的处方进行录入。 划价收费管理:按照患者的病案号进行药品处方内容划价并保存,打印成收费单据。 统计查询管理:(1)划价查询管理:按照病案号、药品编码、品名进行查询划价记录。增加了医院门诊财务收费管理的透明度;(2)药品查询管理:按照选择字段类型查找药品信息。例如:对选择字段药品编码、品名、拼音码、剂型、自费类型、类别、生产企业信息进行查询。 报表打印管理:(1)日结统计报表管理:完成当日收费现金统计工作,合理地记录和管理这些财务信息;(2)执行科室统计报表管理:分科统计各科门诊收入查看医师工作量。 资料维护管理:(1)科室信息管理:添加、修改、删除科室信息。例如:科室编码、科室名称、科室简称、拼音码、科室电话、科室类型等信息进行管理;(2)医生信息管理:添加、修改、删除医生信息。例如:医生编码、医生姓名、拼音码、性别、联系电话、科室编号、科室名称等信息进行管理。(3)药品信息管理:添加、修改、删除药品信息。例如:药品编码、品名、拼音码、剂型、零售价、自费类型、类别、生产企业等信息进行管理;(4)门诊管理员信息管理:添加、删除门诊管理员信息。例如:工号、姓名、密码信息进行管理。 所谓功能结构图就是按功能从属关系画成的图表,图中每一个框架称为一个功能模块。本系统的功能模块图如图所示。 10 康达医院门诊收费管理系统 挂号 处方 划价收 费 日 药药结科医药 品品统室生品 处划计管管管 报方 价 理 理 理 (2)模块之间关系 表 本系统共有六大模块,即:挂号信息管理模块、处方信息管理模块、划价收费管理模块、 统计查询信息管理模块、报表打印管理模块、资料信息维护管理模块。 功能结构设计的特点在于有很好的内聚性。内聚性是指一个程序模块执行单独而明确定义功能的适用程度。内聚性好的程序具有好的可变性和可维护性。修改执行独立功能的内聚性模块,对程序中其它功能模块的影响很小,甚至根本没有影响。相反地,如果模块完成许多功能或连接许多不同的处理过程,那么其内聚性就差,产生错误的机会就会增加。系统模块之间的相互联系程度叫耦合,如果是紧密耦合,系统将难以维护。大而复杂的模块不仅难以修改,而且难以重复使用。因此,功能结构设计的另一特点在于提高重用性。所谓的―封装‖模块设计目的之一就是提高系统的可重用性。 为了更方便快捷的实现对数据的插入、删除、修改、查询等功能,各模块具有相当的独立性。并且各个主要模块下还有自己的子模块,子模块与父模块之间形成了一一对应的关系,相互之间遵守严格的低关联度和高聚合度的原则,各模块在这些关系的约束下共同构成一个统一的整体,完成系统的各功能。 4. 数据结构和数据库设计 设计数据库系统首先应该充分了解用户各个方面的要求,包括现有的以及将来可能增加的需求。数据库设计包括以下几个步骤:数据库需求分析;数据库概念结构设 计;数据库逻辑结构设计。可以用下图3.2来表示。 11 需求分析 需求分析说明书 概念数据库设计 与数据库管 逻辑数据库设计 理系统相关 逻辑数据库模式 (特定数据模型) 图3.2 数据库设计过程图 (1)数据库需求分析 需求分析的任务是通过详细调查现实世界要处理的对象,充分了解原系统工作概况,明物理数据库设计 确用户的各种要求,然后在此基础上确定新系统的功能。新系统必须充分考虑今后可能的扩充和改变,不能仅仅按当前应用需求来设计数据库。其中,调查的重点是―数据‖和―处理‖,通过调查、收集与分析,获得用户对数据库的信息要求、处理要求、安全性与完整性要求。 物理数据库模式 根据本系统的要求,涉及如下信息与处理: 门诊管理员信息表的建立:工号+(特定的物理存储结构和存取方式)姓名+密码 挂号信息表的建立:病案号+患者姓名+性别+年龄+电话 处方信息表的建立:病案号+患者姓名+科室名称+医生编号+医生姓名+药品编码+品名+药品 数量+日期+备注 划价信息表的建立:病案号+患者姓名+药品编码+品名+数量+单价+总计+日期 科室信息表的建立:科室编号+科室名称+科室简称+拼音码+科室电话+科室类型 医生信息表的建立:医生编号+医生姓名+拼音码+性别+联系电话+科室编号+科室名称 收费信息表的建立:病案号+患者姓名+药品编码+品名+药品数量+单价+总计+日期+工号 药品信息表的建立:药品编码+品名+拼音码+剂型+自费类型+零售价+类别+生产企业 科室信息添加、删除、修改:对医院内科室的基本信息,例如:科室编号、科室名称、科室简称、拼音码、科室电话、科室类型; 12 医生信息添加、删除、修改:对医院内部医生基本信息,例如医生编号、医生姓名、拼音码、 性别、联系电话、科室编号、科室名称; 药品信息添加、删除、修改、查询:对医院内部药品基本信息,例如药品编码、品名、拼音 码、剂型、自费类型、零售价、类别、生产企业; 门诊管理员信息添加、删除、修改:对门诊管理员的基本信息,例如工号、姓名、密码; 生成报表:该系统会对日结收入、处方的执行科室情况,生成一些报表; 打印:同时完成对报表的打印。 (2)概念模型设计 门诊管理员实体图如图所示。 门诊管理员 工号 姓名 密码 挂号基本信息实体图如图所示。 患者姓名 性别 挂号 病案号 电话 年龄 处方基本信息实体图如图所示。 患者姓名 病案号 医生姓名 科室名称 医生编号 处方 药品编码 日期 药品数量 品名 备注 13 划价基本信息实体图如图所示。 品名 患者姓名 病案号 药品编码 总计 划价 日期 药品数量 单价 医生基本信息实体图如图所示。 科室名称 科室编号 联系电话 医生编码 医生 医生姓名 拼音码 性别 科室基本信息实体图如图所示。 科室名称 科室编号 拼音码 科室简称 科室 科室电话 科室类型 药品基本信息实体图如图所示。 药品编码 品名 拼音码 零售价 剂型 药品 14 自费类型 类别 生产企业 收费基本信息实体图如图所示。 日期 病案号 工号 总计 患者姓名 收费 药品数量 药品编码 品名 单价 总体E-R图如图所示。 1 收费 1 1 N 处 缴收费员 划价 理 挂号员 费 1 1 登属1 录 科室 记 于 入 N N N N N N N 诊处医生 处方 门诊收费管理总体实体联系图 挂号 断 理 (4)数据库物理设计 数据库在物理设备上的存储结构与存取方法称为数据库的物理结构,它依赖于给定的计算机系统。为一个给定的逻辑数据模型选取一个最适合应用要求的物理结构的过程,就是数据库的物理设计。 本系统主要使用Access 2000作为数据库管理程序。Access 2000是一个关系数据库管理系统。Microsoft Access 具有可靠性、可伸缩性、可管理性、可用性等特点,为用户提供了完整的数据库解决方案。 5. 代码设计 15 代码是代表客观事物名称、属性和状态等的符号。使用代码可以提高计算机处理的效率和精度,节省计算机的存储空间,提高运算速度并对用户的查询修改等操作提供方便。 常用的代码有顺序码、区间码、助忆码、缩写码、尾数码,而本系统的编码为病案号,采用区间码的形式。 6. 输入输出设计 信息系统通过输出为用户提供信息。一个信息系统能否为用户提供准确、及时、适用的信息,是评价信息系统优劣的标准之一。从系统开发的角度看,输出决定其输入,即输入的信息只有根据输出要求才能决定。 (1)输入设计 输入设计的任务是根据具体业务要求,确定适当的输入形式,使管理信息系统获取管理工作中产生的正确的信息。输入设计的设计原则:控制输入量、减少输入延迟、减少输入错误避免额外步骤、简化输入过程。输入设计主要把握两个方面,即输入格式(人机界面)与输入数据的校验。 本系统主要的输入设计包括挂号信息输入、处方信息输入、划价信息输入、科室信息输入、医生信息输入、药品信息输入等。 挂号信息输入:包括姓名、性别、年龄、电话。采用键盘输入,病案号由系统自动生成。 处方信息输入:包括病案号、患者姓名、科室名称、医生编号、医生姓名、药品编码、品名、药品数量、日期、备注。采用键盘输入,输入界面如图3.14 所示。 划价信息输入:包括病案号、患者姓名、药品编码、品名、药品数量、单价、总计、日期。采用键盘输入。 科室信息输入:包括科室编号、科室名称、科室简称、拼音码、科室电话、科室类型。采用键盘输入, 医生信息输入:包括医生编号、医生姓名、拼音码、性别、联系电话、科室编号、科室名称。采用键盘输入,输入界面如图3.17 所示。 药品信息采用键盘输入,包括药品编码、品名、拼音码、剂型、零售价、自费类型、类别、生产企业。 (2)输出设计 输出设计的目的是使系统能输出满足用户需求的有用信息。对于大多数用户来说,输出设计是系统开发的目的和评价系统开发的成功与否的标准。因此,输出设计出发点是保证系统输出的信息能够方便地为用户所使用,能够为用户的管理活动提供有效的信息服务。 本系统主要的输出设计包括划价查询、日结统计报表等。 1(划价查询:查询内容包括病案号、药品编码、品名。 2.日结统计报表:查询内容为日期选择。 系统实施是继系统规划、系统分析、系统设计之后的又一个重要阶段,它将在系统设计的基础之上,将系统设计方案的结果具体地在计算机系统上进行实施。 系统实施阶段既是实现新系统,又是取得用户对系统信任的关键阶段。为此,在系统正式实施开始之前,就要制定出周密的计划,即确定出系统实施的方法步骤,所需时间等,并监督计划的执行,以保证系统实施工作的顺利进行。主要任务可以概括为:系统环境的建立、程序设计、数据的录入、系统人员的培训、系统的调试与转换、文档的建立与完善等。 第四部分 结论 本课程设计对康达医院门诊收费管理系统进行了分析、设计和实施,系统完全按照结构化方法完成,为门诊收费的管理提供了一个方便,快捷的操作软件。 本系统完成之后能实现的主要功能如下: 16 1.医院相关基本信息管理:科室基本信息管理、医生基本信息管理、药品基本信息管理 2.患者基本信息管理 3.病案基本信息管理:挂号信息管理、处方信息管理 4.系统操作员管理 5.日常工作管理:按病案号进行划价查询、按药品属性进行查询 6.信息统计分析管理:对每日总体收入和执行科室进行统计 本系统有着自身特有的优点,例如病案号的自动生成,对日常收费情况进行统计后,可对结果输出到Excel表格并打印。通过不断完善,本系统已经可以正常的运行,基本实现了所设计的各个功能。本系统运行稳定,操作简单,维护方便,实现了对门诊收费的管理。 由于第一次独立完成系统设计,再加上相关知识水平有限,本系统存在需要改进的地方,比如统计比较粗糙,设计时没有周全考虑到数据库查找效率,实现方式还存在些许不足,有待完善。 17 参考文献 [1] 荣软科技.Access数据库原理技术与全程实例.北京:清华大学出版社,2009 [2] 朱顺泉.管理信息系统理论与实务.北京:人民邮电出版社,2001 [3] 李东.管理信息系统的理论与应用.北京:北京大学出版社,2000 [4] 樊小玲,李华才,宁义著.医院信息化建设与应用管理.北京:人民军医出版社,2005 [5] 邝孔武,王晓敏.信息系统分析与设计.北京:清华大学出版社,2002 [6] 王汉新. Visual Basic 程序设计.上海:科学出版社, 2002 [7] 周龙攘.数据库管理系统实现技术.地质大学出版社,2001 [8] 肖刚,孙慧. 系统分析与设计方法.天津机械工程出版社,2004 [9] 王汉新.Visual Basic 程序设计.上海:科学出版社, 2002 [10] 陈惟斌.Visual Basic 6.0 开发指南.北京:清华大学出版社, 2001 [11] 刘腾红,孙细明.信息系统分析与设计.北京:科学出版社,2006 [12] 安忠,佟志臣.管理信息系统.北京:中国铁道出版社,2003 [13] 王道义,乔陶鹏.Visual Basic 6.0 使用详解.北京:机械工业出版社,2007 [14] 陈惟斌.Visual Basic 6.0开发指南.北京:清华大学出版社, 2001 [15] 张海藩.软件工程导论.清华大学出版社,2006 [16] 李澄,张广明.医院管理信息系统的设计与实现.微计算机信息,2007 医院门诊收费管理系统需求分析与设计 18 摘要 医院门诊收费系统是适应时代发展的需要,提高管理的效率而开发设计的。通过对信息的收集、存储、传递、统计、分析、综合查询、报表输出和信息共享,及时为医院领导及各部门管理人员提供全面、准确的各种数据。实现了医院管理的简单化和规划化,提高了医院的工作效率,从而使医院能够以少的投入获得更好的社会效益与经济效益。 作为计算机应用的一部分,使用计算机对客户信息进行管理,具有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高门诊收费的效率,也是一个医院的科学化、正规化管理,与世界接轨的重要条件。 医院门诊收费管理系统是典型的信息管理系统,其主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起一致性、完整性强和安全性好的数据库。而对于后者则要求应用程序具有功能完备,易使用等特点。 经过分析如此情况,决定使用SUN公司的JSP作为开发工具, JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,后台采用MS Server2000 关键字 数据库;JSP;医院门诊收费系统;SQL Server2000。 目录 绪论 19 1 需求分析 20 1.1实际背景 20 1.2系统的功能需求和性能需求 20 1.2.1功能需求 20 1.3系统目标 21 1.4可行性分析 21 1.4.1 技术可行性 21 1.4.2 操作可行性 21 1.5系统总体设计 21 2 开发工具的选择及简介 21 2.1开发工具的选择 21 2.2开发工具的简介 22 2.2.1 JSP简介 22 2.2.2 MS SQL 2000简介 22 3 系统总体设计 22 3.1系统功能总体设计 22 3.2数据库设计 23 3.2.1数据库的理论基础 23 3.2.2数据库表的设计 24 医院门诊收费管理系统 绪论 随着信息科学技术的迅速发展,当今医学科学的研究对计算机技术的依赖性越来越强,医院的信息化建设已经迫在眉捷,而门诊部是医院的一个重要部门,也是病人就诊的第一个环节,是医院直接向社会广大患者提供医疗服务的窗口之一,门诊部的信息化建设直接关系到整个医院的信息化建设的发展水平。如今我国人民群众的生活水平不断的提高,人们对医疗健康 19 服务质量的需求越来越高,加上现在都市人的生活节奏越来越快,如何更方便人们的就诊、减少不必要的排队环节、实现病人资料(患者基本情况、就诊记录及检查结果与治疗情况等)永久性存储,避免以往因病历资料及检查治疗结果丢失而造成的延长诊断时间、重复检查、增加患者经济负担、甚至于造成医疗纠纷等后果,是医院门诊部信息化建设首先要考虑的问题。而向患者提供门诊医疗费用明细清单,让患者花明白钱,看明白病也是目前我们医疗卫生行政主管部门对各级医疗卫生机构的要求,也是门诊部信息化建设所要考虑的重要内容之一。 门诊收费管理主要实现收费(根据病人性质不同自动结算)、单据汇总、单据查询、日账报表汇总打印等。 1 需求分析 1.1实际背景 现行系统目前仍然是人工手动计算,整理,查询医院门诊,药房,病房等各项工作,执行效率非常低,不方便,给医务人员带来了不少麻烦。 1.2系统的功能需求和性能需求 1.2.1功能需求 门诊收费管理主要实现收费(根据病人性质不同自动结算)、单据汇总、单据查询、实现门诊日、月、季、年的总收入、门急诊量和医生工作量的统计、打印、查询等功能。 具体实现以下功能: 1 药品查询功能:为了方便医生查找药品等信息,将所有药品信息按照需要进行分类。这样医生就能很方便的找到自己需要的信息。 2 添加功能:管理员可以通过填写表格的形式输入药品价格、种类等相关信息。系统可以自动避免重复信息。 3 修改功能:管理员可以对数据库中的信息进行修改。系统能够通过管理员给出的条件查找出所要修改的信息,对修改后的信息进行保存,并自动查找是否是重复信息。 4 删除功能:管理员可以对数据进行删除操作。系统能够通过管理员给出的条件查找出要删除的信息,并提示是否确定删除,如果确定删除,则把相关信息从数据库中删除掉。 5 管理员查询功能:管理员可以通过条件选择查询所有信息,并进行排序。 6 统计功能:管理员可以通过此功能对收费信息进行统计和查询。 1.2.2性能需求 除了满足用户的功能要求外,系统的性能要求也很重要。系统的性能要求通常包括:运行时间、存储容量、界面的友好性、系统的安全性、可靠性以及容错能力等。 系统的性能要求应按以下几个方面确定: (1) 容量要求:确定系统的容量,如处理的记录数和处理数据的最大容量等。 (2) 精度要求:确定系统的精度。如数据或数值计算的精度和数据传输的精度等。 (3) 时间特性要求:确定系统的时间特性,如处理时间、响应时间及其峰值负载期间允许偏离范围,系统各项功能的J帧序关系。 (4) 适应性要求:必须指明反映系统环境变化和系统适应能力的各种参数。如当需求发生变化时,系统的适应能力,并指出为适应这些变化而需要设计的软件和过程。 (5) 界面友好性:要有适应用户特点的智能化人——机交互界面,以便用户经过简单的培训就可操作使用。 (6) 系统可靠性:为提高系统可靠性必须采用模块化和结构化设计,提高系统的容错能力,并保障系统不会因人为的操作错误而死机或崩溃。如果系统对时效要求非常高,还必须考虑 20 双机系统和磁盘阵列等措施。此外,还应采用可靠的供电设备。 对门诊收费管理系统的性能而言,其要求是:信息查询的平均响应时间、结算的响应时间、数据存储容量。 1.3系统目标 开发一个比现在医院单位运行的系统更有效、更快捷、操作更方便的系统,提高工作效率。 1.4可行性分析 1.4.1 技术可行性 当前最先进的技术的发展支持本系统的研发,用于建立系统的硬件设备、软件、开发环境等资源也具备。在给定的时间、功能的限制范围内,能设计并实现系统的功能和性能,且我们也有相当丰富的系统开发资源。 1.4.2 操作可行性 要开发的项目的运行方式在用户组织内行的通,现有管理制度、人员素质和操作方式也可行。 1.5系统总体设计 本系统主要包括以下功能:系统设置功能、信息管理模块、收费管理功能、统计查询功能。总体功能流程如图1.1 医院门诊收费系统 系信收统 统息费计 设管管查 置 理 理 询 科药药用药医患收门消医室品品户品生者费诊费生名类单信信信信项收信效称别位息息息息目费息益管管管管管管管管管查查理 理 理 理 理 理 理 理 理 询 询 图1.1 管理模块的数据流图 2 开发工具的选择及简介 2.1开发工具的选择 本系统以JSP作为开发工具, JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。用JSP开发的Web应用是跨平台的,既 21 能在Linux下运行,也能在其他操作系统上运行 ,后台采用MS Server2000 2.2开发工具的简介 2.2.1JSP简介 JSP是Java Server Page 的缩写,是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。Java Servlet 是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。自JSP推出后,众多大公司都支持JSP技术的服务器,如IBM、Oracle、Bea公司等,所以JSP迅速成为商业应用的服务器端语言。 JSP与Java Servlet一样,是在服务器端执行的,通常返回该客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。 2.2.2 MS SQL 2000简介 SQL Server 是一个关系数据库管理系统,越来越多的开发工具提供了与SQL Server的接口。它最初是由Microsoft、Sybase 和Ashton-Tate三家公司共同开发的。 无论是从应用还是开发的角度看,SQL都具有很多优点: 使信息易于查找和使用 支持Web功能的信息共享 用于信息管理的强大解决方案工具 具有完备的数据库窗口 提供名称自动更正功能 具有子数据表功能 可以采用拖放的方式与Excel共享信息 具有数据访问页功能 共享组件的集成 3 系统总体设计 3.1系统功能总体设计 根据需求分析的结果,从实现的角度将系统总分两大块,一个是后台管理员模块,另一个是前台一般用户模块,其系统功能结构总图如下图3.1所示。 开始 重试 否 退出系统 失败 是 用户登陆 失败三次 成功 用户管理 系统设置 1. 管理自己的用户信息 读取用户信息 2. 管理普通用户信息 信息管理 收费管理 管理自己的用户信息 统计查询 22 图3.1 本系统按功能具体可划分为四个模块:系统设置模块、信息管理模块、收费管理模块、统计查询管理。 1) 系统设置模块 系统设置包括科室名称设置、药品类别设置、药品单位设置和用户信息。此模块主要功能包括: ?添加、修改、删除和查看科室信息; ?添加、修改、删除和查看药品类别信息; ?添加、修改、删除和查看药品单位信息; ?添加、修改、删除和查看用户信息; 2) 信息管理功能 此模块的主要功能包括: ?药品管理,包括添加、修改、删除和查看药品信息; ?医生管理,包括添加、修改、删除和查看医生信息; ?患者管理,包括添加、修改、删除和查看患者信息; 3) 收费管理模块 此模块主要功能包括: ?收费项目管理,包括添加、修改、删除和查看收费项目信息; ?门诊收费管理; 4) 统计查询模块 本模块用于对门诊收费信息进行统计和查询,主要包括: ?销售信息统计查询; ?医生效益统计查询; 3.2数据库设计 3.2.1数据库的理论基础 所谓数据库是指长期储存在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。 1) 关系数据库的定义 在一个给定的应用领域中,所有实体及实体之间联系的关系的集合构成一个数据库。关系数据库是目前各类数据库中最重要、最流行的数据库,他应用数学方法来处理数据库数据,是目前使用最广泛的数据库系统。 2) 关系的完整性 关系的完整性规则是对关系的某种约束条件。有三类完整性约束条件:实体完整性、参照完整性和用户定义的完整性。其中实体完整性和参照完整性是关系模型必须满足的约束条件,被称为关系的两个不变性。 3) 关系代数 关系代数是一种抽象的查询语言,是关系数据操纵语言的一种传统表达方式,它是用对关系的运算来表达查询的。 关系代数的运算对象是关系,运算结果也是关系。 按运算符的不同,关系代数可分为传统的集合运算和专门的关系运算。传统的集合运算是二目运算,包括并、差、交、广义笛卡尔积四种运算,专门的关系运算包括选择、投影、连接、 23 除等。 3.2.2数据库表的设计 数据库文件名:Hospital 1(基本信息表BaseType 表1 BaseType 的结构 编号 字段名称 数据结构 说明 1 Id int 记录编号 2 TypeId tinyint 类型编号,1科室名称2药品类 别名称3药品单位名称 3 TypeName Varchar(30) 信息名称 用户信息表Users 2. 表2表Users结构 编号 字段名称 数据结构 说明 1 UserName Varchar(40) 用户名 2 Pwd Varchar(40) 密码 3 User_Type Tinyint 用户类型(1系统管理用户2 普通用户) 3(药品信息表Medicine 编号 字段名称 数据结构 说明 1 MedId Int 药品编号 2 MedName Varchar(40) 药品名称 3 TypeId Int 药品类别编号 4 UnitId Int 药品单位编号 5 BuyPrice Float 进货价格 6 SalePrice Float 售出价格 7 Total Float 库存数量 8 Flag Tinyint 中西药标记,1中药2西药 4(医生信息表Doctor 编号 字段名称 数据结构 说明 1 Id Int 记录编号 2 Name Varchar(40) 医生姓名 3 Sex Varchar(2) 姓名 4 Age Int 年龄 5 DeptId Int 所在科室编号 6 Title Varchar(50) 职务 5(患者信息表Patient 编号 字段名称 数据结构 说明 1 Id Int 记录编号 2 Name Varchar(40) 患者姓名 3 IDNum Varchar(30) 患者身份证号 24 4 Sex Varchar(2) 患者性别 5 Age Int 患者年龄 6 Marry Varchar(8) 婚姻状况 6(收费项目表Items 编号 字段名称 数据结构 说明 1 ItemId Int 记录编号 2 ItemName Varchar(40) 项目名称 3 Total Int 数量 4 Unitid Int 计量单位编号 5 BuyPirce Float 进货价格 6 SatePrice Float 售出价格 7(门诊收费项目明细表PayItems 编号 字段名称 数据结构 说明 1 PayId Int 记录编号 2 RegId Int 门诊登记记录编号 3 ItemId Int 项目编号 4 PNum Int 收费项目数量 5 Price Float 销售价格 6 PType Tinyint 类型,1药品2项目 8(门诊收费登记表Registration 编号 字段名称 数据结构 说明 1 RegId Int 门诊登记记录编号 2 PatId Int 患者编号 3 DocId Int 医生编号 4 RegDate Varchar(20) 登记日期 5 UserName Varchar(40) 用户名 AF业设计+门诊收费管理系统设计与实现论文 摘 要 近年来,随着医疗事业的不断发展,医疗改革的日益深入,为了应对病人“明白就医、放心用药”的要求和激烈竞争的医疗市场,应用计算机实现门诊收费的自动化显得十分迫切。通过计算机管理,可以极大提高医务人员的工作效率,加快病人就诊速度,根除“三长一短”的弊端,有效地解决“看病难”的问题。门诊收费管理系统是医院管理信息系统的重要组成部分,实施计算机管理,不仅可以简化传统人工手动的管理模式,使医院管理人员能够方便地对门诊收费进行全面管理,更重要的是利用计算机的技术可以使门诊收费管理规范化、制度化、数字化、提高管理水平、降低管理成本、减轻工作强度、提高工作效率,使医院以高效率运转。本系统借鉴了我国医院现行体制结构模式、管理模式和管理流程,充分利用计算机技术和数据库技术,采用灵活的模块化结构设计方法进行设计。其基本功能包括了缴费、 25 冲红、结算、查询和统计等方面。计算机技术在医院中的应用顺应了我国的国情,实现了医 疗事业要面向现代化,面向未来的指导思想,是医院管理走向现代化的有力武器。 关键词 医疗改革;管理信息系统;结算 Abstract As the revolution of medical treatment system increasingly improves in recent years, it is absolutely vital to introduce computers into the clinic department to make an automatic way of processing requests-―clearness treatment, reassurance medicine‖ from the patients and the fierce competition from the market. The medicals′ efficiency as well as the diagnosis speed can be extremely improved by using computers. Furthermore, the disadvantage of ―three long one short‖ can be removed fundamentally and no more medication questions. Clinic charge management system is an important part of the communication management system of the hospital. Managing through the computers can provide the managers with an entire control of the clinic charge which simplifies the traditional manual manage mode, and most importantly, using computer technique can make the clinic charge standardized, institutionalized, digitized, which at the same time advances the manage level, reduces the manage cost, lessens the working intensity, and gets the hospital running more efficiently. This system was designed with flexible patterns of structure and plentiful computer technique and data bank technique, which used the current system‘s management pattern and process of our native hospitals as a model. The basic foundation includes charge, scarlet letter writing-off, account, inquiry, statistics and so forth. The application of computer technique in the hospital accords with domestic situation and meets the command of medical process in the face of modernization and the future, and what‘s more, it is the ultimate weapon for the modernization of hospital management. Key words Revolution of Medical Treatment MIS Account 26 目 录 摘要 25 Abstract 26 第1章 绪论 29 1.1 课题背景 29 1.1.1 课题来源 29 1.1.2 现有系统运行情况 29 1.2 本系统开发的目的和意义 29 1.2.1 系统开发的目的 29 1.2.2 系统开发的意义 29 1.3 系统设计思想 29 1.3.1 总体设计思想 29 1.3.2 本系统设计的创新点 30 第2章 可行性分析 30 2.1 业务流程图 30 2.2 本系统可行性分析 32 2.2.1 经济可行性 32 2.2.2 技术可行性 32 2.2.3 运行可行性 33 2.3 本章小结 33 第3章 需求分析 33 3.1 门诊收费管理系统的需求分析 33 3.1.1 数据流图 33 3.1.2 数据字典 34 3.2 本章小结 36 第4章 总体设计 36 4.1 系统模块总体设计 36 4.1.1 模块总体介绍 36 4.1.2 各功能模块详细介绍 37 4.2 数据库设计 37 4.2.1 数据库设计概述 37 4.2.2 数据分析 37 4.2.3 数据库的详细设计 38 4.3 本章小结 40 第5章 详细设计 40 5.1 系统运行平台设置 40 5.1.1 硬件环境 40 5.1.2 软件环境 40 5.2 开发工具简介 40 5.2.1 Visual Studio 2005 介绍 40 5.2.2 SQL Server 2005 介绍 40 5.3 系统主界面设计 41 5.4 门诊业务管理模块详细设计 41 27 5.4.1 挂号收费 41 5.4.2 门诊业务处理 43 5.4.3 门诊单据冲红 44 5.4.4 门诊操作员费用结账 46 5.4.5 医院门诊结算管理 46 5.5 信息查询功能设计 47 5.5.1 就诊信息综合查询 47 5.5.2 医疗费分科分项统计 48 5.6 系统管理功能设计 48 5.6.1 票据重打印 49 5.6.2 更改口令 49 5.7 本章小结 50 第6章 系统测试与性能分析 50 6.1 软件测试 50 6.1.1 测试的基本概念 50 6.1.2 测试步骤 51 6.2 本系统测试 51 6.3 本章小结 51 第7章 系统主要功能使用说明 52 7.1 系统登陆步骤 52 7.2 门诊业务管理 52 7.2.1 挂号收费 52 7.2.2 门诊业务 53 7.2.3 门诊单据冲红 54 7.2.4 门诊操作员费用结帐 55 7.3 信息查询 56 7.3.1 患者费用查询 56 7.3.2 医疗费分科分项统计 56 结论 57 致谢 57 参考文献 58 附录1 58 附录2 60 28 绪论 随着经济全球化,科学与发展已成为当今的主题。在中国软件行业日益进步的今天,如何利用这些资源来帮助减轻医生和病人的负担,让病人能够尽快就医。因而设计一个好的门诊收费管理系统,能提高医院的社会效益与经济效益。系统是基于C#语言,前台利用了Visual Studio 2005作为开发工具,数据库利用了SQL Server 2005作为数据源来设计本系统。门诊收费管理系统主要是挂号收费和门诊业务处理。病人必须先到门诊部挂号,取得挂号单后找医生看病,然后拿处方划价,最后取得药品或接受治疗。 课题背景 课题来源 现在有很多老百姓一提到去大医院看病,首先想到的就是“看病难”问题。尤其是在门诊,“三长一短”的现象普遍存在,即挂号时间长、候诊时间长、取药时间长,而诊疗时间短。这种情况越严重就越容易使患者滋生不满情绪,进而影响到医疗行业的声誉。鹤矿集团妇婴医院门诊量的快速增加给医院带来了发展机遇,但同时也使医院管理和服务面临着严峻考验。 现有系统运行情况 鹤矿集团妇婴医院过去所有的收费资料都是用操作繁琐复杂而且功能单一的收费系统进行记录管理的,原系统仅包括门诊业务、门诊操作员费用结账、就诊信息综合查询、门诊收款票据查询、患者费用查询、更改口令等基本功能,而挂号收费、医院门诊结算管理、医疗费分科分项统计等业务还需要人工完成。为了提高医院的工作效率,也为了广大患者能够节约更多宝贵的时间,原系统已经不能满足医院的需要,所以开发一个操作简单而且功能完善的系统来适应这些工作是非常有必要的。 本系统开发的目的和意义 系统开发的目的 系统实施后,应能集中对患者各项收费信息进行管理,实现了医疗事业要面向现代化,面向未来的指导思想,是门诊收费管理走向现代化的有力工具,也给医疗及发展事业带来很大的推动力。 系统开发的意义 门诊收费管理信息化,不仅可以简化传统人工手动的管理模式,使医院管理人员能够方便地对门诊收费进行全面管理,更重要的是利用计算机的技术可以使门诊收费管理规范化、制度化、数字化、提高管理水平、降低管理成本、减轻工作强度、提高工作效率,使医院以高效率运转。计算机技术在医院中的应用顺应了我国的国情,实现了医疗事业要面向现代化,面向未来的指导思想,是医院管理走向现代化的有力武器。 系统设计思想 总体设计思想 一个方便用户使用的软件应该具备软件体积小,操作界面友好,基本功能稳定,运行速度较快,通过计算机技术及网络技术结合开发出客户端与服务器端,以便方便快捷清晰的进行数据传输和简易通讯功能。 实用性:系统以用户需求为目标,以方便用户为原则。根据用户实际的需求情况,度身订造一套先进的局域网数据传输,从用户角度出发尽可能的方便用户使用,满足基本的用户需要。 先进性:本设计将充分应用现有成熟的计算机技术、软件开发技术。以Microsoft Visual Studio 2005为主要开发环境,其优秀的编码体制和强大的编译器是此系统的强力支柱。 高可靠性:一个实用的系统同时必须是可靠的,本设计通过软件的优化选型,可保证系统数据的正确性。 高安全性:在设计中,将充分利用网络软件提供的各种安全措施,既可以保证用户共享资源, 同时也可保证关键数据的安全性。 采用标准技术:本系统的所有设计遵循国际上现行的标准进行,以提高系统的开放性。 本系统设计的创新点 鹤矿集团妇婴医院过去所有的收费资料都是用操作繁琐复杂而且功能单一的收费系统进行记录管理的,门诊挂号和费用结算等业务还需要人工完成。为了提高医院的工作效率,我在原有系统的基础上增加了挂号收费、医院门诊结算管理、医疗费分科分项统计和票据重打印等功能。系统在设计时,充分考虑系统运行的智能性,在使用系统一段时间后,系统可以适应于任何局域网。该设计以方便未来业务的扩展和系统扩充为目标,系统要求能够方便的升级,充分保护系统的投资。 可行性分析 对于一项较大的软件工程,首先进行可行性分析是值得的。可行性分析实质是大大压缩和简化了的分析和设计过程,主要是在较高层次上以较抽象的方式进行,其目的是在尽可能短的时间内以最小的代价确定该项目是否能够开发、是否值得开发。 综合考虑医疗事业的高速发展和医院信息化发展过程中出现的各种情况,结合鹤岗市鹤矿集团妇婴医院的实际。门诊收费管理系统实施后,应能够达到以下目标: 门诊收费管理信息化,可随时掌握患者的交费情况。 提供快速、准确的门诊收费的最新信息。 界面友好美观,操作简单易行,查询灵活方便。 通过系统实施,可提高门诊收费的管理水平。 系统维护方便可靠,有较高的安全性,满足实用性、先进性的要求。 业务流程图 根据该院的具体情况,业务可分为两类,第一类是收费业务,主要负责收费处理,第二类是费用结算业务,可对指定操作员当天所收费用进行结算,还可对某时间段内医院门诊费用进行结算。 1(收费业务流程描述 (1)已存在药品价格变动处理:医院已存在药品的价格可能因厂家对药品成分、包装等成本的改变而发生变化,因此必须对此情况的发生进行及时登记,以便生成有效的缴费条目。 (2)已存在诊疗价格变动处理:医院已存在诊疗的价格可能因厂家对诊疗包装等成本的改变而发生变化,因此必须对此情况的发生进行及时登记,以便生成有效的缴费条目。 (3)已存在服务价格变动处理:医院已存在服务的价格可能因医院对医疗器械等成本的改变而发生变化,因此必须对此情况的发生进行及时登记,以便生成有效的缴费条目。 (4)建立挂号患者数据档案:录入挂号患者信息,此业务是患者费用生成的前置条件。 (5)建立患者冲红数据档案:录入患者冲红信息,与患者基本信息进行整合生成患者费用。 (6)建立新药品费用标准:录入新药品的基本信息以及收费标准,与患者基本信息进行整合生成患者药品缴费条目。 (7)建立新诊疗费用标准:录入新诊疗的基本信息以及收费标准,与患者基本信息进行整合生成患者诊疗缴费条目。 (8)建立新服务费用标准:录入新服务的基本信息以及收费标准,与患者基本信息进行整合生成患者服务缴费条目。 (9)票据发放:财务管理员在收费之前给操作员发放开票票据。 (10)患者缴费处理:对患者已缴的费用条目进行记录。 (11)打印缴费票据:对患者已缴的费用进行打印缴费,以此作为缴费凭证。 收费业务流程如图2-1所示。 挂号室门诊收费部药局门诊科室 患者挂号情患者项目费患者冲红费药品收费标诊疗收费标服务收费标况用信息用信息准准准 财务部挂号意向 患者费用信收费票据息 门诊操作缴费条目患者员 缴费凭证票据 图2-1 收费业务流程图 2(费用结算业务流程描述 该系统可对指定操作员当天所收费用进行结算,主要包括挂号费用结算、药品费用结算、诊疗费用结算、服务费用结算、医保内费用结算、实收金额结算、冲红结算、费用汇总。该系统也可对某时间段内医院门诊费用进行结算,主要包括该时间段内挂号费用结算、药品费用结算、诊疗费用结算、服务费用结算、医保内费用结算、实收金额结算、冲红结算、费用汇总。 费用结算业务流程如图2-2所示。 结算报表 结算时间段财务部负医院领导通知单责人 操作员当天结算时间段财务管理结算报表通知单人员 结算结果报门诊操作图2-2 费用结算业务流程图 表员 本系统可行性分析 新系统的目标确定后,可以从经济可行性、技术可行性和运行可行性三个方面对能否实现新系统目标进行可行性分析。 经济可行性 估算新系统的开发费用和今后的运行、维护费用,估计新系统可以使医院的管理大大提高,并将费用与效益进行比较。系统的效益可以从医院利益和社会效益两方面考虑。对于门诊收费管理系统则应着重分析其社会效益。例如,系统运行后可以提供哪些以前无法及时提供的信息,用户查询和使用信息的方便程度提高多少、速度增加了多少,对于管理人员进行决策提供了多少帮助等等。下面从以下几个方面对系统的经济可行性进行具体的分析: 1(系统初期投资 系统初期投资如表2-1所示。 表2-1 鹤矿集团妇婴医院门诊收费管理系统初期投资 序号 项目 人工(人?日) 单价(元) 合计(元) 1 3 200 600 需求分析 2 10 200 2,000 总体设计 3 5 200 1,000 门诊业务子系统详细设计 4 2 100 200 信息查询子系统详细设计 5 10 200 2,000 工程实际成本数据库实现 6 8 200 1,600 编码实现 7 5 200 1,000 单体测试 8 5 200 1,000 系统集成测试 9 3 200 600 说明手册编制 10 10,000 合计 2(货币的时间价值 系统货币时间价值如表2-2所示。 表2-2 鹤矿集团妇婴医院门诊收费管理系统货币时间价值 年份 将来值(万) (1+i)n 现在值(万) 累计的现在值(万) 1 0.6 1.05 0.5714 0.5714 2 0.6 1.1025 0.5442 1.1156 3 0.6 1.1576 0.5183 1.6339 4 0.6 1.2155 0.4936 2.1275 5 0.6 1.2763 0.4701 2.5976 3(投资回收期 鹤矿集团妇婴医院门诊收费系统开发成功后,第一年可以赚得0.5714万元,比投资少0.4286万元。第二年可以赚得0.5442万元。 即:0.4286/0.5442=0.7876年 1+0.7876=1.7876年 4(纯收入 2.5976-1=1.5976(万元) 当然,如果想要在五年后得到预计的纯收入,那么首先就应拿出初期投资的1万。而且考虑到开发本系统将为以后带来的利益,拿出1万来进行门诊收费管理系统的开发,是绝对必要。经过以上分析,鹤矿集团妇婴医院门诊收费管理系统的开发是可行的。 技术可行性 根据该系统目标来衡量所需的技术是否具备,一般可从硬软件的性能要求、环境条件、 操作人员水平和数量等方面去考虑和分析。 考虑到系统实施的可行性,在软件方面选择了如今较流行的Microsoft Visual Studio 2005来进行开发管理平台的设计,使用SQL Server数据库存储数据。 在硬件方面,则选择空间较大,只要是PentiumIII系列及以上的计算机,内存在256M以上,硬盘在30MB,都可以满足系统的开发需要~当然,硬件的配置越高,系统的开发与运行会更流畅。考虑到如今的家用或商用电脑硬件的整体配置水平,系统在硬件方面是可行的。 在软件方面,由于Microsoft Visual Studio 2005 和 SQL Server 都两个非常成熟的开发工具,无论在安全性、可用性、可靠性方面都毫无置疑,因此软件方面是可行的。 运行可行性 在现今社会,顺着信息化和计算机技术的高度发展,越来越多的医院意识到信息化是提升管理效率不可缺少的重要步骤。鹤矿集团妇婴医院的医生都是接受过高等管理教育的人,他们深知现代化的管理方法对医院的重要性。而对于将要代替手工管理医院门诊收费的门诊收费管理系统,配备现代化的管理思想更是必不可少的。所以医院的领导者在给予系统充分的开发资金的基础上,更是将现代化的管理思想融入其中,使其最终成为具有现代化管理方法的管理系统~经过以上分析,运行方面是可行的。 本章小结 可行性分析主要是确定系统能否开发,是否值得开发。开发人员已从经济上、技术上和运行上分析了新系统的每一个解决方案,明确了系统的目标。因此本系统具有一定的开发前景。 需求分析 需求分析是指开发人员通过细致的调查分析,详细、准确和完整地理解用户需要什么样的软件,将用户非形式的的需求陈述转化为完整的需求定义,再将需求定义转换成相应的需求规格说明的过程。简而言之,需求分析就是利用各种方法、技术和工具等,详细、准确和完整地搞清楚系统必须“做什么” 。通常,把一整套的需求分析方法、技术和工具等的集合称为建模方法。 在可行性分析阶段已经粗略地了解了用户的需求,并提出了可行的解决方案。但可行性分析的目标是在短时间内确定是否存在可行的系统方案,因而,可行性分析在分析用户需求时会忽略许多细节,没有准确、完整地回答系统必须“做什么”这个问题。可行性分析阶段的有关结果是需求分析的出发点,开发人员应仔细研究这些结果。 门诊收费管理系统的需求分析 管理信息系统是一个由人、计算机及其他外围设备等组成的能进行信息的收集、传递、存贮、加工、维护和使用的系统,其主要任务是最大限度的利用现代计算机及网络通讯技术加强企业的信息管理,目前,企业的计算机网络已成为企业进行技术改造及提高企业管理水平的重要手段。MIS系统的最终目的是使管理人员及时了解公司现状,把握将来的发展路径。与传统的管理系统相比,在MIS中,处理的对象是抽象成数据的信息,因此,MIS有着自己的巨大优势。因此,必须用行之有效的方法对软件需求进行严格的审查验证。 需求分析过程是整个系统开发的重要阶段,分析的成功与否,决定着整个系统功能的完善性以及稳定性。在该阶段需求分析人员需要确定整个产品的功能要求,并且将现实事物抽象成对象并建模。 数据流图 经过用户和开发人员密切配合,充分交流,借助各种建模方法,详细、准确弄清了该系统的基本功能包括缴费、冲红、结算、查询和统计等几个方面。系统顶层数据流图如图3-1所示。 门诊操作员医院领导 D1-16 结算结果报表 D1-08D1-14 患者基本信息患者基本信息P1-04D1-01D1-11打印结算时间段患者基本信息 D1-06结算结果汇总P1-01P1-07P1-03P1-02患者费用处理缴费管理汇总结算信息管理 D1-10已缴费用信息D1-13已缴费用信息D1-02查询结果集D1-15查询结果集已处理的结算时间段满足条件D1-09患者基本信息D1-05患者信息D1-12患者基本信息患者基本信息查询结果集 D1-07 变动后的患者信息P1-06已缴P1-05患者费用信息基本信息 查询查询 D1-03D1-04已交费用信息患者基本信息 F1-01 患F1-02 患图3-1 系统顶层数据流图 者已收费者基本信对系统顶层数据流图中缴费管理模块进行扩展,如图3-2所示。 用表息表 P2-01患者P2-02缴费基本信息处理D21-01查询D21-02D21-03患者基本信息患者应交费用患者已交费用信息 F2-01已缴费信息门诊操作员表 D21-08D21-07D21-04患者基本信息P2-05患者基本信息D21-09待打印患者已交费用信息患者基本患者基本信息信息导入 D21-12P2-03票据已生成的患者管理挂号费用信息P2-06P2-04 D21-11患者挂号生成挂号患者挂号费用D21-06信息查询费用信息交费信息票据D21-05D21-10交费信息报表患者挂号费用 F2-02 患者挂号信患者财务部负责人图3-2 缴费管理数据流图 息表 数据字典 数据字典的作用是在软件分析和设计的过程中给人提供关于数据的描述信息。它主要是对数据流图中的数据流、处理逻辑、外部实体、数据存储和数据项等方面进行具体的定义。数据流程图配以数据字典,就可以从图形和文字两个方面对系统的逻辑模型进行完整的描述。 数据项定义 单一数据项是同时相关的只有一个记录的数据单元的集合。经过与用户沟通,系统顶层数据项定义如表3-1所示。 表3-1 系统顶层数据项定义 编号 名称 别名 类型 长度 I01-01 Pa_patientid Varchar 挂号编号 20字节 I01-02 Pa_patientname Varchar 患者姓名 30字节 I01-03 Pa_patientsex Char 患者性别 4字节 I01-04 Pa_clinicid Varchar 门诊科别编号 20字节 I01-05 Pa_registerid Varchar 挂号类别编号 20字节 I01-06 Pa_userid Varchar 操作员编号 20字节 I01-07 Pa_registertime Datetime 挂号时间 I01-08 Bi_billid Varchar 门诊票据编号 20字节 I01-09 Bi_menuid Varchar 项目类别编号 20字节 I01-10 Bi_itemid Varchar 详细项目编号 20字节 I01-11 Bi_itemprice Money 详细项目单价 8字节 I01-12 Bi_billtime Datetime 交费时间 I01-13 Up_updateid Varchar 冲红票据编号 20字节 I01-14 Up_updateamount Money 冲红金额 8字节 I01-15 Bil_amount Money 应收金额 8字节 I01-16 Bil_amount1 Money 实收金额 8字节 I01-17 Bil_billtime Datetime 冲红时间 I01-18 In_insuranceid Varchar 医疗卡号 20字节 I01-19 In_insurancepwd Varchar 医疗卡密码 20字节 I01-20 In_amount Money 卡内余额 8字节 I01-21 In_username Varchar 用户名 30字节 数据流定义 数据流是指把待传送数据看成‖流‖,每个字节都要通过某种方式依次确认以保证流中所有字节的顺序。 数据流编号:D1—01 数据流名称:结算时间段 数据流来源:门诊操作员 数据流去向:P1-03 数据流组成: I01-05+I01-07+I01-09+I01-10+I01-11+I01-12+I01-16+I01-17+I01-18+I01-19+I01-20+I01-21 数据流编号:D1—02 数据流名称:已经处理的结算时间段 数据流来源:P1-05 数据流去向:P1-03 数据流组成: I01-05+I01-07+I01-09+I01-10+I01-11+I01-12+I01-15+I01-16+I01-17+I01-18+I01-19+I01-20+I 01-21 数据流编号:D1—03 数据流名称:患者基本信息 数据流来源:F1-02 数据流去向:P1-05 数据流组成:I01-01+I01-02+I01-03+I01-04+I01-05+I01-06+I01- 07+I01-08+I01-09 数据流编号:D1—04 数据流名称:已交费用信息 数据流来源:F1-01 数据流去向:P1-06 数据流组成:I01-05+I01-10+I01-11+I01-14+I01-15 数据流编号:D1—10 数据流名称:已缴费用信息查询结果集 数据流来源:P1-06 数据流去向:P1-01 数据流组成:I01-05+I01-10+I01-11+I01-14+I01-15 本章小结 需求分析的结果定义了待开发系统的范围,即必须“做什么”是后续开发活动的基础。经过用户和开发人员密切配合,充分交流,借助各种建模方法,详细、准确弄清了该系统的基本功能包括缴费、冲红、结算、查询和统计等几个方面。在此过程中,开发人员对用户提出的各项要求应认真分析,有义务说服用户对不合理要求的拒绝。此外,依据项目特点和开发环境的支持强弱,开发人员应选择合适的建模方法来弄清系统必须“做什么” 。 总体设计 在需求分析阶段,软件系统必须“做什么”已详细确定下来。接下来的工作便是针对有关需求着手解决“如何做”的问题。 从工程管理的角度来看,软件设计通常分为两步,即总体设计和详细设计。总体设计的基本目的是回答“概括地说,软件系统应如何实现”这一问题。总体设计的关键是确定软件的总体结构,即确定软件系统的组成成分(子系统或模块)以及各组成成分之间的相互关系。详细设计是对总体设计结果的进一步细化,其主要任务是确定软件系统各组成成分内部的数据结构和算法的过程。对于大型数据处理软件系统的设计而言,数据库设计非常重要。 系统模块总体设计 利用层次图来表示系统中各模块之间的关系。层次方框图是用树形结构的一系列多层次的矩形框描绘数据的层次结构。树形结构的顶层是一个单独的矩形框,它代表完整的数据结构,下面的各层矩形框代表各个数据的子集,最底层的各个矩形框代表组成这个数据的实际数据元素(不能再分割的元素)。 随着结构的精细化,层次方框图对数据结构也描绘得越来越详细,这种模式非常适合于需求分析阶段的需要。从对顶层信息的分类开始,沿着图中每条路径反复细化,直到确定了数据结构的全部细节为止。 模块总体介绍 本系统一共分为三个模块,每个模块之间虽然在表面上是相互独立的,但是在对数据库的访问上是紧密相连的,各个模块访问的是同一个数据库,只是所访问的表不同而已。每个模块 的功能都是按照在调研中搜集的资料进行编排制作的。 依据上述功能的分析,系统中模块分别为:门诊业务管理、信息查询、系统管理。 各功能模块详细介绍 各功能模块的具体功能如下: 门诊业务管理:包括挂号收费、门诊业务、门诊单据冲红、门诊操作员费用结账、医院门诊结算管理。 信息查询:包括就诊信息综合查询、门诊收款票据查询、患者费用查询、患者按病种查询、医疗费分科分项统计。 系统管理:包括更改口令、票据重打印。 系统功能结构图如图4-1所示。 鹤矿集团妇婴医院门诊收费系统 门诊业务管理信息查询系统管理 门医医就门诊患疗门院诊诊患操者费票挂门诊门信收者口作按分据号诊单诊息款费令员病科重收业据结综票用更费种分打冲算合据查费务改用查项印管查查红询 结统询理询询账计图4-1 系统功能结构图 数据库设计 数据库设计概述 数据库设计是建立数据库及其应用系统的技术,是信息系统开发和建设中的核心技术,具体的说,数据库设计是一个给定的应用环境,构造最优的用户的应用需求(信息要求和处理要求)。这个问题是我们在进行软件开发时期的主要研究方向。 数据库设计应该和应用系统设计相结合,也就是说,整个设计过程中要把结构(数据)设计和行为(处理)设计密切结合起来。 由于信息结构复杂,应用环境多样,在相当长的一段时间内数据库设计主要采用手工试凑法。使用这种方法与设计人员的经验和水平有直接的关系,数据库设计成为一种技艺而不是工程技术,缺乏科学理论和工程方法的支持,软件的质量难以保证,常常是数据库运行一段时间后又不同程度地发现了各种问题,增加了系统维护的代价。十余年来,人们努力探索,提出了各种设计准则和规程,都属于规范设计法。 数据分析 数据分析过程同数据库的逻辑结构和物理结构密切相关,需要确定、编制、组织、筛选应用程序所使用的信息。它以一种能够分析和分类的方式来捕获用户的所有信息,这使得某一模型可以直接转化成数据库结构。 我们使用一种信息建模技术,这种技术是通过实体、关系、属性三种基本对象来定义信息。实体是需要维护和使用的相关特性的集合体;属性是实体的特性或特征;关系是实体之间的 联系,关系为实体记录(实例)之间的联系和交互作用方式建立了模型。 要确定实体和关系的性质,用户必须确定单个实体和他们相关的属性。为每个对象定义一个完整的与商业相关的描述以及他单独使用的要求,这也包括确定此实体是否使用应用程序的永久需求,每种关系的基本定义使用了商业定义和与关系相连接的需求。 在本系统中患者基本信息表中的挂号编号是该患者在医院就诊的唯一编号。在患者费用表中挂号编号作为外键和患者票据编号共同组成该表主键。在患者冲红信息表中挂号编号也作为外键和冲红票据编号共同组成该表主键。当操作员想要录入患者费用信息和患者冲红信息时,需要首先输入患者挂号编号,如果挂号编号不存在就不能录入信息,即把患者基本信息表与患者费用表和患者冲红信息表建立联系。单独实体的属性被组织起来,用户就能够开始以某一种组织方式来给实体分类。用户必须通过关系,来为实体分组的方式确定分类模式,这是抽象化的初始层,或者说是通过隐藏模糊的信息来提高对分析的理解,通过将数据分类成组,就产生了相关分组的不同类型,这样更加易于观察和分析。 数据库的详细设计 在设计数据库时,应考虑以下事项: 数据库的用途及该用途将如何影响设计,应创建符合用途的数据库计划。 数据库规范化规则,防止数据库设计中出现错误。 对数据完整性的保护。 数据库和用户权限的安全要求。 应用程序的性能需求,设计数据库时必须利用 Microsoft SQL Server 2005 中能够提高性能的功能。对于性能而言,在数据库大小和硬件配置之间权衡也是很重要的。 数据库维护。 操作员信息数据库E-R如图4-2所示。 PK 操作员编号编号1..n1交纳患者交费信息 操作员姓名门诊科别信息 操作员密码1PK 信息编号PK 门诊科别编号FK 票据编号1..n 门诊科别名称生成FK 挂号编号属于FK 项目类别1录入FK 项目名称1挂号类别信息FK 项目单价交费票据11..nPK 挂号类别编号 项目数量1..nPK 票据编号 挂号类别名称FK 项目单位PK 挂号编号1..n 金额 项目金额患者选择 应收金额FK 门诊科别1..nPK 挂号编号 实收金额 交费时间 患者姓名FK 操作员姓名FK 操作员姓名 患者性别 交费时间 患者年龄11..n 患者身份证号冲红患者冲红信息1..n交纳 患者现地址PK 票据编号项目类别信息FK 门诊科别1PK 挂号编号 医生诊断 1PK 项目类别编号 冲红金额FK 挂号类别1 项目类别名称FK 操作员姓名FK 操作员姓名 冲红时间 挂号时间1拥有属于属于属于11..n1..n1..n医保卡信息 药品信息诊疗信息服务信息PK 医保卡号PK 药品编号PK 诊疗编号PK 服务编号图4-2 数据库E-R图 医保卡密码 药品名称 诊疗名称 服务名称 用户名根据鹤矿集团妇婴医院的实际情况,本系统的数据库命名为:db_OS数据库,用来存储患者 药品单价 诊疗单价 服务单价 医保卡内余额 药品单位 诊疗单位 服务单位 及其相关费用的数据信息。 db_OS数据库中共分12张信息表。患者基本信息表如表4-1所示。 表4-1 tb_patient(患者表) 序号 英文名 中文名 类型 长度(字符) 1 Patientid Varchar(20) 20 挂号编号 2 Patientname Varchar(30) 30 患者姓名 3 Patientsex Char(4) 4 患者性别 4 Patientage Char(4) 4 患者年龄 5 Patientidentity Varchar(30) 30 患者身份证号 6 Patientaddress Varchar(50) 50 患者地址 7 Clinicid Varchar(20) 20 门诊科别编号 8 Diagnosis Varchar(50) 50 医生诊断 9 Registerid Varchar(20) 20 挂号类型编号 10 Userid Varchar(20) 20 操作员编号 11 registertime Datetime 挂号时间 患者费用信息表如表4-2所示。 表4-2 tb_bill(患者费用表) 序号 英文名 中文名 类型 长度(字符) 1 Billid Varchar(20) 20 票据编号 2 Patientid Varchar(20) 20 挂号编号 3 Menuname Varchar(30) 30 项目类别 4 Itemname Varchar(30) 30 项目名称 5 Itemprice Money 项目单价 6 Itemquantity Varchar(20) 20 项目数量 7 Itemunit Varchar(10) 10 项目单位 8 Itemtotal Money 项目总金额 9 Clinicname Varchar(20) 20 门诊科别 10 Billtime Datetime 交费时间 11 Username Varchar(30) 30 操作员姓名 患者冲红信息表如表4-3所示。 表4-3 tb_update(患者冲红表) 序号 英文名 中文名 类型 长度(字符) 1 Updateid Varchar(20) 20 冲红票据编号 2 Patientid Varchar(20) 20 挂号编号 续表4-3 3 Updateamount Money 冲红金额 4 Username Varchar(30) 30 操作员姓名 5 Updatetime Datetime 冲红时间 药品信息表如表4-4所示。 表4-4 tb_medicine(药品信息表) 序号 英文名 中文名 类型 长度(字符) 1 Medicineid Varchar(20) 20 药品编号 2 Medicinename Varchar(30) 30 药品名称 3 Medicineprice Money 8 药品单价 4 Medicineunit Char(10) 10 药品单位 本章小结 总体设计阶段,在需求分析的基础之上规划出了系统的功能模块,主要包括门诊业务管理、信息查询和系统管理三大模块,并在此分析基础上设计出了具体的、可以满足本系统全部需求的数据库,共生成12张数据信息表,包括患者基本信息表、患者费用信息表、患者冲红表等。由于数据库在设计中有非常重要的作用,所以在开发过程中,在考虑数据库上的时间较多。 详细设计 总体设计确定了软件系统的总体结构,详细设计则对总体设计结果进一步细化,给出目标系统的精确描述,以便在编码阶段直接翻译成计算机上能够运行的程序代码。 详细设计虽然并不是用计算机程序设计语言编程,而是要细化总体设计的有关结果,形成软件详细规格,但其与编程思想、方法和风格等还是密切相关的。为了保证软件质量,软件详细规格既要正确,又要清晰易读,便于编程实现和验证。 系统运行平台设置 硬件环境 运行本系统最低需求:台式计算机(PC)一台,处理器Pentium III800,内存256M,硬盘空间1G。 软件环境 本系统使用Windows XP操作系统,现有的开发工具有很多种类,前台采用了当前流行的面向对象的开发工具Visual Studio 2005来完成整个系统的设计,后台数据库使用了便利性较好、实用性较强的SQL Server 2005作为数据源。 开发工具简介 5.2.1 Visual Studio 2005 介绍 Visual Studio .NET 2005是微软公司推出的一套完整的开发工具,用于生成ASP Web应用程序、XML Web Services、桌面应用程序和移动应用程序。Visual Basic .NET、Visual C++ .NET、Visual C#.NET 和Visual J#.NET全都使用相同的集成开发环境(IDE),该环境允许它们共享工具并有助于创建混合语言解决方案。另外,这些语言利用了.NET Framework 的功能,此框架提供对简化了ASP Web应用程序和XML Web Services开发的关键技术的访问。从而可以使程序开发人员集中精力,高效地完成任务。 5.2.2 SQL Server 2005 介绍 SQL Server 2005是一种采用T-SQL语言,基于C/S模式的关系型数据库管理系统。SQL Server 2005存储和管理数据有以下优点: 每个数据项都存储在中央位置,所有用户都可在这个位置使用它们。 各个客户端上不单独存储数据项复本,从而消除了因用户不得不确保使用的信息相同所带来的麻烦。系统不需要确保使用当前值更新所有数据复本,因为中央位置仅有一个复本。 可以在服务器上一次性定义业务和安全规则,并对所有的用户平等执行。 可以在数据库内通过使用约束、存储过程和触发器来强制执行规则。还可在服务器应用程序中执行规则,因为这些应用程序也是许多瘦客户端访问的中央资源。 关系数据库服务器只返回应用程序所需要的数据,优化了网络流量。 最大程度地降低硬件成本,由于数据不是存储在每个客户端上,客户端不必耗费磁盘空间来存储数据。客户端无需在本地增加管理数据的功能,同时,服务器不需将处理能力耗费在显示数据上。 可以配置服务器以优化检索数据所需的磁盘输入/输出容量,配置客户端以优化从服务器检索数据的格式。 可以将服务器存储在一个相对安全的位置,并配备如不间断电源供应系统这样的设备,这比完全保护每个客户端更经济。 维护任务(例如备份和恢复数据)得到简化,因为这些任务都可以集中在中央服务器上执行。 系统主界面设计 本系统的主界面整体结构为上下结构,上面部分利用菜单显示系统的全部功能,下面部分显示当前操作人员名称和登录时间。菜单栏中包括门诊业务管理、信息查询、系统管理和退出四大模块。门诊业务管理模块包括挂号收费、门诊业务、门诊单据冲红、门诊操作员费用结帐和医院门诊结算管理五个子模块。信息查询模块包括就诊信息综合查询、门诊收款票据查询、患者费用查询、患者按病种查询和医疗费分科分项统计五个子模块。系统管理模块包括口令更改和票据重打印两个子模块。系统主界面如图5-1所示。 鹤矿集团妇婴医院门诊收费管理系统 信息查询 系统管理 退出门诊业务管理 挂号收费就诊信息统合查询口令更改退出系统门诊业务 门诊收款票据查询票据重打印 门诊单据冲红 患者费用查询 门诊操作员费用结账患者按病种查询 医院门诊结算管理医疗费分科分项统计 ||操作用户:开心 ||登录时间:2008年12月27日 22:13:14 图5-1 系统主界面 门诊业务管理模块详细设计 门诊业务管理模块主要包括挂号收费、门诊业务、门诊单据冲红、门诊操作员费用结帐和医院门诊结算管理五个子系统。 挂号收费 实现目标 窗体显示时,操作员点击“添加”按钮,在挂号编号文本框中自动生成一个患者挂号编号,这个编号即为患者本次就医的唯一编号。操作员通过文本框输入患者基本信息及挂号信息,当操作员点击“保存”按钮时,将所添入信息保存到患者信息表中,并通过数据列表列出系统现有的患者信息。操作员点击“修改”按钮,便可以通过文本框修改该患者挂号信息。操作员检查患者信息无误后,便可进行票据打印,点击“打印”按钮,在窗体上显示一张挂号收费的水晶报表。如操作员点击“打印”按钮后,则不可进行患者信息修改。挂号收费程序流程图如图5-2所示。 开始 输入挂号患者基本信息 保存信息 T修改否? F 显示打印 结束 图5-2 挂号收费程序流程图 挂号收费窗体如图5-3所示。窗体控件信息列表如表5-1所示。 图5-3 挂号收费 实现过程 单元名:register 窗体名:frm_register 表5-1 挂号收费主要控件信息列表 名称 主要属性设置 作用 txt_patientid ReadOnly=True 显示挂号编号 txt_patientname / 输入/显示患者姓名 续表5-1 cbox_sex / 性别选择下拉列表 txt_identity / 输入/显示患者身份证号 txt_address / 输入/显示患者现住址 cbox_clinicname / 门诊科别选择下拉列表 cbox_registername / 挂号类型选择下拉列表 dgv_patient ReadOnly=True 显示患者信息 tsbtnAdd / 显示患者挂号编号 tsbtnSave / 保存患者挂号信息 tsbtnEdit / 修改患者挂号信息 tsbtnPrint / 显示挂号收费报表 tsbtnExit / 退出挂号收费窗体 门诊业务处理 门诊业务程序流程图如图5-4所示。 开始 读取患者信息 F医保内否? T 输入医保卡信息 输入患者挂号编号 F患者存在否?提示患者不存在 FT T显示患者基本信息重新输入否? 输入患者费用项目 显示患者费用信息 图5-4 门诊业务程序流程图 显示打印1(实现目标 窗体显示时,操作员点击“添加”按钮,在票据编号文本框中自动生成票据编号。操作员通过文本框输入患者挂号编号,如果该挂号编号存在,则将在姓名、性别、年龄、身份证号、结束 现住址、门诊科别文本框中自动显示该患者的信息。在医生诊断文本框中输入医生诊断,点击“保存”按钮,则将医生诊断信息保存到患者信息表中,并提示“保存成功” 。在类别下拉列表中选择项目类别,在项目下拉列表中选择详细项目名称,此时在单价文本框中自动显示操作员所选详细项目的单价,在数量文本框中输入所要购买详细项目的数量,在总计的标签中显示该详细项目的合计价格。点击“添加”按钮,通过数据列表列出该患者此次购买信息。点击“打印”按钮,在窗体上显示一张患者费用报表。门诊业务如图5-5所示。窗体控件信息列表如表5-2所示。 图5-5 门诊业务 实现过程 单元名:service 窗体名:frm_service 表5-2 门诊业务主要控件信息列表 名称 主要属性设置 作用 txt_billid ReadOnly=True 显示票据编号 txt_patientid / 输入/显示患者挂号编号 txt_diagnosis / 输入/显示医生诊断 cbox_menuname / 项目类别选择下拉列表 cbox_itemname / 详细项目名称选择下拉列表 续表5-2 txt_itemprice / 输入/显示详细项目单价 dgv_service ReadOnly=True 显示患者费用信息 tsbtnAdd / 显示票据编号 tsbtnSave / 保存患者费用信息 tsbtnPrint / 显示门诊业务报表 tsbtnExit / 退出门诊业务窗体 门诊单据冲红 门诊单据冲红程序流程图如图5-6所示。 开始 输入患者挂号编号 F提示出错患者存在否? T T显示患者姓名重新输入否? F输入患者冲红金额 显示打印 结束 图5-6 门诊单据冲红程序流程图 实现目标 窗体显示时自动在冲红票据编号文本框中显示票据编号,操作员通过文本框输入患者挂号编号,如果此编号存在,则在姓名文本框中自动显示对应患者姓名。在冲红下拉列表中选择冲红方式,在发生金额文本框中输入冲红金额。操作员点击“保存”按钮,则将患者冲红信息保存到冲红信息表中,并提示“保存成功” 。点击“打印”按钮,在窗体上显示一张患者冲红报表。门诊单据冲红如图5-7所示。窗体控件信息列表如表5-3所示。 图5-7 门诊单据冲红 实现过程 单元名:updatemanage 窗体名:frm_updatemanage 表5-3 门诊单据冲红主要控件信息列表 名称 主要属性设置 作用 txt_updateid ReadOnly=True 显示冲红票据号 txt_patientid / 输入/显示患者挂号编号 txt_patientname ReadOnly=True 显示患者姓名 cbox_update / 冲红类别选择下拉列表 txt_amount / 输入/显示冲红金额 tsbtn_save / 保存患者冲红信息 tsbtn_update / 显示患者冲红报表 tsbtn_exit / 退出门诊单据冲红窗体 门诊操作员费用结账 实现目标 窗体显示时自动显示当前操作员和当期日期,点击“显示”按钮,自动结算当天该操作员所收费用,即在药品、诊疗、服务、医保内、实收金额、冲红、普通挂号、专家挂号、结账金 -8所示。窗体控件信息列表如表5-4所额标签中显示结账信息。门诊操作员费用结账如图5 示。 图5-8 门诊操作员费用结账 实现过程 单元名:usermanage 窗体名:frm_usermanage 表5-4 门诊操作员费用结账主要控件信息列表 名称 主要属性设置 作用 lab_username / 显示当前登录操作员 lab_billtime / 显示当前日期 lab_amount / 显示结算后的结账金额 医院门诊结算管理 实现目标 窗体显示时,操作员选择要结算的时间段,点击“显示”按钮,自动结算该时间段内医院门诊 所收费用,即在药品、诊疗、服务、医保内、实收金额、冲红、普通挂号、专家挂号、 -9所示。窗体控件信息列表如表结账金额标签中显示结账信息。医院门诊结算管理如图5 5-5所示。 图5-9 医院门诊结算管理 实现过程 单元名:hospitalmanage 窗体名:frm_hospitalmanage 表5-5 门诊操作员费用结账主要控件信息列表 名称 主要属性设置 作用 dateTimePicker1 / 结算起始时间选择 dateTimePicker2 / 结算终止时间选择 dgv_bill ReadOnly=True 显示时间段内发生项目信息 lab_amount / 显示结算后的结账金额 信息查询功能设计 信息查询模块主要包括就诊信息综合查询、门诊收款票据查询、患者费用查询、患者按病种查询和医疗费分科分项统计五个子模块。 就诊信息综合查询 实现目标 窗体显示时,操作员通过患者编号文本框输入所要查找的患者挂号编号,点击“查询”按钮,如果该挂号编号存在,则通过数据列表分别列出患者基本信息、患者费用信息、患者冲红信息,如果该挂号编号不存在,则提示“无要查找信息” 。就诊信息综合查询如图5-10所示。窗体控件信息列表如表5-6所示。 图5-10 就诊信息综合查询 实现过程 单元名:multipleLook 窗体名:frm_multipleLook 表5-6 就诊信息综合查询主要控件信息列表 名称 主要属性设置 作用 tstxt1 / 输入/显示患者挂号编号 dgvPatient ReadOnly=True 显示患者基本信息 dgvBill ReadOnly=True 显示患者费用信息 dgvUpdate ReadOnly=True 显示患者冲红信息 tsbtn1 / 查询患者就诊综合信息 tsbtn2 / 退出就诊信息综合查询窗体 医疗费分科分项统计 实现目标 窗体显示时,操作员通过医疗费统计选择下拉列表选择所要统计的项目,通过详细项目选择下拉列表选择所要显示的详细项目,选择起始时间和终止时间,点击“统计”按钮,如果要统计的详细项目存在,则通过数据列表分别列出详细项目的基本信息,并在详细项目的标签 -11所示。窗中显示统计金额。否则提示“无要统计的记录” 。医疗费分科分项统计如图5体控件信息列表如表5-7所示。 图5-11 医疗费分科分项统计 实现过程 单元名:menuAnalyse 窗体名:frm_menuAnalyse 表5-7 医疗费分科分项统计主要控件信息列表 名称 主要属性设置 作用 tscbox1 / 医疗费统计选择下拉列表 cbox1 / 详细项目选择下拉列表 dateTimePicker1 / 统计起始时间选择 dateTimePicker2 / 统计终止时间选择 dgv1 / 显示详细项目信息 lab_medicine1 / 显示统计后的药品金额 lab_gynecology / 显示统计后的妇科金额 系统管理功能设计 系统管理模块包括口令更改和票据重打印两个子模块。 票据重打印 实现目标 窗体显示时,操作员可根据患者票据编号和挂号编号的唯一性进行票据重打印。操作员通过票据编号文本框输入要打印的票据编号,如果该票据编号存在,则在挂号编号文本框中自动显示对应的挂号编号,点击“查询并显示”按钮,即可进行票据重打印。否则提示“无该票据编号” 。票据重打印如图5-12所示。窗体控件信息列表如表5-8所示。 图5-12 费用添加 实现过程 单元名:print 窗体名:frm_print 表5-8 票据重打印主要控件信息列表 名称 主要属性设置 作用 txt_billid / 输入/显示票据编号 txt_patientid ReadOnly=True 显示患者挂号编号 CReportViewer / 显示费用票据报表 更改口令 实现目标 窗体显示时,在当前操作员文本框中自动显示当前登录操作员的姓名,在请输入旧口令、请输入性口令和请再输入一次口令文本框中依次输入口令,点击“确定”按钮,则口令修改完毕。如图5-13所示。窗体控件信息列表如表5-9所示。 图5-13 口令更改 实现过程 单元名:update 窗体名:frm_update 表5-9 口令更改主要控件信息列表 名称 主要属性设置 作用 txt_username ReadOnly=True 显示操作员姓名 txt_useroldpwd PasswordChar=* 输入/显示操作员旧密码 txt_usernewpwd PasswordChar=* 输入/显示操作员新密码 本章小结 详细设计是进行逻辑系统开发的的最后一个阶段,其质量的好坏将直接影响到系统的编码实现。因此,详细设计除了要保证正确性之外,要着重考虑使将来编写出的程序可读性好、易理解、易测试、易维护。 程序流程图是完成详细设计的工具,合理选择和正确使用工具,深入理解和掌握有关设计思想和方法,对搞好详细设计是非常重要的。 系统测试与性能分析 软件测试是通过检查和提供客观证据表明软件已经满足了规定的需求,是确保软件质量和降低软件成本的重要手段,涉及软件的整个生命周期。软件测试是一个周期长、开销大的软件工程活动。一般的软件开发组织要将30%~40%的项目精力投入到测试之中,一些人命攸关的软件(如航空器的飞行控制软件)其测试费用往往更高。如同战役前的艰苦训练以提高部队战斗力、减少战斗中的损失一样,软件测试就是试图以最少的代价发现软件分析、设计和编码中存在的各种不同类型的错误,从而提高软件质量,降低软件成本。软件测试不是打消软件工程师的积极性的过程,而是同软件分析和设计一样,是为了建成高质量的软件,只不过是从不同的侧面进行罢了。 软件测试 经过需求分析、设计和编码等阶段的开发后,得到了源程序,开始进入到软件测试阶段。然而,在测试之前的各阶段中都可能在软件产品中遗留下许多错误和缺陷,如果不及时找出这些错误和缺陷,并将其改正,这个软件产品就不能正常使用,甚至会导致巨大的损失。目前,程序的正确性证明尚未得到根本的解决,因此软件测试仍是发现软件中错误和缺陷的主要手段。 测试是一项很艰苦的工作,其工作量约占软件开发总工作量的40%以上,特别对一些关系到人的生命安全的软件。 测试的基本概念 测试的目的 软件测试的目的是尽可能多地发现软件产品(主要是指程序)中的错误和缺陷。 明确测试的目的是一件非常重要的事,因为在现实世界中对测试工作存在着许多模糊或者错误的看法,这些看法严重影响着测试工作的顺利进行。 有人认为测试是为了证明程序是正确的,也就是说程序不再有错误,事实证明这是不现实的。因为要通过测试来发现程序中的所有错误就要穷举所有可能的输入数据,检查它们是否产生正确的结果。例如,一个需要3个16位字长的整型输入数据的程序,输入数据的所有组合情况大约有3×1014种,若每组数据的测试时间为1ms,那么即使一年365天,每天24小时地测试,也大约需要1万年的时间。 测试用例 要进行测试,除了要有测试数据(或称输入数据)外,还应同时给出该组测试数据应该得到怎样的输出结果,我们称它为预期结果。在测试时将实际的输出结果与预期结果比较,若不同则表示发现了错误。因此测试用例是由测试数据和预期结果构成的。 为了发现程序中的错误,应竭力设计能暴露错误的测试。一个好的测试用例是极有可能发现迄今为止尚未发现的错误的测试用例。一次成功的测试是发现了至今为止尚未发现的错误的 测试。 白盒测试和黑盒测试 测试的关键是测试用例的设计,其方法可分成两类:白盒测试和黑盒测试。 白盒测试是把程序看成装在一只透明的白盒子里,测试者完全了解程序的结构和处理过程。它根据程序的内部逻辑来设计测试用例,检查程序中的逻辑通路是否都按预定的要求正确地工作。 黑盒测试是把程序看成一只黑盒子,测试者完全不了解(或不考虑)程序的结构和处理过程。它根据规格说明书规定的功能来设计测试用例,检查程序的功能是否符合规格说明的要求。 测试步骤 软件测试的主要步骤有单元测试、集成测试和确认测试。 单元测试(Unit Testing) 单元测试也称模块测试。通常单元测试可放在编码阶段,程序员在编写好一个模块后,总会对自己编写的模块进行测试,检查它是否实现了详细设计说明书中规定的模块功能和算法。单元测试主要发现编码和详细设计中产生的错误,通常采用白盒测试。 集成测试(Integration Testing) 集成测试也称组装测试,它是对由各模块组装而成的程序进行测试,主要检查模块间的接口和通信。集成测试主要发现设计阶段产生的错误,通常采用黑盒测试。 确认测试(Validation Testing) 确认测试的任务是检查软件的功能、性能及其他特征与用户的需求一致,它是以需求规格说明书(即需求规约)作为依据的测试。确认测试通常采用黑盒测试。 确认测试产生测试程序是否满足需求规格说明书所列的各项要求,然后要进行软件配置复查,特别是文档是否齐全,各方面的质量是否符合要求等。如果一个软件是为某个客户定制的,那么最后由客户来实施验收测试(acceptance testing),以便客户确认该软件是他所需要的。如果一个软件是作为产品被许多客户使用的话,那不可能为每个客户进行验收测试。大多数软件生产者使用一种Alpha测试和Beta测试的过程,来揭露仅由最终用户才能发现的错误。 本系统测试 软件测试方法从测试人员角度看,可分为手动测试和自动测试。从源代码的角度可分为单元测试和功能测试。从理论定义来分,可分为黑盒测试,白盒测试。 对费用预缴进行黑盒测试,测试目标描述:操作员填写患者挂号编号、类别、项目、数量,并且选择是否进行票据打印,前提假设各项填写信息在格式上完全正确,如果填写的挂号编号相对应的患者存在,则如果此时选择票据打印,并且当手中有票据可供打印,则进行费用预缴操作并且将相应票据进行显示,并提示预缴费用成功信息。反之则不进行预缴操作并且提示当前无可供打印票据提示信息,如果此时没有选择票据打印,则直接进行预缴操作,并提示预缴费用成功信息,如果填写的患者编号没有相对应的患者存在,则不可进行任何操作,并且提示无此患者存在信息。经过上述测试,证明系统是可行的。 本章小结 软件测试是软件开发中的重中之重,没有一点可以马虎的,在项目管理过程中,强调的是每个过程的每一个环节都要进行测试,保证系统在每个阶段可以控制。因为软件测试中考虑的问题基本上是项目管理中需要考虑的问题。具体说,软件测试是事务性的,而项目管理是策略性,一些策略性的东西必须在一些事务性的事务上来实现。软件测试的事务性操作很多,这些操作需要一个良好的心态去对待。必须有一个良好团队合作的精神。 总之,软件开发是一件很辛苦的事,只有在工作中多总结,才能找到符合自己的方式方法,才能在工作中事半功倍。 系统主要功能使用说明 软件测试提供了客观证据表明该系统三大功能模块已经满足了规定的需求,由于使用本系统的人员一般都是非计算机专业人员,所以特选取其中几个重要的功能模块说明其主要功能。 系统登陆步骤 1(启动应用程序。 2(首先输入操作员姓名,然后输入操作员密码密码。如图7-1所示。 图7-1 登录信息输入 3(点击“登录”按钮进行登录验证,如果输入的操作员信息正确,则会出现程序主界面,表明成功登录系统,并在界面的左下角显示当前登录的操作员姓名以及登录的时间,如果输入的操作员不存在或密码错误,则会给出错误提示信息。 门诊业务管理 挂号收费 1(用鼠标选对菜单栏中的“门诊业务管理” 。 2(在弹出的下拉列表中选对“挂号收费”选项卡。 3(在弹出的窗口中输入“姓名” 、“性别” 、“年龄” 、“身份证号” 、“现住址” 、“门诊科别” 、“挂号类型”信息,然后鼠标单击“保存”按钮。效果如图7-2所示。 图7-2 挂号收费 4(用鼠标点击“打印“按钮。效果如图7-3所示。 图7-3 票据打印 5(在弹出的打印窗口中点击“查询并显示”按钮。如图7-4所示。 图7-4 票据打印窗口 门诊业务 1(用鼠标选对菜单栏中的“门诊业务管理” 。 2(在弹出的下拉列表中选对“门诊业务”选项卡。 3(在弹出的窗口中选择“局外”选项卡。 4(在窗口中输入“挂号编号” ,选择“类别” 、“项目”并填写“数量”信息。 5(用鼠标点击“添加”按钮,出现“添加成功”提示框。如图7-5所示。 图7-5 患者费用信息填写 6(用鼠标点击“打印”按钮,则出现数据打印窗口。如图7-6所示。 图7-6 票据打印 在弹出的打印窗口中点击“查询并显示”按钮以进行票据显示。如图7-7所示。 图7-7 票据打印窗口 门诊单据冲红 1(用鼠标选对菜单栏中的“门诊业务管理” 。 2(在弹出的下拉列表中选对“门诊单据冲红”选项卡。 3(在弹出的窗口中输入“挂号编号” 、“冲红项目” 、“发生金额”信息,然后用鼠标点击“保存”按钮。如图7-8所示。 图7-8 患者冲红窗口 4(用鼠标点击“打印”按钮,则出现数据打印窗口。如图7-9所示。 图7-9 票据打印 5(在弹出的打印窗口中点击“查询并显示”按钮以进行票据显示。如图7-10所示。 图7-10 票据打印窗口 门诊操作员费用结帐 1(用鼠标选对菜单栏中的“门诊业务管理” 。 2(在弹出的下拉列表中选对“门诊操作员费用结账”选项卡。如图7-11所示。 图7-11 门诊操作员费用结账窗口 用鼠标点击“显示”按钮,进行费用结账。如图7-12所示。 图7-12 结算窗口 信息查询 患者费用查询 用鼠标选对菜单栏中的“信息查询” 。 2(在弹出的下拉列表中选对“患者费用查询”选项卡。输入要查询的患者编号,鼠标点击 “查询”按钮,进行费用查询 。如图7-13所示。 图7-13 患者费用查询窗口 医疗费分科分项统计 用鼠标选对菜单栏中的“信息查询” 。 在弹出的下拉列表中选对“医疗费分科分项统计”选项卡。在医疗费统计选择下拉列表中选择按何种方式进行统计,选择统计的起止时间,鼠标点击“统计”按钮,进行医疗费统计。如图7-14所示。 图7-14 医疗费统计窗口 结论 本系统是一个面向中小型医院,具有一定实用性的数据库信息管理系统。它主要完成门诊收费的一系列管理,包括交费、冲红、结算、查询和统计等几个方面。本系统采用当前流行的面向对象的开发工具—ASP.NET来完成整个系统的设计,在数据库的设计上利用了Sql Server 2005的便利性和实用性。 系统在设计过程中不可避免地遇到了各种各样的问题,由于整个系统完全都是由个人设计的,有关C#许多细节问题都要靠自己去摸索,加之本人水平有限,并不是完全地理解C#的强大功能,而且还存在着许多不足之处。如: 1(受开发条件和开发时间的限制,本系统只利用了本地数据库SQL Server 2005,它同应用程序处于同一系统中,能存储的数据量也有一定限制,并没有完全发挥出C#其数据库方面的优势; 2(报表打印功能尚不够全面完善,不能实现动态报表; 3(由于时间关系,系统功能实现不够完善,使用不是很方便。 这些都是需要完善的地方,该系统离实际使用也还有相当的距离,需要我进行不断地补充和完善。 致谢 在老师和同学的支持与帮助之下,我顺利地完成了本次毕业设计。在毕业设计的这段日子里,我所获得的知识将是大学期间最珍贵的。 本次毕业设计是在龚丹老师的精心指导下完成的,导师渊博的知识、严谨的治学态度深深的影响着我。她无论在理论上还是在实践中,都给予我很大的帮助,使我的毕业设计逐步地趋于完善。在此期间,我不仅学到了许多新的知识和解决问题的方法,而且也开阔了视野,提高了解决问题的能力。在此,我对导师在毕业设计期间给予的指导和帮助表示衷心的感谢。同时也感谢其他老师在此期间的关怀和帮助,以及学院为我提供良好的毕业设计环境。最后感谢在毕业设计中为我提供帮助的众多益友和同学,以及在设计中被我引用或参考的论著的作者。 再次感谢在本次毕业设计中帮助过我的各界人士~ 参考文献 1 任胜兵,邢琳(软件工程(北京邮电大学出版社,2006:25—42 2 Craig Skibo,Marc Young,Brian Johnson(Working with Microsoft Visual studio 2005(Shanghai World Publishing Corporation,2008:33—37 3 Jean-Luc David,Tony Loton,Erik Gunvaldson(Professional Visual Studio 2005(Wrox, 2006:55—60 4 吴晨,张少波(ASP.NET数据库项目案例导航(清华大学出版社,2006:23—39 5 Hans van Vliet(Software Engineering(Microsoft Press ,2008:44—49 6 南泰电脑,吕文达(精通C#程序设计(清华大学出版社,2006:75—80 7 吴晨,张亮,张静(ASP.NET+SQL Server 数据库开发与实例(清华大学出版社,2006: 69—84 8 郭睿志,张学志(C#+SQL Server项目开发实践(中国铁道出版社,2006:55—76 9 严涛(Visual C#2005程序设计与应用简明教程(清华大学出版社,2004:21—44 10 张敬,宋广军,赵硕(软件工程教程(北京航空航天大学出版社,2006:31—65 11 汪孝宜,胡海璐,米海生(信息系统开发实例精粹(C# 版)(电子工业出版社,2006: 66—79 12 刘甫迎,刘光会,王蓉(C#程序设计教程(第2版)(电子出版社,2006:32—43 附录1 The software life cycle An early definition of software engineering was proposed by Fritz Bauer at the first major conference dedicated to the subject: The establishment and use of sound engineering principles in order to obtain economically software that is reliable and works efficiently on real machines. Although many more comprehensive definitions have been proposed, all reinforce the importance of engineering discipline in software development. Software engineering is an outgrowth of hardware and system engineering. It encompasses a set of three key elements-methods, tools, and procedures-that enable the manager to control the process of software in a productive manner. The classic life cycle paradigm for software engineering sometimes called the ―waterfall model‖, the life cycle paradigm demands a systematic, sequential approach to software development that begins at the system level and progresses through analysis, design, coding, resting, and maintenance. Modeled after the conventional engineering cycle, the life cycle paradigm encompasses the following activities: System engineering and analysis. Because software is always part of a larger system, work begins by establishing requirements for all system elements and then allocating some subset of these requirements to software. This system view is essential when software must interface with other elements such as hardware, people, and databases. System engineering and analysis encompass requirements gathering at the system level with a small amount of top-level design and analysis. Software requirements analysis. The requirements gathering process is intensified and focuses specifically on software. To understand the nature of program(s) to be built, the software engineer (analyst) must understand the information domain for the software, as well as required function, performance, and interfacing. Requirements for both the system and the software are documented and reviewed with the customer. Design. Software design is actually a multistep process that focuses on three distinct attributes of the program: data structure, software architecture, and procedural detail. The design process translates requirements into a representation of the software that can be assessed foe quality before coding begins. Like requirements, the design is documented and becomes part of the software configuration. Coding. The design must be translated into a machine-readable form. The coding step performs this task. If design is performed in a detailed manner, coding can be accomplished mechanistically. Testing. Once code has been generated, program testing begins. The testing process focuses on the logical internals of the software, assuring that all statements have been tested, and on the functional rxternals, this is, condcting tests to assure that defined input will produce actual results that agree with required results. Maintenance. Software will undoubtedly, undergo change after it is delivered to the customer (a possible exception is embedded software). Change will occur because errors have been encountered, because the software must be adapted to accommodate changes in its external environment (e. g. a change required because of a new operating system or peripheral device), or because the customer requires functional or performance enhancements. Software maintenance applies each of the preceding life cycle steps to an existing program rather than a new one. The classic life cycle is the oldest and the most widely used paradigm for software engineering. However over the past few years, criticism of the paradigm has caused even active supporters to question its applicability in all situations. Among the problems that are sometimes encountered when the classic life cycle paradigm is applied are: (1) Real projects rarely follow the sequential flow that the model proposes. Iteration always occurs and creates problems in the application on the paradigm. (2) It is often difficult in the beginning foe the customer to state all requirements explicitly. The classic life cycle requires this and has difficulty accommodating the natural uncertainty that exists at the beginning of many projects. (3) The customer must have patience. A working version of rhe program(s) will not be available until late in the project time span. A major blunder undetected until the working program is reviewed can be disastrous. Each of these problems is real. However, the classic life cycle paradigm has a definite and important place in software engineering work. It provides a template into which methods foe analysis, design, coding, resting, and maintenance can be placed. The classic life cycle remains the most widely used procedural model for software engineering. While it does have weaknesses, it is significantly better than a haphazard approach to software development. 软件的生存周期 早期对软件工程的定义是由弗里兹?鲍尔在针对这一学科的第一次大会上提出的:建立和采 用稳妥的工程原理,以节俭方式得到一种能在实际机器上可靠而高效工作的软件的学科。 尽管又提出了许多更复杂的定义,但都是强调软件开发中工程规则的重要性。 软件工程是硬件和系统工程的产物,它包含3个关键元素:方法、工具和过程。这3个元素 使管理者能控制软件开发过程并为软件具体开发者提供一个建立生产高质量软件的基础。 生存周期范例,有时称之为“瀑布模型”,它要求软件开发按系统的、顺序的方式,从系统 级开始按分析、设计、编码、测试和维护阶段进行。模仿常规工程周期,软件的生存周期范 例包含以下运动。 系统工程和分析。由于软件总是大系统的一部分,所以工作就从为所有系统元素建立需求开 始,然后再将这些软件需求的某一子集分配给软件。当软件必须与诸如硬件、人员和数据库 等其他因素接口时,系统观点是必不可少。系统工程和分析包括系统级的需求收集和少量的 顶层设计和分析。 软件需求分析。加强需求收集过程,并特别着重于软件方面。为理解要建立的程序的性质, 软件工程师(分析员)必须了解软件的信息范畴以及所需功能、性能和接口。把系统和软件 的需求制成文档并与顾客联合加以评审。 设计。软件设计实际上是多步骤的过程,它着重于程序的3个显著特征:数据结构、软件体 系结构和过程细节。在编码前,设计过程把需求翻译成可评估质量的软件表示。像需求一样, 设计也要编制文档并成为软件配置的一部分。 编码。设计必须被翻译成机器可读的形式。编码阶段就是做这项工作。如果设计做的详细, 编码就能以机械的方式完成。 测试。一旦代码生成,程序测试就开始。测试过程注重软件内部逻辑和外部功能,对于前者, 主要确保所有语句都测试到;对于后者,主要是确保已定义的输入能产生与要求相符的实际 结果。 维护。毫无疑问,软件在交付用户之后还要进行修改(嵌入式软件可能例外)。由于遇到了 一些差错,由于必须调节软件以适应外部环境变化(例如:由于新的操作系统或外部设备产 生的变化),或者由于用户要求提高功能和性能,因此修改是必然的。软件维护前述周期的 每一步都适用于现存的程序(而非新程序)。 经典的生命周期是软件工程中最早也是应用的最广泛的范例。不过,最近几年里出现了对此 范例的批评,即使是对此范例的积极支持者对它是否适合于所有情况也提出了质疑。应用传 统生存周期范例有时会遇到下列问题。 (1)实际工程很少遵循模型中提出的顺序流。应用此范例时经常发生重复,并产生一些问 题。 (2)要求用户在开始时明确指出全部要求往往是困难的。经典的生命周期是这样要求的, 但由于许多工程开始时存在着自然的不确定性而很难满足这种要求。 (3)用户必须耐心,程序的工作版本到工程的后期才能使用,大错在评审程序时仍未检出 将是灾难性的。 所有这些问题都是实际存在。尽管如此,经典的生存周期范例在软件工程中占有肯定的重要 地位,它提出了一个包含分析、设计、编码、测试和维护方法的模板。经典的生存周期仍然 是软件工程中应用最广泛的过程模型,尽管它有一些不足,但比起杂乱无章地进行软件开发 要好得多。 附录2 患者交费核心代码: boperate.getcom("insert into tb_bill(billid,registerid,menuname,itemname,itemprice,itemquantity,itemunit,itemtotal,clinicname, billtime,username) "+ "values('" + txt_billid.Text.Trim() + "','" + txt_patientid.Text.Trim() + "','" + cbox_menuname.Text.Trim() + "','" + cbox_itemname.Text.Trim() + "','" + txt_itemprice.Text.Trim() + "','" + txt_itemquantity.Text.Trim() + "','" + lab_itemunit.Text.Trim() + "','" + lab_itemtotal1.Text.Trim() + "','" + txt_clinicname.Text.Trim() + "','" + DateTime.Now.ToString() + "','" + frm_login.M_str_name.Trim() + "')"); MessageBox.Show("信息添加成功~", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); DataSet myds = boperate.getds(M_str_sql, M_str_table); dgv_service.DataSource = myds.Tables[0]; lab_amount1.Text=Convert.ToString(Convert.ToDecimal(lab_itemtotal1.Text.Trim()) + Convert.ToDecimal(lab_amount1.Text.Trim())); 2(医疗费统计核心代码: SqlDataReader sqlread1 = boperate.getread("select sum(itemtotal) as itemtotal1 from tb_bill where menuname='药品'and billtime between'" + dateTimePicker1.Text.ToString() + "'and '" + dateTimePicker2.Text.ToString() + "'"); if (sqlread1.Read()) { lab_medicine1.Text = sqlread1["itemtotal1"].ToString().Trim(); } sqlread1.Close(); if (lab_medicine1.Text == "") { lab_medicine1.Text = "0"; } 患者冲红核心代码: if (txt_patientid.Text == "") { MessageBox.Show("挂号编号不能为空~", "提示",MessageBoxButtons.OK, MessageBoxIcon.Information); } else { if (txt_amount.Text == "") { MessageBox.Show("冲红金额不能为空~", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } else if (cbox_update.Text == "补交现金") { boperate.getcom("insert into tb_update(updateid,registerid,updateamount,username,updatetime) " + "values('" + txt_updateid.Text.Trim() + "','" + txt_patientid.Text.Trim() + "','" + txt_amount.Text.Trim() + "','" + frm_login.M_str_name.Trim() + "','" + DateTime.Now.ToString() + "')"); MessageBox.Show("患者信息添加成功~", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); tsbtn_save.Enabled = false; } else { boperate.getcom("insert into tb_update(updateid,registerid,updateamount,username,updatetime) " + "values('" + txt_updateid.Text.Trim() + "','" + txt_patientid.Text.Trim() + "','" + Convert.ToString(0 - Convert.ToDecimal(txt_amount.Text.Trim())) + "','" + frm_login.M_str_name.Trim() + "','" + DateTime.Now.ToString() + "')"); MessageBox.Show("患者信息添加成功~", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); tsbtn_save.Enabled = false; } } 4(票据重打印核心代码: if (txt_billid.Text == "") { MessageBox.Show("票据编号不能为空~", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { if (txt_patientid.Text == "") { MessageBox.Show("挂号编号不能为空~", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { string P_str_sql = "{tb_bill.billid} like '" + txt_billid.Text.Trim() + "'"; CReportViewer.ReportSource = opAndvalidate.CrystalReports("CReportService.rpt", P_str_sql); } } 基于JAVA的医院门诊信息管理系统设计与实现 摘 要 医院门诊信息管理系统是一个基于Internet的应用系统,它是一个面对当前的医院门诊管理 工作基本还处于手工和半信息自动化处理状态而应运而生的一个基于Internet的一个信息自 动化的系统,整个系统从符合操作简便、界面友好、灵活、实用、安全的要求出发,完成预 约、诊断、开具处方、保存病历管理的全过程。医疗事业单位只需具备访问Internet的条件 即可在系统发布的站点上进行医疗门诊的管理。在图型化的人机界面中完成日常的医疗门诊 管理工作.一方面摆脱了时间和空间的限制,另一方面有效的解决的数据共享的问题。经过 实际使用证明,本文所设计的医院门诊信息管理系统可以满足医院在门诊管理方面的需要。 【关键词】 JSP 医院门诊 信息管理系统 ABSTRACT Hospital outpatient information management system is an Internet-based application system. It is an Internet-based automated information system that solves the outpatient medical management of the basic work is still in the manual and semi-automated processing of information. The entire system is simple, friendly interface, flexible, practical and safe, and complete the entire process of booking, diagnosis, prescribing and medical records management preservation. Medical institutions only need visit the Internet can use the system for the release site medical clinic management. Using the pattern of the man-machine interface complete routine outpatient medical management. While out of time and space constraints, on the other hand, it is an effective solution to the data sharing problem. Through practical show that JSP-based hospital outpatient information management system to meet the hospital in-patient management needs. I 【Key Words】 JSP Hospital Outpatient Information Management System 目 录 第一章 绪论................................................................................................................1 第一节 课题研究现状分析....................................................................................4 第二节 技术发展的趋势.......................................................................................1 第二章 医院门诊信息管理系统需求分析................................................................2 第一节 业务分析....................................................................................................2 一、业务角色......................................................................................................2 二、业务词汇.......................................................................................................3 第二节 系统需求定义...........................................................................................3 第三章 医院门诊信息管理系统技术解决方案比较................................................5 第一节 Web应用解决方案...................................................................................5 第二节 基于JSP + JavaBean的解决方案.............................................................5 一、什么是JSP......................................................................................................5 二、使用JSP的好处............................................................................................6 三、什么是JavaBean............................................................................................6 四、使用JavaBean的好处...................................................................................6 五、使用JSP+JavaBea的好处.............................................................................7 第三节 JSP及JavaBean工作原理介绍................................................................8 一、JSP内置对象.................................................................................................8 二、JSP+JavaBean的运行环境...........................................................................11 第四章 医院门诊信息管理系统概要设计..............................................................13 第一节 医院门诊信息管理系统文档结构定义..................................................13 第二节 数据组织与定义......................................................................................14 II 一、数据库概念设计...........................................................................................14 二、数据库逻辑设计...........................................................................................15 第五章 基于JSP与JavaBean的医院门诊信息管理系统详细设计.......................16 第一节 系统功能模块设计..................................................................................16 第二节 系统功能模块实现..................................................................................17 一、hospital.db包的类........................................................................................17 二、hospital.db.opreation包................................................................................22 第六章 测试................................................................................................................15 第一节 测试基本方法..........................................................................................47 一、界面测试......................................................................................................47 二、功能测试......................................................................................................47 第二节 测试用例及测试结果..............................................................................48 结 论......................................................................................................................56 致 谢......................................................................................................................57 参考文献......................................................................................................................58 附 录......................................................................................................................59 III 绪 论 医院门诊信息管理系统是信息管理系统在医院门诊部门中的应用。随着Internet技术的发展,其被广泛应用与各行各业,医院门诊部门是其一个重要的应用领域。伴随着医院的改革,医院信息化进程的加速,建立基于Web的医院门诊信息管理系统显得尤为重要。 课题研究现状分析 随着医疗卫生事业的发展,医院改革的深入,信息的有效、高效利用,已受到人们的关注。充分利用现代科技手段,加强各种信息的利用开发,是医院信息管理的一个重要内容,也是当今医院的需要。目前的医院仅仅把医院的信息管理系统作为微机工具系统,而没有发挥其管理的真正功能;系统分散设计,各部门独立实施,没有考虑信息的关联和共享,存在信息孤岛现象;医院管理错综复杂,从而形成了医院信息管理系统数据的多样化,数据量大等特点[1]。 通过本次医院门诊信息系统的设计,解决医院系统中各种信息管理的集成问题,使医院系统的各种信息管理一体化。同时,了解医院门诊的流程,把握信息管理系统开发概念,掌握动态网站技术,熟悉系统开发的进程,做到会用相关工具设计和开发相关系统,并实现。 技术发展趋势 随着Internet技术的普及和发展基本上各种不同操作系统平台上都有相应的Web浏览器程序,这就使得医院门诊信息管理系统具有非常广泛的平台兼容性。客户端仅需一个Web浏览器程序,不再需要安装其它软件。客户程序主要包括HTML页面和一些特殊的数据库访问程序,它们都存放在Web服务器上,客户应用系统的设计、维护和更新工作只需在Web服务器上进行,这样就大大降低了系统安装、测试、维护的工作量[2]。通过基于Web的医院门诊信息管理系统的开发,可以实现对医院门诊相关信息的整合管理以及共享,并且通过组件技术的应用,可以使得本医院门诊信息管理系统具有很大的可扩展性和可移植性[3]。 第二章 医院门诊信息管理系统需求分析 第一节 业务分析 一、业务角色 (1) 患者角色 可联机注册成为用户,设定自己的登陆名及密码; 可按医生姓名自定义查询; 可基于查询结果进行预约,若指定医生当日预约量已满,则预约失 败。预约结果随机返回给患者; 可对已经进行的预约情况查看或撤销。 4 图2.1 患者用例图 (2) 医生角色 可查看预约患者的情况; 可查询患者病历; 可创建患者病历; 可对患者的病历进行修改。 5 图2.2 医生用例图 (3) 管理员角色 可添加或删除医生账号。 图2.3 管理员用例图 二、业务词汇 (1) 医院门诊:门诊是医院接诊病人的场所。病人到医院之后首先在门诊由医护人员进行接诊,经过一整套的诊断手段,给病人得出初步诊断,并且进行进一步治疗的指导。 (2) 预约:由于医院某些专家的就诊患者多,医生为了确保有时间问诊患者并且患者为了确定来医院就诊时可以准时接收医生的诊断而采用的一种手段。 6 (3) 电子病历:由于传统的纸质病历不利于保存和查询,而且浪费资源,所以采用将病历信息电子化,便于整个医院信息的共享和交流。 (4) 医生基本信息:记录医生编号、姓名、年龄、登录时的密码、职称、所属科室和专家门诊科目等医生相关信息。 (5) 患者基本信息:记录注册患者的编号、姓名、登录时用户名、登录时密码、年龄、性别、家庭住址和联系电话等患者相关信息。 (6) 病历基本信息:记录病历记录的编号、主治医生编号、症状、诊断、患者编号、处方等病历相关的信息。 (7) 预约信息:记录预约记录的编号、主治医生的编号、患者编号、预约时间、预约就诊时间等预约相关信息。 系统需求定义 本系统是基于JSP的医疗门诊信息管理系统,要求实现对医院里医生信息、病人、病历以及医药信息进行有效管理及其开发,主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面[4],重点解决的问题包括: (1) 病历基本信息管理:病历信息包括病历记录的编号、主治医生的编号、症状、诊断、患者编号、处方等内容,医生可以创建病历并且可以添加病历信息和修改病历信息,病人可以查询自己的病历信息。 (2) 患者基本信息管理:患者基本信息包括患者编号、姓名、登录系统的用户名、登录密码、年龄、性别、家庭住址和联系电话等。患者注册时向患者表中插入一条记录。 (3) 医生基本信息管理:医生基本信息包括医生的编号、姓名、年龄、性别、职称、所属科室、学历等内容,管理员通过登录可以添加和删除医生信息。 (4) 预约信息管理:预约信息包括记录编号、主治医生编号、患者编号、预约就诊时间等内容,病人可以预约医生和取消预约,医生登录后可以查询自己的预约信息。 本课题的应用难点有: (1) 病历基本信息管理:传统的纸质病历既不便于患者、医生查询信息,也不便于保存,本系统才用电子病历[5]。病历基本信息管理系统选择基于三层结构的C/S、B/S混合模式,三层结构中,底层是电子病历数据库服务器,用于存储和管理病历等数据;中间层是应用服务器和Web服务器,其中应用服务器用于实现系统的业务逻辑,完成各种复杂的管理操作和数据存取,Web服务器用于提供系统的Web服务,还可以通过网关与外部系统进行数据交换和信息传递;最上层是客户端,位于门诊大厅,Windows用户通过专用程序完成相关操作,IE用户通过浏览器使用。 (2) 预约信息管理:患者登录系统预约医生,信息插入预约表,或者取消预约,即从预约表中删除相关预约信息;医生通过登录可以创建病历,通过给预约的患者看病在病历表中添加病历信息。 7 医院门诊信息管理系统技术 解决方案比较 Web应用解决方案 本系统采用动态网站技术。早期的动态网站开发技术使用的是CGI-BIN接口。这种开发技术存在着严重的扩展性问题:每一个新的CGI程序要求在服务器上新增一个进程。为克服这一弊端,微软公司提出了Active Server Pages(ASP)技术,该技术利用―插件‖和API简化了Web应用程序的开发。Hypertext Preprocessor(超文本预处理器),即PHP动态网站开发技术与ASP相似,也是一种嵌入HTML文档的服务器端脚本语言。还有一些技术,如Java Servlets技术,利用该技术可以很容易地用Java语言编写交互式的服务器端代码。太阳微系统公司(Sun Microsystems Inc.)在Web服务器、应用服务器、交易系统以及开发工具供应商间广泛支持与合作下,整合并平衡了已经存在的对Java编程环境(例如Java Servlets和JavaBeans)进行支持的技术和工具后产生了一种新的、开发基于Web应用程序的方法JavaServer Pages技术(JSP)。这种动态网站开发技术能够在任何的Web或应用服务器上运行,而且分离了应用程序的逻辑和页面显示,能够进行快速的开发和测试,并且简化了开发基于Web的交互式应用程序的过程。基于此,我们选择JSP+JavaBean技术来实现相应模块的开发。 第二节 基于JSP + JavaBean的解决方案 一、 什么是JSP JSP(Java Server Pages)是Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。 JSP技术是用JAVA语言作为脚本语言的,JSP网页为整个服务器端的JAVA库单元提供了一个接口来服务于HTTP的应用程序[6]。 在传统的网页HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP标记(tag),就构成了JSP网页(*.jsp)。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序片段,然后将执行结果以HTML格式返回给客户。 8 程序片段可以操作数据库、重新定向网页以及发送 email 等等,这就是建立动态网站所需要的功能。所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,对客户浏览器的要求最低,可以实现无Plugin,无ActiveX,无Java Applet,甚至无Frame。 二、使用JSP的好处 JSP的设计目标主要是提供一种更为简便、有效的动态网页编写手段,并且增强网页程序的独立性、兼容性和可重用性。 它是通过以下几个方面加以实现的: (1) 简便性和有效性 JSP动态网页的编写与一般的静态HTML的网页的编写十分相似,只是在原来的HTML网页中加入一些JSP专有的标签,或是一些脚本程序(而且此项不是必需的)。这样,一个熟悉HTML网页编写的设计人员可以很容易进行JSP网页的开发。而且开发人员完全可以不自己编写脚本程序,而只是通过JSP独有的标签利用别人已写好的部件来实现动态网页的编写。这样,一个不熟悉脚本语言的网页开发者,完全可以利用JSP做出漂亮的动态网页,而这在其他的动态网页开发中是不可思议的。 (2) 程序的独立性 JSP是Java API家族的一部分,它拥有一般的Java程序的跨平台的特性,换句话说,就是拥有程序的对平台的独立性。即:Write once, Run anywhere! (3) 程序的兼容性 因为 JSP中的动态内容可以各种形式进行显示,所以它可以为各种客户提供服务:从使用HTML/DHTML的浏览器,到使用WML的各种手提无线设备(如,移动电话和个人数字设备PDA),再到使用XML的B2B应用,都可以使用JSP的动态页面。 三、什么是JavaBean JavaBean是一种可重复用、跨平台的软件组件。JavaBean可以为两种:一种是有用户界面(UI,User Interface)的JavaBean;还有一种是没有用户界面,主要负责处理事务(如数据运算,操纵数据库)的JavaBean。JSP通常访问的是后一种JavaBean。 四、使用JavaBean的好处 JavaBean最大的优点在于可以实现代码的可重用性。同时,JavaBean又具有一下特性: JavaBean是一个公共的(public)类; JavaBean有一个不带数的构造方法; JavaBean通过get方法没置属性,通过set方法获取属性; 易于维护、使用、编写; 可移植性强,但仅限于Java工作平台; 便于传输,不论是本地还是网络; 可以以其它部件的模式进行工作。 五、使用JSP + JavaBean的好处 JSP与JavaBean搭配使用,有3个好处: 使得html与Java程序分离,这样便于维护代码。如果把所有的程序 代码都写到JSP网中,会使得代码繁杂,难以维护。 可以降低开发JSP网页人员对java编程能力的要求。 JSP侧重于生成动态网页,事务处理由JavaBean来完成,这样可以充分利用JavaBean组件 9 的可重用性特点,提高开发网站的效率。 第三节 JSP及JavaBean工作原理介绍 一、 JSP内置对象 JSP有九种内置对象:request,reponse,out,session,application,config,pagecontext,page,exception[7]。 (1) request对象:request对象代表请求对象,它被包装在HttpServletRequest接口。通过getParameter方法可以得到request的参数,通过GET、POST、HEAD等方法可以得到request的类型,通过Cookies、Referer等可以得到请求的HTTP头。来自客户端的请求经Servlet容器处理后,有Request对象进行封装。它作为jspService()方法的一个参数有容器传递给JSP页面。 Request对象主要方法: getAttribute(String name) 返回name属性值。 getAttributeNames() 返回request对象所有属性名字。 getCookies() 返回客户端的cookies对象。 getHeader(String name) 获得HTTP定义的文件头信息。 getHeaders(String name) 返回指定名字的request Header的所有值。 getMethod() 获得客户端向服务器端传送数据的方法。 getParameter(String name) 获得客户端传送给服务器端的参数值。 getParameterNames() 获得客户端传送给服务器端的所有参数的名字。 getParameterValue(String name) 获得指定参数的所有值。 getProtocol() 获取客户端向服务器端传送数据所依据的协议名称。 getQueryString() 获得查询字符串。 getRequestURI() 获取发出请求字符串的客户端地址。 getRemoteAddr() 获取客户端的IP地址。 getRemoteHost() 获取客户端的名字。 getServerName() 获取服务器的名字。 getServletPath() 获取客户端所请求的脚本文件的文件路径。 getServerPort() 获取服务器的端口号。 setAttribute(String name, java.lang.Object objt) 设置名字为name的request参数的值,该值是由java.lang.Object类型的objt指定。 (2) response对象:response被包装成HttpServletResponse接口,它封装了JSP产生响应,然后被发送到客户端以响应客户的请求。和Request对象一样,它由容器生成,作为jspService()方法的参数被传入JSP。因为输出流是缓冲的,所以可以设置HTTP状态码和response头。 Response对象的主要方法有: addCookie(Cookie cook) 添加一个cookie对象,用来保存客户端的用户信息。 addHeader(String name , String value) 添加HTTP文件头信息。 containsHeader(String name) 判断指定名字的HTTP文件头是否已经存在。 sendError(int) 向客户端发送错误的信息。 setHeader(String name , String value) 设置指定名字的HTTP文件头的值。 (3) pageContext对象:pageContext对象被封装成javax.servlet.jsp.pageContext接口,它为JSP页面包装页面的上下文,管理对属于JSP中特殊可见部分中以命名对象的访问。它的创建和 10 初始化都是由容器完成的。 pageContext对象中常用的方法有: getAttribute scope() 检索一个特定的已经命名对象的范围。 findAttribute() 用来按照页面请求、会话以及应用程序范围的顺序实现对某个已经命名属性的搜索。 setAttribute() 用来设置默认页面的范围或特定范围之中的已命名对象。 removeAttribute() 用来删除默认页面范围或特定范围之中已命名的对象。 (4) session对象:session对象用来保存每个用户的信息,以便跟踪每个用户的操作状态。其中,session信息保存在容器里,session的ID保存在客户机的Cookie中。 session对象的主要方法: getAttribute(String name) 获取与指定名字name相联系的信息。 getAttributeNames() 返回session对象中存储的每一个属性对象。 getCreationTime() 返回session被创建的时间。 getId() 返回唯一的标识,为每一个session而产生。 getLastAccessedTime() 返回当前session对象最后被客户发送的时间。 getMaxInactiveInterval() 返回总时间(秒)。 removeAttribute(String name) 删除与指定名字name的相联系的信息。 setAttribute(String name , java.lang.object value) 设置指定名字name的属性值value,并存储在session对象中。 (5) application对象:application对象为多个应用程序保存信息。 application对象的主要方法: getAttribute(String name) 返回由name指定的名字application对象的属性的值。 getAttributeNames() 返回所有application对象的属性的名字。 getInitParameter(String name) 返回由name指定的名字的application对象的某个属性的初始值。 getServletInfo() 返回servlet编译器当前版本信息。 setAttribute(String name , Object object) 设置指定名字name的application对象的属性值object. (6) out对象:out对象被封装成javax.servlet.jsp.JspWriter接口。他主要用来向客户端输出数据,代表输出流的对象。 out对象的主要方法: out.print/println (boolean | char | char[] | double | float | int | long | object | string |) 输出各种类型的数据。 out.newLine() 输出一个换行字符。 out.flush() 输出缓冲区里的数据。 out.close() 关闭输出流。 out.clearBuffer() 清除缓冲区里的是数据,并把数据输出到客户端。 out.clear() 清除缓冲区里的是数据,但不会把数据输出到客户端。 out.getBufferSize() 获得缓冲区的大小。 out.getRemaining() 获取缓冲区中没有被占用的空间的大小。 out.isAutoFlush() 返回布尔值。 (7) config对象:config对象被封装成javax.servlet.ServletConfig接口,它表示Servlet的配置。 config对象的主要方法: getServletContext() 返回执行者的Servlet上下文。 11 getServletName() 返回Servlet的名字。 getInitParameter(String name) 返回名字为name的初始参数的值。 getInitParameterNames() 返回这个JSP的所有的初始参数的名字。 (8) page对象:page对象是类java.lang.Object类的一个实例,它是JSP本身,通过这个可以对它进行访问。 (9) exception对象:exception对象是java.lang.Throwable类的一个实例。它指的是运行时的异常,也就是被调用的错误页面的结果,只在错误页面(在页面指令里有isErrorPage=true的页面)中才可以使用。 二、JSP + JavaBean运行环境 本系统建立在Windows XP平台上,用Apache+Tomcat作为JSP服务端引擎,采用Eclipse作为后台设计开发环境。 Apache是一个web服务器环境程序启用他可以作为web服务器使用。不过只支持静态网页,不支持动态网页,如(.asp,.jsp)等。如果要在Apache环境下运行jsp网页,就需要一个解释器来执行jsp网页,而这个jsp解释器就是Tomcat。 Tomcat是一个免费且开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache、Sun和其它一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和jsp规范总能在Tomcat中得到体现。与传统的桌面应用程序不同,Tomcat中的应用程序是一个WAR(Web Archive)文件。在Tomcat中,应用程序的部署很简单,你只需将你的WAR放到Tomcat的webapp目录下,Tomcat会自动到这个文件,并将其解压。 Eclipse是替代IBM Visual Age for Java的下一代IDE开发环境。根据Eclipse的体系结构,通过开发插件,它能扩展到任何语言的开发,甚至能成为图片绘制的工具。Eclipse是开放源代码的项目,其本身是用Java语言编写,但下载的压缩包中并不包含Java运行环境,需要用户自己另行安装JRE,并且要在操作系统的环境变量中指明JRE中bin的路径。Eclipse提供的核心框架和可扩展的插件机制给广大的程序员提供了无限的想象和创造空间。 第四章 医院门诊信息管理系统概要设计 第一节 医院门诊信息管理系统文档结构定义 本系统包括两个逻辑层包hospital.db包和hospital.db.operation包以及一些.jsp文件。 (1) hospital.db包封装了整个网站用于完成基础功能的类,具体包括: hospital.db.Util:辅助类,用于完成一些JSP中常用的功能,比如字符集的转换。 hospital.db.InitServlet:初始化整个Servlet环境。 hospital.db.DBConnection:与整个数据库连接,返回Connection对象。 hospital.db.Debug:记录日志,将信息写入指定的日志文件中。 (2) hospital.db.operation包封装了所有用户角色有关的模型,具体如下: hospital.db.dboperation.DBOperation:建立用户的抽象模型,供子类继承。 hospital.db.dboperation.Admin:继承自DBOperation,定义管理员模型。 hospital.db.dboperation.Doctor:继承自DBOperation,定义医生模型。 hospital.db.dboperation.Patient:继承自DBOperation,定义患者模型。 hospital.db.dboperation.InvalidUserException:继承自Exception,用以封装一个表示―非法用户名‖的异常。 12 (3) jsp文件:以适当的方式通过逻辑层与数据层交互及一些页面代码。 第二节 数据组织与定义 一、数据库概念设计 医院门诊信息管理系统的数据库功能主要体现在对各种信息的提供、保存、更新和查找操作上,主要包括患者信息、医生信息、预约信息[8]。因此: 患者和医生有不同的权限因此身份不同。 用户信息记录不同的用户资料。 预约信息有预约时间、预约用户等。 经过上述功能分析和需求总结,考虑到将来功能上的扩展,设计如下的数据项和数据结构: 管理员信息:包括数据项管理员名、密码等。 医生信息:包括数据项医生名、密码等。 患者信息:包括数据项用户名、密码等。 预约信息:包括数据项医生名、预约时间等。 二、数据库逻辑设计 根据以上分析知,系统需要的基本信息表有:管理员信息表、医生信息表、患者信息表、病历记录表和预约记录表。本系统是一个多用户系统,牵涉多个管理人员和多用户,因此需要针对不同类别的用户进行密码认证和权限限制,防止出现越权现象。部分具体数据库设计如下: (1) 医生表:用于存储医生的个人信息。 表4.1 医生表的结构 字段名 类型 备注 约束条 默认值 DID varcher(5) — 医生编号 主键 Name varchar(12) — 姓名 索引 tinyint(3) Age — 0 年龄 unsigned Password varchar(20) 密码 初始:=DID tinyint(3) 1 - 男 Sex 1 性别 unsigned 2 - 女 Level varchar(12) — — 医生职称 Section varchar(12) — 所属科室 索引 Specialism varchar(20) — — 专家门诊科目 Phone varchar(15) — 联系电话 可为空 (2) 患者表:用于存储患者的个人信息。 表4.2 患者表的结构 字段名 类型 备注 约束条 默认值 mediumint(8) PID unsigned — 患者编号 主键 auto_increment Name varchar — — 姓名 UserName varchar — 登录时用户名 唯一索引 13 Password varchar — — 密码 Age tinyint(3) unsigned — 0 年龄 1 – 男 Sex tinyint(1) unsigned 1 性别 2 – 女 Address TinyText — 家庭住址 可为空 Phone varchar — 联系电话 可为空 (3) 病历记录表:病历记录表记录了患者的病历信息。 表4.3 病历记录表的结构 字段名 类型 备注 约束条 默认值 int unsigned(10) HID — 病历记录编号 主键 auto_increment Doctor varchar(5) — 主治医生编号 索引 Description TinyText — — 症状 Diagnose TinyText — — 诊断 mediumint(8) Patient 0 患者编号 索引 unsigned Rx TinyText — — 处方 Sdate Datetime — 0000-00-00 00:00:00 开始时间 Fdate Datetime 0000-00-00 00:00:00 结束时间 可为空 就诊过程是否1 – 是 Finished tinyint(1) unsigned 0 结束 2 – 否 (4) 预约记录表:预约记录表记录了已预约但尚未创建病历的患者信息。 表4.4 预约记录表的结构 字段名 类型 备注 约束条 默认值 int unsigned(10) QID — 记录编号 主键 auto_increment Doctor varchar(5) — 主治医生编号 索引 mediumint(8) Patient 0 患者编号 索引 unsigned Date Datetime — 0000-00-00 00:00:00 预约时间 0 - 周日 1 – 周一 2 – 周二 Day tinyint(1) unsigned 0 预约就诊时间 3 – 周三 4 – 周四 5 – 周五 6 – 周六 0 – 上午 AP tinyint(1) unsigned 0 预约就诊时间 1 – 下午 (5) 管理员表:管理员表存储了与管理员有关的信息。 表4.5 管理员表结构 字段名 类型 备注 约束条 默认值 AID tinyint(2) unsigned — 管理员编号 主键 14 auto_increment Username varchar(20) — 登录时的用户名 唯一索引 Password Varchar(20) — — 登录时密码 Email Varchar(20) — — 电子邮件 Name Varchar(12) — — 姓名 Phone Varchar(15) — 联系电话 可为空 第五章 基于JSP与JavaBean的医院门诊信息管理系统详细设计 系统功能模块设计 根据客户要求,操作者的权限层次要有明确的分类,进入软件时需要进行身份验证;出于对 患者个人隐私的负责,患者的病历记录只能在患者就医期间有主治医生条约,其它任何人包 括管理员无权查阅。整个系统需要实现以下功能,如图所示: 医疗门诊信息管理系统 预病医患约 历生者信基基基 息本本本管 信信信理息息息 模管管管 块 理理理 模模模图 5.1 系统功能模块图 块块块 第二节 系统功能模块实现 15 一、hospital.db包中的类 图5.2 hospital.db包的UML图 与数据库建立连接类DBConnection 本类位于hospital.db包中,由于Connection是一个非常耗费资源的对象,因此在这里使用单例模式设计DBConnection类,保证了真个生命周期内只存在一个Connection对象,该对象可以被其它类重复利用,这样可以大大节省系统资源。DBConnection类核心代码如下: public abstract class DBConnection{ public static Connection getConnection(){ Connection conn=null; try{ if(conn == null){ Class.forName("org.gjt.mm.mysql.Driver"); // conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/hospital","root ","nemo"); Debug.log("Connecion created."); } else{ Statement stmt=conn.createStatement(); ResultSet rs=stmt.executeQuery("SELECT COUNT(*) FROM administrator"); if(rs==null||!rs.next()){ Class.forName("com.mysql.jdbc.Driver"); 16 conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/hospital","root","nemo"); Debug.log("Connecion re-created."); } } }catch(Exception ex){ Debug.log(Debug.getExceptionMsg(ex)); } return conn; } 记录日志的Debug类 本类位于hospital.db包中,本系统的一个亮点是日志记录,这里也是用单例模式实现的。Debug类的核心代码如下: public final class Debug{ private static Debug instance=null; private static SimpleDateFormat dateFormat=null; private static FileOutputStream fos=null; private Debug(){ } static synchronized Debug init(String path){ …… } public static synchronized void log(String msg){ …… } private String writeFile(String msg){ …… } public static String getExceptionMsg(Exception e){ StackTraceElement ste=e.getStackTrace()[0]; String msg=ste.getClassName() + "." + ste.getMethodName() + "() Ln " + ste.getLineNumber() + ": " + e.getMessage(); return msg; } } 下面对Debug类中一些关键原理和值得注意的地方加以说明。 程序中将构造器定义为私有也是为了防止以构造器的方式生成对象。大 多数情况下以这种方式实现单例模式。 为了便于调试,在Debug类中定义了一个专门用来处理异常的方法getExceptionMsg(),在返回的字符串中包括了抛出异常的类名、方法名和所在行数。 初始化Servelet的InitServlet类 本类位于hospital.db包中,继承自javax.servlet.http.HttpServlet,配合Tomcat中的设置,使服务器启动后首先按生成一个InitServlet的实例,然后调用其init()方法,对Servlet环境进行初始化。InitServlet的核心代码如下: public class InitServlet 17 extends HttpServlet{ public void init() throws ServletException{ String logPath=getServletContext().getRealPath("/log/"); Debug.init(logPath); Debug.log("Server started."); } public void destroy(){ Debug.log("Server shutted down."); } } 辅助类Util 本类位于hospital.db包中,本类只有三个方法,其中encode()和decode()方法负责对带有中文字符的数据惊醒转码工作,而parseSpDays()方法则是用来处理医生的预约人数信息。Util的核心代码如下: public abstract class Util{ public static String decode(String str) throws UnsupportedEncodingException{ return new String(str.getBytes("iso-8859-1"),"gbk"); } public static String encode(String str) throws UnsupportedEncodingException{ return new String(str.getBytes("gbk"),"iso-8859-1"); } public static int[] parseSpDays(String dayPattern) throws NumberFormatException{ int[] spDays=new int[14]; StringTokenizer token=new StringTokenizer(dayPattern.trim(),", "); if(token.countTokens() != 14) throw new NumberFormatException(); for(int i=0;i < 14;i++) spDays[i]=Integer.parseInt(token.nextToken()); return spDays; } } 18 二、hospital.db.operation包 图5.3 hospital.db.operation包的UML图 医生模型Doctor类 本类位于hospital.db.dboperation包中,Doctor类封装了医生角色可执行的所有操作,核心代码如下: public class Doctor extends DBOperation{ public static final String NAME="Name"; public static final String DATE="Date"; public Doctor(String id)throws InvalidUserException{ super(id);} /** * 用户登录 * * 参数: * password,密码 * 19 * 返回值:操作结果 * 1,登录成功 * 0,抛出一般异常 * -1,抛出数据库异常 * -2,登录失败 */ public int login(String password , String id){ int res=0; conn=DBConnection.getConnection(); try{ strSQL="SELECT DID,Password FROM doctor WHERE DID="+this.id +" AND Password="+password; stmt=conn.createStatement(); rs=stmt.executeQuery(strSQL); if(!rs.next()) throw new IllegalAccessException("Password invalid."); res=1; } catch(SQLException sqle){ Debug.log(Debug.getExceptionMsg(sqle)); res= -1; } catch(IllegalAccessException iae){ Debug.log(Debug.getExceptionMsg(iae)); res= -2; } catch(Exception e){ res=0; } finally{ return res; } } public int getPatientsHistory(String orderBy){ …… } public int getPatientHistory(int hid){ …… } public int getPatientInQueueInfo(){ …… } public synchronized int createHistory(int qid,String diagnose,String rx,String description){ …… 20 } public synchronized int updateHistory(int hid,String description,String rx,String diagnose){ …… } public synchronized int finishHistory(int hid){ …… } public synchronized int updatePassword(String password){ …… } /** * 检查用户名合法性 * * 参数: * id,医生编号 */ protected void checkUser(String id) throws InvalidUserException{ conn=DBConnection.getConnection(); strSQL="SELECT DID FROM doctor WHERE DID='" + id + "'"; try{ stmt=conn.createStatement(); rs=stmt.executeQuery(strSQL); if(!rs.next()) throw new InvalidUserException(); } catch(SQLException sqle){ Debug.log(Debug.getExceptionMsg(sqle)); } } 下面对Doctor类中一些关键方法的功能和原理加以说明。 (1) 查询患者病历:getPatientsHistory(String orderBy) 本方法用于医生查询其所有就诊患者的所有病历记录(数据库中的Finished值为―0‖的记录)。 参数 orderBy:结果的排序方法。 返回值: 1:操作成功。 0:抛出一般异常。 -1:抛出数据库异常。 Doctor.getPatientHistory实现代码如下所示: public int getPatientsHistory(String orderBy){ conn=DBConnection.getConnection(); int res=0; if(orderBy == null || orderBy.equals("")) 21 orderBy=Doctor.NAME; try{strSQL= "SELECT history.HID,history.Diagnose,history.Description,history.Rx,history.SDate,history.FDate,history.Fi nished,patient.Name,patient.Age,patient.Sex,patient.Address,patient.Phone" + " FROM patient,doctor,history WHERE history.Doctor='" + this.id + "' AND doctor.DID='" + this.id + "' AND history.Patient=patient.PID AND Finished=0 ORDER BY " + orderBy; //医生只能查询当前患者的当前病历(―Finished=0‖) stmt=conn.createStatement(); rs=stmt.executeQuery(strSQL); result=rs; //将局部变量中的内容复制给类变量result,使外部类可以通过getResult() //访问 res=1; } catch(SQLException sqle){ Debug.log(Debug.getExceptionMsg(sqle)); //记录异常日志 res= -1; } catch(Exception e){ res=0; } finally{ return res; } } (2) 查询与hid匹配的患者病历:getPatientHistory(int hid) 本方法重载了―getPatientHistory(String orderBy)‖,只返回与参数hid匹配的一条记录。 参数 hid:病历号。 返回值 1:操作成功 2:抛出一般异常 3:抛出数据库异常 (3) 查询预约队列中的患者信息:getPatientInQueueInfo() 本方法返回预约队列中预约当前医生的所有病人信息。 返回值 1:操作成功 0:抛出一般异常 -1:抛出数据库异常 (4) 创建病历:createHistory(int qid,String diagnose,String rx,String description) 本方法用于医生从预约队列中创建患者病历,其流程如下。 向history表添加病历记录 从pinqueue表删除预约记录 更新curappointment表中当前可预约数量。 22 参数 qid:患者在预约队列中的编号。 diagnose:诊断。 rx:处方。 description:症状。 返回值 1:操作成功。 0:抛出一般异常。 -1:抛出数据库异常。 -2:非法qid值。 Doctor.createHistory实现代码如下: public synchronized int createHistory(int qid,String diagnose,String rx,String description){ int res=0; Connection conn=DBConnection.getConnection(); SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String date=dateFormat.format(new java.util.Date()); String[] days={"SunA","SunP","MonA","MonP","TueA","TueP","WedA","WedP","ThuA","ThuP","FriA" ,"FriP","SatA","SatP"}; int index,curpc,day,ap; int pid; String did; try{ strSQL="SELECT * FROM pinqueue WHERE QID=" + qid + " AND Doctor='" + this.id + "'"; stmt=conn.createStatement(); rs=stmt.executeQuery(strSQL); if(!rs.next()) throw new IllegalArgumentException("Invalid QID or permission denied."); // 不匹配 pid=rs.getInt("Patient"); day=rs.getInt("Day"); ap=rs.getInt("AP"); did=rs.getString("Doctor"); index=day * 2 + ap; strSQL="SELECT * FROM curappointment WHERE DID='" + did + "'"; rs=stmt.executeQuery(strSQL); rs.next(); curpc=rs.getInt(days[index]); //由于后面将由JDBC接手处理事务,所以数据库的 //―autocommit‖设为false conn.setAutoCommit(false); stmt=conn.createStatement(); strSQL="INSERT INTO 23 history(Diagnose,Patient,Doctor,Rx,Description,Finished,SDate) VALUES ('" + diagnose + "'," +pid + ",'" + this.id + "','" + rx + "','" + description + "',0,'" + date + "')"; //将history表插入记录 stmt.addBatch(strSQL); //将SQL语句加入Batch中 strSQL="DELETE FROM pinqueue WHERE QID=" + qid; //从pinqueue表中删除记录 stmt.addBatch(strSQL); strSQL="UPDATE curappointment SET " + days[index] + "=" + (curpc + 1) + " WHERE DID='" + did + "'"; //将curappointment表中相应的可预约数量加1 stmt.addBatch(strSQL); //执行批处理SQL语句 stmt.executeBatch(); //通知数据库执行Bach conn.commit(); res=1; } catch(SQLException sqle){ res= -1; conn.rollback(); //数据库出错,回滚事务 Debug.log(Debug.getExceptionMsg(sqle)); } catch(IllegalArgumentException iae){ Debug.log(Debug.getExceptionMsg(iae)); res= -2; } catch(Exception e){ res=0; } finally{ return res; } } (5) 修改病历:updateHistory(int hid, String description, String rx, String diagnose) 本方法供医生修改病历。 参数 hid:病历编号。 diagnose:诊断。 rx:处方。 description:症状。 返回值 1:操作成功。 0:抛出一般异常。 -1:抛出数据异常。 -2:非法hid值。 (6) 结束治疗:finishedHistory(int hid) 本方法将结束患者的治疗过程(即将数据库中的―Finished‖字段设置为―1‖)。 24 参数 hid:病历编号 返回值 1:操作成功。 0:抛出一般异常。 -1:抛出数据库异常。 -2:非法hid值。 (7) 更改密码:updatePassword(String password) 本方法用于修改医生的密码。 参数 password:新密码。 返回值 1:操作成功。 0:抛出一般异常。 -1:抛出数据库异常。 患者模型Patient类 本类位于hospital.db.operation包中,Patient类封装了患者角色可执行的所有操作,部分代码如下: public class Patient extends DBOperation{ public static final String NAME="Name"; //封装―Name‖字段名 public static final String SECTION="Section"; //封装―Section‖字段名 public static final String ANONYMOUS="anonymous"; //封装匿名用户 private int PID; //存储患者表的―PID‖字段 public Patient(String id) throws InvalidUserException{ super(id); //调用父类构造器 } public int login(String password){ …… } public synchronized int addPatient(String username, String name, String password, int age, int sex,String address,String phone){ …… } public int getDoctorInfo(String orderBy){ …… } public int getCurrentDoctorInfo(){ …… } public int getHistory(){ …… } 25 public synchronized int makeAppointment(String did,int day,int ap){ …… } public synchronized int cancleAppointment(int qid){ …… } public int getAppointmentInfo(){ …… } public int getDoctorAppointmentInfo(String did){ …… } protected void checkUser(String id) throws InvalidUserException{ conn=DBConnection.getConnection(); strSQL="SELECT Username FROM patient WHERE Username='" + id + "'"; if(id.equals(Patient.ANONYMOUS)) return; try{ stmt=conn.createStatement(); rs=stmt.executeQuery(strSQL); if(!rs.next()) throw new InvalidUserException(); } catch(SQLException sqle){ Debug.log(Debug.getExceptionMsg(sqle)); } } } 下面对Patient类中的一些关键方法的功能和原理加以说明。 (1) 患者注册:addPatient 本方法用于患者注册,即向数据库中插入患者信息记录。 参数 username:用户名。 name:姓名。 password:密码。 age:年龄。 sex:性别。 address:联系地址。 phone:联系电话。 返回值 1:操作成功。 0:抛出一般异常。 -1:抛出数据库异常。 26 -2:账户已存在。 Patient.addPatient实现代码如下: public synchronized int addPatient(String username, String name, String password, int age, int sex, String address, String phone){ System.out.println("Name,Username,Password,Age,Sex,Address,Phone"+name +","+username+","+password+","+age+","+sex+","+address+","+phone); int res=0; conn=DBConnection.getConnection(); if(conn!=null){ System.out.println("conn isnot null"); }else{ System.out.println("conn is null"); } try{ String insertSQL = "INSERT INTO patient (Name,Username,Password,Age,Sex,Address,Phone)VALUES(?, ? , ? , ? , ? , ? , ?)"; PreparedStatement ps = conn.prepareStatement(insertSQL); ps.setString(1 , name); ps.setString(2 , username); ps.setString(3 , password); ps.setInt(4 , age); ps.setInt(5 ,sex); ps.setString(6 , address); ps.setString(7 , phone); ps.execute(); res=1; } catch(SQLException sqle){ Debug.log(Debug.getExceptionMsg(sqle)); res= -1; } catch(IllegalArgumentException iae){ Debug.log(Debug.getExceptionMsg(iae)); res= -2; } catch(Exception e){ res=0; } finally{ } return res; } (2) 查询医生信息:getDoctorInfo(String orderBy) 27 本方法查询所有医生的全部信息。 参数 orderBy:结果集排序方式。 返回值 1:操作成功。 2:抛出一般异常。 -1:抛出数据库异常。 Patient.getDoctorInfo实现代码如下: public int getDoctorInfo(String orderBy){ if(orderBy == null || orderBy.equals("")) orderBy=Patient.NAME; int res=0; conn=DBConnection.getConnection(); strSQL="SELECT DID,Name,Age,Sex,Level,Section,Specialism,Phone FROM doctor ORDER BY " + orderBy; try{ stmt=conn.createStatement(); rs=stmt.executeQuery(strSQL); result=rs; res=1; } catch(SQLException sqle){ Debug.log(Debug.getExceptionMsg(sqle)); res= -1; } catch(Exception e){ res=0; } finally{ return res; } } (3) 获取主治医生信息:getCurrentDoctorInfo() 本方法返回当前患者的主治医生的信息。其中―主治医生‖指已创建该患者病历且治疗过程未结束的医生。 返回值如下: 1:操作成功。 0:抛出一般异常。 -1:抛出数据库异常。 (4) 查询病历:getHistory() 本方法返回当前患者的所有病历。 返回值如下: 1:操作结果。 0:抛出一般异常。 28 -1:抛出数据库异常。 (5) 预约:makeAppointment(String did, int day, int ap) 本方法用于患者预约,即向数据库中插入一条预约记录,其流程如下: 向pinqueue表插入预约记录 将curappointment表中相应的可预约数量减1。 参数 did:医生编号。 day:预约日(0为周日,1为周一……)。 ap:上下午(0为上午,1为下午)。 返回值 1:操作成功。 0:抛出一般异常。 -1:抛出数据库异常。 -2:已在相同的时间预约相同的医生。 -3:day或ap格式错误。 Patient.makeAppointment的实现代码如下: public synchronized int makeAppointment(String did,int day,int ap){ int res=0; conn=DBConnection.getConnection(); SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String[] days={"SunA","SunP","MonA","MonP","TueA","TueP","WedA","WedP","ThuA","ThuP","FriA" ,"FriP","SatA","SatP"}; int index=0,curpc=0; try{ if(day < 0 || day > 6 || ap < 0 || ap > 1) //day必须是0,6之间的整数,ap必须 是0或1 throw new NumberFormatException(); index=day * 2 + ap; stmt=conn.createStatement(); strSQL= "SELECT * FROM curappointment WHERE DID='" + did + "'"; rs=stmt.executeQuery(strSQL); if(!rs.next() || (curpc=rs.getInt(days[index])) == 0) throw new NumberFormatException(); strSQL="SELECT Doctor FROM pinqueue WHERE Doctor='" + did + "' AND Patient=" + this.PID + " AND Day=" + day + " AND AP=" + ap; rs=stmt.executeQuery(strSQL); if(rs.next()) throw new IllegalArgumentException(); conn.setAutoCommit(false); //事务处理开始 stmt=conn.createStatement(); strSQL="INSERT INTO pinqueue (Patient,Doctor,Day,AP,Date) VALUES (" + 29 this.PID + ",'" + did + "'," + day + "," + ap + ",'" + dateFormat.format(new java.util.Date()) + "')"; //向pinqueue表插入预约记录 stmt.addBatch(strSQL); strSQL="UPDATE curappointment SET " + days[index] + "=" + (curpc - 1) + " WHERE DID='" + did + "'"; //将curappointment表中相应可预约数量减1 stmt.addBatch(strSQL); stmt.executeBatch(); conn.commit(); res=1; } catch(NumberFormatException nfe){ res= -3; } catch(SQLException sqle){ conn.rollback(); res= -1; Debug.log(Debug.getExceptionMsg(sqle)); } catch(IllegalArgumentException iae){ res= -2; } catch(Exception e){ Debug.log(Debug.getExceptionMsg(e)); res=0; } finally{ return res; } } (6) 取消预约:cancleAppointment(int qid) 本方法用于患者取消预约信息,即从数据库中删除相应的预约记录,其流程如下。 删除pinqueue表中记录 将curappointment表中相应可预约数量加1。 参数 qid:预约编号。 返回值 1:操作结果。 0:抛出一般异常。 -1:抛出数据库异常。 Patient.cancleAppointment实现代码: public synchronized int cancleAppointment(int qid){ int res=0; conn=DBConnection.getConnection(); String[] 30 days={"SunA","SunP","MonA","MonP","TueA","TueP","WedA","WedP","ThuA","ThuP","FriA" ,"FriP","SatA","SatP"}; int index,curpc,day,ap; String did=""; try{ strSQL="SELECT * FROM pinqueue WHERE QID=" + qid; stmt=conn.createStatement(); rs=stmt.executeQuery(strSQL); if(!rs.next()) throw new SQLException("QID does not exist."); day=rs.getInt("Day"); ap=rs.getInt("AP"); did=rs.getString("Doctor"); index=day * 2 + ap; strSQL="SELECT * FROM curappointment WHERE DID='" + did + "'"; rs=stmt.executeQuery(strSQL); rs.next(); curpc=rs.getInt(days[index]); conn.setAutoCommit(false); stmt=conn.createStatement(); strSQL="DELETE FROM pinqueue WHERE QID=" + qid; stmt.addBatch(strSQL); strSQL="UPDATE curappointment SET " + days[index] + "=" + (curpc + 1) + " WHERE DID='" + did + "'"; stmt.addBatch(strSQL); stmt.executeBatch(); conn.commit(); res=1; } catch(SQLException sqle){ conn.rollback(); res= -1; Debug.log(Debug.getExceptionMsg(sqle)); } catch(Exception e){ res=0; Debug.log(Debug.getExceptionMsg(e)); Debug.log(e.getMessage()); } finally{ return res; } } (7) 查询预约信息:getAppointmentInfo() 31 本方法返回当前患者的所有预约信息。 返回值如下: 1:操作成功。 0:抛出一般异常。 -1:抛出数据库异常。 -2:用户未预约。 Patient.getAppointmentInfo实现代码如下: public int getAppointmentInfo(){ conn=DBConnection.getConnection(); int res=0; strSQL="SELECT * FROM pinqueue WHERE Patient=" + this.PID; try{ stmt=conn.createStatement(); rs=stmt.executeQuery(strSQL); if(!rs.next()) throw new IllegalArgumentException(); res=1; rs.beforeFirst(); result=rs; } catch(SQLException sqle){ res= -1; Debug.log(Debug.getExceptionMsg(sqle)); } catch(IllegalArgumentException iae){ res= -2; } catch(Exception e){ res=0; } finally{ return res; } } (8) 查询医生预约信息:getDoctorAppointmentInfo(String did) 本方法返回某位医生的当前可预约信息。 参数 did:医生编号。 返回值 1:操作成功。 0:抛出一般异常。 -1:抛出数据库异常。 -2:did不存在。 32 管理员模型类Admin类 本类位于hospital.db.dboperation包中,Admin类封装了管理员角色可执行的所有操作,部分代码如下: public class Admin extends DBOperation{ public Admin(String id) throws InvalidUserException{ super(id); //调用父类构造器 } public int login(String password){ …… } public synchronized int addDoctor(String did, String name, String password, int age, int sex, String level, String spe, int[] pPerDay, String phone, String section){ …… } public int getDoctorInfo(){ …… } protected void checkUser(String id) throws InvalidUserException{ conn=DBConnection.getConnection(); strSQL="SELECT Username FROM administrator WHERE Username='" + id + "'"; try{ stmt=conn.createStatement(); rs=stmt.executeQuery(strSQL); if(!rs.next()) throw new InvalidUserException(); } catch(SQLException sqle){ Debug.log(Debug.getExceptionMsg(sqle)); } } public synchronized int removeDoctor(String did){ …… } } 下面对Admin类中的一些关键方法的功能和原理加以说明。 (1) 添加医生账户:addDoctor 本方法用于添加医生账户,其流程如下。 向doctor表中插入记录 向appointment表中插入记录 向curappointment表中插入记录。 参数 did:医生编号。 33 name:姓名。 age:年龄。 sex:性别。 level:职称。 spe:特长。 pPerDay:每天最大可预约数量(周日上午、周日下午、周一上午……)。 phone:联系电话。 section:科室。 返回值 1:操作成功。 0:抛出一般异常。 -1:抛出数据库异常。 -2:医生账户信息已存在。 Admin.addDoctor的实现代码如下: public synchronized int addDoctor(String did, String name, String password, int age, int sex, String level, String spe, int[] pPerDay, String phone, String section){ int res=0; conn=DBConnection.getConnection(); try{ strSQL="select DID from doctor where DID='" + did + "'"; stmt=conn.createStatement(); rs=stmt.executeQuery(strSQL); conn.setAutoCommit(false); if(rs.next()) //医生账户已存在 throw new IllegalArgumentException("Doctor ID '" + did + "' already exists."); stmt=conn.createStatement(); //向doctor表中插入记录 strSQL="INSERT INTO doctor (DID,Password,Name,Age,Sex,Level,Specialism,Phone,Section) VALUES ('" + did + "','" + password + "','" + name + "'," + age + "," + sex + ",'" + level + "','" + spe + "','" + phone + "','" + section + "')"; (DID,Name,Password,Age,Sex,Level,Specialism,Phone,Section)VALUES(?, ? , ? , ? , ? , ? , ? , ? , ?)"; stmt.addBatch(strSQL); //向appointment表中插入记录 strSQL= "INSERT INTO appointment (DID,SunA,SunP,MonA,MonP,TueA,TueP,WedA,WedP,ThuA,ThuP,FriA,FriP,SatA,SatP) VALUES ('" + did + "')"; for(int i=0;i < 14;i++){ strSQL+=","; strSQL+=pPerDay[i]; } strSQL+=")"; 34 stmt.addBatch(strSQL); //向curappointment表中插入记录 strSQL= "INSERT INTO curappointment (DID,SunA,SunP,MonA,MonP,TueA,TueP,WedA,WedP,ThuA,ThuP,FriA,FriP,SatA,SatP) VALUES ('" +did + "'"; for(int i=0;i < 14;i++){ strSQL+=","; strSQL+=pPerDay[i]; } strSQL+=")"; stmt.addBatch(strSQL); stmt.executeBatch(); conn.commit(); res=1; } catch(SQLException sqle){ Debug.log(Debug.getExceptionMsg(sqle)); conn.rollback(); res= -1; } catch(IllegalArgumentException iae){ Debug.log(Debug.getExceptionMsg(iae)); res= -2; } catch(Exception e){ res=0; } finally{ return res; } } (2) 获取医生账户信息:getDoctorInfo() 本方法返回所有医生信息。 返回值如下: 1:查询成功。 0:抛出一般异常。 -1:抛出数据库异常。 -2:医生账户不存在。 (3) 删除医生账户信息:removeDoctor(String did) 本方法删除医生账户,其流程如下: 从doctor表中删除记录 从appointment表中删除记录 从curappointment表中删除记录 从pinqueue表中删除记录 从history表中删除记录。 参数 did:医生编号。 35 返回值 1:操作成功。 0:抛出一般异常。 -1:抛出数据库异常。 -2:医生账户不存在。 5.2.2.4 抽象用户模型DBOperation类 本类位于hospital.db.dboperation包中,定义了一个抽象的用户模型,系统中所有的角色(patient,doctor,admin)都是它的子类。DBOperation的核心代码如下: abstract class DBOperation{ protected Statement stmt; protected ResultSet rs; protected ResultSet result; protected String strSQL; protected String id; protected Connection conn; public DBOperation(){} protected DBOperation(String id) throws InvalidUserException{ this.id=id; this.result=null; try{ this.checkUser(id); } catch(InvalidUserException iue){ throw iue; } } public ResultSet getResultSet(){ return result; } protected abstract int login(String password); public void closeConnection(){ try{ if(rs!=null){ this.rs.close(); } if(stmt!=null){ this.stmt.close(); } } catch(SQLException sqle){ Debug.log(Debug.getExceptionMsg(sqle)); } } 36 protected abstract void checkUser(String id) throws InvalidUserException; } 下面对DBOperation中的一些关键方法的功能和原理加以说明。 (1) 构造器:DBOperation(String id) 此类构造器中需要完成以下工作。 由参数id初始化私有标志符变量id。 初始化ResultSet对象result为null。 调用抽象方法checkUser(String id)(需由子类实现)判断用户名是否合法。若用户名不合法,则抛出自定义异常―InvalidUserException‖。 (2) 释放数据库资源:closeConnection() 本方法完成以下工作。 关闭ResultSet对象rs。 关闭Statement对象stmt。 由于Connection对象conn是单例对象,可以被其它类重用,所以不在这里关闭。 (3) 用户登录:login(String password) 本方法处理用户的登录操作,由于有些操作不需要用户登录就可以完成(比如患者查询医生信息),所以从构造器中把跟登录有关的内容分离出来放在这个方法中,当需要登录时只要使用密码为参数(用户名已被记录在类变量id中)调用login()方法就行了。另外,各个子类对用户登录操作的实现不一样,所以把此方法定义成抽象方法,由各个子类去实现。 (4) 判断用户名的合法性:checkUser(String id) 这个方法被构造器调用,检查用户名的合法性(即用户名是否存在于数据库中)。由于各个子类实现的方式各不相同,所以将此方法定义为抽象方法,由各个子类去实现。 第六章 测试 第一节 测试基本方法 37 一、界面测试 界面测试是测试过程中比较简单直观的一种测试方法,只要细心地按界面要求核对就行了。可这块往往是程序开发人员容易忽视和遗漏的地方,也常常是出Bug的地方。下面是界面测试中经常实现的几种Bug: (1) 错别字,即界面中的标题或者文本内容中出现了错别字。 这种Bug如果测试人员不细心,很难找出来,可能会出现在提示信息或界面中。 (2) 出现了一些根本读不懂的内容,一般多出现在程序的提示信息和一些较长的文本中。 这种情况基本上出现在拼起来显示的提示中,比如程序员为了调试程序,会alert出来一些xml或者SQL的信息,还有页面的简单陈述是通过变量拼组起来的,通过程序将字一个一个地输出出来。通常是因为程序中的控制错误或是程序开发人员对程序没有认真的自测,导致出现这种Bug。 (3) 程序员自创的词语,虽然意思对,但不符合界面的标准及要求。 这种情况基本上是由于开发人员使用一些专用术语,并且混杂着自己的理解出现Bug,主要是由于开发过程中团队合作没有明确的分工,没有统一的规范用语。 (4)页面类似的内容中,明显有字体、字号不同的情况,使界面整体风格看上去不一致。 这种情况只出现在没有CSS定义的情况下,或是已经定义的CSS,开发人员在开发过程中没有调用。 (5)标题相近的程序及模块,把标题弄混。 这种情况多是因为业务方面的定义名称很相似或很类似,并且业务实体方面也很类似,开发人员在开发过程中忽略了开发名称和模块,只单独地实现其功能。 二、功能测试 顾名思义,功能测试主要是测试程序模块是否实现了设计中所要求的功能。功能测试中需要注意的有: (1) 查询功能中,有按单一查询条件进行查询的,也有按多个查询条件组合查询的。这里要注意的多个查询条件之间的关系。还有一些常识性的问题,比如按月查询,闰月中二月的天数。 (2) 录入功能中,需要注意的是前台设置的数值长度是否大于后台数值长度,以及前台和后台的数据结构是否相符,很多时候录入功能无法实现是由于这些原因。还有就是必须录入的字段的设置时候有误。 (3) 测试删除功能中需要注意的是单击―删除‖按钮后,一般会出现提示信息,询问是否确定删除。通常情况下,我们单击―确认‖按钮查看信息是否被删除掉了,而忽略了单击―取消‖按钮后程序的反应:这时有可能的是没有删除,还有一种可能是即便单击了―取消‖按钮,也一样删除了数据。另外,在删除多条记录的时候,要注意连续选中的几条记录是否真正都被删除掉了,即如果再按照这种查询方式查询,时候还能查询出来。有的时候需要在数据库中设立一个标志位,而不是真正的物理删除。所以在下一次查询中,可能还会被查询出来,这主要是因为在查询条件中没有将标志位考虑在内。 (4) 关于修改功能的测试主要是看修改确认后是否数据真正已被修改了。这是最基本的功能,需要注意的是看是否能把不应该修改的数据也修改成功了。 除此之外,还有: 时常有这样的情况发生,每个模块都能单独工作,但这些模块集成在一起之后却不能正常工作。其主要原因是,模块相互调用时接口会引入许多新问题。这就要求在进行程序设计和编码的时候要尽可能地从整体考虑。 引用某些控件,实现了程序中未实现功能的同时,也容易引发新的Bug。 38 错误本身出现在程序设计阶段,并非由于程序员编码造成的问题。这就要求我们无论是在开发还是测试阶段,对需求或程序设计存在疑问,应及时提出,及时解决。 由于一些模块被修改了,对其他模块造成了影响而出现了新的Bug。发现这些Bug要求我们对程序整体的结构有基本的了解,清楚模块之间的一些联系。 第二节 测试用例及测试结果 (1) 测试患者用户功能模块的实现情况 用户通过注册成为患者用户,通过注册的账号和密码登录到该系统。测试时创建nemo患者用户,患者nemo登录系统,登录密码为123456,nemo登录后可以查询医生信息、预约医生、查询医生预约信息、查询主治医生信息和查询病历等。 查询医生信息,如图所示: 图 6.1 患者登录后查询医生信息图 查看LiuRufeng医生的预约信息 39 图 6.2 患者查看医生预约信息图 同时,患者还可以预约医生,如图所示: 图 6.3 患者预约医生图 (2) 测试医生用户功能模块的实现情况 医生Dido Fido的登录系统,用户名为00001,登录密码为123456,医生登录后可更改密码、查看患者病历信息、查看预约信息、创建病历、更改病历、结束治疗等。 40 创建病历,如图所示: 图 6.4 医生创建病历图 查询患者病历,如图所示: 图 6.5 医生查询患者病历图 41 更改患者病历,如图所示: 图 6.6 医生更改患者病历图 (3) 测试管理员用户功能模块实现情况 管理员admin登录,登录密码为:123456,管理员登录后可以添加医生账户、删除医生账户、 查询医生信息。 添加医生账户,如图所示: 42 图 6.7 管理员添加医生账户图 本系统功能基本可以实现,但仍存在需要改进的地方,如: (1) 使用连接池(DataSource Pool) 本系统的DBConnection类负责与数据库进行连接,并返回一个Connection对象,其内部具体是调用了JDBC的DriverManger.getConnection()方法来建立连接。尽管设计时使用了单例模式来提高性能,但是当逻辑层分布在多个服务器上时,系统将同时运行在不只一个JVM上,这样Connection对象的数量将不只一个,而其中一个JVM上的Connection对象也不能被其他JVM使用,这样就造成了资源的浪费,我们应该更提倡使用―连接池‖。 (2) 使用存储过程(Stored Procedure) 本系统中所有与数据库相关的方法都是通过返回值来标志其操作结果的,而这些返回值大多都是来自于捕捉不同的异常得到的。有些操作,比如添加医生账号,必须先向数据库发送一条请求,得到一个记录集,然后查找记录集。如果要添加的用户名没有在记录集中,那么可以将记录插入到数据库中,但这样又得发送一条SQL语句。如果使用存储过程,返回值的问题将由数据库处理,而类似于添加医生账号这样的操作也只需发送一条语句去调用服务器上的存储过程。 结 论 回顾系统创建的前后过程,我感受了到基于网络的数据库系统开发的一些软件工程思想,比如B/S三层结构模式、模块化程序设计、自顶向下的系统分析等。 在系统开发的早期,经过调查详细的了解用户需求对系统的成败以及使系统能够最大限度的满足用户需求起着至关重要的作用。在了解了系统的功能要求后着手考虑系统的开发模式和开发中采用的技术。B/S 模式是当前开发网络数据库系统的潮流,考虑到数据库操作和数据更新的特点,JSP技术是理想的开发工具。采用自顶向下的思想,将系统划分为管理员部分、 43 患者和医生三部分,然后对这三部分的功能加以细化,得到更小的功能模块。结合系统的功能进行数据库设计,充分考虑数据库的完整性和安全性,尽量减少数据的冗余度。在代码测试过程中先对每个功能模块进行单独测试,然后不断扩大组合成上一级模块并对其进行测试,最后整合为一个完整的系统,从而减少了代码测试和系统维护的难度。 致 谢 首先我要感谢的是重庆邮电大学所有辛勤工作的老师们,尤其是计算机网络的各位授业恩师,在几年的学习和生活中,通过他们时时处处的言传身教,训练了我的思维,开阔了我的视野,才使得我们能够在知识的海洋里去畅游、去探索、发现、解决遇到的各种难题。不但使我学到了许多有益的知识,而且培养了我思考问题的方法和随时观察社会的良好习惯,我将终身铭记。 其次,向我的毕业论文指导老师李红娟老师致以我发自肺腑的感激和谢意~从我在李红娟老师的指导之下做毕业论文以来,从论文的选题到论文提纲的确立,无论是从论文内容到论文格式,在这几个月的论文撰写过程中,李老师都给予了我极大的帮助和指导。承蒙李老师悉心指导,使我的论文质量有了很大的提高。 最后,要向在研究过程中对我提供帮助的同学表达的谢意。我希望能用这篇毕业论文向他们致谢,感谢他们对我的支持和鼓励。 44 参考文献 [1] 张奕珠. 医院信息管理系统存在的问题及设想[J]. 辽宁师专学报,2001,3(1):107-108. [2] 黄晓红,王思贤,何楚. 基于Web医疗信息管理系统的设计与实现[J]. 计算机应用研 究,2000,29(10):99-102. [3] 尚武,杨涌. 我国医疗信息系统及发展趋势[J]. 中华医学图书情报杂志,2002,11(4):14-17. [4] 陈康,彭浩文,余俊蓉. 医疗门诊系统的设计与应用[J]. 计算技术与自动 化,1998,17(4),35-36. [5] 肖春玲,陈彦方. 医疗信息系统与电子病历[J]. 国际精神病学杂志, 2006,33(1):12-15. [6] 马迪芳,宋泾舸,王芳. Java程序设计实例[M]. 北京:清华大学出版社,2002. [7] 刘晓华,张健,周慧贞. JSP应用开发详解[M]. 北京:电子工业出版社,2007,1 [8] 萨师煊,王珊. 数据库系统概论[M]. 北京:高等教育出版社,2000,2. [9] 邓子云,张赐. JSP网络编程从基础到实践[M]. 北京:电子工业出版社,2005.9. [10] 汪孝宣,刘中兵,徐佳晶. JSP数据库开发实例精粹[M]. 北京:电子工业出版社,2005,1. [11] Walter Savitch. Java an introduction to computer science&programming. 北京:清华大学出 版社,2005,1. [12] Bruce Eckel. Thinking in Java. Pearson Education,2005,5. [13] Luo yan. Design and Implementation of E-Learning System Based on j2ee[J]. Journal of Electronic Science and Technology of China, 2005,3.. [14] 张孝祥. Java就业培训教程[M]. 清华大学出版社, 2003,7. [15](美)梁, 万波. Java语言程序设计基础篇[M]. 机械工业出版社, 2008,9. 45 附录 程序代码 hospital.db.dbconnection: package hospital.db.java: import java.sql.*; /** * 本类用于与数据库建立连接 */ public abstract class DBConnection{ /** * 与数据库建立连接 * * 返回值,Connection对象 */ public static Connection getConnection(){ Connection conn=null; try{ if(conn == null){ Class.forName("org.gjt.mm.mysql.Driver"); conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/hospital","root","nemo"); Debug.log("Connecion created."); } else{ Statement stmt=conn.createStatement(); ResultSet rs=stmt.executeQuery("SELECT COUNT(*) FROM administrator"); if(rs==null||!rs.next()){ Class.forName("com.mysql.jdbc.Driver"); conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/hospital","root","nemo"); Debug.log("Connecion re-created."); } } }catch(Exception ex){ System.out.println("连接不上"); Debug.log(Debug.getExceptionMsg(ex)); } return conn; } } Hospital.db.Debug.java: package hospital.db; import java.io.*; 46 import java.util.Date; import java.text.SimpleDateFormat; /** * 本类用于将网站运行时遇到的异常信息记录到文件中 */ public final class Debug{ private static Debug instance=null; private static SimpleDateFormat dateFormat=null; private static FileOutputStream fos=null; private Debug(){ } /** * 初始化Debug对象 * * 参数: * path,日志文件存储路径 * * 返回值,Debug单例对象 */ static synchronized Debug init(String path){ String file=""; String fullPath=""; if(instance == null){ instance=new Debug(); dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); file="" + (new SimpleDateFormat("yyyy-MM-dd")) .format(new Date()) + ".log"; try{ fullPath=path + "\\" + file; fos=new FileOutputStream(fullPath,true); } catch(IOException ioe){ System.err.println("Cannot open file " + file + "," + fullPath); } } return instance; } /** * 将信息记入日志文件 * * 参数: 47 * msg,信息 */ public static synchronized void log(String msg){ String s2=dateFormat.format(new Date()) + " " + msg + "\n"; if(instance != null) instance.writeFile(s2); else System.err.println(s2); } /** * 将信息记入日志文件,供log(String msg)调用 */ private String writeFile(String msg){ if(fos == null){ return "Log file cannot be opened"; } try{ fos.write(msg.getBytes()); fos.flush(); } catch(IOException ex){ return ex.getMessage(); } return null; } /** * 生成格式化异常信息 * * 参数: * e,异常 * * 返回值,格式化后的异常信息 */ public static String getExceptionMsg(Exception e){ StackTraceElement ste=e.getStackTrace()[0]; String msg=ste.getClassName() + "." + ste.getMethodName() + "() Ln " + ste.getLineNumber() + ": " + e.getMessage(); return msg; } } Hospital.db.InitServlet.java: package hospital.db; import javax.servlet.*; import javax.servlet.http.*; 48 /** * 本类用于初始化Servlet */ public class InitServlet extends HttpServlet{ /** * 该方法从HttpServlet类继承,在初始化Servlet会自动调用 */ public void init() throws ServletException{ String logPath=getServletContext().getRealPath("/log/"); Debug.init(logPath); Debug.log("Server started."); } /** * 该方法从HttpServlet类继承,销毁Servlet对象时会自动调用 */ public void destroy(){ Debug.log("Server shutted down."); } } 门诊收费系统的设计与实现 摘 要 医院信息系统HIS(Hospital Information System)为医院所属各部门提供病人诊治信息和行政管理信息的收集、存储、处理、提取和数据交换的能力,门诊管理信息系统是其中的一个重要子系统,论文论述了门诊管理信息系统开发思路、策略和方法。 论文针对中小型医院设计开发了一个基于C/S结构的医院信息管理系统的一个子系统——医院门诊医疗管理系统。通过计算机和网络技术实现对医院医疗信息的全过程追踪和动态管理,从而简化了患者的诊疗过程,优化了就诊环境。论文首先分析介绍了系统开发的背景、国内外的研究现状、运用中遇到的问题以及本文的构成;其次,以医院信息管理系统中门诊挂号子系统、门诊收费子系统、药房管理子系统和门诊医生子系统四个子系统为重点进行了需求分析、系统设计和实现;最后,对已进行的研究和开发工作进行了总结和展望。 【关键词】医院信息系统,医疗管理,C/S结构 Abstract Hospital Information System (HIS) provide hospital treatment information and administrative information collection、storage、processing、extraction and data exchange capacity for their respective departments. This papers elaborates the system development ideas、strategies and methods of the out-patient management information system which is one of the major subsystems of Hospital Information System。 49 In view of the middle and small scale hospital this paper designs a hospital informationmanagement system's sub-system based on a C/S structure----Hospital outpatient service medical service management system。Through the computer and the networking realizing entire process tracing and the dynamic management for hospital medical service information. The paper first analyzed introduced in the system development's background, the domestic and foreign research present situation, the utilization met question as well as this article constitution; Then, taking the hospital information management system in the outpatient service registration subsystem, the outpatient service charge subsystem, the pharmacy management subsystem and outpatient service doctor the subsystem four sub-systems for focus analysis the demand analysis, the system design and realizes; Finally, carrying out summary and outlook for the research and the development work。 【Key Words】 Hospital Information System;Medical management; C/S Moudle 目 录 1 绪论 错误~未定义书签。 1.1 系统开发背景 1 1.2 国内外研究现状 1 1.2.1国内研究现状 1 1.2.2国外研究现状 2 1.3 论文主要内容 3 1.4 系统的基本构成 3 2 需求分析 5 2.1 门诊医疗简介 5 2.2 主要业务数据流程分析 6 2.2.1门诊挂号 6 2.2.2门诊退号 7 2.2.3门诊就医 8 2.2.4门诊收费 9 2.2.5门诊药房发药 10 2.2.6门诊药房管理 11 2.3 数据分析 11 2.3.1数据字典分析 11 2.3.2整体E-R图 12 3 系统设计 14 3.1 系统模块结构设计 14 3.2数据库设计 18 4 系统的实现 22 5 总结与展望 30 参考文献 31 致 谢 32 50 1. 绪论 1.1 系统开发背景 门诊医疗是医院管理的门面,流量大,手续较繁锁,在手工方式下,医护人员要做大量不必要的重复工作、效率低、准确性差、不方便管理,影响工作效率,造成了很多就诊病人得不到合理有效的快捷就诊服务,甚至影响医疗质量,为此,越来越多的医院加快了信息化建设的步伐,本项目为南昌男科医院而开发,系统目前运行状况良好,有效地优化服务和工作环境、使病员和医生情绪得以放松,提高了服务效率和质量、树立了医院的良好形象,使门诊工作可以高效有序的运转,提高了医院的经济效益,促进医院的发展。 1.2 国内外研究现状 1.2.1 国内研究现状 我国医院信息系统(HIS)的发展阶段可以分为三个部分:第一阶段,是医院管理信息系统建设阶段(HMIS);第二阶段,是医院临床信息系统建设阶段(HCIS);第三阶段,是建设区域卫生信息系统阶段(GMIS)。在实现医院信息化的过程中,标准化是一个不能回避的问题。流程的标准化是和医院的改革,医院的管理科学化包括现代医院建设密不可分的。医院信息化管理的总体目标主要有: (1) 改变医院的管理模式,以数字化管理、信息化管理为核心,形成先进的医院管理理论和医院管理模式。 (2) 建立医院内部完善的医院信息处理系统,最大限度地服务于病人和医护人员。 (3) 建立医院的办公自动化系统。 (4) 建立高度信息化的医疗研究与教学系统。 (5) 建立完善的医学交流体系,通过现代的通讯、信息手段,达到随心所欲的医学交流,可极大地推动医学的发展。 (6) 建立全面的信息化的医学咨询系统、健康咨询系统。 (7) 进行智能化研究,提供医疗的智能化服务。 (8) 制定及完善医药信息学标准。 医院信息化发展要经历医院管理信息化、临床管理信息化、局域医疗卫生服务三个阶段,我国医疗信息化多数还停留在第一个阶段。据业内人士介绍,2005年,国内的医院信息系统(HIS)厂商有1000多家,其中比较大的有100多家。各个医院使用不同厂商的HIS,硬件环境也不尽相同,异质系统平台和非标准信息格式阻碍了同行间及行业间的信息交流。当涉及到病人转诊等问题时,各方无法直接实现电子信息的交换,只能通过手工操作来完成。 1.2.2 国外研究现状 国际上医院信息化管理大致可分为三个阶段:第一个十年,集中在开发医院行政管理的功能上,如财务收费、住院病人和门诊病人管理等,但到了1972年Collen仍报告美国连一个成功的已完成的全面医院管理计算机系统都没有。第二个十年,在继续完成和实现医院管理信息计算机化的同时,开发者的努力已进入医疗信息的处理领域,如病人医疗处理系统,实验室系统等。到了1985年,美国全国医院数据处理工作调查表明,100张床以上的医院,80%实现了计算机财务收费管理、70%的医院可支持病人挂号登记和行政事务管理,25%的医院有了较完整的HIS。最后一个十年至今,研究者又把重点放在了病人床边系统(Bedside Information System)、医院影像处理系统(Picuure Archiving and Communication System,PACS)病人计算机化病案(Computer Based Patient Record, CPR)、统一的医学语言系统(Unified Medical Language System,UMLS)等方面。医院 1 信息系统正在经历着小型化、智能化和集成化的改造过程。刺激美国采用计算机系统的重要因素有: (1)为病人提供最好、更快的服务,提高医院在医疗服务市场上的竞争力,以吸引更加病人到本医院就医。 (2)人力工资的昂贵,迫使医院采用计算机以提高劳动效率。 (3)国家和保险公司为施行欲付款制度(Prosprctive Payment System,PPS)而要求医院及时上交复杂的有关DRGS的报告,迫使医院采用计算机技术。 日本的HIS开发和应用从70年代初开始。多数日本医院是80年代以后开始进行HIS工作的,住院系统也有了初步的发展,但发展十分迅猛,规模相当大,是以大型机为中心的医院计算机系统。当前日本的HIS总的趋势是系统化、网络化、综合性,开始走自上而下的开发路线,一般都有大型机作为中心、支撑整个系统工作,并尽量采用微机和网络技术,投资规模大。 1.3 论文主要内容 本文阐述了门诊医疗管理以病人为核心的设计思路,介绍了系统的开发过程和原理,根据软件开发的流程,从系统需求分析,系统设计,再到系统的实现。第一张为引言;第二章讲叙了系统需求分析,首先由医院管理者提出需求,根据用户需求开发人员经过市场调查得出系统要实现的功能。以及对系统的业务数据流程分析和数据分析。第三章讲述了系统设计,主要讲述如何实现需求分析时提出的功能需求,本章包括系统模块结构设计、系统功能模块设计和数据库设计,第四章系统的实现,这章是确定应该怎样具体实现第三章所要求的系统。 1.4 系统的基本构成 门诊部医疗信息管理系统主要是对医院门诊部挂号和收费,药房以及医生就诊进行管理。 主要功能模块有: 门诊挂号和收费模块 药房管理模块 门诊医生模块 对于门诊挂号,作为医院面对病人的第一个门面,主要是针对给病人挂号;查询病人的挂号信息和交款信息;统计挂号科室、医生、挂号员工作量、挂号病人的报表;门诊收费,作为医院对病人在医院看病的费用进行缴费部门,主要作用是门诊收费、收费查询、统计报表。 对于药房管理主要功能是对医院的药品进行入出库进行管理,对库存中的药品进行盘点和审核,查询药品的入库、盘点、库存、以及对病人的取药、退药查询,合理用药的咨询。统计药房人员工作量、药品日用量的报表。 门诊医生的主要功能是通过病人的先主诉病情,然后对病人进行诊治,给病人进行检查、检查、手术、住院申请,申请单将自动传到收费处和医技科室;可以查询病人的历史信息;对病人的退费、退改处方要求进行审核、处理; 2 2. 需求分析 2.1 门诊医疗简介 门诊病人来院后,首先挂号,然后到医生处就诊,医生可能会开具检查单、化验单,病人交费后进行相关的检查和化验,其结果能支持医生判断病情,此时,医生开出治疗单、处方或手术单等,病人交费后接受相应处理。 本系统主要应实现以下功能: (1)挂号 预约挂号、来医院挂号、急症、医疗卡服务、就诊卡的设计与管理、所挂科目、科室的位置、挂号收费、登记。 (2)退号 对病人挂号做出退费处理。 (3)就诊(包括检查) 根据具体的症状进行检查、就诊,并开出处方。 (4)收费 ?根据检查的项目及医生所开处方的具体药品,和划价系统中的具体金额进行收费。 ?支持多种收费方式、收费标准、收费项目、付款比例适应医院对不同病人的服务要求,特别支持医疗保险病人。 ?提供与门诊收费相关的各类报表 ?提供门诊医疗统计、门诊科室及工作人员部分核算数据和工作量统计。 ?退费处理方法合理有效,结帐方法灵活安全。 (5)发药 ?药房根据处方,检查药房内是否有足够的药方上需要的药,是否需要去药房去取以补足货源。 ?可以根据药品的限期及库存下限来来进行缺药、失效预告、对药品进行数量、金额双重控制。 ?核对已收费处方无误后予以配药、发药处理。 ?支持病人处方的退药处理,并增加门诊药房库存。 ?支持协定处方管理录入,能够自定义协定处方,加快划价/收费(员)录入速度。 ?门诊药房系统中又分为门诊中药房和门诊西药房两子系统,两者主要功能相同。 (6)药品管理 ?各药房以药库为中心,请领药品、入库、调价。 ?发药后减去门诊药房库存。 ?对购进药品从品种数量、价格等进行验收入库处理,根据临床需要和库存情况进行出库处理:除日常的出库外,还有调拨、报损、退药等多种形式出库。 ?严格药品有效期管理。 ?高度的自动处理功能:系统可根据有效期自动预告失效药品;对呆滞药品进行预告;对超限药品进行报警。 ?有丰富的报表功能:药品台帐、药品名细帐、药品月统计、药品出入库单、药品调价单、药品报废单等。 2.2 主要业务数据流程分析 2.2.1 门诊挂号 病人首先可以预约挂号;到医院挂号后,先确定是不是急诊,病人有没有磁卡,有先读 3 取磁卡的信息;为病人选择科室,病人选择选择医生的级别,医院为该病人指派医生(查询该级别该科室各医生当前侯诊数,选择候诊数最少的该级别当班医生),对该病人收取挂号费用,登记挂号信息。如图2-1所示: 根据病人基本信息查询统计其磁卡号或门诊号老病人挂号信息磁卡遗失 新病人病人输入基本登记新磁可挂号否信息卡 磁卡挂号老病人NY查询接诊选择数读取病人选医生科室Y磁卡 挂号选择挂号数量N医生受限否? 不挂号病人选择医生级别 结束选择医生级别(由院方医生挂指派医生)号数+1 查询该级别该科室各医生当医生当班收费各医生候前候诊数挂号数、接诊数据诊数据 入帐选择候诊数最少的该级别当班医生 帐目表 打印图2-1 病人挂号数据流程图 2.2.2 门诊退号 挂号病人由于某种原因要求退号,医院读取病人的磁卡,查询挂号的信息,是否是当日的挂号(如果不是当日的挂号,医院则不给与退号处理;为该病人做出退号处理,删除挂号的信息,给病人退挂号费用;对退出的费用记账帐,打印出退号凭证。如图2-2所示: 4 图2-2 病人退号数据流程图 2.2.3 门诊就医 病人挂号到指定医生就诊,医生询问病人是否是复诊或者初诊(复诊的话查询病人的历史就诊信息);病人向医生叙述病情,医生记录病情和病历;医生对病人阐述的病情给与诊断,诊断然后给病人开药(配置禁忌检查,询问病人同意否,同意的话给病人写电子病历);需要做化验、手术、检查、住院的,给该病人开申请单,病人拿着医生开出的药品单;化验、手术、检查、、住院申请单到收费处缴费,缴完费用后到拿着单据到门诊药房取药;化验室、检查室做化验和检验;手术室领取手术时间表;到住院部让住院护士安排床位;如图2-3所示: 5 初诊病人挂读取号信息磁卡 复诊 入院读取磁卡病人叙述电子病历查询历病情史就诊记录病情信息记病历 开化验单、手术单、检查检查结保存入电单、注射单并果子病历显示价钱、临电子病历时总计价钱 开药单据 各种处理 交费处交费划价,收费 配置禁按磁卡忌检查号或姓手术室名查询 NN Y已交费处方病理非法医技科对应检查 药房 Y写电子显示价完毕?确定同意否?病历钱 电子病历 临时统计 图2-3医生就诊数据流程图 2.2.4 门诊收费 门诊收费是对病人在门诊就医时所有的费用都在此处缴纳。接受病人的交费单据,刷卡读取该病人的收费单据,对病人费用进行收费。收费后打印发票,给病人一张收费单据。 费用每日结算后打入财务科。如图2-4所示: 6 图2-4门诊收费流程图 2.2.5 门诊药房发药 药房根据处方,检查药房内是否有足够的药房上需要的药,是否需要去药房去补足货源;根据药品的限期及库存下限来进行缺药、失效预告、对药品进行数量、金额双重控制;核对已收费处方无误后给与病人配药、发药处理。如图2-5所示: 图2-5 药房发药流程图 2.2.6 门诊药房管理 对门诊药房的药品出入库进行操作登记。对门诊挂号的病人需要用药时,需要医生开出的处方单取药,如需退药,需要申请,说明退药的原因,在得到审核通过后方可进行退药操作。保证药品的及时供应,不耽误病人的病情,通过对各种药品的入库及出库情况进行详细的登记,保证不断药,药品的质量安全。提供各种药品的各种取用清单的查询 7 与打印。如图2-6所示: 药品清单 药品入库接收取药申请是否已收费 是否 生成发药清单拒绝发药 与医生处方单核对 是是否无误否 发药查询核对清单 减少库存,更新药品清单 图2-6 门诊药房管理流程图 2.3数据分析 2.3.1数据字典分析 系统中所设计的数据字典如下: 挂号处{编号,值班人员} 病人{挂号编号,姓名,性别,年龄,身份证号} 挂号单{挂号编号,挂号方式,病人姓名,主治医师,挂号日期} 病历{病例编号,病人姓名,病历信息} 病人{挂号号,姓名,年龄,身份证号,是否住院} 开处方{处方号,处方内容,病人姓名,病人年龄,附注} 医师{医师号,姓名,性别,职称,年龄,工作时间} 检查{检验序号,病人挂号号,检验内容,检验医师} 收费项目{病人号,收据项目,项目类型,项目序号,收费人员,收费金额} 收据{收据号,收据项目,所收金额,收款日期 } 处方{处方号,病人姓名,病人年龄,主治医师,处方内容,附注} 药品{药品编号,名称,数量,单价,规格,禁用者,生产日期,有效期} 药品出库{药品编号,名称,数量,出库日期} 药品入库{药品编号,名称,数量,出库日期} 8 药房{药品编号,名称,数量,门诊药房编号,药库数量} 药品采购{药品编号,名称,数量,采购时间} 2.3.2整体E-R图 一个病人只有一张病历且一张病历只能属于一个病人;一个病人一次(由时间确定)只有一张挂号单,一张挂号单只能属于一个病人;一个病人由一个医师进行诊断和开处方(处理简单),一个医师可以接诊很多病人和为其开处方;一个病人只有一张处方,一张处方只能属于一个病人;一个病人可以进行多项检查,一项检查也可以进行诊断多个病人; 一个病人可以有多个收费项目和收据,但一项收费项目或收据只能对应一个病人;收费项目和收据是多对多关系;一份处方可以对应多种药品,一种药品可以包含在多份处方里;药房对其他各实体的一对多的联系;整体E-R图如图2-7所示: 挂号方式 挂号单 编号日期1 职称拥有 挂号名医师号1 nm姓名姓名病人就诊医生 1 年龄 处方号产生 1日期病名n1处方单产生诊断结果 编号名称 1 病人姓名治疗方案收费单价编号药品1n m1金额收费单通知药房领药n 数量项目日期名称日期图2-7门诊医疗管理系统整体E-R图 9 3.系统设计 3.1系统模块结构设计 医院门诊医疗管理可以分为:门诊挂号管理模块,门诊收费管理模块,药房管理模块,门诊医生模块四大部分。结构图如图3-1所示: 门诊医疗管理系统 统 门诊挂号管理 门诊收费管理 药房管理 门诊医生模块 医退病 门发收出取 生改人诊查 统票收费统入盘查统药 工处信挂询 计 管费 查计 库点 询 计 管 作方 息 号 理 询 管理 站 查理 图3-1系统模块结构图 询 各模块的基本功能如下: (1)门诊挂号管理基本功能。 ?门诊挂号 门诊挂号:病人进行挂号收费处理。输入病人的信息:姓名、性别、年龄;选择病人类型、挂号类别、挂号科室、值班医生;挂号的金额,是否优惠。点击确定,保存该病人挂号的信息。 挂号修改:挂号员对病人挂号的信息进行修改收费;输入病人的挂号编号,对病人的挂号信息进行修改后,点击修改,进行收费结算。 退号:对挂号病人进行退号处理。 挂号预约:病人预先进行网络或者电话预交挂号。输入预约病人的信息:预就诊日期、预约科室、预约医生、病人姓名、性别、出生日期、病情说明、预约人、联系方式、预约方式;点击预约保存预约病人的信息。 挂号日结:对门诊每一天挂号的费用进行结算。 ?查询 挂号查询:按照挂号日期、挂号编码、挂号有效期、姓名、性别、年龄;病人类型、挂号类别、挂号科室、值班医生、挂号员、交款号等对病人挂号的信息进行查询。 预约查询:通过查询列的分类对预约的病人进行查询。 交款查询:通过查询列中的分类、条件值、查询的起止日期对病人的交款费用查询。 ?统计 挂号科室统计报表:根据科室对挂号信息进行统计和导出数据库。 挂号医生统计报表:根据医生对挂号信息进行统计和导出数据库。 挂号分类统计报表:根据挂号分类对挂号信息进行统计和导出数据库。 挂号病人类型报表:根据病人类型对挂号信息进行统计和导出数据库。 ?发票管理:对发票的领用情况及使用情况进行详细登记 (2)门诊收费管理基本功能。 ?收费 10 门诊收费:对医生给与病人开出的处方给与收费。输入挂号编码,显示挂号病人的信息以及处方的项目、数量、应收、实收、执行科室;点击收费对该处方单进行收费。 退费申请:对已收取的费用进行退费申请。输入发票号,显示要申请退费的病人信息,输入退费的原因,保存病人申请退费的信息。 退费处理:对已经过审核的退费申请单进行退费。 处方退费:对已收取的处方费用进行退费。 打印费用清单:对病人消费的费用清单进行打印。输入起止日期、收费号或者病人姓名。点击‘查询打印’就可以查询到该病人这段时间内所有的费用清单。进行费用清单打印。 收费日结:对一天的收费进行结算。 ?收费查询 未收费处方查询:按照查询列中的分类、条件值、查询的起止日期对病人未收费处方信息进行查询。 收费查询:按照查询列中的分类、条件值、查询的起止日期对病人收费处方信息进行查询。 退费查询:按照查询列中的分类、条件值、查询的起止日期对病人退费的信息进行查询。 ?统计 科室收费报表:根据执行科室对收入进行统计和导出数据库。 门诊工作台帐:对门诊工作台帐进行统计和导出数据库。 门诊工作量报表:对门诊工作量进行统计和导出数据库。 收费日结明细报表:对门诊收费日结明细报表进行统计和导出数据库。 发票使用情况统计表:对门诊发票使用情况进行统计和导出数据库。 (3)药房管理基本功能。 ?出入库管理 请领计划:药房向药库进行领药处理。选择发药库房,在请领药品中输入要请领的药品信息,请领完需要的药品后点击保存。 入库审核:对入库的药品数据进行审核。从‘提取’中提取需要审核的入库药品的单据,点击审核进行入库审核。 入出库单据补打:如果之前填写的出入库单据没有打印需要打印的,进入该模块进行补打入出库单。 出库开单:对药库中出库的药品信息输入系统中。 ?盘点 库存查询:对药库中的库存药品进行查询;选择要查询的库房、药品类别、药品的拼音码,对库存的药品进行查询。 库存盘点:对库存中的药品进行盘点。在‘提取’中选择要盘存的药品,点击保存,保存盘存的药品数据。然后在‘新建’中添加没有库存的药品。 盘存审核:对库存药品的盘点进行审核。在‘提取’中选择要审核的盘存号,单击‘审核’对盘存单据审核。 盘存报表打印:对盘存的报表进行打印。选择查询条件、盘存号和打印单据的显示方式;对盘存报表进行打印。 ?查询 入库查询:对入库的药品进行查询。选择审核时间、药品库房、出库方式、单据号、供货单位、药品名称对入库的药品进行查询。 科室基药统计:对科室基本的药品进行统计。选择统计的起止日期和科室,对科室的基 11 药进行统计。 盘点查询:对药品盘存的盈亏进行查询。选择查询的条件:起止日期、药品库房、盘点单号;对药品盘库进行盈亏查询。 盘存查询:对药库的药品进行查询。选择查询的条件:库房、药品类别、药品拼音码;对药库的药品进行查询和导出。 门诊取药查询:对门诊取药的药品信息进行查询。按照查询列中的分类、条件值、查询的起止日期对门诊取药的信息进行查询。 门诊退药查询:对门诊退药的信息进行查询。按照查询列中的分类、条件值、查询的起止日期对门诊退药的信息进行查询 合理用药咨询:对药物合理用量的咨询。 ?统计 药房人员工作量统计:对药房人员工作量进行统计和导出数据库。 药房工作量报表:对药房工作量报表进行统计和导出数据库。 药品日用量报表:要药房药品日用量报表进行统计和导出数据库。 ?取药管理 处方审核:对医生开出的药品处方进行审核。点击处方信息中要审核的挂号ID或者处方号。对该处方进行审核。 门诊取药:进过药房的人对处方单据进行审核后,门诊把药发给病人。 门诊退药:病人有某种原因需要退药,可以通过该本门进行退药。 门诊摆药:药房发药后,病人通过此部门把需要的药品配好后放可取走。 门诊换药:病人对医生开出的药品要求换药申请。输入要求换药的病人挂号编码,录入要求换入出和换出的药品,点击‘换药’进行申请。 换药审核:对病人要求换出换入的药品单据进行审核。 (4)门诊医生基本功能。 ?医生工作站 医生对待诊的病人先进行病案登记;让病人主诉下病人,主诉完后对该病人进行诊治,对该病人开医嘱,然后进行医嘱保存。诊断完后病情后认为病人需要做检验、检查、手术、住院;可以询问病人是否需要,病人需要的话,给病人开检查、检验、手术、住院申请单。 ?退改处方 退改审核(未取药):对未取药的审核单进行退改。选择申请单号,输入退费的原因,然后进行审核。 医生处理退改处方:主治医生处理已取药的退改处方。 ?病人历史信息查询 综合医嘱信息查询:查询综合医嘱信息。选择查询条件:编号查询、病案号查询、病人姓名查询,查询的起止日期,对病人医嘱进行查询。 综合病历查询:查询病人的综合病历信息。选择查询条件:挂号单号、查询的起止日期,对病人病历进行查询。 综合病案查询:查询病人的综合病案信息。选择查询条件:病案号、姓名,对病人病案进行查询。 3.2数据库设计 以下是系统设计所用的主要数据表结构 1、挂号处 12 表3-1挂号处 Registration 代码 名称 数据类型及长度 是否可空 备注 bh Char(10) Primary key 编号 zbys Char(10) Not null 值班医生 2、病人信息表 表3-2 病人信息表 patient 代码 名称 数据类型及长度 是否可空 备注 ghbh Char(10) Primary key 挂号编号 xm Char(10) Not null 姓名 xb Char(10) Not null 性别 nk Datetime Not null 年龄 sfzh Datmtime Not null 身份证号 3、挂号单 表3-3 挂号单 Hangs numbered certificate 代码 名称 数据类型及长度 是否可空 备注 ghbh Char(10) Primary key 挂号编号 ghfs Char(10) Not null 挂号方式 brxm Char(10) Not null 病人姓名 zzys Char(10) Not null 主治医师 ghrq Datetime Not null 挂号日期 4、病历信息表 表3-4 病历信息表 Medical record 代码 名称 数据类型及长度 是否可空 备注 blbh Char(10) Primary key 病历编号 brxm Char(10) Not null 病人姓名 blxx Char(50) Not null 病历信息 5、病人信息表 表3-4 病人信息表 patient 代码 名称 数据类型及长度 是否可空 备注 ghh Char(10) Primary key 挂号号 xm Char(10) Not null 姓名 nl Datmtime Not null 年龄 sfzh Datetime Not null 身份证号 sfzy Char(2) Not null 是否住院 6、开处方 表3-6 开处方 Writes the prescription 代码 名称 数据类型及长度 是否可空 备注 cfh Char(10) Primary key 处方号 13 cfnr Char(50) null 处方内容 brxm Char(10) Not null 病人姓名 brnl datetime Not null 病人年龄 fz Char(50) Not null 附注 7、医师 表3-7 医师 doctor 代码 名称 数据类型及长度 是否可空 备注 ysh Char(10) Primary key 医师号 xm Char(10) Not null 姓名 xb Char(10) Not null 性别 zc Char(10) Not null 职称 nl Datetime Not null 年龄 gzsj Datetime Not null 工作时间 8、检查 表3-8 检查 Inspection 代码 名称 数据类型及长度 是否可空 备注 jyxh Char(10) Primary key 检验序号 brghh Char(10) Not null 病人挂号号 jynr Char(50) Not null 检验内容 jyys Char(10) Not null 检验医师 9、收费项目 表3-9 收费项目 Fee item 代码 名称 数据类型及长度 是否可空 备注 brh Char(10) Primary key 病人号 sjxm Char(10) Not null 收据项目 xmlb Char(10) Not null 项目类别 xmyh datetime Not null 项目序号 sfry Char(10) Not null 收费人员 sfjr decimar(18,2) Not null 收费金额 10、收据 表3-10收据 Receipt 代码 名称 数据类型及长度 是否可空 备注 sjh Char(10) Primary key 收据号 sjxm Char(10) Not null 收据项目 ssje Char(10) Not null 所收金额 skrq datetime Not null 收款日期 11、处方 表3-11处方 Prescription 代码 名称 数据类型及长度 是否可空 备注 cfh Char(10) Primary key 处方号 14 brxm Char(10) Not null 病人姓名 brnl Char(10) Not null 病人年龄 zzys Char(10) Not null 主治医生 cfnr Char(50) null 处方内容 fz Char(50) Not null 附注 12、药品信息表 表3-12 药品信息表 medicine 代码 名称 数据类型及长度 是否可空 备注 ypbh Char(10) Primary key 药品编号 mc Char(10) Not null 名称 dl Char(10) Not null 数量 dj datetime Not null 单价 gg Char(10) Not null 规格 jyz Char(10) Not null 禁用者 scrq datetime Not null 生产日期 yxq eatetime Not null 有效期 13、药品出库 表3-13药品出库storehouse 代码 名称 数据类型及长度 是否可空 备注 ypbh Char(10) Primary key 药品编号 mc Char(10) Not null 名称 sl Char(10) Not null 数量 ckrq datetime Not null 出库日期 14、药品入库 -14药品入库 Drugs warehousing 表3 代码 名称 数据类型及长度 是否可空 备注 ypbh Char(10) Primary key 药品编号 mc Char(10) Not null 名称 sl Char(10) Not null 数量 rkrq datetime Not null 入库日期 15、药房 表3-15药房 Pharmacy 代码 名称 数据类型及长度 是否可空 备注 ypbh Char(10) Primary key 药品编号 mc Char(10) Not null 名称 sl Char(10) Not null 数量 mzyfbh datetime Not null 门诊药房编号 yksl datetime Not null 药库数量 16、药品采购 表3-16药品采购 purchase 15 代码 名称 数据类型及长度 是否可空 备注 ypbh Char(10) Primary key 药品编号 mc Char(10) Not null 名称 sl Char(10) Not null 数量 cgrj datetime Not null 采购时间 16 4.系统实现 本系统使用PowerBuilder技术,以SQL-2005作为后台数据库。PowerBuilder是一个用来进行客户/服务器开发的完全的可视化开发环境。由于PowerBuilder采用了面向对象和可视化技术,提供可视化的应用开发环境,使得我们利用PowerBuilder,可以方便快捷地开发出利用后台服务器中的数据和数据库管理系统的数据库应用程序。 下面是本系统的一些界面实现 1(用户登陆界面 进入登录界面后,不同的用户,如门诊挂号模块的使用人员,输入用户编码,然后在登陆口令中输入密码,单击进入按钮,如果系统提示“不存在该用户,或者密码输入错误,则表示登记系统时使用人员的代码错误或者密码错误,密码正确,进入该系统。如果需要更改使用人员的密码,在登记成功时可以更改密码。如图4-1所示: 图4-1用户登记界面 部分代码实现如下: //登录 if trim(sle_ucode.text) = '' then msg("请输入用户编码~") sle_upwd.text= '' sle_ucode.setfocus() sle_ucode.selecttext(1, len(sle_ucode.text)) return else if trim(sle_upwd.text) = '' then msg("请输入密码~") sle_upwd.setfocus( ) return end if end if long ll_yhzid string ls_yhzmc ll_yhzid= dw_yhz.getitemnumber( dw_yhz.getrow( ) , "yhz") 17 if not gnv_RightManager.of_right_has_userid(sle_ucode.text) then msgbox.msgbox("登录提示", "不存在该用户,请重新输入!") sle_ucode.setfocus() sle_ucode.selecttext(1,len(sle_ucode.text)) return end if if not trim(gnv_RightManager.of_right_getpwd(sle_ucode.text, ll_yhzid)) = sle_upwd.text then msgbox.msgbox("系统提示", "密码输入错误,请重新输入!") sle_upwd.setFocus() sle_upwd.selecttext(1,200) return end if select xt_ks.ksid,xt_ks.ksmc,xt_ks.kssx into :gnv_RightManager.ksid,:gnv_RightManager.ksmc,:gnv_RightManager.kssx from xt_ks, xt_yhz where xt_ks.ksid = xt_yhz.ksid and xt_yhz.yhzid = :ll_yhzid and isnull(tybz,0)= 0; if cbx_1.checked then //登陆成功时更改密码 parent.hide() open(w_chgpwd) end if parent.hide() ib_exit = true closewithreturn(parent, sle_ucode.text) 2(门诊收费界面 门诊收费窗口首先显示的是普通的收费项目,如果不是显示普通的收费,按下F5键即可。普通收费窗口分为三屏,窗口的上方显示病人信息和挂号信息。在挂号编码处选择挂号单号码,在医生处选择病人就诊的医生。窗口就会中间显示病人就诊信息,中的左边显示就诊和领用药物信息以及所需要的费用;单击一行信息,就会在窗口中间的右边显示出这些信息的明细。窗口下方显示发票信息和收费信息。发票号和合计系统已自动给出。在支付方式处选择支付方式,折扣方式处选择折扣方式。在收取处输入所收到的费用,备注处可以添加备注。单击,出现一个窗口,将收费信息保存。如图4-2所示: 18 图4-2门诊收费 部分代码实现如下: //收费 if dw_fyxx.rowcount( ) = 0 then msg("无收费项目~") return end if //进行收费 if dec(st_sq.text) < 0 then msg("请输入正确的收取金额~") st_sq.text= "" st_zb.text= "" return end if if dec(st_zb.text) < 0 or st_zb.text='' then msg("收取的金额不足~") st_sq.text= "" st_zb.text= "" return end if //保存数据 nvoc_update data datastore ds_temp[] ds_temp[1]=ids_fyd ds_temp[2]=ids_fydmx 19 ds_temp[3]=ids_sf ds_temp[4]=ids_zfxx ds_temp[5]=ids_yzxx if ids_grzh.rowcount()>0 then ds_temp[6]= ids_grzh end if if data.of_update(ds_temp)=false then MessageBox("错误","保存失败~",StopSign!) messagebox("错误原因", data.errtext, StopSign!) //窗口初始化 // if not w_parent.ii_lx=2 then w_parent.wf_init() //如果不是特殊门诊就初始化 st_sq.post setfocus() end if sqlca.autocommit= true //可以保存 ibl_cansave=true w_parent.dw_brxx.insertrow(0) datawindowchild dwc_child w_parent.dw_brxx.getchild("ghid",dwc_child) dwc_child.settransobject( sqlca) dwc_child.retrieve( ) parent.event ue_clearhj() 3(医生工作站—保存医嘱界面 进入医生工作站,医生给病人就诊时给病人开医嘱。选择药品分类,输入药品的代码,发药量、药品的用法、单次的剂量、给药的时间;保存数据——保存医嘱,首先保存治疗信息和注射信息;更新医嘱中的处方号,因为处方号直接跟收费挂钩,(同一类项目得到同一个处方号),然后调用存储过程进行医嘱计价;将处方医嘱信息加入病历中,判断是否打印单据。如图4-3所示: 图4-3医生工作站—保存医嘱 部分代码实现如下: //医生 20 long ll_yzh, ll_yzxh, ll_row, ll_yzrow //医嘱序号、医嘱以及子嘱的行号 long ll_yzhsl //医嘱号数量 string ls_yzh, ls_yzh2, ls_yzh3, ls_yzh4 //医嘱号列表 long ll_yzfzh ,ll_zssl= 0 ,ll_zlsl =0 //医嘱分组号, 数量 boolean lb_ypbz //药品医嘱标志 integer li_yzxmid,li_temp //处理超额剂量 datetime t Boolean ll_pdzl = false, lb_pdzld= false //处理是否能开注射单, 初始值 false integer ll_derow, ni string ls_yzh_zs, ls_yz_zl t= datetime(gf_getserverdatetime()) //取得当前时间 if dw_yz.accepttext( )= -1 then messageBox("提示","你的输入有误!") return end if //保存数据 sqlca.autocommit= false if dw_yz.update(true, false)=-1 then //注意true,false rollback; sqlca.autocommit= true MessageBox("错误","医嘱保存失败~") return end if long ll_zldh, ll_zsdh integer li //产生治疗号 if ll_zlsl >0 then ll_zldh= long(gf_gethmb("mzzldh", ll_zlsl)) - ll_zlsl for ll_row =1 to ds_zl.rowcount() ll_zldh ++; ds_zl.setitem(ll_row, "zldh",ll_zldh) //触发器插入 mys_zld_zx next if ds_zl.update(true, false)=-1 then //注意true,false rollback; sqlca.autocommit= true MessageBox("错误","治疗保存失败~") return end if end if 21 //自动插入门诊病历 wf_yztobl() MessageBox("提示","保存成功!") //判断有无打印单据 datastore ds_print ds_print= create datastore ds_print.dataobject = "d_mys_yzlr_dydj" ds_print.settransobject(sqlca) ds_print.retrieve(ls_yzh) if ds_print.rowcount() > 0 then openwithparm(w_mys_yzlr_dydj, ls_yzh) end if //刷新 dw_yz.setfilter("") dw_yz.filter() parent.event ue_retrieve_yz() 22 参考文献 [1]萨师煊,王珊:《数据库系统概论》[M],高等教育出版社,1991:459-500. [2]王冬等,2006。现代医院管理理路与方法,上海科学技术文献出版社。 [3]袁先鸣. 医院的信息化管理与资金合理使用[J],中国卫生经济, 1995,(04) [4] 傅征, 任连仲. 医院信息系统建设与应用, 北京: 人民军医出版社, 2002 [5]李晓春等,1999。多窗口住院管理系统的设计,上海生物医学工程。 [6]潘锋,2001。医院信息管理系统的开发,航空计算技术。 [7]郭瑞军:《ASP数据库开发实例精粹》[M],电子工业出版社2004:60-84. [8]袁鹏飞,1998。SQL-Server数据库应用开发技术,人民邮电出版社。 [9]吴秀英等,2003。医院信息管理系统—住院管理子系统尝试,中国知网。 [10]鞠华秋,姚子杰. 专科医院信息系统构建模式的探索[J]. 中国医院管理, 2006 (07) [11]周胜军等,2000,计算机数据库管理在医学中的应用,北京生物医学工程。 [12]彭珲:SQL Server安全性[M],北京:清华大学出版社,2004:222-251. [13]Hans Van Vliet(Software Engineering-Principles and Practice,Second Editon[J],New York:John Wiley & Sons(2000. [14] (美)David M. Kroenke,2003,数据库处理基础、设计与实现,北京-电子工业出版社。 [15] Dustin, E.,2003,Automated Software Testing: Introduction, Management, and Performance, Publishing House of Electronics Industry. 医院门诊收费系统设计 摘 要 随着科学的不断进步,计算机应用已经遍布整个社会的每个角落。目前社会正处于健保发展 23 方兴未艾的时代,各医疗院所莫不兢兢业业地改善本身的体制或管理方式,所以应越来越严格的规范;在此背景下,本文论述了医院管理系统(重点论述门诊收费子系统)的设计实现。通过对各种数据库管理系统的模型分析,结合医院门诊的实际需求,采用C/S(客户端/服务器)模式,说明了医院管理系统的开发过程及各种技术细节。本系统是适应时代发展的需要,提高管理的效率而开发设计的。 医院管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。 因此本人结合医院门诊收费系统的要求,对MS SQL Server2000数据库管理系统、SQL语言原理将对数据库应用系统开发医院门诊收费系统进行了简明的介绍,并分析了开发医院管理系统所应进行的工作;对数据库的设计和SQL语言的使用进行了系统分析,为深入理解数据库应用打下了基础;学习了具体的开发工具Delphi 7.0,对其数据库组件,SQL语言在Delphi中的应用等数据库编程关键技术进行了系统的介绍;除此还分析了医院管理系统的应用需求,按照数据库设计理论一步一步地给出了系统需求说明书、局部ER图、全局ER图、系统关系模式,子模式,利用MS SQ Server2000建立了数据库;进行了具体的程序设计,具体划分了三类用户的操作权限,设计了了三个操作界面。实现了数据库表的浏览,记录的添加、删除和修改,报表的生成,实现了多数据库表的连接操作,实现了多条件查询和模糊查询,并灵活实现了对不可更新查询结果集的更新操作,实现了主从表操作,实现了密码维护功能,医院信息系统(HIS)是一套通用性很强的商业软件。本人负责的门诊划价子系统是针对一般医院的业务处理而开发的,主要用于门诊部的划价和信息生成。 关键字:HIS,软件工程,模块化数据库,SQL语言,数据库组件 24 目 录 1(引言 1 2. 需求分析阶段 1 2.1 引言 1 2.2 需求分析阶段的目标与任务 1 2.2.1处理对象 2 2.2.2处理功能及要求 2 2.2.3.安全性和完整性要求 2 2.3 需求分析阶段成果 3 3 概念设计阶段 5 3.1 引言 5 3.2 任务与目标 5 3.3 阶段结果 5 4(逻辑设计阶段 5 4.1逻辑设计的任务和目标 5 4.2数据组织 6 4.2.1将E-R图转换为关系模型 6 4.2.2模型优化 6 4.2.3数据库模式定义 6 4.2.4 用户子模式定义 7 4.3数据处理 7 5(物理设计阶段 9 5.1物理设计阶段的目标与任务 9 5.2数据存储方面 错误~未定义书签。 5.3系统功能模块 错误~未定义书签。 5.3.1 读者基本信息的查询和更新模块 错误~未定义书签。 5.3.2 图书基本信息的查询和更新模块 错误~未定义书签。 6(数据库实施阶段 9 6.1建立数据库、数据表、视图、索引 9 6.1.1 建立数据库 9 6.1.2 建立数据表 9 6.1.3 建立视图 11 6.1.4 建立索引 13 6.1.5 建立触发器 13 6.2数据入库 错误~未定义书签。 6.3创建各个功能的存储过程 13 7(系统调试和测试 13 8(设计心得 13 9(存在的问题及建议 14 致谢 15 I 参考文献 15 附录1 数据查看和存储过程功能的验证 15 附录2 所有的SQL运行语句 21 附录3 系统的运行界面 23 II 《数据库系统原理》课程设计报告 1(引言 随着科学技术的高速发展,计算机软件的需求量大幅度提升,各种专业的特殊管理、应用软件已被提上了议案,当然,与此同时,计算机软件开发越来越专业化,对设计人员的综合素质和专业知识的要求越来越高,任务也是越来越重。信息产业作为当今社会做前端的技术性行业,其科技含量是最高的;作为一个计算机专业的大学生,特别是面对我们国家现在紧缺高水平、高素质的软件人员,我们也清醒的认识到掌握好专业知识的重要性,更清楚了自己肩上的责任。 本次设计的主题是:基于C/S结构的医院门诊收费系统。本系统提供给医院门诊收费用户一个综合、全面的办公环境和工具,同时实现了大量数据信息和文档以及多媒体信息快速、有效、准确地获取、管理和传递。因此本系统是提高工作效率、规范医院门诊办公制度、方便领导决策的重要工具。 本软件主要完成门诊划价收费功能,按照软件工程的思想来完成这一设计过程,历经三个多月,在指导教师认真耐心的指导下,系统已经初步完成。由于是初次完成比较正规的且有规模的软件设计,所以难免出现一些错误和漏洞,恳请各位老师和同学批评指正。在本次设计期间,指导教师、师长们给了我们很大的鼓励和支持,在我们有困难的时候给予了我们无私的关心和帮助,在这里表示深深的感谢~ 同时,也向评阅论文和参加论文答辩的老师们表示衷心的感谢~ 2. 需求分析阶段 2.1 引言 一所医院的主要构成分为两个部分,一是门诊部门,二是住院部门,医院的所有日常工作都是围绕着这两大部门进行的。 门诊部门和住院部门各下设若干科室,如门诊部门下设口腔科、内科、外科、皮肤科等,住院部门下设内科、外科、骨科等,二者下设的部分科室是交叉的,各科室都有相应的医生、护士,完成所承担的医疗工作,医生又有主治医师、副主任医师、普通医师或教授、 -1- 《数据库系统原理》课程设计报告 副教授、其他之分。 为了支持这两大部门的工作,医院还设置了药库、中心药房、门诊药房、制剂室、设备科、财务科、后勤仓库、门诊收费处、门诊挂号处、问讯处、住院处、检验科室、检查科室、血库、病案室、手术室,以及为医院的日常管理而设置的行政部门等。 其中,药库负责药品的贮存、发放和采购;中心药房负责住院病人的药品管理,包括根据处方及医嘱生成领药单,向药库领药,配药并把药品发给相应的病区,以及药房的库存管理和病区余药回收;门诊药房负责门诊病人的药品管理,包括根据处方,按处方内容备药、发药,向药库领药等;制剂室负责药物的配制,并提供给药库;设备科负责医院的医疗设备等的购入和维修等;财务科负责医院中一切与财务有关的业务和工作,进行医院的财务管理;后勤仓库负责医院所有后勤物品的贮存和管理;门诊收费处负责门诊病人的处方的划价和收费;门诊挂号处负责门诊病人的挂号事务;问讯处负责向有疑问的就医病人解释相关问题;住院处负责所有就医病人的住院事宜和相关管理;检验科室负责病人的各项检验,(如验血等)以及与各项检验相关的管理,药剂取用等;检查科室负责病人的各项检查(如CT检查以及其他放射线检查等)以及与各项检查相关的管理,设备使用与维护等;血库负责医院的各种血型的血液的贮存和管理以及血液的采集;病案室负责病人病案的管理和保存;手术室负责病人的手术,手术的安排以及有关手术的相关事宜和器械,制剂,设备等的使用等;行政部门则根据其相应的工作进行日 常的工作,对医院进行行政方面的管理,以保证医院的医疗工作的正常进行和医院的后勤保障。 2.2 需求分析阶段的目标与任务 2.2.1处理对象 科室信息:科室ID,科室名称 医生信息:医生姓名,性别,年龄 借阅历史信息:药品名称,买价,卖价 病人信息:病人姓名,性别,年龄,是否有婚姻 管理员信息:用户名,密码 2.2.2处理功能及要求 系统提供待开门诊处方以及各种检查检验申请单实时划价、输入、查询、修改功能。另外还提供候诊病人就医分配;按科室、人员等条件统计单据;检索病人就诊历史等可选功能。它将病人历次门诊的所有临床医疗信息通过计算机管理,并为后继系统提供划价信息,是全面实现门诊信息化管理的必备前端系统之一。 门诊系统联系物流、财务、医疗的主要信息是病人信息与处方信息。考虑到目前医院情况,门诊系统主要完成处方信息的电子化,以及和医院药房、财务系统联网。由于医生工作站的推广困难,处方信息的录入,通过划价子系统进行。 2.2.3.安全性和完整性要求 1) 安全性要求 系统安全性要求体现在数据库安全性、信息安全性和系统平台的安全性等方面。安全性先通过视图机制,不同的用户只能访问系统授权的视图,这样可提供系统数据一定程度上的安全性,再通过分配权限、设置权限级别来区别对待不同操作者对数据库的操作来提高数据库的安全性;系统平台的安全性体现在操作系统的安全性、计算机系统的安全性和网络 -2- 《数据库系统原理》课程设计报告 体系的安全性等方面。 2) 完整性要求 系统完整性要求系统中数据的正确性以及相容性。可通过建立主、外键,使用check约束,或者通过使用触发器和级联更新。 2.3 需求分析阶段成果 2.3.1 体会与收获 经对前面的需求调查和初步的分析,确定由计算机完成的工作时对数据进行各种管理和处理,具体的工作内容见第二部分, 由手工完成的工作主要有对原始数据的录入;不能由计算机生成的,各种数据的更新,包括数据变化后的修改,数据的增加,失效数据或无用数据的删除等;以及系统的日常维护。 2.3.3 医院的基本业务流程图 人病 病区医住院药检 检 手 术 嘱 房 查 验 医收入嘱过程信管理信 取院输押登入息 息 金记 与划 诊 价 断 押金信病人基本信病人费用基本信 息 息 息 月末在院结算 押金日结信基本医疗收入 基本类在院收入 息 病院医药收病 历科疗品设费人凭备首费保收日费 凭证页用险入帐结用证制 入费核费构制信收 作 作用算用成 息据 2.3.4 会计凭证 图书管理系统数据字典 (a)数据项: 表1.1 数据项列表 -3- 《数据库系统原理》课程设计报告 数据项编数据项名 数据项含义 与其它数据项存储结构 别名 号 的关系 DI-1 NUM Int 编号 DI-2 NAME Char 姓名 DI-3 SEX Bit 性别 Char 身份证号 DI-4 ID DI-5 PRICE Float 费用总计 DI-6 TOTILPrice Float 自付总计 DI-7 MARRY char 婚姻 DI-8 char 民族 DI-9 char 职业 DI-24 char 工作单位 DI-25 char 单位电话 DI-26 Char 家庭住址 DI-27 Char 宅电 DI-28 Char 邮编 DI-29 Char 科室 同ReaLBID Char 医疗来源 DI-30 DI-31 Datetime 日期 DI-32 char 经办人 DI-33 char 标识 DI-34 char 医保编号 同RoomMID (b)数据结构: 表1.2 数据结构列表 数据结 数据结构 数据结构名 属 性 构编号 含义 Not null 流水号 DS-1 NUM Not null 医疗号 DS-2 DS-3 NAME Null 姓名 DS-4 ITEM Null 科室 DS-5 Null 医疗类别 DS-6 DATA Null 日期 DS-7 PRICE Null 挂号费 -4- 《数据库系统原理》课程设计报告 数据结 数据结构 数据结构名 属 性 构编号 含义 DS-8 Null 病历 2.3.5 处理逻辑描述 表1.3 处理逻辑列表 处理编号 处理功能 处理过程 PR-1 医院门诊部门收费时的系统 医生、病人管理模块、收费、药品管理模块 3 概念设计阶段 3.1 引言 本次设计开发的医院门诊收费信息系统是一套完整的医院信息系统的一部分,整个系统应既可以面向大中型医院又可针对中小型医院的专用应用系统。它几乎覆盖了医院主要管理职能和患者在医院就诊的各主要环节。我们的HIS专用应用系统不简单地是一套计算机管理应用软件,最重要的是它符合中国实际情况,参照了现行医改政策,结合国内与国际先进的医院管理经验,将医院的管理思想、医院各部门的业务经验以及当今计算机科学技术的完美统一起来的体现。 3.2 任务与目标 (1)选择中层数据流为切入点,通常选择实际系统中的子系统; (2)设计分E-R图,即各子模块的E-R图; (3)生成初步E-R图,通过合并方法,做到各子系统实体、属性、联系统一; (4)生成全局E-R图,通过消除冲突等方面。 3.3 阶段结果 根据不同的对象,从第3层数据流程图入手,分别画出各分E,R图: 病人挂号 病人看病 1:挂号 2:输入挂号信息 挂 号 病人出院 模 块 病人交费取药 3:挂号流水号 门诊挂号操作 病人按处方配药 4:看病 毒 病人住院 5:药方 病人交预交款 医生诊断 4(逻辑设计阶段 病情模块 4.1逻辑设计的任务和目标 以上的概念设计阶段是独立于任6:药方交费 7:输入药方信息 何一种数据模型9:取药 划价收费 -5- 取药模块 8:药品明细单,收费发票 《数据库系统原理》课程设计报告 的,但是逻辑设计阶段就与选用的DBMS产品发生关系了,系统逻辑设计的任务就是将概念设计阶段设计好的基本E-R图转换为选用DBMS产品所支持的数据模型相符合的逻辑结构。具体内容包括数据组织(将E-R图转换成关系模型、模型优化、数据库模式定义、用户子模式设计)、数据处理(画出系统功能模块图)两大任务。 4.2数据组织 4.2.1将E-R图转换为关系模型 实体型转换为关系模式。实体的属性就是关系的属性,实体的码就是关系的码。对于实体间的联系则有以下不同的情况: 一个m:n联系转换为一个关系模式。与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。 一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码。 一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。三个或三个以上实体间的一个多元联系可以转换为一个关系模式。与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合 具有相同码的关系模式可合并。 4.2.2模型优化 关系模式Doctor,BaseType,Items,Medicine ,Patient不存在非主属性对主属性的部分函数依赖,也不存在传递函数依赖,已经达到了3NF. 4.2.3数据库模式定义 表2.1 BaseType表 列名 数据类型 可否为空 说明 ID Char not null 编号 TypeId Char not null TypeName Char not null 科室名 表2.2 doctor表 列名 数据类型 可否为空 说明 ID Char not null 编号 Name Char not null 姓名 Sex Char not null 性别 Age Char not null 年龄 DeptId Char not null Title Char 表2.3 Medicine表 列名 数据类型 可否为空 说明 MedID Char not null 药品编号 MedName Char not null 药品姓名 -6- 《数据库系统原理》课程设计报告 Typeid Char saleprice Char not null 卖价 unitid Char not null buyprice Char 买价 totle Char 总计 表2.4 patient表 列名 数据类型 可否为空 说明 ID Char not null 编号 NAME Char not null 病人名字 IDnum Char sex Char 性别 age Char not null 年龄 marry 婚姻 表2.5 item表 列名 数据类型 可否为空 说明 ItemID Char not null ITemName Char not null Total Char not null Unitid Char not null Buyprice Char not null saleprice 表2.6 User表 列名 数据类型 可否为空 说明 Username Char not null PWD Char not null User_Type Char not null 4.2.4 用户子模式定义 表2.1 BaseType表试图 列名 数据类型 可否为空 说明 ID Char not null 编号 TypeId Char not null TypeName Char not null 科室名 表2.2 doctor表试图 列名 数据类型 可否为空 说明 ID Char not null 编号 Name Char not null 姓名 -7- 《数据库系统原理》课程设计报告 Sex Char not null 性别 Age Char not null 年龄 DeptId Char not null Title Char 表2.3 Medicine表试图 列名 数据类型 可否为空 说明 MedID Char not null 药品编号 MedName Char not null 药品姓名 Typeid Char saleprice Char not null 卖价 unitid Char not null buyprice Char 买价 totle Char 总计 表2.4 patient表试图 列名 数据类型 可否为空 说明 ID Char not null 编号 NAME Char not null 病人名字 IDnum Char sex Char 性别 age Char not null 年龄 marry 婚姻 表2.5 item表试图 列名 数据类型 可否为空 说明 ItemID Char not null ITemName Char not null Total Char not null Unitid Char not null Buyprice Char not null saleprice 表2.6 User表试图 列名 数据类型 可否为空 说明 Username Char not null PWD Char not null User_Type Char not null 4.3数据处理 系统功能模块图: -8- 《数据库系统原理》课程设计报告 门诊划价收费系统 收统门门药收退计 诊诊品据款、划收发处5(物理设计阶段 清查价费货理 算询5.1物理设计阶段的目标与任务 数据库的物理设计就是为逻辑数据模型选取一个最合适应用要求的物理结构的过程,在这个阶段中要完成两大任务: (1)确定数据库的物理结构,在关系数据库中主要是存取方法和存储结构; (2)对物理结构进行评价,评价的重点是时间和空间效率。 6(数据库实施阶段 6.1建立数据库、数据表、视图、索引 6.1.1 建立数据库 CREATE DATABASE Hospital GO 6.1.2 建立数据表 (1)BaseType表的建立: USE Hospital GO CREATE TABLE BaseType (Id int PRIMARY KEY IDENTITY, TypeId tinyint, TypeName varchar(30) ) GO (2)Doctor表的建立: USE Hospital GO CREATE TABLE Doctor ( Id int IDENTITY PRIMARY KEY, Name varchar(50) NOT NULL, Sex varchar(2) NOT NULL, Age int, -9- 《数据库系统原理》课程设计报告 DeptId int, Title varchar(50) ); GO (3)Items表的建立: USE Hospital GO CREATE TABLE Items ( ItemId int IDENTITY PRIMARY KEY, ItemName varchar(50) NOT NULL, Total int, UnitId int, BuyPrice float, SalePrice float ) GO (4)Medicine表的建立: USE Hospital GO CREATE TABLE Medicine ( MedId int IDENTITY PRIMARY KEY, MedName varchar(50), TypeId int, UnitId int, BuyPrice float, --进货价格,计算利润用 SalePrice float, --售出价格 Total float, Flag tinyint --中西药标记,0-中药;1-西药 ) (5)Registration表的建立: USE Hospital GO CREATE TABLE Registration ( RegId int PRIMARY KEY, PatId int,--患者 DocId int, --医生名称 RegDate varchar(20), --日期 UserName varchar(20) --用户名 ) -10- 《数据库系统原理》课程设计报告 GO (6)Users表的建立: USE Hospital GO CREATE TABLE Users (UserName varchar(40) PRIMARY KEY, Pwd varchar(40) NOT NULL, User_Type tinyint NOT NULL ) GO INSERT INTO Users Values('Admin', '888888', 1) GO 6.1.3 建立视图 (1)用于查询PayList视图定义如下: USE Hospital GO CREATE VIEW PayList_v AS SELECT p.PayId, p.RegId,r.DocId,r.RegDate, m.MedName, b.TypeName, p.Price, m.Total, p.PNum, p.Price * p.PNum AS PSum, m.BuyPrice, (p.Price - m.BuyPrice) * p.PNum AS PEarn FROM PayItems p, Medicine m, BaseType b,Registration r WHERE p.ItemId = m.MedId AND m.UnitId = b.Id AND p.RegId=r.RegId AND p.PType=1 UNION SELECT p.PayId, p.RegId,r.DocId, r.RegDate,i.ItemName, b.TypeName, p.Price, i.Total, p.PNum, p.Price * p.PNum AS PSum, i.BuyPrice, (p.Price - i.BuyPrice) * p.PNum AS PEarn FROM PayItems p, Items i, BaseType b,Registration r WHERE p.ItemId = i.ItemId AND i.UnitId = b.Id AND p.RegId=r.RegId AND p.PType=2 GO (2)用于ReportDoctor查询的视图定义如下: USE Hospital GO CREATE VIEW ReportDoctor_v AS SELECT d .Name AS 医生姓名, b.TypeName AS 科室名称, d .Title AS 职务, p.RegDate AS 月份, -11- 《数据库系统原理》课程设计报告 (CASE WHEN p.PNum >= 0 THEN p.PNum ELSE 0 END) AS 销售数量, (CASE WHEN p.PSum >= 0 THEN p.PSum ELSE 0 END) AS 销售总额, (CASE WHEN p.PEarn >= 0 THEN p.PEarn ELSE 0 END) AS 纯利润 FROM BaseType b, Doctor d, (SELECT DocId, LEFT(RegDate,7) AS RegDate, SUM(PNum) AS PNum, SUM(PSum) AS PSum, SUM(PEarn) AS PEarn FROM PayList_v GROUP BY DocId, LEFT(RegDate,7)) p WHERE b.TypeId = 1 AND d.DeptId = b.Id AND d.Id = p.DocId GO (3)用于显示ReportItems的视图定义如下: USE Hospital GO CREATE VIEW ReportItems_v AS SELECT i.ItemId AS 药品编号, i.ItemName AS 药品名称, b.TypeName AS 单位, i.BuyPrice AS 成本价格, i.SalePrice AS 销售价格, i.Total AS 库存数量, p.RegDate AS 销售日期, (CASE WHEN p.PNum >= 0 THEN p.PNum ELSE 0 END) AS 销售数量, (CASE WHEN p.PNum >= 0 THEN p.PSum ELSE 0 END) AS 销售总额, (CASE WHEN p.PNum >= 0 THEN (p.PSum - i.BuyPrice * p.PNum) ELSE 0 END) AS 纯利润 FROM Items i, BaseType b, (SELECT ps.ItemId, ps.RegId, LEFT(r.RegDate,7) AS RegDate, SUM(ps.PNum) AS PNum, SUM(ps.Price * ps.PNum) AS PSum FROM PayItems ps, Registration r WHERE ps.PType = 2 AND ps.RegId = r.RegId GROUP BY ps.ItemId, ps.RegId, LEFT(r.RegDate,7)) p WHERE i.ItemId = p.ItemId AND i.UnitId = b.Id GO (4)用于ReportMedicine的视图定义如下: USE Hospital GO CREATE VIEW ReportMedicine_v AS SELECT m.MedId AS 药品编号, m.MedName AS 药品名称, (CASE WHEN m.Flag = 1 THEN '中药' ELSE '西药' END) AS 类别, b1.TypeName AS 分类, b.TypeName AS 单位, m.BuyPrice AS 进货价格, m.SalePrice AS 销售价格, m.Total AS 库存数量, p.RegDate AS 销售日期, -12- 《数据库系统原理》课程设计报告 (CASE WHEN p.PNum >= 0 THEN p.PNum ELSE 0 END) AS 销售数量, (CASE WHEN p.PNum >= 0 THEN p.PSum ELSE 0 END) AS 销售总额, (CASE WHEN p.PNum >= 0 THEN (p.PSum - m.BuyPrice * p.PNum) ELSE 0 END) AS 纯利润 FROM Medicine m, BaseType b, BaseType b1, (SELECT ps.ItemId, ps.RegId, LEFT(r.RegDate,7) AS RegDate, SUM(ps.PNum) AS PNum, SUM(ps.Price * ps.PNum) AS PSum FROM PayItems ps, Registration r WHERE ps.PType = 1 AND ps.RegId = r.RegId GROUP BY ps.ItemId, ps.RegId, LEFT(r.RegDate,7)) p WHERE m.MedId = p.ItemId AND m.UnitId = b.Id AND m.TypeId = b1.Id 6.1.4 建立索引 6.1.5 建立触发器 1(当删除Reader表中某一读者基本信息时,触发Borrow表,删除相应的记录 Use Hosptial go create trigger Doctor_delete on Doctor for delete as delete Name from deleted where Name.ID=deleted.ID 6.3创建各个功能的存储过程 系统共创建了10个存储过程,具体列表如下: 表3.1 创建的存储过程列表: 编号 存储过程名称 定义 作用 P-1 Doctor信息表 详见附录1-1 在Book中插入一元组 (其它表的查询、修改、删除与以上各表的存储过程定义大致相同,这里不再具体列出) 7(系统调试和测试 8(设计心得 在一个假期的时间对一个新的程序进行了解和实践然后按部就班的做出一个属于自己的程序,并且按时完成,很不容易但是经过测试表明已有功能基本运行正常。为了适应将来医院现有流程和网络设施状况,不断进行用户需求分析和代码设计改进,在此循环的基础上不断增加功能。虽然最后做出来的程序比较简单,但是内含了多种情况下的功能,可以在适当时候根据实际情况进行选择。 不管怎么样由于时间和能力有限,只完成了一些基本的功能,还是有很多的不成熟、不完 -13- 《数据库系统原理》课程设计报告 善的地方,但毕竟是自己花了时间和经历去做的。 最后,恳请评审老师不吝赐教,提出宝贵的意见。 9(存在的问题及建议 在本次设计中事实上存在着很多很多的问题,包括一些VC和SQL连接的的一些细节上的东西在网上查询了很多的资料也没能弄明白和分析出来。我希望在以后的专业课程的学习中也不断的温故而知新,在很多的新问题和旧问题上得到一些突破和了解。让我能在今后的学习中得到更多的能力。 -14- 《数据库系统原理》课程设计报告 致谢 在这里,首先要感谢陈作聪老师一个学期以来对我们的细心、耐心的教导,没有您的认真督促和教育。也没有我们的今天。同样也要很感谢对我设计报告评审的老师,感谢您用您宝贵的时间为我的设计打分和提建议。总之,VC+SQL的程序的制作真的好多谢各位老师的教导。 参考文献 [1] 金宇红,孙国祥,《对发展我国HIS技术市场的调研与思考》,中国医院管理,2000,20(12),5-6 [2] 余大昆,李义兵,《湖北省医院信息系统建设及应用情况调查分析》,医学与计算机应用,2001,14(8),459-460 [3] 王安平,李燕燕,陈季妍,《医院信息系统投资分析》,山西财政税务专科学校学报,2001,17(5),51,52 [4] 郭煜,高岍,《建设医院门诊系统的探讨》,山西电子技术,2000.5,22,24转41 [5] 俞鹤伟,牟艳华,《C/S模式下MIS系统网络规模的分析》,华南理工大学学报(自然科学版),2000,28(9),82,86 [6] 何雨生,李月东等,《门诊信息系统研究》,中国医院管理,2001,21(6),42-44 [7] 黄俊刚,《浅谈医院门诊信息的计算机管理》,医疗装备,2000,13(12),14-15 [8] 林寒祈,汪忠乐等,《医院信息系统中医嘱子系统的应用与体会》,医疗装备,2001,14(2),17-17 [9] 姚和顺,《基于客户/服务器结构的门诊医生工作站的设计与实现》,现代计算机,2001.8,93,95 [10] 李易庆,《电子病案与相关信息技术》,医学与计算机应用,2001,14(7),382-382 [11] 闭思成,薛冠华,《医院信息系统药品输入编码的制定方法》,医学与计算机应用,2001,14(8),491-492 [12] 盛平,宋轶勤,宋顺林,《医院信息系统的分析与设计》,江苏理工大学学报(社会科学版),2000.4,15,18 [13] 杨焱,苏小刚等,《门诊信息查询模块的设计与开发》,医学与计算机应用,2001,14(7),415-416 [14] 代伟,董军等,《医院信息系统下统计基础工作的质量保证》,中国医院统计,2001,8(2),99-100 [15] (美)Michael Abbey等著; 乐嘉锦等译,SQL Server2000初学者指南》,机械工业出版社, 2000 附录1 数据查看和存储过程功能的验证 基本表的数据查看(基于视图查询): 查看BaseType表中的数据 -15- 《数据库系统原理》课程设计报告 查看Doctor表中的数据: -16- 《数据库系统原理》课程设计报告 查看Medicine表中的数据: -17- 《数据库系统原理》课程设计报告 4)查看Patient表中的数据 -18- 《数据库系统原理》课程设计报告 5)查看Users表中的数据: 6)查看PayList_v视图中的数据: -19- 《数据库系统原理》课程设计报告 7)查看ReportDoctor_v视图的数据: 触发器功能的验证: -20- 附录3 所有的SQL运行语句 USE Hospital GO CREATE TABLE BaseType (Id int PRIMARY KEY IDENTITY, TypeId tinyint, TypeName varchar(30) ) GO USE Hospital GO CREATE TABLE Doctor ( Id int IDENTITY PRIMARY KEY, Name varchar(50) NOT NULL, Sex varchar(2) NOT NULL, Age int, DeptId int, Title varchar(50) ); GO CREATE DATABASE Hospital GO USE Hospital GO CREATE TABLE Items ( ItemId int IDENTITY PRIMARY KEY, ItemName varchar(50) NOT NULL, Total int, UnitId int, BuyPrice float, SalePrice float ) GO USE Hospital GO CREATE TABLE Medicine ( MedId int IDENTITY PRIMARY KEY, MedName varchar(50), TypeId int, UnitId int, 21 BuyPrice float, --进货价格,计算利润用 SalePrice float, --售出价格 Total float, Flag tinyint --中西药标记,0-中药;1-西药 ) GO USE Hospital GO CREATE TABLE Registration ( RegId int PRIMARY KEY, PatId int,--患者 DocId int, --医生名称 RegDate varchar(20), --日期 UserName varchar(20) --用户名 ) GO USE Hospital GO CREATE VIEW PayList_v AS SELECT p.PayId, p.RegId,r.DocId,r.RegDate, m.MedName, b.TypeName, p.Price, m.Total, p.PNum, p.Price * p.PNum AS PSum, m.BuyPrice, (p.Price - m.BuyPrice) * p.PNum AS PEarn FROM PayItems p, Medicine m, BaseType b,Registration r WHERE p.ItemId = m.MedId AND m.UnitId = b.Id AND p.RegId=r.RegId AND p.PType=1 UNION SELECT p.PayId, p.RegId,r.DocId, r.RegDate,i.ItemName, b.TypeName, p.Price, i.Total, p.PNum, p.Price * p.PNum AS PSum, i.BuyPrice, (p.Price - i.BuyPrice) * p.PNum AS PEarn FROM PayItems p, Items i, BaseType b,Registration r WHERE p.ItemId = i.ItemId AND i.UnitId = b.Id AND p.RegId=r.RegId AND p.PType=2 GO USE Hospital GO CREATE VIEW ReportDoctor_v AS SELECT d .Name AS 医生姓名, b.TypeName AS 科室名称, d .Title AS 职务, p.RegDate AS 月份, (CASE WHEN p.PNum >= 0 THEN p.PNum ELSE 0 END) AS 销售数量, 22 (CASE WHEN p.PSum >= 0 THEN p.PSum ELSE 0 END) AS 销售总额, (CASE WHEN p.PEarn >= 0 THEN p.PEarn ELSE 0 END) AS 纯利润 FROM BaseType b, Doctor d, (SELECT DocId, LEFT(RegDate,7) AS RegDate, SUM(PNum) AS PNum, SUM(PSum) AS PSum, SUM(PEarn) AS PEarn FROM PayList_v GROUP BY DocId, LEFT(RegDate,7)) p WHERE b.TypeId = 1 AND d.DeptId = b.Id AND d.Id = p.DocId GO USE Hospital GO CREATE TABLE Users (UserName varchar(40) PRIMARY KEY, Pwd varchar(40) NOT NULL, User_Type tinyint NOT NULL ) GO INSERT INTO Users Values('Admin', '888888', 1) GO 附录4 系统的运行界面 系统的登陆界面 主窗体 23 科室名称 课程设计评分表 24 评分标准: 学生是否严格遵守课程设计纪律,按照规定时间完成设计任务(占30%) 课程设计报告书质量:(占40%) (1)是否采用了良好的设计方法,独立完成课程设计。 (2)课程设计各分段的任务是否按时完成及完成的质量。 (3)是否完成课程设计任务书指定的全部要求。 课程设计报告书的撰写规范 (占30%) 课程设计报告书的撰写规范要求与毕业设计(论文)的要求相同。 教师评分: 1. 学生出勤得分: _________ 2. 内容质量得分: _________ 3. 撰写规范得分: _________ 最终评定成绩:_________ 教师评语: 签字: 日期: 年 月 日 医院管理信息系统设计 25 目 录 实验设计目的…………………………………………………….2 实验设计原理……………………………………………………..2 实验设计步骤…………………………………………………...2-11 可行性分析………………………………………………………..12 1 实验设计目的 管理信息系统课程设计作为独立的教学环节,是信息管理与信息系统专业集中实践性环节系列之一,是学习完《管理信息系统》课程并进行完专业实习后进行的一次全面的综合练习。其目的在于加深对管理信息系统基础理论和基本知识的理解,掌握使用信息系统分析、设计的基本方法,提高解决实际管理问题、开发信息系统的实践能力。同时课程设计应充分体现―教师指导下的以学生为中心‖的教学模式,以学生为认知主体,充分调动学生的积极性和能动性,重视学生自学能力的培养。 实验设计原理 医院信息系统(Hospital Information System),亦称―医院管理信息系统‖,是指利用计算机软硬件技术、网络通信技术等现代化手段,对医院及其所属各部门的人流、物流、财流进行综合管理,对在医疗活动各阶段产生的数据进行采集、储存、处理、提取、传输、汇总、加工生成各种信息,从而为医院的整体运行提供全面的、自动化的管理及各种服务的信息系统。 实验设计步骤 需求分析 2 第一部分 调查用户需求 本系统的最终用户为医院,我们根据从医院方面取得的图表资料、文字资料以及其他细节方面的信息,根据我们日常生活中的经验,根据我们所做的其他询问和调查,得出用户的下列 26 实际要求: 1、医院的组织机构情况 一所医院的主要构成分为两个部分,一是门诊部门,二是住院部门,医院的所有日常工作都是围绕着这两大部门进行的。 门诊部门和住院部门各下设若干科室,如门诊部门下设口腔科、内科、外科、皮肤科等,住院部门下设内科、外科、骨科等,二者下设的部分科室是交叉的,各科室都有相应的医生、护士,完成所承担的医疗工作,医生又有主治医师、副主任医师、普通医师或教授、副教授、其他之分。 为了支持这两大部门的工作,医院还设置了药库、中心药房、门诊药房、制剂室、设备科、财务科、后勤仓库、门诊收费处、门诊挂号处、问讯处、住院处、检验科室、检查科室、血库、病案室、手术室,以及为医院的日常管理而设置的行政部门等。 其中,药库负责药品的贮存、发放和采购;中心药房负责住院病人的药品管理,包括根据处方及医嘱生成领药单,向药库领药,配药并把药品发给相应的病区,以及药房的库存管理和病区余药回收;门诊药房负责门诊病人的药品管理,包括根据处方,按处方内容备药、发药,向药库领药等;制剂室负责药物的配制,并提供给药库;设备科负责医院的医疗设备等的购入和维修等;财务科负责医院中一切与财务有关的业务和工作,进行医院的财务管理;后勤仓库负责医院所有后勤物品的贮存和管理;门诊收费处负责门诊病人的处方的划价和收费;门诊挂号处负责门诊病人的挂号事务;问讯处负责向有疑问的就医病人解释相关问题;住院处负责所有就医病人的住院事宜和相关管理;检验科室负责病人的各项检验,(如验血等)以及与各项检验相关的管理,药剂取用等;检查科室负责病人的各项检查(如CT检查以及其他放射线检查等)以及与各项检查相关的管理,设备使用与维护等;血库负责医院的各种血型的血液的贮存和管理以及血液的采集;病案室负责病人病案的管理和保存;手术室负责病人的手术,手术的安排以及有关手术的相关事宜和器械,制剂,设备等的使用等;行政部门则根据其相应的工作职责进行日 常的工作,对医院进行行政方面的管理,以保证医院的医疗工作的正常进行和医院的后勤保障。 上述的各部门都有相关的办公地点、治疗地点和相对固定的工作人员。 各部门的关系图(即医院的机构组织结构)如下: 3 27 2、各部门的业务活动情况 门诊部门: 首先,门诊病人需要到门诊挂号处挂号(如果病人有需要,可以对所要就诊的相应医科进行查询,可查询该医科的当班医生及其基本情况,然后再去挂号),如果是初诊病人要在门诊挂号处登记其基本信息,如姓名、年龄、住址、联系方式等,由挂号处根据病人所提供的信息制成IC卡发放给病人;然后,初诊病人可与复诊病人一样进行挂号和就诊排号,由挂号处处理病人的病历管理; 其次,病人需到门诊收费处缴纳挂号费,并持挂号和收费证明到相应医科就医,经医生诊疗后,由医生开出诊断结果或者处方,检查或检验申请单,如为处方,则病人需持处方单到门诊收费处划价交费,然后持收费证明到门诊药房取药;如为检查或检验申请单,则病人需持申请单到门诊收费处划价交费,然后持收费证明到检查科室或检验科室进行检查或检验; 当门诊药房接到取药处方后,要进行配药和发药,当药房库存的药品减少到一定量的时候,药房人员应到药库办理药品申领,领取所需的药品,而药房需对药品的出库、入库和库存进行管理; 当检查科室或检验科室接到病人的申请后,对病人进行检查或检验,并将检查或检验结果填入结果报告单,交给病人,各科室所做的检查或检验需记录在案。 病人可持检查或检验的结果再到原医科进行复诊,直至医生开出处方或提出医疗建议。最终病人痊愈离院。 初诊病人 登记、发放IC卡 28 复诊病人 就诊排号预约挂号 预交金,结帐 病历管理 划价,收费 住院部门: 当病人接到医生的建议需住院治疗或接到医院的入院通知单后,需到住院处办理入院手续,需要登记基本信息,并交纳一定数额的预交款或住院押金。住院手续办理妥当之后,由病区科室根据病人所就诊的医科给病人安排床位,将病人的预交款信息录入病进行相应的维护和管理,病区科室还应按照医生开出的医嘱执行,医嘱的主要内容包括病人的用药,检查申请或检验申请; 病区科室应将医嘱中病人用药的部分分类综合统计,形成药品申领单,统一向药库领药,然后将药品按时按量发给住院病人,需对发药情况进行记录,并对所领取的药品进行统一的管理; 病区科室应将医嘱中的检查或检验申请单发给检查科室或检验科室,当相应的科室将申请进行处理并将检查通知发给病区科室后,由病区科室通知病人进行相应的检查或检验; 药库对于药品申领单的处理和对药品的管理,检查科室和检验科室对于申请、检查以及相应的管理工作与门诊中的部分相同; 29 当病人需要手术时,首先由病区科室将手术申请提交给手术室,由手术室安排手术日程,进行材料、器械的准备,当准备妥当后,手术室将手术通知发给病区科室,由病区科室通知并安排病人进入手术室,手术室需将手术中的麻醉记录,术中医嘱,材料、器械的使用记录在案; 当病人可以出院时,应先在病区科室进行出院登记,办理出科,然后在住院处办理出院手续,即可出院 。 当病人需要转科时,需在病区科室办理转科手续,转入另一病区,由另一病区的病区科室安排病人的床位,并对病人转入的相应资料进行管理。 从另一病区转入 转至另一病区 入院 入科 登记病人基本信息 排床 转床 转科 预交款、记账结账 录入维护执行医嘱 出院 出科 办理出院手续 出院登记手术处理 住院处 病区科室 手术申请 手术通知 安排手术日程 打印发药科室寄药 麻醉纪录术中医嘱 药品申领寄药回收 材料、器械记账 药品库存管理 手术室 中心药房 药品出库 接受检查申请 接受检验申请 药品入库 回填检查结果 回填检验结果 药品管理 检查记账 检验记账 药库 检查科室 检验科室 30 第二部分 系统功能的设计和划分 根据如上得到的用户需求,我们将本系统按照所完成的功能分成以下几个子系统: 门诊管理子系统 药品管理子系统 住院管理子系统 行政管理子系统 各子系统完成的功能如下: 1、门诊管理子系统 门诊挂号部分: 处理门诊病人挂号事务; 支持多种挂号类别以及自费、公费、记账等多种挂号病人,支持退号操作; 向首次来院就诊的病人发放就医IC卡,登记病人基本信息; 建立、维护门诊病历的基本信息。 门诊收费部分: 1(输入门诊病人的处方和各种诊疗项目,由电脑自动划价,同时对指定的项目支持手工划价; 2(收费后,处方信息自动发送到门诊药房;检查、检验项目发送到相应医技科室; 3(具有处方的作废、退费功能; 4(办理持就医IC卡病人的交款、退款和结账手续; 查询病人费用明细; 查询统计:收款员缴款报表、收入分类报表;全院收入报表、收入分类报表;临床科室收入、工作量报表 ;医生收入、工作量报表;医技科室收入、工作量报表。 2、药品管理子系统 门诊药房管理部分: 1、接收门诊收费处或门诊医生工作站发送来的处方,按处方内容备药、发药; 2、向药库提交药品请领单,以从药库领药为入库,处方发药为出库,实现门诊药房的出入库管理; 3、药品盘点、报损处理; 4、持就医IC卡的病人可在此刷卡扣除药费并取药; 5、统计门诊药房配、发药人员工作量; 6、统计各科室、全院门诊药品消耗量; 7、查询病人处方内容; 中心药房部分: 1(接收病区发送来的处方,生成病区领药单以进行配药、发药; 2(向药库提交药品请领单,以从药库领药为入库,病区领药为出库,实现药房的库存管理; 3(药品的盘点、报损处理; 4(对病区的余药进行回收管理; 5(为病区实时提供医嘱药品的库存信息; 31 6(统计药房配、发药人员工作量; 7(统计各科室、全院药品消耗量; 药库部分: 建立药库的药品出入库账目; 辅助制定合理的药品库存水平和采购计划,以最小的资金占用保证药品的供应; 按药品批次和有效期进行管理和出库安排; 通过与门诊药房和中心药房的连接,实现药库药品出库与各药房药品入库的计算机一体化处理; 进行药品的调价、盘点、报损处理; 药品入、出、存的查询统计。 3、住院管理子系统 住院收费处部分: 住院病人办理入出院、交退款、记账、结账等手续; 冲账功能; 形成住院部的收入日结算; 将出院病人的信息传送至病案管理模块; 统计收款员缴款报表、收入分类报表,全院收入报表、收入分类报表,临床科室收入、工作量报表,医生收入、工作量报表,医技科室收入、工作量报表; 病区管理部分: 完成病人的入、出、转登记; 管理病区床位,提供换床、挂床、包床处理; 录入、维护或执行和各类长短期医嘱;根据用药类医嘱自动生成处方并划价记账,发送至中心药房申领药品;向检查科室提交检查申请;向检验科室提交检验申请;向手术室提交手术申请; 对于病人在病区发生的床费等各项常规费用进行及时记账; 自动采集用药相关费用,如注射费、注射器费、滴管费等; 录入病人体征信息、诊断信息; 可以设置预交金报警下限,对病人账目实时监控,余额不足时自动提示,避免欠费的发生; 公布病人每日用款情况; 输出各种护理工作单:治疗单、服药单、肌注单、滴注单等; 门诊管理子系统与住院管理子系统交叉的部分: 检查科室部分: 1(接收门诊或病区发送来的检查申请,安排检查日程; 2(辅助医生填写检查结果或书写检查报告,提供各类报告的模板和常用术语字典; 3(将检查结果返回申请科室; 4(对于住院病人将检查费用记账,持IC卡病人可在此刷卡扣除检查费; 5(对检查结果进行统计分析;查询检查科室的收入、工作量等信息; 检验科室部分: 1(接收门诊或病区发送来的检验申请; 2(检查完成后,通过联机数据采集或手工录入结果,将检验结果形成报告,传回申请科室,对于住院病人将检验费用记账,持IC卡病人可在此刷卡扣除检查费; 32 3(对检验结果进行统计分析; 4(查询检验科室的收入、工作量等信息; 病案管理和工作量统计部分: 接收住院处传来的出院病人信息; 对于一个病人多个病案号的情况,提供了病案号合并功能; 对病案的流通进行跟踪管理; 提供多种条件任意组合模糊查询; 提供多种医院及上级管理部门所需报表格式; 首创病案数据变量多条件组合分析,提供多种医学统计分析指标,数据分析图表等功能; 对医院的诊疗工作量进行输入、查询和统计。 4、行政管理子系统 1、提供多种条件的,对医院各方面运作的查询; 2、根据各方面的数字,形成一定的分析,其结果作为辅助医院行政管理人员做出决策的部分依据; 3、供医院所有工作人员的详细资料的综合管理; 4、提供医院所有工作人员的工资管理和核算; 5、提供对医院的医疗管理、经济管理、行政管理等方面信息的各种查询和统计、分析,提供报表打印和图形显示,可供医院领导进行综合查询,做辅助决策之用。 经上述分析,我们已经得到了对于该系统的基本要求和系统模块的划分,在这些模块中,我们选择 门诊管理子系统,住院管理子系统,药品管理子系统 (其中,对前两个系统进行了重点设计) 进行具体的数据库设计,在需求分析中形成的数据流图如下: 数据流图 第一部分:门诊管理子系统(见图1) 第二部分:病房管理子系统(见图2) 检查项目 第三部分:药品管理子系统(见图3) 门诊中医药 检验项目 检查 检查 房发药 检验申请,结果 药品, 申请,收费 处方,检验 需交 收费单 已交纳结果纳费用 单费用单 挂号单,病历,检查检验结果 医生诊断 应交费项目,金额 病人 门诊收费处收处理 ( 检查检验申请单,住院交费单 33 费 申请,单处方,应交费项目 ) 挂号交费 单,挂号 信息 住院申 待批准入院通知病人病情诊断 入院单 住院处 门诊部 处理 批准住院 交费情况 34 入院通知单 住院信息 住院收费处 病人 各类解释 注: ? 处方 ? 药品 ? 手术请求 ? 手术安排 ? 检查请求 ? 检查单 ? 检验请求 ? 检验单 ? 出院通知 ? 批准请求 ? 药品分配 ? 批准请求 ? 手术安排 ? 批准请求 ? 检查安排 ? 批准请求 ? 检验安排 未验收药品 药 供应商 品 35 登 记 已验收药品 验 收 药品发放 药 库 数据库设计 使用设计器创建表 36 创建医院管理系列表 创建表查询 37 创建窗体 5.、创建报表 38 可行性分析 系统建立了对医疗资源空间和属性信息的综合管理平台,有利于医疗资源布局和分配的科学决策,为卫生信息社会服务化增加了有益的内容,也为卫生电子政务的全面展开打下良好的基础。 系统具有如下特点: 先进性:系统充分利用现今国内外各种成熟的先进技术和设备,使系统站在一个较高的起点,具有较长的生命期。 实用性:系统具有良好的实用性是,确实能为医疗资源管理提供有效手段,方便其日常工作。 可靠性:系统的可靠性也是系统的生命力基础,因此有时宁愿舍弃一些不成熟或不实用的―先进‖技术、设备,也必须保证系统的稳定性与可靠性。 资源共享性:网络上的所有资源,可以一体化管理,可以被各组成单元共享。各医疗机构信息、用户信息等,不管是在卫生局局域网还是在互联网,都是统一的。 易用性:友好的人机交互界面,输入查询等操作直观方便,全面支持鼠标操作,尽量减少人工数据录入;提示信息简单明确,引导用户完成系统的各项功能。联档帮助功能完整齐全,方便非计算机专业人员的学习和使用。 扩充性:系统基于模块化的设计,可以方便地进行扩充,当业务需要新的功能时,可以方便地进行扩充,保持系统的生命力。 12 医院门诊管理系统_毕业设计论文_开题报告 开题报告 39 选题的背景 数字化医院是正在发展中的新生事物,概念一直没有明确的涵义。2001年,有关权威人士提出:数字化医院是以网络管理为基本模式,以信息为医院发展的基本功能,以信息技术为依托,增强医院的技术实力,以信息文化改变着人们教育、工作方式和思想观念的新兴群体形态,以信息化建设为医院发展的新增长点。数字化医院的暂时界定,为医院信息化发展提供了初步的理论依据。 建设数字化医院是医院管理信息系统发展的必然,也是医院现代化管理和高效运行的需要。随着医疗体制改革的不断深入,医疗市场的竞争越加激烈,尤其是我们妇婴医院,一直处于综合医院妇产科、个体医院、诊所的包围之中,因此,迫切需要改变医院管理模式,提升医院形象,增强医院核心竞争力。从我院的实践上看,信息化管理给我们带来了以下好处: (1)方便了患者。由于电子传输和信息高度共享,缩短了病人的就诊时间,解决了―三长一短‖中的挂号、收费、取药时间长,门槛多的医患矛盾,减少了就医取药的环节,达到了患者看病―提速‖的最佳效果。患者还可以通过多媒体导诊及患者综合查询系统对自己需要缴费的项目,费用明细和总金额一目了然。 (2)增收节支。现在持卡挂号、持卡开药、持卡交费,避免了以往漏记、漏收、人情看病等现象发生;办公自动化系统减少了办公消耗材料的使用,通过局域网定向传递通知、报表,提高了工作效率。 (3)增加了三个效益。信息化建设在功能拓展中,成为员工提高技术素质、业务素质、文化修养、获取知识、信息的新途径,给医院带来了良好的技术氛围,有效提高了文化效益。患者掌握医院信息,扩大了医院知名度;并随时可以了解药品价格以及自己就医费用等情况,减少了医疗纠纷,增加了医疗内容的透明度,有效提高了社会效益。信息化建设给医院带来的经济效益在业务流程中为显性化,员工体力劳动向智能化发展,减轻了工作强度,工作得以把精力集中于为患者服务上,带来服务质量的提高,为医院增加了收入,有效提高了经济效益。 (4)加速规范了医院管理流程。使用院长查询系统,可随时了解全院的医疗情况、物流情况等各种医疗统计分布式和多源性数据,为院领导决策于医院可持续发展,提供了快速准确的支持,富有成效地提高了医院的运行效率。 二(课题的提出意义 根据调查得知,他们以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于医历等很多信息都是用人工计算、手抄进行。数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统,规范的信息管理手段。 归纳起来,好处大约有以下几点: 1( 可以存储以往的门诊信息,安全、高效; 2( 只需一到二名信息录入员即可操作系统,节省大量人力; 3( 可以迅速查到所需信息。 三(门诊管理的功能及特点 根据本系统的需求,结合实际管理情况,本系统应用有如下功能模块: 基础数据维护:对用户信息的管理 药品管理:主要对药品类别、药品类型及药品信息的管理 40 挂号:病人就医的主流程之一,为每一个病人分配一个号码 划价:计算药品的价格,主要包括中药、西药、中成药等 门诊收费:对各项收费进行汇总,如中药、西药、中成药等 查询:对挂号信息、收费信息进行查询 四. 管理系统的现状 管理信息系统(MIS)是一门边缘学科,集管理科学、信息科学、系统科学、现代通信技术和电子计算机技术于一体。1985年,管理信息系统创始人,明尼苏达大学卡尔森管理学院的著名教授戴维斯(Gordon.B.Davis)给出了一个具有代表性的定义:“管理信息系统是一个利用计算机硬件和软件,手工作业、分析、计划、控制和决策模型以及数据库的用户,机器系统。它能提供信息支持企业或组织的运行、管理和决策功能。” 随着网络技术的出现,管理信息系统又有了新的必恭必敬,基于网络的管理信息系统不断出现,管理信息系统的概念模型也发生了相应的变化,许多学者对管理信息系统给出了新的定义。例如劳顿认为:“管理信息系统是一个基于计算机的信息系统,它通过收集、处理、存储和扩散信息,来支持组织的管理、决策、合作、控制、分析活动,并使之可视化。” 五.门诊管理信息系统的设计方法和技术线路 5.1选用设计语言 目前的可用的设计技术在设计此类系统上的数据库技术已经非常成熟,可提供的开发工具也很多,例如:Visual C++ ,Visual Basic,PowerBuilder,Dephi, visual foxpro等,它们都是很好的数据库开发工具,都是可视化开发工具,功能强大,开发容易,开发周期短,对于本任务都能够胜任。 Visual Basic是一种可视化的、面对对象和条用事件驱动方式的结构化高级程序设计,可用于开发Windows环境下的种类应用程序。它简单易学、效率高,且功能强大,可以与Windows的专业开发工具SDK相媲美,而且程序开发人员不必具有C/C++编程基础。在Visual Basic环境下,利用事件驱动的编程机制、新颖易用的可视化设计工具,使用Windows内部的应用程序接口(API)函数,以及动态链接库(DLL)、动态数据交换(DDE)、对象的链接与嵌入(OLE)、开放式数据访问(ODBC)等技术,可以高效、快速地开发出Windows环境下功能强大、图形界面丰富的应用软件系统。 总的来说,Visual Basic具有以下特点: 可视化编程: 用传统程序设计语言设计程序时,都是通过编写程序代码来设计用户界面,在设计过程中看不到界面的实际显示效果,必须编译后运行程序才能观察。如果对界面的效果不满意,还要回到程序中修改。有时候,这种编程-编译-修改的操作可能要反复多次,大大影响了软件开发效率。Visual Basic提供了可视化设计工具,把Windows界面设计的复杂性“封装”起来,开发人员不必为界面设计而编写大量程序代码。只需要按设计要求的屏幕布局,用系统提供的工具,在屏幕上画出各种“部件”,即图形对象,并设置这些图形对象的属性。Visual Basic自动产生界面设计代码,程序设计人员只需要编写实现程序功能的那部分代码,从而可以大大提高程序设计的效率。 面向对象的程序设计 4.0版以后的Visual Basic支持面向对象的程序设计,但它与一般的面向对象的程序设计语言 41 (C++)不完全相同。在一般的面向对象程序设计语言中,对象由程序代码和数据组成,是抽象的概念;而Visual Basic则是应用面向对象的程序设计方法(OOP),把程序和数据封装起来作为一个对象,并为每个对象赋予应有的属性,使对象成为实在的东西。在设计对象时,不必编写建立和描述每个对象的程序代码,而是用工具画在界面上,Visual Basic自动生成对象的程序代码并封装起来。每个对象以图形方式显示在界面上,都是可视的。 结构化程序设计语言 Visual Basic是在BASIC语言的基础上发展起来的,具有高级程序设计语言的语句结构,接近于自然语言和人类的逻辑思维方式。Visual Basic语句简单易懂,其编辑器支持彩色代码,可自动进行语法错误检查,同时具有功能强大且使用灵活的调试器和编译器。 Visual Basic是解释型语言,在输入代码的同时,解释系统将高级语言分解翻译成计算机可以识别的机器指令,并判断每个语句的语法错误。在设计Visual Basic程序的过程中,随时可以运行程序,而在整个程序设计好之后,可以编译生成可执行文件(.EXE),脱离Visual Basic环境,直接在Windows环境下运行。 5.2选用,,,,,,作为后台数据库 Access2000 就是关系数据库管理工具,数据库能汇集各种信息以供查询、存储和检索。Access 的优点在于它能使用数据表示图或自定义窗体收集信息。数据表示图提供了一种类似于 Excel的电子表格,可以使数据库一目了然。另外,Access允许创建自定义报表用于打印或输出数据库中的信息。Access也提供了数据存储库,可以使用桌面数据库文件把数据文件置于网络文件服务器,与其他网络用户共享数据库。Access 是一种关系数据库管理工具,关系数据库是已开发的最通用的数据库之一。如上所述,Access 作为关系数据库开发具备了许多优点,可以在一个数据包中同时拥有桌面数据库的便利和关系数据库的强大功能。 系统统设计进度安排 系统运行需求: ,II以上处理器,,,,,,内存,硬盘,,,以上. 将会用到的软件:Visual Basic 6.0 , Access 2000 制作时间安排 第一阶段:通过调查分析开发学籍管理所具备的能力及实现的方法。 第二阶段:绘出逻辑模块图,征求指导老师的建议。 第三阶段:技术攻坚,实施开发 第四阶段:运行、调试、修改 第五阶段:写出研究报告,整理技术文档,形成使用说明。 42 MIS课程设计实验报告——医院门诊处理系统 引言 1(1编写目的 科技进步将人类带到了信息时代,计算机已成为各行各业在业务处理与管理工作中必不可少的辅助工具,并对各行业的发展起到越来越大的推动作用。计算机信息管理技术的应用,除了能在相当大的程度上代替人工作业,从而减少人员工作量,减轻工作负担,减少工作中因人为原因而产生的错误从而避免不必要的损失外,更重要的是能建立准确畅通、简便的信息流通渠道,为工作提供所需要的准确、即时的信息以帮助作出正确而及时的选择与决定,从而给采用这门技术的单位带来了巨大的可见或不可见的利益与效益。 随着信息时代来临,信息处理的利器—计算机应用于医院的日常管理为医院的现代化带来了从未有过的动力和机遇,为医疗卫生领域的飞速发展提供了无限潜力。采用计算机管理信息系统已成为医院管理科学化和现代化的重要标志,给医院带来了明显的经济效益和社会效益。为了加快医院系统的信息化步伐,提高医院的业务水平,建设和完善医院信息系已变得十分必要。系统的建设将本着“以患者为中心”的原则,以方便患者、提高就诊效率为目的,力争为患者提供最满意的服务,同时也将提高医院的社会效益和经济效益。与市场经济的接轨的过程中,每个医院都面临着强化内部管理、树立医院形象、上层次晋等级、进而提高社会效益和经济效益的艰巨任务。在医院管理过程中应用计算机系统,可随时进行经济核算,展开成本效益分析,使医院经营决策科学化;借据计算机数据处理严密可靠的特有机制,在改善医院人、财、物管理,降低医管人员工作强度,提高医疗工作质量,杜绝人情方、搭车药、减轻病员负担,创造医院良好信誉等诸多方面,益康医院管理信息系统都将成为您不可或缺的助手和工具。 1.2项目背景 项目名称初步定为:医院门诊管理系统。分为三个子功能模块:门诊划价模块、门诊收费模 43 块和门诊发药模块。 2(任务概述 2(1目标 本门诊处理系统软件提供一个集门诊划价、收费、发药于一体的管理信息系统,可实现信息存储、更新、查询等多项功能,为广大医务工作人员及病人提供方便。 2(2运行环境 硬件环境: PII或更高档微机、笔记本电脑; 运行时内存需要:1MB; 安装所需硬盘:5MB; 打印机:可选。 软件环境: 中文Windows98/2000/Me; 英文Windows98/2000/Me。 2.3条件或限制 本系统更为理想的选择是与其他管理系统集成起来,组成医院管理系统。在功能方面可以考虑由多用户分别进行管理,系统也可为级别不同的用户设置不同的权限,同时应进一步提高系统的安全保密性。 3.需求分析 门诊管理系统的主要包含:门诊划价系统、门诊收费系统、门诊发药系统 3(1功能需求分析 3(1(1门诊划价系统功能需求分析 录入处方及检查治疗单、核算病人的费用,提供门诊划价窗口业务。 门诊划价发药可作到排队―四条龙‖合一:西药划价、中药划价、门诊收费等四条龙。实现―以病人为中心‖的目标。可以根据医院规模和管理模式选用。 各类划价支持多种录入方式:医院自编数字码方式、拼音缩写码方式、五笔码方式、拉丁方式、并充分满足了窗口业务的快速响应要求。 提供与门诊收费相关的各类报表。 提供与财务科的业务数据通讯能力。 提供与门诊药房的通讯能力。 向经济核算部门提供门诊科室人员的部分核算数据。 3(1(2门诊收费系统功能需求分析 支持多种收费方式、收费标准、收费项目、付款比例适应医院对不同病人的服务要求,特别支持医疗保险病人。 提供与门诊药房的联网数据共享能力 提供与门诊收费相关的各类报表 提供门诊医疗统计、门诊科室及工作人员部分核算数据和工作量统计。 完成现金收费并打印发票等功能,满足以收费为核心的管理,完成收费日清月结,随时生成各类门诊收费报表及各种统计报表。 退费处理方法合理有效,结帐方法灵活安全。 网络环境下可多人操作,使用密码划分权限,防止非法操作。使用连续套打发票,各收费员都用自己的发票,发票上打印各操作员的的工作发票序号。 期初设置方便灵活,各单位可自己定义科室项目、费用项目、操作员姓名及代号。 44 3(1(3门诊发药系统功能需求分析 采用整体统一的管理方式:门诊药房与门诊收费联网共享数据。 对药房同药库、药房同药房之间的物流进行双向管理 可以根据药品的限期及库存下限来来进行缺药、失效预告、对药品进行数量、金额双重控制,毒麻、贵重药品特别控制。 核对已收费处方无误后予以配药、发药处理。发药后减去门诊药房库存。 支持病人处方的退药处理,并增加门诊药房库存。 支持协定处方管理录入,能够自定义协定处方,加快划价/收费(员)录入速度。完善的库存管理:对购进药品从品种数量、价格等进行验收入库处理,根据临床需要和库存情况进行出库处理:除日常的出库外,还有调拨、报损、退药等多种形式出库。 严格药品有效期管理。 高度的自动处理功能:系统可根据有效期自动预告失效药品;对呆滞药品进行预告;对超限药品进行报警。 有丰富的报表功能:药品台帐、药品名细帐、药品月统计、药品出入库单、药品调价单、药品报废单等。 门诊药房系统中又分为门诊中药房和门诊西药房两子系统,两者主要功能相同。 针对性强,针对药房管理中的难点进行开发,做到了?四个一‘,即?药品名称统一、规格统一、编码统一、价格统一‘,将医院药品工作管理上升到新阶段。 模拟人工管理为主,操作员易于以惯常思维理解并掌握使用。 各药房以药库为中心,请领药品、入库、调价。 3(2需求概述 浏览功能:可选定一项记录,显示该记录的所有域。 修改功能:可任意修改字段,药品名称不能为空。 添加功能:可任意添加一条或多条处方及相关内容。 删除功能:可任意删除一条或多条处方及相关内容。 报表生成:可根据提供的模板将划价结果收费单或选中的数据生成多种形式的报表。 打印功能:将生成的报表或选中的记录进行打印输出。 身份验证:进入系统时,对操作员的身份进行检查,只允许合法操作员登陆系统。 3(3性能需求分析 ?模快化设计,具有良好的可扩充性,以适应医院不同阶段的发展需要。方便的系统剪裁功能,各子系统间任意选择是否联网。 ?信息共享、准确及时交流信息:发挥网络功能,减少重复操作,提高工作效率。彻底改变手工或单机管理对信息收集处理中的重复、混乱和容易出错的状况,充分利用计算机网络及关系型数据库的资源共享、数据共享等技术。一个环节录入信息,其它环节可以共享,确保数据的准确性和一致性。基本信息录入采用拼音输入方式,鼠标操作,基本不需输入汉字,大大提高工作效率。 ?操作简单,维护方便:不需要记忆任何计算机命令,人机界面友好,操作非常简单。每个系统都具有系统维护功能,对可变化的项目可自行维护,不需改变程序。 ?实时特色:24小时不间断的高度安全性和可靠性,数据传输准确快速,适应医院工作流程需要 ? 查询功能强大:可以对每个系统的业务情况、统计报表,在任意时间内进行汇总、查询,同时对几种情况可以任意组合查询、统计,大大降低了统计人员的工作强度;院领导通过查询系统,可及时了解业务情况、财务情况。各种数据报表皆可打印。将院里的事后统计变为实时跟踪,静态管理变为动态管理,提高了管理水平运行环境。 45 3(4性能概述 3(4(1数据精确度 查询时应保证查全率,所有相应域包含查询关键字的记录都应能查到,查到的记录应与给定 的单项或组合查询条件完全匹配。 3(4(2时间特性 一般操作的响应时间应为1s-2s内,打印机的操作及数据的导入和导出应在可接受的时间内 完成。 3(4(3适应性 满足操作员的使用要求和前面提到的运行环境 4(总体设计 4.1处理流程 系统启动时,激活身份验证模块; 经过身份验证后,对系统初始化。根据系统配置文件将数据库导入,并设置各全局变量; 系统进入消息循环状态,通过事件驱动机制激活各功能模块,并执行指定模块; 各项功能执行完毕后重新进入消息循环系统状态; 由关闭系统事件激活关闭系统模块,退出系统。 4(2总体结构 系统功能模块图 医院管理系统 财住门医师系 务院诊护士统 处系系人员维 理 统 统 管 理 护 挂划收药药 号 价 费 房 库 46 划修收发 价 费 药 改 4(3模块外部设计 序号 模块名称 备注 序号 模块名称 备注 1 2 初始化模块 系统初始化 关闭系统模块 关闭并退出系统 3 4 系统功能模块 浏览模块 5 6 增加模块 添加处方 删除模块 删除处方 7 8 报表生成模块 生成报表 打印模块 打印划价收费单 9 10 身份验证模块 验证身份 查询模块 4(4功能分配 系统控制功能 初始化模块; 关闭系统模块; 系统功能模块; 浏览功能 浏览模块; 查看详细资料功能 查询模块; 基本资料模块; 增加功能 增加模块; 删除功能 删除模块; (6)报表生成功能 报表生成模块; (7)打印功能 打印模块; (8)身份验证功能 身份验证模块。 47 5(程序设计说明 5.1功能概述 5.2性能概述 5.3输入设计 输入的方式简单、快捷,是医院信息管理系统的基本要求,特别是门诊划价、收费的输入方式直接影响医院的工作效率。此系统采用鼠标单击选择或直接输入的方式有许多优点。 满足操作员不同的需求。 无需记忆药品的价格。 如发现输入处方错误可按“删除”键进行修改。 5.4输出设计 输出方式按照实际需要设计,如门诊划价单、门诊收费单等。 5.5软件结构 5(5(1顶层数据流图 院长 门诊处理会计处理病人 系统 系统 药库处理 系统 5(5(2二层数据流图 院长 会计门诊药库 处理划价处理 系 统 系 统 系 统 48 门诊门诊 病人 收费发药 系统 系统 5(5(3三层数据流图 处方报表 院长 会计报表 产生会计 报表 处理 系统 产生门 处方清单 门诊报表 诊收费 报表 处方清单 药品清单 处方信息 药品清单 药品清单 门诊收费清单 接收 信息 接收 门诊收费清单 核对 处方信息 信息 处方信息 病人 划价单 划价信息 产生 划价单 划价 收费单 收费单 表 生成 收费 单 接收核 发药清单 对收费 收费 信 息 清 清单 收费 门诊药房清单 清单 49 发药信息 收费清单 门诊药房清单 药库 发药处理 处 理 系 统 售药报表 门诊药 库售药 门诊药房售药信息 报 表 门诊药房售药信息 门诊药房售药信息 5.6IPO图 5(6(1门诊划价系统IPO图 输入 处理 输出 病人信息、处1( 校验药品名并查药品价格等 方代号、药品找相关信息(价 名称 格、库存等) 新的药品名称 2( 校验新药品名并更改后的药品 查找相关信息 相关信息 划价结果 3( 多项药品单价相 加求和 5(6(2门诊收费系统IPO图 输入 处理 输出 病人信息、处1( 查找相关药品信药品价格 方代号 息(名称、价格 等) 交款信息 收费单 2( 计算应收款、找 零并保存 50 6。3诊发药系统IPO图 输入 处理 输出 处方代号 1( 查找药品信息 出售药品数 报表 2( 计算药品剩余数 量 5.7数据字典 数据结构:处方信息 含义说明:定义了病人病情及相关结果。 组 成:病人姓名、性别、日期、门诊号、处方号、病史、病况及处方。 数据项:日期 含义说明:病人就诊时间。 取值方法:病人挂号时系统的日期和时间。 数据项:门诊号 含义说明:病人看病的类别及次序。 取值方法:挂号时自动生成。 数据项:处方号 取值范围:000001~999999 取值方法:由电脑自动生成 数据项:病史 含义说明:病人曾经的得病记录 数据项:病况 含义说明:病人目前的得病情况 数据项:处方 含义说明:医生根据病人的得病情况做出的诊断 取值方法:由医生诊断获得的治疗方法及相关药品 数据结构:划价单 含义说明:药品价格合计 组 成:项目名称、规格、数量、单价、库存数量、所属部门和合计金额。 数据项:项目名称 含义说明:唯一标识药品的数据项,不能重名。 数据项:规格 含义说明:该药品对应的型号和类别。 数据项:数量 含义说明:记录药品的多少。 数据项:单价 51 含义说明:该药品在计量单位下的价格。 数据项:库存数量 含义说明:描述该药品在药库中的多少。 数据项:所属部门 含义说明:该种药品所属类别。 数据项:合计金额 含义说明:病人所需付的药品费用总和。 取值方法:合计金额=单价1*数量1+单价2*数量2 数据结构:收费单 含义说明:病人付款凭证 组 成:项目名称、规格、数量、单价、库存数量、所属部门、所付金额。 数据项:项目名称 含义说明:唯一标识药品的数据项,不能重名。 数据项:规格 含义说明:该药品对应的型号和类别。 数据项:数量 含义说明:记录药品的多少。 数据项:单价 含义说明:该药品在计量单位下的价格。 数据项:库存数量 含义说明:描述该药品在药库中的多少。 数据项:所属部门 含义说明:该种药品所属类别。 数据项:所付金额 含义说明:病人所实付的药品费用总和。 数据结构:门诊药房售药报表 含义说明:每隔一定时间送给药库管理系统的售药情况表。 组 成:药品编号、药品名称、规格、单价、售药数量/售药剂量 数据项:药品编号 含义说明:唯一标识该药品的关键域。 取值方法:由药品条形码标识 数据项:售药数量/售药剂量 含义说明:某种药品一定时间内售出的数量或剂量。 类 型:数字 6.程序设计说明 程序流程图 窗体1操作 实现功能 (1)添加数据库记录 点击添加 输入信息 修改数据库 52 保存数据库 (2)查询数据库功能 (3)计算合计 输入 加法计算 显示结果 窗体2操作 实现功能 输入索引 (1)查找索引 序 号 数据库内查找 是否存在 显示 显示窗体4 (2)计算找零 输入 计算 53 显示结果 窗体3操作 实现功能: 查找索引 输入 数据库内查找 是否存在 显示 显示窗体4 整个系统流程图 进入 输入身份及号码 判断身份是 否符合 进入主窗体 54 选择系统 7(本次课程设计的心得体会: 科技进步将人类带到了信息时代,计算机已成为各个行业在业务处理与管理工作中必不可少的辅助工具,并对各行业的发展起到越来越大的推动作用。医疗卫生是围绕在我们生活中的一个非常重要的部分,与我们的生活息息相关。建设一个适合、实用的医院管理信息系统,对医院经济效益、社会效益、管理水平及至医疗水平的提高都大有裨益。也正是由于这个原因,我们小组决定选择医院门诊处理系统这个题目进行项目开发。 在确定题目后,首先我们进行了大量的信息收集工作,包括网上查询、学校图书馆查询,甚至跑遍了学校周围的所有书店。在资料收集的过程中,我们发现医院管理信息系统是一个非常庞大的系统,而我们只是选择了其中一个小小的医院门诊处理系统。虽然这个小小的医院门诊处理系统就已经把我们搞得晕头转向了,但我们小组三人还是决心竭尽全力将他完成的详尽细致。 在资料收集的差不多之后,我们开始进入第二阶段,将书本上的知识转化为自己的知识。我们按照软件开发步骤进行了项目可行性研究、背景分析、需求分析、总体设计等,并确定画出了数据流图、IPO图、层次方框图、程序流程图等。虽然有些知识在课堂上并没有涉及到,但经过我们的自学理解,还是掌握了这些知识技能。 接下来,我们开始写文档,按照步骤尽量将文档写得清楚丰实,并用VB编写了相应的程序。 在整个的课程设计中,我们小组三人合理分工、互相帮助、团结协作,充分体现出了集体合作的能力。总而言之,本次课程设计,不仅让我们深刻掌握了书本上的知识,锻炼了我们的自学能力,培养了我们团结协作的精神,更使我们懂得了书本以外的能力的重要。这次课程设计真的让我们获益匪浅~ 医院门诊收费管理系统设计与实现 摘 要 医院作为特殊的服务行业,使用着大量的先进仪器设备,每天处理着大批的业务,产生庞大的信息,因此各医院急需一套适合本院的医院信息系统(HIS)来收集信息、管理信息,从而更好地利用信息,来提高医院的管理水平。 医院门诊收费管理系统是医院管理系统中重要的子系统,对医院的门诊收费有很大的帮助。能够杜绝欠费,减少漏费现象,从根本上防止价格的误划。其主要实现五项功能:挂号、收费、医生工作站、医技工作站、药房。具体完成内容:查阅资料确定初步方案、开题,系统需求分析,概念设计,逻辑设计,物理设计,模块设计,代码设计与调试。本系统需要的理论知识有:软件工程、信息管理、数据库技术、程序设计、项目开发等。并且能较好的进行 55 综合训练,提高实践能力。能够满足软件工程专业本科毕业设计的要求。 针对系统开发特点,本系统采用C/S模式,前台采用Delphi语言,后台采用SQL Server数据库技术,中间使用ADO控件。使系统达到较高的运行效率。 关键词:医院信息系统; SQL Server; Delphi; C/S模式 56 Abstract The hospital, as a special service profession, it use a great deal of advanced instrument equipments, it handles a large quantity of business, and produce a huge mount of information, so each hospital need a set of hospital information system(HIS) that suits this hospital urgently to collect information, manage information, thus effectively use the information to raise the level of management. The hospital out-patient service charge management system is an important sub- system in the hospital management system, which is very helpful to the out-patient service charge of the hospital. It can put an end to the owe, reduce the phenomenon of the fee leaking, and prevent the mistake of the price. It mainly carries out five functions: Register, charge, doctor's work station, medical technology work station, pharmacy. Concretely complete a contents: Check data assurance tentative program and open the system needs analysis, the concept design, the logic design, the physics design, the mold piece design, the code design with adjust to try, The theories knowledge that this system needed is: Software engineering, the information management, database technology, program designing, item development etc. And make sure that it can carry on comprehensive training, raise the ability of practice. And could satisfy the request of the software engineering professional graduation design. Aim at the characteristics of system development, this system adopts C/S mode, the stage adopts the Delphi language, the backstage adopts SQL Server database technique, use ADO to control a piece in the center. Make sure the system achieve a higher running efficiency. Key words: Hospital Information System; SQL Server; Delphi; C/S pattern 57 目 录 第1章 绪 论 59 1.1 系统定义 59 1.2 系统的背景 59 1.3 系统的必要性 59 第2章 可行性分析 60 2.1 经济可行性 60 2.2 技术可行性 60 2.3 操作可行性 61 第3章 需求分析 62 3.1 功能层次图 62 3.2 业务流程图 62 3.3 数据流程图 63 3.4 数据字典 63 第4章 系统设计 65 4.1 概念设计 66 4.2 逻辑设计 68 4.3 物理设计 69 4.4 模块设计 70 第5章 系统实施 70 5.1 后台数据库 70 5.2 前台实施 76 5.3 模块实现 78 第6章 系统测试 91 第7章 结 论 93 参考文献 93 致 谢 94 附 录 94 58 绪 论 系统定义 医院信息系统(Hospital Information System,HIS)是:利用电子计算机和通讯设备,为医院所属各部门提供病人诊疗信息(Patient Care Information)和行政管理信息(Administration Information)的收集(C0llect)、存储(store)、处理(Process)、提取(Retrieve)和数据交换(Communicate)的能力,并满足所有授权用户(Authorized)的功能需求的工具。 系统的背景 随着计算机性能不断提高,价格不断下降,计算机已在医院医疗、教学、科研、管理的各个方面得到越来越广泛的应用。计算机化的医院信息系统已成为现代化医院运营必不可少的基础设施与技术支撑环境。就象一个现代化医院的成功运行离不开功能完整、美观舒适的建筑物,技术娴熟的医护人员,性能齐全、高精尖的医疗设备一样,它也离不开计算机化的医院信息系统。 计算机技术及通信的发展使全球进入信息化时代,各国都在信息化建设方面投入巨大人力财力,医疗卫生领域更是实现信息化的重点。为了使我国医疗卫生信息化得到长足发展,国家开始了金卫医疗网络工程的建设,这标志着我国向医疗卫生事业信息化迈进了一大步。金卫工程的主要内容是建设覆盖全国、联系各医药卫生机构的广域网,实现各卫生机构信息传递的网络化。 伴随着国家整体医疗卫生网络的建设,各医疗单位尤其是医院内部的信息管理系统的建设成为越来越重要的事。我国从八十年代初开始建设医院信息系统(Hospital Information System,简称HIS),标志着我国医院管理学科从此进入了新的技术管理时期。 目前国内已有多家医院及开发商开发出多种版本的HIS,现有HIS的多为以医院的经济管理为核心,其功能重点在于实现医院人、财、物的信息化管理,以简要地归纳为“经济核算型”的HIS。但是,正如其它任何系统的信息管理软件一样,随着行业管理要求的提高、医院自身不断向现代化高水平的发展“经济核算型”的HIS很快暴露出了不足:仅仅以经济核算为中心导致了单纯地追求财务上的利益和一些短期行为,对医院科学的决策、医技水平的长期提高以至最终与国际医疗水平同步发展起不到相应的促进作用。因此新一代医院管理信息系统开发中心已经不再完全为经济核算,而是以服务病人为中心,即病人的医疗信息与病人住院期间的费用共同为中心。 随着网络技术,信息通信领域的长足发展,网络经济,知识经济再不是IT等高科技行业的专利,当今社会信息化进程迅猛发展,网络技术已经对社会,经济和文化各方面产生重大影响,并将改变人们认识世界,思考世界的观点和方法。作为传统行业之一的医疗卫生行业,如何面对网络时代带来的冲击,如何利用网络技术提高我们医疗卫生行业的管理水平和服务质量,是无法回避的问题。为了认真贯彻卫生部召开的关于加快医疗卫生系统信息化建设及管理的会议精神,进一步推进医疗行业的信息化建设,了解国际医疗信息化发展动态,吸收新的技术和管理经验,提高医疗卫生系统信息化应用的管理水平,使医院经济效益和社会效益双丰收,全国各省都在逐步加快医院的信息化建设步伐。HIS在我国医院中发展比较成熟,已经成为医院正常运转的基本条件。医院管理信息系统部分应该包括医院人、财、物的管理,临床中一般包括门诊病人费用管理和住院病人费用管理部分。 系统的必要性 医院是一个繁杂的社会组织,在我国,医院的数据统计工作一直由手工进行,上个世纪八十年代计算机的应用大大的提高各个行业的数据统计工作,医疗行业的数据统计自动化也从这个时期开始了,进入21世纪,计算机技术的飞速发展,促使统计自动化技术进一步推广,网络的崛起,使得管理信息系统更加高效实用,医院使用医疗管理信息系统可以进一步减少医疗过程中非医疗活动占有的时间比例,使医疗活动更加高校,在给人们带来优质的医疗服 59 务的同时产生经济上的效益,因此开发高效的医疗管理信息系统是我现阶段国医院管理的首要任务。 医院门诊管理系统是医院管理系统中重要的子系统,对医院的门诊收费有很大的帮助。能够杜绝欠费,减少漏费现象,从根本上防止价格的误划。减少重复劳动,节约人力成本,提高工作效率。增强各项收费透明度,提高医院的管理水平和社会形象。 可行性分析 进行可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决,而且我们的目的不仅仅是解决问题,还要确定问题是否值得去解决。 在可行性分析阶段,首先需要进一步分析和澄清问题的定义。在问题定义阶段初步确定的规模和目标,如果是正确的就进一步加以肯定,如果有错误就应该及时改正,如果对目标系统有任何约束和限制,也必须把它们清楚地列举出来。 可行性分析主要分为经济可行性、技术可行性、操作可行性三个方面。 经济可行性 当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。 尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。 在我国现有68000所医院中,占相当比例的医院还处于手工管理阶段。经过对一些手工操作医院的实际调查表明:在患者方面,由于门诊病人在挂号、划价、收费、取药几个环节浪费时间过多,致使每月患者流失量达到总患者流量的5%;由于费用不清,糊涂账多,致使每月患者流失量达到3%。在医院方面,药品管理不完善致使药品流失、过期和人情药品的损失占医院年利润的近20,;财务制度管理不能准确及时体现医院资金流向,影响资金调拨,造成供求关系不稳定,脱漏欠款现象严重,直接或间接造成的经济损失巨大。 有形的损失如此,而由于管理人员不能及时了解库存、财务情况;医生对药品批号、剂量、库存等情况了解总有时间差;患者对医院的收费表示怀疑,使得对医院的投诉明显增加,医院不得不承担经济和声誉上的损失;医院固定资产、物资管理的混乱所造成的无形损失更是不可估算。 采用医院管理信息系统可以大大提高医院的工作效率,提高管理的透明度,使得医院更加健康稳步的发展。 技术可行性 医院门诊收费管理系统采用了客户机/服务器的系统结构。客户机/服务器体系结构可以更好地实现数据服务和应用程序的共享,使系统容易扩充、更加灵活,从而简化了系统的开发。 到目前为止,计算机软件的开发分为两个不同的体系,其中一个体系是使用传统的程序设计语言(如 Pascal、Basic和C等)开发数值控制、数值运算等软件,围绕它们的重点是算术、数据结构以及近年产生的面向对象技术;另一个体系则是通用的数据库管理软件领域(数据库应用程序的开发)。这两个体系的发展都极为迅猛,但是二者并没有出现混合渗透迹象。如果使用数据库语言进行传统的算术编程,虽然也能完成相应的功能,但是其编程过程可能极为复杂。如果使用传统的编程语言进行数据库编程,通过调用专用的数据库应用程序接口 60 函数和过程,利用这些函数和过程提供的功能,可能也能做得比较完善,但这做起来大多是极其困难的。 医院门诊收费管理系统在前台的开发语言上选用的是Delphi 7.0,它就很好的综合了两个体系的优点。Delphi既结合了传统的编程语言Object Pascal和数据库语言的强大功能,又可以用于传统的算术编程和数据库编程,特别是Delphi 7.0具有强大的数据库功能,利用Delphi 7.0的数据库工具,编程人员根本不需要编写任何Object Pascal代码便可以创建一个简单的数据库应用。 Delphi 7.0可以访问多种数据库管理系统的数据库,凭借窗体(Form)和报表(Reports),BDE(Borland database engine)、ADO(ActiveX Data Objects)可以访问诸如Paradox、DBASE、SQL Server和本地InterBase服务器的数据库,也可以访问远程数据库服务器上的数据库(Oracle、SyBase、Informix等客户机/服务器数据库中的数据库),或任何经ODBC(Open database connectivity)可以访问的数据库管理系统中的数据库。 另外,Delphi是由Borland公司推出的快速应用软件开发工具,它以组件化的编程方式、面向对象的程序设计、快速的Pascal编译器、众多的组件和强大的数据库及网络应用开发支持,在竞争激烈的开发工具市场中越来越赢得程序设计者的青睐,是开发客户机/服务器程序的高效工具,是面向对象编程的典范。 医院门诊收费管理系统采用的后台数据库是微软公司的SQL Server 2000。之所以采用SQL Server 2000是因为它是面向高端的数据库管理系统,具有强大的数据管理功能,提供了丰富的管理工具支持数据的完整性管理、安全性管理和作业管理。SQL Server具有分布式数据库和数据仓库功能,能进行分布式事务处理和联机分析处理,支持客户机/服务器的系统结构。SQL Server还具有强大的网络功能,支持发布Web页面以及接收电子邮件。它是目前广为使用的数据库管理系统。 另外,SQL Server是由一系列相互协作的组件构成,能满足最大的Web站点和企业数据处理系统存储和分析数据的需求。SQL Server提供了在服务器系统上运行的服务器软件和在客户端运行的客户端软件,连接客户和服务器计算机的网络软件则由Windows NT/2000提供。SQL Server的数据库系统的服务器运行在Windows NT/2000系统上,负责创建和维护表和索引等数据库对象,确保数据完整性和安全性,能够在出现各种错误时恢复数据。客户端应用程序可以运行在Windows9x/NT/2000系统上,完成所有的用户交互操作。将数据从服务器检索出来后,可以生成拷贝,以便在本地保留,也可以进行操作。 SQL Server建立于Microsoft Window NT的可伸缩性和可管理性之上,提供了功能强大的客户服务器平台,高性能客户服务器结构的数据库管理系统可以将Visual FoxPro、Visual Basic、Visual C++、Delphi作为客户端开发工具,而将SQL Server作为存储数据的后台服务器软件。 SQL Server是基于客户机/服务器的数据库管理系统。用户通过使用客户系统从服务器检索信息并进行本地操作,服务器关注数据库进程,而客户则关注信息的表示。 SQL Server使用Transact-SQL语言来维护、实现和访问数据库,Transact-SQL是SQL(Structured Query Language)的一个子集标准。SQL是数据库操作的标准,每个数据库产品均包含其某一版本。 总而言之,采用SQL Server 2000作为系统的后台数据库和用Delphi7.0作为系统的前台开发工具可以加强系统的稳定性,提高系统的可维护性和易操作性。因此,基于上述特点来开发医院门诊收费管理系统从技术角度来说,也是十分可行的。 操作可行性 系统的操作可行性是指系统的操作方式在运行环境中是否能够正确运行。医院门诊收费管理系统将根据实际考察与调研的结果,设计出适应医院日常工作需要, 并且系统操作简单、界面友好、美观,功能全面、能提高工作效率,节省时间、数据安全性好,稳定性高、投资小、回报大的医院门诊收费管理系统。因此,系统在操作方面也是可行的。 61 需求分析 需求分析就是分析软件用户的需求是什么。如果投入大量的人力,物力,财力,时间,开发出的软件却没人要,那所有的投入都是徒劳。需求分析之所以重要,就因为他具有决策性,方向性,策略性的作用,他在软件开发的过程中具有举足轻重的地位。需求分析的任务就是解决“做什么”的问题,就是要全面地理解用户的各项要求,并准确地表达所接受的用户需求。 功能层次图 通过对医院门诊工作的调研,根据门诊收费管理的需要,结合计算机应实现的功能,特对门诊收费管理部分做出以下功能模块的总体设计。如图3.1所示。 门诊收费信息系统 门诊挂号医生工作站门诊收费医技工作站药房 图3.1 门诊收费信息系统 业务流程图 业务流程图是一种描述系统内各单位、人员之间业务关系、作业顺序和管理信息流向的图表,利用它可以帮助分析人员找出业务流程中的不合理的流向。医院门诊收费管理系统的业务流程图,通过它可以大概了解医院门诊的业务流程情况。如图3.2所示。 62 患者 门诊挂号 挂号单 医生工作站 处置结果处置单处方 门诊收费 收据 图3.2 业务流程图 药房医技工作站 数据流程图 数据流程图是软件工程中专门描绘信息在系统中流动和处理过程的图形化工具。因为数据流程图是逻辑系统的图形表示,即使不是专业的计算机技术人员也容易理解,所以是极好的交流工具。在数据流程图绘制的过程当中,采用了自顶向下逐层分解的办法来描述系统内部的数据流向。图3.3为医院门诊收费管理系统的数据流程图。 患 者 P1.1D1患者信息挂号处理 D8检查结果D2挂号登记 P1.4P1.2D4处置单医技执行医生工作站就诊 P1.3D7收费登记D3处 方收费处理 P1.5 D6医技信息D5药品信息取药图3.3数据流程图 数据字典 为了对数据流程图中的各个元素做出详细的说明,有必要建立数据字典。数据字典是结构化设计方法的另一个工具,它用来对系统中的各类数据进行详尽的描述。对数据库设计来讲,数据字典是进行详细的数据收集和数据分析所获得的主要成果。数据字典主要从数据项、数据结构、数据流、数据存储、处理过程五个方面对数据流程图进行具体的定义。数据流程图配以数据字典,就可以从图形和文字两个方面对系统的逻辑模型进行完整的描述。另外,数 63 据字典的内容在数据库设计过程中还要不断的修改、充实、完善。数据项、数据结构、数据流、数据存储的定义如表3.1至表3.4所示。 表3.1 数据项的定义 数据项名称 数据项含义 数据类型 长度 取值范围 4 a000-j999 患者编号 为每个患者设置一个代号 字符 2 性别 患者的性别 字符 男、女 8 19**/**/**~2***/**/** 出生日期 患者出生的时间 日期 20 单位 患者所在单位 字符 所有单位 4 k000- t999 医生编号 为每个医生设置一个代号 字符 50 医生姓名 医生的名字 字符 中、外文 2 性别 医生的性别 字符 男、女 8 2***/**/** 生产日期 药品出厂时间 日期 8 19**/**/**~2***/**/** 出生日期 医生出生的时间 日期 20 科室 医生所在科室 字符 医院所有科室 20 职称 医生的职称 字符 职称 50 药品的名称 药品的名字 字符 中、外文 50 所属类别 药品的类别 字符 中成药、中草药、西药 8 保质期 药品保证质量的期限 字符 1个月~3年 表3.2 数据结构的定义 数据结构名称 含义说明 数据结构组成 患者 存储患者的信息 患者编号+患者姓名+性别+出生日期+单位 医生 存储医生的信息 医生编号+医生姓名+性别+年龄+职称+所属科室 科室 存储科室的信息 科室编号+科室名称 药品 存储药品的信息 药品编号+药品名称+批号+药品单价+所属类别+生 产日期+保质期+药品拼音码+药品计量单位 医技 存储医技的信息 医技编号+医技名称+医技拼音码+医技计量单位+医 技单 费用项 存储费用的信息 费用编号+费用名称+费用单位+费用价格 64 处方 存储处方的信息 处方号+药品编号+患者编号+医生编号+费用编号+ 收据号+数量+单价 处置单 存储处置单的信处置单号+医技编号+患者编号+医生编号+费用编号 息 +收据号+数量+单价 表3.3 数据流的定义 数据流名称 简要说明 数据流来源 数据流去向 数据结构 P1.1 患者信息 对患者信息患者 患者编号+患者姓名+性别+出生日 进行维护 期+年龄+单位 P1.2 挂号信息 对挂号信息挂号登记 挂号类别+患者编号+患者姓名+性 进行维护 别+单位+科室+医生+金额 P1.3 处方信息 对处方信息医生工作站 处方号+药品编号+患者编号+医生 进行维护 编号+费用编号+收据号+数量+单价 P1.3 处置单信息 对处置单信医生工作站 处置单号+医技编号+患者编号+医 息进行维护 生编号+费用编号+收据 P1.3 药品信息 对药品信息药品信息 药品编号+药品名称+批号+药品单 进行维护 价+所属类别+生产日期+保质期+药 品拼音码+药品计量单位 P1.3 医技信息 对医技信息医技信息 医技编号+医技名称+医技拼音码+ 进行维护 医技计量单位+医技单价 P1.4 P1.5 收费信息 对收费信息收据 收据号,患者编号,费用编号,金额, 进行维护 数量 表3.4 数据存储的定义 数据存储名简要说明 输入的输出的数据存储组成 称 数据流 数据流 P1.1 D2 挂号信息 患者挂号信息维护患者编号+患者姓名+性别+出生日期+ 情况的记载文档 年龄+单位+医生+科室 P1.2 D3 处方信息 关于处方情况的记处方号+药品编号+患者编号+医生编号 载文档 +费用编号+收据号+数量+单价 P1.2 D4 处置单信息 关于处置单情况的处置单号+医技编号+患者编号+医生编 记载文档 号+费用编号+收据号+数量+单价 P1.3 D7 收据信息 关于收据信息情况收据号,患者编号,费用编号,金额, 的记载文档 数量 P1.4 D8 检查信息 关于取药信息维护患者编号,医生编号,医技编号,数量, 后情况的记载文档 费用项 系统设计 一般来说,系统设计分为系统总体设计和系统详细设计。系统总体设计阶段的基本目的是用比较抽象概括的方式确定系统如何完成预定的任务,也就是说应该确定系统的物理配置方案,并进行确定组成系统的每个程序结构。因此,系统总体设计阶段主要由两部分组成。首先,需要从数据流图出发设想组成系统功能的若干个的合理的物理方案。然后,确定系统由哪些模块组成以及这些模块之间的动态调用关系。在进行系统结构设计时应该遵循的最主要 65 的原理是模块独立原理,也就是说,系统应该由一组完成相对独立子功能的模块组成。系统总体设计中的模块划分根据软件工程的原则要符合高内聚低耦合。 数据库设计是把现实世界的问题合理的表示出来,存储在计算机中,以支持应用程序的处理要求,是在现有数据管理系统上建立数据库的过程。我们用E-R图对现实世界的问题进行表述,在用关系数据库的关系模型对E-R图表示的信息进行组织和存储。但是将E-R图像关系模型的转换过程并不是一个简单的过程,因为在这里存在着一个转换和设计好坏的问题。如果这个转换没有做好,有可能会产生许多数据冗余的问题,或者不能对问题的实质进行正确表达,无法实现所需要的功能,更严重的还有可能在数据库中留下隐患,当条件合适的时候使数据库系统崩溃。所以数据库的规范化非常重要。 为了评价数据库模式的优劣,柯德在1971年到1972年之间提出了第一范式,第二范式,第三范式的概念。如果一个关系模式,它的每一个分量是不可分的数据项,则此关系模式为第一范式。如果一个关系模式属于第一范式,并且每一个属性都完全依赖于其主码,则称该关系模式为第二范式。如果一个关系模式为第一范式,同时不存在非主属性对码的传递依赖,则称为第三范式。一般来说,设计的管理信息系统都要求满足第三范式。 数据库的开发实际上也是一种软件工程,数据库作为一个独立的产品有着其自身独特的设计过程。因为这些过程为数据库提供了一些最基本的保证。一般包括这几方面:数据库的系统设计和实现,数据库的应用设计和实现。 设计一个数据库和设计一个软件一样,也要遵循一定的规则和周期,数据库系统周期一般分为五个阶段。需求分析、概念设计、逻辑设计、物理设计、数据库实施和维护。 概念设计 概念设计的任务是在需求分析阶段产生的需求说明书的基础上,按照特定的方法把它们抽象为一个不依赖于任何具体机器的数据模型,即概念模型。概念模型使设计者的注意力能够从复杂的实现细节中解脱出来,而集中在最重要的信息的组织结构和处理模式上。 以下是医院门诊收费管理系统的各个实体、属性和E-R图。如图4.1、图4.2、图4.3、图4.4、图4.5、图4.6、4.7所示。 出生日期 患者姓名患者患者编号 性别单位 图4.1 患者实体详细属性 66 性别出生日期 医生姓名医生医生编号 科室职称 图4.2医生实体详细属性 科室编号科室科室名称 图4.3科室实体详细属性 药品名称所属类别 保质期药品单价 药品计量单位药品拼音码药品 生产日期国家编号 批号 图4.4药品实体详细属性 医技单价 医技医技编号医技名称 医技拼音码医技计量单位 图4.5医技实体详细属性 67 费用名称价格 费用项费用类别费用编号 药品医技 图4.6费用项实体详细属性 医技科室属于属于费用项mm 11 1m1 属于处置单属于 图4.7 医院门诊收费管理系统的E-R图 mnm逻辑设计 概念结构设计所得的ER模型是对用户需求的一种抽象的表达形式,它独立于任何一种具体处方属于药品患者医生nmnm的数据模型,因而也不能为任何一个具体的DBMS所支持。为了能够建立起最终的物理系统,还需要将概念结构进一步转化为某一DBMS所支持的数据模型,然后根据逻辑设计的准则、数据的语义约束、规范化理论等对数据模型进行适当的调整和优化。形成合理的全局逻辑结构,并设计出用户子模式。这就是数据库逻辑设计所要完成的任务。 数据库逻辑结构的设计分为两个步骤: 1.将概念设计所得的ER图转换为关系模型 关系模型的逻辑结构是一组关系模式的集合。E,R图则是由实体、实体的属性和实体之间的联系三个要素组成的。所以将E,R图转换为关系模型实际上就是要将实体、实体的属性和实体之间的联系转换为关系模式,这种转换一般遵循如下原则: 1)一个实体型转换为一个关系模式。实体的属性就是关系的属性,实体码就是关系的码。 2)一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的候选码。如果与某一端实体对应的关系模式合并,则需要在该关系模式的属性中加入另一个关系模式的码和联系本身的属性。 3)一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码。 4)一个m:n联系转换为一个关系模式。与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。 68 5)三个或三个以上的实体间的一个多元联系可以转换为一个关系模式。与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。 6)具有相同码的关系模式可合并。 2.对关系模型进行优化 数据库的概念模型到逻辑模型的转换结果并不是惟一的,为了进一步提高数据库应用系统的性能,还应对所得的关系模型进行适当的修改和调整,这就是数据库模型优化所要完成的工作。应用规范化理论优化逻辑模型一般要做如下工作: 1)确定出每个关系模式内部属性之间的数据依赖和不同关系属性之间的数据依赖。关系模型的规范化理论是以分析属性间的函数依赖为基础,通过对关系模式的分解,逐步消除各处插入、删除异常,减少数据的冗余。因此,确定数据依赖关系是优化逻辑模型的首要工作。确定函数依赖依据的是需求分析阶段所得到的具体语义。 2)对各个关系模式之间的数据依赖进行极小化,消除冗余的联系。 3)按照数据依赖和规范化理论对关系模式逐一进行分析,考察是否存在部分函数依赖、传递函数依赖、多值依赖等,从而确定各关系模式分别属于第几范式。确定各关系的范式级别为接下来的范式的分解和合并提供了依据。 4)根据需求分析阶段所得的实际应用需求,确定是否对某些关系模式进行分解或合并。尤其值得注意的是,由于复杂的关系数据库查询操作通常涉及多个关系表之间的相互连接,从而一定程度地影响了查询速度,而模式分解过多又进一步加剧了多关系模式的连接操作,造成了整体效率的降低。提高查询效率和分解关系模式是逻辑设计优化中一对矛盾。对于一个具体应用来说,到底规范化进行到什么程度,需要综合多种因素,权衡利弊得失,最后构造出一个较为切合实际需求的逻辑模型。通常,以模式分解、优化达到3NF要求比较合适。 5)对关系模式进行进一步的分解和合并,减低数据的冗余和提高数据操作的效率。对于已形成的关系模式,在不影响查询速度、保持数据处理方式和用户具体要求相一致的前提下可进行必要的分解、优化。对于模式过小、关联关系较多所引起的整体效率减低,或所形成的关系模式与用户需求差别较大的情况,必须进行必要的合并。需要强调,规范化本身是一种理论,它是数据设计人员用于判断所设计的关系数据库模式优劣程度的工具,它的存在使数据库设计有了严格的理论基础,同是由于规范化可以较好地解决冗余与更新异常现象,因而已成为数据库设计所要考虑的重要环节之一。但在实际设计中,由于种种现实因素的影响,优化所产生的关系数据库模式往往作为设计人员和用户实现具体模型的一个参考。 将概念设计所得的ER图转换为关系模型如下所示. 1)患 者 {患者编号,患者姓名,性别,出生日期,单位} 2)医 生 {医生编号,医生姓名,性别,年龄,职称,所属科室} 3)科 室 {科室编号,科室名称} 4)医 技 {医技编号,医技名称,医技拼音码,医技计量单位,医技单价} 5)费用项{费用编号,费用名称,费用单位,费用价格 } 6)药 品 {药品编号,药品名称,批号,药品单价,所属类别,生产日期,保质期,药品拼音码,药品计量单位} 7)处 方 {处方号,药品编号,患者编号,医生编号,费用编号,收据号,数量,单价,执行状态} 8)处 置 {处置单号, 医技编号,患者编号,医生编号,费用编号,收据号,数量,单价,执行状态} 9)收 据 {收据号,患者编号,费用编号,金额,数量} 物理设计 数据库物理设计阶段的任务是根据具体计算机系统(DBMS和硬件等)的特点,为给定的数据 69 库模型确定合理的存储结构和存取方法。所谓的“合理”主要有两个含义:一个是要使设计出的物理数据库占用较少的存储空间,另一个对数据库的操作具有尽可能高的速度。数据库的物理设计通常分为两步: 1.确定数据库的物理结构,在关系数据库中主要指存取方法和存储结构; 2.对数据结构进行评价,评价的重点是时间和空间效率。 医院门诊收费管理系统在进行物理设计时,充分考虑到了物理设计的两个重要要素。在确定数据库的存取方法时,就应该确定建立哪些存储路径以实现快速存取数据库中的数据。现行的DBMS一般都提供了多种存取方法,如:索引法、聚簇法、HASH法。其中最常用的是索引法,索引法也是医院信息系统物理设计时考虑的重点。 模块设计 根据需求分析,本系统结构采用流行的C/S(客户机/服务器)结构模式,该模式的主要特点是:系统的管理人员以及使用者在客户端对服务器端的数据库进行各种操作,操作的结果又由服务器端的数据库发送给客户端显示出来;客户端和数据库服务器可以在同一台计算机上安装,也可以在处于联网状态的不同机器上安装,形式比较自由,安装比较方便;该模式同时具有开发时间短,成本较低,而且数据量的传输快等优点。在本系统中,服务器端使用比较流行SQL Server 2000数据库系统。 在医院门诊收费管理系统的基础信息管理子系统中,采用了模块化的设计原理,它不仅可以使系统结构清晰,而且容易设计、也容易阅读和理解。另外,因为程序错误通常局限在有关的模块及它们之间的接口中,所以模块化使系统容易测试和调试,因而有助于提高系统的可靠性。因为变动往往只涉及少数几个模块,所以模块化能够提高系统的可修改性。模块化也有助于软件开发工程的组织管理。 本系统按照系统的功能划分如下图4.8所示。 门诊收费系统 挂号医生工作站收费医技工作站药房系统管理 医药 技品挂退修退收退修退收修退 费费号号查改出费费查改出取退费查改出 登登密系登登密系用用查密系询询药药询 查查记记码统记记码统询码统 询询 患修退医修退系退图4.8 系统功能图 者查改出技查改出统出系统实施 信密系检密系维系询询 在系统设计完成之后,设计者对系统的结构、功能已经分析得较为清楚了,但这还只是停留息码统查码统护统在文档阶段。系统实施的根本目的,是为用户提供一个能够实际运行的系统,并保证该系统的稳定和高效。 后台数据库 70 Microsoft SQL Server 2000是一个为满足分布式客户机/服务器需要而设计的可伸缩的、高性能的数据库管理系统。它的许多功能和可靠性是通过与Windows 2000集成实现的。MS SQL Server 2000通过下述方式来满足要求:集成了Microsoft Windows 2000线程和调度服务器、PerformanceMonitor(性能监视器)和Event Viewer(事件查看器)。这样,用户对网络和Microsoft SQL Server只需做一次Windows 2000登录,简化了用户账号管理。应用内置的复制与基于Windows 2000 Server的计算机交换数据,向其它订阅者发布数据,并确保企业组织能可靠地向整个企业发布信息。使用综合的分布框架,集中管理整个企业的服务器。使用基于Windows的管理接口对多个服务器进行可视的拖放控制,这可对数据复制、服务器操纵、诊断和调整以及对专门数据库对象的建立和管理任务实施远程管理。此外,自动对象库使你能建立定制的服务器管理应用。任务调度为建立服务器任务(如执行命令和Transact-SQL语句)或复制任务以及调度它们在指定时间执行等提供了更容易的方法。发现任何Microsoft SQL Server事件时,发出警报。 超大型数据库采用并行结构,为许多开发和维护任务提拱了较好的支持,减少输入/输出(工/0),并提高了系统的性能和可扩充性。微软SQL Server 2000数据仓库集各大型数据库的优势于一体,以超强的管理理念,对各种不同的数据库,陈年老数据进行清洗、过滤、挖掘、抽取、分析,最终达到您的所需。 1、SQL 2000特性: 1)多点管理、警报、响应管理 2)调整分析器、图文并茂 3)综合的协调性、标准的兼容性 4)无损的数据迁移、转换 5)强大的可分散、移动数据库 6)数据集成,多库Internet管理 7)超强抵制侵袭,起源安全的保密性 2、SQL Server 2000能给医院信息化系统带来的好处: 1)再次利用现有系统中的数据,从而实现跨数据平台进行数据抽取 2)实现医院间、医院与卫生局之间的多点管理、存贮、控制 3)对操作数据进行多平台判定审核,证实操作行为 4)特定的排错功能,详细的事务过程分析,使系统有非常高的完整性 5)真正起到对数据进行清洗、过滤、加载、分析作用并能抽取到系统中心的数据仓库 3、创建数据库 既然选择用SQL Server 2000作为后台数据库,我们就可以在SQL Server 2000上创建数据库。 在进入企业管理器之后,将鼠标光标放在“数据库”后单击鼠标右键,然后从弹出菜单中选择“新建数据库,”出现如图5.1所示。 71 图5.1 SQL Server 新建数据库对话窗口 在“名称”一栏输入要建立数据库的名字,在门诊收费信息系统中数据库的名称为“ylgl”。在“数据文件”和“日志文件”两页可以修改数据库的存放位置,如果不修改,数据库将会被建立在默认位置上。在输入名称后,单击“确定”按钮,关闭此对话框,门诊收费信息系统的数据库就建立好了。以后,就可以在建立好的数据库上创建数据表等相关操作了。 4、创建数据表 根据逻辑设计中转换后的关系模型以及对关系模型进行的优化,可以在已经创建好的数据库上创建数据表。具体的数据表结构如表5.1、表5.2、表5.3、表5.4、表5.5、表5.6、表5.7、表5.8、5.9所示。 表5.1患者表(hz) 列名 数据类型 长度 允许空 主/外键 自动编号 含义 ID int 4 否 是 序号 hzbh char 4 否 是 患者编号 name varchar 50 是 患者姓名 sex char 2 是 性别 birthday datetime 8 是 出生日期 dw char 20 是 单位 表5.2 医生表(ys) 列名 数据类型 长度 允许空 主/外键 自动编号 含义 ID int 4 否 是 序号 ysbh char 4 否 是 医生编号 ysxm varchar 50 是 医生姓名 sex char 2 是 性别 birthday datetime 8 是 出生日期 ksbh varchar 20 是 外 科室编号 degree varchar 10 是 职称 72 表 5.3药品表(yp) 列名 数据类型 长度 允许空 主/外键 自动编号 含义 ID int 4 否 是 序号 ypbh char 4 否 是 药品编号 ypmc varchar 50 是 药品名称 scrq int 8 是 生产日期 bzq int 2 是 保质期 sslb varchar 20 是 所属类别 ph char 10 是 批号 ypdj money 5 是 药品单价 yppym char 40 是 药品拼音码 ypjldw int 4 是 药品计量单位 表 5.4 医技表(yj) 列名 数据类型 长度 允许空 主/外键 自动编号 含义 ID int 4 否 是 序号 yjbh char 4 否 是 医技编号 yjmc varchar 50 是 医技名称 yjdj money 5 是 医技单价 yjpym char 50 是 医技拼音码 yjjldw int 4 是 医技计量单位 73 表 5.5 处方表(cf) 列名 数据类型 长度 允许空 主/外键 自动编号 含义 ID int 4 否 是 序号 cfh char 50 否 是 处方号 ypbh char 4 否 是 药品编号 hzbh char 4 是 外 患者编号 ysbh char 4 是 外 医生编号 fybh char 4 是 外 费用编号 sjh char 50 是 收据号 dj money 5 是 单价 sl char 50 是 数量 表 5.6 收据表(sj) 列名 数据类型 长度 允许空 主/外键 自动编号 含义 ID int 4 否 是 序号 sjh char 50 否 是 收据号 hzbh char 4 否 是 患者编号 fybh char 4 否 是 费用编号 je money 5 是 金额 sl char 50 是 数量 表 5.7 处置表(cz) 列名 数据类型 长度 允许空 主/外键 自动编号 含义 ID int 4 否 是 序号 74 czdh char 50 否 是 处置单号 yjbh char 4 否 是 医技编号 hzbh char 4 是 外 患者编号 ysbh char 4 是 外 医生编号 fybh char 4 是 外 费用编号 sjh char 50 是 收据号 dj money 5 是 单价 sl char 50 是 数量 表 5.8费用项表(fyx) 列名 数据类型 长度 允许空 主/外键 自动编号 含义 ID int 4 否 是 序号 fybh char 4 否 是 费用编号 fymc varchar 50 是 费用名称 fyjg money 5 是 费用价格 fydw int 4 是 费用单位 表5.9 科室表(ks) 列名 数据类型 长度 允许空 主/外键 自动编号 含义 ksbh char 4 否 是 科室编号 ksmc varchar 20 是 科室名称 在完成数据库中各个表结构的创建之后,还要画出数据库中部分表之间的关系。如图5.2所示。 75 图5.2关系图 前台实施 医院门诊收费管理系统采用的前台开发工具是Delphi 7。Delphi 7是Windows系统下的可视化集成开发工具,提供了强大的可视化VCL功能,使程序员能够快速、高效地开发出Windows系统下的应用程序,特别是在数据库和网络方面,Delphi与其他开发工具相比更是胜出一筹。Delphi 7与其它前台开发工具相比具有以下的特点:可视化开发环境、丰富的VCL、面向对象特性、高效的编译器、强大的数据库开发功能、良好的分布式应用开发支持。 在前台应用程序的开发当中,首先应该确定选用哪种方式访问数据库。在确定了数据库的访问方式之后,就应该利用相应的组件进行数据库链接。只有完成数据库链接后,才可以进行窗体界面的设计和程序代码的编写。 在医院门诊收费管理系统的开发过程中,并没有采用BDE方式访问数据库,而是采用了ADO方式访问数据库。这是因为ADO组件是微软公司面向各种数据的高层接口,这种层次接口被称为OLE DB。OLE DB访问速度快,可访问数据类型丰富,包括关系型和非关系型数据库、电子邮件与文件系统,文本与图片以及客户事务对象等。ADO组件编写的程序,可脱离Borland的BDE,而原有的数据显示/编辑组件可直接使用ADO组件,这是ADO程序的一大优点。 ADO组件包括3个核心组件分别是用于数据库链接的ADOConnection和用于执行SQL命令的ADOCommand以及用于执行返回结果集合请求的ADODataSet组件。还有3个兼容组件ADOTable,ADOQuery和ADOStoreProc,可以用它们将BDE的应用程序移植到ADO中。另外1个RDSConnection组件,用于访问远程多级应用程序中的数据。下面对ADO组件的功能和作用分别做以介绍: 1.ADOConnection组件 ADOConnection组件的主要作用是建立与数据库的连接。此外,它还有一定的事务处理能力。使用ADO访问数据库,必须先与其连接。可以使用ADOConnection作为连接的工具,也可以直接使用ADO组件与数据源作为连接。两者的不同在于,使用ADOConnection来连接,可以使多个ADO组件共享这一连接,以便集中控制,进行事务处理;而直接使用ADO组件连接比较简捷、方便。 2.ADOCommand组件 ADOCommand组件定义了将对数据源执行的指定命令。ADOCommand组件主要用于SQL的数据定义或执行一个不带返回结果集的存储过程。如果SQL语句带有返回结果集,最好使用ADODataSet,ADOQuery和ADOStoreProc等组件。 3.ADODataSet组件 ADODataSet组件是最常用的ADO数据集组件,使用该组件可以从ADO数据库读取1个或多个数据表。可以直接读取数据表,也可以通过SQL语句访问数据表。在使用ADODataSet组件访问数据前需要建立它与数据库的的关联,建立这种关联可以通过设置ADODataSet组件的ConnectionString属性或者通过设置Connection属性。 4.ADOTable组件 ADOTable组件是一个数据集组件,封装了一个可访问的ADO的数据表。使用ADOTable组件可利用ADO访问单个数据表中的数据,它提供了直接访问数据表中每条记录和字段的方法。ADO数据表组件也可以用于数据表中经过限定范围或条件过滤的记录的子集。 5.ADOQuery组件 ADOQuery组件为ADO数据存储提供发布SQL的方法,使用ADOQuery组件访问应用SQL 76 语句的数据存储中的一个或多个数据表。TADOQuery对象可从使用SELECT语句的ADO数据存储中得到数据,它对ADO数据存储中的数据表和其他数据源对象执行诸如INSERT、DELETE、UPDATE、ALTER TABLE和CREATE TABLE一类的操作,也执行存储过程。 6.ADOStoreProc组件 当客户端应用程序必须在数据库中使用存储过程时即可使用该组件。并非所有数据库服务器都支持存储过程。ADOStoreProc重载了Parameters属性保持存储过程返回的结果。Parameters是TParameter对象的集合。每个TParameter对象为存储过程提供一个单独的参数。依据服务器执行情况,存储过程返回单一的一组值或和查询的结果集相似的结果集。 医院门诊收费管理系统在开发时,充分考虑了ADO组件的功能和作用,并针对系统本身的实际情况选用了ADOConnection组件与数据库的连接。并且选用了ADOQuery组件、ADOTable组件做为ADO数据集组件。在调用存储过程时,还用到了ADOStoreProc组件。并且把这些ADO组件都整理到一个DataModule中,在DataModule中编写数据库链接的核心代码。 unit datamodule; interface uses SysUtils, Classes, DB, ADODB; type TDataModule1 = class(TDataModule) ADOC: TADOConnection; ADOQryStu: TADOQuery; Student_DSource: TDataSource; ADOQryClass: TADOQuery; Class_DSource: TDataSource; ADOQryCourse: TADOQuery; ADOTabTeacher: TADOTable; Teacher_DSource: TDataSource; TCourse_DSource: TDataSource; Course_Score: TDataSource; AdoqryCourse_Score: TADOQuery; AdoqryCourse_Scoreid: TAutoIncField; AdoqryCourse_Scorename: TStringField; AdoqryCourse_Scorestudentno: TStringField; AdoqryCourse_Scorename_1: TStringField; AdoqryCourse_Scorescore: TIntegerField; AdoqryCourse_Scorename_2: TStringField; AdoqryStudent_Score: TADOQuery; Student_Score: TDataSource; Course_Set: TDataSource; Course_ADOTable: TADOTable; procedure ADOTabTeacherAfterScroll(DataSet: TDataSet); procedure AdoqryCourse_ScoreAfterScroll(DataSet: TDataSet); private { Private declarations } 77 public { Public declarations } end; var DataModule1: TDataModule1; implementation uses score; {$R *.dfm} Procedure TDataModule1.ADOTabTeacherAfterScroll(DataSet: TDataSet); begin ADOQryCourse.SQL.Clear ; ADOQryCourse.SQL.Add('select name from course where teacherno='''+ADOTabTeacher.fieldbyname('teacherno').AsString +''' '); ADOQryCourse.Open; end; procedure TDataModule1.AdoqryCourse_ScoreAfterScroll(DataSet: TDataSet); begin AdoqryStudent_Score.SQL.Clear; AdoqryStudent_Score.SQL.Add('select id ,studentno ,name ,sex ,specialty ,depart from student where studentno= '''+AdoqryCourse_Score.fieldbyname ('studentno').asstring+''' '); AdoqryStudent_Score.Open; teaching_score.Edit1.Text:=AdoqryCourse_Score.fieldbyname('score').AsString; end; end. 模块实现 1(登录界面 此界面的作用是用户登录。也就是说,验证用户代号、密码是否匹配,只有代号、密码匹配 的情况下用户才可以进入系统。 在系统登录时,系统会根据用户的身份判定该用户具有的操作权限。医院门诊管理信息系统 的登录身份分为五类:管理员、挂号员、收费员、医生、药房管理员、医技管理员。用户在 选择登录身份后,若是系统管理员输入管理员的代号;若是挂号员输入挂号员代号;若是收 费员输入收费员代号;若是医生则输入医生代号;若是药房管理员则输入药房管理员代号; 若是药房管理员则输入药房管理员代号;然后,再输入个人的密码。这样就会登录到相应系 统中了。 如果代码与密码不匹配,则无法登录到系统。只有当代码和密码完全正确时才可以进入系统。 若用户想修改个人密码可以在进入系统后在修改密码窗体中进行修改。下面以进入门诊挂号 界面为例,介绍一下基本界面及操作。如下图5.3所示。 78 图5.3登录界面 2(门诊挂号主界面 在系统登录后,就进入了门诊挂号主界面,该界面中包括七个功能模块分 是:挂号登记、挂号查询、挂号修改、门诊退号、以往挂号查询、修改密码、退出系统。进入系统后,可以对这七个功能模块分别进行操作。如下图5.4所示。 图5.4门诊挂号主界面 3(门诊挂号登记界面 点击挂号登记,出现下面的界面,在姓名栏中输入内容,在性别、类别、医生、就诊科别、挂号类别等栏目中选择相对应的项,然后点击确定按纽,将会出现病志号信息界面。如图5.5和5.6所示。 79 图5.5门诊挂号登记主界面 图5.6门诊挂号登记界面 4(门诊挂号查询界面 点击挂号查询,挂号的信息就会看到。如刚刚挂号输入姓名是白佳,如图5.4所示,则在挂号查询界面就可以看到白佳的挂号信息了,如下图5.7所示。 80 图5.7门诊挂号查询界面 5(门诊挂号修改界面 点击挂号修改,输入病志号那么此患者的挂号信息就可以全部看到。然后可以更改相应的信息。,如图5.8所示。想看到更改后的信息,点击挂号查询即可。如下图5.9所示。 图5.8门诊挂号修改界面 81 图5.9门诊挂号修改后界面 6(门诊退号修改界面 如果需要退号,则点击门诊退号,输入病志号,然后点击确定按纽即完成了退号。如下图 5.10所示。 图5.10门诊退号登记界面 7(门诊退号查询界面 点击门诊退号,就可以查询到退号信息。如图5.11所示。 82 图5.11门诊退号查询界面 8(退出系统 当需要退出系统时直接点击退出系统,即可退出。 下面介绍一下代码的实现: 1(登录部分代码 1)确定按纽 procedure TFlogin.Button1Click(Sender: TObject); begin // flogin.Free; // flogin:=nil; logo.Close; logo.Parameters.ParamValues['@dm']:=dm.text; logo.Parameters.ParamValues['@mm']:=mm.text; logo.Open; if logo.RecordCount>0 then begin flogin.Visible:=false; fmz_main:=tfmz_main.Create(nil); fmz_main.Show; end else Application.messagebox('代码或密码错误','注意',mb_iconerror); end; 2)退出按纽 procedure TFlogin.Button2Click(Sender: TObject); begin 83 close; end; 2(门诊挂号登记 1)确定按纽 procedure TFmz_gh.Button1Click(Sender: TObject); var sex,bzhm:string; begin if trim(xm.Text) ='' then begin Application.messagebox('请输入患者姓名','输入错误); //Application.MessageBox('确实要退出系统','退出系统',MB_ICONQUESTION or MB_YESNO)=IDNO xm.SetFocus; exit; end; with mz_brgh do begin Parameters.ParamValues['@dm']:=bzh.Text; Parameters.ParamValues['@xm']:=xm.Text; if radiobutton1.Checked =true then sex:='男' else sex:='女'; parameters.ParamValues['@xb']:=sex; Parameters.ParamValues['@dw']:=dw.Text; Parameters.ParamValues['@sfh']:=dmodule.zd_brlb.FieldByName('dm').Asstring; Parameters.ParamValues['@jzd']:='0'; Parameters.ParamValues['@ksh']:=dmodule.zd_ks.fieldbyname('dm').asstring; Parameters.ParamValues['@ysh']:=dmodule.zd_ys.fieldbyname('dm').AsString; Parameters.ParamValues['@ghlh']:=dmodule.zd_gh.fieldbyname('dm').AsString; Parameters.ParamValues['@ghm']:=login.Flogin.dm.text; Execute; end; if bool=false then begin bzhm:=mz_brgh.Parameters.ParamValues['@dm1']; bzh.Text:=bzhm; Application.messagebox(pchar('请记录病志号'+bzhm),'病志号',mb_iconasterisk); end; bzh.Enabled:=true; radiobutton1.Enabled:=true; radiobutton2.Enabled:=true; xm.Enabled :=true; 84 dw.Enabled:=true; lb.Enabled:=true; startform; bzh.SetFocus; bzh.Text:=''; bool:=false; exit; end; 2)退出按纽 procedure TFmz_gh.Button2Click(Sender: TObject); begin with dmodule do begin zd_brlb.Close ; zd_ks.close; zd_ys.close; zd_gh.close; end; fmz_gh:=nil ; close; end; 3(门诊挂号、退号查询部分 1)挂号查询按纽 procedure TFmz_cx.Button1Click(Sender: TObject); begin bt.Caption:='门诊挂号查询'; bt.Font.Color:=clnavy; je.Font.Color:=clnavy; acmz_cx.close; acmz_cx.Parameters.ParamValues['@gt']:=0; acmz_cx.open; pt.Text := acmz_cx.Parameters.ParamValues['@pt']; fg.Text := acmz_cx.Parameters.ParamValues['@fg']; zg.Text := acmz_cx.Parameters.ParamValues['@zg']; zj.Text := acmz_cx.Parameters.ParamValues['@zj']; jz.Text := acmz_cx.Parameters.ParamValues['@jz']; fb.Text := acmz_cx.Parameters.ParamValues['@fb']; ln.Text := acmz_cx.Parameters.ParamValues['@ln']; je.Text := formatfloat('0.00',acmz_cx.Parameters.ParamValues['@je']); end; 2)退号查询按纽 procedure TFmz_cx.Button2Click(Sender: TObject); begin bt.Caption:='门诊退号查询'; 85 bt.Font.Color:=clmaroon; je.Font.Color:=clred; acmz_cx.close; acmz_cx.Parameters.ParamValues['@gt']:=1; acmz_cx.open; pt.Text := acmz_cx.Parameters.ParamValues['@pt']; fg.Text := acmz_cx.Parameters.ParamValues['@fg']; zg.Text := acmz_cx.Parameters.ParamValues['@zg']; zj.Text := acmz_cx.Parameters.ParamValues['@zj']; jz.Text := acmz_cx.Parameters.ParamValues['@jz']; fb.Text := acmz_cx.Parameters.ParamValues['@fb']; ln.Text := acmz_cx.Parameters.ParamValues['@ln']; je.text:=formatfloat('0.00',acmz_cx.Parameters.ParamValues['@je']); end; 4(门诊退号 1)确定按纽 procedure TFmz_th.Button1Click(Sender: TObject); begin if bool=false then begin Application.messagebox('挂号不存在','注意',mb_iconerror); dw.Text:=''; xm.Text:=''; bzh.SetFocus; exit; end else with xg_mzth do begin Parameters.ParamValues['@ghh']:=dbgghh.Fields[3].AsString ; Parameters.ParamValues['@thm']:='0101'; Execute; end; startform; bzh.SetFocus; bzh.Text:=''; bool:=false; exit; end; 2)退出按纽 procedure TFmz_th.Button2Click(Sender: TObject); begin with dmodule do begin 86 zd_brlb.Close ; zd_ks.close; zd_ys.close; zd_gh.close; end; fmz_th:=nil ; close; end; 5(门诊药房划价 1)确定按纽 procedure TFmz_yfhj.qdClick(Sender: TObject); begin if (bool=false)or(bool1=false)or(bool2=false) then if bool=false then begin Application.messagebox('挂号错误不能存入','注意',mb_iconerror); xm.Text:=''; ks.Text:=''; bzh.Text:=''; bzh.SetFocus; end else if bool1=false then begin Application.messagebox('药品号错误不能存入','注意',mb_iconerror); srm.Text:=''; ypm.Text:=''; kc.Text:=''; sl.Text:=''; jg.Text:=''; je.Text:=''; srm.SetFocus; end else begin Application.messagebox('数量错误不能存入','注意',mb_iconerror); sl.Text:=''; je.Text:=''; end else begin with ins_fy do begin close; Parameters.ParamValues['@lb']:=1; Parameters.ParamValues['@xh1']:=''; Parameters.ParamValues['@dm']:=''; 87 Parameters.ParamValues['@ysh']:=''; Parameters.ParamValues['@srh']:=dbgyph.Fields[6].AsString ; Parameters.ParamValues['@srm']:=srm.Text; Parameters.ParamValues['@sl']:=strtofloat(sl.Text); Parameters.ParamValues['@lsj']:=strtofloat(jg.Text); Parameters.ParamValues['@lm']:=dbgyph.Fields[7].AsString ; Parameters.ParamValues['@yjm']:=''; Parameters.ParamValues['@hjm']:=''; Parameters.ParamValues['@ghh']:=''; Parameters.ParamValues['@yfh']:=''; open; jls.Text:=ins_fy.Parameters.ParamValues['@jls']; zje.Text:=ins_fy.Parameters.ParamValues['@zje']; end; srm.Text:=''; ypm.Text:=''; kc.Text:=''; sl.Text:=''; jg.Text:=''; je.Text:=''; bool1:=false; bool2:=false; srm.SetFocus; end; end; 2)删除按纽 procedure TFmz_yfhj.scClick(Sender: TObject); var xh2:string; begin if ins_fy.RecordCount>0 then begin xh2:=dbgcf.Fields[6].AsString; with ins_fy do begin close; Parameters.ParamValues['@lb']:=2; Parameters.ParamValues['@xh1']:=xh2; Parameters.ParamValues['@dm']:=''; Parameters.ParamValues['@ysh']:=''; Parameters.ParamValues['@srh']:=''; Parameters.ParamValues['@srm']:=''; Parameters.ParamValues['@sl']:=0; Parameters.ParamValues['@lsj']:=0; 88 Parameters.ParamValues['@lm']:=''; Parameters.ParamValues['@yjm']:=''; Parameters.ParamValues['@hjm']:=''; Parameters.ParamValues['@ghh']:=''; Parameters.ParamValues['@yfh']:=''; open; jls.Text:=ins_fy.Parameters.ParamValues['@jls']; zje.Text:=ins_fy.Parameters.ParamValues['@zje']; end; end; if bool=false then begin bzh.Text:=''; xm.Text:=''; ks.Text:=''; bzh.SetFocus; end else begin srm.Text:=''; ypm.Text:=''; kc.Text:=''; sl.Text:=''; jg.Text:=''; je.Text:=''; bool1:=false; bool2:=false; srm.SetFocus; // exit; end; end; 3)提交处方按纽 procedure TFmz_yfhj.tjClick(Sender: TObject); begin { if dbgcf. then begin Application.messagebox('数据错误不能存入','注意',mb_iconerror); bzh.SetFocus; exit; end else } if ins_fy.RecordCount>0 then with ins_fy do 89 begin close; Parameters.ParamValues['@lb']:=3; Parameters.ParamValues['@xh1']:=''; Parameters.ParamValues['@dm']:=bzh.text; Parameters.ParamValues['@ysh']:=ysh.text; Parameters.ParamValues['@srh']:=''; Parameters.ParamValues['@srm']:=''; Parameters.ParamValues['@sl']:=0; Parameters.ParamValues['@lsj']:=0; Parameters.ParamValues['@lm']:=''; Parameters.ParamValues['@yjm']:=''; Parameters.ParamValues['@hjm']:='2101'; Parameters.ParamValues['@ghh']:=dbgghh.Fields[3].AsString; Parameters.ParamValues['@yfh']:='1'; open; end; bzh.text:=''; xm.text:=''; ks.text:=''; srm.Text:=''; ypm.Text:=''; kc.Text:=''; sl.Text:=''; jg.Text:=''; je.Text:=''; zje.Text:=''; jls.Text:=''; bool:=false; bool1:=false; bool2:=false; bzh.SetFocus; exit; end; 4)取消处方按纽 procedure TFmz_yfhj.qxClick(Sender: TObject); begin with ins_fy do begin close; Parameters.ParamValues['@lb']:=4; Parameters.ParamValues['@xh1']:=''; Parameters.ParamValues['@dm']:=''; 90 Parameters.ParamValues['@ysh']:=''; Parameters.ParamValues['@srh']:=''; Parameters.ParamValues['@srm']:=''; Parameters.ParamValues['@sl']:=0; Parameters.ParamValues['@lsj']:=0; Parameters.ParamValues['@lm']:=''; Parameters.ParamValues['@yjm']:=''; Parameters.ParamValues['@hjm']:=''; Parameters.ParamValues['@ghh']:=''; Parameters.ParamValues['@yfh']:=''; open; end; // startform; bzh.text:=''; xm.text:=''; ks.text:=''; srm.Text:=''; ypm.Text:=''; kc.Text:=''; sl.Text:=''; jg.Text:=''; je.Text:=''; zje.Text:=''; jls.Text:=''; bool:=false; bool1:=false; bool2:=false; bzh.SetFocus; exit; end; 5)退出按纽 procedure TFmz_yfhj.tcClick(Sender: TObject); begin dmodule.zd_ys.close; cr_lsb.close; de_lsb.Execute; fmz_yfhj:=nil ; close; end; 系统测试 计算机软件开发完成后,在软件未投入使用前需要对系统进行系统测试,以便找出并改正系统可能存在的错误。现代软件工程学测试软件方法大体采用两种测试方法即白盒测试和黑盒测试。计算机软件的白盒测试是指对程序模块进行测试,即对系统中的可能出现的数据处理 91 路径进行测试,测试的具体方法有多种,如语句覆盖、判定覆盖、条件覆盖、判定,条件覆盖、条件组合覆盖、点覆盖、边覆盖、路径覆盖等,测试的方法不同,发现错误也会略有不同,但测试重点均是系统逻辑上的错误的测试。综合各个测试的方法由于住院子系统较为庞大,论文编写篇幅有限,下面列举出系统登陆时的测试过程,如图6.1所示。 开始 登录窗口 用户存在错误信息 查询密码 密码正确错误信息 图6.1系统登录窗口流程 打开主窗体 上图为系统登录窗口流程,由流程图进行测试数据的设计,则判定覆盖测试路线为: 返回1)用户名存在,密码错误(覆盖sabdfeh) 2)用户名不存在(覆盖sabch) 3)用户名存在,密码正确(覆盖sabdfgh) 即测试时选用三组数据便可以达到判定覆盖。可选用以上路径的三组数据进行测试。 黑盒测试技术着重测试软件工力、能,黑盒测试并不能取代白盒测试,它是与白盒测试方法互相弥补的测试方法,黑盒测试力图发现下述类型的错误: 1)功能不正确或遗漏了功能 2)界面错误 3)数据结构错误或外部访问错误 4)性能错误 5)初始化和终止错误 黑盒测试的方法有等价划分、边界值分析、错误推测,通过边界值,有效输入、无效输入等方法对系统进行测试,如住院管理中预交金录入中,由于现实中住院押金初始值不能为负值,测试时应选择负数、零、常见金额、超大金额四种数值进行测试。再如药品不能库存为负数,由于在本系统中财务管理具有十分重要的地位,在财务中,账目是不允许被更改涂抹的,在记录错误时采用冲账方式进行修改,因此,在财务方面,对数据库操作不应使UPDATA语句等。 本次测试采用黑盒测试的方法,测试系统的功能、结构。经过较为细致的软件测试阶段,软件的绝大部分错误被检测出来,并采用原因排除的方法进行软件的调试工作,程序经过调试,基本排除了已发现系统存在的错误。 92 结 论 经过三个月的毕业设计,医院门诊收费管理系统已经开发完毕。系统的功能基本上都得以实现。在这三个多月的过程中,我面对了许多挑战和考验。对于以前的学习也有了新的认识。深刻地体会到开发软件系统并不是一件很容易的事情。而且,我还深深地认识到理论结合实践的必要性。 在这次毕业设计当中,我遇到了许多问题,通过自己查看相关资料和虚心请教老师,最后都得以解决。虽然这些都是技术上存在的问题,但问题的解决给我带来了极大的信心。另外,通过这次毕业设计,我还巩固了以前学习过的知识,学习到更多的新知识。通过这样的方式学习到的知识,记忆得扎实、运用得灵活。在此过程中,我对于软件开发的流程有了更加深刻的认识,了解到了开发过程中各个阶段所要做的工作。而且基本掌握了面向对象程序设计的一些基本原理和方法。提高了我的编程水平和实际应用的能力。除此之外,我还了解了数据库方面的一些原理以及基本理念,并把这些原理和基本理念运用到了实践的开发当中来。 然而,由于时间和个人能力有限,系统在开发的过程中还有一些不尽如人意的地方。系统所运用的某些方法,并不是最优的方法。用户界面也不够美观。但是,关键性的问题在系统设计时都予以充分的考虑并采取了有效的措施。如:数据冗余、数据一致性问题。 总而言之,通过这次毕业设计,不仅提高了我利用所学知识解决实际工程问题的能力,而且还培养了我勇于面对困难、善于思考、严谨治学的学习态度。另外,还使我具有了开发简单工程项目的能力,为毕业后走上工作岗位打下良好基础。 参考文献 [1] 萨师煊等.数据库系统概论(第三版).北京:高等教育出版社,2000 [2] 施伯乐等.数据库系统教程(第二版).北京:高等教育出版社,1999 [3] 张海藩.软件工程导论(第三版).北京:清华大学出版社,1998 [4] 郑阿奇等.Delphi实用教程.北京:电子工业出版社,2004 [5] 张莉等.SQL Server 数据库原理及应用教程.北京:清华大学出版社,2004 [6] 刘刚等.Delphi编程实例教程.北京:兵器工业出版社,2004 [7] 周松辰.举一反三Delphi 7程序设计实战训练.北京:人民邮电出版社,2004 [8] 沈坚等.Delphi 7 新概念百例.北京:中国水利水电出版社,2003 [9] 温尚清等.Delphi案例开发.北京:中国水利水电出版社,2005 [10] 张龙卿等.Delphi 6精彩编程百例.北京:中国水利水电出版社,2005 [11] 刘瑞新等.Delphi程序设计教程.北京:机械工业出版社,2003 [12] 杨志国等.Delphi应用程序开发精彩实例.北京:机械工业出版社,2003 [13] 张治等.Delphi 数据库应用程序开发技术.北京:清华大学出版社,1998 [14] 召区维忠,杨美清.面向对象的系统设计.北京:清华大学出版社,2003 [15] 杨正洪,郑齐健,孙延辉.SQL Server 2000关系数据库系统管理和开发指南.北京:机械工业出版社,2001 [16] Raghu Ramakrishnan and johannes Gehrke著.周立柱等译.数据库管理系统,北京:清华大 93 学出版社,2002 [17] Joseph S. Valacich ,]oey F. George, Jefferey A. Hoffer著.施平安译.系统分析与设计基础.北 京:清华大学出版社,2005 [18] Alvin T. S. Chan, Jiannong Cao, Henry Chan, Gilbert Young. A Web-Enabled Framework for Smart Card Application in Health Services. Communications of the ACM, vol. 44. No. 9:77-82, 2001 [19] G. Blus. Public Windows Interface Supporters Aim to Standardize Leading Desktop API. Computer, 1994, 27(5): 92-93 [20] A. Wood. Predicting Client/Server Availability. Computer, 1995, 28(4): 41-48 致 谢 在论文完成之际,我要感谢我的导师翟宝峰教授。从理论学习、选题、软件工程实践到论文 的撰写,都得到了翟老师的精心指导。翟老师严谨的治学态度,一丝不苟的工作作风,对我 学业上的严格要求,都使我终身难忘。特别是在论文撰写的紧张过程中,是翟老师的严格要 求和悉心指导,才使得我的论文顺利完成。 感谢软件学院的领导和老师们。作为软件学院毕业的学生,我的学习、工程实践和论文工作 得到了院领导和老师的关心和支持,正是他们的帮助,我的学业才能顺利地完成。还要感谢 同学们在实践和论文阶段对我提出的建议。 感谢我的家人,他们对我无私的关爱和莫大的支持是我克服困难的最大动力,正是他们的默 默奉献才成就了我的这次学业。 最后,感谢在百忙之中审看本论文的老师们和参加答辩会的老师和同学们。 附 录 94 The present condition and the development of the hospital information system 1. The definition of the hospital information system (HIS) The hospital information system is the knowledge to study the information science and the application of the calculator in hospital. Internationally, the hospital information system has already been generally accepted as an important branch of the Medical Information. The famous American professor Morris.Collen has given out the definition of the hospital information system in 1988: using the computer and the communication equipments, to provide the Patient Care Information, for each section of the hospital. the Collection、Storage、Process、Retrieve and Communicated ability of the Administration Information,and satisfy the need of the function of the Authorized users。In 2002, the leadership group of healthy information-based of our country has defined it in《 the criterion of basic function of hospital information system 》 : The hospital information system means to generally manage the flow of the personnel, logistics, flow of wealth of the hospital and its other department, using the modern method such as software and hardware technique of the computer and the network communication technique...etc. to create information of the collection, saves, process, withdraws, delivery, gather, collection in each stage of the medical treatment activity, in order to offer a comprehensive, roboticezed management and other services of the information system for the hospital's running. 2. Present condition of the domestic and international hospital information systems theoretically speaking, the development of hospital information-based's need to experience 3 stages: The hospital management the information-based stage(HIS),clinic manage the information-based stage(CIS) the area medical treatment health service stage (GMIS). The medical information-based of the abroad is major be placed at the second stage, and started its development of the third stage development. The study of our country's medical treatment information-based is at the first stage, we seldom apply indeed the information technique in diagnosis of the medical treatment and the hygiene of the community service. The reason result in the difference of the hospital information system between domestic and international hospital are mainly the following points: Abroad, the application of computer technique in hospital has already had a history of 4O years or more. In the beggining of the 2Oth century and 6Oth century, the United States has started a HIS research. The COSTAR which is develped by the most famous chief hospital of Massachusetts from the 2Oth century to the 6Oth century. Till now, it has become the large-scale clinical patient's information system. Till the 70's of the 20th century, as the swift development of the computer technology, HIS has enterd a great developing age. Most large hospital of American, J apan, and all countries in Europe, especially the university hospital and medical center has stared developing HIS in succession, established for the foundation of the formation and development of the medicine information. From 70's to 8O's of the 20th century, the HIS industry of the Unitetd States have already formed an considerable scale. The HIS development and application in Japan also started from the beginning of the 7O's of the century. Although most of the Japanese hospital started to apply the HIS system just from 8O's of the 20th century, the development is fiercely fast, and the scale is quite large. Their HIS system takes large 95 machine as central hospital calculator system. At present, 13 origins trends with total HIS are systematize, the network turn to raise with comprehensive also, to develop from top to bottom. Usually it use large machine as center to prop up the whole system work, and adopt the tiny machine and network technique as far as possible. The investment is large-scale, which is carrying out "ordering" work method, namely data from occurrence the source inputs a calculator directly. Compared to the United States The HIS development of the European nation is a little later, which stared from middle 70's and late 80's in the 20th century. The characteristics of the European HIS is to carry out some district information systems. Along with the development of the entry-level health care work, the local area hospital computer networks in all countries of Europe will soon be carried out. Currently, the SHINE engineering (the Strategic Health Informat-ics Network for Europe) of Europe has already started. Many companies of English, French, Italy, German, have joined in project, which have dealed a lot of work about distributed database and opened engineering. Although in our country, the computer has entered the medical treatment profession in the end of 70's in 20 century, which was mainly applied in the research and teaching, does not really apply in the management of HIS. The HIS of Chinas didn't be regarded as real starts until 1997. The health information-based programming which was established by the health department put forward that ,to 2000, half of our country's hospital has to be had 3A hospitals to set up the hospital information system(HIS). 3. The difference between the domestic and international hospital information system 3.1 The scale of the investment differs obviously Being subjected to the influence of many factors in our county, the hospital information-based construction doesn't goes equally ,with its slow speed. Among these, the funds problem is a main factor. The investment on information technique of the hospital in our country is low, this dese not mean that only point devotion to share the comparison of the profits total is low, absolute value also and the abroad contain differs a lot. The investment of a typical American city hospital is about USD 2,000,000 on the information technique annually, but in China it won't be more than USD 200,000. a year of a x-rated hospital. Especially, irrationality of the investment would results in serious after fact. The huge investment of Foreign hospital, is mainly on the man power expenses, the general system construct of the expenses allotment comparison is For example: Software: Hardware: Personnel training and consultation expenses of than is 1:1:1.But in our country hospital HIS construction expenses mainly spend in the investment of hardware, account for 80-90% of total expenses about above. Moreover, local hospital HIS's building price is the about foreign hospital construction HIS budget of 1/10. The generally devotion of local hospital constructs is 0.5% of the general budget in the HIS. The low devotion (low price) of the software result in very serious aftereffect, which is quality and the maintenance problem of the software. Just this has restricted the hospital information-based development. 3.2 The obvious different proportion of the technical personnel The hospital information system is the most complicated information system. The request of the hospital information system to time is very strict, when it apears, the problem has to be resolved within several minutes. So the requests for the personnel and the qualities of hospital information system is rather strict. Abroad, there will be atechnical personnel to carry on the system maintenance every 20 work 96 stations. But in our country among the installed 800 hospital stations, technical personnel hospital is 16 people. This could not satisfy the request of the system support everyday. Aim at this, the solution of some hospitals is to send out the support system to other companies, everyday. According to the inquisition detection of circumstance to these hospitals, such a method won't go well. Although this kind of method can solve daily pursuit at present, put forward a higher request to the IT personnel of the hospital. Its mainly work is changed to a total programming, designing the process, management and the research of the clinical application model, the software engineering quality...etc., and witch can not be done well by the general IT personnel, and it is not feasible in China ,for its lacks of the compound type of IT personnel. Actually, the IT personnel of the hospital inner part should can carry on the maintenance, training of the hospital information system basic work. 3.3 The difference of the Standardize system HIPAA (Health Insurance Portability and Account—ability Act,HIPAA) It BE ―the bill of health insurance taking and the responsibility " which was drawn up by the American government .That bill has identified detailed regulates aims at a medical treatment information-based medium of the bargain rule, the medical treatment service organization identify, the employee identify, the medical treatment information safety, the medical treatment privacy, healthy plan identify, a the wound disease report etc, to protect the safety of the medical treatment data and the right of privacy of the sufferer. The HIPAA as a compulsory ordinance of government, request the medical treatment organization have to deadline performance. therefor, each medical treatment organization, the system development factory are modifing the existent systematic to satisfy the request to HIPAA now. But so far, our country didn't have a comparison integrity of the medical treatment standardize system. The HIPAA represented the standard of the medical treatment insurance information, the normal direction of development, deserve the research and draw lessons of the local medical treatment information field. 3.4 The target differs The hospital information-based of the United States has already considered the exaltation medical treatment service support as one of the most important missions "Reduce the medical treatment mistake, raise the safety of the sufferer cure" is its important target. But the information-based in our country currently is return with strengthen the hospital finance management as an initial target. It is obvious that these two differs a lot. abroad of the hospital information system is direct to is service for clinic of information system, this with our country the health department "the hygiene is information-based ten Five programming "the target ofmedium "from the management information system to clinical information system transition" is close by. But the our country still stays at the first stage so far. 3.5 The establishment of the electronics medical history, the domestic and international differs In the United States, to Build up a calculator to turn patient's record(CPR) system to become the most point of hospital construction . But in the our country, the electronics medical history system of some hospitals and company development, great majority is according to free text originally of the medical treatment electronics text file management system, can't support to obtain with show the clinical data and picture information that the patient enrich. Still there is a lot of problem to resolve in safety, the authorization management and the protection privacy etc. of the data moreover, can't also call it is the electronics medical history of the real meaning. Abroad, the HIS set up adopt to take problem 97 as the medical history of the center to describe a format much, namely SOAP form. Is divided into subjective part(Subjective),objective part(Objective),the valuation part(Assess) with the plan part(Plan) on the course of illness affairs description, what to adopt is the data structure to turn to record with natural language into the way. This is the research of aftertime, the search and covariance beat to descend foundation. In the electronics medical history, in addition to surveying the examination report, image data, can also record sound, carry on a picture to scan etc., enrich the content of the electronics medical history consumedly so. In the meantime, they led to go into first step in the electronics medical history of expert the intelligence system, can provide to celebrate the decision support towards facing .At the keyword and the medical treatment data aspect, it standardizes degree very high, what to use is the international system medical science technical term(SNOMED). Look back a local circumstance, is exactly because of the structure problem of our electronics medical history data, can't make these functions get in the domestic nicely applied. 3.6 Lack the advanced management thought Currently, the local software manages in the stock up, make to order according to the hospital proper business process development basically, body now of is the management thought of the ratings database, what to emphasize is a note management, can satisfy an existing need of hospital. But the foreign software is in the stock manage up the body now of is a modern logistics tube. Thought principle of manage, pay attention to the process management, support the network type database's distribute, can produce order automatically according to the actual need, can go together with logistics to send to system to carry on a close conjunction. For domestic the decision layer of some large hospitals and the foreign capital hospital to say, should say they can comprehend and accept these management thoughts, just still having no advanced management of body to thought now so far of the software provide them the choice. 4. The development of the Chinese hospital information system Under this large market environment in China, concerning to the hospital information system still, there is a lot of problem to study with investigate. 4.1 To perfect HIS function Currently, the function of each kind of hospital information system in our country is not perfect, which can't satisfy various need of the hospital completely. Moreover, the hospital governor still embraces a kind of attitude to doubt this. Only by further perfect kit function for this, the management means of the perfect system, then it can make the system more invulnerable in managing function, make system really become the all levels leaderships to all trust, the intelligence turn system, and for have no paper to deliver with have no the paper conservancy to lay foundation. For example, the perfect of the system‘s safety, forbidding usage browser etc. 4.2 Open the exhibition data scoop out the data strongly The data is the most important resources in the information system. Over a long period of time of our country‘s staying around the handicraft operation, so there is a great deal of data demand to be tidies up, and gets up to the information system backlog of a great deal of information haven't yet been scoop out. Therefore, we need to aggressively complement data material, perfect the database. at one time, as for the stating of the data shouldn't stay around the traditional medical treatment data quality, but make use of the information system well in already the backlog get up of data resources, provide a more feasible result which is for management, and reference value .Work hard on the data excavation work, moreover, lay solid 98 foundation for the development of information. 4.3 Develop clinical information system Clinical information system is an system of assistance of the medical treatment service and medical personnel. Therefore it should adopt activelty the system which take the electronics medical history as central system .Other assistant systems should also develop synchronously. Such as, cure processing system, patient's bedside system, doctor's work station system, laboratory system, the medicine consultation system etc. So it can be more benefit in serve for the medical treatment business. 4.4 Make the modernized Management and to be the new target The hospital management should meet with HIS, attaining the information-based of the whole hospital. The hospital information-based is to manage a principle with the information technique and modern ideas. The hospital core business and the management process to carry on comb, excellent turn with confirm of process. Only adopt the management way of thinking and method of the modernization, then can guarantee the normal movement of the hospital information system. Therefore it should be done that to attain the hospital management for this scientific, systematize with information-based. 4.5 Build up related standard As the hospital information system develops quickly to nowadays, if can not based interrelated standard in time, you will result in the single of the system, and can't carry out a network enough with each other, this will conflict the development of information system of the bureau area of the third stage .therefore it need to draw up actively to be various for this normative connect, define to the medical science technical term of the hospital. The patient's electronics file need to be standardize. it can reference to the abroad in the aspects of standardize. And the medical treatment health section has to be delivered of own inner part standard, carrying out the share of the medical treatment information. what is need to be emphasize is, each standard has to be followed the health department to distribute strictly of 《the hospital information system(HIS) basic function norm 》the request describe. 4.6 To change the relationship. The hospital and software developer should change their past relationship to each other, which is pure businesses relation, to establish a cooperative relation to each other, to study and develope HIS together, make sure that the maintenance and guarantee of HIS get a sufficently support. decelerate the antinomy of the need to IT person. finally speaking, when we are carrying on the establishment of the hospital information system, we must select the feasible choice of database workstation, adopt the more reasonable technique and tools in developing and application, absorb the experience and precept of the developing both the domestic and international HIS, then make it to be the information-based for hospital service really, and serve for the medical treatment health business. 99 医院信息系统的现状与发展 1. 医院信息系统(Hospital Information System 。HIS)的定义 医院信息系统就是研究信息科学和计算机在医院中应用的学科。在国际上,医院信息系统已被公认为医学信息学(Medical Informatics)的一个重要分支。美国著名教授Morris.Collen于1988年曾为医院信息系统下了如下定义:利用电子计算机和通讯设备,为医院所属各部门提供病人诊疗信息,(Patient Care Information)~行政管理信息(Administration Information)的收集(Collect)、存储(Store)、处理Process)、提取(Retrieve)和数据交换(Communicate)的能力,并满足所有授权用户(Authorized)的功能需求。2002年我国卫生部信息化工作领导小组在《医院信息系统基本功能规范》中对其进行了定义:医院信息系统是指利用计算机软硬件技术、网络通讯技术等现代化手段,对医院及其所属各部门对人流、物流、财流进行综合管理,对在医疗活动各阶段中产生的数据进行采集、存贮、处理、提取、传输、汇总、加工生成各种信息,从而为医院的整体运行提供全面的、自动化的管理及各种服务的信息系统。 2. 国内外医院信息系统的现状 从理论上说,医院信息化的发展要经历了3个阶段:医院管理信息化(HIS)阶段、临床管理信息化阶段(CIS)阶段和局域医疗卫生服务阶段(GMIS)阶段。国外的医疗信息化大多数处于第二个阶段,并开始了第三阶段的研制开发。我国的医疗信息化研发大都徘徊在第一个阶段,很少真正把信息技术用于医疗的诊断和社区的卫生服务。造成国内外医院信息系统差距的原因主要有以下几点: 在国外,电子计算机技术在医院中的应用已有4O多年的历史。2O世纪6O年代初,美国便 100 开始了HIS的研究。著名的麻省总医院开发的COSTAR系统是从2O世纪6O年代初开始研究的。发展到今天,已成为大规模的临床病人信息系统。到了2O世纪7O年代,随着计算机技术的迅速发展,HIS也进入大发展时期。美、日、欧各国的很多大医院,特别是大学医院及医学中心纷纷开发HIS,为医药信息学的形成和发展奠定了基础。20世纪70,8O年代,美国的HIS产业就已经形成了相当的规模。 日本的HIS开发和应用也是从世纪7O年代初开始的。虽然大多数日本医院是20世纪8O年代以后才开始应用HIS系统,但发展十分迅猛,规模相当大。他们的HIS系统是以大型机为中心的医院计算机系统。当前,13本的HIS总的趋势是系统化、网络化和综合性并举,走自上而下的开发路线。通常使用大型机作为中心支撑整个系统工作,并尽量采用微机和网络技术。投资规模大,正在实现“ordering‖工作方式,即数据从发生源直接输入计算机。 欧洲国家的HIS发展比美国稍晚,大多数开始于2O世纪7O年代中期和8O年代初期。欧洲HIS的特点是实现了一些区域信息系统。随着初级卫生保健工作的发展,欧洲各国区域性医院计算机网络即将实现。目前,欧共体的SHINE工程(Strategic Health Informat—ics Network for Europe)已经启动。英法意德许多公司都参了此项工程,在分布式数据库系统和开放网工程方面已做了大量工作。 我国的计算机虽然在20世纪70年代末期就进入了医疗行业,但主要应用于科研和教学,没有真正应用于HIS的管理。直到1997年,中国的HIS才算是真正的起步。卫生部制定的卫生系统信息化规划提出,到2000年,全国要有一半以上的三甲医院建成医院信息系统(HIS)。 3. 国内外医院信息系统的差距 3.1 投资规模差距明显 我国医院信息化建设由于受到各方面因素的影响,发展不匀衡,速度缓慢。这其中资金问题是主要制约因素。我国医院在信息技术上投入较低,这不仅指投入占利润总值的比例低,绝对值也与国外有很大的差距。一家典型的美国城市医院每年在信息技术上的投资约为200万美元,而中国一家三级医院的年投入不超过20万美元。特别是投资比例的不合理造成严重的后果。国外医院的巨大投资主要花费在人力费用上,一般系统建设的费用分配比例是:软件:硬件:人员培训和咨询费用之比为1:1:1。而我国医院HIS建设费用主要花在硬件投资上,大约占总费用的80,90,以上。另外,国内医院HIS造价大约是国外医院建设HIS预算的1,10。一般国内医院目前在HIS建设上每年的投入占医院总预算的0(5,。在软件方面的低投入(低价格)造成十分严重的后果就是软件质量和维护问题,这便制约了医院信息化的发展。 3.2 技术人员比例差距明显 医院信息系统是最复杂的信息系统。医院信息系统对实时性的要求非常强,出现的问题必须在几分钟内解决。所以医院信息系统对人员的需求和质量上的要求都是非常高的。在国外,每20个工作站点就有一名技术人员进行系统维护。而我国在配置800个站点的医院中,计算机技术人员最多的一家医院是16人。这远远不能满足系统日常维护的要求。针对这种情况,一些医院的解决办法是将系统日常维护外包给其他公司。根据对这些医院运行情况的调查发现,这样的解决方法是不可取的。虽然这种方法可以解决眼前的日常工作,但对医院的IT人员提出了更高的要求。其主要工作变成了总体规划、流程设计、管理和临床应用模型的研究、软件工程质量等,而这不是一般IT人员所能够胜任的,且在复合型IT人才特别缺少的中国也是不可行的。实际上,医院内部的IT人员就应该能够担负起医院信息系统的维护、培训等基本工作。 3.3 标准化、规范化体系差距 HIPAA (Health Insurance Portability and Account—ability Act,HIPAA)是美国政府制定的“健康保险携带和责任法案”。该法案针对医疗信息化中的交易规则、医疗服务机构的识别、从 101 业人员的识别、医疗信息安全、医疗隐私、健康计划识别、第一伤病报告和病人识别等问题做了详细规定,以保护医疗数据的安全和患者的隐私权。HIPAA作为政府强制性法令,要求医疗机构必须限期执行。为此,各医疗机构、系统开发厂家都紧锣密鼓地修改现有系统,以满足HIPAA的要求。而我国目前还没有一个比较完整的医疗标准化体系。HIPAA代表了医疗保险信息标准化、规范化的发展方向,值得国内医疗信息界研究和借鉴。 3.4 实现目标不同 美国的医院信息化已经将提高医疗服务支持作为自己最重要的任务之一。“减少医疗错误,提高患者就医的安全性”是其重要的目标。而我国的医院信息化目前还以加强医院财务管理作为首要目标。这两者之间的差距显而易见。国外的医院信息系统是直接为临床服务的信息系统,这与我国卫生部“卫生信息化十?五规划”中的“从管理信息系统向临床信息系统过渡”的目标相近。但我国目前还停留在第一阶段。 3.5 电子病历的建立,国内外的内涵不一 在美国,建立计算机化病人记录(CPR)系统成为医院建设中的第一重点。而在我国,一些医院和公司开发的电子病历系统,绝大多数是基于自由文本的医疗电子文档管理系统,不能支持获取和显示病人丰富的临床数据和图像信息。另外,在数据的安全性、授权管理和保护隐私等方面还有很多问题需要解决,还不能称之为真正意义上的电子病历。在国外,HIS构建上多采用以问题为中心的病历描述格式,即SOAP形式。在病程事件描述上分为主观部分(Subjective)、客观部分(Objective)、评估部分(Assess)和计划部分(Plan),采取的是数据结构化和自然语言的录入方式。这为今后的科研、查询和统计打下了基础。在电子病历中,除了调阅检验报告、影像资料外,还可以录音,进行图像扫描等,这样就大大地丰富了电子病历的内涵。同时,他们在电子病历中引入了初步的专家智能系统,能够提供对临J庆决策支持。在关键词和医疗数据方面,其标准化程度很高,使用的是国际系统医学术语(SNOMED)。反观国内的情况,正是因为我们的电子病历数据的结构问题,使这些功能在国内不能得到很好地应用。 3.6 缺乏先进管理思想 目前,国内的软件在库存管理上,基本上是按照医院固有业务流程开发定制的,体现的是分级库位的管理思想,强调的是票据管理,能够满足医院现有的需求。而国外软件在库存管理上体现的是现代物流管。理的思想理念,注重流程管理,支持网络式库位分布,根据实际需求可自动产生订单,能够与物流配送体系进行紧密的连接。对于国内一些大型医院和外资医院的决策层来说,应该说他们能够理解和接受这些管理思想,只是目前还没有体现先进管理思想的软件供他们选择。 4.中国医院信息系统的发展 在中国这个大市场环境下,关于医院信息系统还有很多问题需要研究和探索。 4.1 完善HIS的功能 目前,我国各类医院信息系统的功能还不是很完善,还不能完全满足医院的各种需求。另外,医院管理者对此还抱着一种怀疑的态度。为此,只有通过进一步的完善配套功能,完善系统的管理手段,才能使系统在管理功能上更加无懈可击,使系统真正成为各级领导都放心的、智能化系统,并为无纸传递和无纸保存奠定基础。比如,系统安全的完善,禁止使用浏览器等。 4.2 大力开展数据挖掘 数据是信息系统中最重要的资源。我国由于长期停留在手工操作上,所以大量的数据资料需要整理,而且对信息系统积累起来的大量信息尚未被挖掘出来。为此,我们要积极补充数据材料,完善数据库。同时,对数据的统计不要只停留在传统的医疗数据质量,而是要充分利用信息系统中已经积累起来的数据资源,做出更多可供管理、决策的极有参考价值的结果。 102 另外,做好数据挖掘工作,为信息的发展打下坚实的基础。 4.3 开发临床信息系统 临床信息系统是一个为医疗服务的系统和辅助医护人员工作的系统。为此,应积极地采用以电子病历为中心的系统。其他辅助系统亦应同步发展起来。诸如,医嘱处理系统、病人床边系统、医生工作站系统、实验室系统、药物咨询系统等。这样才能更利于为医疗事业服务。 4.4 把现代化管理作为新目标 医院管理应与HIS接轨,做到整个医院的信息化。医院信息化是用信息技术和现代管理理念对医院核心业务和管理流程进行梳理、优化和确认的过程。只有采用现代化的管理思路和方法,才能保障医院信息系统的正常运行。为此,应努力做到医院管理科学化、系统化和信息化。 4.5 建立相关标准 在医院信息系统迅速发展的今天,如果不及时地建立相关的标准,就会造成系统的单一,不能够实现网络的互联化,这与信息系统第三阶段的局域化发展是矛盾的。为此,要积极制定各种规范性的接口,对医院的医学术语进行统一的定义。病人的电子档案要统一标准化。可以参考学习国外在标准化方面的做法。医疗卫生部门要有自己内部的传输标准,最大地实现医疗信息的共享。必须强调的是,各个标准必须严格遵循卫生部颁发的《医院信息系统(HIS)基本功能规范》所描述的要求。 4.6 改变关系 医院和软件开发商要改变过去双方仅仅是单纯买卖的关系,建立起相互配合的合作关系,共同开发和研制HIS,使HIS得到有效地维护和保障,减缓国内医药IT人才急需的矛盾。总之,我们在进行医院信息系统建设的时候,必须正确选择数据库平台,采用更加合理的开发应用技术和工具,认真吸取国内外发展HIS的经验和教训,使之真正地能够为医院信息化服务,为医疗卫生事业服务。 医院门诊收费系统的设计与实现 103 目 录 第1章 课程设计目的与要求 104 1.1程序设计目的 104 1.2课程设计环境 104 1.3主要参考资料 105 1.4课程设计内容及要求 105 第2章 课程设计内容 105 2.1数据库设计 105 2.1.1 需求分析 105 2.1.2 概念设计 105 2.1.3 逻辑设计 107 2.1.4 物理设计 109 2.2 程序设计 111 2.2.1 概要设计 111 2.2.2 程序实现 112 第3章 课程设计总结 116 参考文献 117 第1章 课程设计目的与要求 1.1程序设计目的 数据库管理系统是数据库技术实现的核心软件,是实现数据库系统开发的关键。数据库专业 学生必须熟练掌握该软件的管理及应用,主要目的是: 了解当前典型的数据库管理系统的特点。 掌握数据库管理系统的基本应用方法。 掌握在数据库管理系统的管理数据库的日常管理。 1.2课程设计环境 软件学院机房 Windows2000server系统 104 SQL sever 企业版 1.3主要参考资料 数据库应用开发技术 SQL Sever 2000完全实战 数据库系统概论 Power Builder 9.0完全实战 1.4课程设计内容及要求 一、内容 要求根据数据库原理,按照数据库系统设计的步骤和规范,完成各阶段的设计内容。 需求分析具体实际,数据流图、数据字典、关系模型要正确规范。 在SQL Sever 2000上实现设计的数据库模块。 对应用程序进行概要设计。 用Power Builder 实现简单的调用。 二、要求 课程设计过程中,要严格遵守课程设计的时间安排,听从指导教师的指导。正确地完成上述内容,规范完整地撰写出课程设计报告。 第2章 课程设计内容 2.1数据库设计 2.1.1 需求分析 需求分析就是描述系统的需求,通过定义系统中的关键类来建立模型。分析的根本目的是开发者和提出需求的人之间建立一种理解和沟通的机制,因此,医院门诊收费系统的需求分析也应该是开发人员和用户一起完成的。需求分析的第一步是描述门诊收费系统的功能,既定义用例,以此确定系统的功能需求。 需求分析是通过详细调查现实世界要处理的对象,充分了解原系统(手工系统或计算机系统)工作概况,明确用户的各种需求,然后在此基础上确定系统的功能。系统必须充分考虑今后可能的扩充和改变,不能仅仅按当前应用需求来设计数据库。 2.1.2 概念设计 用户信息E-R图: 用户 用户权限 用户号 密码 药品库存E-R 图: 药品存库 库存号 备注 仓库名 药品号 库存量 105 药品入库E-R图: 入库量 入库号 入库日期 药品号 药品入库 药品有效期 批发单价 进货单价 药品进货商 药品进货商E-R图: 商品进货商 进货商号 email 进货商名 进货商地址 电话号 患者信息E-R 图: 患者信息 挂号编号 患者号 联系电话 患者名 地址 药品资料E-R图: 106 规格 整量单位 药品名 散量单位 入库单位 费用归类 出库单位 有效期 药品资料 批发价 整散比 编号 上限 分类 下限 划价收费E-R图: 收费员 收费日期 所收金额 划价号 划价员 划价收费 药品号 划价日期 患者编号 药品价格 划价金额 药品书量 门诊挂号E-R图: 挂号时间 编号 挂号类型 患者姓名 挂号费 门诊挂号 性别 医生 年龄 挂号科室 2.1.3逻辑设计 107 在这个数据库管理系统中要建立的数据表分别如下: 表2.1门诊挂号表 门诊挂号表 clinicReg 主键:clinicRegID 列名(中文) 列名(英文) 数据类型 宽度 是否为空 clinicRegID varchar 15 No 编号 patientID varchar 15 Yes 病人编号 Name varchar 30 Yes 姓名 Sex varchar 2 Yes 性别 clinicDep varchar 30 Yes 挂号科室 feeType varchar 30 Yes 费用类型 clinicType varchar 30 Yes 挂号类型 clinicFee decimal (12,2) Yes 挂号费用 Dr varchar 30 Yes 医生 DataTime datatime 8 Yes 时间 PriceYN varchar 2 Yes 是否已划价 表2.2医生表 医生表 ys 主键:ysid 列名(中文) 列名(英文) 数据类型 宽度 是否为空 ysid varchar 3 No 医生号 ysmc varchar 10 Yes 医生名 ks varchar 20 Yes 科室 表2.3患者信息表 患者信息表 patientInfo 主键:编号 列名(中文) 列名(英文) 数据类型 宽度 是否为空 patientID varchar 15 No 编号 Name varchar 30 Yes 姓名 Sex varchar 2 Yes 性别 Age int Yes 年龄 Nation varchar 20 Yes 民族 FeeType varchar 20 Yes 费用类型 Tel varchar 15 Yes 电话 PYM varchar 5 Yes 拼音码 表2.4划价收费表 划价收费表 PriceDetail 主键:PriceDetailID 列名(中文) 列名(英文) 数据类型 宽度 是否为空 PriceDetailID int No 编号 PriceID varchar 15 Yes 划价编号 MedID varchar 15 Yes 药品编号 Medprice numeric (12, 2) Yes 单价 NUM numeric (12, 2) Yes 数量 108 TolPrice numeric (12, 2) Yes 金额 表2.5用户表 用户表 UserInfo 主键:userID 列名(中文) 列名(英文) 数据类型 宽度 是否为空 userID varchar 10 No 用户编号 userName varchar 10 Yes 用户名 userPassWord varchar 10 Yes 用户密码 userRight varchar 50 Yes 权限 表2.6药品资料 药品资料 MedInfo 主键:MedID 列名(中文) 列名(英文) 数据类型 宽度 是否为空 MedID varchar 15 No 编号 Name varchar 15 Yes 名称 gg varchar 20 Yes 规格 zlPrice varchar 50 Yes 整量单位 slPrice varchar 50 Yes 散量单位 rkPrice numeric (12, 2) Yes 入库单价 续表2.6 ckPrice numeric (12, 2) Yes 出库单价 pfPrice numeric (12, 2) Yes 批发价 zsb numeric (12, 2) Yes 整散比 Kind varchar 10 Yes 分类 feeType varchar 10 Yes 费用归类 PYM varchar 10 Yes 拼音码 life varchar 20 Yes 有效期 upNum varchar 10 Yes 上限 downNum varchar 10 Yes 下限 表2.7门诊收费项目 门诊收费项目 ClinicalChargeItem 主键:sfID 列名(中文) 列名(英文) 数据类型 宽度 是否为空 sfID varchar 20 No 编号 sfName varchar 20 Yes 名称 sfPYM varchar 20 Yes 拼音码 fee numeric (12, 2) Yes 费用 FeeType varchar 20 Yes 费用分类 SickType varchar 20 Yes 病种分类 note varchar 100 Yes 备注 2.1.4 物理设计 表2.8门诊挂号表 109 表2.9医生表 表3.0患者信息表 表3.1划价收费表 表3.2用户表 表3.3药品资料 110 表3.4门诊收费项目 2.2 程序设计 2.2.1 概要设计 在医院门诊收费系统中,门诊收费系统的设计分为8个模块,分别是用户,药品存库,药品入库,商品进货商,患者信息,药品资料,划价收费和门诊挂号。 系统功能模块设计: 医院门诊收费系统的设计 与实现 用药药商患药划门 户 品品品者品价诊 存入进信资收挂 库 库 货息 料 费 号 商 111 系统功能描述: 本医院门诊收费系统主要实现9个功能,如下所述: 1.基本资料 用户对系统的一些基本资料进行增加、删除、修改及查询操作。基本资料包括:单位设置、规格设置、进货商设置、生产厂商设置、科室设置、医生设置。 2.检疗项目 用户对医院的检疗项目的内容进行随时更新,查询。 3.门诊挂号 门诊挂号的主要功能是门诊挂号、门诊划价、整理患者信息表和挂号查询。 4.药房管理 药房管理包括:药品入库管理、药品基本信息管理和门诊发药功能。对药品信息、入库信息及发药信息综合查询。 5.收费管理 对挂号患者就诊及购买药品收费,对收费项目和收费信息综合查询并及时更新。 6.用户管理 只有系统管理员才能有这个权限,用于设置此系统的用户、密码及其权限。 7.用户帮助 用户帮助的基本功能是给予用户基本的提示。 8.用户登录 为了系统安全,只有拥有权限的用户才可以利用此系统。所以在登录到系统主界面之前要通过登录系统来验证用户身份。 9.退出系统 退出界面,结束程序。 2.2.2 程序实现 登录窗体设计: 用户登录功能的实现 用户登录窗体显示时,用户可以输入用户名和密码,系统此时连接数据库“医院门诊收费系统”中的UserInfo表来校验输入用户,如果是系统管理员就可以进入主界面所拥有的所以的功能,如果是一般的用户则没有用户管理功能。如果输入的用户名或密码无法和数据库中对应则提示错误。为了引用项目医院门诊收费系统中数据层DataLevel和业务规则层BussinessRule 中的类和方法,在程序开始添加引用语句如下: using 门诊收费系统.DataLevel; using 门诊收费系统.BussinessRule; 112 在User类声明变量代码中添加私有string型变量usersort来记录登录用户类型,系统管理员是system,普通用户是user。代码如下: private string usersort; 为了方便调用登录类并方便返回用户类别,可以创建一个公用函数GetUserSort,代码如下: public string GetUserSort() { return usersort; } 然后,为单击登录界面的“确定”按钮发出的事件添加代码如下: private void btnLog_Click(object sender, System.EventArgs e) { string userid =txtUserName.Text.Trim(); string userpassword =txtPassWord.Text.Trim(); usersort=门诊收费系统. BussinessRule.UserCheck.UserSortCheck(userid,userpassword); if(userid ==""&& userpassword =="") { MessageBox.Show("请输入用户名和密码"); } else{ if(userid =="") { MessageBox.Show("请输入用户名"); } else if (userpassword =="") { MessageBox.Show("请输入密码"); } else if(usersort=="system"|usersort=="user") { this.Close(); } else { MessageBox.Show("用户名和密码不相符"); }}} 从上段代码中可以看出,调用了业务规则层BussinessRule 里面的UserCheck类的UserSortCheck静态方法来处理用户输入用户名和密码返回的用户类别。当是合法用户时则关闭登录窗口,否则请重新输入。本系统从建模是的MVC构架到代码都利用的层来规范和有效管理各个类。把UserSortCheck函数写到业务规则层里面的UserCheck 类中,在用户登录界面代码中只要一行代码就可以实现对UserCheck类的调用,代码简洁,而且各个层次、各个类代码都不长,易于维护扩充,同时分工更加清晰明确。 下面是UserCheck类的代码: using System; using System.Data; using System.Data.SqlClient; 113 using 门诊收费系统.DataLevel; namespace 门诊收费系统.BussinessRule { public class UserCheck { public static string UserSortCheck(string username,string userpassword) { string txtSql; string usersort="nobody"; SqlConnection conn1 = new SqlConnection(门诊收费系统. DataLevel.Login.Connection); txtSql="SELECT * FROM [UserInfo]"; SqlCommand checkuser=new SqlCommand(txtSql,conn1); Try { conn1.Open(); sqlreader=checkuser.ExecuteReader(); while(sqlreader.Read()) {if((sqlreader[0].ToString().Trim()==username)&&(sqlreader[2].ToString().Trim()==userpasswor d)) { usersort=sqlreader[3].ToString().Trim(); break; }}} catch(Exception e) { Console.WriteLine(e.ToString()); } conn1.Close(); return usersort; }}} 从上述代码中可以看出,因为程序中要用到SqlConnection和SqlCommand等和数据库相关的类,所以首先为程序代码添加了System.Data和System.Data.SqlClient两个类库。然后在UserCheck类中创建了公用静态函数UserSortCheck来返回用户类别。在创建SqlConnection对象时利用了数据层DataLevel中的DatabaseConnection中connection静态公用属性。这就是本系统使用的第二种数据库连接方法,底层、具体和简洁。 上面是登录界面的介绍。 114 门诊挂 号功能 是本系 统的核 心功能之一,门诊挂号功能部分代码如下: using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Data.SqlClient; namespace 门诊收费系统 { public class ClinicReg : System.Windows.Forms.Form { private string regID,infoID; //保存门诊挂号编号和病人信息库编号 public ClinicReg() { InitializeComponent(); } private void ClinicReg_Load(object sender, System.EventArgs e) { //生成新编号 this.regID=this.CreateNewID("select max(编号) 最大编号 from clinicReg"); this.infoID=this.CreateNewID("select max(编号) 最大编号 from patientInfo"); } if(e.Button.ToolTipText=="保存") { 115 if(this.CheckNotNull()==false) { return; } this.SaveReg(); this.clearInfo(); } if(e.Button.ToolTipText=="取消") { this.clearInfo(); } if(e.Button.ToolTipText=="退出") { this.Close(); } } private void cmb6_DropDown(object sender, System.EventArgs e) { 第3章 课程设计总结 通过设计,基本上实现了工资管理系统的预计功能,并且还增加了一些新的功能和一些新的改进。 在本次设计中,我学到了很多知识,在技术方面,进一步掌握了PowerBuilder的各种编程方法及技巧,包括ADO与数据库的连接技术和datapicker、Toolbar等控件的使用方法。从而对PowerBuilder等面向对象编程语言的使用方法有了进一步的了解。同时,由于本软件使用的是SQL Server 2000数据库进行开发的。对它的使用环境和方法都有了进一步的了解。在非技术方面,得到了很多有关软件开发上的宝贵经验,了解到在软件开发过程,我们不仅需要具备扎实的专业知识,还需要具备团体合作精神,同时要能够快速掌握新的知识并能运用到实际编程中去。在软件开发过程中,要具备周密严谨的开发思想。 在以后的学习生活中,要不断学习新的知识,提高专业技能,以适应社会软件业的不断发展。 116 参考文献 [1] 郑阿齐,刘启芬等. SQL Server2000实用教程.北京:电子工业出版社, 2002:30-45 [2] 刘超,张莉编著.可视化面向对象建模技术.北京:北京航空航天大学出版社,2001:15-55 [3] 张海藩..软件工程(第四版).北京:清华大学出版社,2003:15-60 [4] 张奇,李律松,卫建伟等编著. 数据库项目案例导航.北京:清华大学出版社,2005:45-58 [5] 萨师煊,王珊.数据库系统概论(第三版).北京:高等教育出版社,2000:20-64 [6] 张海藩..软件工程(第四版).北京:清华大学出版社,2003:15-60 [7] [美]佩佐尔特. SQL Server程序设计.北京:机械工业出版社,2004:40-80 [8] 杨宏伟,李晶等. SQL Server程序员开发手册.北京:科学出版社, 2006:45-58 [9] 刘浩,陈曙东主编. SQL Server编程实例与技巧.北京:清华大学出版社,2002:56-71 医院门诊信息系统课程设计 1 前言 科技进步将人类带到了信息时代,计算机已成为各行各业在业务处理与管理工作中必不可少的辅助工具,并对各行业的发展起到越来越大的推动作用。计算机信息管理技术的应用,除了能在相当大的程度上代替人工作业,从而减少人员工作量,减轻工作负担,减少工作中因人为原因而产生的错误从而避免不必要的损失外,更重要的是能建立准确畅通、简便的信息流通渠道,为工作提供所需要的准确、即时的信息以帮助作出正确而及时的选择与决定,从而给采用这门技术的单位带来了巨大的可见或不可见的利益与效益。 随着信息时代来临,信息处理的利器—计算机应用于医院的日常管理为医院的现代化带来了从未有过的动力和机遇,为医疗卫生领域的飞速发展提供了无限潜力。采用计算机管理信息系统已成为医院管理科学化和现代化的重要标志,给医院带来了明显的经济效益和社会效益。为了加快医院系统的信息化步伐,提高医院的业务水平,建设和完善医院信息系已变得十分必要。系统的建设将本着“以患者为中心”的原则,以方便患者、提高就诊效率为目的,力争为患者提供最满意的服务,同时也将提高医院的社会效益和经济效益。与市场经济的接轨的过程中,每个医院都面临着强化内部管理、树立医院形象、上层次晋等级、进而提高社会效益和经济效益的艰巨任务。在医院管理过程中应用计算机系统,可随时进行经济核算,展开成本效益分析,使医院经营决策科学化;借据计算机数据处理严密可靠的特有机制,在改善医院人、财、物管理,降低医管人员工作强度,提高医疗工作质量,杜绝人情方、搭车药、减轻病员负担,创造医院良好信誉等诸多方面,益康医院管理信息系统都将成为您不可或缺 117 的助 医院门诊管理系统开发的目的就是实现小型医疗门诊管理的自动化,提高医院的医疗质量和市场竞争能 力,满足患者与医院管理的多种需求,促进医院持续快速稳定发展。该报告的编写主要是对该系统的社会 可行性、经济可行性、技术可行性等问题进行研究分析,确定该系统在开发中可能遇到的问题,对项目的 最终用户以及开发者提供审核的依据。 本系统为使医院适应工作发展的需要,加快信息化建设提高医疗服务质量和工作效率而开发。本系统由病人挂号子系统,换号子系统,退号子系统和医疗卡管理子系统等组成。将病人挂号,换号、退号和医疗卡有关的信息纳入电脑系统统一管理,以便医生和病人等各部门的相关人员及时获取相关信息,以提高医疗效果和管理效率。 2.设计内容 2 设计过程 2.1工作任务的分解 项目名称初步定为:医院门诊管理系统。分为三个子功能模块:门诊划价模块、门诊收费模块和门诊发药模块。崔倩负责系统的需求分析,界面设计和小组报告的编写。孔茵茵的任务主要是画数据流程图,数据字典,界面设计。闫实的任务是画业务流程图,关系模式,ER图的设计。田文雄的任务是画用例图,类图,活动图,状态图。张凯斌的任务是画序列图,代码设计。每天合理安排时间,在规定时间内积极参与讨论合作完成任务。 2.2 进度安排 先进行项目的选择,然后做需求分析,画业务流程图,数据流程图,ER图,数据字典和关系模式,用例图,类图,活动图,状态图和代码设计。最后进行数据库的界面设计。根据小组人员的讨论,我们得出了要做的项目,然后根据组长的安排预计6月23号结束需求分析业务流程图,数据流程图,ER图的工作。24,25号做完数据字典和关系模式,用例图,类图,活动图,状态图和代码设计。26号对数据库界面进行设计。27,28号完成小组总结和个人报告。 2.3 完成情况 截至目前,小组任务全部完成,剩下详细的总结报告。 3 系统介绍 3.1 系统调查 3.1.1功能需求分析 3(1(1门诊划价系统功能需求分析 本门诊处理系统软件提供一个集门诊划价、收费、发药于一体的管理信息系统,可实现信息存储、更新、查询等多项功能,为广大医务工作人员及病人提供方便。 录入处方及检查治疗单、核算病人的费用,提供门诊划价窗口业务。 门诊划价发药可作到排队“四条龙”合一:西药划价、中药划价、门诊收费等四条龙。实现“以病人为中心”的目标。可以根据医院规模和管理模式选用。 各类划价支持多种录入方式:医院自编数字码方式、拼音缩写码方式、五笔码方式、拉丁方式、并充分满足了窗口业务的快速响应要求。提供与门诊收费相关的各类报表。 提供与财务科的业务数据通讯能力。 提供与门诊药房的通讯能力。向经济核算部门提供门诊科室人员的部分核算数据。 3(1(2门诊收费系统功能需求分析 支持多种收费方式、收费标准、收费项目、付款比例适应医院对不同病人的服务要求,特别支持医疗保险病人。 提供与门诊药房的联网数据共享能力 提供与门诊收费相关的各类报表 。 提供门诊医疗统计、门诊科室及工作人员部分核算数据和工作量统计。 完成现金收费并打印发票等功能,满足以收费为核心的管理,完成收费日清月结,随时生成各类门 118 诊收费报表及各种统计报表。 退费处理方法合理有效,结帐方法灵活安全。 网络环境下可多人操作,使用密码划分权限,防止非法操作。使用连续套打发票,各收费员都用自己的发票,发票上打印各操作员的的工作发票序号。 期初设置方便灵活,各单位可自己定义科室项目、费用项目、操作员姓名及代号。 3(1(3门诊发药系统功能需求分析 采用整体统一的管理方式:门诊药房与门诊收费联网共享数据。对药房同药库、药房同药房之间的物流进行双向管理 。可以根据药品的限期及库存下限来来进行缺药、失效预告、对药品进行数量、金额双重控制,毒麻、贵重药品特别控制。 核对已收费处方无误后予以配药、发药处理。发药后减去门诊药房库存。 支持病人处方的退药处理,并增加门诊药房库存。 支持协定处方管理录入,能够自定义协定处方,加快划价/收费(员)录入速度。完善的库存管理:对购进药品从品种数量、价格等进行验收入库处理,根据临床需要和库存情况进行出库处理:除日常的出库外,还有调拨、报损、退药等多种形式出库。 严格药品有效期管理。高度的自动处理功能:系统可根据有效期自动预告失效药品;对呆滞药品进行预告;对超限药品进行报警。 有丰富的报表功能:药品台帐、药品名细帐、药品月统计、药品出入库单、药品调价单、药品报废单等。 门诊药房系统中又分为门诊中药房和门诊西药房两子系统,两者主要功能相同。针对性强,针对药房管理中的难点进行开发,做到了‘四个一’,即‘药品名称统一、规格统一、编码统一、价格统一’,将医院药品工作管理上升到新阶段。 模拟人工管理为主,操作员易于以惯常思维理解并掌握使用。各药房以药库为中心,请领药品、入库、调价。 3(2需求概述 浏览功能:可选定一项记录,显示该记录的所有域。 修改功能:可任意修改字段,药品名称不能为空。 添加功能:可任意添加一条或多条处方及相关内容。 删除功能:可任意删除一条或多条处方及相关内容。 报表生成:可根据提供的模板将划价结果收费单或选中的数据生成多种形式 的报表。 (6) 打印功能:将生成的报表或选中的记录进行打印输出。 (7) 身份验证:进入系统时,对操作员的身份进行检查,只允许合法操作员登陆系统。 3(3性能需求分析 ?模快化设计,具有良好的可扩充性,以适应医院不同阶段的发展需要。方便的系统剪裁功能,各子系统间任意选择是否联网。 ?信息共享、准确及时交流信息:发挥网络功能,减少重复操作,提高工作效率。彻底改变手工或单机管理对信息收集处理中的重复、混乱和容易出错的状况,充分利用计算机网络及关系型数据库的资源共享、数据共享等技术。一个环节录入信息,其它环节可以共享,确保数据的准确性和一致性。基本信息录入采用拼音输入方式,鼠标操作,基本不需输入汉字,大大提高工作效率。 ?操作简单,维护方便:不需要记忆任何计算机命令,人机界面友好,操作非常简单。每个系统都具有系统维护功能,对可变化的项目可自行维护,不需改变程序。 ?实时特色:24小时不间断的高度安全性和可靠性,数据传输准确快速,适应医院工作流程需要 ? 查询功能强大:可以对每个系统的业务情况、统计报表,在任意时间内进行汇总、查询,同时对几种情况可以任意组合查询、统计,大大降低了统计人员的工作强度;院领导通过查 119 询系统,可及时了解业务情况、财务情况。各种数据报表皆可打印。将院里的事后统计变为实时跟踪,静态管理变为动态管理,提高了管理水平运行环境。 3(4性能概述 3(4(1数据精确度 查询时应保证查全率,所有相应域包含查询关键字的记录都应能查到,查到的记 录应与给定的单项或组合查询条件完全匹配。 3(4(2时间特性 一般操作的响应时间应为1s-2s内,打印机的操作及数据的导入和导出应在可接受 的时间内完成。 3(4(3适应性 满足操作员的使用要求和前面提到的运行环境 3.2系统分析 3.2.1 业务流程图 预约处挂红处理人员理人员 预约单患者预约挂号处挂号 收费医生人员 收费电子病历电子病历收费就诊处 配药人员 药品凭据药房配药药品凭据 收费凭据 3.2.2 数据流程图 120 挂号存档电子病历预约存档数据存档数据 预约单挂号电子病历挂号处患者预约就诊 电子病历 收费单1配药药房收费收费处 收费单2 药品信息收费存档 存档数据 数据字典 名称 类型 长度 是否为主是否可以为空 键 预约的患者 int 6 预约号 是 否 char 10 患者姓名 否 否 int 20 患者电话 否 是 int 20 患者身份证号码 否 否 char 10 预约科目 否 否 char 10 预约专家 否 是 float 10 预约时间 否 否 预约处理人员 int 10 预约处理职工编号 是 否 char 10 姓名 否 否 int 20 身份证信息 否 否 char 2 性别 否 否 挂号处理人员 int 10 挂号处理职工编号 是 否 char 10 姓名 否 否 char 2 性别 否 否 int 20 身份证信息 否 否 医生 int 10 医生所属科室编码 是 否 char 10 所属科室名称 否 否 int 10 职工号 是 否 121 char 10 职称 否 否 int 20 身份证信息 否 否 char 10 姓名 否 否 int 10 年龄 否 否 char 2 性别 否 否 收费处理人员 int 10 收费处理职工编号 是 否 char 10 姓名 是 否 char 2 性别 否 否 int 20 身份证信息 否 否 int 10 年龄 否 否 药房配药人员 int 10 药房配药人员职工编号 是 否 char 10 姓名 否 否 char 2 性别 否 否 int 20 身份证信息 否 否 int 10 年龄 否 否 患者 int 10 患者编号 是 是 char 8 患者姓名 否 否 char 2 患者性别 否 否 int 20 患者身份证信息 否 否 int 20 患者电话 否 否 关系模式 3.3 系统业务功能描述 3.3.1 用例模型 122 3.3.2 类图 3.3.3序列图(或合作图) 123 (软件中没有双向实箭头) 3.3.4 状态图(或活动图) 124 数据库界面: 125 126 3.4 系统总体设计 3.4.1代码设计 127 预约患者代码:由预约的日期和当天的预约人数流水号组成。 医生设计代码:由入职年月,入职流水号,科室编号和职称组成。 挂号人员,配药人员,收费人员代码:由入职年月,入职流水号组成。 3.4.2输入设计 输入的方式简单、快捷,是医院信息管理系统的基本要求,特别是门诊划价、收费的输入 方式直接影响医院的工作效率。此系统采用鼠标单击选择或直接输入的方式有许多优点。 满足操作员不同的需求。 无需记忆药品的价格。 (3) 如发现输入处方错误可按“删除”键进行修改。 3.4.3输出设计 输出方式按照实际需要设计,如门诊划价单、门诊收费单等。 3.4.4数据库设汁 3.4.5 模块设计 128 3.4 系统的特点 本系统更为理想的选择是与其他管理系统集成起来,组成医院管理系统。在功能方面可以考虑由多用户分别进行管理,系统也可为级别不同的用户设置不同的权限,同时应进一步提高系统的安全保密性。 4. 本次课程设计的心得体会 科技进步将人类带到了信息时代,计算机已成为各个行业在业务处理与管理工作中必不可少的辅助工具,并对各行业的发展起到越来越大的推动作用。医疗卫生是围绕在我们生活中的一个非常重要的部分,与我们的生活息息相关。建设一个适合、实用的医院管理信息系统,对医院经济效益、社会效益、管理水平及至医疗水平的提高都大有裨益。也正是由于这个原因,我们小组决定选择医院门诊处理系统这个题目进行项目开发。 在确定题目后,首先我们进行了大量的信息收集工作,包括网上查询、学校图书馆查询,甚至跑遍了学校周围的所有书店。在资料收集的过程中,我们发现医院管理信息系统是一个非常庞大的系统,而我们只是选择了其中一个小小的医院门诊处理系统。虽然这个小小的医院门诊处理系统就已经把我们搞得晕头转向了,但我们小组五人还是决心竭尽全力将他完成的详尽细致。 在资料收集的差不多之后,我们开始进入第二阶段,将书本上的知识转化为自己的知识。我们按照软件开发步骤进行了项目可行性研究、背景分析、需求分析、总体设计等,并确定画出了数据流图、活动图、ER图、程序流程图等。虽然有些知识在课堂上并没有涉及到,但经过我们的自学理解,还是掌握了这些知识技能。 接下来,我们开始写文档,按照步骤尽量将文档写得清楚丰实。 在整个的课程设计中,我们小组五人合理分工、互相帮助、团结协作,充分体现出了集体合作的能力。总而言之,本次课程设计,不仅让我们深刻掌握了书本上的知识,锻炼了我们的自学能力,培养了我们团结协作的精神,更使我们懂得了书本以外的能力的重要。这次课程设计真的让我们获益匪浅~ 129
/
本文档为【医院门诊收费管理系统设计与实现【精华】6】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索