基于JAVA和MYSQL的医院简易挂号管理系统

simpleLove

发布日期: 2019-03-10 13:54:00 浏览量: 2364
评分:
star star star star star star star star star_border star_border
*转载请注明来自write-bug.com

一、需求分析

1.1 题目要求

采用桌面应用程序模式,开发一个医院挂号系统,管理包括人员、号种及其挂号费用,挂号退号等信息,完成登录、挂号、查询和统计打印功能。数据库表如下所示,建立索引的目的是加速访问,请自行确定每个索引要涉及哪些字段。

T_KSXX (科室信息表)

字段名称 字段类型 主键 索引 可空 备注
KSBH CHAR(6) 科室编号,数字
KSMC CHAR(10) 科室名称
PYZS CHAR(8) 科室名称的拼音字首

T_BRXX (病人信息表)

字段名称 字段类型 主键 索引 可空 备注
BRBH CHAR(6) 病人编号,数字
BRMC CHAR(10) 病人名称
DLKL CHAR(8) 登录口令
YCJE DECIMAL(10,2) 病人预存金额
DLRQ DateTime 最后一次登录日期及时间

T_KSYS (科室医生表)

字段名称 字段类型 主键 索引 可空 备注
YSBH CHAR(6) 医生编号,数字,第1索引
KSBH CHAR(6) 所属科室编号,第2索引
YSMC CHAR(10) 医生名称
PYZS CHAR(4) 医生名称的拼音字首
DLKL CHAR(8) 登录口令
SFZJ BOOL 是否专家
DLRQ DATETIME 最后一次登录日期及时间

T_HZXX (号种信息表)

字段名称 字段类型 主键 索引 可空 备注
HZBH CHAR(6) 号种编号,数字,第1索引
HZMC CHAR(12) 号种名称
PYZS CHAR(4) 号种名称的拼音字首
KSBH CHAR(6) 号种所属科室,第2索引
SFZJ BOOL 是否专家号
GHRS INT 每日限定的挂号人数
GHFY DECIMAL(8,2) 挂号费

T_GHXX (挂号信息表)

字段名称 字段类型 主键 索引 可空 备注
GHBH CHAR(6) 挂号的顺序编号,数字
HZBH CHAR(6) 号种编号
YSBH CHAR(6) 医生编号
BRBH CHAR(6) 病人编号
GHRC INT 该号种的挂号人次
THBZ BOOL 退号标志=true为已退号码
GHFY DECIMAL(8,2) 病人的实际挂号费用
RQSJ DATETIME 挂号日期时间

为了减少编程工作量,T_KSXX、T_BRXX、T_KSYS、T_HZXX的信息手工录入数据库,每个表至少录入6条记录,所有类型为CHAR(6)的字段数据从“000001”开始,连续编码且中间不得空缺。为病人开发的桌面应用程序要实现的主要功能具体如下:

  • 病人登录:输入自己的病人编号和密码,经验证无误后登录

  • 病人挂号:病人处于登录状态,选择科室、号种和医生(非专家医生不得挂专家号,专家医生可以挂普通号);输入缴费金额,计算并显示找零金额后完成挂号。所得挂号的编号从系统竞争获得生成,挂号的顺序编号连续编码不得空缺

功能2的界面如下所示,在光标停在“科室名称”输入栏时,可在输入栏下方弹出下拉列表框,显示所有科室的“科室编号”、“科室名称”和“拼音字首”,此时可通过鼠标点击或输入科室名称的拼音字首两种输入方式获得“科室编号”,用于插入T_GHXX表。注意,采用拼音字首输入时可同时完成下拉列表框的科室过滤,使得下拉列表框中符合条件的科室越来越少,例如,初始为“内一科”和“内二课”。其它输入栏,如“医生姓名”、“号种类别”、“号种名称”也可同时支持两种方式混合输入。

每种号种挂号限定当日人次,挂号人数超过规定数量不得挂号。一个数据一致的程序要保证:挂号总人数等于当日各号种的挂号人次之和,病人的账务应保证开支平衡。已退号码不得用于重新挂号,每个号重的GHRC数据应连续不间断,GHRC从1开始。若病人有预存金额则直接扣除挂号费,此时“交款金额”和“找零金额”处于灰色不可操作状态。

