学历学籍系统-Web服务开发实验(REST API)

目录

1 项目简介

1.1 分工

2 开发环境

2.1 框架搭建

2.2 数据库建表(Resuorce)

2.2.1 用户信息user表

2.2.2 学生学历/学籍信息student_graduate表

2.2.3 学生成绩student_grade表

 3 接口总览

 3.1 对StudentGraduate类的操作接口

 3.1.1 查询入学/毕业信息(GET)

 3.1.2 入学信息录入(POST)

 3.1.3 入学信息修改(PUT)

 3.1.4 学籍信息删除(DELETE)

 3.1.5 返回某一学生的所有学籍学历信息(GET)

 3.1.6 学校对毕业信息签名(GET) 

 3.1.7 学生对毕业信息签名(POST) 

 3.1.8 企业核实学历(GET) 

 3.2 对StudentGrade类的操作接口

 3.2.1 上传成绩信息(POST)

 3.2.1 获取成绩信息(GET) 

3.3 对User类的操作接口

 3.3.1 用户登陆(POST)

 3.3.2 用户注册(POST)

代码:第三次作业实验代码.zip-网页制作文档类资源-CSDN下载


1 项目简介

项目需求可以参考之前的博客,学历学籍管理系统-UML建模_m0_47308595的博客-CSDN博客

在具体实现中,为了减少数据冗余,我们将StudentDocument(学籍类)和StudentCertificate(证书类)合成为StudentGraduate类,通过属性signStatus区分,0为学校未为其签名,即可以当作StudentDocument(学籍类),为1时表示学校已签名,可以表示StudentCertificate(证书类),为2时表示学生也完成了签名。

这里我们主要完成了用户登陆与注册,成绩上传与获取,学籍学历信息的增删改查与验证。

同时我们在开发之余,自己用java搭建了一个小型的区块链数据结构,可以将完成双重签名的学历信息存储在区块链上,实现数据的不可篡改。

1.1 分工

阁承越:整体设计、开发(40%)

胡斐:文档撰写、部分开发(30%)

杨一帆:文档撰写、测试记录(30%)

2 开发环境

主体使用Springboot整合了Tomcat、Spring MVC、Spring、Mybatis-plus等,进行Web服务的开发。数据持久层使用MySql存储,并通过Mybatis-plus进行持久层与业务层的数据交互。同时,这里涉及了学校和学生的公私钥管理,这里我们以键值对的形式存储在redis上,方便快速的存取。

2.1 框架搭建

首先使用IDEA创建一个Spring工程,在pom.xml中已经自动引入Springboot的相关依赖,还需要我们自行引入mybatis-plus的依赖。

然后我们在application.properties中需要设置端口号,数据库的地址、用户名、密码,mybatis-plus的扫面范围等,具体如下:

server.port=8432
# MySQL config
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://xxxx:3306/ccb?serverTimezone=GMT%2B8
spring.datasource.username=xxxx
spring.datasource.password=xxxxx

