基于Java学生信息管理系统设计实现(源码+lw+部署文档+讲解等)

news2024/11/23 11:09:35
博主介绍: ✌全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌
🍅 文末获取源码联系 🍅
👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到哟
Java项目精品实战案例《100套》
Java微信小程序项目实战《100套》

系统介绍:

为了让系统的编码可以顺利进行,特意对本系统功能进行细分设计,管理员的功能在经过细分后,设计的功能结构见下图。管理员管理班级和课程的关系,管理奖惩类型,课程和专业信息。

图4.1 管理员功能结构图

老师的功能在经过细分后,设计的功能结构见下图。老师负责学生成绩和学生奖惩信息的管理,查询任课课程。

图4.2 老师功能结构图

学生的功能在经过细分后,设计的功能结构见下图。学生主要查询成绩,查询奖惩信息,查看班级和班级课程。

图4.3 学生功能结构图

程序上交给用户进行使用时,需要提供程序的操作流程图,这样便于用户容易理解程序的具体工作步骤,现如今程序的操作流程都有一个大致的标准,即先通过登录页面提交登录数据,通过程序验证正确之后,用户才能在程序功能操作区页面操作对应的功能。

程序操作流程图

功能截图:

5.1.1班级和课程关系管理

管理员管理班级和课程关系,其运行效果见下图。在本页面,每个班级对应的课程以及任课老师信息都会清楚的展示,管理员可修改,也能删除。

图5.1 班级和课程关系管理页面

5.1.2老师管理

管理员管理老师。其运行效果见下图。老师是本系统中的一个角色,其信息需要管理员管理。

图5.2 老师管理页面

5.1.3奖惩类型管理

管理员可以管理奖惩类型,其运行效果见下图。管理员修改奖惩类型名称,提交奖惩类型名字获取对应信息。

图5.3 奖惩类型管理页面

5.2 老师功能实现

5.2.1成绩管理

老师管理成绩。其运行效果见下图。老师登记各个学生的课程学习分数,可以根据分数段查询学生成绩。

图5.4 成绩管理页面

5.2.2学生奖惩管理

老师管理学生奖惩,其运行效果见下图。学生的奖励和惩罚信息需要教师添加和管理。

图5.5 学生奖惩管理页面

5.2.3课程管理

老师管理课程,其运行效果见下图。老师在当前页面查看课程,也能根据老师姓名查询对应课程信息。

图5.6 课程管理页面

5.3 学生功能实现

5.3.1班级管理

学生管理班级。其运行效果见下图。学生除了可以查询班级信息之外,还可以查看该班级的课程信息。

图5.7 班级管理页面

5.3.2查询成绩

学生查询成绩,其运行效果见下图。学生在本人后台就能查询成绩。根据课程名称,或者是分数段信息就能查询成绩。

图5.8 查询成绩页面

5.3.3修改密码

学生修改密码。其运行效果见下图。学生在本页面设置新密码,密码设置成功之后,需要重新登录。

图5.9 修改密码页面

代码实现:



/**
 * 登录相关
 */
@RequestMapping("users")
@RestController
public class UserController{
    
    @Autowired
    private UserService userService;
    
    @Autowired
    private TokenService tokenService;

    /**
     * 登录
     */
    @IgnoreAuth
    @PostMapping(value = "/login")
    public R login(String username, String password, String role, HttpServletRequest request) {
        UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
        if(user != null){
            if(!user.getRole().equals(role)){
                return R.error("权限不正常");
            }
            if(user==null || !user.getPassword().equals(password)) {
                return R.error("账号或密码不正确");
            }
            String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
            return R.ok().put("token", token);
        }else{
            return R.error("账号或密码或权限不对");
        }

    }
    