为医生开发的桌面应用程序要实现的主要功能具体如下:

  • 医生登录:输入自己的医生编号和密码,经验证无误后登录

  • 病人列表:医生处于登录状态,显示自己的挂号病人列表,按照挂号编号升序排列。显示结果如下表所示。

挂号编号 病人名称 挂号日期时间 号种类别
000001 章紫衣 2018-12-30 11:52:26 专家号
000003 范冰冰 2018-12-30 11:53:26 普通号
000004 刘德华 2018-12-30 11:54:28 普通号
  • 收入列表:医生处于登录状态,显示所有科室不同医生不同号种起止日期内的收入合计,起始日期不输入时默认为当天零时开始,截止日期至当前时间为止。时间输入和显示结果如下表所示。

起始时间:2018-12-30 00:00:00 截止时间:2018-12-30 12:20:00

科室名称 医生编号 医生名称 号种类别 挂号人次 收入合计
感染科 000001 李时珍 专家号 24 48
感染科 000001 李时珍 普通号 10 10
内一科 000002 扁鹊 普通号 23 23
保健科 000003 华佗 专家号 10 20

病人应用程序和医生应用程序可采用主窗口加菜单的方式实现。例如,医生应用程序有三个菜单项,分别为“病人列表”、“收入列表”和“退出系统”等。

考虑到客户端应用程序要在多台计算机上运行,而这些机器的时间各不相同,客户端程序每次在启动时需要同数据库服务器校准时间,可以建立一个时间服务程序或者直接取数据库时间校准。建议大家使用MS SQL数据库开发。

挂号时锁定票号可能导致死锁,为了防止死锁或系统响应变慢,建议大家不要锁死数据库表或者字段。程序编写完成后,同时启动两个挂号程序进行单步调试,以便测试两个病人是否会抢到同一个号、或者有号码不连续或丢号的现象。

系统考核目标:

  • 挂号后数据库数据包括挂号时间不会出现不一致或时序颠倒现象,以及挂号人次超过该号种当日限定数量的问题

  • 挂号号码和挂号人次不会出现不连续或丢号问题

  • 病人的开支应平衡,并应和医院的收入平衡

  • 系统界面友好、操作简洁,能支持全键盘操作、全鼠标操作或者混合操作

  • 能支持下拉列表框过滤输入

  • 系统响应迅速,不会出现死锁

  • 统计报表应尽可能不采用多重或者多个循环实现

  • 若采用时间服务器程序校准时间,最好能采用心跳检测机制,显示客户端的上线和下线情况

思考题:当病人晚上11:59:59秒取得某号种的挂号价格10元,当他确定保存时价格在第2天00:00:00已被调整为20元,在编程时如何保证挂号费用与当天价格相符?

1.2 需求分析

对于病人的操作界面而言,需要有题目要求的挂号功能,包括人性化的过滤功能,需要足够的提示信息用于提示当前的操作状态,此外,还需要题目要求中没有提到的对于余额的操作功能;对于医生的操作界面而言,除了需要题目要求的两种统计功能外,还需要额外的过滤功能以供更于便捷的查询。此外,还需要一个统一的登录界面以供医生和病人登录。

对于程序的功能而言,不仅需要程序具有健壮性,在发生错误的时候不能崩溃,而且要求界面友好,支持多种操作方式,相应迅速。

二、系统设计

2.1 概要设计

整个系统分为2个部分:程序部分以及数据库部分。数据库部分用于存储数据并同时服务多个客户端,而程序部分则负责相应用户的输入,与数据库沟通、处理数据并返回处理的结果。而程序部分总体上又分为4个模块:登录界面、医生操作模块,病人操作模块以及数据库连接器。总体的模块图如图 1所示。其中,登录界面用于负责检查用户的登录信息是否正确,并负责唤醒医生操作界面或病人操作界面,而医生操作界面或病人操作界面则调用数据库模块与数据库进行沟通,处理数据并返回结果。

