(java毕业设计)学生平时成绩管理系统(附源码+论文)

本文介绍了一个基于Java和MySQL的学生成绩管理系统,该系统为学生、教师和管理员提供不同功能,包括账户管理、成绩查询、作业提交等。系统采用B/S架构,分为学生、教师和管理员三个模块,实现了数据的增删改查。此外,文章还讨论了数据库设计和系统的登录实现,并给出了部分核心代码示例。
摘要由CSDN通过智能技术生成

大家好!我是岛上程序猿,感谢您阅读本文,欢迎一键三连哦。

💞当前专栏:Java毕业设计

精彩专栏推荐👇🏻👇🏻👇🏻

🎀 安卓app毕业设计
🌎微信小程序毕业设计

一、项目简介

随着计算机技术的飞速发展和高等教育体制改革的不断深入,传统教育管理方法、手段以及工作效率已不能适应新的发展需要,无法很好地完成教学管理工作。提高教学管理水平的主要途径是更新管理者的思想,增强对管理活动的科学认识。基于Java与MySQL数据库技术建立一个学生成绩管理系统该系统为管理员、学生和教师提供了查询、修改、增加记录、删除等功能,功能比较落齐全,基本上能满足学校教务要求。

二、系统设计

2.1软件功能模块设计

本研究设计的学生平时成绩管理系统是基于B/S架构,按照使用对象分为学生模块、老师模块和管理员模块,针对不同对象设计不同的页面和功能。
(1)学生
该模块供大学生群体使用,大学生提供系统注册、登陆、个人信息修改等账户及登陆功能,可以查看下载老师发布的学习资料、编辑上传个人作业、查看老师作业评语以及成绩查询;
(2)老师
该模块供老师使用,老师提供系统注册、登陆、个人信息修改等账户及登陆功能,并可以编辑发布学习资料,对学生上传的作业进行审核、批注,上传学生成绩等;
(3)管理员模块
管理员使用管理员账户登陆系统,拥有系统最高权限,可以对系统数据进行管理和维护,包括编辑发布系统公告、查看老师信息、学生信息、成绩信息等,并可以图形化的查看上述数据信息。

2.2数据库设计

数据库是软件工程、信息科学的重要组成部分,是IT软件数据存储、处理和分析的载体,占据信息管理系统和平台和核心地位。数据库技术不仅仅提供了数据的增删改查功能,还解决了IT技术数据处理过程中大量数据如何进行高效组织,快速存储,减少冗余,数据共享,数据安全,有效检索和处理数据库系统中的数据等等问题
本系统中数据实体主要由老师、学生信息、课程信息等构成。根据E-R模型,对项目涉及的数据及类型进行详细分析后,建立了包括用户信息、课程信息等的逻辑数据结构

三、系统项目部分截图

3.1用户登陆的设计与实现

用户通过系统提供的注册、登陆功能,实现使用其它核心功能的目的。应用逻辑为用户点击进入系统,选择登陆类型是学生、老师或者管理员,管理员使用默认Admin账户而无需注册。
选择类型后,已注册用户输入账户和密码进行用户登陆;新用户点击“注册”按钮进行用户注册,注册后通过用户名、密码实现登陆。
注册时用户编写账户、密码等信息,并编辑密码并进行二次确认,如果用户名合法且两次密码一致,则注册成功,用户注册信息写入数据库进行保存。
登录模块,用户输入用户名和密码后,由系统调用数据库相关信息,与用户输入的信息进行比较,如果结果一致,则认定为合法用户,登录成功。
相关业务流程图如下所示:在这里插入图片描述

3.2学生界面及功能

学生成功登录系统后,可以查看系统公告、编辑并提交作业、下载老师发布的学习资料并评论。具体实现效果如下图所示:在这里插入图片描述

3.3学生界面及功能

学生成功登录系统后,可以查看系统公告、编辑并提交作业、下载老师发布的学习资料并评论。具体实现效果如下图所示:在这里插入图片描述

3.4管理员后台

后台管理针对管理系统管理,主要实现对成绩的管理、学生的管理和老师的管理。在这里插入图片描述

四、论文目录

