java+vue+SpringBoot学生选课系统(程序+数据库+报告+部署教程+答辩指导)

源代码+数据库+LW文档(1万字以上)+开题报告+答辩稿ppt+部署教程+代码讲解+代码时间修改工具

技术实现

  1. 开发语言:后端:Java 前端:vue
  2. 框架:springboot
  3. 数据库:mysql

开发工具
JDK版本:JDK1.8
数据库:mysql 数据库工具:Navicat
开发软件:idea

主要角色及功能介绍
针对现存的问题和需要,通过功能需求的分析,特建立了数字化、信息化的学生选课系统。
本系统主要包含了系统用户管理、学生管理、教师管理、选课管理、成绩管理、系统管理等多个功能模块。下面分别简单阐述一下这几个功能模块需求。
表3-1功能需求表
编号 功能名称 功能描述

  1. 用户登录 保证用户通过身份验证进入系统进行操作
  2. 数据备份 超级管理员对系统的数据进行备份
  3. 批量删除 超级管理员选择系统某个数据表进行数据清空
  4. 修改个人信息 用户可以根据自己当前的情况修改个人的信息
  5. 后台登录 仅管理员能够登录后台
  6. 添加选课记录 学生添加选课记录
  7. 编辑选课记录 学生修改选课记录信息
  8. 删除选课记录 学生删除选课记录
  9. 选课审核 教师给学生添加的选课进行审核
  10. 成绩审核 教师给学生的成绩进行审核
  11. 添加选课成绩信息 教师添加选课成绩信息
  12. 编辑选课成绩信息 教师修改选课成绩信息
  13. 删除选课成绩信息 教师删除选课成绩信息
    本系统使用的角色主要有系统管理员、学生、教师,本系统分为学生端、教师端和管理员端,首先学生用账号密码登录系统用户端,进行课程查询、在线选课、成绩查询,学生可以通过标题和类别进行信息的搜索。
    管理员端主要由管理员使用,以管理员的身份在登录页面输入账号和密码,经过数据库身份验证,验证成功后登录系统主页,可以使用系统用户管理、学生管理、教师管理、选课管理、成绩管理、课程信息管理、系统管理等功能操作。同时管理员可以通过关键字搜索可以搜索相应的信息,打印各种详细信息,导出各类信息列表至excel中。
    系统的功能结构图如下图所示。
    在这里插入图片描述
    图4-1系统功能结构图
    1.用户管理模块
    该模块包括普通用户管理和系统用户管理,系统用户主要是普通管理员,对用户信息进行管理,只有普通用户才可在该系统上进行相应的操作。用户对个人信息可进行修改;管理员可对自己的个人信息进行维护,同时可对用户的密码信息进行修改,也可删除系统中的用户
    2.登录模块
    根据用户输入的 Id 和密码到数据库中查找该用户,如果未能找到该用户则做出 提醒“用户名或密码错误”,如果找到该用户,则要判断用户的类别然后根据用户类别进入相应的页面。
    3.课程信息管理模块
    (1)课程添加:必须填写课程编号、课程名称、课程负责账号、课程负责人必须是唯一的, 提交后判断某一项是否为填写, 如果是则做出提醒, 填写符合规则后方可添加到数据库。
    (2)课程规查询:可以根据课程编号等信息对课程进行查询,查询结果可能有多个。
    (3)课程修改:除了课程编号外,其他信息均可以修改。
    (4)课程删除:首先找到要删除的课程(一个或多个),然后删除即可。
    4.课程成绩管理模块
    教师选中某个选课,点击添加成绩,填写成绩数据,点击添加按钮,完成选课成绩操作,每次成绩录入,列表将生成新的成绩信息,供管理员管理。
    5.选课模块
    用户查询课程规划信息,选择课程规划进入该课程规划的详细页面,点击选课按钮,填写选课表单,添加选课记录。
    6.选课管理模块
    用户选课课程规划模块主要实现的是对课程规划的选课功能,同时可查看自己的选课记录,并对选课可进行取消选课操作。管理员登录系统后,可查看用户的选课信息,也可搜索选课信息,同时可对选课信息进行确认或删除的操作。
    数据库
    概念设计是整个数据库设计的关键,在概念设计阶段,由需求分析得到了E-R模型。E-R图是识别功能模型与数据模型间关联关系的,在主题数据库的抽取和规范化的过程中,采用的是简化的E-R图表示方法,从而避免过繁过细的E-R图表示影响规划的直观和可用性。是对现实世界的抽象和概括,是数据库设计人员进行数据可设计的有力工具,能够方便直接地表达应用中的各种语义知识,令一方面它简单、清晰、易于用户理解。
    系统总体ER图如下图所示。
    在这里插入图片描述
    图4-10系统总体ER图
    系统功能实现及截图
    学生选课系统的系统入口就是用户登录功能,在浏览器输系统地址跳转至系统前台首页,系统前台的登录窗口在首页左面,包括用户名、密码、权限、验证码,除了权限框使用下拉列表,其他使用文本框,验证码下方为登录和重置两个按钮,用户点击登录按钮,则进行登录验证。
    登录流程图如下所示。
    在这里插入图片描述
    图5-1登录流程图
    系统登录界面如下所示。
    在这里插入图片描述
    图5-2系统登录
    用户登录的逻辑代码如下:
    /**
    • 登录

    • @param data

    • @param httpServletRequest

    • @return
      */
      @PostMapping(“login”)
      public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
      log.info(“[执行登录接口]”);

      String username = data.get(“username”);
      String email = data.get(“email”);
      String phone = data.get(“phone”);
      String password = data.get(“password”);

      List resultList = null;
      Map<String, String> map = new HashMap<>();
      if(username != null && “”.equals(username) == false){
      map.put(“username”, username);
      resultList = service.select(map, new HashMap<>()).getResultList();
      }
      else if(email != null && “”.equals(email) == false){
      map.put(“email”, email);
      resultList = service.select(map, new HashMap<>()).getResultList();
      }
      else if(phone != null && “”.equals(phone) == false){
      map.put(“phone”, phone);
      resultList = service.select(map, new HashMap<>()).getResultList();
      }else{
      return error(30000, “账号或密码不能为空”);
      }
      if (resultList == null || password == null) {
      return error(30000, “账号或密码不能为空”);
      }
      //判断是否有这个用户
      if (resultList.size()<=0){
      return error(30000,“用户不存在”);
      }

      User byUsername = (User) resultList.get(0);

      Map<String, String> groupMap = new HashMap<>();
      groupMap.put(“name”,byUsername.getUserGroup());
      List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
      if (groupList.size()<1){
      return error(30000,“用户组不存在”);
      }

      UserGroup userGroup = (UserGroup) groupList.get(0);

      //查询用户审核状态
      if (!StringUtils.isEmpty(userGroup.getSourceTable())){
      String sql = "select examine_state from “+ userGroup.getSourceTable() +” WHERE user_id = " + byUsername.getUserId();
      String res = String.valueOf(service.runCountSql(sql).getSingleResult());
      if (res==null){
      return error(30000,“用户不存在”);
      }
      if (!res.equals(“已通过”)){
      return error(30000,“该用户审核未通过”);
      }
      }

      //查询用户状态
      if (byUsername.getState()!=1){
      return error(30000,“用户非可用状态,不能登录”);
      }

      String md5password = service.encryption(password);
      if (byUsername.getPassword().equals(md5password)) {
      // 存储Token到数据库
      AccessToken accessToken = new AccessToken();
      accessToken.setToken(UUID.randomUUID().toString().replaceAll(“-”, “”));
      accessToken.setUser_id(byUsername.getUserId());
      tokenService.save(accessToken);

       // 返回用户信息
       JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
       user.put("token", accessToken.getToken());
       JSONObject ret = new JSONObject();
       ret.put("obj",user);
       return success(ret);
      

      } else {
      return error(30000, “账号或密码不正确”);
      }
      }
      5.2学生子系统模块的实现
      5.2.1课程信息模块的实现
      学生点击某个课程点进入课程信息详细页,点击搜索按钮进入课程信息页,提交搜索信息,成功搜索。
      课程信息流程图如下所示。
      在这里插入图片描述
      图5-3课程信息流程图
      课程信息界面如图所示。
      在这里插入图片描述
      图5-4课程信息
      课程管理界面如图所示。
      在这里插入图片描述
      图5-5课程管理

