一、实验目的与要求
1.根据病人在门诊挂号的场景进行数据库设计,至少应包含医生、病人、门诊科室、挂号记录。业务流程如图1,登陆暂不实现。
2.了解DAO设计范式,为各个类分别设计DAO。
3.在测试类中调用DAO方法模拟挂号业务并向数据库中写入挂号记录。
4.在测试类中按从数据库中查询挂号记录并展示挂号记录。
二、实验设计
1.文件结构
tip:lib文件夹同样需要自行新建并且粘贴jar文件
我们首先在src目录下新建三个文件夹,分别为model dao和F文件夹
分别用于 储存类代码 储存数据库执行语句代码 和 储存交互操作代码
2.数据库表的建立与类的初始化
因为java是面向对象的语言,这就决定了其非常适合用于处理数据库操作
数据库的每一张表代表着一个对象,而对象的属性就是表的列名。
而java每一个类代表着一个对象,而对象的属性就是类的属性
让我们结合AR图来决定数据库里需要哪些元素。
病人:病人id(主键) 病人姓名 病人挂号科室名字
医生:医生id(主键) 医生负责科室名字
科室:科室id(主键) 科室名字 科室描述 科室类型
记录:记录id(主键) 负责医生id 挂号病人id 挂号科室名字 挂号时间
在数据库初始化后,在model包里新建不同的类以用来储存
此处类均省略getter和setter方法,只展示构造函数
(1)Dept类
(2)Doc类
(3)Pat类
(4)Record类
3.Dao的编写
由于dao的增删改查需要根据数据库的操作,增加或者减少不同的属性,在此只展示核心
(1)连接数据库函数
public static Connection getConnection(){
Connection conn=null;
try{
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/kunkun","root","123456");
return conn;
} catch (Exception e){
e.printStackTrace();
}
return conn;
}
public static void release(PreparedStatement pstmt,Connection conn){
release(null,pstmt,conn);
}
public static void release(ResultSet rs,PreparedStatement pstmt,Connection conn){
try{
if(rs!=null){
rs.close();
}
if(pstmt!=null){
pstmt.close();
}
if(conn!=null)
{
conn.close();
}
}catch (SQLException e){
e.printStackTrace();
}
}
(2)增删改查
重点!!!由于连接数据库进行增删改查操作占用一定内存,我们希望(连接数据库,操作,退出操作)这三者只在需要进行数据库操作时才进行,而不是一开始就连接上,所以举个例子
这是一个查询函数
解读一下,当我们引用这个函数的时候,我们给他一个科室类的变量,他会在科室表中查找这个变量的name属性,如果,name属性有对应的值,则将flag置为true,并作为返回值,这样我们就知道这样的一个科室名字是合理存在的。
其他函数类似
4.main函数的编写
main函数是实现流程的主要,其中一些操作我们可以集合到函数,最后在main函数中引用即可
public class Main {
static Scanner reader = new Scanner(System.in);
public static void main(String[] args) {
Delete();
Set();
boolean flag=true;
while(flag){
System.out.print("欢迎来到坤坤的医院,请输入你的身份(病人/医生)" + "\n");
String a = reader.next();
if (Objects.equals(a, "医生")) {
ControlDoc();
System.out.print("您已经完成了您的工作" + "\n");
}else if (Objects.equals(a, "病人")) {
DengLu();
}
System.out.print("退出请按a"+" "+"重新登录请按任意键");
String b = reader.next();
if(Objects.equals(b,"a")){
flag=false;
}
}
}
}
(1)进入main函数
Delete();
Set();
初始化,将病房信息引入数据库里
其他代码略写
(2)进入主要操作平台
while(flag){
System.out.print("欢迎来到坤坤的医院,请输入你的身份(病人/医生)" + "\n");
String a = reader.next();
if (Objects.equals(a, "医生")) {
ControlDoc();
System.out.print("您已经完成了您的工作" + "\n");
}else if (Objects.equals(a, "病人")) {
GuaHao();
}
System.out.print("退出请按a"+" "+"重新登录请按任意键");
String b = reader.next();
if(Objects.equals(b,"a")){
flag=false;
}
}
a.病人
如果是病人,则引入挂号界面——跳转DengLu函数
输入姓名则进入类似病人主页界面,病人通过输入不同数字选择不同操作
public static void GuaHao() {
Integer b=PatDao.selectKey3();
System.out.print("这是您新挂号的ID:"+(b+1));
System.out.print("请输入您的姓名"+"\n");
String a1 = reader.next();
Pat pat=new Pat(b+1,a1);
PatDao.insert(pat);
ControlPat(b+1);
}
public static void ControlPat(Integer a){
boolean flag=true;
while(flag){
System.out.print("请选择操作"+"\n"+"1.挂号"+"\n"+"2.查看挂号记录"+"\n"+"3.退出"+"\n");
String t=reader.next();
switch (t){
case "1":{
List<Dept> deptList= DeptDao.selectAll();
for(Dept dept : deptList) {
System.out.printf("科室名字为" + dept.getName() + " 科室描述为" + dept.getDes() + " 科室类型为" + dept.getType()+"\n");
}
System.out.print("请输入需要挂号的科室名字");
String c=reader.next();
Dept dept=new Dept();
dept.setName(c);
boolean k=DeptDao.selectIs(dept);
if(!k){
System.out.print("挂号的科室名字有误!");
break;
}
Doc doc=new Doc();
doc.setRoomName(c);
Integer id= DocDao.selectDocId(doc);
Pat pat=new Pat(a,null,c);
Integer o=1;
Integer m= RecordDao.selectKey1();
if(m!=null){
o=m;
}
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate= sdf.format(date);
Record record=new Record(o,id,a,c,strDate);
RecordDao.insert(record);
PatDao.update(pat);
break;
}
case "2":{
Record record=new Record(a);
List<Record> list=RecordDao.select(record);
System.out.println("这是您所有的就诊记录,如需报销可保留此发票"+"\n");
for(Record record1 : list) {
System.out.printf("就诊记录id为" + record1.getId() + " 病人id为" + record1.getPat_id() + " 就诊科室名字为" + record1.getRoom_name() + " 就诊日期为" +
record1.getDate() + "\n");
}break;
}
case "3":{
flag=false;
break;
}
}
}
}
键入完成后,病人就能完成一次挂号操作,并重新返回平台,如果需要可以继续挂号。
或者查看自己的挂号记录
b.医生
public class DealDoc {
static Scanner reader = new Scanner(System.in);
public static void ControlDoc() {
boolean flag=true;
System.out.print("请输入你的id"+"\n");
Integer b = reader.nextInt();
Doc doc1 = new Doc(b);
boolean e = DocDao.selectYes(doc1);
if(!e){
flag=false;
}
String g=DocDao.selectRoomName(doc1);
while(flag){
System.out.print("请选择操作"+"\n"+"1.显示病人列表"+"\n"+"2.对指定时间进行查询统计"+"\n"+"3.退出"+"\n");
String t=reader.next();
switch (t){
case "1":{
Doc doc=new Doc(b,g);
List<Pat> list1=PatDao.DocSelect(doc);
System.out.println("以下为您负责科室的病人名单"+"\n");
for(Pat pat3 : list1){
System.out.printf("病人id为"+pat3.getId()+"\n"+"病人姓名为"+pat3.getName()+"\n"+"病人科室名字为"+pat3.getRoom_name()+"\n");
}
break;
}
case "2":{
List<Record> list=RecordDao.selectKey2();
List<Record> list1=RecordDao.selectKey3();
for(Record record : list){
System.out.printf("白天病例id为"+record.getId()+"\n"+"病人id为"+record.getPat_id()+"\n"+"病人科室名字为"+record.getRoom_name()+"\n");
}
for(Record record : list1){
System.out.printf("非白天病例id为"+record.getId()+"\n"+"病人id为"+record.getPat_id()+"\n"+"病人科室名字为"+record.getRoom_name()+"\n");
}
break;
}
case "3":{
flag=false;
break;
}
}
}
}
}
(3)输入a退出,其他任意则会重新登录
版权归原作者 laobaba_ 所有, 如有侵权,请联系我们删除。