关于后端:高校学生成绩信息管理系统的设计与实现

36次阅读

共计 13249 个字符,预计需要花费 34 分钟才能阅读完成。


  博主介绍:✌退职 Java 研发工程师、专一于程序设计、源码分享、技术交换、专一于 Java 技术畛域和毕业设计✌
舒适提醒:文末有 CSDN 平台官网提供的老师 Wechat / QQ 名片 :)

[援用
项目名称
援用
援用
高校学生问题信息管理系统的设计与实现
援用
援用
演示视频
援用
援用
高校学生问题信息管理系统的设计与实现_哔哩哔哩_bilibili](https://ym.maptoface.com/archives/59320)

零碎介绍

摘要:一个国家的教育行业的倒退状况反映了国家的技术人才储配状况,在我国教育事业始终都是出现回升式倒退的,因而学校的教学工作就是反馈教学质量的体现,其中对于学生问题的治理便成为了重中之重的点。将校园中所有的课程纳入学生问题治理之中便是本次零碎的设计根底设计。

高校学生问题信息管理系统是一种利用于高校教育治理畛域的信息化零碎,它能够无效地治理学生的个人信息、课程信息、问题信息等重要数据。本零碎采纳现代化的技术手段,包含数据库技术、网络技术、计算机编程技术等,实现对学生信息的疾速录入、查问、批改和统计分析。同时,零碎还能够主动生成各种模式的成绩单和报表,不便老师和学生对学习状况进行理解和剖析。该零碎能够极大地提高高校教育治理的效率和程度,为学生提供更好的学习体验和服务。

关键词:问题信息管理系统,SSM,MyBatis

3.2 零碎性能图

学生信息管理模块:该模块用于治理学生的个人信息,包含学号、姓名、性别、联系方式等,可能实现学生信息的疾速录入、查问和批改。

课程信息管理模块:该模块用于治理课程信息,包含课程编号、课程名称、授课老师等,可能不便老师和管理员对课程信息进行治理和保护。

问题信息管理模块:该模块用于治理学生的问题信息,包含平时成绩、期中问题、期末问题等,可能不便老师和管理员对问题信息进行治理和保护。

查问统计功能模块:该模块可能实现学生、老师和管理员对各种数据进行疾速查问和统计分析,如成绩排名、课程平均分等。

成绩单和报表生成模块:该模块可能主动生成各种模式的成绩单和报表,如学生集体成绩单、班级问题汇总表等,不便老师和学生进行学习状况的理解和剖析。

权限治理模块:该模块可能实现对系统中各种性能和数据的拜访权限进行治理,保证系统的平安和可靠性。零碎总性能图如图 3.1。

图 3.1 零碎性能图

3.3 零碎次要用例图以及性能需要

3.3.1 管理员用例剖析

管理员是高校学生问题信息管理系统的重要使用者,他们次要负责零碎的治理和保护,以下是管理员在应用零碎时的用例剖析:

1. 录入学生信息:管理员能够通过零碎的学生信息管理模块,录入新退学的学生信息,包含学号、姓名、性别、联系方式等。

2. 保护课程信息:管理员能够通过零碎的课程信息管理模块,保护各门课程的信息,包含课程编号、课程名称、授课老师等。

3. 录入问题信息:管理员能够通过零碎的问题信息管理模块,录入学生的各项问题信息,包含平时成绩、期中问题、期末问题等。

4. 查问统计数据:管理员能够通过零碎的查问统计功能模块,查问和统计各类数据,如学生人数、课程平均分、成绩排名等。

5. 生成成绩单和报表:管理员能够通过零碎的成绩单和报表生成模块,生成各种模式的成绩单和报表,如学生集体成绩单、班级问题汇总表等。

6. 管理权限设置:管理员能够通过零碎的权限治理模块,对系统中各种性能和数据的拜访权限进行治理和设置,保证系统的平安和可靠性。管理员用例图如下图 3.2 所示。

图 3.2 管理员用例图

3.3.2 老师用例剖析

老师次要能够通过以下两大性能来实现这一指标:学生列表和零碎设置。

学生列表性能使老师可能查看学生的根本信息,这有助于理解学生的学术背景和需要。此外,老师还能够通过此性能提交学生的问题,以便及时更新学生的学业体现。同时,零碎还反对将问题导出,让老师可能轻松地将学生问题整顿成报表,以便进一步剖析和评估。

在零碎设置方面,老师能够查看课程信息,以便更好地理解所教课程的相干内容和要求。同时,零碎还容许老师在课程完结后敞开课程,确保课程信息的实时准确性。

总之,高校学生问题信息管理系统为老师提供了一套实用的工具,帮忙他们高效地治理学生列表和课程信息,以确保教学质量和学生学术成绩的精确传递。通过这些性能,老师可能更好地理解学生的需要,为他们提供有针对性的教学反对。如下图 3.3 所示。

图 3.3 老师用例图

3.3.3 学生用例剖析

1. 查问集体问题:学生能够通过零碎的问题查问功能模块,查问集体的各项问题信息,包含平时成绩、期中问题、期末问题等。

2. 查问课程信息:学生能够通过零碎的课程查问功能模块,查问各门课程的信息,包含课程编号、课程名称、授课老师等。

3. 查问排名:学生能够通过零碎的查问统计功能模块,查问各门课程的排名状况,理解本人在班级和全校范畴内的成绩排名状况。

4. 生成成绩单和报表:学生能够通过零碎的成绩单和报表生成模块,生成各种模式的成绩单和报表,不便学生对本人的学习状况进行理解和剖析。

5. 反馈意见和倡议:学生能够通过零碎的反馈性能,向管理员反馈本人对系统的意见和倡议,以帮忙改良零碎的性能和性能。如下图 3.4 所示。

图 3.4 学生用例图

3.4 用例模型

高校学生问题信息管理系统为用户提供了便捷的性能和权限治理,满足管理员、老师和学生三类用户的需要。依据各用户角色的特点,零碎为他们调配了相应的根本权限,以实现对系统资源的高效利用和爱护。以下是各用户角色的根本权限和性能介绍:

1)管理员用户:

