前言:
毕业设计作为大学几年学习后最终成果的展示,占有很大的份量,也是非常重要的一个里程碑!但是很多人志不在此专业,或别有所求,大量的人群进入考公、考研的大军中备战,如此一来,准备毕设计和论文的时间少之又少。而近年来导师对毕业设计的要求可以说是越来越高,很多超出了企业开发的一般难度,令大多数学子望而却步,踌躇不前!本专栏提供了为客户开发的BS作品展示以便为你提供一个参考的思路,或者有需要的话也可以为你提供更多的一系列服务,相关项目开发、LW文档撰写、项目讲解、远程调试等可供你选择!
项目编号:BS-PT-096
一,环境介绍
语言环境:Java: jdk1.8
数据库:Mysql: mysql5.7
应用服务器:Tomcat: tomcat8.5.31
开发工具:IDEA或eclipse
开发技术后台:SSM框架 前台:JSP+Bootstrap+Jquery
二,项目简介
当代大学生人生观、社会价值观与以往大学生是截然不同的,相对于80后,90后赶上新世纪的门槛,其性格更加独立自主,自我意识强,但对于网络的依赖性非常大。但是,过分沉溺于网络的虚拟世界势必会造成部分大学生思想意志的薄弱,精神空虚,拜金及贪图享乐的思想严重等情况。这对个人发展是极其不利的,对祖国的未来甚至于国家安全来说都是一种隐患,所以加强大学生思想政治教育是我国高校人才培养中非常重要、必不可少的一环。针对于当代大学生对网络的依赖性较强的特点,利用新世纪网络技术的优势来建设一个大学生思想政治教育网站可以作为学生校内思想政治教育的线上补充,充分调动大学生学习热情,提高大学生爱党爱国、艰苦奋斗、乐于奉献的思想觉悟。
本网站使用Java语言编写,使用MySQL数据库进行数据存储和管理,开发与实现了一个高校的思政教育平台网站。网站包含多个模块,通过后期调试,实现了网站预计的目标,与传统的线下教学相比,本网站更高效的利用现代计算机网络技术通过线上教育的方式对大学生进行思想政治教育,拓宽了大学生思想政治教育的研究方向。系统采用B/S结构,SSM三大框架以及IDEA集成开发工具和Tomcat8.5服务器完成系统开发。
管理员模块分成六大子模块分别是注册会员管理,网站内容类别管理,网站内容信息管理,网站公告管理,评论信息管理,留言信息管理。会员用户功能包括:注册登录操作,网站内容信息浏览,网站内容信息搜索,网站内容信息评论,网站内容信息浏览,网站内容信息发布。根据模块进行数据库表编写,然后在IDEA开发工具中分模块进行代码的编,写每做好一个模块进行都会与数据库进行交互信息以确定信息能正确的进行前端展示,然后进行分析总结调试。各个模块全部开发好以后进行模块拼接测试,将降低模块耦合提升性能,最后编写测试用例,根据测试用例进行系统测试找出BUG修改。
我这次设计的内容管理系统分成了三个部分进行了不同的设计这三部分包括浏览者、会员与管理员:
1、浏览者权限:这个角色只能搜索和浏览内容内容但是不可以对任何内容进行评论当然也不可以留言只有注册成为会员以后才能使用相应权限。
2、会员权限:会员可以进行不同的搜索和模糊搜索,还可以对所有内容进行评论留言以及自己的个人信息。
3、管理员:管理员拥有系统的所有权限,管理员能对内容有增加删除修改查询操作等,可以冻结不良用户,维护内容系统等工作[4]。
管理员用例图:
前端用户用例图
从会员用例图中可以看出只有注册成为会员后,注册成为会员以后方可浏览内容、搜索内容、评价内容、公告浏览急留言信息发布[6]。
数据表的设计思想我是首先建立一个E-R图模型,然后就是确定数据库表之间的关系图解,在E-R图用长方形来展示实体名称,实体名称在长方形框中写明此名称,椭圆的形状是用来展现实体具备的属性,菱形联系实体,并标明名称,再用无向边把模型中所有的图联系起来[8]。数据概念模型设计如图所示。
图 整体属性E-R图
整体功能结构图:
1、前台功能模块:
- 注册登录:浏览者注册后有权限进行评论内容与留言。
- 内容的分类模块:分类就是从数据库里动态的获取不同的功能进行不同的选择就会跳转到不同的内容页中去比如点国际就会进入关于国际内容的页面中等等都是如此。
- 前台公告栏:方便管理者给成为会员的用户发布本网站重要消息和公告。
- 内容评论:只有会员才能进行评论和删除功能以及看到其他人的评论
2、后台功能模块:
- 会员信息管理:系统管理员有权限对会员的信息进行删除修改等一些操作对一些不良会员可以制裁他们进行冻结会员权限。
- 类别管理:系统管理员对不同的内容类别进行分别管理。
- 信息发布:信息发布是管理员管理。
- 公告管理:管理员发布公告给会员,当然也会有相应的修改删除权限。
- 留言管理:管理员进行回复工作使用。
- 评论管理:管理员进行评论管理对评论进行审查。
三,系统展示
系统首页
全文检索
评论互动
新闻列表
后台管理
会员管理
类型管理
四,核心代码展示
package cn.base.controller; import cn.base.service.BaseService; import cn.entity.User; import com.github.pagehelper.PageInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.util.List; import java.util.Map; /** * 抽取的顶层controller:提取公用的方法并利于扩展 * @param <S> 业务类 * @param <T> 实体类 */ public abstract class BaseController<S extends BaseService, T> { @Autowired protected S service; @Autowired protected HttpServletRequest request; @Autowired protected HttpServletResponse response; @Autowired protected HttpSession session; @RequestMapping("jsonList") @ResponseBody public List<T> jsonList() { return service.getList(null); } @RequestMapping("get") @ResponseBody public T get(Integer id) { return (T) service.get(id); } @RequestMapping("del") @ResponseBody public void del(Integer id) { service.delete(id); } @RequestMapping("modify") @ResponseBody public void modify(T t) { service.updateSelective(t); } @RequestMapping("insert") @ResponseBody public void insert(T t) { service.insertSelective(t); } /** * * @param pageNo 页码 * @param pageSize 每页显示的条数 * @param map 查询条件 * @param model 存储数据模型 */ protected void page(Integer pageNo, Integer pageSize, Map<String, Object> map, Model model) { pageSize = pageSize == null ? 10 : pageSize; pageNo = pageNo == null ? 1 : pageNo; String order = ""; if (map != null && map.containsKey("order")) { order = (String) map.get("order"); map.remove("order"); } PageInfo<T> pageInfo=service.getPage(pageNo, pageSize, order, map); model.addAttribute("pageInfo",pageInfo); if (map!=null) { for (String key : map.keySet()) { model.addAttribute(key,map.get(key)); } } } protected User getLogin(){ return (User) session.getAttribute("login"); } }
package cn.controller; import cn.base.controller.BaseController; import cn.base.util.RestResult; import cn.entity.User; import cn.service.UserService; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import java.util.HashMap; import java.util.List; import java.util.Map; @Controller @RequestMapping("user") public class UserController extends BaseController<UserService, User> { @RequestMapping("list") public String List(Integer pageNo, Integer role, String name, Model model) { if (StringUtils.isEmpty(name)) name = null; Map<String, Object> map = new HashMap<String, Object>(); map.put("isDel", 0); map.put("name", name); if (role != null && role != -1) map.put("role", role); page(pageNo, 5, map, model); return "manage/userList"; } @RequestMapping("jsonLogin") @ResponseBody public RestResult login(String account, String password, Model model) { Map<String, Object> map = new HashMap<String, Object>(); map.put("account", account); map.put("password", password); List<User> list = service.getList(map); if (list.size() > 0) { User user = list.get(0); session.setAttribute("login", user); return new RestResult(RestResult.SUCCESS, new Exception("")); } else { model.addAttribute("error", "用户名或密码错误"); return new RestResult(RestResult.ERROR, new Exception("用户名或密码错误!\n请重新输入。")); } } @RequestMapping("reg") @ResponseBody public void reg(User user) { user.setRole(2); service.insert(user); } @RequestMapping("accTest") @ResponseBody public boolean accTest(String account) { if (StringUtils.isEmpty(account)) account = null; Map<String, Object> map = new HashMap<String, Object>(); map.put("account", account); List<User> list = service.getList(map); return list.size() >0; } @RequestMapping("pwdTest") @ResponseBody public boolean pwdTest(String old) { User user = (User) session.getAttribute("login"); return user.getPassword().equals(old); } @RequestMapping("pwd") @ResponseBody public void pwd(String password) { User user = (User) session.getAttribute("login"); user.setPassword(password); service.updateSelective(user); } @RequestMapping("view/{id}") public String view(@PathVariable Integer id, Model model) { User user = service.get(id); model.addAttribute("user", user); if (user.getRole() == 1) return "manage/userView"; return "pwd"; } @RequestMapping("logout") public String logout() { User user = getLogin(); session.removeAttribute("login"); if (user.getRole() == 1) return "manage/login/login"; else return "login"; } }
package cn.controller; import cn.base.controller.BaseController; import cn.base.util.Const; import cn.base.util.JedisUtil; import cn.entity.Xin; import cn.service.XinService; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import redis.clients.jedis.Jedis; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 内容相关的请求控制器 */ @Controller @RequestMapping("xin") public class XinController extends BaseController<XinService, Xin> { /** * 首页的内容列表 * @param pageNo 页码参数 * @param title 搜索时的标题 * @param tid 内容分类ID * @param model 数据存储模型 * @return */ @RequestMapping("list") public String List(Integer pageNo, String title, Integer tid, Model model) { if (StringUtils.isEmpty(title)) { title = null; } if (tid != null && tid == -1) { tid = null; } Map<String, Object> map = new HashMap<String, Object>(); map.put("title", title); map.put("tid", tid); page(pageNo, 10, map, model); //角色判断:如果未登陆或登陆人为普通用户,跳转到前端显示 if (getLogin() == null || getLogin().getRole() == 2) { return "list"; }else { //角色判断:如果是管理员用户,跳转到后端显示 return "manage/xinList"; } } public void insert(Xin xin) { xin.setClick(0); xin.setPubTime(Const.getCurrentTime()); service.insert(xin); } @RequestMapping("view/{id}") public String view(@PathVariable Integer id, Model model) { Xin xin = service.get(id); xin.setClick(xin.getClick()+1); service.updateSelective(xin); xin=service.get(id); model.addAttribute("xin", xin); if (getLogin()==null||getLogin().getRole()==2) return "xinView"; return "manage/view"; } /** * 今日最热查询:查询今天发布的内容,最多10条 * @return */ @RequestMapping("hotList") @ResponseBody public List<Xin> hotList() { Map<String, Object> map = new HashMap<String, Object>(); //map.put("pubTime", Const.getCurrentDay()); return service.getPage(1,10,"click desc",map).getList(); } /** * 推荐内容查询:查询当前这条内容同类的内容信息,最多10条 * @return */ @RequestMapping("tuijianList") @ResponseBody public List<Xin> tuijianList(int tid,int xid) { Map<String, Object> map = new HashMap<String, Object>(); map.put("tid", tid); Jedis jedis = JedisUtil.getJedis(); String tjnews = jedis.get("tjnews_"+tid); List<Xin> xinList = new ArrayList<>(); if(tjnews!=null){ xinList = JSON.parseArray(tjnews,Xin.class ); }else{ xinList = service.getPage(1, 10, "click desc", map).getList(); jedis.set("tjnews_"+tid, JSON.toJSONString(xinList)); } //将当前浏览的内容排除 for(int i=0;i<xinList.size();i++){ if(xinList.get(i).getXid()==xid){ xinList.remove(i); } } return xinList; } }
五,相关作品展示
基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的各类毕业设计作品
基于Nodejs、Vue等前端技术开发设计的前端毕业设计作品
基于微信小程序和安卓APP应用开发的相关作品
基于51单片机等嵌入式物联网开发应用
基于各类算法实现的AI智能应用
基于大数据实现的各类数据管理和推荐系统
前沿技术、一站式服务、贴心售后解决你后顾之忧