计算机毕业设计选题推荐-大学生选修选课系统-Java项目实战

作者主页:IT毕设梦工厂✨
个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。
☑文末获取源码☑
精彩专栏推荐⬇⬇⬇
Java项目
Python项目
安卓项目
微信小程序项目

一、前言

随着高等教育的发展和信息技术的普及,高校的教学管理面临着越来越多的挑战。传统的选课系统已经难以满足高校日益增长的需求,也无法处理大量的学生、教师和管理人员信息。因此,开发一款能够满足各方需求、功能齐全、操作简便的大学生选修选课系统显得尤为重要。

当前,许多高校的选课系统存在以下问题:
功能不完善:很多系统只提供基本的选课、排课功能,而对于课程信息管理、学生成绩信息等重要内容缺乏管理手段。
用户角色覆盖不全:许多系统只针对某一特定用户角色(如学生或教师)设计,无法满足不同用户角色的需求。
数据处理能力不足:现有系统往往无法处理大量数据,导致选课、排课等操作效率低下。
信息交互性差:各系统间的信息无法共享和交互,使得信息管理变得混乱且低效。

本研究旨在开发一款针对大学生选修选课系统的解决方案,以满足学生、教师和管理人员等不同用户角色的需求。该系统将具备以下特点:
齐全的功能:涵盖课程信息管理、排课信息管理、选课信息管理、学生成绩信息管理、选课限制信息管理、公告信息管理等多个方面。
用户角色覆盖齐全:系统将能够满足学生、教师和管理人员等不同用户角色的需求,实现各角色之间的信息共享和交互。
强大的数据处理能力:采用数据处理算法,提高选课、排课等操作的效率。
良好的信息交互性:实现各系统间的信息共享和交互,提高信息管理的效率和准确性。

本研究的意义在于提供一款功能齐全、操作简便的大学生选修选课系统,以解决现有选课系统存在的问题,提高高校教学管理的效率和准确性。该系统不仅能够满足学生、教师和管理人员等不同用户角色的需求,还具有强大的数据处理能力和良好的信息交互性,可以提高选课、排课等操作的效率,降低高校教学管理的成本和复杂性。此外,该系统的实施还可以增进高校信息化建设的进程,推动高等教育的发展。

二、开发环境

  • 开发语言:Java
  • 数据库:MySQL
  • 系统架构:B/S
  • 后端:SpringBoot
  • 前端:Vue

三、系统功能模块

  • 角色:学生、教师、管理员
  • 功能:
    学生
    课程信息管理、排课信息管理、选课信息管理、学生成绩信息、选课限制信息、公告信息;
    教师
    学生管理、课程信息管理、排课信息管理、选课信息管理、学生成绩管理、选课限制信息;
    管理员
    教师管理、学生管理、课程信息、排课信息、选课信息、学生成绩管理、基础数据管理(班级、成绩类型、第几节、课程类型、公告类型、周次、学期)、选课限制管理、公告信息管理。

四、系统界面展示

  • 大学生选修选课系统-界面展示:
    大学生选修选课系统-课程信息管理
    大学生选修选课系统-选课信息管理
    大学生选修选课系统-学生成绩管理
    大学生选修选课系统-课程信息管理-管理员
    大学生选修选课系统-排课信息管理-管理员
    大学生选修选课系统-选课信息管理-管理员
    大学生选修选课系统-基础数据管理
    大学生选修选课系统-选课限制管理-管理员

五、代码参考

  • Java项目实战-代码参考:
@Controller
@RequestMapping("/choose")
public class ChooseController {

    private static final Logger LOGGER = LoggerFactory.getLogger(ChooseController.class);

    @Autowired
    private ChooseService chooseService;

    //得到选修课数据
    //默认从第0页开始,一页10条数据
    @GetMapping("/elective/list")
    public String getPlanEntityList(Model model, @RequestParam(value = "pageNum", defaultValue = "0")Integer pageNum,
                                    @RequestParam(value = "size", defaultValue = "6") Integer size) {

        ListDTO<PlanEntity> listDTO = chooseService.getPlanEntityListPage(pageNum, size);
        model.addAttribute("planDto", listDTO);
        return "elective";
    }

    @PostMapping("/{pno}/exposer")
    @ResponseBody
    private ResultDTO<String> exposer(@PathVariable(value = "pno")Integer pno){

        try{
            ExposerDTO exposer = chooseService.exposer(pno);
            return new ResultDTO<>(exposer.getMd5());
        }catch (Exception e){
            LOGGER.error(e.getMessage(), e);
            return new ResultDTO<>(-1, e.getMessage());
        }
    }

