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

B站影视 欧美电影 2025-03-25 09:42 1

摘要:if(!po.isEmpty && his.getLat!=null &&his.getLng!=null){

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

具体功能如下

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

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

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

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

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

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

管理员拥有以下功能:

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

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

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

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

用到的技术

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

前端:vue等。

学校推荐算法代码

public List dealData(List 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 descendingComparator = new Comparator {
@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 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;

return 1000;
}

}

/**
* 查询一条数据
*
* @param nmExamHistory 查询条件
* @return 对象
*/
public ResponseResult queryNmExamHistoryObject(NmExamHistory nmExamHistory) {
QueryWrapper queryWrapper = new QueryWrapper(nmExamHistory);
return new ResponseResult(ResponseCode.SUCCESS,"查询成功",nmExamHistoryMapper.selectOne(queryWrapper));
}

/**
* 新增一条数据
*
* @param nmExamHistory 新增数据实体类
* @return 新增对象
*/
public ResponseResult 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(ResponseCode.SUCCESS,"新增成功",nmExamHistory);
}

/**
* 修改一条数据
*
* @param nmExamHistory 修改数据实体类
* @return 修改后对象
*/
public ResponseResult editNmExamHistory(NmExamHistory nmExamHistory) {

nmExamHistoryMapper.updateById(nmExamHistory);
return new ResponseResult(ResponseCode.SUCCESS,"修改成功",nmExamHistory);
}

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

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

for(int i=0;i List> 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);

e.printStackTrace;
//return CommonUtils.ResBuild(true,"导入失败");
}
return null;
}
public void dealData(List> dataList,Integer type){
StringBuilder msg = new StringBuilder("导入完成");
for (int i=1; 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);

e.printStackTrace;
}
}

}

}

源码:github.com/KakarottoCui/SpringBootVueGaoKao

来源:平常生活观察记录

相关推荐