基于Springboot和Redis实现的在线选课系统

基于Springboot和Redis实现的在线选课系统 1,项目简介 1,1 介绍 毕业设计真的就是demo吗?作为工作前的最后一个校园项目,毕业设计应当尽可能的贴近企业实战

本文包含相关资料包-----> 点击直达获取<-------

基于Springboot和Redis实现的在线选课系统

1.项目简介

1.1 介绍

毕业设计真的就是demo吗?作为工作前的最后一个校园项目,毕业设计应当尽可能的贴近企业实战,业务不必很复杂,但要做到麻雀虽小五脏俱全。本期学长跟大家一起分享如何开发一个在线选课系统,需求也比较简单。系统初始化后会默认创建一个admin管理员账号,以及三个初始化角色:

  • 管理员角色 :拥有所有菜单和所有按钮的权限拥有账号查询、课程模块增删改查、选课记录查询、院系查询、专业查询的权限

  • 学生角色 :拥有课程查询、报名、退课、院系查询、专业查询的权限

超管会默认创建好所有老账号,以及创建好所有的院系和专业(为什么不提供注册功能?主要是管理后台往往需要权限分配,你注册了账号你还是得找超管分配权限的,所以注册意义不大),当报名开启后,学生可以进行课程报名,在课程报名截止前,学生可以退课并重新选课。

1.2 技术栈

  • 前端 :使用semanticUI渲染及Ajax动态填写

  • 后端 :采用基于springboot,涉及的技术栈有mybatis,spring,springMVC,spring security,log4j,swaggerUI,redis等

1.3 应用分层

上面的分层架构摘自阿里巴巴java开发手册,我对此做了一些调整,实际分层结构如下:

2.数据库设计

2.1 表结构

管理员表

学院表

选课表

学生用户表

用户—课程表

2.2 E-R图

3.项目实现

3.1 接口设计

整个项目接口采用的目前互联网比较流行的restful风格设计,每个接口、每个参数都有详细的文档说明。因为企业中开发必然是团队协作,必然前后端分离的开发模式,你得先把接口定义出来,然后前端可以和后端同步开发。还有一种就是对外提供接口,比如你们隔壁团队也想调用你这个服务的接口,但是你两排期是同一周,这时候你得先把接口定义出来给人家,然后大家同步开发,开发完了之后再进行联调。

swagger接口文档 ![image-20210820142046656]

3.2 Redis序列化

java @Configuration @EnableCaching//开启注解 public class RedisConfig{ @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory); template.setKeySerializer(jackson2JsonRedisSerializer); template.setValueSerializer(jackson2JsonRedisSerializer); template.setHashKeySerializer(jackson2JsonRedisSerializer); template.setHashValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; } @Bean public RedisTemplate<String,SelectableCourse> redisCourseTemplate(RedisConnectionFactory factory){ RedisTemplate<String,SelectableCourse>template=new RedisTemplate<>(); //关联 template.setConnectionFactory(factory); //设置key的序列化器 template.setKeySerializer(new StringRedisSerializer()); //设置value的序列化器 template.setValueSerializer(new Jackson2JsonRedisSerializer<>(SelectableCourse.class)); return template; }

redis缓存操作

