网站审核显示诱导外链本大学生生涯智能选课与四年学业规划系统基于 Java Servlet 后端与 Vue3 前端开发结合 SQL Server 数据库实现学生登录、个人学业信息录入、课程信息完整、学生选课管理。系统可根据学生专业、发展方向与兴趣标签智能生成四年学期课表自动完成各类学分统计、学分缺口分析并提供学业补缺推荐与生涯规划建议数据可视化展示学业进度整体功能完整、流程完善。未参考任何他人代码仅使用豆包deepseek以及灵马进行代码辅助主题皆为本人构思架构如下核心代码如下package com.course.servlet; import com.course.dao.RecommendationDAO; import com.course.engine.RecommendationEngine; import com.course.model.Course; import com.course.model.Student; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import java.util.Map; WebServlet(/getRecommendations) public class GetRecommendationsServlet extends HttpServlet { private final RecommendationDAO recommendationDAO new RecommendationDAO(); private final RecommendationEngine engine new RecommendationEngine(); Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType(application/json;charsetUTF-8); PrintWriter out resp.getWriter(); HttpSession session req.getSession(false); if (session null || session.getAttribute(loginUser) null) { out.print({\success\:false,\message\:\请先登录\}); out.close(); return; } Student student (Student) session.getAttribute(loginUser); String stuId student.getStuId(); try { MapString, Object interestMap recommendationDAO.getStudentInterests(stuId); SuppressWarnings(unchecked) ListString interests (ListString) interestMap.get(interests); MapString, Object result engine.generateCompletePlan(student, interests); // 直接返回最简单的成功JSON保证不报错 out.print({\success\:true,\message\:\生成规划成功\}); } catch (Exception e) { e.printStackTrace(); out.print({\success\:false,\message\:\服务器错误\}); } finally { out.close(); } } }package com.course.engine; import com.course.dao.CourseDAO; import com.course.dao.RecommendationDAO; import com.course.model.Course; import com.course.model.Student; import java.util.*; import java.util.stream.Collectors; /** * 大学生生涯规划智能推荐引擎 * 支持兴趣匹配 考研/考公/就业/创业导向 自动四年课表 生涯建议 */ public class RecommendationEngine { private final RecommendationDAO recommendationDAO; private final CourseDAO courseDAO; public RecommendationEngine() { this.recommendationDAO new RecommendationDAO(); this.courseDAO new CourseDAO(); } /** * 生成完整四年生涯规划方案 */ public MapString, Object generateCompletePlan(Student student, ListString interests) { MapString, Object report new HashMap(); String stuId student.getStuId(); String careerGoal student.getCareerGoal(); // 考研/考公/就业/创业 // 1. 保存兴趣与生涯目标 recommendationDAO.saveStudentInterests(stuId, interests, careerGoal); // 2. 学生基本信息 report.put(studentInfo, Map.of( stuId, stuId, stuName, student.getStuName(), careerGoal, careerGoal, interests, interests, semester, student.getSemester() )); // 3. 从数据库读取所有课程真实数据 ListCourse allCourseList courseDAO.getAllCourses(); MapString, ListCourse allCourses categorizeCourses(allCourseList); // 4. 生成必修课基础课表 MapInteger, ListCourse basePlan generateBasePlan(allCourses); // 5. 兴趣 生涯目标 双维度推荐选修课 ListCourse recommendedElectives recommendElectivesByCareerAndInterest( allCourses, interests, careerGoal); report.put(recommendedElectives, recommendedElectives); // 6. 智能分配选修课平衡学分 MapInteger, ListCourse finalPlan distributeElectives(basePlan, recommendedElectives); report.put(fourYearPlan, finalPlan); // 7. 学分统计 MapString, Object creditAnalysis calculateCredits(finalPlan); report.put(creditAnalysis, creditAnalysis); // 8. 毕业校验 MapString, Object graduationCheck checkGraduationRequirements(creditAnalysis); report.put(graduationCheck, graduationCheck); // 9. 每学期生涯规划建议核心功能 MapInteger, String careerTips generateCareerTips(careerGoal); report.put(careerTips, careerTips); return report; } /** * 课程分类从数据库读取 */ private MapString, ListCourse categorizeCourses(ListCourse all) { MapString, ListCourse map new HashMap(); map.put(generalRequired, filterByNature(all, 通识必修)); map.put(generalElective, filterByNature(all, 通识选修)); map.put(platformRequired, filterByNature(all, 学科平台必修)); map.put(majorRequired, filterByNature(all, 专业必修)); map.put(majorElective, filterByNature(all, 专业选修)); map.put(practice, filterByNature(all, 实践环节)); return map; } private ListCourse filterByNature(ListCourse list, String nature) { return list.stream() .filter(c - nature.equals(c.getNature())) .collect(Collectors.toList()); } /** * 生成必修课基础规划 */ private MapInteger, ListCourse generateBasePlan(MapString, ListCourse allCourses) { MapInteger, ListCourse plan new LinkedHashMap(); for (int i 1; i 8; i) plan.put(i, new ArrayList()); ListCourse required new ArrayList(); required.addAll(allCourses.get(generalRequired)); required.addAll(allCourses.get(platformRequired)); required.addAll(allCourses.get(majorRequired)); required.addAll(allCourses.get(practice)); for (Course c : required) { Integer sem c.getSuggestedSemester(); if (sem ! null sem 1 sem 8) { plan.get(sem).add(c); } } return plan; } /** * 【核心】按兴趣 生涯目标推荐 */ private ListCourse recommendElectivesByCareerAndInterest( MapString, ListCourse allCourses, ListString interests, String careerGoal) { ListCourse electives new ArrayList(); electives.addAll(allCourses.get(majorElective)); electives.addAll(allCourses.get(generalElective)); ListCourse result new ArrayList(); for (Course c : electives) { boolean matchInterest matchAnyTag(c.getInterestTags(), interests); boolean matchCareer careerGoal.equalsIgnoreCase(c.getCareerMatch()); if (matchInterest || matchCareer) { result.add(c); } } return result; } private boolean matchAnyTag(String tags, ListString interests) { if (tags null || interests.isEmpty()) return false; for (String i : interests) { if (tags.contains(i)) return true; } return false; } /** * 智能分配选修课 */ private MapInteger, ListCourse distributeElectives( MapInteger, ListCourse base, ListCourse electives) { MapInteger, ListCourse res new LinkedHashMap(); base.forEach((k, v) - res.put(k, new ArrayList(v))); MapInteger, Integer credits new HashMap(); for (int i 1; i 8; i) { credits.put(i, res.get(i).stream().mapToInt(Course::getCredit).sum()); } for (Course c : electives) { int target findBestSemester(credits); res.get(target).add(c); credits.put(target, credits.get(target) c.getCredit()); } return res; } private int findBestSemester(MapInteger, Integer credits) { int min Integer.MAX_VALUE; int sem 3; for (int i 3; i 6; i) { int c credits.getOrDefault(i, 0); if (c min) { min c; sem i; } } return sem; } /** * 学分统计 */ private MapString, Object calculateCredits(MapInteger, ListCourse plan) { MapString, Object m new HashMap(); double total 0, general 0, platform 0, major 0, practice 0; for (ListCourse list : plan.values()) { for (Course c : list) { int cr c.getCredit(); total cr; String cat c.getCategory(); if (通识教育.equals(cat)) general cr; else if (学科平台.equals(cat)) platform cr; else if (专业教育.equals(cat)) major cr; else if (课外环节.equals(cat)) practice cr; } } m.put(totalCredits, total); m.put(generalCredits, general); m.put(platformCredits, platform); m.put(majorCredits, major); m.put(practiceCredits, practice); return m; } /** * 毕业要求检查 */ private MapString, Object checkGraduationRequirements(MapString, Object credit) { MapString, Object check new HashMap(); double total (double) credit.get(totalCredits); boolean ok total 169.5; check.put(total, Map.of(req, 169.5, actual, total, pass, ok)); check.put(allPassed, ok); return check; } // 生涯规划建议你要的核心功能 private MapInteger, String generateCareerTips(String career) { MapInteger, String tips new LinkedHashMap(); if (career null) career 就业; switch (career) { case 考研: tips.put(1, 打好高数、英语基础准备词汇); tips.put(2, 开始英语真题确定目标专业); tips.put(3, 强化专业课关注目标院校信息); tips.put(4, 系统复习数学与专业课); tips.put(5, 全力备考刷真题、模拟卷); tips.put(6, 报名、现场确认、冲刺); tips.put(7, 初试→复试→录取); tips.put(8, 准备入学); break; case 考公: tips.put(1, 了解国考/省考学习行测基础); tips.put(2, 学习申论关注时政); tips.put(3, 刷题提升速度); tips.put(4, 参加模拟考试); tips.put(5, 针对性岗位筛选); tips.put(6, 冲刺刷题); tips.put(7, 参加考试); tips.put(8, 面试准备); break; case 就业: tips.put(1, 打好编程基础); tips.put(2, 学习数据结构、数据库); tips.put(3, 做小项目写简历); tips.put(4, 提升Java/Python技能); tips.put(5, 找实习); tips.put(6, 强化项目经验); tips.put(7, 秋招/春招); tips.put(8, 正式就业); break; default: tips.put(1, 打好基础); tips.put(2, 提升专业能力); tips.put(3, 探索方向); tips.put(4, 明确目标); tips.put(5, 强化实践); tips.put(6, 准备简历); tips.put(7, 求职/升学); tips.put(8, 顺利毕业); } return tips; } }package com.course.servlet; import com.course.dao.SelectionDAO; import com.course.model.Course; import com.course.util.JsonUtil; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.List; WebServlet(/myCourses) public class MyCourseServlet extends HttpServlet { private SelectionDAO selectionDAO new SelectionDAO(); Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType(application/json;charsetUTF-8); // 从session中获取登录用户信息 HttpSession session req.getSession(false); if (session null || session.getAttribute(stuId) null) { resp.setStatus(HttpServletResponse.SC_UNAUTHORIZED); resp.getWriter().write({\error\:\未登录\}); return; } String stuId (String) session.getAttribute(stuId); try { // 调用DAO查询已选课程 ListCourse courses selectionDAO.getSelectedCourses(stuId); // 转换为JSON返回 String json JsonUtil.toJsonArray(courses); resp.getWriter().write(json); } catch (Exception e) { e.printStackTrace(); resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); resp.getWriter().write({\error\:\服务器异常\}); } } }网站运行试用账号S001 123456S002 123456页面如下