基于SpringBoot的遗传算法排课系统源码前后端分离项目

>前言:我是天码编程,从事计算机开发行业数年,专注Java程序设计开发、源码分享、技术指导和毕业设计

springboot遗传算法排课系统


> # **项目名**

> ## 基于SpringBoot的遗传算法排课系统

># **技术栈**

>## SpringBoot+Vue+MySQL+Maven+阿里云OSS

@[TOC](文章目录)

# 一、环境介绍

## 1.1 运行环境

开发语言:Java

数据库:MySQL

系统架构:B/S

后端:SpringBoot(MyBatis)

图片上传:阿里云OSS

前端:Vue

工具:IDEA,JDK1.8,Maven

# 二、系统介绍

## 2.1 功能模块

- 系统角色:管理员、讲师、学生

- 管理员:登录、系统数据、排课管理、课程管理、讲师管理、学生管理、教学资料管理、教学设施管理

- 教师:登录、系统数据、查看课表、课程管理、班级管理、学生管理、教学资料管理

- 学生:登录、查看课表、查看下载学习文档、查询空教室、个人中心、修改密码

## 2.2 系统架构

该项目是前后端分离

前端端口:8081

后端端口:8080

# 三、系统展示

## 3.1部分功能图文展示

管理员讲师登陆界面:

管理员讲师登录页面


排课管理页面:

排课管理页面

班级管理页面:

讲师管理页面:

学生管理页面:


教材管理页面:

教室管理页面:

教学楼管理页面:

课程类别管理页面:

在线测试管理页面:

# 三、部分代码设计

## 3.1.部分代码如下:

```java(贴上部分代码)

/**

    * 排课算法入口

    * @param

    * @return

    */

    @Transactional

    @Override

    public ServerResponse classScheduling(String semester) {

        try {

            log.info("开始排课,时间:" + System.currentTimeMillis());

            long start = System.currentTimeMillis();

            // 1、获得开课任务

//            List<ClassTask> classTaskList = classTaskDao.selectBySemester(classTask);

            QueryWrapper<ClassTask> wrapper = new QueryWrapper<ClassTask>().eq("semester", semester);

            List<ClassTask> classTaskList = classTaskDao.selectList(wrapper);

            // 没有任务,排课失败

            if (classTaskList == null) {

                return ServerResponse.ofError("排课失败,查询不到排课任务!");

            }

            // 2、将开课任务的各项信息进行编码成染色体,分为固定时间与不固定时间

            List<Map<String, List<String>>>  geneList = coding(classTaskList);

            // 3、给初始基因编码随机分配时间,得到同班上课时间不冲突的编码

            List<String> resultGeneList = codingTime(geneList);

            // 4、将分配好时间的基因编码以班级分类成为以班级的个体,得到班级的不冲突时间初始编码

            Map<String, List<String>> individualMap = transformIndividual(resultGeneList);

            // 5、遗传进化

            individualMap = geneticEvolution(individualMap);

            // 6、分配教室并做教室冲突检测

            List<String> resultList = finalResult(individualMap);

            // 7、解码最终的染色体获取其中的基因信息

            List<CoursePlan> coursePlanList = decoding(resultList);

            // 8、写入tb_course_plan上课计划表

            coursePlanDao.deleteAllPlan(); // 先删除原来的课程计划

            for (CoursePlan coursePlan : coursePlanList) {

                coursePlanDao.insertCoursePlan(coursePlan.getGradeNo(), coursePlan.getClassNo(), coursePlan.getCourseNo(),

                        coursePlan.getTeacherNo(), coursePlan.getClassroomNo(), coursePlan.getClassTime(), semester);

            }

            log.info("完成排课,耗时:" + (System.currentTimeMillis() - start));

            return ServerResponse.ofSuccess("排课成功!");

        } catch (Exception e) {

            log.error("the error message is:" + "    " + e.getMessage());

            e.printStackTrace();

            return ServerResponse.ofError("排课失败,出现异常!");

        }

    }

```

```java(贴上部分代码)

/**

    * 文件上传成功返回路径

    * @param file

    * @param directory 选择需要上传到的目录下面,暂时不用,原本想将用户头像、其他文件上传到不同的目录下面的

    * @return

    */

    public static Map<String, Object> upload(MultipartFile file, String directory) {

        // 创建OSSClient实例。

        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        String url = "";

        try {

            // 获取输入流

            InputStream inputStream = file.getInputStream();

            String fileName = file.getOriginalFilename();

            // 在文件名称里面添加随机唯一的值

            String uuid = UUID.randomUUID().toString().replaceAll("-", "");

            // 随机id

            String newFileName = uuid + fileName;

            // 上传

            ossClient.putObject(bucketName, fileName, inputStream);

            // 关闭OSSClient。

            ossClient.shutdown();

            url = "https://" + bucketName + "." + endpoint + "/" + fileName;

            System.out.println("url========" + url);

            Map<String, Object> map = new HashMap<>();

            map.put("url", url);

            map.put("name", fileName);

            return map;

        } catch (IOException e) {

            e.printStackTrace();

        }

        return null;

    }

```

麻烦大家帮忙点赞、收藏、关注、评论啦

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

相关阅读更多精彩内容

友情链接更多精彩内容