1.绪论 6
1.1研究背景及意义 6
1.2 国内外发展情况 7
1.2.1 国内研究现状 7
1.2.2 国外研究现状 8
1.3小结 9
1.4论文结构 9
2.项目可行性分析 11
2.1系统分析的方法 11
2.2系统可行性分析 11
2.2.1 技术可行性 12
2.2.2 经济可行性 13
2.2.3 操作可行性 13
2.3系统需求分析 14
2.3.1功能性需求分析 14
2.3.2非功能性需求分析 15
3.相关技术简介 16
3.1JAVA程序语言 16
3.1.1 Java简介 16
3.1.2 Java主要特性 17
3.2SSM框架 21
3.3. B/S架构 22
3.4 Tomcat服务器 22
3.5数据库 23
4.系统设计实现 25
4.1 开发环境搭建 26
4.2 系统功能设计 30
4.3数据结构设计 30
4.4系统详细实现 32
4.4.1 用户登陆的设计与实现 32
4.4.2学生界面及功能 34
4.4.3教师界面及功能 34
4.4.5管理员后台 36
5.软件测试 37
5.1软件测试的目的 38
5.2 软件测试的常用方式 38
5.2.1静态测试和动态测试 38
5.2.2黑盒测试、白盒测试和灰盒测试 39
5.2.4手动测试和自动化测试 40
5.3测试用例 40
5.4测试结果 41
6.研究总结 41
参考文献 43
致 谢 44

五、部分核心代码

4.1 账户部分

package com.example.controller;

import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.example.common.Result;
import com.example.common.ResultCode;
import com.example.entity.Account;
import com.example.entity.AuthorityInfo;
import com.example.exception.CustomException;
import com.example.entity.TeacherInfo;
import com.example.entity.StudentInfo;

import com.example.service.TeacherInfoService;
import com.example.service.StudentInfoService;

import org.springframework.web.bind.annotation.*;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import cn.hutool.json.JSONUtil;

import java.util.*;
import java.util.stream.Collectors;

@RestController
public class AccountController {

    @Value("${authority.info}")
    private String authorityStr;

	@Resource
	private TeacherInfoService teacherInfoService;
	@Resource
	private StudentInfoService studentInfoService;


    @PostMapping("/login")
    public Result<Account> login(@RequestBody Account account, HttpServletRequest request) {
        if (StrUtil.isBlank(account.getName()) || StrUtil.isBlank(account.getPassword()) || account.getLevel() == null) {
            throw new CustomException(ResultCode.PARAM_LOST_ERROR);
        }
        Integer level = account.getLevel();
        Account login = new Account();
		if (1 == level) {
			login = teacherInfoService.login(account.getName(), account.getPassword());
		}
		if (2 == level) {
			login = studentInfoService.login(account.getName(), account.getPassword());
		}

        request.getSession().setAttribute("user", login);
        return Result.success(login);
    }

    @PostMapping("/register")
    public Result<Account> register(@RequestBody Account account) {
        Integer level = account.getLevel();
        Account login = new Account();
		if (1 == level) {
			TeacherInfo info = new TeacherInfo();
			BeanUtils.copyProperties(account, info);
			login = teacherInfoService.add(info);
		}
		if (2 == level) {
			StudentInfo info = new StudentInfo();
			BeanUtils.copyProperties(account, info);
			login = studentInfoService.add(info);
		}

        return Result.success(login);
    }

    @GetMapping("/logout")
    public Result logout(HttpServletRequest request) {
        request.getSession().setAttribute("user", null);
        return Result.success();
    }

    @GetMapping("/auth")
    public Result getAuth(HttpServletRequest request) {
        Object user = request.getSession().getAttribute("user");
        if(user == null) {
            return Result.error("401", "未登录");
        }
        return Result.success(user);
    }

    @GetMapping("/getAccountInfo")
    public Result<Object> getAccountInfo(HttpServletRequest request) {
        Account account = (Account) request.getSession().getAttribute("user");
        if (account == null) {
            return Result.success(new Object());
        }
        Integer level = account.getLevel();
		if (1 == level) {
			return Result.success(teacherInfoService.findById(account.getId()));
		}
		if (2 == level) {
			return Result.success(studentInfoService.findById(account.getId()));
		}

        return Result.success(new Object());
    }

    @GetMapping("/getSession")
    public Result<Map<String, String>> getSession(HttpServletRequest request) {
        Account account = (Account) request.getSession().getAttribute("user");
        if (account == null) {
            return Result.success(new HashMap<>(1));
        }
        Map<String, String> map = new HashMap<>(1);
        map.put("username", account.getName());
        return Result.success(map);
    }