此外,程序入口也被封装为一个较小的main模块,用于执行包括加载数据库驱动、连接数据库、启动化图形界面引擎在内的初始化操作,以及实现唤醒登录界面的功能。如果不能成功连接数据库则此模块进行相应的处理并退出程序。由于此模块较小,且功能较为简单,因此不列入主要模块中。

程序的总体状态转移图如图 2所示,首先进入登录界面并等待用户输入登录信息,然后通过查询数据库判断登录信息是否匹配,如果匹配则登录,否则提示错误并等待用户重新输入登录信息。登录成功后通过判断用户点击的是医生登录按钮还是病人登录按钮来判断加载医生登录界面还是病人登录界面。此后进入图形界面引擎控制的事件循环。当有事件到来时(如用户输入、点击等)处理事件、显示返回结果并继续等待下一个事件。所有的状态都是可逆的,也就是说用户可以通过退出按钮来回到上一个界面,以此来增加界面的可操作性。

2.2 详细设计

2.2.1 登录界面设计

登录界面的设计较为简单,其功能为检测用户输入的登录信息是否与数据库中的登录信息相同。其应该包含一个用户名框,一个密码框,一个医生登录按钮、一个病人登录按钮以及一个退出按钮。由于图形化界面一般采用事件驱动,因此在按下按钮时进行对于用户输入的处理。按下医生登录按钮以及病人登录按钮的流程图如图 3所示。如果点击的是医生登录按钮或病人登录按钮,则首先判断用户名和密码是否为空。由于设计不允许出现空的用户名和密码,因此提前进行这一步判断有助于减少用户的等待时间以及无效的数据库访问,如果不为空则通过事先建立好的连接在数据库中查询,并通过查询结果进行比对:如果不存在此用户(查询结果为空)或密码比对错误,则做出相应的提示并禁止用户登录,如果用户名和密码均正确则加载对应的登录界面。如果点击的是退出按钮,则执行清理工作并退出界面。值得注意的是,由于医生登录界面与病人登录界面为同一个界面,因此第一步的输入信息不为空的检查可以提取到一个函数中进行,在本程序中validateUserNameAndPassword函数执行这一操作。

此外,为了提高用户体验,在提示错误重新输入时需要清理掉上次提示的错误,而这些函数绑定在两个输入框的输入触发器上,这一绑定由此类的initialize方法完成。按照JavaFX的规范,initialize方法会在界面初始化时被调用。由于这些函数主要对于FXML的StyleSheet进行修改,与主要逻辑相比重要性较低,因此不做赘述,详见源代码部分。

2.2.2 数据库连接器设计

数据库连接器是整个程序的基础,它位于层次结构的最底层并被医生操作模块或病人操作模块所调用。这一模块在整个界面被初始化之前初始化,又由于没有它整个程序将无法运作,因此如数据库连接器不能正确被初始化,则程序将拒绝运行并退出。

数据库连接器作为一个单例,为医生操作模块和病人操作模块提供必要的服务。这样可以简化上层的逻辑,将部分逻辑移动到底层,从而降低了整个系统的耦合度,同时便于代码的修改。虽然数据库连接器在全局作为一个单例对象存在,但由于需要考虑到多个客户端同时连接同一个数据库的情况,依然要考虑数据库层面的并发安全性问题。

考虑到一个数据库仅供给一个人使用,为了简便起见,此类中仅维持一个连接实例,所有的statement均通过这一个连接进行。数据库对上层提供的服务(即公有方法)以及对应的执行语句如表 1所示(以略去参数类型)。此外,还提供了connectDataBase方法供初始化使用以及getInstance方法供获得实例使用。