# mybatis-plus config
mybatis-plus.mapper-locations=classpath:/mapper/*.xml
mybatis-plus.type-aliases-package=com.example.ccb.entity

然后点击运行,该项目就已经启动了,可以对localhost:8432进行访问。在本次试验中,我们将项目部署在了服务器上,因此接口的统一访问形式是http://47.93.99.237:8432/xxx。

2.2 数据库建表(Resuorce)

这里我们主要建造了三个表,也代表了REST风格中的资源部分。

2.2.1 用户信息user表

主要用于账号的注册和登录。

user表

 2.2.2 学生学历/学籍信息student_graduate表

包括学生的个人信息以及毕业时需要的学历证书编号、签名状态等, 用于生成、获取学生的个人信息,对其sign_status的改变则代表的学生毕业时的签名状态。

student_graduate表

student_graduate表的属性

  2.2.3 学生成绩student_grade表

    存储所有学生的成绩,用于获取学生的成绩。

student_grade表

 3 接口总览

这里使用swagger自动生成了项目的接口文档。由于篇幅原因,这里重点对StudentGraduate的GET、POST、PUT、DELETE接口及其实现方式做重点介绍,其余则会通过前端演示的方式来简略介绍。

接口文档:

Swagger UI

接口总览

 3.1 对StudentGraduate类的操作接口

对于StudentGraduate类的接口编写全部都包含在StudentGraduateController中,该类用@RequestMapping("/studentGraduate")修饰,表面访问该接口的统一形式是http://47.93.99.237:8432/studentGraduate。

3.1.1 查询入学/毕业信息(GET)

该接口的形式为"http://47.93.99.237:8432/studentGraduate",这里需要前端传入学历层次、学号、入学年份(如果不传入则显示全部的学历学籍信息),后台接受到前端传来的数据后,会使用mybatis-plus中封装的QueryWrapper类对数据库进行查找,最后以json字符串的形式返回,这里我们封装了BaseResult类用于返回请求的成功/异常。

@GetMapping("")
    @ApiOperation("查询入学/毕业信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "education", value = "学历层次"),
            @ApiImplicitParam(name = "studentNum", value = "学号"),
            @ApiImplicitParam(name = "admission", value = "入学年份")
    })
    public BaseResult findStudentGraduate(@RequestParam(value = "education", required = false) String education,
                                          @RequestParam(value = "studentNum", required = false) String studentNum,
                                          @RequestParam(value = "admission", required = false) String admission) {
        QueryWrapper<StudentGraduate> queryWrapper = new QueryWrapper<>();
        if (education != null) {
            queryWrapper.eq("education", education);
        }
        if (studentNum != null) {
            queryWrapper.eq("student_num", studentNum);
        }
        if (admission != null) {
            queryWrapper.eq("admission", admission);
        }
        List<StudentGraduate> list = studentGraduateService.list(queryWrapper);
        return BaseResult.successWithData(list);
    }

接口测试:

查询入学/毕业信息(GET)接口测试

 前端调用:

这里我们在前端通过javascript对于返回的数据进行处理,当signStatus为0时表示的是入学的学籍信息,当signStatus为1时表示是已经通过毕业审核且学校签名的学历信息,当signStatus为2时为学生已经确认的信息。 

这里是的调取了入学年份为2018,学历层次为本科的所有学籍记录。

这里是在毕业确认时调取了入学年份为2018,学历层次为本科的所有学籍记录。

这里返回的是已经完成学校+学生双重签名的学籍记录 ,即只显示signStatus为2的学历信息。

3.1.2 入学信息录入(POST)

该接口的形式为"http://47.93.99.237:8432/studentGraduate",方式为POST,这里需要前端传入StudentGraduate类中所需要的数据,表单里的id和证书编号不用填,是因为id在mysql中设置的自增长,证书编号则在下面的处理中自动生成,然后我们调用了业务层的StudentGraduateService接口中的save方法(该方法extends自mybatis-plus的IService接口,用于做数据的插入),将一条数据插入数据库中,如果成功返回证书编号,否则返回错误代码。

    @PostMapping("")
    @ApiOperation("入学信息录入, 表单里的id和证书编号不用填")
    public BaseResult addStudentGraduate(@RequestBody StudentGraduate studentGraduate) {
        String certificateId = UUID.randomUUID().toString();
        studentGraduate.setCertificateNum(certificateId);

        if (studentGraduateService.save(studentGraduate)) {
            return BaseResult.successWithData(certificateId);
        } else {
            return BaseResult.failWithErrorCode(ErrorCode.INNER_ERROR);
        }
    }

接口测试:

前端调用:

 

 3.1.3 入学信息修改(PUT)

该接口的形式为"http://47.93.99.237:8432/studentGraduate",方式为PUT,通过传入的StudentGraduate信息中的id,在数据库里查找,只有在signStatus为0即学校未确认时才允许修改。

    @PutMapping("")
    @ApiOperation("修改录入的信息,修改入学录入信息和毕业录入信息都用该接口。学校未确认才允许修改")
    public BaseResult updateStudentGraduate(@RequestBody StudentGraduate studentGraduate) {
        //现根据id查db里的毕业信息
        StudentGraduate dbInfo = studentGraduateService.getById(studentGraduate.getId());

        if (dbInfo != null && dbInfo.getSignStatus() == SignStatus.UN_SIGN && studentGraduateService.updateById(studentGraduate)) {
            return BaseResult.success();
        } else {
            return BaseResult.failWithErrorCode(ErrorCode.INSERT_FAILED);
        }
    }

接口测试:

前端调用:

在信息总览中,点击详情,即可进入修改界面,点击保存即可完成修改。

 3.1.4 学籍信息删除(DELETE)

该接口的形式为"http://47.93.99.237:8432/studentGraduate/{graduateId}",方式为PUT,通过传入studentgraduate的id,指定删除哪一条信息,如果未找到或者该条记录已经经过双重签名(即已经是确定的学历信息),返回错误代码,否则返回成功信息。

    @DeleteMapping("/{graduateId}")
    @ApiOperation("入学信息删除,传入入学信息id")
    public BaseResult deleteStudentGraduate(@PathVariable("graduateId") Integer graduateId) {
        StudentGraduate graduateInfo = studentGraduateService.getById(graduateId);
        if (graduateInfo == null || graduateInfo.getSignStatus() != SignStatus.UN_SIGN) {
            return BaseResult.failWithErrorCode(ErrorCode.DELETE_FAILED);
        }
        if (studentGraduateService.removeById(graduateId)) {
            return BaseResult.success();
        } else {
            return BaseResult.failWithErrorCode(ErrorCode.DELETE_FAILED);
        }
    }

接口测试:

前端调用:

点击撤销按钮,即可完成删除。

  

 3.1.5 返回某一学生的所有学籍学历信息(GET)

该接口的形式为"http://47.93.99.237:8432/studentGraduate/graduateInfo/{identityNum}",方式为GET,即获取某一用户的所有学籍学历信息。

前端调用:

在学生端的界面,通过调用该接口,将signStatus为0的信息归类为我的学籍,signStatus为1或2的信息归为我的学历。

 3.1.6 学校对毕业信息签名(GET) 

该接口的形式为"http://47.93.99.237:8432/studentGraduate/student/{graduateId}",方式为GET,点击确认按钮后,将会在后台根据graduateId调取该生的学籍信息和成绩信息,如果有成绩挂科,则无法毕业,返回错误,如果可以毕业,则用学校的私钥进行签名,并将签名信息暂时保存在redis上,修改signStatus为1,返回成功代码。

前端调用:

 3.1.7 学生对毕业信息签名(POST) 

该接口的形式为"http://47.93.99.237:8432/studentGraduate/student",方式为POST,需要上传该条信息的ID和学生的身份证号,这里用POST是为了隐式传输数据,防止通过url暴露学生的身份证号,学生在确认信息无误后,点击待确认,即可完成对学历的签名。随后该条学历的信息在加密处理后,上传至我们自己搭的区块链,signStatus变为2。

 3.1.8 企业核实学历(GET) 

该接口的形式为"http://47.93.99.237:8432/studentGraduate/enterprise",方式为GET,需要传入学历证书编号,学校,身份证号,通过在redis中寻找对应学生、对应学校的公钥,来验证存储在区块链上的密文,若能得到返回值,说明该生确实毕业于该学习,可以进一步核实专业等信息。

 3.2 对StudentGrade类的操作接口

 这里所有的接口都写在StudentGradeController中。

 3.2.1 上传成绩信息(POST)

接口调用形式为:"http://47.93.99.237:8432/studentGrade",方式为POST,输入studentGrade所有信息,即可上传。这里我们在前端没有做展示,因为考虑到我们是学历学籍管理系统,而不是教务系统,所以我们只暴露了一个上传成绩的接口,可以将成绩信息上传至我们的后台,供后续的调用。

    @PostMapping("")
    @ApiOperation("成绩录入, 表单里的id不用填")
    public BaseResult addGrade(@RequestBody StudentGrade studentGrade) {
        studentGradeService.save(studentGrade);
        log.info("成绩录入成功");
        return BaseResult.success();
    }

 3.2.1 获取成绩信息(GET) 

接口调用形式为:"http://47.93.99.237:8432/studentGrade",方式为GET,输入学年、课程号、学号、学历层次(当输入为空时返回所有成绩信息),在后台通过mybatis-plus获取相对应的数据。

前端调用:

这里我们获取了张三本科期间的所有成绩。 

3.3 对User类的操作接口

这里所有的接口都写在UserController中。

3.3.1 用户登陆(POST)

接口调用形式为:"http://47.93.99.237:8432/user/login",方式为POST,输入用户名和密码,在后台比对数据库中的信息,如果正确则可以进入,否则返回失败。

3.3.2 用户注册(POST)

接口调用形式为:"http://47.93.99.237:8432/user/register",方式为POST,输入用户名、身份证号、密码,完成注册。密码读取后,在后台进行md5摘要后再存入数据库。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 摘要 ………………………………………………………………………………………………………….. 第一章 绪论 ………………………………………………………………………………………………. 1.1题目来源 ……………………………………………………………………………………………… 1.1.1业务背景 …………………………………………………………………………………………… 1.1.2网络背景 ………………………………………………………………………………………….. 1.2课题的目的意义以及内容………………………………………………………………………. 1.2.1课题研究的目的意义………………………………………………………………………….. 1.2.2国内研究现状……………………………………………………………………………………… 1.2.3课题研究内容…………………………………………………………………………………. 第二章 系统开发技术………………………………………………………………………………….. 2.1Web数据库技术……………………………………………………………………………………… 2.2访问Web数据库的五种方法…………………………………………………………………… 2.3运用ASP开发Web数据库……………………………………………………………………….. 2.3.1建立ADO数据环境…………………………………………………………………………….. 2.3.2处理返回集…………………………………………………………………………………………. 2.3.3释放环境变量……………………………………………………………………………………. 第三章 系统设计………………………………………………………………………………………… 3.1工作分析与设计目的……………………………………………………………………………. 3.1.1日常工作分析…………………………………………………………………………………….. 3.1.2系统设计目的…………………………………………………………………………………… 3.2系统设计方案……………………………………………………………………………………… 3.2.1使用对象分析………………………………………………………………………………….. 3.2.2平台逻辑设计……………………………………………………………………………………. 3.2.3开发技术、开发平台以及开发工具…………………………………………………………. 3.3系统特点……………………………………………………………………………………………….. 3.4数据流程设计…………………………………………………………………………………………. 3.4.1系统使用人员间的书库流程………………………………………………………………………… 3.4.2教务助理子系统的数据流程………………………………………………………………………….. 3.5系统功能模块设计…………………………………………………………………………………………. 第四章 系统实现…………………………………………………………………………………………….. 4.1学籍管理数据平台实现………………………………………………………………………………….. 4.1.1数据表………………………………………………………………………………………………………… 4.1.2数据表间的关系…………………………………………………………………………………………. 4.2典型功能设计 ………………………………………………………………………………………………… 4.2.1身份进入原则………………………………………………………………………………………………. 4.2.2同音字查询………………………………………………………………………………………………….. 4.2.3成绩录入模块………………………………………………………………………………………………. 4.2.4成绩管理………………………………………………………………………………………………………. 4.2.5学籍处理……………………………………………………………………………………………………. 4.3提高查询速度的解决………………………………………………………………………………………. 4.3.1利用索引系统系统性能……………………………………………………………………………………. 4.3.2程序过程的查询优化……………………………………………………………………………………….. 4.4系统运行平台………………………………………………………………………………………… 第五章 结论……………………………………………………………………………………………………. 致谢…………………………………………………………………………………………………………………. 第一章 绪 论 (1) 系统设计介绍 管理系统(简称MIS)是介于信息论,经济管理理论,统计学与运筹学及计算机科学之间的一门边缘性,综合性,系统性的交叉科学,它是随着管理科学。信息技术,计算机技术等的发展而产生和发展起来的。 学籍管理系统是典型的信息管理系统,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备、易使用等特点。 上一代的学籍管理系统主要为单机单用户的系统。其特点是单机单用户方式,开发简单,能充分利用数据库的特性。其缺点是开发出的系统依赖性强,运用必须依托数据库环境;不容易升级与扩展;无法实现数据的共享与并行操作;代码重用性差。 随着计算机网络的发展,特别是校园网的建立。原有学籍管理系统数据共享差的问题更加突出,而新需求的提出也越来越多,越来越频繁。这就要求系统在可扩展性和标准化的要求更高。而原有的系统由于其与生俱来的缺点而无法适应现有的需求了。 (2) 系统的研究的目的及意义 学籍管理系统使用最新开发工具开发,运行稳定、效率高。学籍管理系统对硬件要求低,350M以上剩余硬盘空间即可保证软件顺利运行。学籍管理系统可扩展性和灵活性强,用户可以自由定义所需掌握的学籍信息并根据需要随时调用和查询已录入信息。学籍管理系统操作简便、快捷,使用我们的阅读机和配套信息卡,所有学生入学、退学、升级等业务仅需点击几次鼠标即可轻松完成。在新生入学等大批量人员操作时,更可以节省录入时间、提高正确率。学籍管理系统所有信息也可人工录入和修改,以方便没有阅读机的用户。 学籍管理是高校教学工作的一个重要的组成部分,学籍管理水平的高低体现了学校教学管理水平的高低。由于缺乏现代化的管理手段,学籍管理人员常常面对大量的信息资料却不能及时调整出自己所需要的数据。学籍管理还处于半手工处理阶段,工作既繁琐又效率低,学生学籍发生异动,其相应的信息资料不能及时进行修改,往往会出现信息处理不一致的情况。每学期期末的成绩登出容易出现错,漏等情况。学生成绩的查询工作也极不方便。 事实证明传统的管理模式既浪费人力资源,又不利于提高工作效率,保密性也差。随着时间的推移,产生大量的文件和资料,给查找更新和维护带来了很大的困难。随着学校专业设置的多样化,学校规模的不断扩大,招生人数逐年攀升以及教学计划的不断完善,学籍管理的数据量急剧增加,使得学籍管理老公强度大大增强,采用这种方式进行学籍管理是难以胜任的。所以,建立一个完善的集成化的计算机学籍管理系统势在必行,它具有手工管理无法比拟的优点,可以做到检索迅速、查找方便、可靠性高、保密性好、寿命长、成本低等,这些有点能够极大地提高效率,也能对学校科学化、正规化管理起到重要的作用。 现在我国的中小学校中档案的管理水平还停留在书面记载的基础上,这样的机制已经不能适应时代的发展,因为它浪费人力、物力,在信息时代这种传统的管理方法必然会被以计算机为基础的MIS所取代。 我作为计算机科学与技术专业的学生,希望自己可以在学籍管理系统这方面有所贡献。基本实现 A安全、高效地存储历届的学生档案 B只需一到二名档案录人员即可操作系统 C 可以迅速查到所需要的信息

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值