    @GetMapping("/getAuthority")
    public Result<List<AuthorityInfo>> getAuthorityInfo() {
        List<AuthorityInfo> authorityInfoList = JSONUtil.toList(JSONUtil.parseArray(authorityStr), AuthorityInfo.class);
        return Result.success(authorityInfoList);
    }

    /**
    * 获取当前用户所能看到的模块信息
    * @param request
    * @return
    */
    @GetMapping("/authority")
    public Result<List<Integer>> getAuthorityInfo(HttpServletRequest request) {
        Account user = (Account) request.getSession().getAttribute("user");
        if (user == null) {
            return Result.success(new ArrayList<>());
        }
        JSONArray objects = JSONUtil.parseArray(authorityStr);
        for (Object object : objects) {
            JSONObject jsonObject = (JSONObject) object;
            if (user.getLevel().equals(jsonObject.getInt("level"))) {
                JSONArray array = JSONUtil.parseArray(jsonObject.getStr("models"));
                List<Integer> modelIdList = array.stream().map((o -> {
                    JSONObject obj = (JSONObject) o;
                    return obj.getInt("modelId");
                    })).collect(Collectors.toList());
                return Result.success(modelIdList);
            }
        }
        return Result.success(new ArrayList<>());
    }

    @GetMapping("/permission/{modelId}")
    public Result<List<Integer>> getPermission(@PathVariable Integer modelId, HttpServletRequest request) {
        List<AuthorityInfo> authorityInfoList = JSONUtil.toList(JSONUtil.parseArray(authorityStr), AuthorityInfo.class);
        Account user = (Account) request.getSession().getAttribute("user");
        if (user == null) {
            return Result.success(new ArrayList<>());
        }
        Optional<AuthorityInfo> optional = authorityInfoList.stream().filter(x -> x.getLevel().equals(user.getLevel())).findFirst();
        if (optional.isPresent()) {
            Optional<AuthorityInfo.Model> firstOption = optional.get().getModels().stream().filter(x -> x.getModelId().equals(modelId)).findFirst();
            if (firstOption.isPresent()) {
                List<Integer> info = firstOption.get().getOperation();
                return Result.success(info);
            }
        }
        return Result.success(new ArrayList<>());
    }

    @PutMapping("/updatePassword")
    public Result updatePassword(@RequestBody Account info, HttpServletRequest request) {
        Account account = (Account) request.getSession().getAttribute("user");
        if (account == null) {
            return Result.error(ResultCode.USER_NOT_EXIST_ERROR.code, ResultCode.USER_NOT_EXIST_ERROR.msg);
        }
        String oldPassword = SecureUtil.md5(info.getPassword());
        if (!oldPassword.equals(account.getPassword())) {
            return Result.error(ResultCode.PARAM_PASSWORD_ERROR.code, ResultCode.PARAM_PASSWORD_ERROR.msg);
        }
        info.setPassword(SecureUtil.md5(info.getNewPassword()));
        Integer level = account.getLevel();
		if (1 == level) {
			TeacherInfo teacherInfo = new TeacherInfo();
			BeanUtils.copyProperties(info, teacherInfo);
			teacherInfoService.update(teacherInfo);
		}
		if (2 == level) {
			StudentInfo studentInfo = new StudentInfo();
			BeanUtils.copyProperties(info, studentInfo);
			studentInfoService.update(studentInfo);
		}

        info.setLevel(level);
        info.setName(account.getName());
        // 清空session,让用户重新登录
        request.getSession().setAttribute("user", null);
        return Result.success();
    }

    @PostMapping("/resetPassword")
    public Result resetPassword(@RequestBody Account account) {
        Integer level = account.getLevel();
		if (1 == level) {
			TeacherInfo info = teacherInfoService.findByUserName(account.getName());
			if (info == null) {
				return Result.error(ResultCode.USER_NOT_EXIST_ERROR.code, ResultCode.USER_NOT_EXIST_ERROR.msg);
			}
			info.setPassword(SecureUtil.md5("123456"));
			teacherInfoService.update(info);
		}
		if (2 == level) {
			StudentInfo info = studentInfoService.findByUserName(account.getName());
			if (info == null) {
				return Result.error(ResultCode.USER_NOT_EXIST_ERROR.code, ResultCode.USER_NOT_EXIST_ERROR.msg);
			}
			info.setPassword(SecureUtil.md5("123456"));
			studentInfoService.update(info);
		}

        return Result.success();
    }
}

4.2菜单部分

package com.example.controller;

import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.example.common.Result;
import com.example.entity.Account;
import com.example.service.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

