计算机Java项目|基于Springboot实现患者管理系统

 作者主页:编程指南针

作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师

主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助

文末获取源码 

项目编号:KS-032

一,项目简介

医院病患管理,Springboot+Thymeleaf+BootStrap+Mybatis,页面好看,功能完全.有登录权限拦截、忘记密码、发送邮件等功能。主要包含病患管理、信息统计、用户注册、用户登陆、病患联系等功能

二,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

三,系统展示

登陆

注册

首页

病患管理

个人信息管理

发邮件

四,核心代码展示

package com.liefox.config;import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** @Author znz* @Date 2021/4/19 下午 12:41**/
public class LoginHandlerInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//登录成功之后,应该有用户的sessionObject loginUser = request.getSession().getAttribute("loginUser");if (loginUser == null) {System.err.println("loginUserSession=>"+loginUser);request.setAttribute("msg", "没有权限,请登录");/*转发到登录页*/request.getRequestDispatcher("/tosign-in").forward(request, response);return false;} else {return true;}}
}
package com.liefox.config;import org.springframework.web.servlet.LocaleResolver;
import org.thymeleaf.util.StringUtils;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;/*** @Author znz* @Date 2021/4/19 上午 9:44* 国际化**/
public class MyLocaleResolver implements LocaleResolver {//解析请求@Overridepublic Locale resolveLocale(HttpServletRequest httpServletRequest) {//获取请求中的语言参数String language = httpServletRequest.getParameter("l");Locale locale = Locale.getDefault();//如果没有就使用默认值//如果请求的链接携带了国际化的参数if (!StringUtils.isEmpty(language)) {//zh_CNString[] split = language.split("_");//国家地区locale = new Locale(split[0], split[1]);}return locale;}@Overridepublic void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {}
}

