基于javaweb+mysql的jsp+servlet医院挂号预约管理系统(管理员、用户)(java+jsp+servlet+mysql)
运行环境
Java≥8、MySQL≥5.7、Tomcat≥8
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
管理员:登录、管理员、医生、病人、预约挂号、科室管理
普通用户:注册、登录、预约挂号、挂号查询
普通用户(前台)
管理员(后台)
技术框架
CSS JavaScript JSP Servlet JDBC MySQL
基于javaweb+mysql的JSP+Servlet医院挂号预约管理系统(管理员、用户)(java+jsp+servlet+mysql)
public class RegisterServlet extends HttpServlet {
private RegisterService registerService = new RegisterServiceImp();
private PatientService patientService = new PatientServiceImp();
private DoctorService doctorService = new DoctorServiceImp();
private OfficeService officeService = new OfficeServiceImp();
public RegisterServlet() {
super();
}
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
// 得到值
filename += Math.round(Math.random() * 1000000);
filename += ext;
filepath += filename;
// 文件另存为
file.setCharset("UTF-8");
file.saveAs(filepath, SmartUpload.SAVE_VIRTUAL);
}
// 获取smartupload封装的request
req = su.getRequest();
// 得到值
String docName = req.getParameter("docName");
// String docImg=request.getParameter("docImg");
int money = Integer.valueOf(req.getParameter("money"));
String docTime = req.getParameter("docTime"); // 需要将其转化成sql里面的日期
int sumCount = Integer.valueOf(req.getParameter("sumCount"));
// int lessCount=Integer.valueOf(request.getParameter("lessCount"));
// String docStatus=request.getParameter("docStatus");
int offId = Integer.valueOf(req.getParameter("offId"));// 得到的就是offId
Date timeDate = DateUtil.getBirthDate(docTime);
// 插入数据库
// /Doctor doctor=new Doctor(docName,Integer.valueOf(offId));
Doctor doctor = new Doctor(docName, filepath, money, timeDate,
sumCount, sumCount, "正常", offId);
boolean b = doctorService.add(doctor);
if (b) {// 成功// 跳转到列表,要更新
showList(request, response);
} else {
// 插入失败
request.setAttribute("error", "添加失败");
request.getRequestDispatcher("/admin/addDoctor.jsp").forward(
request, response);
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 修改
public void gotoModify(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 初始化下拉列表框
List<Office> offList = officeService.getList(null, null);// ??、
// 保存值,跳转到页面
request.setAttribute("offList", offList);
// 初始化值,初始化docName,初始化offName
// 得到页面的docId,查询数据库,得到对象,初始化页面
String docId = request.getParameter("docId");
Doctor doc = doctorService.get(Integer.valueOf(docId));
Office office = officeService.get(doc.getOffId());
DoctorDto dto = new DoctorDto(); // 用dto封装
dto.setDocId(doc.getDocId());
dto.setDocName(doc.getDocName());
dto.setOffName(office.getOffName());
public class PatientServlet extends HttpServlet {
private PatientService patientService = new PatientServiceImp();
private RegisterService registerService = new RegisterServiceImp();
public PatientServlet() {
super();
}
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
// 得到值
String method = request.getParameter("method");
if (method.equals("showList")) {
request.setAttribute("error", "请您输入姓名");
request.getRequestDispatcher("/admin_login.jsp").forward(request,
response);
return;
}
if (password == null || password.equals("")) {
request.setAttribute("error", "请您输入密码");
request.getRequestDispatcher("/admin_login.jsp").forward(request,
response);
return;
}
if (imgTxt == null || imgTxt.trim().equals("")) {
request.setAttribute("error", "验证码不能空");
request.getRequestDispatcher("/admin_login.jsp").forward(request,
response);
return;
}
// 查找数据库,匹配管理员
Admin admin = adminService.getAdmin(adminName);
if (admin != null) {
// 查找到有该管理员
if (!password.trim().equals(admin.getAdminPassword())) {
request.setAttribute("error", "密码错误");
request.getRequestDispatcher("/admin_login.jsp").forward(
request, response);
} else {
// 匹配验证码
String str = (String) request.getSession().getAttribute("str");
if (imgTxt.equals(str)) {
// 登录成功,跳到后台管理页面
// 将管理员保存到到session中
request.getSession().setAttribute("admin", admin);
request.getRequestDispatcher("/admin/index.jsp").forward(
request, response);
} else {
request.setAttribute("error", "验证码错误");
request.getRequestDispatcher("/admin_login.jsp").forward(
request, response);
}
}
} else {
// 没有此管理员
response);
}
public void modify(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String adminId = request.getParameter("adminId");
String adminName = request.getParameter("adminName");
String password = request.getParameter("password");
Admin admin = new Admin(adminName, password);
admin.setAdminId(Integer.valueOf(adminId)); // 根据id修改
boolean b = adminService.modify(admin);
if (b) {
// 修改成功
showList(request, response);
} else {
request.setAttribute("error", "修改管理员信息失败");
request.getRequestDispatcher("/admin/updateAdmin.jsp").forward(
request, response);
}
}
public void gotoModify(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 得到admin,初始化界面,
String adminId = request.getParameter("adminId");
Admin admin = adminService.getAdmin(Integer.valueOf(adminId));
request.setAttribute("admin", admin);
request.getRequestDispatcher("/admin/updateAdmin.jsp").forward(request,
response);
}
// 根据管理员id删除
public void delete(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 删除单个传来的值
String adminId = request.getParameter("adminId");
// 删除多个传来的值
String str = request.getParameter("adminIdArr");// 得到id的字符串,然后分割成数组
boolean b = false;
if (str != null && !str.trim().equals("")) {
String arrId[] = str.split(","); // 将字符串分割成数组,得到所有复选框的value,即管理员id
for (int i = 0; i < arrId.length; i++) {
System.out.println(arrId[i]);
b = adminService.delete(Integer.valueOf(arrId[i]));
}
} else {
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String method = request.getParameter("method");
if (method.equals("add")) {
// 添加用户
add(request, response);
} else if (method.equals("adminLogin")) {
// 管理员登录
adminLogin(request, response);
} else if (method.equals("showList")) {
// 显示管理员列表
showList(request, response);
} else if (method.equals("gotoModify")) {
// 进入修改
gotoModify(request, response);
} else if (method.equals("modify")) {
// 修改之后
modify(request, response);
} else if (method.equals("delete")) {
// 删除用户
delete(request, response);
} else if (method.equals("loginOut")) {
// 退出登录
loginOut(request, response);
}
}
// 判断是否重名
public boolean isReName(String adminName, HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
boolean reName = false;
// 判断不能重名
List<Admin> list = adminService.getAdminList(null, null); // 得到列表,查询所有的
return b;
}
public void frontShowList(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 前台显示
String offId = request.getParameter("offId");// 前台挂号时,通过选择科室得到下面的医生
// 挂号时,选择医生,把医生id传过来
String docId = request.getParameter("docId");
if (docId != null) {
// 跳到“挂号开始”页面
Doctor doctor = doctorService.get(Integer.valueOf(docId));
Office office = officeService.get(doctor.getOffId());
request.setAttribute("office", office);
request.setAttribute("doctor", doctor);
request.getRequestDispatcher("/guhaoStart.jsp").forward(request,
response);
} else {
// 选择科室时,显示科室下面的医生
List<Doctor> doctorList = doctorService.getByOffId(Integer
.valueOf(offId));
Office office = officeService.get(Integer.valueOf(offId));
request.setAttribute("office", office); // 医生列表中需要显示科室名称
request.setAttribute("docList", doctorList);
request.getRequestDispatcher("/showDoctor.jsp").forward(request,
response);
}
}
public void selectDocList(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 分页
PageData pageData = new PageData();
// 得到当前页
String currentPage = request.getParameter("currentPage");
if (currentPage != null) {
pageData.setCurrentPage(Integer.valueOf(currentPage));
}
// 得到每页行数
String pageRows = request.getParameter("pageRows");
if (pageRows != null) {
pageData.setPageRows(Integer.valueOf(pageRows));
// 判断不能重名
List<Admin> list = adminService.getAdminList(null, null); // 得到列表,查询所有的
if (list != null) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getAdminName().equals(adminName)) {
reName = true;
break;
}
}
}
return reName;
}
public void add(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 添加管理员
String adminName = request.getParameter("adminName");
String password = request.getParameter("password");
String rePassword = request.getParameter("rePassword");
if (adminName == null || adminName.trim().equals("")) {
request.setAttribute("error", "用户名不能为空");
request.getRequestDispatcher("/admin/admin_add.jsp").forward(
request, response);
return;
}
if (password == null || password.trim().equals("")) {
request.setAttribute("error", "密码不能为空");
request.getRequestDispatcher("/admin/admin_add.jsp").forward(
request, response);
return;
}
if (rePassword == null || rePassword.trim().equals("")) {
request.setAttribute("error", "确认密码不能为空");
request.getRequestDispatcher("/admin/admin_add.jsp").forward(
request, response);
return;
}
if (!rePassword.equals(password)) {
request.setAttribute("error", "两次密码不一致");
request.getRequestDispatcher("/admin/admin_add.jsp").forward(
public class AdminServlet extends HttpServlet {
private AdminService adminService = new AdminServiceImpl();
public AdminServlet() {
super();
}
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String method = request.getParameter("method");
if (method.equals("add")) {
// 添加用户
add(request, response);
} else if (method.equals("adminLogin")) {
// 管理员登录
adminLogin(request, response);
} else if (method.equals("showList")) {
// 显示管理员列表
showList(request, response);
} else if (method.equals("gotoModify")) {
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
// 得到值
String method = request.getParameter("method");
if (method.equals("frontShowList")) {
// 显示诊室列表
frontShowList(request, response);
} else if (method.equals("showList")) {
// 显示诊室列表
showList(request, response);
} else if (method.equals("add")) {
add(request, response);
} else if (method.equals("modify")) {
modify(request, response);
} else if (method.equals("gotoModify")) {
gotoModify(request, response);
} else if (method.equals("delete")) {
delete(request, response);
}
}
public void frontShowList(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 分页
PageData pageData = new PageData();
// 得到当前页
String currentPage = request.getParameter("currentPage");
if (currentPage != null) {
pageData.setCurrentPage(Integer.valueOf(currentPage));
}
// 得到每页行数
String pageRows = request.getParameter("pageRows");
if (pageRows != null) {
String arrId[] = str.split(","); // 将字符串分割成数组,得到所有复选框的value,即管理员id
for (int i = 0; i < arrId.length; i++) {
System.out.println(arrId[i]);
b = adminService.delete(Integer.valueOf(arrId[i]));
}
} else {
if (adminId != null) {
b = adminService.delete(Integer.valueOf(adminId));
} else {
// 都为空的时候
JOptionPane.showMessageDialog(null, "您还没有选择删除的人");// 跳出去
showList(request, response);
return;
}
}
if (!b) {
request.setAttribute("errDelete", "删除管理员失败");
}
showList(request, response);
}
public void loginOut(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 退出登录,销毁session
request.getSession().invalidate();
request.getRequestDispatcher("/admin_login.jsp").forward(request,
response);
}
public void adminLogin(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String adminName = request.getParameter("adminName");
String password = request.getParameter("password");
// 删除单个传来的值
String adminId = request.getParameter("adminId");
// 删除多个传来的值
String str = request.getParameter("adminIdArr");// 得到id的字符串,然后分割成数组
boolean b = false;
if (str != null && !str.trim().equals("")) {
String arrId[] = str.split(","); // 将字符串分割成数组,得到所有复选框的value,即管理员id
for (int i = 0; i < arrId.length; i++) {
System.out.println(arrId[i]);
b = adminService.delete(Integer.valueOf(arrId[i]));
}
} else {
if (adminId != null) {
b = adminService.delete(Integer.valueOf(adminId));
} else {
// 都为空的时候
JOptionPane.showMessageDialog(null, "您还没有选择删除的人");// 跳出去
showList(request, response);
return;
}
}
if (!b) {
request.setAttribute("errDelete", "删除管理员失败");
}
showList(request, response);
}
public void loginOut(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 退出登录,销毁session
request.getSession().invalidate();
request.getRequestDispatcher("/admin_login.jsp").forward(request,
response);
}
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//生成验证码
int width=70;
int height=35;
BufferedImage img=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//TYPE_INT_RGB 表示一个图像,它具有合成整数像素的 8 位 RGB 颜色分量。
//获取画笔
Graphics g=img.getGraphics();
//设置图片颜色边框
g.setColor(Color.white);
g.fillRect(0, 0, width, height); //rect矩形
//设置边框颜色
g.setColor(Color.black);
g.drawRect(0, 0, width-1, height-1);
//生成文字,随机
Random random=new Random();
int num=random.nextInt(8999)+1000;
String str=String.valueOf(num);
//讲str设置到session中去
request.getSession().setAttribute("str", str);
g.setColor(Color.red);
g.setFont(new Font("黑体",Font.ITALIC,30));
g.drawString(str, 5, 25); //10,20是坐标位置,其实坐标0,0是左下角,这是画文字的区别
//生成干扰线,产生两个坐标
for(int i=0;i<10;i++){
int x0=random.nextInt(width);
int y0=random.nextInt(height);
int x1=random.nextInt(width);
int y1=random.nextInt(height);
g.drawLine(x1, y1, x0, y0);
}
//?
ImageIO.write(img, "JPEG", response.getOutputStream());
}
public void init() throws ServletException {
// Put your code here
}
return;
}
if (b) {
// 添加成功
// JOptionPane.showMessageDialog(null, "注册管理员成功");
showList(request, response);
} else {
// 添加失败,返回到添加页面
request.setAttribute("error", "添加管理员失败");
request.getRequestDispatcher("/admin/admin_add.jsp").forward(
request, response);
}
}
// 显示管理员列表
public void showList(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String checkName = request.getParameter("checkName"); // 得到名字,根据姓名查找时用
// 分页
PageData pageData = new PageData();
// 得到当前页
String currentPage = request.getParameter("currentPage");
if (currentPage != null) {
pageData.setCurrentPage(Integer.valueOf(currentPage));
}
// 得到每页行数
String pageRows = request.getParameter("pageRows");
if (pageRows != null) {
pageData.setPageRows(Integer.valueOf(pageRows));
}
// 得到总行数
int rowsCount = adminService.getRowsCount(checkName);
pageData.setRowsCount(rowsCount);
// 计算总页数
int pageCount = 0;
if (rowsCount % pageData.getPageRows() == 0) {
pageCount = rowsCount / pageData.getPageRows();
} else {
pageCount = rowsCount / pageData.getPageRows() + 1;
}
pageData.setPageCount(pageCount);
List<Admin> adminList = adminService.getAdminList(checkName, pageData); // 得到所有的
// 保存
request.setAttribute("adminList", adminList);
request.setAttribute("page", pageData); // 将page传过去
request.setAttribute("checkName", checkName);// 不让名字清空
request.getRequestDispatcher("/admin/adminList.jsp").forward(request,
response);
}
public void modify(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
} else {
request.setAttribute("error", "修改管理员信息失败");
request.getRequestDispatcher("/admin/updateAdmin.jsp").forward(
request, response);
}
}
public void gotoModify(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 得到admin,初始化界面,
String adminId = request.getParameter("adminId");
Admin admin = adminService.getAdmin(Integer.valueOf(adminId));
request.setAttribute("admin", admin);
request.getRequestDispatcher("/admin/updateAdmin.jsp").forward(request,
response);
}
// 根据管理员id删除
public void delete(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 删除单个传来的值
String adminId = request.getParameter("adminId");
// 删除多个传来的值
String str = request.getParameter("adminIdArr");// 得到id的字符串,然后分割成数组
boolean b = false;
if (str != null && !str.trim().equals("")) {
String arrId[] = str.split(","); // 将字符串分割成数组,得到所有复选框的value,即管理员id
for (int i = 0; i < arrId.length; i++) {
System.out.println(arrId[i]);
b = adminService.delete(Integer.valueOf(arrId[i]));
}
} else {
if (adminId != null) {
b = adminService.delete(Integer.valueOf(adminId));
} else {
// 都为空的时候
JOptionPane.showMessageDialog(null, "您还没有选择删除的人");// 跳出去
showList(request, response);
return;
pageData.setPageRows(Integer.valueOf(pageRows));
}
// 得到总行数
int rowsCount = patientService.getRowsCount(checkName);
pageData.setRowsCount(rowsCount);
// 计算总页数
int pageCount = 0;
if (rowsCount % pageData.getPageRows() == 0) {
pageCount = rowsCount / pageData.getPageRows();
} else {
pageCount = rowsCount / pageData.getPageRows() + 1;
}
pageData.setPageCount(pageCount);
// 先查询数据库
List<Patient> pList = patientService.getList(checkName, pageData);// 查询所有的
// 查看是否有预约,有预约姓名显示红色,没有预约显示黑色,删除时就只能删除黑色的
for (Patient p : pList) {
boolean isReg = isHasReg(p.getpId(), request, response);
if (isReg) {
p.setColor("red");
} else {
p.setColor("black");
}
}
// 跳到页面,并将值传过去
request.setAttribute("pList", pList);
request.setAttribute("page", pageData); // 将page传过去
request.setAttribute("checkName", checkName);// 不让名字清空
// 预约挂号中链接病人姓名得到信息
String regPId = request.getParameter("regPId");
if (regPId != null) {
// 显示单条病人信息
Patient patient = patientService.get(Integer.valueOf(regPId));
request.setAttribute("patient", patient);
request.getRequestDispatcher("/admin/regShowPatient.jsp").forward(
request, response);
} else {
request.getRequestDispatcher("/admin/patientList.jsp").forward(
request, response);
}
}
// 添加
public void add(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 得到值
String name = request.getParameter("name");
String password = request.getParameter("password");
HttpServletResponse response) throws ServletException, IOException {
boolean b = false; // 默认没有预约
Register register = registerService.getByDocId(docId);
if (register == null) {
b = false;// 没有预约
} else {
b = true;// 有预约
}
return b;
}
public void frontShowList(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 前台显示
String offId = request.getParameter("offId");// 前台挂号时,通过选择科室得到下面的医生
// 挂号时,选择医生,把医生id传过来
String docId = request.getParameter("docId");
if (docId != null) {
// 跳到“挂号开始”页面
Doctor doctor = doctorService.get(Integer.valueOf(docId));
Office office = officeService.get(doctor.getOffId());
request.setAttribute("office", office);
request.setAttribute("doctor", doctor);
request.getRequestDispatcher("/guhaoStart.jsp").forward(request,
response);
} else {
// 选择科室时,显示科室下面的医生
List<Doctor> doctorList = doctorService.getByOffId(Integer
.valueOf(offId));
Office office = officeService.get(Integer.valueOf(offId));
request.setAttribute("office", office); // 医生列表中需要显示科室名称
request.setAttribute("docList", doctorList);
request.getRequestDispatcher("/showDoctor.jsp").forward(request,
response);
}
}