课程添加关键代码为:
@PostMapping(“/add”)
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}

@Transactional
public Map<String, Object> addMap(Map<String,Object> map){
    service.insert(map);
    return success(1);

}

public Map<String,Object> readBody(BufferedReader reader){
    BufferedReader br = null;
    StringBuilder sb = new StringBuilder("");
    try{
        br = reader;
        String str;
        while ((str = br.readLine()) != null){
            sb.append(str);
        }
        br.close();
        String json = sb.toString();
        return JSONObject.parseObject(json, Map.class);
    }catch (IOException e){
        e.printStackTrace();
    }finally{
        if (null != br){
            try{
                br.close();
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }
    return null;

}

public void insert(Map<String,Object> body){
    StringBuffer sql = new StringBuffer("INSERT INTO ");
    sql.append("`").append(table).append("`").append(" (");
    for (Map.Entry<String,Object> entry:body.entrySet()){
        sql.append("`"+humpToLine(entry.getKey())+"`").append(",");
    }
    sql.deleteCharAt(sql.length()-1);
    sql.append(") VALUES (");
    for (Map.Entry<String,Object> entry:body.entrySet()){
        Object value = entry.getValue();
        if (value instanceof String){
            sql.append("'").append(entry.getValue()).append("'").append(",");
        }else {
            sql.append(entry.getValue()).append(",");
        }
    }
    sql.deleteCharAt(sql.length() - 1);
    sql.append(")");
    log.info("[{}] - 插入操作:{}",table,sql);
    Query query = runCountSql(sql.toString());
    query.executeUpdate();
}

5.2.2选课模块的实现
学生点击某个课程规划点进入课程规划详细页,点击选课按钮进入选课页,提交选课信息,成功选课后,教师管理学生的选课信息,审核选课信息。
学生选课流程图如下所示。
在这里插入图片描述
图5-6学生选课流程图
课程选课界面如图所示。
在这里插入图片描述
图5-7课程选课
选课管理界面如图所示。
在这里插入图片描述
图5-8选课管理

选课添加关键代码为:
@RequestMapping(value = {“/avg_group”, “/avg”})
public Map<String, Object> avg(HttpServletRequest request) {
Query count = service.avg(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}
5.2.3成绩信息模块的实现
根据学生的选课对应所属的教师,该教师可对选择该门课程的学生录入课程成绩,学生查看个人课程成绩。
成绩录入流程图如下所示。
在这里插入图片描述
图5-9成绩录入流程图
成绩信息界面如图所示。
在这里插入图片描述
图5-10成绩信息
成绩管理界面如图所示。
在这里插入图片描述
图5-11成绩管理

成绩添加关键代码为:
@RequestMapping(“/get_list”)
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return success(map);
}

5.2.45.3管理员子系统模块的实现
5.3.1用户管理模块的实现
系统用户管理主要是对新用户的添加和旧用户的删除。新用户的添加主要是指添加用户名称并确定其密码;旧用户的删除也是从下拉菜单中找到对应的用户名称将其删除。不论是新用户添加还是旧用户的删除,这个权限只有管理员具有。
系统用户管理界面如下图所示。
在这里插入图片描述
图5-12系统用户管理
系统用户管理关键代码为:
@RestController
@RequestMapping(“auth”)
public class AuthController extends BaseController<Auth, AuthService> {
/**
* 服务对象
*/
@Autowired
public AuthController(AuthService service) {
setService(service);
}

}

5.3.2密码修改模块的实现
密码修改是对当前登录用户的密码进行修改,在用户登录后右上方也能进行密码修改。
密码修改流程图如下所示。
在这里插入图片描述
图5-13密码修改流程图
5.3.3学院信息模块的实现
学院信息功能主要指对其学院名称、学院简介、学院地址、学院图片等一些基本信息的添加、删除和修改。
学院信息流程图如下所示。
在这里插入图片描述
图5-14学院信息流程图
学院信息添加如下图所示:
在这里插入图片描述
图5-15学院信息添加
学院信息管理如下图所示:
在这里插入图片描述
图5-16学院信息管理
学院信息添加关键代码为:
public class FindConfig {

public static String PAGE = "page";
public static String SIZE = "size";
public static String LIKE = "like";
public static String ORDER_BY = "orderby";
public static String FIELD = "field";
public static String GROUP_BY = "groupby";
public static String MIN_ = "_min";
public static String MAX_ = "_max";

}
5.3.4课程信息管理模块的实现
管理员发布新的课程信息,系统前台显示课程信息,课程信息添加功能主要指对其课程编号、课程名称、授课老师等一些基本信息的添加、删除和修改。课程信息查询能根据课程信息id、竞赛名称等多种条件对课程信息进行查询。
课程信息管理流程图如下所示。
在这里插入图片描述
图5-17课程信息管理流程图
课程信息添加如下图所示:
在这里插入图片描述
图5-18课程信息添加
课程信息管理如下图所示:
在这里插入图片描述
图5-19课程信息管理
课程信息管理关键代码为:
@SpringBootApplication
@EnableJpaRepositories
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
5.3.5选课管理模块的实现
学生选择课程添加课程选课记录,教师审核课程选课信息,教师所以学生的课程选课记录。
课程选课查管理流程图如下所示。
在这里插入图片描述
图5-20选课管理流程图
选课审核如下图所示。
在这里插入图片描述
图5-21选课审核
选课审核关键代码为:
@RequestMapping(value = {“/sum_group”, “/sum”})
public Map<String, Object> sum(HttpServletRequest request) {
Query count = service.sum(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Q_97095639

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值