前言:我是天码编程,从事计算机开发行业数年,专注Java程序设计开发、源码分享、技术指导和毕业设计
项目名
基于SpringBoot的遗传算法排课系统
技术栈
SpringBoot+Vue+MySQL+Maven+阿里云OSS
一、环境介绍
1.1 运行环境
开发语言:Java
数据库:MySQL
系统架构:B/S
后端:SpringBoot(MyBatis)
图片上传:阿里云OSS
前端:Vue
工具:IDEA,JDK1.8,Maven
二、系统介绍
2.1 功能模块
- 系统角色:管理员、讲师、学生
- 管理员:登录、系统数据、排课管理、课程管理、讲师管理、学生管理、教学资料管理、教学设施管理
- 教师:登录、系统数据、查看课表、课程管理、班级管理、学生管理、教学资料管理
- 学生:登录、查看课表、查看下载学习文档、查询空教室、个人中心、修改密码
2.2 系统架构
该项目是前后端分离
前端端口:8081
后端端口:8080
三、系统展示
3.1部分功能图文展示
管理员讲师登陆界面:
排课管理页面:
班级管理页面:
讲师管理页面:
学生管理页面:
教材管理页面:
教室管理页面:
教学楼管理页面:
课程类别管理页面:
在线测试管理页面:
四、部分代码设计
4.1.后端部分代码
/**
* 排课算法入口
* @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("排课失败,出现异常!");
}
}
/**
* 文件上传成功返回路径
* @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();
//1 在文件名称里面添加随机唯一的值
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;
}
总结
麻烦大家帮忙点赞、收藏、关注、评论啦