方法 (参数) 说明 执行的Sql语句
getWholeTable (table) 获得表table中的全部内容 SELECT * FROM \<table>
getPatientPassword (number) 获得编号为number的病人的密码 SELECT password FROM patient WHERE pid=\<number>
getPatientInfo (number) 获得编号为number的病人的全部信息 SELECT * FROM patient WHERE pid=\<number>
getDoctorInfo (number) 获得编号为number的医生的全部信息 SELECT * FROM doctor WHERE docid=\<number>
getRegisterForDoctor (number, start, end) 获得起止时间分别为start和end的有关医生编号number的全部挂号信息 SELECT reg.reg_id,pat.name, reg.reg_datetime,cat.speciallist FROM ( SELECT reg_id,pid,reg_datetime,catid FROM register WHERE docid=\<number> AND reg_datetime>=\<start> AND reg_datetime<=\<end> ) as reg inner join ( SELECT pid,name FROM patient ) as pat on reg.pid=pat.pid inner join ( SELECT reg_id, specialist FROM register_category ) as cat on reg.catid=cat.catid
getIncomeInfo (start, end) 获得起止时间分别为start和end的所有医生的收入信息 SELECT dep.name as depname, reg.docid, doc.name as docname, cat.specialist, reg.current_reg_fount, SUM(reg.fee) as sum FROM ( SELECT * FROM register WHERE reg_datetime>=<start> AND reg_datetime<=<end> ) as reg inner join ( SELECT docid,name,depid FROM doctor ) as doc on reg.docid=doc.docid inner join( SELECT depid,name FROM department ) as dep on doc.depid=dep.depid inner join( SELECT reg_id,specialist FROM register_category ) as cat on reg.catid=cat.catid GROUP BY reg.docid, cat.specialist
updatePatientLoginTime (number, time) 更新编号为number病人的最近登录时间为time UPDATE patient SET last_login_datetime=\<time> WHERE pid=\<number>
updateDoctorLoginTime (number, time) 更新编号为number医生的最近登录时间为time UPDATE doctor SET last_login_datetime=\<time> WHERE docid=\<number>
tryRegister 根据所给参数尝试挂号(较为复杂,见下)

tryRegister方法由于不仅仅是执行一个简单的任务并返回结果而显得较为复杂:这个函数是为了将上层的部分逻辑转移到下层以降低系统耦合度而产生的。其流程图如图 4所示。由于这一方法需要分为多步执行,并且需要考虑并发安全性,因此需要启动一个transaction,在图中流程中任意一个地方发生错误则直接报错并回滚,回滚后不会对数据库造成任何影响。由于需要挂号编号是单调递增且连续的,因此transaction的隔离级别设置为repeatable read(可重复读)。执行挂号的sql语句前执行的判断为当前挂号数是否超过最大挂号数,而执行之后的判断为两次对于是否更新余额的判断:一次是判断是否需要从余额扣款,一次判断是否将找零存入余额。在所有语句得以正确执行后提交transaction以持久化更改。

由于tryRegister返回的是成功挂号时的号码,占用了错误信息的返回渠道,因此为这一方法定义了一个异常RegisterException类来返回错误信息,其中包含错误代码可以指示出错的原因。

2.2.3 病人操作界面设计

病人操作界面的设计是整个程序中最为复杂的部分,其大部分代码均为界面更改代码。界面包含4个输入/下拉框、一个滑块以及2个复选框,输入框分别用于选择科室名称、医生姓名、号种类别以及号种名称,滑动条用于选择交款金额,两个复选框用于选择是否使用余额付款以及是否将找零存入余额。此外,界面上还包含需要显示的信息,包括应缴金额、找零金额以及挂号号码、还包含挂号按钮和退出按钮用于开始执行挂号逻辑以及退出当前界面。用于搭建界面的逻辑此处不再赘述,下面主要描述核心部分较为重要的复选框过滤方法以及当挂号按钮按下后所执行的逻辑。

由于程序需要良好的用户体验,下拉框需要同时支持鼠标输入以及键盘输入,而当一个下拉框选择了一项内容后,其余的下拉框也应该更新其可选内容以匹配当前内容,这就涉及到过滤策略的问题:如何进行过滤以及在何时进行过滤。经过一番考虑与实践后决定采用如下的过滤策略:为每一个下拉框定义一个原始列表与一个当前列表,原始列表用于存放此下拉框在没有其它限制的情况下所有的可选值,而当前列表用于存放经过过滤后下拉框的候选值。再为每一个下拉框定义2种操作:更改与提交。鼠标在候选值上滑动、键盘正在进行输入的时候下拉框为更改状态,而鼠标点击后、键盘换行键按下后下拉框显示当前列表中的某一个值的状态为提交状态。