学生信息管理:管理员能够对学生信息进行增删改查,包含学生的根本信息、所选课程等。此外,管理员还能够为学生重置明码,确保学生账号的平安。

老师信息管理:管理员能够对老师信息进行增删改查,以及为老师重置明码。这有助于确保老师账户信息的准确性和安全性。

课程信息管理:管理员负责课程信息的增删改查。他们能够新开设课程,为课程调配老师,并确保课程设置合乎学校的教学要求。

问题报表治理:管理员能够查看学生的问题信息,并将其导出为报表。这有助于及时理解学生的学术体现,为学校的教学管理提供数据反对。

零碎设置:管理员能够设置老师和学生的菜单权限,以确保零碎性能的正当调配和应用。这有助于进步零碎的安全性和稳定性。

2)老师用户:

学生列表治理:老师能够查看所教课程的学生信息,并为学生提交问题。此外,老师还能够将学生的问题信息导出为报表,以便进行进一步的剖析和评估。

零碎设置:老师能够查看课程信息,并在课程完结后敞开课程。这有助于确保课程信息的实时准确性。

3)学生用户:

课程管理:学生能够查看课程信息,并依据本人的趣味和需要进行选课。这有助于学生合理安排学习打算,进步学习效果。

问题治理:学生能够查看本人的问题信息,并将其打印进去。这有助于学生理解本人的学术体现,及时发现有余并调整学习办法。

总结:高校学生问题信息管理系统为管理员、老师和学生提供了丰盛的性能和权限,以便满足不同用户的需要。通过正当调配用户权限和实现性能模块化,零碎可能高效地反对学校的教学管理,进步教育品质。

 

第四章 零碎设计

4.1 功能模块设计

根据上述上文中来剖析设计的功能模块,零碎分为三个用户角色管理员、老师、学生,管理员次要包含学生信息模块、老师信息模块、课程信息模块、问题报表模块、零碎设置模块,老师次要包含登录注册、个人信息模块、我的课程模块、学生列表模块,学生次要包含登录、注册、个人信息模块、课程模块、问题模块。通过功能分析三个角色性能构造如图 4.1、4.2、4.3 所示的模块结构图。

图 4.1 管理员功能模块构造

图 4.2 老师功能模块构造

图 4.3 学生功能模块构造

