项目编号:BS-PT-052
项目说明:
本项目主要实现对流浪动物的救助和收养功能。前端用户可以注册并登陆,在系统前端页面可以实现对流浪动物相关知识的学习以及在线进行动物的收养操作。同时还为平台的运营者提供后台管理功能:主要包含用户管理、管理员管理、流浪动物管理、收养审批管理等相关功能。本系统功能完整,界面简洁大方,适合做毕业设计和课程设计使用。
本宠物领养系统主要是基于JAVA编程体系进行的研究开发,相较于其他编程语言,能够有效的减少成本。本系统采用的框架为SSM,包含了Spring、MyBatis,其中SpringMVC为Spring中的一部分。SpringMVC以及MyBatis能够相互衔接,减少开发工作中重复的量,为开发工作省了很大的功夫,提高了效率。而基础框架则选择Spring boot框架,使得配置能够更为的简单,减少了对环境的需求。
本项目使用三层架构设计,将整个程序主要分为用户视图层、逻辑接口层、数据处理层,各个层次之间分工明确、互不影响,即使有出现问题也只需维护出现问题的层次,不会影响其他的层次,能够将项目的结构设计的非常的清晰明了。各层次高内聚、低耦合,通过互相有效的配合来完成系统中的高效运行,将该架构的结构清晰、可维护性强、可拓展性高等优点展示得淋漓尽致。
本平台选择了Bootstrap及LayUI作为前端开发框架,Bootstrap能够提供HTML以及CSS规范,且包含JavaScript库以及Glyphicons库,其中具有许多的动态页面元素以及图形元素,便于我们对前端页面的开发。而LayUI门槛相对于其他框架来说较低,配置较为简便,没有那么的繁琐,可以提高开发的效率。同时,本平台还使用了MVC设计应用模式,能够将业务模型以及用户界面的代码实现分类,从而使同一程序中能够使用不同的表现形式。MVC还使用了一种业务逻辑、数据与界面显示分离的方式来组织代码,将许许多多的业务逻辑汇聚到同一部件之中,从而导致在改进界面与用户交互的同时,不用再一次编写业务逻辑,从而提高编程的效率,减少编码的时间。
运行环境
jdk8+tomcat8+mysql5.7+IntelliJ IDEA(或eclipse)+maven
项目技术(必填)
spring+spring mvc+mybatis+bootstrap+jquery
下面展示一下系统的基本功能:
前端用户注册、登陆
后台用户登陆
后台管理界面
以上是基于SSM实现的宠物领养系统的功能展示。
宠物领养的核心代码:
package com.ecjtu.controller; import com.ecjtu.entity.Admin; import com.ecjtu.service.AdminService; import com.ecjtu.util.Message; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; /** */ @Controller @RequestMapping("admin") public class AdminController { @Autowired private AdminService adminService; @RequestMapping("admins.action") @ResponseBody public Message getAdmins(@RequestParam(value = "pn",defaultValue = "1") Integer pn){ // 引入PageHelper分页插件 // 在查询之前只需要调用,传入页码,以及每页的大小 PageHelper.startPage(pn,4); List<Admin> admins = adminService.getAdmins(); // startPage后面紧跟的这个查询就是一个分页查询 System.out.println(admins+"admins"); // 使用pageInfo包装查询后的结果,只需要将pageInfo交给页面就行了。 // 封装了详细的分页信息,包括有我们查询出来的数据,传入连续显示的页数 PageInfo page=new PageInfo(admins,2); return Message.success().add("pageInfo",page); } @RequestMapping("create.action") @ResponseBody public Message addAdmin(Admin admin){ int i = adminService.addAdmin(admin); System.out.println(i); if(i>0){ return Message.success(); }else{ return Message.fail(); } } @RequestMapping("delete.action") @ResponseBody public Message deleteAdmin(Integer id){ int i = adminService.deleteAdmin(id); if(i>0){ return Message.success(); }else{ return Message.fail(); } } @RequestMapping("update.action") @ResponseBody public Message updateAdmin(Admin admin,MultipartFile file, HttpServletRequest request){ System.out.println(111); if(file!=null && file.equals("")==false) { String load = FileLoad.load(file,request); admin.setPic(load); } int i = adminService.updateAdmin(admin); System.out.println(i); if(i>0){ return Message.success(); }else{ return Message.fail(); } } @RequestMapping("findById.action") @ResponseBody public Message findById(Integer id) throws ParseException { Admin admin = adminService.findById(id); if(admin!=null){ return Message.success().add("admin",admin); }else{ return Message.fail(); } } @RequestMapping("/findByName.action") @ResponseBody public Message findByName(@RequestParam(value = "pn",defaultValue = "1") Integer pn,String adminName){ PageHelper.startPage(pn,4); List<Admin> admins = adminService.findByName(adminName); if(admins!=null){ PageInfo page = new PageInfo(admins,2); return Message.success().add("pageInfo",page); }else{ return Message.fail(); } } @RequestMapping("logout.action") public String logout(){ return "admin/login"; } }
package com.ecjtu.controller; import com.ecjtu.entity.Answer; import com.ecjtu.entity.Users; import com.ecjtu.service.AnswerService; import com.ecjtu.service.CommentService; import com.ecjtu.util.Message; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import java.util.Date; import java.util.List; /** */ @Controller @RequestMapping("answer") public class AnswerController { @Autowired private AnswerService answerService; @Autowired private CommentService commentService; @RequestMapping("create.action") @ResponseBody public Message addAnswer(Integer ids,String content, HttpServletRequest request){ Answer answer=new Answer(); Users user = (Users)request.getSession().getAttribute("user"); answer.setComment(commentService.findById(ids)); answer.setAnswerTime(new Date()); answer.setUser(user); answer.setContent(content); int i = answerService.addAnswer(answer); if(i>0){ return Message.success(); }else{ return Message.fail(); } } @RequestMapping("creates.action") @ResponseBody public Message addAnswers(Integer id,String content,Integer comment_id,HttpServletRequest request){ Answer answer=new Answer(); Users user = (Users)request.getSession().getAttribute("user"); answer.setComment(commentService.findById(comment_id)); answer.setAnswer(answerService.findById(id)); answer.setAnswerTime(new Date()); answer.setUser(user); answer.setContent(content); int i = answerService.addAnswers(answer); if(i>0){ return Message.success(); }else{ return Message.fail(); } } @RequestMapping("findByCommentId.action") @ResponseBody public Message findByCommentId(Integer comment_id){ List<Answer> answers = answerService.findByCommentId(comment_id); System.out.println(answers); if(answers!=null){ return Message.success().add("answer",answers); }else{ return Message.fail(); } } @RequestMapping("findById.action") @ResponseBody public Message findById(Integer id){ Answer answer = answerService.findById(id); System.out.println(answer); if(answer!=null){ return Message.success().add("answer",answer); }else{ return Message.fail(); } } }
package com.ecjtu.controller; import com.ecjtu.entity.Apply; import com.ecjtu.service.ApplyService; import com.ecjtu.util.Message; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import java.util.Date; import java.util.List; /** */ @Controller @RequestMapping("apply") public class ApplyController { @Autowired private ApplyService applyService; @RequestMapping("applys.action") @ResponseBody public Message getBlog(@RequestParam(value = "pn",defaultValue = "1") Integer pn){ // 引入PageHelper分页插件 // 在查询之前只需要调用,传入页码,以及每页的大小 PageHelper.startPage(pn,3); List<Apply> applys = applyService.getApply(); System.out.println(applys); // startPage后面紧跟的这个查询就是一个分页查询 // 使用pageInfo包装查询后的结果,只需要将pageInfo交给页面就行了。 // 封装了详细的分页信息,包括有我们查询出来的数据,传入连续显示的页数 PageInfo page=new PageInfo(applys,2); return Message.success().add("pageInfo",page); } @RequestMapping("create.action") @ResponseBody public Message addApply(Apply apply){ apply.setApplyTime(new Date()); apply.setState(2); int i = applyService.addApply(apply); if(i>0){ return Message.success(); }else{ return Message.fail(); } } @RequestMapping("delete.action") @ResponseBody public Message deleteApply(Integer id){ int i = applyService.deleteApply(id); if(i>0){ return Message.success(); }else { return Message.fail(); } } @RequestMapping("update.action") @ResponseBody public Message updateApply(Apply apply){ if(applyService.updateApply(apply)>0){ return Message.success(); }else{ return Message.fail(); } } @RequestMapping("findById.action") @ResponseBody public Message findById(Integer id){ Apply apply=applyService.findById(id); if(apply!=null){ return Message.success().add("apply",apply); }else{ return Message.fail(); } } @RequestMapping("findByState.action") @ResponseBody public Message findByTime(@RequestParam(defaultValue ="1",value = "pn") Integer pn,Integer state){ PageHelper.startPage(pn,4); List<Apply> states = applyService.findByState(state); if(states!=null){ PageInfo page=new PageInfo(states,3); return Message.success().add("pageInfo",page); }else{ return Message.fail(); } } }
package com.ecjtu.controller; import com.ecjtu.entity.Apply; import com.ecjtu.service.ApplyService; import com.ecjtu.util.Message; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import java.util.Date; import java.util.List; /** */ @Controller @RequestMapping("apply") public class ApplyController { @Autowired private ApplyService applyService; @RequestMapping("applys.action") @ResponseBody public Message getBlog(@RequestParam(value = "pn",defaultValue = "1") Integer pn){ // 引入PageHelper分页插件 // 在查询之前只需要调用,传入页码,以及每页的大小 PageHelper.startPage(pn,3); List<Apply> applys = applyService.getApply(); System.out.println(applys); // startPage后面紧跟的这个查询就是一个分页查询 // 使用pageInfo包装查询后的结果,只需要将pageInfo交给页面就行了。 // 封装了详细的分页信息,包括有我们查询出来的数据,传入连续显示的页数 PageInfo page=new PageInfo(applys,2); return Message.success().add("pageInfo",page); } @RequestMapping("create.action") @ResponseBody public Message addApply(Apply apply){ apply.setApplyTime(new Date()); apply.setState(2); int i = applyService.addApply(apply); if(i>0){ return Message.success(); }else{ return Message.fail(); } } @RequestMapping("delete.action") @ResponseBody public Message deleteApply(Integer id){ int i = applyService.deleteApply(id); if(i>0){ return Message.success(); }else { return Message.fail(); } } @RequestMapping("update.action") @ResponseBody public Message updateApply(Apply apply){ if(applyService.updateApply(apply)>0){ return Message.success(); }else{ return Message.fail(); } } @RequestMapping("findById.action") @ResponseBody public Message findById(Integer id){ Apply apply=applyService.findById(id); if(apply!=null){ return Message.success().add("apply",apply); }else{ return Message.fail(); } } @RequestMapping("findByState.action") @ResponseBody public Message findByTime(@RequestParam(defaultValue ="1",value = "pn") Integer pn,Integer state){ PageHelper.startPage(pn,4); List<Apply> states = applyService.findByState(state); if(states!=null){ PageInfo page=new PageInfo(states,3); return Message.success().add("pageInfo",page); }else{ return Message.fail(); } } }