计算机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.rhkb.cn/news/232485.html

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

相关文章

LeCode:(606. 根据二叉树创建字符串)

题目链接 本体的难点&#xff1a; 什么时候去打印左右括号&#xff1f;什么时候省略&#xff1f; 解题过程&#xff1a;通过观察看到&#xff0c;每次遍历结点之前&#xff0c;打印了一个左括号&#xff1b;遍历到叶子&#xff0c;叶子的左右也要打印出括号来&#xff08;先…

在VM下使用Composer完成快照方式的软件制作

Composer允许您构建软件、应用程序、偏好设置文件或是文档的安装包&#xff0c;安装包可以部署到远程电脑或是作为镜像流程的一部分。构建软件包的第一步就是创建包源&#xff0c;根据要打包的软件&#xff0c;Composer允许您监视软件的安装和使用驱动器上已存在的文件来创建包…

ansible 配置jspgou商城上线(MySQL版)

准备环境 准备两台纯净的服务器进行&#xff0c;在实验之前我们关闭防火墙和selinux systemctl stop firewalld #关闭防火墙 setenforce 0 #临时关闭selinux hosts解析(两台服务器都要去做) [rootansible-server ~]# vim /etc/hosts 10.31.162.24 ansible-ser…

性能优化-OpenMP基础教程(五)-全面讲解OpenMP基本编程方法

本文主要介绍OpenMP编程的编程要素和实战&#xff0c;包括并行域管理详细实战、任务分担详细实战。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开发基础教程 &#x1f380;C…

【数据仓库与联机分析处理】多维数据模型

目录 一、数据立方体 二、数据模型 &#xff08;一&#xff09;星形模型 &#xff08;二&#xff09;雪花模式 &#xff08;三&#xff09;事实星座模式 三、多维数据模型中的OLAP操作 &#xff08;一&#xff09;下钻 &#xff08;二&#xff09;上卷 &#xff08;三…

React之useRef hook

介绍 useRef是react的自定义hook&#xff0c;它用来引用一个不需要渲染的值。这篇文章会介绍useRef的简单用法。 使用场景 1.实现节流 通过useRef实现节流功能&#xff0c;在限制时间内多次提交&#xff0c;已第一次提交为准。 useThrottle.jsx import {useEffect, useRef,…

矩阵的乘法

首先矩阵的乘法定义如下&#xff1a; #include <stdio.h> int main() { int i 0; int j 0; int arr[20][20] { 0 }; int str[20][20] { 0 }; int s[20][20] { 0 }; int n1 0; int n2 0; int m2 0; int z 0; int m1 0;…

Linux入门攻坚——11、Linux网络属性配置相关知识1

网络基础知识&#xff1a; 局域网&#xff1a;以太网&#xff0c;令牌环网&#xff0c; Ethernet&#xff1a;CSMA/CD 冲突域 广播域 MAC&#xff1a;Media Access Control&#xff0c;共48bit&#xff0c;前24bit需要机构分配&#xff0c;后24bit自己…

Wnmp本地部署结合内网穿透实现任意浏览器远程访问本地服务

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 前言1.Wnmp下载安装2.Wnmp设置3.安装cpolar内网穿透3.1…

etcd储存安装

目录 etcd介绍: etcd工作原理 选举 复制日志 安全性 etcd工作场景 服务发现 etcd基本术语 etcd安装(centos) 设置&#xff1a;etcd后台运行 etcd 是云原生架构中重要的基础组件&#xff0c;由 CNCF 孵化托管。etcd 在微服务和 Kubernates 集群中不仅可以作为服务注册…

Linux引导过程与服务控制

目录 一、操作系统引导过程 1. 过程图示 2. 步骤解析 2.1 bios 2.2 mbr 2.3 grup 2.4 加载内核文件 3. 过程总结 4. centos6和centos7启动区别 5. 小结 二、服务控制及切换运行级别 1. systemd核心概念 2. 运行级别 3. 运行级别所对应的Systemd目标 4. Systemd…

计算机环境安全

操作系统安全----比如windows,linux 安全标识--实体唯一性 windows---主体&#xff1a;账户&#xff0c;计算机&#xff0c;服务 安全标识符SID-Security Identifier 普通用户SID是1000&#xff0c;管理用SID是500 linux---主体&#xff1a;用户&#xff0c;用户组&#xf…

云原生学习系列之基础环境准备(单节点安装kubernetes)

一、环境要求 操作系统CentOS 7.x-86_x64 硬件配置&#xff1a;内存2GB或2G&#xff0c;CPU 2核或CPU 2核&#xff0c;需要在虚拟机中提前设置好&#xff0c;不然后续会报错 二、系统初始化 1、设置主机名 # 在master节点执行 hostnamectl set-hostname master01 2、配置主…

论文浅尝 | 以词-词关系进行分类的统一命名实体识别

笔记整理&#xff1a;曹旭东&#xff0c;东南大学硕士&#xff0c;研究方向为知识图谱构建、自然语言处理 链接&#xff1a;https://arxiv.org/abs/2112.10070 1. 动机 在以前的工作中&#xff0c;命名实体识别&#xff08;NER&#xff09;涉及的主要问题有三种类型&#xff0c…

TypeScript 从入门到进阶之基础篇(六) 类型(断言 、推论、别名)| 联合类型 | 交叉类型

系列文章目录 TypeScript 从入门到进阶系列 TypeScript 从入门到进阶之基础篇(一) ts基础类型篇TypeScript 从入门到进阶之基础篇(二) ts进阶类型篇TypeScript 从入门到进阶之基础篇(三) 元组类型篇TypeScript 从入门到进阶之基础篇(四) symbol类型篇TypeScript 从入门到进阶…

5G-A,一根蓄满能量的弹簧

光阴转瞬&#xff0c;恍然间2024已经来到身边。经历了2023年全球AI技术大爆发&#xff0c;以及智能汽车、虚拟现实、自主科技等诸多领域取得关键进展。想必大家希望知道在新一年中有哪些值得期待的科技增长空间。 如果是这样&#xff0c;那么不妨将目光投向5G-A。 与其他科技领…

Python基础-07(for循环、range()函数)

文章目录 前言一、for循环1.for循环结构2.参数 end&#xff08;使其输出时变为横向&#xff09; 二、range()函数1.range(常数)2.range(起始值&#xff0c;结束值)3.range(起始值&#xff0c;结束值&#xff0c;步长)4.例子 总结 前言 此章介绍循环结构中最常用的循环&#xf…

React使用动态标签名称

最近在一项目里&#xff08;React antd&#xff09;遇到一个需求&#xff0c;某项基础信息里有个图标配置&#xff08;图标用的是antd的Icon组件&#xff09;&#xff0c;该项基础信息的图标信息修改后&#xff0c;存于后台数据库&#xff0c;后台数据库里存的是antd Icon组件…

SpringDoc注解解析

一、什么是SpringDoc SpringDoc注解的使用&#xff0c;它是基于OpenAPI 3和Swagger 3的现代化解决方案&#xff0c;相较于旧版的Swagger2(SpringFox)&#xff0c;SpringDoc提供了更简洁、更直观的注解方式。 二、SpringDoc的注解分类 2.1 作用于类的注解 1. Tag 用于说明…

Github 2024-01-07 开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2024-01-07统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目4Jupyter Notebook项目2Go项目2C#项目1Starlark项目1非开发语言项目1Java项目1 跨平台应用程序UI框…