于是过滤策略为:进行更改操作时仅过滤当前列表并将过滤后的内容加入下拉框的候选值中,而提交操作后对于所有的当前列表重新从原始列表进行按序更新,扩展到一般情况,假设共有N个列表,在提交任意一个下拉框m后对于当前列表1~m-1, m+1~N依次进行更新,而对于列表k的更新过程为:依次使用1 ~ k-1、k+1 ~ N的下拉框的已选择值以及此下拉框选择的内容类型对于第k个列表的语义限制对第k个列表进行更新。这一操作看似是具有时间复杂度O(M^2)的,而实际上进行了一定的优化后可以仅仅在O(M)的时间内完成,其中M为平均原始列表长度(由于过程较为庞杂,此处不便于使用图形进行展示)。

这样设计的好处在于:能够在较短的时间内对于所有的列表进行动态的过滤而不会带来自定义的更新规则或带优先级的更新规则所带来的混乱,当用户选择下拉框m时m自动成为最高优先级(这也是合理的,因为用户当前的焦点在m处),并结合之前已选的内容对于所有下拉框进行过滤,在删除复选框内容时也不会造成其它更新策略可能带来的列表内容丢失。

在挂号按钮按下后首先进行挂号前检查:判断必要的下拉框是否已经有选择的值以及余额是否充足,然后调用数据库连接器中的tryRegister函数尝试挂号,并根据返回的结果显示相应的挂号号码或者错误信息。

2.2.4 医生操作界面设计

医生操作界面则较为简单,其以查询、统计功能为主,并且统计功能可以集成在sql语句中完成,因此代码逻辑简短。值得注意的是需要使用TreeTableColumn来存储各列的值, 并使用DateTimeFormatter对于时间格式进行转换,否则列表可能不能正常更新,时间也不能正常被数据库连接器读取。

医生操作界面界面包含一个挂号列表、一个收入列表,均可以按照任意一栏进行排序,包含2个时间选择器以及2个日期选择器,用于过滤起止日期,在2个表中均能过滤,并有2个复选框能够快捷的选定今天或全部时间,此处的界面更新逻辑为:但两个复选框中的任意一个被按下另一个都会取消选择,并且时间选择器与日期选择器会被禁用。最后,界面上包含2个按钮,分别用于发送数据库请求并更新界面以及退出当前界面。

三、软件开发

本程序以及测试程序的编写均在Arch Linux x64系统下完成,并分别在Linux和Windows下进行了测试,具体开发以及测试环境见表 2。

项目 版本
开发操作系统 Arch Linux 2018年4月更新
JDK (Linux) OpenJDK 1.8.0_172, Java 8
集成开发环境 IntelliJ IDEA 2018.1.3
测试操作系统1 Arch Linux 2018年5月更新
JRE (Linux) OpenJDK Runtime Environment 1.8.0_172-b11
数据库 (Linux) MariaDB 10.3.7.r77.gee5124d714e
测试操作系统2 Windows 10 Pro x64 Version1803
JRE (Windows) Oracle Java SE Runtime 1.8.0_161-b2
数据库 (Windows) MariaDB 10.3.7 x64

四、软件测试

本软件测试在Arch Linux下进行。经测试,程序在Windows下的行为和运行结果与在Arch Linux下完全相同。

4.1 登录测试

首先不启动数据库,在无数据库连接的情况下启动程序,程序直接报错退出,如图 5所示,这是预期行为,因为不能要求用户手动连接数据库,因此只能报错退出。

在数据库运作正常的情况下,启动后的界面如图 6所示。

然后尝试不使用用户名、密码输入错误的用户名、密码登录,程序应该提示对应的错误,知己的程序输出如图 7和图 8所示。可以看出,与预期的结果相同。下方的显示区域分别显示“请输入用户名”、“请输入密码”、“用户不存在”以及“密码错误”。

在使用用户名003、密码003003并点击病人登录后,成功登录,登录后的界面如 所示。此处登录测试完成,进入病人操作界面测试阶段。

4.2 病人操作界面测试

