1.需求
实现爱心宠物诊所系统功能,主要功能需求如下:
“爱心”宠物诊所的职员在工作中需要查阅和管理如下信息:诊所的兽医、客户以及客户的宠物。
“爱心”宠物诊所的职员需要使用系统提供的如下功能:
- 浏览诊所的兽医以及他们的专业特长;
- 浏览宠物的主人(即诊所的客户)的相关信息;
- 更新宠物的主人的相关信息;
- 向系统中增加一个新客户;
- 浏览宠物的相关信息;
- 更新宠物的相关信息;
- 向系统中增加一个新宠物;
- 浏览宠物的访问历史记录;
- 向宠物的访问历史记录添加一次访问;
- 此外,诊所的职员在使用系统提供的上述功能之前需要进行登录。当职员不需要使用系统的上述功能时,也可退出系统。
2.技术选型(IDEA开发工具)
- Tomcat8.0
- MySql8
- JavaBean
- Servlet
- Jsp
3.大致实现
3.1登录
简单的登录,没什么好说的.要注意的就是设置过滤器,确认用户登录后,才可进行其他接口,页面的操作!
public class ManagerFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest= (HttpServletRequest) servletRequest;
String uri = httpServletRequest.getRequestURI();
//过滤登录请求
if (
uri.equals(httpServletRequest.getContextPath()+"/login")
||uri.equals(httpServletRequest.getContextPath()+"jsp/login.jsp")
||uri.equals(httpServletRequest.getContextPath()+"/")
){
filterChain.doFilter(servletRequest, servletResponse);
}
else {
User user= (User) httpServletRequest.getSession().getAttribute("user");
if (user==null){
servletRequest.getRequestDispatcher("/jsp/login.jsp").forward(servletRequest, servletResponse);
}else {
filterChain.doFilter(servletRequest, servletResponse);
}
}
}
@Override
public void destroy() {
}
}
3.2管理员首页
这里主要是JSP页面的代码,不放了,毕竟我们是面向后端的.这里展管理员的基础功能列表,详细的看后面.
3.3兽医名单操作
主要工作就是数据库的查询,还有删除与添加,记得提交事务.否则不进行修改操作.
3.3.1获得兽医信息代码:
前端发送Ajax请求,在对获得的数据进行处理即可.
@WebServlet(urlPatterns = "/getVets")
public class GetVetsServlet extends BaseServlet{
private VetDao vetDao=new VetDaoImpl();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List<Vet> vetList = vetDao.getVetList();
JdbcUtils.commitAndClose();
Gson gson = new Gson();
resp.setCharacterEncoding("utf-8");
resp.setContentType("application/json");
resp.getWriter().write(String.valueOf(gson.toJson(vetList)));
}
}
3.3.2添加删除兽医(代码大致一样就放一块了)
@WebServlet(urlPatterns = "/addVet")
public class AddVetServlet extends BaseServlet{
private VetDao vetDao = new VetDaoImpl();
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
Vet vet = WebUtils.copyParamToBean(req.getParameterMap(), new Vet());
int i = vetDao.addVet(vet);
JdbcUtils.commitAndClose();
//页面重定向
resp.sendRedirect(req.getContextPath() + "/jsp/getVet.jsp");
}
}
@WebServlet(urlPatterns = "/deleteVet")
public class DeleteVetServlet extends BaseServlet{
private VetDao vetDao=new VetDaoImpl();
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String id = req.getParameter("id");
vetDao.deleteVetById( WebUtils.parseInt(id, 0));
JdbcUtils.commitAndClose();
}
}
3.4客户查看
展示客户信息,删除一个客户,同样也是一个Ajax发送请求的事.改变就诊状态也一样.都是Ajax请求,这里贴一下改变就诊状态的后端代码.其余那些差不多的.
@WebServlet("/revIsSeeDoctor")
public class RevIsSeeDoctorServlet extends BaseServlet{
private CustomerDao customerDao=new CustomerDaoImpl();
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
int id = WebUtils.parseInt(req.getParameter("id"), 0);
String isSeeDoctor = customerDao.getCustomerById(id).getIsSeeDoctor();
if ("就诊中".equals(isSeeDoctor)){
customerDao.updateIsSeeDoctorById(id,"就诊完");
}
else {
customerDao.updateIsSeeDoctorById(id,"就诊中");
}
JdbcUtils.commitAndClose();
}
}
3.5所有宠物
同样是前端发送Aajx请求,对获得的数据进行处理.不放代码啦,需要的话可以看后面联系方式,开源给大家.
3.6宠物登记
获取前端的表单内容,对内容处理即可.
后端代码:
@WebServlet(urlPatterns = "/addCustomer")
public class AddCustomer extends BaseServlet{
private CustomerService customerService=new CustomerSericeImpl();
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
Customer customer = WebUtils.copyParamToBean(req.getParameterMap(), new Customer());
customerService.saveCustomer(customer);
JdbcUtils.commitAndClose();
resp.sendRedirect(req.getContextPath() + "/jsp/getCustomer.jsp");
}
}
3.7 宠物访问历史记录
实现和前面的大致一样.其实很多代码工作都是差不多的,主要就是前端的排版问题.还有Ajax访问
4.其他
4.1前端Ajax编写
我怕一个Ajax都没贴出来,表达不明确,这里就是给大家看一个前端的Ajax请求.
例子:是宠物信息jsp页面的Ajax请求.
function LoadCustomerData() {
$.ajax({
url: $("#PageContext").val()+"/getCustomer",
type: "get",
dataType: "json",
success: function (data) {
//清除旧的数据
$("#information").html("");
//添加新的数据
$.each(data, function (i, n) {
$("#information").append("<tr>")
.append("<td>" + n.id + "</td>")
.append("<td>" + n.petName + "</td>")
.append("<td>" + n.petGender + "</td>")
.append("<td>" + n.createTime + "</td>")
.append("<td>" + n.illness + "</td>")
.append("<td>" + n.isSeeDoctor + "<button οnclick='javascript:return RevIsSeeDoctor("+n.id+")' class='layui-btn layui-btn-sm layui-btn-primary'><i class='layui-icon layui-icon-senior' style='font-size: 15px; color: #1E9FFF;'></i></button></td>")
.append("<td><button οnclick='javascript:return Access("+n.id+")' class='layui-btn layui-btn-sm layui-btn-primary'><i class='layui-icon layui-icon-survey' style='font-size: 15px; color: #715555;'></i></button></td>")
.append("<td>"+"<button οnclick='javascript:return GetCustomer("+n.id+")' class='layui-btn layui-btn-sm layui-btn-primary'><i class='layui-icon layui-icon-user' style='font-size: 15px;'></i></button></td>")
.append("<td><button οnclick='javascript:return Del("+n.id+")' class='layui-btn layui-btn-sm layui-btn-primary'><i class='layui-icon layui-icon-delete' style='font-size: 15px; color: red;'></i></button></td>")
.append("</tr>")
});
},
})
}
//ajax 删除请求
function Del(id){
var msg = "确认删除?";
if (confirm(msg)==true){
// alert(id+"--"+pageNum)
id=parseInt(id)
// alert(id)
$.ajax({
url: $("#PageContext").val()+"/deleteCustomer",
type: "post",
data : {
id:id
},
success: function () {
//情况旧数据
LoadCustomerData();
layer.msg('删除成功');
}
})
}else{
return false;
}
}
function RevIsSeeDoctor(id){
var msg = "确认修改就诊状态?";
if (confirm(msg)==true){
// alert(id+"--"+pageNum)
id=parseInt(id)
// alert(id)
$.ajax({
url: $("#PageContext").val()+"/revIsSeeDoctor",
type: "post",
data : {
id:id
},
success: function () {
//情况旧数据
LoadCustomerData();
layer.msg('修改成功');
}
})
}else{
return false;
}
}
function GetCustomer(id){
id=parseInt(id)
$.ajax({
url: $("#PageContext").val()+"/getCustomer",
type: "get",
data : {
id:id
},
success: function (data) {
console.log(data)
layer.open({
title: '主人信息',
// area: ['500px', '300px'],
content: "姓名:"+data.name+"</br>"+
"性别:"+data.customerGender+"</br>"+
"电话:"+data.phone+"</br>"+
"居住地址:"+data.address+"</br>"
});
}
})
}
// 添加访问弹出框, 显示弹框,传递对应的Id
function Access(id){
//赋值id,方便传递到后台
$("#id").val(id);
$("#createFileTitle").text("添加访问");
$('#addVisitModal').modal('show');
}
4.2目录结构
目录 | 说明 |
---|---|
dao | 数据库操作层 |
filter | 相关过滤器 |
pojo | 与数据库对应的实体类 |
service | 服务层,就是调用dao层的方法,对服务进行汇总,简化web/controller层的代码 |
untils | 工具库,例如Jdbc工具,Web工具等 |
web | 页面接口控制,相当与ssm框架的controller把 |
webapp | 放一些web.xml配置文件,以及前端静态资源和jsp页面 |
5项目获取
项目开源:
V1版本
https://gitee.com/langshixiansheng/pet-clinic
V2版本:修改了数据库和美化了点页面,让程序更美观了,数据也更合理了
https://gitee.com/langshixiansheng/pet-clinic_V2