如图所示,在该零碎中老师的模块大多都是次要开发局部,次要是针对根底信息的增删改查和考试成绩的更新和查看,学生的次要模块是集体根底信息的批改还要考试后果的查看和搜寻,保护人员即可对所有人的根底信息进行批改,还有课程的增删改查,以及零碎的根本保护和治理。

4.2 用户流程设计

用户须要注册并登录零碎。注册时须要填写相干个人信息,如姓名、学号、班级等,并设置用户名和明码。胜利注册后,用户能够应用用户名和明码登录零碎。

在登录后,用户会看到零碎主界面。主界面能够分为老师端和学生端。老师端性能包含录入问题、批改问题、查问问题和统计问题等;学生端性能次要为查看问题和查看问题统计。管理员端则能够治理所有用户的信息和问题数据。

老师在录入问题时,能够抉择相应的课程和班级,批量或单个录入学生问题。在批改问题时,老师能够通过搜寻学生姓名或学号来疾速找到相应的问题信息,而后进行批改。

学生在查看问题时,能够抉择学期和课程进行查问,零碎会显示出相应的问题信息。此外,学生还能够查看问题统计,如平均分、最高分和最低分等。如下图 4.4 所示。

图 4.4 管理员的流程模块设计

管理员在管理系统时,能够进行用户信息管理、问题信息管理和零碎设置等操作。用户信息管理包含增加、删除和批改用户信息;问题信息管理则包含问题的录入、批改和删除;零碎设置次要包含零碎更新和保护等。如下图 4.5 所示

图 4.5 老师的流程模块设计

如上图所示老师次要负责的是个人信息根底信息的批改,课程的安顿,其中课程的安顿蕴含问题的查问和对应学生的列表及其的问题打分情况。在页面设计上也是简洁慷慨,让所有老师都能明了每一个性能所在,疾速的上手并开始操作,并且数据实时更新到指定的学生信息上。如下图 4.6 所示。

图 4.6 学生的流程模块设计

如图中场景描了学生模块次要流程,蕴含查问指定科目的问题,或者查看最新数据的变动,还能够对本人个人信息进行边改。在学生们登录的时候,账号个别默认是学生证号码,明码个别是后六位,在个人信息页面能够进行明码的变更。

​编辑

​编辑

​编辑

​编辑

​编辑

​编辑

​编辑

​编辑

​编辑

环境须要

1. 运行环境:最好是 java jdk 1.8,咱们在这个平台上运行的。其余版本实践上也能够。
2.IDE 环境:IDEA,Eclipse,Myeclipse 都能够。举荐 IDEA;
3.tomcat 环境:Tomcat 7.x,8.x,9.x 版本均可
4. 硬件环境:windows 7/8/10 1G 内存以上;或者 Mac OS;
5. 数据库:MySql 5.7 版本;
6. 是否 Maven 我的项目:否;

技术栈

  1. 后端:Spring+SpringMVC+Mybatis
  2. 前端:JSP+CSS+JavaScript+jQuery

应用阐明

  1. 应用 Navicat 或者其它工具,在 mysql 中创立对应名称的数据库,并导入我的项目的 sql 文件;
  2. 应用 IDEA/Eclipse/MyEclipse 导入我的项目,Eclipse/MyEclipse 导入时,若为 maven 我的项目请抉择 maven;
    若为 maven 我的项目,导入胜利后请执行 maven clean;maven install 命令,而后运行;
  3. 将我的项目中 springmvc-servlet.xml 配置文件中的数据库配置改为本人的配置;
  4. 运行我的项目,在浏览器中输出 http://localhost:8080/ 登录

运行截图

​编辑

​编辑

​编辑

​编辑

​编辑

​编辑

​编辑

​编辑

​编辑

​编辑

​编辑

​编辑

​编辑

​编辑

​编辑

 用户管理控制层:

package com.houserss.controller;

import javax.servlet.http.HttpSession;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.houserss.common.Const;
import com.houserss.common.Const.Role;
import com.houserss.common.ServerResponse;
import com.houserss.pojo.User;
import com.houserss.service.IUserService;
import com.houserss.service.impl.UserServiceImpl;
import com.houserss.util.MD5Util;
import com.houserss.util.TimeUtils;
import com.houserss.vo.DeleteHouseVo;
import com.houserss.vo.PageInfoVo;

/**

  • Created by admin
    */

