前言
- 💖💖作者:计算机程序员小杨
- 💙💙个人简介:我是一名计算机相关专业的从业者,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。热爱技术,喜欢钻研新工具和框架,也乐于通过代码解决实际问题,大家有技术代码这一块的问题可以问我!
- 💛💛想说的话:感谢大家的关注与支持!
- 💕💕文末获取源码联系 计算机程序员小杨
- 💜💜
- 网站实战项目
- 安卓/小程序实战项目
- 大数据实战项目
- 深度学习实战项目
- 计算机毕业设计选题
- 💜💜
一.开发工具简介
- 开发语言:Java+Python(两个版本都支持)
- 后端框架:Spring Boot(Spring+SpringMVC+Mybatis)+Django(两个版本都支持)
- 前端:Vue+ElementUI+HTML
- 数据库:MySQL
- 系统架构:B/S
- 开发工具:IDEA(Java的)或者PyCharm(Python的)
二.系统内容简介
《大学生创新能力培养平台》是一个基于Java+Python双技术栈架构的综合性管理系统,采用Spring Boot和Django双框架支持,前端使用Vue+ElementUI构建用户界面。该平台以MySQL作为数据存储核心,通过B/S架构实现跨平台访问。系统围绕大学生创新能力培养这一核心目标,构建了完整的项目管理生态链,包含学生管理、教师管理、学院信息管理等基础模块,以及项目类型管理、项目信息管理、项目大厅管理等核心业务模块。平台支持项目报名管理、项目成员管理功能,实现了从项目发布到团队组建的全流程管理。同时集成学生成绩管理模块,建立项目参与与学业评价的关联机制。系统还配备资料分类管理、资料信息管理功能,为项目开展提供知识库支撑,并通过公告信息管理、轮播图管理等模块实现信息发布与展示,构建了一个功能完备、操作便捷的大学生创新能力培养综合平台。
三.系统功能演示
四.系统界面展示
五.系统源码展示
import org.apache.spark.sql.SparkSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
@Service
public class ProjectManagementService {
private SparkSession spark = SparkSession.builder().appName("ProjectAnalysis").master("local[*]").getOrCreate();
@Autowired
private ProjectMapper projectMapper;
@Autowired
private StudentMapper studentMapper;
@Autowired
private TeacherMapper teacherMapper;
public Map<String, Object> projectRegistrationProcess(Long projectId, Long studentId) {
Map<String, Object> result = new HashMap<>();
Project project = projectMapper.selectById(projectId);
if (project == null) {
result.put("success", false);
result.put("message", "项目不存在");
return result;
}
if (project.getStatus() != 1) {
result.put("success", false);
result.put("message", "项目未开放报名");
return result;
}
int currentMembers = projectMapper.getCurrentMemberCount(projectId);
if (currentMembers >= project.getMaxMembers()) {
result.put("success", false);
result.put("message", "项目成员已满");
return result;
}
List<Long> conflictProjects = projectMapper.getStudentActiveProjects(studentId);
for (Long conflictId : conflictProjects) {
Project conflictProject = projectMapper.selectById(conflictId);
if (isTimeConflict(project, conflictProject)) {
result.put("success", false);
result.put("message", "时间冲突,无法报名");
return result;
}
}
Student student = studentMapper.selectById(studentId);
if (!checkStudentEligibility(student, project)) {
result.put("success", false);
result.put("message", "不符合报名条件");
return result;
}
ProjectMember member = new ProjectMember();
member.setProjectId(projectId);
member.setStudentId(studentId);
member.setJoinTime(new Date());
member.setStatus(0);
member.setRole("成员");
projectMapper.insertProjectMember(member);
projectMapper.updateMemberCount(projectId, currentMembers + 1);
sendNotificationToTeacher(project.getTeacherId(), "新成员报名", student.getName() + "报名参加" + project.getName());
result.put("success", true);
result.put("message", "报名成功");
result.put("memberId", member.getId());
return result;
}
public Map<String, Object> performanceEvaluationProcess(Long studentId, Long projectId, Map<String, Double> scores) {
Map<String, Object> result = new HashMap<>();
ProjectMember member = projectMapper.getProjectMember(projectId, studentId);
if (member == null || member.getStatus() != 1) {
result.put("success", false);
result.put("message", "学生未参与此项目或状态异常");
return result;
}
Project project = projectMapper.selectById(projectId);
if (project.getStatus() != 3) {
result.put("success", false);
result.put("message", "项目未完成,无法评分");
return result;
}
double totalScore = 0;
double weightSum = 0;
Map<String, Double> weights = getEvaluationWeights(project.getType());
for (Map.Entry<String, Double> entry : scores.entrySet()) {
String criterion = entry.getKey();
Double score = entry.getValue();
if (score < 0 || score > 100) {
result.put("success", false);
result.put("message", criterion + "分数超出范围");
return result;
}
Double weight = weights.get(criterion);
if (weight != null) {
totalScore += score * weight;
weightSum += weight;
}
}
if (Math.abs(weightSum - 1.0) > 0.01) {
result.put("success", false);
result.put("message", "评分权重配置错误");
return result;
}
Performance performance = new Performance();
performance.setStudentId(studentId);
performance.setProjectId(projectId);
performance.setTotalScore(totalScore);
performance.setDetailScores(scores);
performance.setEvaluateTime(new Date());
performance.setEvaluatorId(getCurrentUserId());
projectMapper.insertPerformance(performance);
updateStudentGrade(studentId, totalScore, project.getCredits());
List<Performance> allPerformances = projectMapper.getProjectPerformances(projectId);
if (allPerformances.size() >= project.getMemberCount()) {
calculateProjectStatistics(projectId, allPerformances);
}
result.put("success", true);
result.put("message", "评分完成");
result.put("totalScore", totalScore);
result.put("rank", calculateStudentRank(studentId, projectId));
return result;
}
public Map<String, Object> resourceManagementProcess(Long categoryId, String fileName, byte[] fileContent, Long uploaderId) {
Map<String, Object> result = new HashMap<>();
ResourceCategory category = resourceMapper.selectCategoryById(categoryId);
if (category == null || category.getStatus() != 1) {
result.put("success", false);
result.put("message", "分类不存在或已禁用");
return result;
}
if (fileContent.length > category.getMaxFileSize()) {
result.put("success", false);
result.put("message", "文件大小超出限制");
return result;
}
String fileExtension = getFileExtension(fileName);
if (!category.getAllowedTypes().contains(fileExtension)) {
result.put("success", false);
result.put("message", "不支持的文件类型");
return result;
}
String filePath = generateFilePath(categoryId, fileName, uploaderId);
boolean saveSuccess = saveFileToStorage(filePath, fileContent);
if (!saveSuccess) {
result.put("success", false);
result.put("message", "文件保存失败");
return result;
}
ResourceInfo resource = new ResourceInfo();
resource.setCategoryId(categoryId);
resource.setFileName(fileName);
resource.setFilePath(filePath);
resource.setFileSize(fileContent.length);
resource.setUploaderId(uploaderId);
resource.setUploadTime(new Date());
resource.setDownloadCount(0);
resource.setStatus(1);
resourceMapper.insertResource(resource);
updateCategoryResourceCount(categoryId, 1);
addUserUploadRecord(uploaderId, resource.getId());
List<User> subscribedUsers = resourceMapper.getCategorySubscribers(categoryId);
for (User user : subscribedUsers) {
sendResourceNotification(user.getId(), "新资源上传", fileName + "已上传至" + category.getName());
}
indexResourceForSearch(resource);
result.put("success", true);
result.put("message", "资源上传成功");
result.put("resourceId", resource.getId());
result.put("downloadUrl", generateDownloadUrl(resource.getId()));
return result;
}
private boolean checkStudentEligibility(Student student, Project project) {
if (student.getGrade() < project.getMinGrade()) return false;
if (!project.getAllowedMajors().contains(student.getMajor())) return false;
return student.getGpa() >= project.getMinGpa();
}
private boolean isTimeConflict(Project p1, Project p2) {
return !(p1.getEndTime().before(p2.getStartTime()) || p2.getEndTime().before(p1.getStartTime()));
}
private void updateStudentGrade(Long studentId, double score, int credits) {
Student student = studentMapper.selectById(studentId);
double newGpa = (student.getGpa() * student.getTotalCredits() + score * credits) / (student.getTotalCredits() + credits);
student.setGpa(newGpa);
student.setTotalCredits(student.getTotalCredits() + credits);
studentMapper.updateById(student);
}
}
六.系统文档展示
结束
💕💕文末获取源码联系 计算机程序员小杨