ssm+vue679学生学籍管理系统设计与实现

博主介绍:专注于Java(springboot ssm 等开发框架) vue  .net  php phython node.js    uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作
☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟
我的博客空间发布了1500+毕设题目 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
更多项目地址 介绍  翰文编程CSDN博客
文末下方有源码获取地址 翰文编程-CSDN博客

ssm+vue679学生学籍管理系统设计与实现

    1. 系统结构设计

在学生学籍管理系统的设计中,系统结构设计可以类比为一个树状结构,其中每个大任务相当于树干,小任务则是树枝。通过需求分析,明确系统的目标与功能,才能确保每个小任务的实现都有助于最终目标的达成。系统结构设计的目的是将复杂的系统拆解成更易管理的小模块,确保系统的整体性和可操作性,并在初步设计的基础上进行不断优化,最终形成一个高效、稳定且能够满足需求的学籍管理系统。

管理员功能模块和用户功能模块是该学生学籍管理系统的两大部分,系统结构如图4-2所示。

图4-2 系统结构图

4.3 数据库设计

在学生学籍管理系统的开发过程中,数据库设计扮演着至关重要的角色。数据库作为系统的“数据存储库”,不仅承担着存储学生信息、成绩、课程安排、学籍状态等各类数据的任务,还提供了数据查询、更新、删除等功能。为了确保系统的高效性、可靠性和可扩展性,数据库设计需要根据具体的需求进行合理规划。

4.3.1 数据库概念设计

学生学籍管理系统的E-R图设计包括多个实体,如“学生”、“课程”、“成绩”、“学籍状态”、“选课”、“教师”、“学位”和“学院”,每个实体具有特定的属性。实体之间的关系包括学生与课程的多对多关系(通过选课表连接)、学生与成绩的一对多关系、学生与学籍状态的一对多关系、学生与学位的一对一关系,以及课程与教师的多对一关系。通过明确这些实体和关系的设计,E-R图为数据库架构提供了清晰的框架,有助于后续的数据库实施和管理。

(1)下图是学生学业实体和其具备的属性。


图4.1 学生学业实体属性图

(2)下图是学生实体和其具备的属性。


图4.2 学生实体属性图

(3)下图是公告信息实体和其具备的属性。


图4.3 公告信息实体属性图

(4)下图是字典表实体和其具备的属性。


图4.4 字典表实体属性图

(5)下图是学籍异动实体和其具备的属性。


图4.5 学籍异动实体属性图

(6)下图是教务人员姓名实体和其具备的属性。


图4.6 教务人员姓名实体属性图

(7)下图是用户表实体和其具备的属性。


图4.7 用户表实体属性图

      1. 数据库表设计

采用MYSQL数据库对该学生学籍管理系统的数据进行存储,数据库中所包括的各个数据库表的详细信息如下所示:

表4.1字典表表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

dic_code

String

字段

3

dic_name

String

字段名

4

code_index

Integer

编码

5

index_name

String

编码名字

6

super_id

Integer

父字段id

7

beizhu

String

备注

8

create_time

Date

创建时间

表4.2公告信息表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

news_name

String

公告标题

3

news_types

Integer

公告类型

4

news_photo

String

公告图片

5

insert_time

Date

添加时间

6

news_content

String

公告详情

7

create_time

Date

创建时间

表4.3学籍异动表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

xuejiyidong_text

String

申请原因

3

xuejiyidong_file

String

申请文件

4

xuejiyidong_types

Integer

申请项目

5

yonghu_id

Integer

学生

6

xuejiyidong_yesno_types

Integer

申请状态

7

xuejiyidong_yesno_text

String

申请结果

8

create_time

Date

创建时间

表4.4学生学业表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

xueshengxueye_name

String

学业情况

3

xueshengxueye_types

Integer

学业状态

4

yonghu_id

Integer

学生

5

xueshengxueye_text

String

备注信息

6

create_time

Date

创建时间

表4.5学生表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

yonghu_uuid_number

String

学号

3

yonghu_name

String

学生姓名

4

yonghu_address

String

家庭地址

5

xueyuan_types

Integer

学院

6

banji_types

Integer

班级

7

yonghu_delete

Integer

假删

8

create_time

Date

创建时间

表4.6用户表表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

username

String

用户名

3

password

String

密码

4

role

String

角色

5

addtime

Date

新增时间

  1. 系统的实现
    1. 功能模块的实现

5.1学生信息管理

如图5.1显示的就是学生信息管理页面,此页面提供给管理员的功能有:学生信息的查询管理,可以删除学生信息、修改学生信息、新增学生信息,

还进行了对用户名称的模糊查询的条件

图5.1 学生信息管理页面

5.2 学籍异动管理

如图5.2显示的就是学籍异动管理页面,此页面提供给管理员的功能有:查看已发布的学籍异动数据,修改学籍异动,学籍异动作废,即可删除,还进行了对学籍异动名称的模糊查询 学籍异动信息的类型查询等等一些条件。

图5.2 学籍异动管理页面

