基于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)
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 = 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.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));
}
// 得到总行数
int rowsCount = doctorService.getRowsCount(null);
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<Doctor> docList = doctorService.getList(null, pageData);// 查询所有记
// 查询医生,还要查询科室,得到科室名
List<DoctorDto> docDtoList = new ArrayList<DoctorDto>();
DoctorDto dto = null;
for (Doctor doc : docList) {
// 根据doc.getOffId()得到科室
dto = new DoctorDto(); // 必须在里面创建
Office office = officeService.get(doc.getOffId());// 得到第一条记录
dto.setDocId(doc.getDocId());
dto.setDocName(doc.getDocName());
dto.setOffName(office.getOffName());
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");
String rePassword = request.getParameter("rePassword");
String relname = request.getParameter("relname");
String sex = request.getParameter("sex");
String tel = request.getParameter("tel");
String card = request.getParameter("card");
// 判断在前台页面判断
if (name == null || name.trim().equals("")) {
request.setAttribute("error", "用户名不能为空");
request.getRequestDispatcher("/patient_regist.jsp").forward(
request, response);
return;
}
if (password == null || password.trim().equals("")) {
request.setAttribute("error", "密码不能为空");
request.getRequestDispatcher("/patient_regist.jsp").forward(
request, response);
return;
}
if (rePassword == null || rePassword.trim().equals("")) {
request.setAttribute("error", "确认密码不能为空");
request.getRequestDispatcher("/patient_regist.jsp").forward(
request, response);
return;
request, response);
return;
}
if (!rePassword.equals(password)) {
request.setAttribute("error", "两次密码不一致");
request.getRequestDispatcher("/admin/admin_add.jsp").forward(
request, response);
return;
}
// 开始往数据库里插入数据--添加管理员
boolean reName = isReName(adminName, request, response); // 判断不能重名
Admin admin = new Admin(adminName, password);
boolean b = false;
if (!reName) {
// 如果没有重名,插入数据库
b = adminService.addAdmin(admin);
} else {
request.setAttribute("error", "已存在此用户");
request.getRequestDispatcher("/admin/admin_add.jsp").forward(
request, response);
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));
}
// 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 {
String adminId = request.getParameter("adminId");
String adminName = request.getParameter("adminName");
String password = request.getParameter("password");
public class ImageServlet extends HttpServlet {
public ImageServlet() {
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 {
//生成验证码
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;
// 前台查询挂号
public void selectRegister(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 得到用户名,密码
String pName = request.getParameter("pName"); // 得到输入的用户名
String password = request.getParameter("password");
if (pName == null || pName.trim().equals("")) {
request.setAttribute("error", "用户名不能为空");
request.getRequestDispatcher("/guhao_select.jsp").forward(request,
response);
return;
}
if (password == null || password.trim().equals("")) {
request.setAttribute("error", "密码不能为空");
request.getRequestDispatcher("/guhao_select.jsp").forward(request,
response);
return;
}
// 根据用户名得到病人,得到预约信息
Patient patient = patientService.get(pName);
if (patient != null) {
if (patient.getPassword().equals(password)) {
// 根据病人id得到预约挂号信息
Register register = registerService.getByPId(patient.getpId());
if (register != null) {
// 显示预约信息,得到医生, 科室
Doctor doctor = doctorService.get(register.getDocId());
Office office = officeService.get(doctor.getOffId());
request.setAttribute("p", patient);
request.setAttribute("doc", doctor);
request.setAttribute("reg", register);
request.setAttribute("off", office);
request.getRequestDispatcher("/showSelectRegister.jsp")
.forward(request, response);
} else {
request.setAttribute("error", "您没有任何预约");
request.getRequestDispatcher("/guhao_select.jsp").forward(
request, response);
}
} else {
// 密码错误
request.setAttribute("error", "密码错误");
request.getRequestDispatcher("/guhao_select.jsp").forward(
request, response);
}
} else {
request.setAttribute("error", "没有此用户");
request.getRequestDispatcher("/guhao_select.jsp").forward(request,
}
if (!b) {
JOptionPane.showMessageDialog(null, "不能删除有预约的医生信息");
request.setAttribute("error", "删除医生失败");
}
showList(request, response);
}
public void init() throws ServletException {
// Put your code here
}
}
public class AdminServlet extends HttpServlet {
private AdminService adminService = new AdminServiceImpl();
public AdminServlet() {
super();
}
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
}
// 得到总行数
int rowsCount = officeService.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<Office> offList = officeService.getList(checkName, pageData); // 得到所有的
// 查看是否有医生,有医生显示红色,
for (Office off : offList) {
boolean isDoc = isHasDoc(off.getOffId(), request, response);
if (isDoc) {
off.setColor("red");
} else {
off.setColor("black");
}
}
// 跳到页面,并将值传过去
request.setAttribute("offList", offList);
request.setAttribute("page", pageData); // 将page传过去
request.setAttribute("checkName", checkName);// 不让名字清空
// 跳到后台
request.getRequestDispatcher("/admin/officeList.jsp").forward(request,
response);
}
// 添加
public void add(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String offId = request.getParameter("offId");
String offName = request.getParameter("offName");
// 得到值
System.out.println(offId);
System.out.println(offName);
// 判断在前台页面判断
if (offId == null || offId.trim().equals("")) {
request.setAttribute("error", "科室编号不能为空");
request.getRequestDispatcher("/admin/addOffice.jsp").forward(
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")) {
// 进入修改
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);
request, response);
return;
}
if (!rePassword.equals(password)) {
request.setAttribute("error", "两次密码不一致");
request.getRequestDispatcher("/patient_regist.jsp").forward(
request, response);
return;
}
if (relname == null || relname.trim().equals("")) {
request.setAttribute("error", "真实姓名不能为空");
request.getRequestDispatcher("/patient_regist.jsp").forward(
request, response);
return;
}
if (sex == null || sex.trim().equals("")) {
request.setAttribute("error", "性别不能为空");
request.getRequestDispatcher("/patient_regist.jsp").forward(
request, response);
return;
}
if (tel == null || tel.trim().equals("")) {
request.setAttribute("error", "电话不能为空");
request.getRequestDispatcher("/patient_regist.jsp").forward(
request, response);
return;
}
if (card == null || card.trim().equals("")) {
request.setAttribute("error", "省份证不能为空");
request.getRequestDispatcher("/patient_regist.jsp").forward(
request, response);
return;
}
// 插入数据库
Patient patient = new Patient(name, rePassword, relname, sex, tel, card);
boolean b = patientService.add(patient);
if (b) {
// 成功//跳转到列表,要更新
JOptionPane.showMessageDialog(null, "注册成功");
request.getRequestDispatcher("/index.jsp").forward(request,
response);
} else {
// 插入失败
request.setAttribute("error", "添加失败");
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");
String rePassword = request.getParameter("rePassword");
request.getRequestDispatcher("/guhao_select.jsp").forward(request,
response);
}
}
public void addAjax(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 添加时发送的ajax请求
String offId = request.getParameter("offId");
// 根据科室id查询对应的医生
List<Doctor> docList = doctorService.getByOffId(Integer.valueOf(offId));
// 将doclist转换为json数组字符串
String jString = JSONArray.fromObject(docList).toString();
// System.out.println(jString);
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
response.getWriter().write(jString);
response.getWriter().flush();
response.getWriter().close();
}
public void add(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 得到值
String pName = request.getParameter("pName"); // 得到输入的用户名
String password = request.getParameter("password");
Patient patient = patientService.get(pName);// 查询是否有该用户
if (patient != null) {
if (password.equals(patient.getPassword())) {
// 用户名,密码正确,预约成功
String docId = request.getParameter("docId");// 把医生信息传过来
Doctor doctor = doctorService.get(Integer.valueOf(docId));
String regNum = DateUtil.getDateSampleString(doctor
.getDocTime())
+ "-" + doctor.getDocId();// 拼接为挂号顺序
// 创建时间有问题?????
Register register = new Register(regNum, patient.getpId(),
doctor.getDocId(), doctor.getDocTime(), doctor
.getDocTime());
boolean b = registerService.add(register);
if (b) {
// 成功,跳到首页
//JOptionPane.showMessageDialog(null, "预约成功");
request.getRequestDispatcher("/index.jsp").forward(request,
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");
// 得到值
String method = request.getParameter("method");
if (method.equals("selectRegister")) {
// 前台查询挂号信息
selectRegister(request, response);
} else if (method.equals("showList")) {
// 显示诊室列表
showList(request, response);
} else if (method.equals("add")) {
// 前台挂号
add(request, response);
}
public void add(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 得到值
String pName = request.getParameter("pName"); // 得到输入的用户名
String password = request.getParameter("password");
Patient patient = patientService.get(pName);// 查询是否有该用户
if (patient != null) {
if (password.equals(patient.getPassword())) {
// 用户名,密码正确,预约成功
String docId = request.getParameter("docId");// 把医生信息传过来
Doctor doctor = doctorService.get(Integer.valueOf(docId));
String regNum = DateUtil.getDateSampleString(doctor
.getDocTime())
+ "-" + doctor.getDocId();// 拼接为挂号顺序
// 创建时间有问题?????
Register register = new Register(regNum, patient.getpId(),
doctor.getDocId(), doctor.getDocTime(), doctor
.getDocTime());
boolean b = registerService.add(register);
if (b) {
// 成功,跳到首页
//JOptionPane.showMessageDialog(null, "预约成功");
request.getRequestDispatcher("/index.jsp").forward(request,
response);
} else {
// 失败
request.setAttribute("error", "预约失败");
request.getRequestDispatcher("/guhaoStart.jsp").forward(
request, response);
}
} else {
// 密码错误
request.setAttribute("error", "密码错误");
request.getRequestDispatcher("/guhaoStart.jsp").forward(
request, response);
}
} else {
// 没有此用户
request.setAttribute("error", "用户名错误");
request.getRequestDispatcher("/guhaoStart.jsp").forward(request,
response);
}
public void init() throws ServletException {
// Put your code here
}
}
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 {
// 修改
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());
dto.setDocImg(doc.getDocImg());
dto.setDocStatus(doc.getDocStatus());
dto.setDocTime(doc.getDocTime());
dto.setMoney(doc.getMoney());
dto.setSumCount(doc.getSumCount());
dto.setLessCount(doc.getLessCount());
request.setAttribute("doctorDto", dto);
request.getRequestDispatcher("/admin/updateDoctor.jsp").forward(
request, response);
}
public void modify(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String docId = request.getParameter("docId");// 根据这个修改医生,
Doctor doctor = doctorService.get(Integer.valueOf(docId));
System.out.println(docId);
// 得到值,注意:页面不能有上传文件时所需要的enctype="multipart/form-data",否则得不到页面的值
String docName = request.getParameter("docName");
int money = Integer.valueOf(request.getParameter("money"));
String docTime = request.getParameter("docTime"); // 需要将其转化成sql里面的日期
int sumCount = Integer.valueOf(request.getParameter("sumCount"));
int offId = Integer.valueOf(request.getParameter("offId"));// 得到的就是offId
Date timeDate = DateUtil.getBirthDate(docTime);
// 更新得到的值
doctor.setDocName(docName);
doctor.setMoney(money);
doctor.setDocTime(timeDate);
doctor.setSumCount(sumCount);
doctor.setOffId(offId);
// 插入数据库
boolean b = doctorService.modify(doctor);