    //选课
    @PostMapping("/{pno}/{md5}/confirm")
    @ResponseBody
    public ResultDTO<String> doChoose(@PathVariable(value = "pno")Integer pno, @PathVariable(value = "md5")String md5) {

        try{
            return chooseService.doChoose(pno, md5);
        }catch (Exception e){
            LOGGER.error(e.getMessage(), e);
            return new ResultDTO<>(-1, e.getMessage());
        }

    }

@Controller
@RequestMapping("/clazz")
public class ClazzController {

    private static final Logger LOGGER = LoggerFactory.getLogger(ChooseController.class);

    @Autowired
    private ClazzService clazzService;

    //课程表页面
    @GetMapping("/list")
    public String getClazzList(Model model, @RequestParam(value = "pageNum", defaultValue = "0")Integer pageNum,
                               @RequestParam(value = "size", defaultValue = "6") Integer size) {

        ListDTO<ClazzEntity> page = clazzService.getClazzEntityListPage(pageNum, size);
        model.addAttribute("Clazz", page);

        return "clazz";

    }

    //跳转到每个课程对应的详细授课计划
    @GetMapping("/{cno}/detail")
    public String getClazzDetail(Model model, @PathVariable(name = "cno") String cno, @RequestParam(value = "pageNum", defaultValue = "0")Integer pageNum,
                                 @RequestParam(value = "size", defaultValue = "10") Integer size) {

        if(cno == null){
            return "major";
        }

        ListDTO<PlanEntity> page = clazzService.getClazzOfPlanEntityPage(cno, pageNum, size);
        model.addAttribute("detail", page);
        //留给选必修课页面分页传参用
        model.addAttribute("cno", cno);

        return "major";

    }

@Controller
public class LoginController {

    private static final Logger LOGGER = LoggerFactory.getLogger(LoginController.class);

    @Autowired
    private StudentService studentService;

    @PostMapping("/do/login")
    @ResponseBody
    public String doLogin(StudentEntity studentEntity, HttpServletResponse response) {

        Integer sno = studentEntity.getSno();
        String password = studentEntity.getPassword();
        LOGGER.info("从前端取得的输入密码{}", password);

        //查询学号对应学生的实体类
        StudentEntity student = studentService.findStudentById(sno);

        // 获取当前的subject
        Subject subject = SecurityUtils.getSubject();
        // 封装用户的登录数据
        UsernamePasswordToken token = new UsernamePasswordToken(String.valueOf(sno), password);

        // 执行登录方法,如果没有异常就说明正常
        try {
            // shiro 登录 授权 认证
            subject.login(token);

            //将学生id保存起来,以备后续使用
            StudentIDUtils.addStudentIDToMap(sno);
            String msg = "success";

            //得到session过期时间
            long timeout = subject.getSession().getTimeout();
            //将学生姓名添加到cookie中
            addCookie("sname", student.getSname(), timeout, response);
            LOGGER.info("do login result ==> " + msg);

            return msg;
        } catch (UnknownAccountException e) {
            LOGGER.warn("do login result ==> " + CodeMsg.STUDENT_NUM_NOT_EXISTS.getMsg());
            throw new GlobalException(CodeMsg.STUDENT_NUM_NOT_EXISTS);
        } catch (IncorrectCredentialsException e) {
            LOGGER.warn("do login result ==> " + CodeMsg.PASSWORD_WRONG.getMsg());
            throw new GlobalException(CodeMsg.PASSWORD_WRONG);
        } catch (LockedAccountException e) {
            LOGGER.warn("do login result ==> " + CodeMsg.ACCOUNT_LOCKED.getMsg());
            throw new GlobalException(CodeMsg.ACCOUNT_LOCKED);
        }
    }


    @GetMapping("/logout")
    public String logout() {

        Subject subject = SecurityUtils.getSubject();
        // 登出
        StudentIDUtils.removeUserIdFromMap();
        LOGGER.info("User " + subject.getPrincipal() + " logout.");
        subject.logout();

        return "redirect:/home";
    }

    private void addCookie(String key, String value, long timeout, HttpServletResponse response) {

        Cookie cookie = new Cookie(key, value);
        //这个必须要设置
        cookie.setPath("/");
        cookie.setMaxAge((int) timeout);
        cookie.setHttpOnly(true);
        response.addCookie(cookie);

    }
}

六、论文参考

  • 计算机毕业设计选题推荐-大学生选修选课系统-论文参考:
    计算机毕业设计选题推荐-大学生选修选课系统-论文参考

七、系统视频

大学生选修选课系统-项目视频:

基于SpringBoot的大学生选修选课系统

结语

计算机毕业设计选题推荐-大学生选修选课系统-Java项目实战
大家可以帮忙点赞、收藏、关注、评论啦~
源码获取:私信我

精彩专栏推荐⬇⬇⬇
Java项目
Python项目
安卓项目
微信小程序项目

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值