基于Java,SpringBoot和Vue高考志愿填报辅助系统设计

摘要

本文聚焦于基于SpringBoot和Vue框架的高考志愿填报辅助系统的设计与研究。高考志愿填报作为考生人生重要抉择,关乎其未来发展方向,然而当前考生常因信息获取不全面、院校专业了解不足等面临诸多困扰。该系统设计旨在借助SpringBoot的高效后端开发能力和Vue的灵活前端交互优势,为考生提供一站式志愿填报辅助服务。系统涵盖了院校信息查询、专业详情介绍、录取分数线分析、志愿智能推荐等核心功能模块。通过对海量院校和专业数据的整合与分析,结合科学的算法模型,能够根据考生的高考成绩、兴趣爱好、地域偏好等个性化因素,为其精准推荐合适的院校和专业组合。同时,系统采用前后端分离架构,保障了系统的可扩展性、稳定性和用户体验的流畅性。经测试,该系统在数据准确性、功能完整性和用户操作便捷性等方面表现良好,能够有效帮助考生减轻志愿填报的压力,提高志愿填报的合理性和成功率,具有较高的实用价值和推广意义。

具体功能如下

学生用户拥有的功能如下:

注册、登录:未注册用户可以注册,有了账号后可以登录网站;

学校推荐:输入高考分数,系统给出符合条件的也就是该分数所能报考的院校信息。(使用加权平均算法);

专业推荐:输入各科成绩(根据考生强项给出推荐专业);

职业专业特点测评:提供MBIT测试,做测试之后给出类型、推荐职业、该职业所对应的专业信息;

高考志愿评估:输入考生已填写的志愿信息,系统做出一个综合评估,给出意见。(如:考生报考一个学校能被录取的可能性建议,使用豆包大模型的API。)

管理员拥有以下功能:

学校管理:管理员可以对学校信息进行管理;

专业管理:管理员可以对专业信息进行管理;

志愿管理:管理员可以对志愿信息进行管理,学生用户可以选择填报志愿,并由管理员审核;

用户管理:管理员可以对学生用户的信息进行管理;

用到的技术

后端:java语言,SpringBoot框架,MySQL数据库,Maven依赖管理等;

前端:vue等。

学校推荐算法代码

