基于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://bishedaima.com/yuanma/35494.html

相关推荐

  • 基于SpringBoot的酒店管理系统

    Java组件课程设计-基于SpringBoot的酒店管理系统 1,项目简介 1,1系统角色 系统角色分为:经理(管理员)和员工(普通用户)两种用户
    2024年05月14日
    6 1 1
  • JSP+Sqlserver实现威客任务平台(源码+论文)

    这是一个🔥🔥JSP+Sqlserver实现威客任务平台🔥🔥的项目源码,开发语言Java,开发环境Idea/Eclipse,这个 威客任务平台开发技术栈为JSP项目,可以作为毕业设计课程设计作业基于jsp+servlet+sqlserver实现一个威客众包任务平台
    2024年05月23日
    6 1 2
  • 基于python实现的udp可靠文件传输

    基于python实现的udp可靠文件传输 一,项目说明 本项目使用Python进行实现 采用Client-Server架构
    2024年05月14日
    2 1 1
  • 基于Python实现图像绘制

    1, 问题描述 使用 Iris 数据集,在一个 figure 中绘制出右侧的 16 个子图, 分别使用花瓣长度,花瓣宽度,花萼长度和花萼宽度这四种数据
    2024年05月14日
    2 1 1
  • 基于Python实现房天下爬虫项目

    基于Python实现房天下爬虫项目 任务清单: 1,爬取网站 :房天下 2,爬取内容:各个省市所有的新房,二手房的信息 3,爬取策略:分布式爬取(会先从单机开始
    2024年05月14日
    1 1 1
  • 基于Java的纸牌游戏设计与实现

    基于Java的纸牌游戏设计与实现 纸牌游戏一直以来都是人们喜爱的休闲娱乐方式之一,随着计算机技术的不断发展,基于Java语言的纸牌游戏设计与实现具有重要的研究意义
    2024年05月07日
    4 1 2
  • Web 端的教务管理系统

    Web 端的教务管理系统 软件需求 1 引言 1,1 编写目的 旨在为全校的教务管理提供一个方便的公共平台,让繁杂的教务管理变的简单易行
    2024年05月14日
    8 1 3
  • 基于SpringBoot框架的电影评论网站系统

    这是一套采用🔥🔥SpringBoot为核心的电影评论网站项目源代码🔥🔥,主要编程语言为Java,并结合了Vue技术进行开发,开发工具选择的是Idea或Eclipse,此项目可作为毕业设计或课程设计任务
    2024年05月23日
    5 1 1
  • 社区团购系统设计

    这是一个🔥🔥基于SpringBoot框架的社区团购系统设计设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    2 1 2
  • 基于SpringBoot框架的电商平台

    这是一套采用Java编程语言,基于SpringBoot框架构建的电商系统源代码,该项目融入了Vue技术,开发工具为Idea或Eclipse,该系统核心功能涵盖商品销售与在线购物
    2024年05月23日
    2 1 1

发表回复

登录后才能评论