基于SSM和MySQL实现的医院预约挂号系统

基于SSM和MySQL实现的医院预约挂号系统 1,项目简介 本系统使用SSM框架技术,实现病人在系统中进行医院的预约挂号功能,主要实现基于医院,科室,医生的前台挂号功能

本文包含相关资料包-----> 点击直达获取<-------

基于SSM和MySQL实现的医院预约挂号系统

1.项目简介

本系统使用SSM框架技术,实现病人在系统中进行医院的预约挂号功能。主要实现基于医院、科室、医生的前台挂号功能,相应的信息在数据库进行初始化数据,未提供信息的后台管理功能。用户关前台使用邮箱注册 后可以进行登陆,并向用户邮箱发送验证码后可以完善个人信息。个人登陆后可以在系统中进行预约挂号功能。

主要实现功能展示如下

用户注册功能

用户登陆

医院挂号

科室挂号

医生挂号

查看我的预约

最新公告

帮助中心

2.数据库设计

2.1 表结构

地区表

普通用户表

医生表

收藏表

反馈表

咨询表

范围表

医院表

通知表

预约订单表

2.2 E-R图

3.项目实现

3.1 工具类

MD5加密工具

java public static String getMD5(String message) { String md5str = ""; try { //1 创建一个提供信息摘要算法的对象,初始化为md5算法对象 MessageDigest md = MessageDigest.getInstance("MD5"); //2 将消息变成byte数组 byte[] input = message.getBytes(); //3 计算后获得字节数组,这就是那128位了 byte[] buff = md.digest(input); //4 把数组每一字节(一个字节占八位)换成16进制连成md5字符串 md5str = bytesToHex(buff); } catch (Exception e) { e.printStackTrace(); } return md5str; } /** * 二进制转十六进制 * @param bytes * @return */ public static String bytesToHex(byte[] bytes) { StringBuffer md5str = new StringBuffer(); //把数组每一字节换成16进制连成md5字符串 int digital; for (int i = 0; i < bytes.length; i++) { digital = bytes[i]; if(digital < 0) { digital += 256; } if(digital < 16){ md5str.append("0"); } md5str.append(Integer.toHexString(digital)); } return md5str.toString().toUpperCase(); } @Test public void testMD5(){ String message="123,123"; String result=getMD5(message); System.out.println(result); }

获取IP

java /** * 获取登录用户IP地址 */ public static String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } if (ip.equals("0:0:0:0:0:0:0:1")) { ip = "127.0.0.1"; } return ip; }

时间工具类

