1.需求

实现爱心宠物诊所系统功能,主要功能需求如下:
“爱心”宠物诊所的职员在工作中需要查阅和管理如下信息:诊所的兽医、客户以及客户的宠物。
“爱心”宠物诊所的职员需要使用系统提供的如下功能:

  1. 浏览诊所的兽医以及他们的专业特长;
  2. 浏览宠物的主人(即诊所的客户)的相关信息;
  3. 更新宠物的主人的相关信息;
  4. 向系统中增加一个新客户;
  5. 浏览宠物的相关信息;
  6. 更新宠物的相关信息;
  7. 向系统中增加一个新宠物;
  8. 浏览宠物的访问历史记录;
  9. 向宠物的访问历史记录添加一次访问;
  10. 此外,诊所的职员在使用系统提供的上述功能之前需要进行登录。当职员不需要使用系统的上述功能时,也可退出系统。

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

Logo

鸿蒙生态一站式服务平台。

更多推荐