• Java基础 - 模拟医院挂号系统


    模拟医院挂号系统功能

    1. 科室管理:新增科室,删除科室(如果有医生在,则不能删除该科室),修改科室

    2. 医生管理:录入医生信息以及科室信息,修改医生信息(主要是修改个人信息和科室)

    3. 坐诊信息设置:可以设置医生当天和未来6天的坐诊情况,包括上午和下午的坐诊时间段和可预约数量,系统将自动保存到该医生的坐诊信息列表中

    4. 全部信息展示:按照科室,展示每个医生七天的坐诊情况,需要按照科室归类展示

    5. 预约功能:用户可以选择要预约的科室,医生、日期和时间段,并输入患者的个人信息,系统将激动判断该时间段是否还有预约名额,并保存预约信息

    6. 搜索功能:用户可以输入搜索日期和时间段,系统将自动搜索未来七天内在该时间段坐诊的医生信息,并按照科室分类展示

    7. 可以查询某个医生未来7天,病人对他的预约情况

    1. //App
    2. public class App {
    3. public static void main(String[] args) {
    4. //创建一个医院管理对象
    5. HospitalManager h = new HospitalManager();
    6. h.start();
    7. }
    8. }
    1. //Doctor
    2. //医生类
    3. public class Doctor {
    4. private String doctorId; //编号(唯一)
    5. private String name; //姓名
    6. private String departmentName; //科室名称
    7. private String gender; //性别
    8. private int age; //年龄
    9. private String specialty; //主治方向
    10. private LocalDate joinDate; //入职时间
    11. private ArrayList schedules = new ArrayList<>(); //7天坐诊情况
    12. public Doctor() {
    13. }
    14. public Doctor(String doctorId, String name, String departmentName, String gender, int age, String specialty, LocalDate joinDate, ArrayList schedules) {
    15. this.doctorId = doctorId;
    16. this.name = name;
    17. this.departmentName = departmentName;
    18. this.gender = gender;
    19. this.age = age;
    20. this.specialty = specialty;
    21. this.joinDate = joinDate;
    22. this.schedules = schedules;
    23. }
    24. public String getDoctorId() {
    25. return doctorId;
    26. }
    27. public void setDoctorId(String doctorId) {
    28. this.doctorId = doctorId;
    29. }
    30. public String getName() {
    31. return name;
    32. }
    33. public void setName(String name) {
    34. this.name = name;
    35. }
    36. public String getDepartmentName() {
    37. return departmentName;
    38. }
    39. public void setDepartmentName(String departmentName) {
    40. this.departmentName = departmentName;
    41. }
    42. public String getGender() {
    43. return gender;
    44. }
    45. public void setGender(String gender) {
    46. this.gender = gender;
    47. }
    48. public int getAge() {
    49. return age;
    50. }
    51. public void setAge(int age) {
    52. this.age = age;
    53. }
    54. public String getSpecialty() {
    55. return specialty;
    56. }
    57. public void setSpecialty(String specialty) {
    58. this.specialty = specialty;
    59. }
    60. public LocalDate getJoinDate() {
    61. return joinDate;
    62. }
    63. public void setJoinDate(LocalDate joinDate) {
    64. this.joinDate = joinDate;
    65. }
    66. public ArrayList getSchedules() {
    67. return schedules;
    68. }
    69. public void setSchedules(ArrayList schedules) {
    70. this.schedules = schedules;
    71. }
    72. }
    1. //Department
    2. //科室类
    3. public class Department {
    4. private String name;
    5. private ArrayList doctors = new ArrayList<>();
    6. public Department() {
    7. }
    8. public Department(String name, ArrayList doctors) {
    9. this.name = name;
    10. this.doctors = doctors;
    11. }
    12. public String getName() {
    13. return name;
    14. }
    15. public void setName(String name) {
    16. this.name = name;
    17. }
    18. public ArrayList getDoctors() {
    19. return doctors;
    20. }
    21. public void setDoctors(ArrayList doctors) {
    22. this.doctors = doctors;
    23. }
    24. }
    1. //Schedule
    2. //医生坐诊情况类
    3. public class Schedule {
    4. private LocalDate today; //当天日期
    5. private boolean update = false; //是否排班(默认未排班false)
    6. //上午
    7. private boolean morning; //是否看诊
    8. private LocalTime mStart; //上午开始时间
    9. private LocalTime mEnd; //上午结束时间
    10. private int mTotalNum; //上午可预约人数
    11. private int mAppointNum; //上午已预约人数
    12. //下午
    13. private boolean afternoon; //是否看诊
    14. private LocalTime aStart; //下午开始时间
    15. private LocalTime aEnd; //下午结束时间
    16. private int aTotalNum; //下午可预约人数
    17. private int aAppointNum; //下午已预约人数
    18. public Schedule() {
    19. }
    20. public Schedule(LocalDate today, boolean update, boolean morning, LocalTime mStart, LocalTime mEnd, int mTotalNum, int mAppointNum, boolean afternoon, LocalTime aStart, LocalTime aEnd, int aTotalNum, int aAppointNum) {
    21. this.today = today;
    22. this.update = update;
    23. this.morning = morning;
    24. this.mStart = mStart;
    25. this.mEnd = mEnd;
    26. this.mTotalNum = mTotalNum;
    27. this.mAppointNum = mAppointNum;
    28. this.afternoon = afternoon;
    29. this.aStart = aStart;
    30. this.aEnd = aEnd;
    31. this.aTotalNum = aTotalNum;
    32. this.aAppointNum = aAppointNum;
    33. }
    34. public boolean isUpdate() {
    35. return update;
    36. }
    37. public void setUpdate(boolean update) {
    38. this.update = update;
    39. }
    40. public LocalDate getToday() {
    41. return today;
    42. }
    43. public void setToday(LocalDate today) {
    44. this.today = today;
    45. }
    46. public boolean isMorning() {
    47. return morning;
    48. }
    49. public void setMorning(boolean morning) {
    50. this.morning = morning;
    51. }
    52. public LocalTime getmStart() {
    53. return mStart;
    54. }
    55. public void setmStart(LocalTime mStart) {
    56. this.mStart = mStart;
    57. }
    58. public LocalTime getmEnd() {
    59. return mEnd;
    60. }
    61. public void setmEnd(LocalTime mEnd) {
    62. this.mEnd = mEnd;
    63. }
    64. public int getmTotalNum() {
    65. return mTotalNum;
    66. }
    67. public void setmTotalNum(int mTotalNum) {
    68. this.mTotalNum = mTotalNum;
    69. }
    70. public int getmAppointNum() {
    71. return mAppointNum;
    72. }
    73. public void setmAppointNum(int mAppointNum) {
    74. this.mAppointNum = mAppointNum;
    75. }
    76. public boolean isAfternoon() {
    77. return afternoon;
    78. }
    79. public void setAfternoon(boolean afternoon) {
    80. this.afternoon = afternoon;
    81. }
    82. public LocalTime getaStart() {
    83. return aStart;
    84. }
    85. public void setaStart(LocalTime aStart) {
    86. this.aStart = aStart;
    87. }
    88. public LocalTime getaEnd() {
    89. return aEnd;
    90. }
    91. public void setaEnd(LocalTime aEnd) {
    92. this.aEnd = aEnd;
    93. }
    94. public int getaTotalNum() {
    95. return aTotalNum;
    96. }
    97. public void setaTotalNum(int aTotalNum) {
    98. this.aTotalNum = aTotalNum;
    99. }
    100. public int getaAppointNum() {
    101. return aAppointNum;
    102. }
    103. public void setaAppointNum(int aAppointNum) {
    104. this.aAppointNum = aAppointNum;
    105. }
    106. }
    1. //Appointment
    2. //患者预约信息类
    3. public class Appointment {
    4. private String userName; //患者姓名
    5. private String sex; //患者性别
    6. private int age; //患者年龄
    7. private String tel; //患者电话
    8. private String desc; //病情描述
    9. private String departmentName; //挂号科室
    10. private String doctorId; //看诊医生id
    11. private LocalDateTime appointDateTime; //预约时间
    12. public Appointment() {
    13. }
    14. public String getUserName() {
    15. return userName;
    16. }
    17. public void setUserName(String userName) {
    18. this.userName = userName;
    19. }
    20. public String getSex() {
    21. return sex;
    22. }
    23. public void setSex(String sex) {
    24. this.sex = sex;
    25. }
    26. public int getAge() {
    27. return age;
    28. }
    29. public void setAge(int age) {
    30. this.age = age;
    31. }
    32. public String getTel() {
    33. return tel;
    34. }
    35. public void setTel(String tel) {
    36. this.tel = tel;
    37. }
    38. public String getDesc() {
    39. return desc;
    40. }
    41. public void setDesc(String desc) {
    42. this.desc = desc;
    43. }
    44. public String getDepartmentName() {
    45. return departmentName;
    46. }
    47. public void setDepartmentName(String departmentName) {
    48. this.departmentName = departmentName;
    49. }
    50. public String getDoctorId() {
    51. return doctorId;
    52. }
    53. public void setDoctorId(String doctorId) {
    54. this.doctorId = doctorId;
    55. }
    56. public LocalDateTime getAppointDateTime() {
    57. return appointDateTime;
    58. }
    59. public void setAppointDateTime(LocalDateTime appointDateTime) {
    60. this.appointDateTime = appointDateTime;
    61. }
    62. }
    1. /*
    2. 模拟医院挂号系统功能
    3. 1. 科室管理:新增科室,删除科室(如果有医生在,则不能删除该科室),修改科室名称
    4. 2. 医生管理:录入医生信息以及科室信息,修改医生信息(主要是修改个人信息和科室)
    5. 3. 坐诊信息设置:可以设置医生当天和未来6天的坐诊情况,包括上午和下午的坐诊时间段和可预约数量,系统将自动保存到该医生的坐诊信息列表中
    6. 4. 全部信息展示:按照科室,展示每个医生七天的坐诊情况,需要按照科室归类展示
    7. 5. 预约功能:用户可以选择要预约的科室,医生、日期和时间段,并输入患者的个人信息,系统将激动判断该时间段是否还有预约名额,并保存预约信息
    8. 6. 搜索功能:用户可以输入搜索日期和时间段,系统将自动搜索未来七天内在该时间段坐诊的医生信息,并按照科室分类展示
    9. 7. 可以查询某个医生未来7天,病人对他的预约情况
    10. */
    11. //HospitalManager
    12. public class HospitalManager {
    13. //系统需要存储全部科室信息
    14. private ArrayList departments = new ArrayList<>();
    15. //系统需要记录全部预约信息
    16. private ArrayList appointments = new ArrayList<>();
    17. Scanner sc = new Scanner(System.in);
    18. public void start() {
    19. while(true){
    20. System.out.println("====欢迎进入莴笋医院信息管理系统====");
    21. System.out.println("====1.科室管理--添加科室====");
    22. System.out.println("====2.科室管理--删除科室====");
    23. System.out.println("====3.科室管理--修改科室名称====");
    24. System.out.println("====4.医生管理--录入医生====");
    25. System.out.println("====5.医生管理--医生坐诊设置(可设置当天和未来6天的坐诊情况)====");
    26. System.out.println("====6.搜索--查看全部医生坐诊情况(当天和未来6天的坐诊详情)====");
    27. System.out.println("====7.搜索--查看某医生坐诊情况(当天和未来6天的坐诊详情)====");
    28. System.out.println("====8.挂号--挂号预约====");
    29. System.out.println("====9.退出====");
    30. System.out.println("请输入您的操作指令(1-9):");
    31. switch (sc.next()){
    32. case "1":
    33. addDepartment();
    34. break;
    35. case "2":
    36. deleteDepartment();
    37. break;
    38. case "3":
    39. modifyDepartment();
    40. break;
    41. case "4":
    42. addDoctor();
    43. break;
    44. case "5":
    45. setDoctorJob();
    46. break;
    47. case "6":
    48. searchAllJob();
    49. break;
    50. case "7":
    51. searchOneJob();
    52. break;
    53. case "8":
    54. Appoint();
    55. break;
    56. case "9":
    57. return;
    58. default:
    59. System.out.println("您选择的操作不存在,请重新选择");
    60. break;
    61. }
    62. }
    63. }
    64. private void Appoint() {
    65. System.out.println("====挂号预约====");
    66. //判断有没有科室(医院没有科室就一定没有医生)
    67. if(isDepartment()==false) {
    68. System.out.println("没有科室就没有医生");
    69. return;
    70. }
    71. //有科室
    72. while(true) {
    73. showAllDepartment(); //展示已有科室
    74. //先选择科室
    75. System.out.println("请选择挂号科室(最大选择" + departments.size() + "):");
    76. int command1 = sc.nextInt();
    77. if (existDepartment(command1) == false) {
    78. //不存在该科室
    79. continue;
    80. }
    81. //存在该科室
    82. Department department = departments.get(command1 - 1);
    83. //判断该科室是否存在医生
    84. if (department.getDoctors().size() == 0) {
    85. //没有医生
    86. System.out.println("该科室无医生");
    87. return;
    88. }
    89. //有医生
    90. while (true) {
    91. //显示该科室的全部医生
    92. showAllDoctor(department);
    93. Appointment a = new Appointment();
    94. a.setDepartmentName(department.getName()); //保存挂号科室名称
    95. //选择看诊的医生
    96. ArrayList doctors = department.getDoctors();
    97. System.out.println("请选择看诊医生的序号(最大选择"+doctors.size()+"):");
    98. int command2 = sc.nextInt();
    99. if(existDoctor(doctors,command2)==false){
    100. //不存在该医生
    101. continue;
    102. }
    103. //存在该医生
    104. Doctor d = doctors.get(command2-1); //保存选择的医生对象
    105. //展示该医生的排班信息
    106. print(d);
    107. ArrayList arr = d.getSchedules(); //arr保存该医生的排班信息
    108. //如果该医生一次都没排过(arr数组都是空的)
    109. if(arr.size() == 0){
    110. System.out.println("该医生未排班,请重新选择");
    111. continue;
    112. }
    113. OUT:
    114. while (true) {
    115. //该医生排过班(arr数组不是空的)
    116. System.out.println("请选择看诊日期:");
    117. String dayStr = sc.next();
    118. LocalDate ld = LocalDate.parse(dayStr);
    119. for (int i = 0; i < arr.size(); i++) {
    120. Schedule s = arr.get(i);
    121. if(s.getToday().equals(ld)){
    122. //存在该天的排班情况
    123. if(s.isUpdate() == false){
    124. System.out.println("该医生未排班,请重新选择日期");
    125. continue OUT;
    126. }
    127. //当天排班了s.isUpdate() == true
    128. while (true) {
    129. System.out.println("请输入看诊的时间(1:上午or2:下午):");
    130. int com = sc.nextInt();
    131. if(com == 1) { //选择上午看诊
    132. if (s.isMorning() == false) { //上午休息
    133. System.out.println("该医生上午休息,请重新选择");
    134. continue OUT;
    135. } else { //上午不休息
    136. if (s.getmAppointNum() < s.getmTotalNum()) { //上午预约人数没满
    137. s.setmAppointNum(s.getmAppointNum()+1); //医生可预约人数-1
    138. a.setDoctorId(d.getDoctorId()); //设置看诊医生id
    139. LocalDate appointDate = s.getToday();
    140. LocalTime appointTime = s.getmStart();
    141. LocalDateTime appointDateTime = LocalDateTime.of(appointDate,appointTime);
    142. a.setAppointDateTime(appointDateTime);
    143. System.out.println("请输入患者姓名:");
    144. a.setUserName(sc.next());
    145. System.out.println("请输入患者性别:");
    146. a.setSex(sc.next());
    147. System.out.println("请输入患者年龄:");
    148. a.setAge(sc.nextInt());
    149. System.out.println("请输入患者电话:");
    150. a.setTel(sc.next());
    151. System.out.println("请输入病情描述:");
    152. a.setDesc(sc.next());
    153. System.out.println("预约成功");
    154. return;
    155. } else {
    156. System.out.println("该医生当天上午已约满,请重新选择");
    157. continue OUT;
    158. }
    159. }
    160. }else if(com == 2){ // //选择下午看诊
    161. if (s.isAfternoon() == false) { //下午休息
    162. System.out.println("该医生下午休息,请重新选择");
    163. continue OUT;
    164. } else { //下午不休息
    165. if (s.getaAppointNum() < s.getaTotalNum()) { //下午预约人数没满
    166. s.setaAppointNum(s.getaAppointNum()+1); //医生可预约人数-1
    167. a.setDoctorId(d.getDoctorId()); //设置看诊医生id
    168. LocalDate appointDate = s.getToday();
    169. LocalTime appointTime = s.getaStart();
    170. LocalDateTime appointDateTime = LocalDateTime.of(appointDate,appointTime);
    171. a.setAppointDateTime(appointDateTime);
    172. System.out.println("请输入患者姓名:");
    173. a.setUserName(sc.next());
    174. System.out.println("请输入患者性别:");
    175. a.setSex(sc.next());
    176. System.out.println("请输入患者年龄:");
    177. a.setAge(sc.nextInt());
    178. System.out.println("请输入患者电话:");
    179. a.setTel(sc.next());
    180. System.out.println("请输入病情描述:");
    181. a.setDesc(sc.next());
    182. System.out.println("预约成功");
    183. return;
    184. } else {
    185. System.out.println("该医生当天下午已约满,请重新选择");
    186. continue OUT;
    187. }
    188. }
    189. }else{
    190. System.out.println("输入有误,请重新输入");
    191. continue;
    192. }
    193. }
    194. }
    195. }
    196. //不存在该天的排班情况
    197. System.out.println("您选择的看诊日期不在近7天,请重新选择");
    198. continue;
    199. }
    200. }
    201. }
    202. }
    203. //查看某医生近7天的全部坐诊情况和预约情况(根据id查更加规范)
    204. private void searchOneJob() {
    205. //判断有没有科室(没有科室就一定没有医生)
    206. if(isDepartment()==false) {
    207. System.out.println("没有科室就没有医生");
    208. return;
    209. }
    210. //有科室
    211. System.out.println("请输入你要查找的医生姓名:");
    212. String name = sc.next();
    213. for (int i = 0; i < departments.size(); i++) {
    214. Department department = departments.get(i); //department保存第i个科室信息
    215. ArrayList arr = department.getDoctors(); //创建arr集合(该集合保存的是某科室全部的医生信息)
    216. if(arr.size() != 0){ //某科室有医生
    217. for (int j = 0; j < arr.size(); j++) {
    218. Doctor d = arr.get(j); //保存医生信息
    219. if(d.getName().equals(name)){ //如果找到同名医生就输出
    220. System.out.println((d.getDepartmentName()));
    221. print(d);
    222. return;
    223. }
    224. }
    225. }
    226. }
    227. //遍历后还没找到
    228. System.out.println("查无此人");
    229. }
    230. //打印某医生的排班信息
    231. private void print(Doctor d) {
    232. System.out.println(d.getName()+"的排班情况:");
    233. ArrayList arr_s = d.getSchedules(); //医生的排班表
    234. //先更新当前和未来6天的时间
    235. updateSchedule(arr_s);
    236. if (arr_s.size() == 0){
    237. //没有进行过一次排班(arr_s就是空的)
    238. System.out.println("该医生未排班");
    239. return;
    240. }
    241. //不是空的
    242. for (int k = 0; k < arr_s.size() ; k++) {
    243. Schedule s = arr_s.get(k);
    244. System.out.println(s.getToday()+"的排班情况:");
    245. if(s.isUpdate() == false){
    246. System.out.println("未排班");
    247. continue;
    248. }
    249. //已排班
    250. if(s.isMorning() == true){
    251. System.out.println("上午:"+s.getmStart()+"-"+s.getmEnd()+" 可预约人数:"+s.getmTotalNum()+" 已预约人数:"+s.getmAppointNum());
    252. }else{
    253. System.out.println("上午休息");
    254. }
    255. if(s.isAfternoon() == true){
    256. System.out.println("下午:"+s.getaStart()+"-"+s.getaEnd()+" 可预约人数:"+s.getaTotalNum()+" 已预约人数:"+s.getaAppointNum());
    257. }else{
    258. System.out.println("下午休息");
    259. }
    260. }
    261. }
    262. private void searchAllJob() {
    263. System.out.println("====全部医生的坐班信息====");
    264. //判断有没有科室(没有科室就一定没有医生)
    265. if(isDepartment()==false) {
    266. System.out.println("没有科室就没有医生");
    267. return;
    268. }
    269. //有科室
    270. for (int i = 0; i < departments.size(); i++) {
    271. Department department = departments.get(i); //department保存第i个科室信息
    272. ArrayList arr = department.getDoctors(); //创建arr集合(该集合保存的是某科室全部的医生信息)
    273. if(arr.size() == 0){ //没有医生
    274. System.out.println("===="+department.getName()+"没有医生====");
    275. continue;
    276. }
    277. //有医生
    278. System.out.println("===="+department.getName()+"医生的排班情况====");
    279. for (int j = 0; j < arr.size(); j++) {
    280. Doctor d = arr.get(j); //科室中第j个医生的信息
    281. print(d); //打印医生的排班信息
    282. }
    283. }
    284. }
    285. private void setDoctorJob() {
    286. System.out.println("====医生坐诊设置====");
    287. //判断有没有科室
    288. if(isDepartment()==false) {
    289. return;
    290. }
    291. //有科室
    292. while(true) {
    293. showAllDepartment(); //展示已有科室
    294. //先选择科室
    295. System.out.println("请选择要排班的医生的科室(最大选择"+departments.size()+"):");
    296. int command1 = sc.nextInt();
    297. if(existDepartment(command1)==false){
    298. //不存在该科室
    299. continue;
    300. }
    301. //存在该科室
    302. Department department = departments.get(command1-1);
    303. //判断该科室是否存在医生
    304. if(department.getDoctors().size() == 0){
    305. //没有医生
    306. System.out.println("该科室无医生");
    307. continue;
    308. }
    309. //有医生
    310. while(true){
    311. //显示该科室的全部医生
    312. showAllDoctor(department);
    313. //选择需要排班的医生
    314. ArrayList doctors = department.getDoctors();
    315. System.out.println("请选择要排班的医生的序号(最大选择"+doctors.size()+"):");
    316. int command2 = sc.nextInt();
    317. if(existDoctor(doctors,command2)==false){
    318. //不存在该医生
    319. continue;
    320. }
    321. //存在该医生
    322. Doctor d = doctors.get(command2-1); //保存选择的医生对象
    323. // 为该医生设置坐诊时间
    324. //获取该医生的坐诊情况
    325. ArrayList schedules = d.getSchedules(); //第一次getSchedules()里面肯定是空的
    326. //先更新当前和未来6天的时间
    327. updateSchedule(schedules);
    328. //再给该医生当天和未来6天进行排班
    329. for (int i = 0; i < schedules.size(); i++) {
    330. Schedule s = schedules.get(i);
    331. updateDoctorSchedule(s);
    332. }
    333. System.out.println("已完成"+d.getName()+"排班"); //已某医生的排班
    334. return;
    335. }
    336. }
    337. }
    338. //给医生进行排班
    339. private void updateDoctorSchedule(Schedule s) {
    340. LocalDate today = s.getToday();
    341. System.out.println(today+"的安排如下:");
    342. if(s.isUpdate()==false){ //未排班
    343. System.out.println("未排班");
    344. }else{ //已排班(显示排班情况)
    345. //上午是否休息
    346. if(s.isMorning() == false){
    347. //上午休息
    348. System.out.println("上午休息");
    349. }else{
    350. //上午不休息
    351. System.out.println("上午:"+s.getmStart()+"-"+s.getmEnd()+" 可预约人数:"+s.getmTotalNum()+" 已预约人数:"+s.getmAppointNum());
    352. }
    353. //下午是否休息
    354. if(s.isAfternoon() == false){
    355. //下午休息
    356. System.out.println("下午休息");
    357. }else{
    358. //下午不休息
    359. System.out.println("下午:"+s.getaStart()+"-"+s.getaEnd()+" 可预约人数:"+s.getaTotalNum()+" 已预约人数:"+s.getaAppointNum());
    360. }
    361. }
    362. OUT:
    363. while (true) { //快捷键Ctrl+Alt+T
    364. System.out.println("是否修改排班?y/n");
    365. String command = sc.next();
    366. switch(command){
    367. case "y": //修改排班
    368. s.setUpdate(true);
    369. while (true) {
    370. System.out.println("上午是否看诊?y/n");
    371. String choose = sc.next();
    372. if(choose.equals("y")){
    373. s.setMorning(true);
    374. System.out.println("请输入看诊开始时间:");
    375. String start = sc.next();
    376. System.out.println("请输入看诊结束时间:");
    377. String end = sc.next();
    378. LocalTime ltstart = LocalTime.parse(start);
    379. LocalTime ltend = LocalTime.parse(end);
    380. s.setmStart(ltstart); //保存开始时间
    381. s.setmEnd(ltend); //保存结束时间
    382. System.out.println("请输入上午可预约人数:");
    383. int num = sc.nextInt();
    384. s.setmTotalNum(num);
    385. System.out.println("已完成设置上午排班信息");
    386. break;
    387. }else if(choose.equals("n")){
    388. s.setMorning(false);
    389. System.out.println("已设置上午休息");
    390. break;
    391. }else{
    392. System.out.println("没有该选择,请重新选择");
    393. continue;
    394. }
    395. }
    396. while (true) {
    397. System.out.println("下午是否看诊?y/n");
    398. String choose = sc.next();
    399. if(choose.equals("y")){
    400. s.setAfternoon(true);
    401. System.out.println("请输入看诊开始时间:");
    402. String start = sc.next();
    403. System.out.println("请输入看诊结束时间:");
    404. String end = sc.next();
    405. LocalTime ltstart = LocalTime.parse(start);
    406. LocalTime ltend = LocalTime.parse(end);
    407. s.setaStart(ltstart); //保存开始时间
    408. s.setaEnd(ltend); //保存结束时间
    409. System.out.println("请输入下午可预约人数:");
    410. int num = sc.nextInt();
    411. s.setaTotalNum(num);
    412. System.out.println("已完成设置下午排班信息");
    413. break;
    414. }else if(choose.equals("n")){
    415. s.setAfternoon(false);
    416. System.out.println("已设置下午休息");
    417. break;
    418. }else{
    419. System.out.println("没有该选择,请重新选择");
    420. continue;
    421. }
    422. }
    423. return;
    424. case "n": //不修改排班
    425. return;
    426. default:
    427. System.out.println("没有该选择,请重新选择");
    428. continue OUT;
    429. }
    430. }
    431. }
    432. //更新当前和未来6天的时间
    433. private void updateSchedule(ArrayList schedules) {
    434. LocalDate now = LocalDate.now(); //获取当天日期(年月日)
    435. //存在两种情况
    436. //schedules集合里面没有任何schedule(没有任何时间),就是第一次排班
    437. //schedules集合存在7天的时间(可能部分是过期的,需要更新到今天的情况),非第一次排班 比如:3月1号更新过1-7号的,现在是3号,进去查看的时候应该更新为3-10号的
    438. //schedules集合里面没有任何schedule(没有任何时间)
    439. if(schedules.size() == 0){ //第一次排班
    440. for (int i = 0; i < 7; i++) { //排7天
    441. Schedule s = new Schedule(); //创建一个Schedule对象
    442. s.setToday(now.plusDays(i)); //设置Schedule对象的日期(规则:第一天就是当天+0 第二天就是当天+1 ……)
    443. schedules.add(s); //把Schedule对象存到schedules集合中
    444. }
    445. return;
    446. }
    447. //schedules集合存在7天的时间(可能部分是过期的,需要更新到今天的情况),非第一次排班 比如:3月1号更新过1-7号的,现在是3号,进去查看的时候应该更新为3-10号的
    448. //非第一次排班,去除过期的时间
    449. int count = 0; //记入过期了几天(也就是删除了几天)
    450. //集合中的删除操作,如果从前往后遍历,会存在漏删的情况,因此选择从后往前
    451. for (int i = schedules.size()-1; i >= 0; i--) { //遍历已保存的7天
    452. LocalDate ld = schedules.get(i).getToday(); //已经保存的第i个日期
    453. if(ld.isBefore(now)){ //保存的第i个日期早于今天的日期
    454. schedules.remove(i);
    455. count++;
    456. }
    457. }
    458. //如果有删除过期的时间,那么需要补全7天
    459. //count == 0说明没有删除日期
    460. if(count == 0){
    461. return;
    462. }
    463. //count不等于0说明有删除(那么应该从count-1开始补全日期,比如删除了5天,剩下2天,那么就应该从第3个位置(索引2)开始补5天)
    464. for (int i=7-count; i < 7; i++) {
    465. Schedule s = new Schedule(); //创建一个Schedule对象
    466. s.setToday(now.plusDays(i));
    467. schedules.add(s);
    468. }
    469. }
    470. private void addDoctor() {
    471. System.out.println("====添加医生====");
    472. //判断有没有科室
    473. if(isDepartment()==false) {
    474. return;
    475. }
    476. //有科室
    477. Doctor d = new Doctor();
    478. while(true){
    479. showAllDepartment(); //展示已有科室
    480. //先选择科室
    481. System.out.println("请选择新医生的入职科室(最大选择"+departments.size()+"):");
    482. int command = sc.nextInt();
    483. if(existDepartment(command)==false){
    484. //不存在该科室
    485. continue;
    486. }
    487. //存在该科室
    488. Department department = departments.get(command-1); //department记录选择的科室
    489. d.setDepartmentName(department.getName()); //记录员工科室
    490. //录入医生id
    491. d.setDoctorId(UUID.randomUUID().toString()); //随机返回16位的id
    492. System.out.println("请输入医生姓名:");
    493. d.setName(sc.next());
    494. System.out.println("请输入医生性别:");
    495. d.setGender(sc.next());
    496. System.out.println("请输入医生年龄:");
    497. d.setAge(sc.nextInt());
    498. System.out.println("请输入医生主治方向:");
    499. d.setSpecialty(sc.next());
    500. System.out.println("请输入医生入职时间(格式:yyyy-MM-dd):");
    501. String joinDateString = sc.next();
    502. d.setJoinDate(LocalDate.parse(joinDateString)); //把字符串转换成LocalDate对象
    503. //添加完医生个人信息,还需要把医生加到所在部门的集合里
    504. department.getDoctors().add(d);
    505. System.out.println("添加医生成功");
    506. break;
    507. }
    508. }
    509. private void modifyDepartment() {
    510. System.out.println("====修改科室名称====");
    511. //判断有没有科室
    512. if(isDepartment()==false){
    513. return;
    514. }
    515. //有科室
    516. while(true) {
    517. showAllDepartment();
    518. System.out.println("请选择你要修改的科室序号(最大选择"+departments.size()+"):");
    519. int command = sc.nextInt();
    520. if(existDepartment(command)==false){
    521. //不存在该科室
    522. continue;
    523. }
    524. //存在该科室
    525. Department department = departments.get(command-1); //department记录选择的科室
    526. System.out.println("你要为科室修改的新名字是:");
    527. String newName = sc.next();
    528. department.setName(newName);
    529. System.out.println("修改成功!");
    530. break;
    531. }
    532. }
    533. private void deleteDepartment() {
    534. System.out.println("====添加科室====");
    535. //判断有没有科室
    536. if(isDepartment()==false){
    537. return;
    538. }
    539. //有科室
    540. while(true){
    541. showAllDepartment();
    542. System.out.println("请选择你要删除的科室序号(最大选择"+departments.size()+"):");
    543. int command = sc.nextInt();
    544. if(existDepartment(command)==false){
    545. //不存在该科室
    546. continue;
    547. }
    548. //存在该科室
    549. Department department = departments.get(command-1);
    550. if(department.getDoctors().size() != 0){
    551. //科室中存在医生
    552. System.out.println("科室中存在医生,不能删除科室");
    553. return;
    554. }
    555. //科室中无医生,可以删除
    556. departments.remove(command-1);
    557. System.out.println("删除科室成功");
    558. break;
    559. }
    560. }
    561. //添加科室
    562. private void addDepartment() {
    563. System.out.println("====添加科室====");
    564. OUT: //标签
    565. while(true){
    566. System.out.println("请输入添加的科室名称:");
    567. String name = sc.next();
    568. //判断科室是否存在
    569. for (int i = 0; i < departments.size(); i++) {
    570. if (departments.get(i).getName().equals(name) == true) {
    571. //科室已存在
    572. System.out.println("您创建的科室已存在,请重新输入");
    573. continue OUT; //继续执行下一次外面的死循环(OUT)
    574. }
    575. }
    576. Department d = new Department();
    577. d.setName(name);
    578. departments.add(d);
    579. System.out.println("创建科室成功");
    580. break;
    581. }
    582. }
    583. //展示一个科室的全部医生
    584. private void showAllDoctor(Department department){
    585. System.out.println("===="+department.getName()+"====");
    586. ArrayList arr = department.getDoctors();
    587. for (int i = 0; i < arr.size(); i++) {
    588. System.out.println(i+1 +"." + arr.get(i).getName());
    589. }
    590. }
    591. //展示已有的每个科室
    592. private void showAllDepartment(){
    593. System.out.println("====已有科室====");
    594. for (int i = 0; i < departments.size(); i++) {
    595. System.out.println(i+1+"."+departments.get(i).getName());
    596. }
    597. }
    598. //判断有没有科室
    599. private boolean isDepartment(){
    600. if(departments.size()==0){
    601. //没有科室
    602. System.out.println("当前无科室,请先添加科室");
    603. return false;
    604. }
    605. return true;
    606. }
    607. //判断选择的序号是否有科室存在
    608. private boolean existDepartment(int command){
    609. if(command < 1 || command > departments.size()){
    610. //没有该科室
    611. System.out.println("不存在该科室,请重新选择");
    612. return false;
    613. }
    614. //有该科室
    615. return true;
    616. }
    617. //判断选择的序号是否有医生存在
    618. private boolean existDoctor(ArrayList doctors,int command){
    619. if(command < 1 || command > doctors.size()){
    620. //没有该医生
    621. System.out.println("不存在该医生,请重新选择");
    622. return false;
    623. }
    624. //有该医生
    625. return true;
    626. }
    627. }
  • 相关阅读:
    springsecurity框架笔记
    读书笔记:《指标陷阱》
    echarts:graph图表拖拽节点
    C#:EXCEL列名、列序号之间互相转换
    51单片机学习笔记5 流水灯实现及蜂鸣器控制
    查看视频文件关键帧间隔
    Rust开发——切片(slice)类型
    腾讯云 AI 绘画:文生图、图生图、图审图 快速入门
    淘女郎买家秀API接口
    Linux之自动化运维工具ansible详解
  • 原文地址:https://blog.csdn.net/qq_50755868/article/details/136437102