系统背景
本课题的目的及意义
新生报到数据一直是困扰着各大高校的管理性问题,人数多、工作量大,这无疑是一个挑战,也因此加快了高校的信息化建设步伐。随着互联网的普及与发展,日常生活中人们接触到的数据正以惊人的速度增长。数据已经成为人们生活中必不可少的事务,随着学校数量和规模的不断扩大,各高校招生人数不断增加,有关学生报到的各种信息也极剧增加。为了更加清晰有效地传达与沟通学生的数据信息,借助于可视化的图形手段。将新生的信息汇总分析,用图像呈现出来。将固有的数据进行可视化分析,来构建独有的数据呈现。面对庞大的数据信息量,就需要设计一个新生报到数据可视化分析系统来提高学生管理工作的效率。通过这样的系统,可以做到数据的规范管理、科学统计和快速的查询,从而减少管理方面的工作量。“新生报到数据可视化分析系统”旨在对新生报道数据进行全面、立体、多维度的管理和统计分析。主要包括前端、后台,主要内容有学生报道信息管理,挖掘统计、后台服务、系统安全。
研究现状分析
在这个数字化的时代里,随着高校招生规模的不断扩大,招生后期的数据处理与迎新工作变得更加繁重,各高校普遍希望将信息技术引入到迎新工作中,加强参加迎新的各个部处间的信息流通和工作配合,使迎接新生的工作流程更为有序,提高学校各相关部门工作效率。在这样的背景下,新生入学报到管理系统应运而生,并成为高校数字化校园的一个组成部分。该工作涉及到学生处、教务处、后勤、各学院等诸多部门。这一工作的执行情况一定程度可以反映学校的管理水平和效率。过去,新生报到以及随后的学籍档案等工作都需要手工完成,因此其工作效率及数据准确度都存在很大问题,很容易造成新生报到时的混乱场面,增加了由于人工登记而带来的资金、人力、物力的消耗。用计算机来管理新生报到可以避免不必要的资源浪费。针对新生的报道情况进行分配,避免所分配的学号、床位号出现空缺的现象,也节省了教务处人员的工作强度,避免了提前去做新生的相关分配工作。新生报到数据可视化分析系统可以很好地解决这个问题,是一个教育单位不可或缺的部分。
系统设计
主要功能点
新生报到数据可视化分析系统要具有学生报到信息管理、管理员角色信息管理、挖掘统计信息、后台服务以及保护系统安全等功能。每个功能应按照标准化代码文档的书写,实现大数据技术和思维的代表性、先进性和作品创新性。
主要功能如下:
-
新生角色功能模块
-
院系报到指南:可以查看各院系报到指南。
-
个人信息采集:对个人信息进行新增,修改,删除,查询操作。
-
在线缴费:可以在线自助缴费以及申请一卡通。
-
在线查看宿舍:可以在线查看所在宿舍。
-
联系志愿者:可以自助联系学校志愿者咨询,获取帮助。
-
报到单自助打印:自助报到完毕,自行打印报到单。
-
-
管理员角色功能模块
- 报到规则:管理员发布相关报到规则。
- 交通指引:管理员发布交通指引。
- 志愿者信息:管理员发布各院部志愿者信息。
- 报到统计分析:管理员分类统计相关报到情况。
- 在线审核:管理员在线审核新生自助报到信息。
- 挖掘统计
- 年龄构成统计分析:入学时学生的年龄,可从中得到新生的年龄分布。
- 迁徙统计分析:各个省的录取人数,更加清楚地看到各地方的录取人数。
- 性别比例统计分析:更加直观的得到男女人数的比例。
- 少数民族统计分析:得到新生的少数民族比例。
拟解决的主要问题
- 前端展示分类合理,内容实用,主题突出;后台服务设计思路清晰,通用性强。
- 分类规则标准,数据接口设计通用。
- 后台数据可以快速检索。进行查询、增加、删除、修改、统计等操作。
- 系统安全包含用户安全,数据安全,验证技术可靠合理通用,对具体操作分角色分权限,保证数据的安全可靠。
技术实现
涉及的主要技术点
- 基于SSM思想实现的SpringBoot框架,用于提供web服务,SpringBoot是在SpringMvc的基础上提出了约定大于配置的思想,以约定的形式省去了SpringMvc的许多配置项,这些配置项可以以约定好的名称以类似插件的方式接入到系统中。
- MyBatis框架,MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
- Mysql数据库,MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一
- Shiro框架,Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。
- Redis缓存数据库,Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
- Layui框架,一个优秀的前端UI框架,可以帮你快速建立增删改查等基础前端架构,https://layuion.com/
- Jquery,Jquery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(框架)于2006年1月由[John Resig](https://baike.baidu.com/item/John Resig/6336344)发布。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。
- ECharts,ECharts是一款基于JavaScript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。ECharts最初由百度团队开源,并于2018年初捐赠给Apache基金会,成为ASF孵化级项目
设计思路
本系统按照角色划分为管理员和学生,管理员和学生各自的功能权限不相同,管理员可以录入新生的信息,这些信息将作为学生的基础信息,并且只有在管理员将新生信息录入后,新生才能使用各自的信息登录该系统完成报道。
-
管理员角色
管理员负责管理学生的信息,并且拥有以下功能
- 学院管理:负责维护整个学校的学院信息,具备增删改查等功能
- 专业管理:负责管理每个学院的专业信息,具备增删改查等功能
- 学生管理:负责管理所有需要报道的新生信息,具备增加、批量导入、查询、修改、删除等功能
- 基础信息管理:可以查看学生报道时填写基础信息,具备查询、修改等功能
- 宿舍管理:负责维护整个学校的宿舍信息,只有当管理员维护好了宿舍信息,新生在进行报道时才能被自动分配宿舍,具备增删改查等功能
- 志愿者管理:负责维护学生报道时各个学院负责接待指引的志愿者信息,具备增删改查等功能
- 交通指引管理:具备设置交通指引信息的功能
- 一卡通管理:管理新生申请的一卡通,具备查询、审批的功能
- 统计分析功能
- 年龄构成统计分析:入学时学生的年龄,可从中得到新生的年龄分布。
- 迁徙统计分析:各个省的录取人数,更加清楚地看到各地方的录取人数。
- 性别比例统计分析:更加直观的得到男女人数的比例。
- 少数民族统计分析:得到新生的少数民族比例。
-
学生角色
- 院系报道指南:可以查看各个学院的报道指引信息,包括学院简介、志愿者信息等等
- 自助报道:新生可以通过此功能填写报道所需的基础信息,查询缴费信息,完成缴费等操作,从而完成自助报道
- 我的宿舍:在完成自助报道后,系统会为新生自动分配宿舍(按照管理员设定的宿舍信息按照性别、专业、班级等信息进行分配),之后新生便可在我的宿舍信息里查看到自己所在的宿舍信息,比如自己的宿舍楼栋、房间号、床位号、室友信息等等
- 缴费记录:可以查看自己的缴费情况
- 一卡通申请:可以填写相关信息进行校园一卡通的申请
- 我的一卡通:在完成一卡通申请之后,可以查看自己的一卡通信息,并且可以完成充值等操作
- 一卡通充值记录:查看一卡通的充值记录
- 交通指引:查看学校的交通指引
- 我的报道单:查看自己的报道信息,可以打印成文档
代码实现
本系统采用Java语言编写,主要是基于Mvc的架构模式实现,按照模块可以划分为控制层、服务层、持久层三大块
-
控制层
控制层主要是基于Springboot提供Web接口,本系统所有数据接口均采用JSON的方式进行数据交互,页面映射采用ModelAndView的方式处理,只映射页面不传递数据,命名方式也是按照业务划分的,比如学院管理对应的控制层代码文件命名为CollegeController
控制层代码如下所示,控制层会按照统一的状态码返回信息,遵循Http状态码的规则,默认200为正常请求,异常请求会返回msg作为提示信息。部分代码实现如下所示
/** * @author * @description: * @date 2020/4/6 */ @RestController @RequestMapping("college") public class CollegeController { @Autowired CollegeService collegeService; @RequestMapping("manage") public ModelAndView manage(){ ModelAndView modelAndView = new ModelAndView("/workspace/college/collegeList.html"); return modelAndView; } @GetMapping("detail") public ModelAndView detail(){ ModelAndView modelAndView = new ModelAndView("/workspace/college/collegeAdd.html"); return modelAndView; } @GetMapping("guide") public ModelAndView guide(){ ModelAndView modelAndView = new ModelAndView("/workspace/college/guide.html"); return modelAndView; } @GetMapping("guideDetail") public ModelAndView guideDetail(){ ModelAndView modelAndView = new ModelAndView("/workspace/college/guideDetail.html"); return modelAndView; } @RequestMapping("queryCollegePage") public LayUiTableJson queryCollegePage(@RequestParam(defaultValue = "1") int page , @RequestParam(defaultValue = "10") int limit){ Page pageInfo = new Page(); pageInfo.setCurrentPage(page); pageInfo.setSize(limit); ResponseResult ResponseResult = collegeService.queryCollegePage(pageInfo); LayUiTableJson layUiTableJson = new LayUiTableJson(0,null,pageInfo.getAllRow(),(List)ResponseResult.getData()); return layUiTableJson; } @RequestMapping("queryCollege") public ResponseResult queryCollege(){ return collegeService.queryCollege(); } @RequestMapping("getCollege") public ResponseResult getCollege(@RequestParam("id") Integer id){ return collegeService.getCollege(id); } @RequestMapping("saveCollege") public ResponseResult saveCollege(College college){ return collegeService.saveCollege(college); } @RequestMapping("deleteCollege") public ResponseResult deleteCollege(@RequestParam("id") Integer id){ return collegeService.deleteCollege(id); } @RequestMapping("getCollegeByName") public ResponseResult getCollegeByName(@RequestParam("collegeName") String collegeName){ return collegeService.getCollegeByName(collegeName); } }
-
服务层
服务层提供具体业务功能的实现,比如学院管理,查询学院信息进行分页处理时,可能要先查询总数,然后按照总数和每页数量进行分页查询所需的数据,在服务层会对控制层的请求和操作数据库的多次动作进行包装,例如查询出某条数据,但该数据中信息需要进行编码-显示名称的转化时(如数据库存储的性别数据是0和1,页面上显示需要展示成男和女),命名方式也是按照业务划分的,服务层部分代码如下所示
/** * Description: * * @author: * Date: 2020-04-03 * Time: 16:04 */ @Service public class CollegeServiceImpl implements CollegeService { @Autowired CollegeDao collegeDao; /** * 分页查询所有院系 * * @param pageInfo 分页参数 * @return */ @Override public ResponseResult queryCollegePage(Page pageInfo) { Integer count = collegeDao.countByCondition(); pageInfo.setAllRow(count); List<College> collegeList = collegeDao.selectByCondition( pageInfo.getStart(), pageInfo.getSize()); return ResponseResult.success(collegeList); } @Override public ResponseResult queryCollege() { List<College> colleges = collegeDao.selectAll(); return ResponseResult.success(colleges); } @Override public ResponseResult getCollege(Integer id) { College college = collegeDao.selectByPrimaryKey(id); return ResponseResult.success(college); } @Override public ResponseResult saveCollege(College college) { if (college.getId() == null){ collegeDao.insert(college); }else{ collegeDao.updateByPrimaryKey(college); } return ResponseResult.success(); } @Override public ResponseResult deleteCollege(Integer id) { int deleteByPrimaryKey = collegeDao.deleteByPrimaryKey(id); if(deleteByPrimaryKey > 0){ return ResponseResult.success(); }else{ return ResponseResult.fail(); } } @Override public ResponseResult getCollegeByName(String collegeName) { College college = collegeDao.getCollegeByName(collegeName); return ResponseResult.success(college); } }
-
持久层
持久层负责与数据库交互,mybatis正是在这一层发挥其作用,通过其ORM框架的能力连接起java代码和数据库SQL执行,示例代码如下
@Repository public interface CollegeDao { /** * This method was generated by MyBatis Generator. * This method corresponds to the database table college * * @mbg.generated */ int deleteByPrimaryKey(Integer id); /** * This method was generated by MyBatis Generator. * This method corresponds to the database table college * * @mbg.generated */ int insert(College record); /** * This method was generated by MyBatis Generator. * This method corresponds to the database table college * * @mbg.generated */ College selectByPrimaryKey(Integer id); /** * This method was generated by MyBatis Generator. * This method corresponds to the database table college * * @mbg.generated */ List<College> selectAll(); /** * This method was generated by MyBatis Generator. * This method corresponds to the database table college * * @mbg.generated */ int updateByPrimaryKey(College record); Integer countByCondition(); List<College> selectByCondition(@Param("start") int start, @Param("end") int end); College getCollegeByName(@Param("collegeName") String collegeName); }
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.crk.xinshengbaodao.dao.CollegeDao"> <resultMap id="BaseResultMap" type="com.crk.xinshengbaodao.entity.College"> <!-- WARNING - @mbg.generated This element is automatically generated by MyBatis Generator, do not modify. --> <id column="id" jdbcType="INTEGER" property="id" /> <result column="college_name" jdbcType="VARCHAR" property="collegeName" /> <result column="college_img" jdbcType="VARCHAR" property="collegeImg" /> <result column="college_guide" jdbcType="VARCHAR" property="collegeGuide" /> </resultMap> <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer"> <!-- WARNING - @mbg.generated This element is automatically generated by MyBatis Generator, do not modify. --> delete from college where id = #{id,jdbcType=INTEGER} </delete> <insert id="insert" parameterType="com.crk.xinshengbaodao.entity.College"> <!-- WARNING - @mbg.generated This element is automatically generated by MyBatis Generator, do not modify. --> <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> SELECT LAST_INSERT_ID() </selectKey> insert into college (college_name, college_img,college_guide) values (#{collegeName,jdbcType=VARCHAR}, #{collegeImg,jdbcType=VARCHAR}, #{collegeGuide,jdbcType=VARCHAR}) </insert> <update id="updateByPrimaryKey" parameterType="com.crk.xinshengbaodao.entity.College"> <!-- WARNING - @mbg.generated This element is automatically generated by MyBatis Generator, do not modify. --> update college set college_name = #{collegeName,jdbcType=VARCHAR}, college_img = #{collegeImg,jdbcType=VARCHAR}, college_guide = #{collegeGuide,jdbcType=VARCHAR} where id = #{id,jdbcType=INTEGER} </update> <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap"> <!-- WARNING - @mbg.generated This element is automatically generated by MyBatis Generator, do not modify. --> select id, college_name, college_img,college_guide from college where id = #{id,jdbcType=INTEGER} </select> <select id="selectAll" resultMap="BaseResultMap"> <!-- WARNING - @mbg.generated This element is automatically generated by MyBatis Generator, do not modify. --> select id, college_name, college_img,college_guide from college </select> <select id="countByCondition" resultType="java.lang.Integer"> select count(*) from college </select> <select id="selectByCondition" resultMap="BaseResultMap"> select * from college where 1=1 order by college_name limit #{start},#{end} </select> <select id="getCollegeByName" resultMap="BaseResultMap"> select * from college where college_name = #{collegeName} </select> </mapper>
操作指引
-
管理员操作
- 管理员使用默认的管理员账号密码登录系统(admin/12345)
- 录入学院信息
- 录入专业信息
- 录入学生信息
- 录入宿舍信息
- 设置交通指引
- 设置志愿者信息
- 进入一卡通申请记录进行审批操作
- 统计分析
-
新生操作
- 新生使用身份证号+身份证号后六位登录系统
- 进入自助报道完成报道并缴费
![](https://img-blog.csdnimg.cn/img_convert/913ba04295d2249cb97f5d93e8e6f79f.png
- 查看自己的报道单
- 查看自己的宿舍
- 进行一卡通申请
- 其他功能