【java】【面对对象高级7】阶段实战 医院挂号系统

news2024/11/18 11:45:41

目录

1 要求

2 创建项目与模块 

2.1 创建项目

2.2 创建模块

2.3 创建包

3 新增实体类

3.1 看诊排班信息Schedule类

3.2 医生Doctor类

3.3 科室Department类

3.4 预约信息Appointment类

4 新增实现HospitalManager类

4.1  新增欢迎信息

4.2 添加科室addDepartment方法

4.3 添加医生

4.3.1 封装选择科室getDepartmentByUser方法

4.3.2 添加医生方法addDoctor

4.4 添加医生坐诊

4.4.1 封装更新当前到未来6天时间的updateSchedules方法

4.4.2 封装更新每一天坐诊详情updateDoctorSchedule方法

4.4.3 添加医生坐诊setDoctorJob方法

4.5 新增全部医生坐诊详情showAllDoctorInfo方法

5 主函数APP


前言:通过高级的学习,通过医院挂号系统来巩固学习知识点

1 要求

2 创建项目与模块 

2.1 创建项目

2.2 创建模块

2.3 创建包

3 新增实体类

3.1 看诊排班信息Schedule类

package com.runa.bean;

import java.time.LocalDate;
import java.time.LocalTime;


public class Schedule {
    // 某一天
    private LocalDate toaday;
    private boolean update; //是否排班过,默认未排班
    // 上午
    private boolean morning; //是否看诊
    private LocalTime mstart; // 看诊开始时间 09:00:00
    private LocalTime mend; // 看诊结束时间 12:00:00
    private int mTotalNumber; // 接诊总人数
    private int mAppointNumber; // 当前预约人数
    // 下午
    private boolean afternoon; //是否看诊
    private LocalTime astart; // 看诊开始时间 14:00:00
    private LocalTime aend;   // 看诊结束时间 17:00:00
    private int aTotalNumber; // 接诊总人数
    private int aAppointNumber; // 当前预约人数



    public LocalDate getToaday() {
        return toaday;
    }

    public void setToaday(LocalDate toaday) {
        this.toaday = toaday;
    }
    public boolean isUpdate() {
        return update;
    }

    public void setUpdate(boolean update) {
        this.update = update;
    }

    public boolean isMorning() {
        return morning;
    }

    public void setMorning(boolean morning) {
        this.morning = morning;
    }

    public LocalTime getMstart() {
        return mstart;
    }

    public void setMstart(LocalTime mstart) {
        this.mstart = mstart;
    }

    public LocalTime getMend() {
        return mend;
    }

    public void setMend(LocalTime mend) {
        this.mend = mend;
    }

    public int getmTotalNumber() {
        return mTotalNumber;
    }

    public void setmTotalNumber(int mTotalNumber) {
        this.mTotalNumber = mTotalNumber;
    }

    public int getmAppointNumber() {
        return mAppointNumber;
    }

    public void setmAppointNumber(int mAppointNumber) {
        this.mAppointNumber = mAppointNumber;
    }

    public boolean isAfternoon() {
        return afternoon;
    }

    public void setAfternoon(boolean afternoon) {
        this.afternoon = afternoon;
    }

    public LocalTime getAstart() {
        return astart;
    }

    public void setAstart(LocalTime astart) {
        this.astart = astart;
    }

    public LocalTime getAend() {
        return aend;
    }

    public void setAend(LocalTime aend) {
        this.aend = aend;
    }

    public int getaTotalNumber() {
        return aTotalNumber;
    }

    public void setaTotalNumber(int aTotalNumber) {
        this.aTotalNumber = aTotalNumber;
    }

    public int getaAppointNumber() {
        return aAppointNumber;
    }

    public void setaAppointNumber(int aAppointNumber) {
        this.aAppointNumber = aAppointNumber;
    }
}

3.2 医生Doctor类

package com.runa.bean;

import java.time.LocalDate;
import java.util.ArrayList;

// 医生类
public class Doctor {
    private String docrotId; // 编号
    private  String name; // 姓名
    private  String departmentName; //部门
    private  String gender;  // 性别
    private  String age; //年龄
    private  String specialty; //  主治方向
    private LocalDate joinDate; //入职日期
    private ArrayList<Schedule> schedules = new ArrayList<>();

    public String getDocrotId() {
        return docrotId;
    }

