毕业设计初稿已经交了,好久没有更新博客了,抽空来写一下自己的毕业设计,水平实在有限,只想自己记录一下,代码等毕业了我会贴上来。有准备做毕业设计,或者未来准备用ssm框架来做毕设的同学看完我的文章能够对你有所帮助,那就再好不过了,开始吧!
目录
使用的技术及开发的工具
Spring+Spring MVC+MyBatis
关于ssm框架这部分网上的博客很多,大家多看看几篇博客就可以对这个框架有一个大概的了解,我不再赘述了,关于框架的入门demo,我自己也写过一篇博客,大家有兴趣可以去看看,我会贴在下面。
IntelliJ IDEA+Maven
Eclipse使用的较少,而且IDEA确实使用体验很好,这次做毕设就使用了IDEA来开发,使用maven来管理依赖,也确实方便了许多,节省了很多的时间。
Jsp
2019年,用jsp确实有点老了,后续有时间会考虑使用Thymeleaf,以后把代码贴上来,有兴趣的同学可以用Thymeleaf改一改
使用的技术及开发的工具差不多介绍到这里,其实是很基础的项目,但是毕竟在学校没有实际自己开发过整个项目,对自己的能力还是有一定的提高,下面是我当时刚学习ssm框架的时候写的一个入门demo,用上面提到的技术整合了ssm框架,实现了查询和添加,大家有兴趣可以去看一看。
ssm框架整合全记录(idea版)
本文链接:https://blog.csdn.net/OliverND/article/details/100037462
系统的总体设计
系统权限
本系统为班级信息管理系统,班主任及班上的班委使用该系统来管理班级的各种信息,所以系统分了三个角色:
- 超级管理员(权限最大)
超级管理员是系统中权限最大的角色,可以使用系统的全部功能,可以由学校的教务或者信息中心老师担任,对管理员进行增删改查的操作。 - 管理员(权限次之)
管理员的权限比超级管理员少,可以使用系统的部分功能,一般由班级班主任担任,可以对用户进行增删改查的操作。 - 用户(权限最小)
整个系统中权限最小的角色,仅限使用部分功能,由班级班委(如:班长、团支书等)担任,可以对班级中的学生担任。
系统流程图
系统的流程图如下,大家可以看一下,画的应该还算清楚
系统功能设计
系统功能模块图,根据角色的不同,对应的有不同的功能,做的时候时间短,角色权限这一块,并没有完全实现,只是用js代码,根据session里角色的信息把页面中对应的菜单隐藏了,这样不好,后面的版本我会改进的。
数据库设计
E-R图
根据本系统的需要,总共设计的八张表,分别为管理员表、用户表、学生表、课程表、教师表、角色表、系统信息表、用户表。
学生表、班级表、课程表、教师表E-R图如下:
用户表、角色表E-R图如下:
系统信息表E-R图如下:
管理员表E-R图如下:
数据库模型图
数据库模型图暂时不放了,答辩完我会放上来,有需要的可以根据E-R图先自己创建一下数据库表
模块实现
具体页面暂时不往上放了,我会贴部分代码,使用框架简化了开发,代码量少了好多。
实现功能的步骤为:
实体类
=>dao层
=>service层
=>contorller
因为功能不是太多,我没有使用***.xml
的映射文件,而是用的注解@Select、@insert
等注解开发的数据持久层(dao层)。
具体实现的模块有以下几个,我只贴最后一个模块,也就是管理员管理模块的代码,供大家参考。
登录模块
注册模块
学生管理模块
课程管理模块
系统信息管理模块
管理员管理模块
-
实体类(domain/entity/pojo)
Admin
public class Admin { private Integer admin_id; private String admin_name; private String admin_password; public Integer getAdmin_id() { return admin_id; } public void setAdmin_id(Integer admin_id) { this.admin_id = admin_id; } public String getAdmin_name() { return admin_name; } public void setAdmin_name(String admin_name) { this.admin_name = admin_name; } public String getAdmin_password() { return admin_password; } public void setAdmin_password(String admin_password) { this.admin_password = admin_password; } public String getAdmin_role() { return admin_role; } public void setAdmin_role(String admin_role) { this.admin_role = admin_role; } private String admin_role; }
-
dao层(dao)
AdminDao
@Repository public interface AdminDao { @Select("select * from admin ") public List<Admin> findAll(); @Select("select * from admin where admin_id = #{admin_id}") public List<Admin> findByadmin_id(Integer admin_id); @Insert("INSERT INTO admin(admin_id,admin_name,admin_password,admin_role) VALUES (#{admin_id},#{admin_name},#{admin_password},#{admin_role})") public void insertAdmin(Admin admin); @Delete("delete from admin where admin_id = #{admin_id}") public Integer delAdmin(Integer admin_id); @Update("update admin set admin_name = #{admin_name},admin_password = #{admin_password},admin_role = #{admin_role} where admin_id = #{admin_id}") public void updateByadmin_id(Admin admin); @Select("select * from admin where admin_name = #{admin_name}") public List<Admin> loginCheck(String admin_name); }
-
service层(service)
AdminService
public interface AdminService { public List<Admin> findAll(); public List<Admin> findByadmin_id(Integer admin_id); public void insertAdmin(Admin admin); public Integer delAdmin(Integer admin_id); public void updateByadmin_id(Admin admin); public List<Admin> loginCheck(String admin_name,String admin_password); }
- service层实现类(Impl)
AdminServiceImpl
@Service("AdminService") @Transactional public class AdminServiceImpl implements AdminService { @Autowired private AdminDao adminDao; @Override public List<Admin> findAll() { return adminDao.findAll(); } @Override public List<Admin> findByadmin_id(Integer admin_id) { return adminDao.findByadmin_id(admin_id); } @Override public void updateByadmin_id(Admin admin){ adminDao.updateByadmin_id(admin); } @Override public void insertAdmin(Admin admin) { adminDao.insertAdmin(admin); } @Override public Integer delAdmin(Integer admin_id) { return adminDao.delAdmin(admin_id); } @Override public List<Admin> loginCheck(String admin_name,String admin_password){ List<Admin> adminList = adminDao.loginCheck(admin_name); if(adminList != null && adminList.iterator().next().getAdmin_password().equals(admin_password)){ return adminList; } return null; } }
- service层实现类(Impl)
-
controller(controller)
``@Controller @RequestMapping("/admin") public class AdminController { @Autowired private AdminService adminService; @Autowired private RoleService roleService; //查询所有人员 @RequestMapping(value="/findAlladmin",method = RequestMethod.GET) public ModelAndView findAll(@RequestParam(defaultValue="1",required=true,value="pageNo") Integer pageNo){ ModelAndView modelAndView = new ModelAndView(); Integer pageSize = 5; PageHelper.startPage(pageNo,pageSize); List<Admin> adminList = adminService.findAll(); PageInfo<Admin> pageInfo = new PageInfo<Admin>(adminList); modelAndView.addObject("pageInfo",pageInfo); modelAndView.setViewName("admdatalist"); return modelAndView; } //跳转添加页面 @RequestMapping(value = "/insertpage",method = RequestMethod.GET) public String insertPage(){ return "admfrom"; } //添加操作 @RequestMapping(value = "/saveAdmin",method = RequestMethod.POST) public void saveAdmin(Admin admin, HttpServletRequest request, HttpServletResponse response, Model model) throws IOException { adminService.insertAdmin(admin); // response.sendRedirect(request.getContextPath()+"/admin/findAlladmin"); response.setContentType("text/html;charset=utf-8"); response.getWriter().print("<script>alert('添加成功!请记好自己的账号密码呦!'); window.location='/admin/findAlladmin' </script>"); return; } //修改页面 @RequestMapping(value = "/updatePage") public String updatePage(@RequestParam(name = "admin_id",required = false) Integer admin_id,Model model){ List<Admin> adminList = adminService.findByadmin_id(admin_id); model.addAttribute("adminList",adminList); return "admUpdatefrom"; } //修改操作 @RequestMapping(value = "/updateAdmin",method = RequestMethod.POST) public void updateAdmin(Admin admin, HttpServletResponse response) throws IOException { adminService.updateByadmin_id(admin); response.setContentType("text/html;charset=utf-8"); response.getWriter().print("<script>alert('修改成功!'); window.location='/admin/findAlladmin' </script>"); return; } //删除操作 @RequestMapping(value = "/deleteAdmin",method = RequestMethod.GET) public void delAdmin(@RequestParam(name = "admin_id",required = false) Integer admin_id, HttpServletResponse response) throws IOException { adminService.delAdmin(admin_id); response.setContentType("text/html;charset=utf-8"); response.getWriter().print("<script>alert('删除成功!'); window.location='/admin/findAlladmin' </script>"); return; //接收table中的参数: // 1. 给button添加<a>标签,添加href属性/admin/deleteAdmin?admid=${admin.admid} 问号后的参数会被传递 // 2. controller方法中添加@RequestParam注解,其name属性值与?后所传递的参数name相同 } }
总结
写到这里基本差不多了,虽然部分内容没有贴,但是管理员的增删改查已经基本完成了。
从2019年7月刚开始接触ssm,到2019年10月初稿完成,大部分时间都花费在了看视频学习框架的理论知识和看书上,虽然系统做的不是很完善,但对我的能力确实有了很大的提升,毕竟是第一次实际开发项目,积累了一定的经验,也有很多待解决的问题,回顾一下做如下几点的总结:
- 对开发中出现的问题或者bug,解决后一定要复现并记录下来,以后出现同样的错误看看以前踩过的坑可以很快的解决,把踩过的坑分享出来也可以帮助其他人解决问题,我觉得这是写博客很重要的一个意义。
- 学习新知识、新技术的时候,一定要学和练结合,千万不能等很多理论学完了再动手实践,没有效果,如果没有实现是对积极性的一种打击,还是要有良好的学习方法才可以事半功倍。
- 遇到错误一定要耐心,多看报错的信息,多用搜索引擎,看看别人解决问题的思路和方法,不能看见404或者500就放弃,有bug才是正常的
这几点都是我这次做毕设深切的体会,通过这次确实学到了很多东西,虽然累但是很值得!