@RestController
public class MenuController {

	@Resource
	private TeacherInfoService teacherInfoService;
	@Resource
	private StudentInfoService studentInfoService;
	@Resource
	private KechengInfoService kechengInfoService;
	@Resource
	private ChengjiInfoService chengjiInfoService;
	@Resource
	private AdvertiserInfoService advertiserInfoService;


    @GetMapping(value = "/getMenu", produces="application/json;charset=UTF-8")
    public String getMenu(HttpServletRequest request) {
        Account account = (Account) request.getSession().getAttribute("user");
        Integer level;
        if (account == null) {
            level = 1;
        } else {
            level = account.getLevel();
        }
        JSONObject obj = new JSONObject();
        obj.putOpt("code", 0);
        obj.putOpt("msg", "");
        JSONArray dataArray = new JSONArray();

        dataArray.add(getJsonObject("/", "系统首页", "layui-icon-home", "/"));

        JSONObject tableObj = new JSONObject();
        tableObj.putOpt("title", "信息管理");
        tableObj.putOpt("icon", "layui-icon-table");
		if (1 == level) {
			JSONArray array = new JSONArray();
			array.add(getJsonObject("teacherInfo", "教师信息", "layui-icon-table", "teacherInfo"));
			array.add(getJsonObject("studentInfo", "学生信息", "layui-icon-table", "studentInfo"));
			array.add(getJsonObject("kechengInfo", "到课信息", "layui-icon-table", "kechengInfo"));
			array.add(getJsonObject("submitInfo", "提交作业信息", "layui-icon-table", "submitInfo"));
			array.add(getJsonObject("fileInfo", "学习资料信息", "layui-icon-table", "fileInfo"));
			array.add(getJsonObject("chengjiInfo", "成绩信息", "layui-icon-table", "chengjiInfo"));
			array.add(getJsonObject("advertiserInfo", "公告信息", "layui-icon-table", "advertiserInfo"));
			array.add(getJsonObject("accountTeacherInfo", "个人信息", "layui-icon-user", "accountTeacherInfo"));
			tableObj.putOpt("list", array);
		}

		if (2 == level) {
			JSONArray array = new JSONArray();
			array.add(getJsonObject("kechengInfo", "到课信息", "layui-icon-table", "kechengInfo"));
			array.add(getJsonObject("submitInfo", "提交作业信息", "layui-icon-table", "submitInfo"));
			array.add(getJsonObject("fileInfo", "学习资料信息", "layui-icon-table", "fileInfo"));
			array.add(getJsonObject("chengjiInfo", "成绩信息", "layui-icon-table", "chengjiInfo"));
			array.add(getJsonObject("advertiserInfo", "公告信息", "layui-icon-table", "advertiserInfo"));
			array.add(getJsonObject("accountStudentInfo", "个人信息", "layui-icon-user", "accountStudentInfo"));
			tableObj.putOpt("list", array);
		}


        dataArray.add(tableObj);
		dataArray.add(getJsonObject("submitInfoComment", "提交作业评论", "layui-icon-group", "submitInfoComment"));
		dataArray.add(getJsonObject("fileInfoComment", "学习资料评论", "layui-icon-group", "fileInfoComment"));

        dataArray.add(getJsonObject("updatePassword", "修改密码", "layui-icon-password", "updatePassword"));
        dataArray.add(getJsonObject("login", "退出登录", "layui-icon-logout", "login"));

        obj.putOpt("data", dataArray);
        return obj.toString();
    }

    private JSONObject getJsonObject(String name, String title, String icon, String jump) {
        JSONObject object = new JSONObject();
        object.putOpt("name", name);
        object.putOpt("title", title);
        object.putOpt("icon", icon);
        object.putOpt("jump", jump);
        return object;
    }

    @GetMapping(value = "/getTotal", produces="application/json;charset=UTF-8")
    public Result<Map<String, Integer>> getTotle() {
        Map<String, Integer> resultMap = new HashMap<>();
		resultMap.put("teacherInfo", teacherInfoService.findAll().size());
		resultMap.put("studentInfo", studentInfoService.findAll().size());
		resultMap.put("kechengInfo", kechengInfoService.findAll().size());
		resultMap.put("chengjiInfo", chengjiInfoService.findAll().size());
		resultMap.put("advertiserInfo", advertiserInfoService.findAll().size());

        return Result.success(resultMap);
    }
}


获取源码或论文

如需对应的源码,可以评论或者私信都可以。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值