    public void setDocrotId(String docrotId) {
        this.docrotId = docrotId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDepartmentName() {
        return departmentName;
    }

    public void setDepartmentName(String departmentName) {
        this.departmentName = departmentName;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getSpecialty() {
        return specialty;
    }

    public void setSpecialty(String specialty) {
        this.specialty = specialty;
    }

    public LocalDate getJoinDate() {
        return joinDate;
    }

    public void setJoinDate(LocalDate joinDate) {
        this.joinDate = joinDate;
    }

    public ArrayList<Schedule> getSchedules() {
        return schedules;
    }

    public void setSchedules(ArrayList<Schedule> schedules) {
        this.schedules = schedules;
    }
}

3.3 科室Department类

package com.runa.bean;

import java.util.ArrayList;

// 科室类
public class Department {
    private String name;  // 科室名
    private ArrayList<Doctor> doctors = new ArrayList<>();  //医生集合


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public ArrayList<Doctor> getDoctors() {
        return doctors;
    }

    public void setDoctors(ArrayList<Doctor> doctors) {
        this.doctors = doctors;
    }
}

3.4 预约信息Appointment类

package com.runa.bean;

import java.time.LocalDateTime;

// 预约类
public class Appointment {
    // 包含预约信息、患者信息、所选医生、状态等属性
    private String username; //患者姓名
    private char sex; //患者性别
    private int age;  //患者年龄
    private String tel; //患者电话
    private String desc; //病情描述
    private String departName; // 所挂科室名称
    private String doctorId; // 所挂医生编号
    private LocalDateTime appointDataTime; // 预约时间

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public String getDepartName() {
        return departName;
    }

    public void setDepartName(String departName) {
        this.departName = departName;
    }

    public String getDoctorId() {
        return doctorId;
    }

    public void setDoctorId(String doctorId) {
        this.doctorId = doctorId;
    }

    public LocalDateTime getAppointDataTime() {
        return appointDataTime;
    }

    public void setAppointDataTime(LocalDateTime appointDataTime) {
        this.appointDataTime = appointDataTime;
    }
}

4 新增实现HospitalManager类

4.1  新增欢迎信息

package com.runa.frame;

import com.runa.bean.Appointment;
import com.runa.bean.Department;

import java.util.ArrayList;
import java.util.Scanner;

public class HospitalManager {
    // 1 系统需要存储全部科室信息
    private ArrayList<Department> alldepartments = new ArrayList<>();

    // 2 系统需要记录全部的预约详情
    private ArrayList<Appointment> appointments = new ArrayList<>();
    private Scanner sc = new Scanner(System.in);

    public void start(){
        while (true) {
            System.out.println("====欢迎进入新华医院信息管理系统====");
            System.out.println("1、 科室管理-添加科室");
            System.out.println("2、 科室管理-删除科室");
            System.out.println("3、 科室管理-修改科室");
            System.out.println("4、 医生管理-录入医生");
            System.out.println("5、 医生管理-医生坐诊设置(可设置当天和未来6天的坐诊情况)");
            System.out.println("6、 医生管理-展示全部医生的坐诊详情(当天和未来6天的坐诊详情)");
            System.out.println("7、 医生管理-挂号预约");
            System.out.println("8、 搜索某个医生当前和未来6天内的病人预约详情(展示每天预约病人的具体信息)");
            System.out.println("请输入操作命令:");
            switch (sc.next()){
                case "1":
                    // addDepartment();
                    break;
    //            case "2":
    //                // addDepartment();
    //                break;
                case "3":
                    // addDoctor();
                    break;
    //            case "4":
    //                // addDepartment();
    //                break;
                case "5":
                    // setDoctorJob();
                    break;
    //            case "6":
    //                // addDepartment();
    //                break;
    //            case "7":
    //                // addDepartment();
    //                break;
    //            case "8":
    //                // addDepartment();
    //                break;
                default:
                    System.out.println("当前输入有误,请重新输入!");


            }
        }

    }

}

4.2 添加科室addDepartment方法

package com.runa.frame;

import com.runa.bean.Appointment;
import com.runa.bean.Department;

import java.util.ArrayList;
import java.util.Scanner;

public class HospitalManager {
    // 1 系统需要存储全部科室信息
    private ArrayList<Department> alldepartments = new ArrayList<>();

    // 2 系统需要记录全部的预约详情
    private ArrayList<Appointment> appointments = new ArrayList<>();
    private Scanner sc = new Scanner(System.in);

    public void start(){
        while (true) {
            System.out.println("====欢迎进入新华医院信息管理系统====");
            System.out.println("1、 科室管理-添加科室");
            System.out.println("2、 科室管理-删除科室");
            System.out.println("3、 科室管理-修改科室");
            System.out.println("4、 医生管理-录入医生");
            System.out.println("5、 医生管理-医生坐诊设置(可设置当天和未来6天的坐诊情况)");
            System.out.println("6、 医生管理-展示全部医生的坐诊详情(当天和未来6天的坐诊详情)");
            System.out.println("7、 医生管理-挂号预约");
            System.out.println("8、 搜索某个医生当前和未来6天内的病人预约详情(展示每天预约病人的具体信息)");
            System.out.println("请输入操作命令:");
            switch (sc.next()){
                case "1":
                    addDepartment();
                    break;
    //            case "2":
    //                // addDepartment();
    //                break;
                case "3":
                    // 
                    break;
    //            case "4":
    //                // addDoctor();
    //                break;
                case "5":
                    // setDoctorJob();
                    break;
    //            case "6":
    //                // 
    //                break;
    //            case "7":
    //                // 
    //                break;
    //            case "8":
    //                // 
    //                break;
                default:
                    System.out.println("当前输入有误,请重新输入!");


            }
        }

    }

    // 添加科室
    private void addDepartment(){
        System.out.println("======== 请输入科室名称 ========");
        OUT:
        while (true) {
            System.out.println("请您输入科室名称:");
            String name = sc.next();
            // 判断名称是否存在
            for (int i = 0; i < alldepartments.size(); i++) {
                Department department = alldepartments.get(i);
                if(department.getName().equals(name)) continue OUT;
            }
            Department department = new Department();
            department.setName(name);
            alldepartments.add(department);
            System.out.println("添加   【" + name + "】   科室成功");
            break;
        }


    }

}

4.3 添加医生

4.3.1 封装选择科室getDepartmentByUser方法

    // 封装选择科室
    private Department getDepartmentByUser() {
        if (alldepartments.size() == 0) return null;
        while (true) {

            // 1  选择科室
            System.out.println("请选择科室");
            for (int i = 0; i < alldepartments.size(); i++) {
                Department department = alldepartments.get(i);
                System.out.println((i + 1) + "、" + department.getName());


            }
            System.out.println("请输入:");
            // 2 接收命令
            int command = sc.nextInt();
            if (command < 1 || command > alldepartments.size()) {
                System.out.println("选择有误,请重新确认");
                continue;

            }

            // 3 得到科室
            Department department = alldepartments.get(command - 1);
            return department;


        }

    }

4.3.2 添加医生方法addDoctor

package com.runa.frame;

import com.runa.bean.Appointment;
import com.runa.bean.Department;
import com.runa.bean.Doctor;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.UUID;

public class HospitalManager {
    // 1 系统需要存储全部科室信息
    private ArrayList<Department> alldepartments = new ArrayList<>();

    // 2 系统需要记录全部的预约详情
    private ArrayList<Appointment> appointments = new ArrayList<>();
    private Scanner sc = new Scanner(System.in);

    public void start() {
        while (true) {
            System.out.println("====欢迎进入新华医院信息管理系统====");
            System.out.println("1、 科室管理-添加科室");
            System.out.println("2、 科室管理-删除科室");
            System.out.println("3、 科室管理-修改科室");
            System.out.println("4、 医生管理-录入医生");
            System.out.println("5、 医生管理-医生坐诊设置(可设置当天和未来6天的坐诊情况)");
            System.out.println("6、 医生管理-展示全部医生的坐诊详情(当天和未来6天的坐诊详情)");
            System.out.println("7、 医生管理-挂号预约");
            System.out.println("8、 搜索某个医生当前和未来6天内的病人预约详情(展示每天预约病人的具体信息)");
            System.out.println("请输入操作命令:");
            switch (sc.next()) {
                case "1":
                    addDepartment();
                    break;
                //            case "2":
                //                // addDepartment();
                //                break;
                case "3":
                    break;
                case "4":
                    addDoctor();
                    break;
                case "5":
                    // setDoctorJob();
                    break;
                case "6":
                    // showAllDoctorInfo();
                    break;
                //            case "7":
                //                //
                //                break;
                //            case "8":
                //                //
                //                break;
                default:
                    System.out.println("当前输入有误,请重新输入!");


            }
        }

    }

    // 添加科室
    private void addDepartment() {
        System.out.println("======== 请输入科室名称 ========");
        OUT:
        while (true) {
            System.out.println("请您输入科室名称:");
            String name = sc.next();
            // 判断名称是否存在
            for (int i = 0; i < alldepartments.size(); i++) {
                Department department = alldepartments.get(i);
                if (department.getName().equals(name)) continue OUT;
            }
            Department department = new Department();
            department.setName(name);
            alldepartments.add(department);
            System.out.println("添加   【" + name + "】   科室成功");
            break;
        }


    }

    // 添加医生
    private void addDoctor() {
        System.out.println("======== 录入医生 ========");      
        
        while (true) {
            // 选择科室
            Department department = getDepartmentByUser();
            if(department == null){
                System.out.println("当前无任何科室");
                return;
            }
            Doctor doctor = new Doctor();
            doctor.setDepartmentName(department.getName());

            // 4 录入医生id
            doctor.setDocrotId(UUID.randomUUID().toString());

            // 输入姓名
            System.out.println("请输入医生的姓名:");
            String name = sc.next();
            doctor.setName(name);
            // 输入年龄
            System.out.println("请输入医生的年龄:");
            String sex = sc.next();
            doctor.setAge(sex);

            // 特长
            System.out.println("请输入医生的特长:");
            String specialty = sc.next();
            doctor.setSpecialty(specialty);

            // 入职日期
            System.out.println("请输入医生的入职日期(格式:yyyy-MM-dd):");
            String joinDateString = sc.next();
            LocalDate joinDate = LocalDate.parse(joinDateString);
            doctor.setJoinDate(joinDate);

            // 将医生对象加到所在科室对象 第//3步得到了所在部门信息
            department.getDoctors().add(doctor);
            System.out.println("录入医生到该科室成功");
            break;

        }


    }

    // 封装选择科室
    private Department getDepartmentByUser() {
        if (alldepartments.size() == 0) return null;
        while (true) {

            // 1  选择科室
            System.out.println("请选择科室");
            for (int i = 0; i < alldepartments.size(); i++) {
                Department department = alldepartments.get(i);
                System.out.println((i + 1) + "、" + department.getName());


            }
            System.out.println("请输入:");
            // 2 接收命令
            int command = sc.nextInt();
            if (command < 1 || command > alldepartments.size()) {
                System.out.println("选择有误,请重新确认");
                continue;

            }

            // 3 得到科室
            Department department = alldepartments.get(command - 1);
            return department;


        }

    }


}

4.4 添加医生坐诊

4.4.1 封装更新当前到未来6天时间的updateSchedules方法


    // 封装一个更新当前到未来6天的时间 参数schedules
    private void updateSchedules(ArrayList<Schedule> schedules) {
        if(schedules.size() == 0){
            for (int i = 0; i < 6; i++) {
                Schedule schedule = new Schedule();
                LocalDate now = LocalDate.now();
                schedule.setToaday(now.plusDays(i)); //+1
                schedules.add(schedule);

            }
            return;
        }

        // 去除过期的时间
        for (int i = 0; i < schedules.size(); i++) {
            Schedule schedule = schedules.get(i);
            LocalDate now = LocalDate.now();
            LocalDate current = schedule.getToaday();
            if(current.equals(now)){
                break;
            }
            if(current.isBefore(now)){
                schedules.remove(schedule);
                i--;
            }
        }

        // 补全当前和未来6天的时间【s1, s2, s3,】
        LocalDate last = schedules.get(schedules.size() - 1).getToaday();
        int size = schedules.size();
        for (int i = 0; i < 7 - size; i++) {
            Schedule schedule = new Schedule();
            schedule.setToaday(last.plusDays(i + 1));
            schedules.add(schedule);

        }

    }

4.4.2 封装更新每一天坐诊详情updateDoctorSchedule方法

    // 封装一个更新每一天坐诊详情的方法 参数schedules
    private void updateDoctorSchedule(Schedule schedule) {
        LocalDate today = schedule.getToaday();
        System.out.println(today + "的安排如下:");
        if(!schedule.isUpdate()){
            System.out.println("未排班\t\t\t");
        }else{
            System.out.println("\t上午\t");
            if(schedule.isMorning()){
                System.out.println("坐诊 时间为:" + schedule.getMstart() + "-"
                              + schedule.getMend() + "总数/预约数" + schedule.getmTotalNumber() + "/" + schedule.getmAppointNumber());
            }else{
                System.out.println("休息");
            }
            System.out.println();
            System.out.println("\t下午\t");
            if(schedule.isAfternoon()){
                System.out.println("坐诊 时间为:" + schedule.getAstart() + "-"
                        + schedule.getAend() + "总数/预约数" + schedule.getaTotalNumber() + "/" + schedule.getaAppointNumber());
            }else{
                System.out.println("休息");
            }
        }
        System.out.println("是否修改? y/n");
        String rs = sc.next();
        if("y".equals(rs)){
            schedule.setUpdate(true); // 表示开始排班了
            System.out.println("上午是否上班? y/n");
            String rs2 = sc.next();
            if("y".equals(rs2)){
                schedule.setMorning(true);
                System.out.println("上班的开始时间和结束时间是:");
                String start = sc.next();
                String end = sc.next();
                System.out.println("可预约的人数是:");
                int number = sc.nextInt();
                schedule.setMstart(LocalTime.parse(start));
                schedule.setMstart(LocalTime.parse(end));
                schedule.setmTotalNumber(number);
            }else {
                schedule.setMorning(false);
            }

            
            System.out.println("下午是否上班? y/n");
            String rs3 = sc.next();
            if("y".equals(rs3)){
                schedule.setMorning(true);
                System.out.println("下班的开始时间和结束时间是:");
                String start = sc.next();
                String end = sc.next();
                System.out.println("可预约的人数是:");
                int number = sc.nextInt();
                schedule.setAstart(LocalTime.parse(start));
                schedule.setAstart(LocalTime.parse(end));
                schedule.setaTotalNumber(number);
            }else {
                schedule.setAfternoon(false);
            }

        }

    }

4.4.3 添加医生坐诊setDoctorJob方法

package com.runa.frame;

import com.runa.bean.Appointment;
import com.runa.bean.Department;
import com.runa.bean.Doctor;
import com.runa.bean.Schedule;

import java.time.LocalDate;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.UUID;

public class HospitalManager {
    // 1 系统需要存储全部科室信息
    private ArrayList<Department> alldepartments = new ArrayList<>();

    // 2 系统需要记录全部的预约详情
    private ArrayList<Appointment> appointments = new ArrayList<>();
    private Scanner sc = new Scanner(System.in);

    public void start() {
        while (true) {
            System.out.println("====欢迎进入新华医院信息管理系统====");
            System.out.println("1、 科室管理-添加科室");
            System.out.println("2、 科室管理-删除科室");
            System.out.println("3、 科室管理-修改科室");
            System.out.println("4、 医生管理-录入医生");
            System.out.println("5、 医生管理-医生坐诊设置(可设置当天和未来6天的坐诊情况)");
            System.out.println("6、 医生管理-展示全部医生的坐诊详情(当天和未来6天的坐诊详情)");
            System.out.println("7、 医生管理-挂号预约");
            System.out.println("8、 搜索某个医生当前和未来6天内的病人预约详情(展示每天预约病人的具体信息)");
            System.out.println("请输入操作命令:");
            switch (sc.next()) {
                case "1":
                    addDepartment();
                    break;
                //            case "2":
                //                // ;
                //                break;
                case "3":
                    break;
                case "4":
                    addDoctor();
                    break;
                case "5":
                    setDoctorJob();
                    break;
                case "6":
                    // showAllDoctorInfo();
                    break;
                //            case "7":
                //                //
                //                break;
                //            case "8":
                //                //
                //                break;
                default:
                    System.out.println("当前输入有误,请重新输入!");


            }
        }

    }

    // 添加科室
    private void addDepartment() {
        System.out.println("======== 请输入科室名称 ========");
        OUT:
        while (true) {
            System.out.println("请您输入科室名称:");
            String name = sc.next();
            // 判断名称是否存在
            for (int i = 0; i < alldepartments.size(); i++) {
                Department department = alldepartments.get(i);
                if (department.getName().equals(name)) continue OUT;
            }
            Department department = new Department();
            department.setName(name);
            alldepartments.add(department);
            System.out.println("添加   【" + name + "】   科室成功");
            break;
        }


    }

    // 添加医生
    private void addDoctor() {
        System.out.println("======== 录入医生 ========");

        while (true) {
            // 选择科室
            Department department = getDepartmentByUser();
            if(department == null){
                System.out.println("当前无任何科室");
                return;
            }
            Doctor doctor = new Doctor();
            doctor.setDepartmentName(department.getName());

            // 4 录入医生id
            doctor.setDocrotId(UUID.randomUUID().toString());

            // 输入姓名
            System.out.println("请输入医生的姓名:");
            String name = sc.next();
            doctor.setName(name);
            // 输入年龄
            System.out.println("请输入医生的年龄:");
            String sex = sc.next();
            doctor.setAge(sex);

            // 特长
            System.out.println("请输入医生的特长:");
            String specialty = sc.next();
            doctor.setSpecialty(specialty);

            // 入职日期
            System.out.println("请输入医生的入职日期(格式:yyyy-MM-dd):");
            String joinDateString = sc.next();
            LocalDate joinDate = LocalDate.parse(joinDateString);
            doctor.setJoinDate(joinDate);

            // 将医生对象加到所在科室对象 第//3步得到了所在部门信息
            department.getDoctors().add(doctor);
            System.out.println("录入医生到该科室成功");
            break;

        }


    }


    // 封装选择科室
    private Department getDepartmentByUser() {
        if (alldepartments.size() == 0) return null;
        while (true) {

            // 1  选择科室
            System.out.println("请选择科室");
            for (int i = 0; i < alldepartments.size(); i++) {
                Department department = alldepartments.get(i);
                System.out.println((i + 1) + "、" + department.getName());


            }
            System.out.println("请输入:");
            // 2 接收命令
            int command = sc.nextInt();
            if (command < 1 || command > alldepartments.size()) {
                System.out.println("选择有误,请重新确认");
                continue;

            }

            // 3 得到科室
            Department department = alldepartments.get(command - 1);
            return department;


        }

    }

    private void setDoctorJob(){
        System.out.println("======== 设置医生的坐诊时间 ========");
        // 1 选择科室 ,调用封装的方法
        Department department = getDepartmentByUser();

        // 2 选择医生
        ArrayList<Doctor> doctors = department.getDoctors();
        if(doctors.size() == 0){
            System.out.println("当前科室下无医生~");
            return;
        }

        while (true){
            System.out.println("当前科室下的医生信息如下:");
            for (int i = 0; i < doctors.size(); i++) {
                Doctor doctor = doctors.get(i);
                System.out.println((i + 1 ) + "、" + doctor.getName());

            }
            System.out.println("请输入需要设置坐诊医生的序号:");

            // 3 接收命令
            int command =  sc.nextInt();
            if(command < 1 || command > doctors.size()){
                System.out.println("选择有误,请重新输入~");
                continue;
            }

            Doctor doctor = doctors.get(command - 1);

            // 4 为这个医生设置坐诊情况
            ArrayList<Schedule> schedules = doctor.getSchedules();
            // 更新当前到未来6天的时间 ,调用封装的方法
            updateSchedules(schedules);

            // 5 修改坐诊信息,依次展示这个医生的坐诊详情,为每一天的坐诊添加详情
            for (int i = 0; i < schedules.size(); i++) {
                Schedule schedule = schedules.get(i);
                updateDoctorSchedule(schedule);

            }
            break;
        }

    }

    // 封装一个更新每一天坐诊详情的方法 参数schedules
    private void updateDoctorSchedule(Schedule schedule) {
        LocalDate today = schedule.getToaday();
        System.out.println(today + "的安排如下:");
        if(!schedule.isUpdate()){
            System.out.println("未排班\t\t\t");
        }else{
            System.out.println("\t上午\t");
            if(schedule.isMorning()){
                System.out.println("坐诊 时间为:" + schedule.getMstart() + "-"
                              + schedule.getMend() + "总数/预约数" + schedule.getmTotalNumber() + "/" + schedule.getmAppointNumber());
            }else{
                System.out.println("休息");
            }
            System.out.println();
            System.out.println("\t下午\t");
            if(schedule.isAfternoon()){
                System.out.println("坐诊 时间为:" + schedule.getAstart() + "-"
                        + schedule.getAend() + "总数/预约数" + schedule.getaTotalNumber() + "/" + schedule.getaAppointNumber());
            }else{
                System.out.println("休息");
            }
        }
        System.out.println("是否修改? y/n");
        String rs = sc.next();
        if("y".equals(rs)){
            schedule.setUpdate(true); // 表示开始排班了
            System.out.println("上午是否上班? y/n");
            String rs2 = sc.next();
            if("y".equals(rs2)){
                schedule.setMorning(true);
                System.out.println("上班的开始时间和结束时间是:");
                String start = sc.next();
                String end = sc.next();
                System.out.println("可预约的人数是:");
                int number = sc.nextInt();
                schedule.setMstart(LocalTime.parse(start));
                schedule.setMstart(LocalTime.parse(end));
                schedule.setmTotalNumber(number);
            }else {
                schedule.setMorning(false);
            }


            System.out.println("下午是否上班? y/n");
            String rs3 = sc.next();
            if("y".equals(rs3)){
                schedule.setMorning(true);
                System.out.println("下班的开始时间和结束时间是:");
                String start = sc.next();
                String end = sc.next();
                System.out.println("可预约的人数是:");
                int number = sc.nextInt();
                schedule.setAstart(LocalTime.parse(start));
                schedule.setAstart(LocalTime.parse(end));
                schedule.setaTotalNumber(number);
            }else {
                schedule.setAfternoon(false);
            }

        }

    }

    // 封装一个更新当前到未来6天的时间 参数schedules
    private void updateSchedules(ArrayList<Schedule> schedules) {
        if(schedules.size() == 0){
            for (int i = 0; i < 6; i++) {
                Schedule schedule = new Schedule();
                LocalDate now = LocalDate.now();
                schedule.setToaday(now.plusDays(i)); //+1
                schedules.add(schedule);

            }
            return;
        }

        // 去除过期的时间
        for (int i = 0; i < schedules.size(); i++) {
            Schedule schedule = schedules.get(i);
            LocalDate now = LocalDate.now();
            LocalDate current = schedule.getToaday();
            if(current.equals(now)){
                break;
            }
            if(current.isBefore(now)){
                schedules.remove(schedule);
                i--;
            }
        }

        // 补全当前和未来6天的时间【s1, s2, s3,】
        LocalDate last = schedules.get(schedules.size() - 1).getToaday();
        int size = schedules.size();
        for (int i = 0; i < 7 - size; i++) {
            Schedule schedule = new Schedule();
            schedule.setToaday(last.plusDays(i + 1));
            schedules.add(schedule);

        }

    }

}

4.5 新增全部医生坐诊详情showAllDoctorInfo方法

package com.runa.frame;

import com.runa.bean.Appointment;
import com.runa.bean.Department;
import com.runa.bean.Doctor;
import com.runa.bean.Schedule;

import java.time.LocalDate;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.UUID;

public class HospitalManager {
    // 1 系统需要存储全部科室信息
    private ArrayList<Department> alldepartments = new ArrayList<>();

    // 2 系统需要记录全部的预约详情
    private ArrayList<Appointment> appointments = new ArrayList<>();
    private Scanner sc = new Scanner(System.in);

    public void start() {
        while (true) {
            System.out.println("====欢迎进入新华医院信息管理系统====");
            System.out.println("1、 科室管理-添加科室");
            System.out.println("2、 科室管理-删除科室");
            System.out.println("3、 科室管理-修改科室");
            System.out.println("4、 医生管理-录入医生");
            System.out.println("5、 医生管理-医生坐诊设置(可设置当天和未来6天的坐诊情况)");
            System.out.println("6、 医生管理-展示全部医生的坐诊详情(当天和未来6天的坐诊详情)");
            System.out.println("7、 医生管理-挂号预约");
            System.out.println("8、 搜索某个医生当前和未来6天内的病人预约详情(展示每天预约病人的具体信息)");
            System.out.println("请输入操作命令:");
            switch (sc.next()) {
                case "1":
                    addDepartment();
                    break;
                //            case "2":
                //                // ;
                //                break;
                case "3":
                    break;
                case "4":
                    addDoctor();
                    break;
                case "5":
                    setDoctorJob();
                    break;
                case "6":
                    showAllDoctorInfo();
                    break;
                //            case "7":
                //                //
                //                break;
                //            case "8":
                //                //
                //                break;
                default:
                    System.out.println("当前输入有误,请重新输入!");


            }
        }

    }

    // 展示全部医生的坐诊详情
    private void showAllDoctorInfo() {
        System.out.println("======== 全部医生坐诊的详情如下 ========");
        for (int i = 0; i < alldepartments.size(); i++) {
            Department department = alldepartments.get(i);
            System.out.println((i + 1) + ", " + department.getName());
            System.out.println("-----------------------------------------------------------------------------------");
            ArrayList<Doctor> doctors = department.getDoctors();
            for (int j = 0; j < doctors.size(); j++) {
                Doctor doctor = doctors.get(i);
                System.out.println(doctor.getName() + "医生的坐诊信息如下:");
                ArrayList<Schedule> schedules = doctor.getSchedules();
                updateSchedules(schedules); //更新一下时间
                for (int k = 0; k < schedules.size(); k++) {
                    Schedule schedule = schedules.get(k);
                    System.out.println(schedule.getToaday());
                    if(!schedule.isUpdate()){
                        System.out.println("未排班\t\t\t");
                        continue;
                    }

                    if(schedule.isMorning()){
                        System.out.println("上午" + schedule.getMstart() + "-" + schedule.getMend()
                        + " 总数/已预约" + schedule.getmTotalNumber() + "/" + schedule.getmTotalNumber());
                    } else {
                        System.out.println("上午 休息");
                    }

                    if(schedule.isAfternoon()){
                        System.out.println("下午" + schedule.getAstart() + "-" + schedule.getAend()
                                + " 总数/已预约" + schedule.getaTotalNumber() + "/" + schedule.getaTotalNumber());
                    } else {
                        System.out.println("下午 休息");
                    }

                }

            }
        }
    }

    // 添加科室
    private void addDepartment() {
        System.out.println("======== 请输入科室名称 ========");
        OUT:
        while (true) {
            System.out.println("请您输入科室名称:");
            String name = sc.next();
            // 判断名称是否存在
            for (int i = 0; i < alldepartments.size(); i++) {
                Department department = alldepartments.get(i);
                if (department.getName().equals(name)) continue OUT;
            }
            Department department = new Department();
            department.setName(name);
            alldepartments.add(department);
            System.out.println("添加   【" + name + "】   科室成功");
            break;
        }


    }

    // 添加医生
    private void addDoctor() {
        System.out.println("======== 录入医生 ========");

        while (true) {
            // 选择科室
            Department department = getDepartmentByUser();
            if(department == null){
                System.out.println("当前无任何科室");
                return;
            }
            Doctor doctor = new Doctor();
            doctor.setDepartmentName(department.getName());

            // 4 录入医生id
            doctor.setDocrotId(UUID.randomUUID().toString());

            // 输入姓名
            System.out.println("请输入医生的姓名:");
            String name = sc.next();
            doctor.setName(name);
            // 输入年龄
            System.out.println("请输入医生的年龄:");
            String sex = sc.next();
            doctor.setAge(sex);

            // 特长
            System.out.println("请输入医生的特长:");
            String specialty = sc.next();
            doctor.setSpecialty(specialty);

            // 入职日期
            System.out.println("请输入医生的入职日期(格式:yyyy-MM-dd):");
            String joinDateString = sc.next();
            LocalDate joinDate = LocalDate.parse(joinDateString);
            doctor.setJoinDate(joinDate);

            // 将医生对象加到所在科室对象 第//3步得到了所在部门信息
            department.getDoctors().add(doctor);
            System.out.println("录入医生到该科室成功");
            break;

        }


    }


    // 封装选择科室
    private Department getDepartmentByUser() {
        if (alldepartments.size() == 0) return null;
        while (true) {

            // 1  选择科室
            System.out.println("请选择科室");
            for (int i = 0; i < alldepartments.size(); i++) {
                Department department = alldepartments.get(i);
                System.out.println((i + 1) + "、" + department.getName());


            }
            System.out.println("请输入:");
            // 2 接收命令
            int command = sc.nextInt();
            if (command < 1 || command > alldepartments.size()) {
                System.out.println("选择有误,请重新确认");
                continue;

            }

            // 3 得到科室
            Department department = alldepartments.get(command - 1);
            return department;


        }

    }

    private void setDoctorJob(){
        System.out.println("======== 设置医生的坐诊时间 ========");
        // 1 选择科室 ,调用封装的方法
        Department department = getDepartmentByUser();

        // 2 选择医生
        ArrayList<Doctor> doctors = department.getDoctors();
        if(doctors.size() == 0){
            System.out.println("当前科室下无医生~");
            return;
        }

        while (true){
            System.out.println("当前科室下的医生信息如下:");
            for (int i = 0; i < doctors.size(); i++) {
                Doctor doctor = doctors.get(i);
                System.out.println((i + 1 ) + "、" + doctor.getName());

            }
            System.out.println("请输入需要设置坐诊医生的序号:");

            // 3 接收命令
            int command =  sc.nextInt();
            if(command < 1 || command > doctors.size()){
                System.out.println("选择有误,请重新输入~");
                continue;
            }

            Doctor doctor = doctors.get(command - 1);

            // 4 为这个医生设置坐诊情况
            ArrayList<Schedule> schedules = doctor.getSchedules();
            // 更新当前到未来6天的时间 ,调用封装的方法
            updateSchedules(schedules);

            // 5 修改坐诊信息,依次展示这个医生的坐诊详情,为每一天的坐诊添加详情
            for (int i = 0; i < schedules.size(); i++) {
                Schedule schedule = schedules.get(i);
                updateDoctorSchedule(schedule);

            }
            break;
        }

    }

    // 封装一个更新每一天坐诊详情的方法 参数schedules
    private void updateDoctorSchedule(Schedule schedule) {
        LocalDate today = schedule.getToaday();
        System.out.println(today + "的安排如下:");
        if(!schedule.isUpdate()){
            System.out.println("未排班\t\t\t");
        }else{
            System.out.println("\t上午\t");
            if(schedule.isMorning()){
                System.out.println("坐诊 时间为:" + schedule.getMstart() + "-"
                              + schedule.getMend() + "总数/预约数" + schedule.getmTotalNumber() + "/" + schedule.getmAppointNumber());
            }else{
                System.out.println("休息");
            }
            System.out.println();
            System.out.println("\t下午\t");
            if(schedule.isAfternoon()){
                System.out.println("坐诊 时间为:" + schedule.getAstart() + "-"
                        + schedule.getAend() + "总数/预约数" + schedule.getaTotalNumber() + "/" + schedule.getaAppointNumber());
            }else{
                System.out.println("休息");
            }
        }
        System.out.println("是否修改? y/n");
        String rs = sc.next();
        if("y".equals(rs)){
            schedule.setUpdate(true); // 表示开始排班了
            System.out.println("上午是否上班? y/n");
            String rs2 = sc.next();
            if("y".equals(rs2)){
                schedule.setMorning(true);
                System.out.println("上班的开始时间和结束时间是:");
                String start = sc.next();
                String end = sc.next();
                System.out.println("可预约的人数是:");
                int number = sc.nextInt();
                schedule.setMstart(LocalTime.parse(start));
                schedule.setMstart(LocalTime.parse(end));
                schedule.setmTotalNumber(number);
            }else {
                schedule.setMorning(false);
            }


            System.out.println("下午是否上班? y/n");
            String rs3 = sc.next();
            if("y".equals(rs3)){
                schedule.setMorning(true);
                System.out.println("下班的开始时间和结束时间是:");
                String start = sc.next();
                String end = sc.next();
                System.out.println("可预约的人数是:");
                int number = sc.nextInt();
                schedule.setAstart(LocalTime.parse(start));
                schedule.setAstart(LocalTime.parse(end));
                schedule.setaTotalNumber(number);
            }else {
                schedule.setAfternoon(false);
            }

        }

    }

    // 封装一个更新当前到未来6天的时间 参数schedules
    private void updateSchedules(ArrayList<Schedule> schedules) {
        if(schedules.size() == 0){
            for (int i = 0; i < 6; i++) {
                Schedule schedule = new Schedule();
                LocalDate now = LocalDate.now();
                schedule.setToaday(now.plusDays(i)); //+1
                schedules.add(schedule);

            }
            return;
        }

        // 去除过期的时间
        for (int i = 0; i < schedules.size(); i++) {
            Schedule schedule = schedules.get(i);
            LocalDate now = LocalDate.now();
            LocalDate current = schedule.getToaday();
            if(current.equals(now)){
                break;
            }
            if(current.isBefore(now)){
                schedules.remove(schedule);
                i--;
            }
        }

        // 补全当前和未来6天的时间【s1, s2, s3,】
        LocalDate last = schedules.get(schedules.size() - 1).getToaday();
        int size = schedules.size();
        for (int i = 0; i < 7 - size; i++) {
            Schedule schedule = new Schedule();
            schedule.setToaday(last.plusDays(i + 1));
            schedules.add(schedule);

        }

    }

}

5 主函数APP

package com.runa;

import com.runa.frame.HospitalManager;

public class APP {
    public static void main(String[] args) {
        // 1  创建医院管理对象
        HospitalManager h = new HospitalManager();
        h.start();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/826655.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3实现6位验证码输入框,用户可以连续输入和删除

实现代码 可以随意填写删除 <template><div class"verification-container"><inputv-for"(code, index) in verificationCodes":key"index"v-model"verificationCodes[index]"input"handleInput(index, $event…

Linux系统控制文件和目录权限

0.前言 并非操作系统的每个用户都应具有相同级别的文件和目录访问权限&#xff0c;与任何专业操作系统一样&#xff0c;Linux具有保护文件和目录访问的方法。系统允许系统管理员(root用户或文件所属用户)通过赋予用户读取&#xff0c;写入或执行文件的权限来保护其文件免受不必…

生成对抗网络DCGAN学习

在AI内容生成领域&#xff0c;有三种常见的AI模型技术&#xff1a;GAN、VAE、Diffusion。其中&#xff0c;Diffusion是较新的技术&#xff0c;相关资料较为稀缺。VAE通常更多用于压缩任务&#xff0c;而GAN由于其问世较早&#xff0c;相关的开源项目和科普文章也更加全面&#…

如何在 Ubuntu 上部署 ONLYOFFICE 协作空间社区版?

ONLYOFFICE 协作空间是一个在线协作平台&#xff0c;帮助您更好地与客户、业务合作伙伴、承包商及第三方进行文档协作。今天我们来介绍一下&#xff0c;如何在 Ubuntu 上安装协作空间的自托管版。 ONLYOFFICE 协作空间主要功能 使用 ONLYOFFICE 协作空间&#xff0c;您可以&am…

Golang 函数参数的传递方式 值传递,引用传递

基本介绍 我们在讲解函数注意事项和使用细节时&#xff0c;已经讲过值类型和引用类型了&#xff0c;这里我们再系统总结一下&#xff0c;因为这是重难点&#xff0c;值类型参数默认就是值传递&#xff0c;而引用类型参数默认就是引用传递。 两种传递方式&#xff08;函数默认都…

MySQL数据库备份

目录 一、概述 二、数据备份的重要性 三、造成数据丢失的原因 四、备份类型 五、常见的备份方法 六、备份 一、概述 数据库备份是指将数据库中的数据、表格、视图、存储过程、触发器等信息备份到另一个地方&#xff0c;以便在数据库丢失或损坏时进行恢复。数据库备份是数…

以CS32F031为例浅说国产32位MCU的内核处理器

芯片内核又称CPU内核&#xff0c;它是CPU中间的核心芯片&#xff0c;是CPU最重要的组成部分。由单晶硅制成&#xff0c;CPU所有的计算、接受/存储命令、处理数据都由核心执行。各种CPU核心都具有固定的逻辑结构&#xff0c;一级缓存、二级缓存、执行单元、指令级单元和总线接口…

【C++】string类

目录 &#x1f31e;专栏导读 &#x1f31b;为什么学习string类&#xff1f; ⭐C语言中的字符串 &#x1f31b;标准库中的string类 ⭐基本使用string ⭐string类的常用接口 ⭐总结&#xff1a; &#x1f31b;范围for的使用 &#x1f31e;专栏导读 &#x1f31f;作者简介…

docker更换数据存储路径

1. 先停掉docker服务 sudo systemctl stop docker 可能会出现的问题&#xff1a; 这样会导致docker关闭失败,解决办法&#xff1a;systemctl stop docker.socket 确保docker关闭: 2.备份现在的 Docker 数据存储目录 /var/lib/docker(默认路径) mv /var/lib/docker /var/lib/…

高斯函数的傅里叶变换与离散化频谱分析

1 高斯函数的傅里叶变换 主要参考自 http://www.cse.yorku.ca/~kosta/CompVis_Notes/fourier_transform_Gaussian.pdf 对于中心化的高斯函数&#xff0c;即 g ( x ) 1 2 π σ e − x 2 2 σ 2 , (1.1) g\left( x \right) \frac{1}{{\sqrt {2\pi } \sigma }}{e^{ - \frac{{{x…

【有趣的】关于Map的一些小测试

Map在代码中用到得非常多&#xff0c;它是无序的、key-value结构的&#xff0c;其读取会非常快。 今天看了个小文章Map判空 、空字符串、空key值等各种判断方法&#xff0c;你都掌握了吗&#xff1f;便自己也玩一下。 一、判空 因为对象已经new出来了&#xff0c;所以map指向的…

【洁洁送书第三期】人性的光辉,python之光

这里写目录标题 python学习现状python之光亮点python学习配套视频python之光目录强力推荐 python学习现状 作为生产力工具&#xff0c;Python是当今极为流行的编程语言。Python编程逐渐成为一项通用能力&#xff0c;从小学生到各个行业的从业人员都在学Python。Python确实能够…

高忆管理:多重利好共振 外资加码布局A股

资本商场活泼信号正在继续开释&#xff0c;内外资决心取得有力提振。以北向资金为代表的外资近来表现活泼&#xff0c;近六个买卖日已连续净买入超500亿元。多家外资组织近期表态称&#xff0c;伴跟着方针力度加强&#xff0c;我国经济有望继续复苏&#xff0c;活泼看好我国权益…

优思学院|质量工程师应具备什么能力?

质量工程师是一个需要耐心、细心、坚持态度、沟通能力、协调能力的工作&#xff0c;更需要持续学习强化自身的专业知识。 质量工程师负责审核、客户投诉的调查、过程的改进以达到质量之提升&#xff0c;他們也必须要预警生产线风险、质量异常&#xff0c;并且协调不同的部門一…

【雕爷学编程】Arduino动手做(181)---Maixduino AI开发板2

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

[语义分割] ASPP不同版本对比(DeepLab、DeepLab v1、DeepLab v2、DeepLab v3、DeepLab v3+、LR-ASPP)

1. 引言 1.1 本文目的 本文主要对前段时间学习的 ASPP 模块进行对比&#xff0c;涉及到的 ASPP 有&#xff1a; ASPP in DeepLab v2&#xff0c;简称 ASPP v2ASPP in DeepLab v3&#xff0c;简称 ASPP v3ASPP in DeepLab v3&#xff0c;简称 ASPP v3ASPP in MobileNet v3&am…

开发提测?

前言 开发提测是正式开始测试的重要关卡&#xff0c;提测质量的好坏会直接影响测试阶段的效率&#xff0c;进而影响项目进度。较好的提测质量&#xff0c;对提高测试效率和优化项目进度有着事半功倍的作用。如何更好的推进开发提高提测质量呢&#xff1f;下面小编结合自己项目…

攻防世界-web-lottery

题目描述&#xff1a;里面有个附件&#xff0c;是网站的源代码&#xff0c;还有一个链接&#xff0c;是线上的网站 主页告诉了我们规则&#xff1a; 1. 每个人的初始金额为20美元 2. 一支彩票2美元&#xff0c;挑选7个数字&#xff0c;根据匹配上的数字有不同的奖励 我们先体…

基于dynamorio自制反汇编小工具 instr_trace安装

目录 概述一、下载源码二、安装dynamorio1、安装依赖2、编译3、测试安装是否成功参考截图 三、安装instr_trace工具1、文件说明2、编译3、运行 四、生成的文件格式说明&#xff08;1&#xff09;mov指令&#xff08;寄存器->寄存器&#xff09;&#xff08;2&#xff09;mov…

用 Yara 对红队工具 “打标“

​前言: YARA 通常是帮助恶意软件研究人员识别和分类恶意软件样本的工具&#xff0c;它基于文本或二进制模式创建恶意样本的描述规则&#xff0c;每个规则由一组字符串和一个布尔表达式组成&#xff0c;这些表达式决定了它的逻辑。 但是这次我们尝试使用 YARA 作为一种扫描工…