package com.liefox.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/*** @Author znz* @Date 2021/4/18 下午 2:40**/
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {@Overridepublic void addViewControllers(ViewControllerRegistry registry) {/*** 医生页* *//*欢迎页*/registry.addViewController("/").setViewName("doctor/sign-in");/*首页*/registry.addViewController("/index").setViewName("doctor/index");/*去登录*/registry.addViewController("/tosign-in").setViewName("doctor/sign-in");/*去注册*/registry.addViewController("/tosign-up").setViewName("doctor/sign-up");/*去忘记密码*/registry.addViewController("/torecoverpw").setViewName("doctor/pages-recoverpw");/*去修改个人信息*/registry.addViewController("/topro-edit").setViewName("doctor/main/profile-edit");/*去邮箱*/registry.addViewController("/toemail").setViewName("doctor/app/email-compose");/*去编辑病患表格*/registry.addViewController("/totable").setViewName("doctor/app/table-editable");/*去修改病患信息*/registry.addViewController("/toRePatientInfo").setViewName("doctor/app/rePatientInfo");/*去增加病患信息*/registry.addViewController("/toAddPatientInfo").setViewName("doctor/app/addPatientInfo");/*去群聊天*/registry.addViewController("/toChat").setViewName("doctor/main/chat");/*** 医生页* */}//自定义的国际化就生效了@Beanpublic LocaleResolver localeResolver() {return new MyLocaleResolver();}//配置登录拦截器@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginHandlerInterceptor())/*拦截*/.addPathPatterns("/**")/*放行*/.excludePathPatterns("/tosign-in", "/tosign-up", "/sign-in", "/sign-up", "/torecoverpw", "/recPwEmail", "/recPw", "/", "/css/**", "/js/**", "/images/**", "/app/**", "/fonts/**", "/fullcalendar/**");}}
package com.liefox.controller;import com.liefox.pojo.Patient;
import com.liefox.pojo.User;
import com.liefox.service.PatientService;
import com.sun.org.apache.xpath.internal.operations.Mod;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.UUID;/*** @Author znz* @Date 2021/4/21 下午 1:35**/
@Controller
public class PatientController {@Autowiredprivate PatientService patientService;@AutowiredJavaMailSenderImpl mailSender;/*获取全部病者信息*/@RequestMapping("/getPatientInfo")public String getPatientInfo(Model model) {List<Patient> patientInfo = patientService.getPatientInfo();model.addAttribute("patientInfos", patientInfo);return "doctor/app/table-editable";}/*删除病人信息根据UUID*/@RequestMapping("/delPatientInfoByUUID/{UUID}")public String delPatientInfoByUUID(@PathVariable("UUID") String UUID) {patientService.delPatientInfoByUUID(UUID);return "redirect:/getPatientInfo";}/*获取病人信息根据UUID*/@RequestMapping("/getPatientInfoByUUID/{UUID}")public String getPatientInfoByUUID(@PathVariable("UUID") String UUID, Model model) {Patient patientInfoByUUID = patientService.getPatientInfoByUUID(UUID);System.out.println(patientInfoByUUID);model.addAttribute("patientInfoByUUID", patientInfoByUUID);return "doctor/app/rePatientInfo";}/*更新病人信息根据UUID*/@RequestMapping("/upPatientInfoByUUID")public String upPatientInfoByEmail(Patient patient) {patientService.upPatientInfoByUUID(patient);return "redirect:/getPatientInfo";}/*去新增病患页*/@RequestMapping("/toAddPatientInfo")public String toAddPatientInfo(Model model) {String uuid = UUID.randomUUID().toString();model.addAttribute("uuid", uuid);return "doctor/app/addPatientInfo";}/*新增病患*/@RequestMapping("/addPatientInfo")public String addPatientInfo(Patient patient, Model model) {int i = patientService.addPatientInfo(patient);model.addAttribute("msg", "添加成功!");return "redirect:/getPatientInfo";}/*去发邮件页面*/@RequestMapping("/toEmail/{Email}")public String toEmail(@PathVariable("Email") String Email, Model model) {model.addAttribute("PatientEmail", Email);return "doctor/app/email-compose";}/*发邮件给病者*/@RequestMapping("/sentEmail")public String recPwEmail(String ToEmail, String CcEmail, String subject, String Message,HttpSession session, Model model) {try {//邮件设置SimpleMailMessage message = new SimpleMailMessage();//主题message.setSubject(subject);//内容message.setText(Message);//收件人message.setTo(ToEmail);//发件人message.setFrom(CcEmail);//发送mailSender.send(message);model.addAttribute("info", "邮件发送成功!");return "doctor/app/email-compose";} catch (Exception e) {model.addAttribute("info", "邮箱地址不正确!");return "doctor/app/email-compose";}}}
package com.liefox.controller;import com.liefox.pojo.Patient;
import com.liefox.pojo.User;
import com.liefox.service.PatientService;
import com.liefox.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;import javax.servlet.http.HttpSession;
import java.util.List;/*** @Author znz* @Date 2021/4/18 下午 5:30**/
@Controller
public class UserController {@Autowiredprivate UserService userService;@AutowiredJavaMailSenderImpl mailSender;@Autowiredprivate PatientService patientService;/*** 生成6位随机数验证码*/public static int randomCode() {return (int) ((Math.random() * 9 + 1) * 100000);}/*** i:验证码*/static int i = randomCode();/*注册*/@PostMapping("/sign-up")public String signup(User user, Model model) {try {int i = userService.Signup(user);if (i != 0) {System.out.println(user + "=》注册成功");model.addAttribute("msg", "注册成功!");return "/doctor/sign-in";}} catch (Exception e) {System.err.println(user + "=>注册失败");model.addAttribute("msg", "该邮箱已注册!");return "/doctor/sign-up";}return null;}/*登录*/@RequestMapping("/sign-in")public String signin(User user, Model model, HttpSession session, String Email) {User signin = userService.Signin(user);User userInfo = userService.getUserInfo(Email);System.out.println(userInfo + "用户信息");String userName = userService.getUserName(user.getEmail(), user.getPassword());if (signin != null) {/*用户信息*/session.setAttribute("UserInfo", userInfo);/*登录拦截*/session.setAttribute("loginUser", userName);/*获取病人病情信息*/List<Patient> patientInfo = patientService.getPatientInfo();long count = patientInfo.stream().count();model.addAttribute("patientInfos",patientInfo);model.addAttribute("count",count);/*获取医生信息*/List<User> userinfo = userService.getUser();model.addAttribute("userInfos",userinfo);/**/session.setAttribute("Email", Email);System.out.println(user + "=》登录成功");return "/doctor/index";} else {System.err.println(user + "=》登录失败");model.addAttribute("msg", "邮箱地址或密码错误!");return "/doctor/sign-in";}}/*去首页*/@RequestMapping("/toindex")public String toindex(Model model){/*获取病人病情信息*/List<Patient> patientInfo = patientService.getPatientInfo();model.addAttribute("patientInfos", patientInfo);long count = patientInfo.stream().count();model.addAttribute("count",count);/*获取医生信息*/List<User> user = userService.getUser();model.addAttribute("userInfos",user);return "/doctor/index";}/*注销*/@RequestMapping("/logout")public String logout(HttpSession session) {session.removeAttribute("loginUser");return "redirect:/sign-in.html";}/*忘记密码发邮件*/@RequestMapping("/recPwEmail")public String recPwEmail(String Email, HttpSession session, Model model) {System.out.println(Email + "发送了验证码");System.err.println(i);session.setAttribute("Email", Email);try {//邮件设置SimpleMailMessage message = new SimpleMailMessage();//主题message.setSubject("Shiqi-验证码");//内容-验证码message.setText(String.valueOf(i));//收件人message.setTo(Email);//发件人message.setFrom("2606097218@qq.com");//发送mailSender.send(message);model.addAttribute("info", "验证码发送成功!");return "/doctor/pages-recoverpw";} catch (Exception e) {System.err.println("cs");model.addAttribute("info", "邮箱地址不正确!");return "/doctor/pages-recoverpw";}}/*判断验证码正确,并重置密码*/@RequestMapping("/recPw")public String recPw(String Email, int token, String Password, Model model) {System.out.println(Email + "    重置密码为=》" + Password + "     输入的验证码为     " + i);if (token == i) {userService.recPw(Email, Password);model.addAttribute("info", "修改成功!");return "/doctor/sign-in";} else {model.addAttribute("error", "验证码错误!");return "/doctor/pages-recoverpw";}}/*查看个人信息页面*/@RequestMapping("/getUserInfo")public String getUserInfo() {return "/doctor/main/profile-edit";}/*修改个人信息*/@RequestMapping("/updateUserInfo")public String updateUserInfo(User user, Model model) {int i = userService.updateUserInfo(user);if (i != 0) {model.addAttribute("msg","下次登录生效!");return "/doctor/main/profile-edit";}else {System.err.println("111111111");model.addAttribute("msg","不修改就别乱点!");return "/doctor/main/profile-edit";}}/*修改密码*/@RequestMapping("/upPw")public String upPw(String Email,String Password,Model model){userService.upPw(Email, Password);model.addAttribute("info","修改成功!");return "doctor/sign-in";}}

五,项目总结

整个系统功能模块不是很多,但是系统选题立意新颖,功能简洁明了,个性功能鲜明突出,像邮件发送、图片报表展示和统计等,可以做毕业设计或课程设计使用。

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

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

相关文章

CanFestival结合Android来完成canopen通信

1.准备开发环境 安装Android Studio和NDK后&#xff0c;需要在Android Studio中创建一个新的NDK项目&#xff0c;并且在项目目录下创建一个jni目录来放置NDK代码。 配置CAN总线接口硬件需要根据具体的硬件要求进行&#xff0c;常见的方法包括使用串口或USB连接CAN总线接口&…

PyTorch Tutorial

本文作为博客“Transformer - Attention is all you need 论文阅读”的补充内容&#xff0c;阅读的内容来自于 https://pytorch.org/tutorials/intermediate/char_rnn_classification_tutorial.html#recommended-preparation 建议的准备流程。 Deep Learning with PyTorch: …

网络知识-以太网技术的发展及网络设备

目 录 一、背景介绍 &#xff08;一&#xff09;网络技术的时代 &#xff08;二&#xff09;以太网技术脱颖而出 二、以太网的工作原理 &#xff08;一&#xff09;、载波侦听多路访问&#xff08;CSMA/CD&#xff09; 1、数据发送流程 2、发送过程解析 3、…

WeNet语音识别+Qwen-72B-Chat Bot+Sambert-Hifigan语音合成

WeNet语音识别Qwen-72B-Chat Bot&#x1f47e;Sambert-Hifigan语音合成 简介 利用 WeNet 进行语音识别&#xff0c;使用户能够通过语音输入与系统进行交互。接着&#xff0c;Qwen-72B-Chat Bot作为聊天机器人接收用户的语音输入或文本输入&#xff0c;提供响应并与用户进行对话…

RPC基础知识总结

RPC 是什么? RPC&#xff08;Remote Procedure Call&#xff09; 即远程过程调用&#xff0c;通过名字我们就能看出 RPC 关注的是远程调用而非本地调用。 为什么要 RPC &#xff1f; 因为&#xff0c;两个不同的服务器上的服务提供的方法不在一个内存空间&#xff0c;所以&am…

软件测试/测试开发丨Vuetify框架的使用

介绍 Vuetify 是一个基于 Vue.js 精心打造 UI 组件库&#xff0c;整套 UI 设计为 Material 风格。能够让没有任何设计技能的开发者创造出时尚的 Material 风格界面。 为什么要使用Vuetify框架 所有组件遵从 Material Design 设计规范&#xff0c;UI 体验非常优秀&#xff0c…

zookeeper经典应用场景之分布式锁

1. 什么是分布式锁 在单体的应用开发场景中涉及并发同步的时候&#xff0c;大家往往采用Synchronized&#xff08;同步&#xff09;或者其他同一个JVM内Lock机制来解决多线程间的同步问题。在分布式集群工作的开发场景中&#xff0c;就需要一种更加高级的锁机制来处理跨机器的进…

MiniTab的宏基础知识

什么是宏&#xff1f; 宏是包含一系列 Minitab 会话命令的文本文件。可以使用宏自动执行重复性任务&#xff08;例如&#xff0c;生成月度报表&#xff09;或扩展 Minitab 的功能&#xff08;例如&#xff0c;计算特殊检验统计量&#xff09;。 Minitab 提供以下类型的宏&…

MongoDB索引详解

概述 索引是一种用来快速查询数据的数据结构。BTree 就是一种常用的数据库索引数据结构&#xff0c;MongoDB 采用 BTree 做索引&#xff0c;索引创建 colletions 上。MongoDB 不使用索引的查询&#xff0c;先扫描所有的文档&#xff0c;再匹配符合条件的文档。使用索引的查询&…

Spring IOC的四种手动注入方法

手动注入 1.Set方法注入-五种类型的注入1.1 业务对象JavaBean第一步&#xff1a;创建dao包下的UserDao类第二步&#xff1a;属性字段提供set⽅法第三步&#xff1a;配置⽂件的bean标签设置property标签第四步&#xff1a;测试 1.2 常用对象String&#xff08;日期类型&#xff…

每日一题——LeetCode1089.复写0

方法一 splice&#xff1a; 通过数组的slice方法&#xff0c;碰到 0就在后面加一个0&#xff0c;最后截取原数组的长度&#xff0c;舍弃后面部分。 但这样做是违反了题目的要求&#xff0c;不要在超过该数组长度的位置写入元素。 var duplicateZeros function(arr) {var le…

软件测试|全面解析Docker Start/Stop/Restart命令:管理容器生命周期的必备工具

简介 Docker是一种流行的容器化平台&#xff0c;用于构建、分发和运行应用程序。在使用Docker时&#xff0c;经常需要管理容器的生命周期&#xff0c;包括启动、停止和重启容器。本文将详细介绍Docker中的docker start、docker stop和docker restart命令&#xff0c;帮助您全面…

计算机组成原理-进位计数制(进制表示 进制转换 真值和机器树)

文章目录 现代计算机的结构总览最古老的计数方法十进制计数法推广&#xff1a;r进制计数法任意进制->十进制二进制<--->八进制&#xff0c;十六进制 各种进制常见的书写方式十进制->任意进制整数部分小数部分 十进制->二进制&#xff08;拼凑法&#xff09;真值…

Oracle OCP怎么样线上考试呢

大家好&#xff01;今天咱们就来聊聊Oracle OCP这个让人又爱又恨的认证。为啥说又爱又恨呢&#xff1f;因为它既是IT界的“金字招牌”&#xff0c;又是一块硬骨头&#xff0c;不是那么容易啃下来的。好了&#xff0c;废话不多说&#xff0c;我们直奔主题&#xff0c;来看看关于…

解决vue3中watch 监听不到旧值的问题,亲测有效!

问题描述 这个问题是我在公司vue3项目的时候发现的一个问题&#xff0c;watch 在监听对象/数组变量的变化时&#xff0c;发现对象的数据变化时 旧数据 获取到的和新数据是一样的 类似于下面这样 const objref({a:我是原来的值,b:6, })obj.a改变值watch(obj,(nel,old)>{ c…

studio3T mongodb 根据查询条件更新字段 或 删除数据

1. mongodb 等于、不等于$ne、不包含 $nin 以及批量更新数据的使用。 业务场景&#xff1a; 在集合中&#xff0c;根据查询条件&#xff0c;更新数据状态。 实现代码&#xff1a; 1. 部门名称为XXX、状态不等于“完好”的、并且不包含这些编码的数据先查询出来2. 再把状态更…

rust sqlx包(数据库相关)使用方法+问题解决

可以操作pgsql、mysql、mssql、sqlite 异步的&#xff0c;性能应该不错&#xff0c;具体使用有几个坑 除了sqlx库&#xff0c;还有对于具体数据库的库&#xff0c;比如postgres库 演示以pgsql为例&#xff0c;更新时间2024.1.6 官方github: sqlx github rust官方文档&#xff1…

【Python学习】Python学习4-运算符

目录 【Python学习】Python学习4-运算符 前言算术运算符比较&#xff08;关系&#xff09;运算符赋值运算符逻辑运算符位运算符成员运算符身份运算符运算符优先级参考 文章所属专区 Python学习 前言 本章节主要说明Python的运算符。主要有 算术运算符 比较&#xff08;关系&…

强化学习3——马尔可夫性质、马尔科夫决策、状态转移矩阵和回报与策略(上)

与多臂老虎机问题不同&#xff0c;马尔可夫决策过程包含状态信息以及状态之间的转移机制。如果要用强化学习去解决一个实际问题&#xff0c;第一步要做的事情就是把这个实际问题抽象为一个马尔可夫决策过程。 马尔可夫决策过程描述 马尔可夫决策过程以智能体在与环境交互的过…

【linux笔记1】

目录 【linux笔记1】文件内容的理解用户管理用户管理命令添加用户切换用户修改用户信息删除用户 用户组 【linux笔记1】 文件内容的理解 etc文件夹&#xff1a;etc是拉丁语"et cetera"的缩写&#xff0c;意思是“和其他的”或“等等”。在linux系统中&#xff0c;“…