进入病人操作界面后如图 9所示。其中所有的可交互控件均可同时使用鼠标和键盘进行操作。当号种类别以及号种名称被选择时,应缴金额以及找零金额会自动显示,并且找零金额会随着付款方式以及交款金额的变化而变化。当未满足挂号条件时,挂号按钮为未激活状态。

接下来尝试进行挂号操作当余额低于应缴金额时,使用余额付款按钮为未激活状态,不可使用余额付款,否则可以选择使用余额付款或使用现金付款,当选择使用余额付款时,交款金额滑块为未激活状态以减少无效操作的可能性。正在使用现金挂号的界面以及挂号成功的界面分别如图 10以及图 11所示,在挂号成功后,底部状态栏显示了挂号成功的信息以及挂号号码。

为了测试程序的并发安全性,使用IntelliJ IDEA同时打开两个程序进行单步调试,调试结果显示无论两个程序以何种方式穿插挂号的操作都不会发生编号冲突或缺失的情况,但有可能造成某一个客户端不能挂号成功而发生数据库回滚。在这种情况下用户需要重新挂号。而当挂号数量达到限额时也会提示挂号失败,如图 12所示,当多次点击挂号后,此号码达到了人数上限,因此在访问数据库的时候会抛出异常并禁止用户进行进一步的挂号操作。

此外,本程序还支持将找零存入余额以供下次使用。使用另一个号码进行挂号,并勾选将找零存入余额,挂号成功后余额有所增加,如图 13所示。

在界面的友好性方面,所有的交互控件均能够同时支持鼠标和键盘操作,一个使用键盘通过输入拼音进行下拉框过滤的例子如图 14所示。

4.3 医生操作界面测试

退出病人操作界面后进入医生操作界面,图 15展示了上面用于演示的008医生登录并查询所有挂号列表的操作界面。界面的下方为过滤器,可以自定义时间过滤,也可以使用“全部时间”和“今天”复选框进行快捷的过滤。使用这两个复选框的效果与手动设置时间的效果相同,但是免去了较为费时的选择操作。

图 16展示了手动输入时间进行过滤的效果,显示的值为上方病人测试中最后一次挂号的信息。可以看出与病人挂号时选择与返回的信息相同。

标签栏的另一个标签为收入列表,这一列表的过滤方式与挂号列表的过滤方式相同,只是显示的内容有所差异。

值得注意的是,无论是挂号列表还是收入列表,各栏的相对位置都可以移动,并且可以按照任意一栏排序。图 17即为将挂号人次移动到第三栏并以之为基准进行排序的结果。

五、特点与不足

5.1 技术特点

  • 病人操作界面使用了效率较高的过滤算法,以多个维度进行过滤,提高了程序的可用性和便捷性

  • 采用了移动端的控件风格构造了一个更为人性化的操作界面

  • 程序考虑到了多种异常以及并发的安全问题,健壮性强,并且程序效率较高

  • 将程序分解为多个模块,耦合度低、可扩展性强,易于修改

  • 编译时将所有的依赖打入一个jar包中,不存在依赖问题,全平台通用, 图 19为本程序在Window10下的运行效果。可以看出,除了字体有些微的差别外其余并无不同

5.2 不足和改进的建议

  • 由于数据库定义密码长度限制,所有的密码为明文存储,安全性较低。可以考虑将密码改为hash加密后的密码存储

  • 下拉框过滤算法以及医生界面的更新算法可以改为增量更新,并多加上一级cache,这样可以减少数据库操作,并提升性能

  • 可以添加更多的统计功能供不同角度的查询使用

  • 可将sql用户名密码等全局变量提取到配置文件中,避免硬编码

六、过程和体会

6.1 遇到的主要问题和解决方法

在医生见面设计中发生了统计表格不能自动更新的问题,通过阅读文档发现TreeTable类需要设置CellValueFactory才能实现自动更新,遂修改程序使之得以正常运行。在病人界面的设计时遇到了下拉框过滤输入时过滤算法失效的问题,经过仔细的检查后、发现原因在于应用过滤的优先级混乱造成了下拉框备选项丢失的错误,经过一番思考后想出了上面详细设计所述的过滤算法,从而从根本上解决了这一问题。此外,IntelliJ IDEA的FXML编辑工具缺失部分功能,使得FXML文件不能指定控制类,并且容易导致IDE崩溃退出,这一问题可以使用独立的SceneBuilder解决。