java 复制代码
public List<NmExamHistory> dealData(List<NmExamHistory> all,SysUser user){
        //加权平均规则
        //1 本科1批 200 2批120 3批60 专科 20 占据 0.3
        //2 距离 50内 100 200内 80 500内 50 1000内 20 1000+ 10 占0.15
        //3 211加成 160 985加成 200 占 0.3
        //4 录取平均分占0.25
        for(NmExamHistory his:all){
            his.setScore(oneCount(his,user));
        }
        // 自定义 Comparator 实现降序排序
        Comparator<NmExamHistory> descendingComparator = new Comparator<NmExamHistory>() {
            @Override
            public int compare(NmExamHistory b2, NmExamHistory b1) {
                b2.setScore(b2.getScore()==null?0d:b2.getScore());
                b1.setScore(b1.getScore()==null?0d:b1.getScore());
                return Double.compare(b1.getScore(),b2.getScore());
            }
        };
        Collections.sort(all, descendingComparator);
        return all;
    }

    public double oneCount(NmExamHistory his,SysUser user) {
        double count = his.getAvgScore()*0.25;
        if(his.getIs211() == 1){
            count += 160*0.3;
        } else if (his.getIs985() == 1) {
            count += 200*0.3;
        }

        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq("city",user.getCity());
        List<NmExamAreaCoordinates> po = nmExamAreaCoordinatesMapper.selectList(queryWrapper);
        double lat = 0l;
        double lng = 0l;
        if(!po.isEmpty() && his.getLat()!=null &&his.getLng()!=null){
            lat = po.get(0).getLat();
            lng = po.get(0).getLng();
            double dist = 1000d;
            try{
                dist = calculateDistance(lat,lng,his.getLat(), his.getLng());
            }catch (Exception e){
                dist = 1000d;
            }
            if(dist <=50){
                dist = 100d;
            }else if(dist <= 200){
                dist =  80d;
            }else if(dist <= 500){
                dist =  50d;
            }else if(dist <= 1000){
                dist =  20d;
            }else{
                dist =  10d;
            }
            count += dist*0.15;
        }
        double sc = 0;
        if(his.getType() == 0){
            sc = 20;
        }
        if(his.getType() == 1){
            sc = 60;
        }
        if(his.getType() == 2){
            sc = 120;
        }
        if(his.getType() == 3){
            sc = 100;
        }
        count += sc*0.3;
        if(his.getLat()!=null&&his.getLng()!=null){
            his.setDist(calculateDistance(lat,lng,his.getLat(),his.getLng()));
        }
        return count;
    }

    public static double calculateDistance(double lat1, double lon1, double lat2, double lon2) {
        try{
            // 将纬度和经度从度转换为弧度
            double lat1Rad = Math.toRadians(lat1);
            double lon1Rad = Math.toRadians(lon1);
            double lat2Rad = Math.toRadians(lat2);
            double lon2Rad = Math.toRadians(lon2);

            // 计算纬度和经度的差值
            double dLat = lat2Rad - lat1Rad;
            double dLon = lon2Rad - lon1Rad;

            // 使用 Haversine 公式计算距离
            double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
                    Math.cos(lat1Rad) * Math.cos(lat2Rad) *
                            Math.sin(dLon / 2) * Math.sin(dLon / 2);
            double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

            // 计算最终距离 6371为地球半径
            return 6371 * c;
        }catch (Exception e){
            return 1000;
        }

    }
    
    /**
     * 查询一条数据
     *
     * @param nmExamHistory 查询条件
     * @return 对象
     */
    public ResponseResult<Object> queryNmExamHistoryObject(NmExamHistory nmExamHistory) {
        QueryWrapper<NmExamHistory> queryWrapper = new QueryWrapper<NmExamHistory>(nmExamHistory);
        return new ResponseResult<Object>(ResponseCode.SUCCESS,"查询成功",nmExamHistoryMapper.selectOne(queryWrapper));
    }
    
    /**
     * 新增一条数据
     *
     * @param nmExamHistory 新增数据实体类
     * @return 新增对象
     */
    public ResponseResult<Object> addNmExamHistory(NmExamHistory nmExamHistory) {
        int uid = SessionUtils.getUserId();
        nmExamHistory.setId(null);
        nmExamHistory.setValidFlag(1);
        nmExamHistory.setCreateTime(new Date());
        nmExamHistory.setUpdateTime(new Date());
        nmExamHistory.setCreater(uid);
        nmExamHistory.setUpdater(uid);
        nmExamHistoryMapper.insert(nmExamHistory);
        return new ResponseResult<Object>(ResponseCode.SUCCESS,"新增成功",nmExamHistory);
    }
    
    /**
     * 修改一条数据
     *
     * @param nmExamHistory 修改数据实体类
     * @return 修改后对象
     */
    public ResponseResult<Object> editNmExamHistory(NmExamHistory nmExamHistory) {
        int uid = SessionUtils.getUserId();
        nmExamHistory.setUpdateTime(new Date());
        nmExamHistory.setUpdater(uid);
        nmExamHistoryMapper.updateById(nmExamHistory);
        return new ResponseResult<Object>(ResponseCode.SUCCESS,"修改成功",nmExamHistory);
    }

    public ResponseResult<Object> dealData(MultipartFile file){
        try{
            String fileName = file.getOriginalFilename();

            int typ = 4;//专科,本科 1 2 3


            for(int i=0;i<typ;i++){
                List<List<Object>> dataList = ExcelUtil.readExcelSheet(file.getInputStream(),fileName,i);

                int flag = i;
                if(i == 1 ){
                    flag =3;
                }
                if(i == 2 ){
                    flag =2;
                }
                if(i == 3 ){
                    flag = 1;
                }
                dealData(dataList,flag);
            }

            //return CommonUtils.ResBuild(true,msg);
        }catch (Exception e){
            e.printStackTrace();
            //return CommonUtils.ResBuild(true,"导入失败");
        }
        return null;
    }
    public void dealData(List<List<Object>> dataList,Integer type){
        StringBuilder msg = new StringBuilder("导入完成");
        for (int i=1; i<dataList.size(); i++){
            JSONArray data = new JSONArray(dataList.get(i));
            String uName = data.getString(5);
            int year = 2024;
            for(int k=0;k<5;k++){
                try{

                    if("--".equals(data.getString(6+k*3)) || "-".equals(data.getString(6+k*3))){
                        continue;
                    }

                    if("--".equals(data.getString(7+k*3)) || "-".equals(data.getString(7+k*3))){
                        continue;
                    }

                    if("--".equals(data.getString(8+k*3)) || "-".equals(data.getString(8+k*3))){
                        continue;
                    }

                    Float minScore = data.getFloat(6+k*3);
                    Integer minIndex = data.getInteger(7+k*3);
                    Float avgScore = data.getFloat(8+k*3);
                    editNmExamHistory(year-k,minScore,minIndex,avgScore,uName,type);
                }catch (Exception e){
                    e.printStackTrace();
                }
            }

        }

    }

演示视频

Java,SpringBoot和Vue高考志愿填报辅助系统

相关推荐
书中自有妍如玉9 分钟前
.net 使用MQTT订阅消息
java·前端·.net
风铃儿~35 分钟前
Spring AI 入门:Java 开发者的生成式 AI 实践之路
java·人工智能·spring
斯普信专业组40 分钟前
Tomcat全方位监控实施方案指南
java·tomcat
忆雾屿1 小时前
云原生时代 Kafka 深度实践:06原理剖析与源码解读
java·后端·云原生·kafka
武昌库里写JAVA1 小时前
iview Switch Tabs TabPane 使用提示Maximum call stack size exceeded堆栈溢出
java·开发语言·spring boot·学习·课程设计
ai产品老杨1 小时前
减少交通拥堵、提高效率、改善交通安全的智慧交通开源了。
前端·vue.js·算法·ecmascript·音视频
gaoliheng0061 小时前
Redis看门狗机制
java·数据库·redis
我是唐青枫1 小时前
.NET AOT 详解
java·服务器·.net
小白杨树树1 小时前
【WebSocket】SpringBoot项目中使用WebSocket
spring boot·websocket·网络协议
Su米苏2 小时前
Axios请求超时重发机制
java