java @Component public class DateUtil { private static final Logger log = LoggerFactory.getLogger(DateUtil.class); /** * 时间格式 */ public enum DateFormat{ YYYY_MM_DD_HH_mm_ss("yyyy-MM-dd HH:mm:ss"), YYYY_MM_DD("yyyy-MM-dd"), YYYYMMDDHHMMSS("yyyyMMddHHmmss"); private String value; DateFormat(String value){ this.value = value; } public String getValue(){ return this.value; } } /** * 当前时间 */ public String getCurrentTime(DateFormat format){ Date date = new Date();// 当前日期 SimpleDateFormat sdf = new SimpleDateFormat(format.getValue());// 格式化对象 return sdf.format(date); } /** * 格式化时间 */ public String getFormatTime(String time, DateFormat format){ SimpleDateFormat sdf = new SimpleDateFormat(format.getValue());// 格式化对象 Date date = null; try { date = sdf.parse(time); } catch (ParseException e) { e.printStackTrace(); } return date!=null?sdf.format(date):time; }

3.2 主要功能

```java /* * 医生主界面(推荐医生) / @RequestMapping(value = "/doctorIndex/{page}") public String officeIdex(Model model, @PathVariable("page") int page) { // 查询推荐的医院 List hospitalRe = hospitalService.findHosByRe(); // 设置页面 pageUtils.setCurrentPage(page); pageUtils.setTotalRecord(doctorService.findDoctorByReNum(hospitalRe)); int start; if (pageUtils.getCurrentPage() == 0) { start = 0; } else { start = pageUtils.getPageRecord() * (pageUtils.getCurrentPage() - 1); } Map doctorMap = new HashMap (); doctorMap.put("list", hospitalRe); doctorMap.put("start", start); doctorMap.put("size", pageUtils.getPageRecord()); List doctorRe = doctorService.findDoctorByRe(doctorMap); model.addAttribute("pages", pageUtils); model.addAttribute("doctorRe", doctorRe); return "doctor/doctorIndex"; }

/ * 医生详情 */ @RequestMapping(value = "/doctorInfoShow/{id}", method = RequestMethod.GET) public String hosInfoShow(Model model, @PathVariable(value = "id") int id) { Doctor doctor = doctorService.findDoctorById(id); Hospital hospital = hospitalService.findHosByName(doctor.getHospitalName()); model.addAttribute("hos", hospital); model.addAttribute("doctor", doctor); return "doctor/doctorInfoShow"; } / * 全部医生 */ @RequestMapping(value = "/allDoctor/{page}") public String orderOffcie(Model model, @PathVariable("page") int page, Doctor doctor) { // 将输入条件传回前台 CommonCondition commonCondition = new CommonCondition(); commonCondition.setHospitalName(doctor.getHospitalName()); commonCondition.setOfficesName(doctor.getOfficesName()); commonCondition.setDoctorName(doctor.getDoctorName()); commonCondition.setDoctorTitle(doctor.getDoctorTitle()); commonCondition.setDoctorDegree(doctor.getDoctorDegree()); commonCondition.setDoctorAdministrative(doctor.getDoctorAdministrative()); pageUtils.setCurrentPage(page); pageUtils.setTotalRecord(doctorService.findDoctorNum(doctor)); int start; if (pageUtils.getCurrentPage() == 0) { start = 0; } else { start = pageUtils.getPageRecord() * (pageUtils.getCurrentPage() - 1); } List doctorRe = doctorService.findDoctorByCondition(doctor, start, pageUtils.getPageRecord()); // 查询医生的职位 List doctorTitle = doctorService.findDoctorTitle(); List doctorAdministrative = doctorService.findDoctorAdministrative(); List doctorDegree = doctorService.findDoctorDegree(); model.addAttribute("pages", pageUtils); model.addAttribute("doctorRe", doctorRe); // 查询条件 model.addAttribute("commonCondition", commonCondition); // 将查询的医生职称传到前台 model.addAttribute("doctorTitle", doctorTitle); model.addAttribute("doctorAdministrative", doctorAdministrative); model.addAttribute("doctorDegree", doctorDegree); return "doctor/doctor"; } ```

3.3 订阅通知(预约提醒)

采用定时任务,通过邮件去提示用户准时到达医院。

Java @Scheduled(cron = "0 0/2 * * * ?") public void createWorkTime() { // 查找需要发送通知的订单 final List<OrderRecords> orderRecords = orderRecordsDao.findNeedNoticeOrder(); // 循环订单 for (int i = 0; i < orderRecords.size(); i++) { final CommonUser commonUser = commonUserDao.findCommonUserByUserId(orderRecords.get(i).getUserID()); final OrderRecords orderRecordInfo = orderRecords.get(i); // 单独开启线程发送邮件,防止用户等待时间过长,成功日志输出,失败也输出。 new Thread(new Runnable() { public void run() { boolean isSuccess = sendEmailCheck(commonUser, orderRecordInfo); if (isSuccess) { log.info(commonUser.getUserEmail() + "发送成功"); } else { log.info(commonUser.getUserEmail() + "发送失败"); } } }).start(); } } public boolean sendEmailCheck(CommonUser commonUser, OrderRecords orderRecords) { String contentInfo = commonUser.getUserName() + "您好:" + "\n<br>您预约的" + orderRecords.getHospitalName() + "-" + orderRecords.getOfficesName() + "-" + orderRecords.getDoctorName() + "医生的订单已成功通过审核" + "\n<br>请您持有效证件于" + orderRecords.getTransactDate() + "-" + orderRecords.getTransactTime() + "之前前往!"; String email = commonUser.getUserEmail(); log.info(email); String sender = "天津市医院预约系统"; String title = "天津市医院预约挂号【预约通知提醒】"; String content = contentInfo + "\n<br>天津市预约挂号系统。(项目测试)"; boolean isSuccess = mailUtil.sendMail(email, sender, title, content); if (isSuccess == true) { log.info("发送成功"); // commonUserDao.sendVerification(userEmail, verificationCode, // updateTime); orderRecordsDao.updateSendSuccess(orderRecords.getId()); return true; } else { log.info("发送失败"); orderRecordsDao.updateSendFailed(orderRecords.getId()); return false; } }

4.bug

因为时间预约信息是假数据,控制预约日历显示的代码在 data/index.js ,因为js写的有点bug出现不能显示的问题。

如果想要试试日历显示效果请修改代码:

var dp = new Datepicker($('.a'), year, month, day); 日期改为今天日期。例如: var dp = new Datepicker($('.a'),'1996', '03', '10');

  • 医院预约挂号系统,实现基本预约挂号,预留后台管理系统接口,时间数据为假数据

  • 提供医生科室医生查询

  • 使用ssm框架,maven管理依赖jar包

项目以做学习交流为目的。因为项目经验不足,项目可能会有很多潜在的问题,希望多多指教。目前邮箱暂停注册完善服务,可自行更换邮箱发送,项目目前暂停更新,感谢大家支持。

参考文献

  • 北京英才医疗集团预约诊疗系统(湖北工业大学·杨亚东)
  • 千佛山医院预约挂号系统的设计与实现(山东大学·郝庆美)
  • 基于B/S架构的预约挂号系统的设计与实现(天津工业大学·魏星)
  • 网上预约挂号系统的设计与实现(华中科技大学·游国强)
  • 基于PHP的智能预约挂号管理平台的设计与实现(北京邮电大学·陈世奇)
  • 高并发环境下智慧健康平台的设计与优化(河北大学·周政男)
  • 基于实名注册的预约挂号子系统的设计与实现(哈尔滨工业大学·崔志远)
  • 基于SQL Server的医院分诊预约的设计与开发(吉林大学·赵清晨)
  • 网上预约挂号系统的设计与实现(华中科技大学·游国强)
  • 基于J2ME/J2EE的移动预约挂号系统的设计与实现(苏州大学·任晓尘)
  • 医疗挂号系统服务端的设计与实现(北京邮电大学·郑朝杰)
  • 网上预约挂号系统的设计与实现(华中科技大学·游国强)
  • 基于J2ME/J2EE的移动预约挂号系统的设计与实现(苏州大学·任晓尘)
  • 基于PHP的智能预约挂号管理平台的设计与实现(北京邮电大学·陈世奇)
  • 基于SQL Server的医院分诊预约的设计与开发(吉林大学·赵清晨)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕设工厂 ,原文地址:https://m.bishedaima.com/yuanma/35482.html

相关推荐

  • 基于Python实现图像分类

    一, 理论知识 1,1 softmax线性分类器 线性分类器的函数为线性形式,即为(这里将偏置项看做参与乘积的一部分): $$ f(x_1,,,,x_m)=w_0+w_1x_1+
    2024年05月14日
    3 1 1
  • 人事管理系统

    这是一个🔥🔥基于SpringBoot框架的人事管理系统设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    1 1 1
  • 基于Python制作的热血足球小游戏

    基于 Python 制作的热血足球小游戏 导语 最近有读者说我发的文章太水了,都是炒冷饭的,那就带大家整点新鲜的东西吧,反正估计今年都得"坐牢"了,炒冷饭的机会有得是
    2024年05月14日
    5 1 2
  • 基于jsp+servlet+mysql的大学社团交流BBS平台

    这是一个🔥🔥基于jsp的大学社团交流BBS平台🔥🔥的项目源码,开发语言Java,开发环境Idea/Eclipse,这个 大学社团交流BBS开发技术栈为JSP项目,可以作为毕业设计课程设计作业大学生社团作为大学生活的重要一部分
    2024年05月23日
    6 1 2
  • Python 新浪微博爬虫

    Python 新浪微博爬虫,支持模拟登陆,微博文字另存为本地文件 网上大部分对微博的爬虫都是先人工登陆获取cookie再进行接下来的抓取操作的,所以我写了一份模拟登陆获取cookie的(因为是分析为主要目的
    2024年05月14日
    2 1 1
  • 基于SpringBoot框架的酒店客房管理系统

    这是一套采用Java语言编写的🔥🔥酒店客房管理系统的源代码,基于SpringBoot框架构建,我们运用了现代化的SpringBoot和Vue技术栈,开发工具为Idea或Eclipse
    2024年05月23日
    1 1 1
  • Spring boot 实战--- 社区论坛

    Spring boot 实战--- 社区论坛 开发社区首页 开发流程 1 次请求的执行过程 分步实现 开发社区首页
    2024年05月14日
    2 1 2
  • 基于 flask 的 Web 计算器

    基于 flask 的 Web 计算器 需求分析 1, 前言 开发基于 flask 作为框架的计算器 Web 应用是为了能够方便快捷的使用计算器
    2024年05月14日
    22 1 3
  • 基于Python实现成绩统计系统

    1, 课程设计目的 《软件设计基础-Python》课程设计是这门课程的实践性教学环节之一,本次设计结合实际应用的要求,使课程设计既覆盖Python的知识点,又接近工程实际需要
    2024年05月14日
    1 1 1
  • 基于WEB的图书阅读器的实现

    2017-毕业设计(基于 Web 平台的阅读 APP 设计与实现) 该项目实现了一款基于 Web 平台的阅读 APP,该 APP 采用简洁护眼颜色搭配,简洁舒适的设计风格
    2024年05月14日
    2 1 1

发表回复

登录后才能评论