@Controller
@RequestMapping(“/user/”)
public class UserController {

@Autowired
private IUserService iUserService;

/**
 * 用户登录
 * @param username
 * @param password
 * @param session
 * @return
 */
@RequestMapping(value = "login.do",method = RequestMethod.POST)
@ResponseBody
public ServerResponse<User> login(User user,String uvcode, HttpSession session){String code = (String)session.getAttribute("validationCode");
    if(StringUtils.isNotBlank(code)) {if(!code.equalsIgnoreCase(uvcode)) {return ServerResponse.createByErrorMessage("验证码不正确");
        }
    }
    ServerResponse<User> response = iUserService.login(user.getUsername(),user.getPassword());
    if(response.isSuccess()){session.setAttribute(Const.CURRENT_USER,response.getData());
    }
    return response;
}



}

管理员管理控制层:

package com.sxl.controller.admin;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.sxl.controller.MyController;

@Controller(“adminController”)
@RequestMapping(value = “/admin”)
public class AdminController extends MyController {



@RequestMapping(value = "/index")
public String frame(Model model, HttpServletRequest request)throws Exception {return "/admin/index";}

@RequestMapping(value = "/main")
public String main(Model model, HttpServletRequest request)throws Exception {return "/admin/main";}

@RequestMapping(value = "/tj1")
public String tj1(Model model, HttpServletRequest request)throws Exception {String sql="select DATE_FORMAT(insertDate,'%Y-%m-%d') dates,sum(allPrice) price from t_order order by DATE_FORMAT(insertDate,'%Y-%m-%d')  desc";
    List<Map> list = db.queryForList(sql);
    model.addAttribute("list", list);
    System.out.println(list);
    return "/admin/tj/tj1";
}


@RequestMapping(value = "/password")
public String password(Model model, HttpServletRequest request)throws Exception {return "/admin/password";}


@RequestMapping(value = "/changePassword")
public ResponseEntity<String> loginSave(Model model,HttpServletRequest request,String oldPassword,String newPassword) throws Exception {Map admin = getAdmin(request);
    if(oldPassword.equals(admin.get("password").toString())){
        String sql="update t_admin set password=? where id=?";
        db.update(sql, new Object[]{newPassword,admin.get("id")});
        return renderData(true,"1",null);
    }else{return renderData(false,"1",null);
    }
}

}

批改明码业务逻辑:

package com.sxl.controller.admin;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.sxl.controller.MyController;

@Controller(“userController”)
@RequestMapping(value = “/user”)
public class UserController extends MyController {



@RequestMapping(value = "/index")
public String frame(Model model, HttpServletRequest request)throws Exception {return "/user/index";}

@RequestMapping(value = "/main")
public String main(Model model, HttpServletRequest request)throws Exception {return "/user/main";}


@RequestMapping(value = "/password")
public String password(Model model, HttpServletRequest request)throws Exception {return "/user/password";}


@RequestMapping(value = "/changePassword")
public ResponseEntity<String> loginSave(Model model,HttpServletRequest request,String oldPassword,String newPassword) throws Exception {Map user = getUser(request);
    if(oldPassword.equals(user.get("password").toString())){
        String sql="update t_user set password=? where id=?";
        db.update(sql, new Object[]{newPassword,user.get("id")});
        return renderData(true,"1",null);
    }else{return renderData(false,"1",null);
    }
}
@RequestMapping(value = "/mine")
public String mine(Model model, HttpServletRequest request)throws Exception {

Map user =getUser(request);Map map = db.queryForMap(“select * from t_user where id=?”,new Object[]{user.get(“id”)});model.addAttribute(“map”, map); return “/user/mine”;

}



@RequestMapping(value = "/mineSave")
public ResponseEntity<String> mineSave(Model model,HttpServletRequest request,Long id
    ,String username,String password,String name,String gh,String mobile) throws Exception{
    int result = 0;
        String sql="update t_user set name=?,gh=?,mobile=? where id=?";
        result = db.update(sql, new Object[]{name,gh,mobile,id});
    if(result==1){return renderData(true,"操作胜利",null);
    }else{return renderData(false,"操作失败",null);
    }
}
}

通用治理模块:

package com.sxl.controller;

import java.nio.charset.Charset;
import java.util.Locale;
import java.util.ResourceBundle;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;

import com.sxl.util.JacksonJsonUtil;
import com.sxl.util.StringUtil;
import com.sxl.util.SystemProperties;