    /**
     * 注册
     */
    @IgnoreAuth
    @PostMapping(value = "/register")
    public R register(@RequestBody UserEntity user){
//        ValidatorUtils.validateEntity(user);
        if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
            return R.error("用户已存在");
        }
        userService.insert(user);
        return R.ok();
    }

    /**
     * 退出
     */
    @GetMapping(value = "logout")
    public R logout(HttpServletRequest request) {
        request.getSession().invalidate();
        return R.ok("退出成功");
    }
    
    /**
     * 密码重置
     */
    @IgnoreAuth
    @RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
        UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
        if(user==null) {
            return R.error("账号不存在");
        }
        user.setPassword("123456");
        userService.update(user,null);
        return R.ok("密码已重置为:123456");
    }
    
    /**
     * 列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,UserEntity user){
        EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
        PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
        return R.ok().put("data", page);
    }

    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }
    
    /**
     * 获取用户的session用户信息
     */
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
        Integer id = (Integer)request.getSession().getAttribute("userId");
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }

    /**
     * 保存
     */
    @PostMapping("/save")
    public R save(@RequestBody UserEntity user){
//        ValidatorUtils.validateEntity(user);
        if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
            return R.error("用户已存在");
        }
        userService.insert(user);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody UserEntity user){
//        ValidatorUtils.validateEntity(user);
        userService.updateById(user);//全部更新
        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids){
        userService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

论文参考:

第1章 绪论1

1.1选题动因1

1.2目的和意义1

1.3论文结构安排2

第2章 开发环境与技术3

2.1 MYSQL数据库3

2.2 Tomcat 介绍3

2.3 JSP技术4

第3章 系统分析5

3.1可行性分析5

3.1.1操作可行性分析5

3.1.2经济可行性分析5

3.1.3技术可行性分析5

3.2系统流程分析6

3.3系统性能分析7

3.4系统功能分析8

第4章 系统设计11

4.1界面设计原则11

4.2功能结构设计11

4.3数据库设计14

4.3.1数据库概念设计15

4.3.2 数据库物理设计17

第5章 系统实现21

5.1管理员功能实现21

5.1.1班级和课程关系管理21

5.1.2老师管理21

5.1.3奖惩类型管理22

5.2 老师功能实现22

5.2.1成绩管理22

5.2.2学生奖惩管理23

5.2.3课程管理23

5.3 学生功能实现24

5.3.1班级管理24

5.3.2查询成绩24

5.3.3修改密码25

第6章 系统测试26

6.1 系统测试方法26

6.2 功能测试26

6.2.1 登录功能测试27

6.2.2 查询课程功能测试27

6.3 测试结果分析27

结 论28

参考文献30

致 谢31

获取源码:
大家 点赞、收藏、关注、评 啦 、 查看 👇🏻 获取联系方式 👇🏻
精彩专栏 推荐订阅 下方专栏 👇🏻
Java项目精品实战案例《100套》
Java微信小程序项目实战《100套》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/685655.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue中js实现点击复制文本到剪贴板-三种方案

vue中js实现点击复制文本到剪贴板-三种方案 因为在网上找了一些很杂乱 不适用 所以自己写一篇记录分享一下 vue中js实现点击复制文本到剪贴板-三种方案 效果&#xff1a; 方案一&#xff1a;使用原生API&#xff08;clipboard&#xff09; 首先&#xff0c;我们需要安装clip…

【嵌入式5】电源相关芯片驱动

文章目录 1.读MPS5023芯片&#xff1a;0x03ff即将前6位屏蔽2.读PXE1410CDM电压和电流&#xff1a;一个数&0x7ff&#xff0c;将这个数前5位全变为0&#xff0c;其余位不变2.1 1ine11&#xff1a;先看第15和10位&#xff0c;e9b6是上面读出的值2.2 1ine16&#xff1a;PMBUS协…

产品的0到1概念篇

一、产品是什么&#xff1f; 产品是指被人们使用和消费&#xff0c;并能满足人们某种需求的任何东西&#xff0c;包括有形的物品、无形的服务、组织、观念或它们的组合。 产品本质是什么&#xff0c;产品的本质就是解决⽤户的痛点/满⾜⽤户的需求&#xff0c;这种满⾜的需求&…

KingbaseES的学习心得和知识总结(二)|Kingbase数据库闪回功能及插件kdb_flashback的使用

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、KingbaseES V8产品文档首页&#xff0c;点击前往 2、Kingbase 文档库&#xff0c;点击前往 3、北京人大金仓信息技术股份有限公司 官网首页&#xff0c;点击前往…

详解服务器端渲染 页面(SSR)

&#x1f48c;目录 &#x1f525;先了解服务器端渲染 (SSR)&#xff1f;&#x1f525;服务器端渲染的优点是什么呢&#xff1f;&#x1f525;有优点就有缺点&#xff1f;&#x1f525;根据Express来简单的建立一个服务端渲染 &#x1f525;先了解服务器端渲染 (SSR)&#xff1f…

Qt6.2教程——7.QT常用控件QTextEdit

一&#xff0c;QTextEdit简介 QTextEdit 是 Qt 的一个用于编辑和显示纯文本和富文本的控件。它是功能强大且高度灵活的&#xff0c;可以用于实现多种任务&#xff0c;如文本编辑&#xff0c;数据表示&#xff0c;以及HTML的显示和编辑等。QTextEdit 支持富文本功能&#xff0c…

Over 函数的使用

序言 其实也很少使用这个Over函数,毕竟mysql在5.7版本之前都是不支持的,但是over()的窗口概念被Flink中的窗口中借鉴了. 所以了解下,网上的Over()的使用有在Mysql中的例子,但是我的Mysql5.7 不支持,所以在Oracle中实验.但是语法都是一样的.cuiyaonan2000163.com 众所周知如果S…

转战VUE3学习

安装好vue3后&#xff0c;开始新的项目吧&#xff01; npm init vuelatest1.组合式API 在以前vue2的项目里&#xff0c;使用的选项式API将各种不同逻辑的代码分散到像data、methods等不同的对象里。如果想看某一方面的逻辑&#xff0c;鼠标滚轮都要磨出火星了&#xff01; 而…

LLM的工程实践思考

陆奇博士的主题演讲《新范式 新时代 新机会》非常震撼人心。我远程参加了深圳站和北京站两场演讲&#xff0c;深受感触。虽然了解大模型的机制和原理以了解新的范式非常重要&#xff0c;但是“行胜于言”&#xff0c;基于大模型的众多应用都需要工程技术才能落地。然而&#xf…

Ndk c++层 crash问题分析

首先你要从设备上拿到墓碑文件&#xff1a;tombstone&#xff0c;这里面会记录系统崩溃时的信息。位置在/data/tombstones目录下&#xff08;Logcat中也会有相应的信息&#xff09;&#xff0c;文件的确就像墓碑一样记录了死亡了的进程的基本信息&#xff08;例如进程的进程号&…

FlashAttention和PagedAttention

FlashAttention FlashAttention一般指的是FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness这篇&#xff0c;当然Transformer Quality in Linear Time这篇里非要说FLASH Fast Linear Attention with a Single Head&#xff0c;命名有点无语&…

JavaScript数据存储方式

内置对象 js内部提供的对象&#xff0c;包含各种属性和方法给开发者调用 document.write() console.log() Math Math对象是js提供的一个 “数学”对象&#xff0c;提供了一系列做数学运算的方法 max找最大值Math.max(3,8,5,4) 返回8min找最小值Math.min(3,8,5,4) 返回4ab…

printf不一样的玩法

Printf不一样的玩法 ❝ 在使用linux终端命令的时候&#xff0c;我们可以看到像more命令&#xff0c;它的显示方式与一般的字符串不同&#xff0c;是用了反显。同样&#xff0c;linux C下printf还有很多其他不常见的格式化输出形式。本文主要为你盘点这些形式。 ❞ 先看下效果&a…

MySQL:单行函数(全面详解)

MySQL&#xff1a;单行函数 前言一、函数的理解1、什么是函数2、不同DBMS函数的差异3、MySQL的内置函数及分类 二、数值函数1、基本函数2、角度与弧度互换函数3、三角函数4、指数与对数5、进制间的转换 三、字符串函数四、日期和时间函数1、获取日期、时间2、日期与时间戳的转换…

Bpmn.js流程建模结合业务整合工作流(二)

上一篇文章讲述了bpmn.js的基本搭建使用过程,下面介绍工具栏的按钮使用 以及右侧属性如何绑定到节点保存的 保存方法 /** 保存xml */async save() {await this.getNewXML() //获取最新的xmlawait this.getRootElement() //获取流程基本信息 节点信息const params = {name: th…

SSM+校园网上订餐系统 毕业设计-附源码211510

校园网上订餐系统的设计与实现 摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对校园网上订…

API 接口协作,swagger不再是第一选择了

目录 一、前言 1.1. 场景一、后端视角&#xff1a; 1.2. 场景二、前端视角&#xff1a; 1.3. 场景三、测试视角&#xff1a; 二、Apifox 2.1 场景一、后端视角&#xff1a; 漂亮的接口文档 2.2 场景二、前端视角&#xff1a; 2.3 场景三、测试视角&#xff1a; 三、总…

SOAP教程

参考 SOAP 教程 1、介绍 SOAP 中文解释为&#xff1a;简单对象访问协议。 SOAP 是一种简单的基于 XML 的协议&#xff0c;它使应用程序通过 HTTP 来交换信息。 SOAP 是基于 XML 的简易协议&#xff0c;可使应用程序在 HTTP 之上进行信息交换。或者更简单地说&#xff1a;SOAP…

ASP.NET Core Web API之Token验证

在实际开发中&#xff0c;我们经常需要对外提供接口以便客户获取数据&#xff0c;由于数据属于私密信息&#xff0c;并不能随意供其他人访问&#xff0c;所以就需要验证客户身份。那么如何才能验证客户的身份呢&#xff1f;今天以一个简单的小例子&#xff0c;简述ASP.NET Core…

一、枚举类型——使用枚举类型分发

如果将 RoShamBo1.java 直接转换为基于枚举的实现版本&#xff0c;则会出现问题。因为枚举实例并不是类型&#xff0c;所以无法重载 eval() 方法&#xff0c;你无法将枚举实例作为参数类型。不过&#xff0c;还有别的方法可以利用枚举来实现多路分发。 一种方法是通过构造方法…