基于SSM+JSP实现学生信息管理系统

作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师

主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互助

收藏点赞不迷路  关注作者有好处

文末获取源码 

项目编号:BS-GX-077

一,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

开发技术:SSM+JSP

二,项目简介

传统办法管理学生信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装学生信息管理系统软件来发挥其高效地信息处理的作用,可以规范学生信息管理流程,让管理工作可以系统化和程序化,同时,学生信息管理系统的有效运用可以帮助管理人员准确快速地处理信息。

学生信息管理系统在对开发工具的选择上也很慎重,为了便于开发实现,选择的开发工具为Eclipse,选择的数据库工具为Mysql。以此搭建开发环境实现学生信息管理系统的功能。其中管理员管理班级和课程的关系,管理奖惩类型,课程和专业信息。老师负责学生成绩和学生奖惩信息的管理,查询任课课程。学生主要查询成绩,查询奖惩信息,查看班级和班级课程。

学生信息管理系统是一款运用软件开发技术设计实现的应用系统,在信息处理上可以达到快速的目的,不管是针对数据添加,数据维护和统计,以及数据查询等处理要求,学生信息管理系统都可以轻松应对。

完成这部分内容,需要设计人员提前做好准备工作,包括对系统的实际使用人员进行调研,获取他们对本系统的功能需求,也需要通过参考和分析大量文献,获取同类系统的功能,由此分析得出本系统的功能。

管理员是本系统的一个角色,其用例见下图。管理员管理班级和课程的关系,管理奖惩类型,课程和专业信息。

图3.4 管理员用例图

老师是本系统的一个角色,其用例见下图。老师负责学生成绩和学生奖惩信息的管理,查询任课课程。

图3.5 老师用例图

学生是本系统的一个角色,其用例见下图。学生主要查询成绩,查询奖惩信息,查看班级和班级课程。

图3.6 学生用例图

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

图4.1 管理员功能结构图

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

图4.2 老师功能结构图

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

图4.3 学生功能结构图

三,系统展示

5.1管理员功能实现

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 修改密码页面

四,核心代码展示

package com.controller;


import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.StringUtil;
import java.lang.reflect.InvocationTargetException;

import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;

import com.entity.KechengEntity;

import com.service.KechengService;
import com.entity.view.KechengView;
import com.service.LaoshiService;
import com.entity.LaoshiEntity;
import com.utils.PageUtils;
import com.utils.R;

/**
 * 课程
 * 后端接口
 * @author
 * @email
 * @date 2021-03-13
*/
@RestController
@Controller
@RequestMapping("/kecheng")
public class KechengController {
    private static final Logger logger = LoggerFactory.getLogger(KechengController.class);

    @Autowired
    private KechengService kechengService;


    @Autowired
    private TokenService tokenService;
    @Autowired
    private DictionaryService dictionaryService;


    //级联表service
    @Autowired
    private LaoshiService laoshiService;


    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(StringUtil.isNotEmpty(role) && "用户".equals(role)){
            params.put("yonghuId",request.getSession().getAttribute("userId"));
        }
        PageUtils page = kechengService.queryPage(params);

        //字典表数据转换
        List<KechengView> list =(List<KechengView>)page.getList();
        for(KechengView c:list){
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(c);
        }
        return R.ok().put("data", page);
    }
    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        KechengEntity kecheng = kechengService.selectById(id);
        if(kecheng !=null){
            //entity转view
            KechengView view = new KechengView();
            BeanUtils.copyProperties( kecheng , view );//把实体数据重构到view中

            //级联表
            LaoshiEntity laoshi = laoshiService.selectById(kecheng.getLaoshiId());
            if(laoshi != null){
                BeanUtils.copyProperties( laoshi , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                view.setLaoshiId(laoshi.getId());
            }
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody KechengEntity kecheng, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,kecheng:{}",this.getClass().getName(),kecheng.toString());
        Wrapper<KechengEntity> queryWrapper = new EntityWrapper<KechengEntity>()
            .eq("laoshi_id", kecheng.getLaoshiId())
            .eq("kecheng_name", kecheng.getKechengName())
            .eq("kecheng_content", kecheng.getKechengContent())
            ;
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        KechengEntity kechengEntity = kechengService.selectOne(queryWrapper);
        if(kechengEntity==null){
            kecheng.setCreateTime(new Date());
        //  String role = String.valueOf(request.getSession().getAttribute("role"));
        //  if("".equals(role)){
        //      kecheng.set
        //  }
            kechengService.insert(kecheng);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody KechengEntity kecheng, HttpServletRequest request){
        logger.debug("update方法:,,Controller:{},,kecheng:{}",this.getClass().getName(),kecheng.toString());
        //根据字段查询是否有相同数据
        Wrapper<KechengEntity> queryWrapper = new EntityWrapper<KechengEntity>()
            .notIn("id",kecheng.getId())
            .eq("laoshi_id", kecheng.getLaoshiId())
            .eq("kecheng_name", kecheng.getKechengName())
            .eq("kecheng_content", kecheng.getKechengContent())
            ;
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        KechengEntity kechengEntity = kechengService.selectOne(queryWrapper);
        if(kechengEntity==null){
            //  String role = String.valueOf(request.getSession().getAttribute("role"));
            //  if("".equals(role)){
            //      kecheng.set
            //  }
            kechengService.updateById(kecheng);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }


    /**
    * 删除
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids){
        logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
        kechengService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }


}

五,相关作品展示

基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目

基于Nodejs、Vue等前端技术开发的前端实战项目

基于微信小程序和安卓APP应用开发的相关作品

基于51单片机等嵌入式物联网开发应用

基于各类算法实现的AI智能应用

基于大数据实现的各类数据管理和推荐系统

 

 

  • 25
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_469603589

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值