public class BaseController {

public static final Long EXPIRES_IN = 1000 * 3600 * 24 * 1L;// 1 天

@Autowired
private SystemProperties systemProperties;

/**
 * 取得配置文件内容
 */
public String getConfig(String key) {return systemProperties.getProperties(key);
}

/**
 * 返回服务器地址 like http://192.168.1.1:8441/UUBean/
 */
public String getHostUrl(HttpServletRequest request) {String hostName = request.getServerName();
    Integer hostPort = request.getServerPort();
    String path = request.getContextPath();

    if (hostPort == 80) {return "http://" + hostName + path + "/";} else {return "http://" + hostName + ":" + hostPort + path + "/";}
}

/***
 * 获取以后的 website 门路 String
 */
public static String getWebSite(HttpServletRequest request) {String returnUrl = request.getScheme() + "://"
            + request.getServerName();

    if (request.getServerPort() != 80) {returnUrl += ":" + request.getServerPort();
    }

    returnUrl += request.getContextPath();

    return returnUrl;
}



/**
 * 初始化 HTTP 头.
 * 
 * @return HttpHeaders
 */
public HttpHeaders initHttpHeaders() {HttpHeaders headers = new HttpHeaders();
    MediaType mediaType = new MediaType("text", "html",
            Charset.forName("utf-8"));
    headers.setContentType(mediaType);
    return headers;
}

/**
 * 返回 信息数据
 * 
 * @param status
 * @param msg
 * @return
 */
public ResponseEntity<String> renderMsg(Boolean status, String msg) {if (StringUtils.isEmpty(msg)) {msg = "";}
    String str = "{\"status\":\"" + status + "\",\"msg\":\""+ msg +"\"}";
    ResponseEntity<String> responseEntity = new ResponseEntity<String>(str,
            initHttpHeaders(), HttpStatus.OK);
    return responseEntity;
}

/**
 * 返回 obj 数据
 * 
 * @param status
 * @param msg
 * @param obj
 * @return
 */
public ResponseEntity<String> renderData(Boolean status, String msg,
        Object obj) {if (StringUtils.isEmpty(msg)) {msg = "";}
    StringBuffer sb = new StringBuffer();
    sb.append("{");
    sb.append("\"status\":\"" + status + "\",\"msg\":\""+ msg +"\",");
    sb.append("\"data\":" + JacksonJsonUtil.toJson(obj) + "");
    sb.append("}");

    ResponseEntity<String> responseEntity = new ResponseEntity<String>(sb.toString(), initHttpHeaders(), HttpStatus.OK);
    return responseEntity;
}


/***
 * 获取 IP(如果是多级代理,则失去的是一串 IP 值)*/
public static String getIpAddr(HttpServletRequest request) {String ip = request.getHeader("x-forwarded-for");
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("Proxy-Client-IP");
    }

    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("WL-Proxy-Client-IP");
    }

    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getRemoteAddr();
    }

    if (ip != null && ip.length() > 0) {String[] ips = ip.split(",");
        for (int i = 0; i < ips.length; i++) {if (!"unknown".equalsIgnoreCase(ips[i])) {ip = ips[i];
                break;
            }
        }
    }

    return ip;
}

/**
 * 国际化取得语言内容
 * 
 * @param key
 *            语言 key
 * @param args
 * @param argsSplit
 * @param defaultMessage
 * @param locale
 * @return
 */
public static String getLanguage(String key, String args, String argsSplit,
        String defaultMessage, String locale) {
    String language = "zh";
    String contry = "cn";
    String returnValue = defaultMessage;

    if (!StringUtil.isEmpty(locale)) {
        try {String[] localeArray = locale.split("_");
            language = localeArray[0];
            contry = localeArray[1];
        } catch (Exception e) {}}

    try {
        ResourceBundle resource = ResourceBundle.getBundle("lang.resource",
                new Locale(language, contry));
        returnValue = resource.getString(key);
        if (!StringUtil.isEmpty(args)) {String[] argsArray = args.split(argsSplit);
            for (int i = 0; i < argsArray.length; i++) {returnValue = returnValue.replace("{" + i + "}",
                        argsArray[i]);
            }
        }
    } catch (Exception e) { }

    return returnValue;
}

}

正文完
 0