java public class RedisOperator{ @Resource private RedisTemplate<String ,SelectableCourse> template; /**course**/ public void setCourses(SelectableCourse course){ //将course对象保存在缓存中 template.opsForSet().add("course", course); } public SelectableCourse getCourses(){ return template.opsForValue().get("course"); } //更新缓存 public void updateCourse(Integer key, SelectableCourse course){ template.delete("course"+key); template.opsForValue().set("course"+key,course); } public Boolean infoisexist(Integer key){ if(template.hasKey("course"+key)){ return true; } return false; } //获取缓存集合。 public Set<SelectableCourse> getList(){ return template.opsForSet().members("course"); } /** * 移除key */ public void removeKey() { template.delete("course"); }

3.3 主要功能实现

java //用户登录 public User login(String username){ return adminDAO.login(username); } //导出学生选课信息 public void excelOut(HttpServletResponse response) throws IOException{ int count = 0; //表头数据 String[] header = {"学生id" , "姓名" , "学号" , "专业" }; //学生数据 List<User> users = userDAO.selectAll(); //已被选择的课程数据 List<SelectableCourse> courses = selectableCourseDAO.selectedCourses(); //学生的选课数据. List<UserCourse> userCourses = userCourseDAO.selectAll(); //声明一个工作簿 HSSFWorkbook workbook = new HSSFWorkbook(); //生成一个表格,设置表格名称为"学生表" HSSFSheet sheet = workbook.createSheet("学生选课表"); //设置表格列宽度为10个字节 sheet.setDefaultColumnWidth(10); for(SelectableCourse cours : courses){ //创建第一行表头 HSSFRow headrow = sheet.createRow(count); //创建一个单元格 HSSFCell cell = headrow.createCell(0); //创建一个内容对象 (课程名称) HSSFRichTextString text = new HSSFRichTextString("课程名称:"+cours.getCourseName()+" 任课老师:"+cours.getTeacher()+" 上课时间:"+cours.getAddress()); //将内容对象的文字内容写入到单元格中 cell.setCellValue(text); count++; //遍历添加表头(下面模拟遍历学生,也是同样的操作过程) //创建第2行表头 HSSFRow row = sheet.createRow(count); for(int i = 0 ; i < header.length ; i++){ //创建一个单元格 HSSFCell cellRow = row.createCell(i); //创建一个内容对象 HSSFRichTextString head2 = new HSSFRichTextString(header[i]); //将内容对象的文字内容写入到单元格中 cellRow.setCellValue(head2); } count++; //遍历学生数据 for(UserCourse uc : userCourses){ for(User user : users){ if(uc.getCourseId().equals(cours.getCourseId())){ if(uc.getUsername().equals(user.getUsername())){ HSSFRow stuRow = sheet.createRow(count); HSSFCell stuCell = stuRow.createCell(0); HSSFRichTextString stuText = new HSSFRichTextString(user.getUserId().toString()); stuCell.setCellValue(stuText); HSSFCell stuCell2 = stuRow.createCell(1); HSSFRichTextString stuText2 = new HSSFRichTextString(user.getStudentName()); stuCell2.setCellValue(stuText2); HSSFCell stuCell3 = stuRow.createCell(2); HSSFRichTextString stuText3 = new HSSFRichTextString(user.getUsername()); stuCell3.setCellValue(stuText3); HSSFCell stuCell4 = stuRow.createCell(3); HSSFRichTextString stuText4 = new HSSFRichTextString(user.getObject()); stuCell4.setCellValue(stuText4); count++; break; } } } } HSSFRow newRow = sheet.createRow(count); count++; HSSFRow newRow2 = sheet.createRow(count); count++; } //准备将Excel的输出流通过response输出到页面下载 //八进制输出流 response.setContentType("application/octet-stream"); //这后面可以设置导出Excel的名称,此例中名为student.xls response.setHeader("Content-disposition" , "attachment;filename=student.xls"); //刷新缓冲 response.flushBuffer(); //workbook将Excel写入到response的输出流中,供页面下载 workbook.write(response.getOutputStream()); }

4.项目展示

4.1 普通用户

主页

选课或退课操作

个人选课信息

4.2 管理员

主页

学生管理

修改学生信息

导出信息

参考文献

  • 基于SpringCloud的在线教育平台的设计与实现(华中科技大学·李嘉蕊)
  • 琼州学院网上选课系统的设计与实现(大连海事大学·李金霞)
  • 基于微服务的在线教育系统的设计与实现(华中科技大学·毛颖志)
  • 基于Internet的学生选课信息管理系统的设计与实现(电子科技大学·李智)
  • 在线学习过程管理系统软件设计与实现(北京邮电大学·王嘉康)
  • 基于SSH架构的高校选课系统的设计与实现(黑龙江大学·于虹博)
  • 成人教育综合信息管理系统设计与实现(电子科技大学·伍家卫)
  • MOOC服务平台的设计与实现(齐鲁工业大学·宫琳琳)
  • 基于Web的高校选课系统的设计与实现(电子科技大学·谢慧萍)
  • 基于微服务的在线教育系统的设计与实现(华中科技大学·毛颖志)
  • 基于J2EE的网上选课系统的研究与实现(华东师范大学·罗海勇)
  • 基于微服务架构的在线教学平台的设计与实现(西北大学·刘坤)
  • 基于微服务架构的在线教学平台的设计与实现(西北大学·刘坤)
  • 互动网络课堂的研究及平台设计实现(沈阳建筑大学·吴宇玲)
  • 基于Web的高校选课系统的设计与实现(电子科技大学·谢慧萍)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕设项目助手 ,原文地址:https://m.bishedaima.com/yuanma/35494.html

相关推荐

发表回复

登录后才能评论