博主介绍:✌全网粉丝3W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战✌
博主作品:《微服务实战》专栏是本人的实战经验总结,《Spring家族及微服务系列》专注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源码解读、热门面试题、架构设计等。除此之外还有不少文章等你来细细品味,更多惊喜等着你哦
🍅文末关注公众号获取联系🍅精彩专栏推荐订阅👇🏻👇🏻 不然下次找不到哟
✨【微服务】Nacos为什么丢弃短连接(http)而选择拥抱长连接(gRPC)
目录
一、前言
二、系统设计
1、系统运行环境
2、系统架构设计
三、系统需求简介
四、功能截图
1、登录界面
2、管理员
2.1、系统管理
2.2、教师管理
2.3、学生管理
2.4、年级管理
2.5、班级管理
2、教师
2.1、教师管理
2.2、学生管理
2.3、班级管理
3、学生
3.1、学生信息
3.2、学生班级
五、实现代码
1、班级控制器
2、班级mapper
六、获取源码
一、前言
学生管理系统(Student Management System),以下简称SMS,是针对学校人事处的大量业务处理工作而开发的管理软件,是典型的管理信息系统(Management Information System)。它是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,它能够为用户提供充足的信息和快捷的查询手段。能有效的帮助学校和老师掌握学生的情况,为学生提供成绩跟课程方面的查询。在传统模式下利用人工进行学生信息管理,存在着较多的缺点,如:效率底,保密性差,时间一长将产生大量的文件和数据,更不便于查找,更新,维护等。诸如这些情况,令学校管理者对学生的信息管理带来了很大困难,严重影响了教育工作者的工作效率。随着科学技术的不断提高,计算机科学日渐成熟, 使用日趋成熟的计算机技术来代替传统的人工模式,来实现学生信息的现代化管理,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对学生信息进行管理,具有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、易修改、可靠性高、存储量大、数据处理快捷、保密性好、寿命长、成本低、便于打印等。这些优点能够极大地提高学生管理的效率,也是学校的科学化、正规化管理,与世界接轨的重要条件。用计算机制作的学生信息管理系统还可以通过功能强大的Internet网及时的向学生的家长传递该生在校的最新成绩,有助于学校与家长的信息互动,为更好地把握学校的教育方针起到了一定的促进作用!因此,开发这样一套管理软件成为很有必要的事情。
二、系统设计
1、系统运行环境
开发系统:Windows10左右
架构模式:MVC/前后端分离
JDK版本:Java JDK1.8
开发工具:IDEA
数据库版本: mysql5.7
数据库可视化工具: SQL yog或Navicat for MySQL
服务器:SpringBoot自带 apache tomcat
主要技术:Java、SpringBoot2、MyBatis-plus、MySQL、Shiro、Html、Vue、Elementui等
2、系统架构设计
三、系统需求简介
1.1 系统的主要功能
学生信息管理系统具有以下功能:
学籍管理:对学生的信息档案进行管理,主要包括学生档案信息的修改、删除、添加、档案查询及档案输出等,其中档案查询可以根据学号、姓名查询需要的信息;档案输出可以输出学生档案、成绩、课程表等。学生档案记录主要包括:学号、姓名、出生日期、年龄、性别、政治面貌、入学时间、个人简介、照片、家庭住址、邮编、所在系别以及所学专业等字段。
成绩管理:对学生的成绩进行管理,主要就是成绩查询,成绩查询可以按学号、姓名进行查询。成绩记录主要包括:学期、学号、姓名、课程号以及成绩字段等。
课程管理:学生可以通过该模块进行课程表查看、打印课程表。
选修课选择:对学生报选修课进行管理,学生可以对自己喜爱的课程进行选择。
系统维护:教师对学生的密码进行管理,主要包括增加新用户和用户修改。其中用户修改可以实现对学生的密码修改和学生用户名的删去。
系统辅助工具:通过该模块用户可以打开一些辅助工具,如记事本和记事本。
退出系统:离开本学生信息管理系统。
1.2 设计方法概述
本学生信息管理系统是采用面向对象的程序设计思想进行编制的,整个系统由若干个表单、类、报表以及一个主菜单组成,有项目管理器统一管理全部程序的编写和调试。用户可以通过主菜单或总表单调用系统的各项功能。
1、面向对象设计不再是单纯的从代码的第一行一直编到最后一行,而是考虑如何创建类和对象,利用类和对象来简化程序设计,并提供代码的封装和可重用性,便于程序的维护与扩展。
2、所谓的对象是一种抽象的名称,用来对应实现世界存在的“东西”。一个窗口、一个按钮、一个菜单都可视为一个对象,而按钮对象、菜单对象、又会出现在窗口对象中,因此按钮对象、菜单对象便是窗口的组件之一。对象内部的数据是不能随意更改的,必须由外部向其传递信息,再由对象按其方法加以处理。用户无需知道其任何细节,操作是封闭的,对象之间能通过函数调用相互通信。
3、类可视为一个产品模具、一个模块。在面向对象设计中,类是对象的原型,是对象的制作器。类的概念是面向对象程序设计最重要的特征。所谓类,是指由数据结构及其相关操作所形成的集合,描述该类任一对象的共同的行为特征,是对一组性质相同的对象的程序描述,概括了对象的共同性质和数据。
4、面向对象设计的核心是类的设计。
5、设计的学生信息管理系统也是建立在一系列类基础之上的,其编程的思想是:先根据一定的需要创建一系列的子类或直接调用PB提供的基类,编制程序时,由这些类派生出相应的对象,所派生出的对象继承了其父类所有的功能,而且具有很好的封装性,这样就可利用派生出的对象像搭积木一样来设计自己的程序。打个比方,就比如要制造一台机器,首先要制造各种零件的模具,然后用制造好的模具生产出所需的零件,所有这些做完后,剩下的就只是如何把这些零件组装起来,这样一台机器就很容易制造出来了。实际编程也是如此。每个表单都是由一定数量的对象按某一种方式组合在一起的,程序编制的核心是类的设计。
1.3 学生信息管理系统的现状分析
1.3.1 学生信息管理系统应用的现状
随着我国国民经济建设的蓬勃发展和社会主义市场经济体制的迅速完善,各个行业都在积极使用现代化的手段,不断改善服务质量,提高工作效率,这些都在很大程度上给企业提出越来越严峻的挑战,对企业体系无论是在行政职能、企业管理水平以及优质服务上都提出更高的要求。建设一个科学高效的信息管理系统是解决这一问题的必由之路。而各大高校对学生信息管理也面临着同样严峻的形势。学生信息管理作为高校内部的一种学生基本档案管理也是如此,由于高校的在校人数较多,每一位学生的具体实际情况也不尽相同,如果没有一个完整的管理系统去完成,将使工作变得复杂冗烦,并且对于工作的效率也将使一个致命的打击,使无论如何也无法适应现代社需要的。
1.3.2 管理系统开发的目的
为了适应现代化社会的发展,管理系统就应运而生了,目的很简单就使为使现代管理中排除复杂和不准确性,并且适应现代发展。系统开发后,可以对工资进行管理、查询、打印等一系列的功能的实现。便于工作效率的提高。
四、功能截图
1、登录界面
2、管理员
2.1、系统管理
2.2、教师管理
1)教师信息
2)任课班级
2.3、学生管理
1)学生信息
2)学生班级
2.4、年级管理
2.5、班级管理
2、教师
2.1、教师管理
2.2、学生管理
2.3、班级管理
3、学生
3.1、学生信息
3.2、学生班级
五、实现代码
1、班级控制器
@RestController
@RequestMapping("/clazz")
public class ClazzController {
//日志记录器
private static final Logger logger= LoggerFactory.getLogger(ClazzController.class);
@Autowired
ClazzServiceImpl clazzService;
/**
*@description:获取班级的分页数据
*@param msg
*@return
*@Author CeaM
*@date 2022/11/17--15:20
*/
@RequestMapping(value = "/getPage",method = RequestMethod.POST)
public BaseResponse<Map> getPage(@RequestBody JSONObject msg){
System.out.println("-------------------"+msg.toJSONString());
//每页显示数据
Integer pagesize = Integer.valueOf(msg.getString("pagesize"));
//当前页
Integer currentPage= Integer.valueOf(msg.getString("currentPage"));
//班级名称、班级编号
String cno = msg.getString("cno");
String name = msg.getString("name");
PageInfo<Clazz> pageInfo = clazzService.getPageClazz(cno,name,pagesize,currentPage);
logger.info("pageInfo:"+pageInfo);
//存储返回的结果,线程安全的map集合
Map<String,Object> map = new LinkedHashMap<>();
map.put("clazz",pageInfo.getList());
map.put("total",pageInfo.getTotal());
return new BaseResponse<Map>(true,"班级级信息",map,20000);
}
/**
*@description: 添加班级信息
*@param clazz 班级信息
*@return
*@Author CeaM
*@date 2022/11/18--9:59
*/
@RequestMapping(value = "insertClazz",method = RequestMethod.POST)
public BaseResponse<String> insertClazz (@RequestBody Clazz clazz){
//新添加的班级,id自增、默认未删除、班级人数为0
clazz.setId(null);
clazz.setIsdelete(0);
clazz.setNumber(0);
Integer res = clazzService.InsertClazz(clazz);
//结果描述
String msg = null;
Boolean result = null;
if(res > 0){
msg = "添加成功";
result = true;
}else if (res == -1){
msg = "班级已存在";
result = false;
}else if (res == 0){
msg = "添加失败";
result = false;
}
return new BaseResponse<String>(result,msg,"",20000);
}
/**
*@description:更新班级信息
*@param
*@return
*@Author CeaM
*@date 2022/11/18--10:44
*/
@RequestMapping(value = "updateClazz",method = RequestMethod.POST)
public BaseResponse<String> updateClazz(@RequestBody Clazz clazz){
Integer res = clazzService.updateClazz(clazz);
Boolean result = null;
String msg = null;
if (res > 0){
result = true;
msg = "信息更新成功";
}else {
result =false;
msg = "信息更新失败";
}
return new BaseResponse<String>(result,msg,"",20000);
}
/**
*@description:删除班级信息,实际是更改isdelete状态为1
*@param clazz
*@return
*@Author CeaM
*@date 2022/11/18--11:15
*/
@RequestMapping(value = "/deleteClazz",method = RequestMethod.POST)
public BaseResponse<String> deleteClazz(@RequestBody Clazz clazz){
//设置该班级信息为删除状态,进行后续状态修改操作
clazz.setIsdelete(1);
Map<String,Object> map = clazzService.deleteClazz(clazz);
return new BaseResponse<String>((Boolean) map.get("success"),(String) map.get("msg"),"",20000);
}
/**
*@description:将数据导出为excel文件,导出班级信息
*@param msg List的JSON数据
*@return
*@Author CeaM
*@date 2022/11/18--11:25
*/
@RequestMapping("/download")
public void exportExcel(@RequestBody List<Clazz> msg, HttpServletResponse response) throws IOException {
String nowtime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
String fileName = URLEncoder.encode("班级信息-"+nowtime, "UTF-8");
/**setContentType是用来区分数据类型的
* {".xls", "application/vnd.ms-excel" },
* {".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},
*/
// 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
//下载文件的默认名称,前端会根据res.headers["content-disposition"].split("=")[1]获取文件名
response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");
//设置不缓存
response.addHeader("Pargam", "no-cache");
response.addHeader("Cache-Control", "no-cache");
EasyExcel.write(response.getOutputStream(), Clazz.class).sheet("班级信息").doWrite(msg);
}
}
2、班级mapper
@Repository
public interface ClazzMapper {
int deleteByPrimaryKey(Integer id);
int insert(Clazz record);
Clazz selectByPrimaryKey(Integer id);
List<Clazz> selectAll();
int updateByPrimaryKey(Clazz record);
/**
* 根据班级编号、班级名称动态获取数据,已过滤isdelete为1的数据
* @param cno
* @param name
* @return
*/
List<Clazz> getClazz(@Param("cno") String cno, @Param("name") String name);
/**
* 根据班级编号、班级名称动态获取数据,包括isdelete为1的数据
* @param cno
* @param name
* @return
*/
List<Clazz> getClazzAll(@Param("cno") String cno, @Param("name") String name);
/**
* 根据班级编号更改,整个数据进行修改
* @param clazz
* @return
*/
Integer updateByCno(Clazz clazz);
/**
* 根据班级编号 OR 班级名称更改,整个数据进行修改
* @param clazz
* @return
*/
Integer updateByCnoOrName(Clazz clazz);
/**
* 根据班级编号和名称删除班级信息,实际是更改isdelete = 1;或者用于班级信息的状态更改
* @param clazz
* @return
*/
Integer deleteClazz(Clazz clazz);
/**
* 更新班级的总人数
* @param cno 班级编码
* @param number 总人数
* @return
*/
Integer updateClazzNumber(@Param("cno")String cno,@Param("number")Integer number);
}
六、获取源码
大家点赞、收藏、关注、评论啦 、关注下方公众号获取联系方式👇🏻👇🏻