6.2 课程设计的体会

通过此次课程设计,我最大的收获是学习了如何使用JavaFX搭建一个现代化的、友好的界面,以及如何让Java程序与数据库协作来完成复杂的功能。对于第一次接触JavaFX库的我而言,这是一个挑战,但是经过近一个星期的不懈努力,我深入的了解了JavaFX的运作方式,并使用其构造了一个较大的项目,在这个过程中我学到了不少有用的知识。不仅如此,在这一综合性较强的实验中我还顺带复习了有关Java的语言特性、有关数据库的知识以及许多软件工程的经验与知识,这对于今后的学习生活奠定了不小的基础。

七、源码和说明

7.1 文件清单及其功能说明

文件(夹)结构及其说明如下:

  1. src 项目根目录
  2. ├── 说明文件.txt 说明文件
  3. ├── lib 第三方库文件夹
  4. ├── jfoenix-8.0.1.jar JFoenix第三方库
  5. └── mysql-connector-java-5.1.46-bin.jar MySQL第三方库
  6. ├── out 编译输出文件夹
  7. └── hims.jar 编译输出Jar
  8. ├── src 源文件夹
  9. └── hims 源文件夹(包级)
  10. ├── Login.fxml 登录界面FXML文件
  11. ├── Doctor.fxml 医生界面FXML文件
  12. ├── Patient.fxml 病人界面FXML文件
  13. ├── LoginController.java 登录界面控制类源码
  14. ├── PatientController.java 病人界面控制类源码
  15. ├── DoctorController.java 医生界面控制类源码
  16. ├── DBConnector.java 数据库连接器源码
  17. ├── Config.java 配置文件
  18. ├── Main.java 主函数所在类源码
  19. └── Main.css 界面使用的层叠样式表文件
  20. └── sample_data.sql 数据库样例数据文件

7.2 用户使用说明书

要使用本程序,须按照下列步骤进行环境搭建:

  • 前提条件

    • 操作系统:Windows/Linux/OS X
    • Java 运行环境:Jre 1.8.0_161 或其兼容版本
    • 数据库:MariaDB 10.3.7或其兼容版本或MySQL对应的兼容版本
  • 样例数据导入

    • 启动数据库服务
    • 使用root登录进入数据库,创建名为java_lab2的数据库
      1. CREATE DATABASE java_lab2;
    • 创建名为java的用户,设置其密码为javajava,并授予其在java_lab2上的所有权限
      1. GRANT ALL ON java_lab2.* TO 'java'@'localhost' IDENTIFIED BY 'javajava';
      2. FLUSH PREVILEGES;
    • 使用java用户登录java_lab2数据库,并运行source sample_data.sql来初始化数据
    • 由于数据库名称、用户名以及密码均硬编码在程序中,因此上述信息不可更改
  • 使启动数据库服务维持启动状态

  • 运行out文件夹下的hims.jar,可以在命令行中运行java -jar hims.jar,也可直接在文件管理器中点击(需要java在PATH环境变量中并正确的设置MIME TYPE)

上传的附件 cloud_download 基于JAVA和MYSQL的医院简易挂号管理系统.7z ( 4.19mb, 169次下载 )
error_outline 下载需要14点积分

keyboard_arrow_left上一篇 : 基于PHP和MYSQL数据库实现的网上图书管理系统 基于JAVA的局域网聊天软件的设计与实现(仿制QQ) : 下一篇keyboard_arrow_right



simpleLove
2019-03-10 13:54:46
使用JAVA FX和MYSQL实现的医院简易挂号管理系统
xiaoyubb
2019-04-09 22:07:21
使用JAVA FX和MYSQL实现的医院简易挂号管理系统
ddong
2019-12-26 18:08:14
基于JAVA和MYSQL的医院简易挂号管理系统
阿兴小朋友
2020-01-08 16:04:22
你好,下载完成后怎么打不开

发送私信

成功一定有方法,失败一定有原因

7
文章数
9
评论数
最近文章
eject