主要代码
 

 /**
    * 后端列表
    */
    @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(false)
            return R.error(511,"永不会进入");
        else if("学生".equals(role))
            params.put("yonghuId",request.getSession().getAttribute("userId"));
        else if("教务人员姓名".equals(role))
            params.put("jiaowurenyuanId",request.getSession().getAttribute("userId"));
        if(params.get("orderBy")==null || params.get("orderBy")==""){
            params.put("orderBy","id");
        }
        PageUtils page = xuejiyidongService.queryPage(params);

        //字典表数据转换
        List<XuejiyidongView> list =(List<XuejiyidongView>)page.getList();
        for(XuejiyidongView c:list){
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(c, request);
        }
        return R.ok().put("data", page);
    }

    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        XuejiyidongEntity xuejiyidong = xuejiyidongService.selectById(id);
        if(xuejiyidong !=null){
            //entity转view
            XuejiyidongView view = new XuejiyidongView();
            BeanUtils.copyProperties( xuejiyidong , view );//把实体数据重构到view中

                //级联表
                YonghuEntity yonghu = yonghuService.selectById(xuejiyidong.getYonghuId());
                if(yonghu != null){
                    BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setYonghuId(yonghu.getId());
                }
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view, request);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody XuejiyidongEntity xuejiyidong, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,xuejiyidong:{}",this.getClass().getName(),xuejiyidong.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永远不会进入");
        else if("学生".equals(role))
            xuejiyidong.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));

        Wrapper<XuejiyidongEntity> queryWrapper = new EntityWrapper<XuejiyidongEntity>()
            .eq("xuejiyidong_text", xuejiyidong.getXuejiyidongText())
            .eq("xuejiyidong_types", xuejiyidong.getXuejiyidongTypes())
            .eq("yonghu_id", xuejiyidong.getYonghuId())
            .eq("xuejiyidong_yesno_types", xuejiyidong.getXuejiyidongYesnoTypes())
            .eq("xuejiyidong_yesno_text", xuejiyidong.getXuejiyidongYesnoText())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        XuejiyidongEntity xuejiyidongEntity = xuejiyidongService.selectOne(queryWrapper);
        if(xuejiyidongEntity==null){
            xuejiyidong.setXuejiyidongYesnoTypes(1);
            xuejiyidong.setCreateTime(new Date());
            xuejiyidongService.insert(xuejiyidong);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 后端修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody XuejiyidongEntity xuejiyidong, HttpServletRequest request){
        logger.debug("update方法:,,Controller:{},,xuejiyidong:{}",this.getClass().getName(),xuejiyidong.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永远不会进入");
//        else if("学生".equals(role))
//            xuejiyidong.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
        //根据字段查询是否有相同数据
        Wrapper<XuejiyidongEntity> queryWrapper = new EntityWrapper<XuejiyidongEntity>()
            .notIn("id",xuejiyidong.getId())
            .andNew()
            .eq("xuejiyidong_text", xuejiyidong.getXuejiyidongText())
            .eq("xuejiyidong_types", xuejiyidong.getXuejiyidongTypes())
            .eq("yonghu_id", xuejiyidong.getYonghuId())
            .eq("xuejiyidong_yesno_types", xuejiyidong.getXuejiyidongYesnoTypes())
            .eq("xuejiyidong_yesno_text", xuejiyidong.getXuejiyidongYesnoText())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        XuejiyidongEntity xuejiyidongEntity = xuejiyidongService.selectOne(queryWrapper);
        if("".equals(xuejiyidong.getXuejiyidongFile()) || "null".equals(xuejiyidong.getXuejiyidongFile())){
                xuejiyidong.setXuejiyidongFile(null);
        }
        if(xuejiyidongEntity==null){
            xuejiyidongService.updateById(xuejiyidong);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }


    /**
    * 审核
    */
    @RequestMapping("/shenhe")
    public R shenhe(@RequestBody XuejiyidongEntity xuejiyidongEntity, HttpServletRequest request){
        logger.debug("shenhe方法:,,Controller:{},,xuejiyidongEntity:{}",this.getClass().getName(),xuejiyidongEntity.toString());

//        if(xuejiyidongEntity.getXuejiyidongYesnoTypes() == 2){//通过
//            xuejiyidongEntity.setXuejiyidongTypes();
//        }else if(xuejiyidongEntity.getXuejiyidongYesnoTypes() == 3){//拒绝
//            xuejiyidongEntity.setXuejiyidongTypes();
//        }
        xuejiyidongService.updateById(xuejiyidongEntity);//审核
        return R.ok();
    }

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

5.3学生学业管理

如图5.3显示的就是学生学业管理页面,此页面提供给管理员的功能有:根据学生学业进行条件查询,还可以对学生学业进行新增、修改、查询操作等等。

图5.3 学生学业管理页面

5.1公告信息管理

如图5.4显示的就是公告信息管理页面,此页面提供给管理员的功能有:根据公告信息进行新增、修改、查询操作等等。

大家点赞、收藏、关注、评论啦  其他的定制服务  下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者