Bootstrap

14.社团管理系统(基于springboot和vue)

目录

1.系统的受众说明        

2.需求分析 

2.1需求描述  

2.1.1系统管理员需求描述

2.1.2用户的功能需求

2.1.3社团管理员功能需求

2.2用例分析

2.2.1管理员模块

2.2.2用户管理模块

2.2.3社长管理模块

2.3静态分析   

2.3.1系统静态类图:

2.3.2基本信息管理类图

2.4功能分析

3 系统设计

3.1系统总体结构

3.2模块设计

3.2.1登录模块

3.2.2加入社团模块

3.2.3修改密码模块

4 数据库设计

4.1概念结构设计

4.2逻辑结构设计

4.3物理设计

4.4 数据库实施

4-4-1创建用户表 (users):

4-4-2创建社团表(team):

4-4-3创建社团类型表 (team_types):

4-4-4创建缴费表 (pay_logs):

4-4-5创建通知表(notices):

4-4-6创建社团成员表 (members):

4-4-7 创建申请表 (apply_logs):

4-4-8创建活动表 (activities):

4-4-9创建活动日志表(active_logs):

5 系统实现及测试

5.1系统实现

5.1.1用户注册功能实现:

5.1.2用户登录功能实现:

5.1.3用户密码修改功能实现:

5.1.4系统用户信息修改功能实现:

5.1.5社团类型管理功能实现:

5.2 系统测试


1.系统的受众说明
     
   

     1 在校学习的学生,可用于日常学习使用或是毕业设计使用

     2 毕业一到两年的开发人员,用于锻炼自己的独立功能模块设计能力,增强代码编写能力。

     3 亦可以部署为商化项目使用。

     4 需要完整资料及源码,请在文末获取联系方式领取。

2.需求分析 

2.1需求描述  

2.1.1系统管理员需求描述

①用户管理

  1.  注册用户账户

当一个新用户注册时,用户填写基本信息并上传。用户基本信息包括账号、

姓名、密码、手机、地址等信息。

  1. 用户信息管理

管理员可以查看系统所有用户的基本信息,并修改和删除。

②社团管理

  1. 创建社团

社团由管理员创建,创建社团需填写社团名称,社团类型和社团社长。

b. 社团信息管理

管理员可以查看使用该系统的所有社团基本信息,修改和删除该社团。由于需要处理的信息可能更多,为了使页面更简洁,减少数据库查询的压力,并使管理员能够更快地找到需要处理的社团信息,添加社团名称字段的查询功能。

2.1.2用户的功能需求

①用户管理

  1. 个人信息管理

用户可以查看自己的个人信息,也可以修改、删除操作自己不满意的信息。

  1. 申请加入社团

用户可以浏览所有社团,并向喜欢的社团提交申请。

  1. 加入活动

用户可以浏览加入社团的全部活动,并选择加入到感兴趣的活动中。

  1. 缴费信息管理

用户可以收到缴费通知,并进行缴费

2.1.3社团管理员功能需求

①社团管理

a. 活动信息管理

社团管理员可以向所有社员发布活动信息,可以对参与活动的社员进行审核。

  1. 社团成员信息管理

社团管理员可以对社员进行删除,对入团申请者进行审核。

  1. 缴费信息管理

社团管理员可以根据社员编号发布缴费信息

2.2用例分析

2.2.1管理员模块

如图2-2-1所示,具体模块如下:

系统用户管理:可以查看系统所有用户的基本信息,并修改和删除。

社团类型管理:可以对社团类型进行修改,删除,查询操作,并且可以根据需求增添社团类型。

社团信息管理:可以对社团进行查询,删除,创建社团,修改社团信息。

活动信息管理:可以查询,删除社团活动。

通知信息管:可以查询,删除,发布社团活动。

查询缴费记录:可以查询各个社团的缴费记录。

图2-2-1 管理员用例图

2.2.2用户管理模块

如图2-2-2所示,具体模块如下:

入团申请管理:可以向感兴趣的社团提交申请。

浏览社团信息:可以浏览所有社团及其基本信息。

活动信息管理:实现向所有社员发布活动信息,可以对参与活动的社员进行审核的功能。

用户信息管理:实现修改个人信息和密码的功能。

通知信息查询:可以查询发布的通知信息。

缴费信息管理:实现缴费查询和缴费缴纳功能。

图2-2-2 用户用例图

2.2.3社长管理模块

如图2-2-3所示,具体模块如下:

入团申请处理:可以对提交社团申请的用户进行审核。

社团成员管理:实现对社团的成员查询和删除功能。

社团活动管理:可以查看和发布社团活动。

社团通知管理:可以查看,发布社团活动,删除本社团发布的通知

社团费用管理:可以查看,删除,根据社员编号发布缴费通知。

图2-2-3社长用例图

2.3静态分析   

2.3.1系统静态类图:

如图 2-3-1 所示,系统的用户分为系统管理员、普通用户和社团管理员。

用户管理个人信息并申请加入社团;系统管理员管理用户信息、社团信息和通知,社团管理员审核用户申请,发布通知。一个用户可以有多个社团,用户可以提交多个申请,民宿管理者可以处理多个申请。

图2-3-1系统静态类图

2.3.2基本信息管理类图

如图2-3-2所示,基本信息类包括用户信息类、入团信息类、活动信息、缴费信息类

社团信息类、通知信息类。

                                                         图2-3-2基本信息管理类图

2.4功能分析

如图2-4-1所示,系统功能包括系统通用功能,社团管理运营功能和基础信息管理功能。

 

图2-4-1系统总体功能模块图

图2-4-1系统总体功能模块图

3 系统设计

3.1系统总体结构

如图 3-1-1 所示,总体结构共有用户层、服务接口层、业务逻辑层、数据访问层和数据层五个层次。用户层通过系统管理员、用户和社团管理员三个登录身份登录到相应的身份界面。 一旦服务接口层通过服务访问接口进行了统一授权认证, 只有身份认证用户才能访问数据,服务接口层通过调用业务逻辑层中的数据查询组件来处理数据,业务逻辑层中的数据通过调用数据访问层中的数据访问组件来获得数据库中的数据库数据。

图3-1-1 社团管理系统总体结构

3.2模块设计

3.2.1登录模块

如图 3-2-1 所示,系统用户在输入账户和密码登录信息后,服务器对用户信息进行验证,验证正确,根据用户身份进入不同界面。

图3-2-1 登录时序图

3.2.2加入社团模块

如图 3-2-2所示,用户进入社团申请界面提交申请,用户信息将上传到服务器,社长同意后,数据库社团成员信息表更新。

                                                            图3-2-2 加入社团时序图

3.2.3修改密码模块

如图3-2-3所示,用户修改密码时,需要在密码修改页面输入原密码和新密码,通过服务器验证账号和密码信息,确定原密码是否正确,新密码是否一致。 验证后,更新数据库中的数据。 最后,返回提示,成功更改密码。

                                                            图3-2-3 修改密码时序图

4 数据库设计

4.1概念结构设计

如图4-1-1所示,如图 4-5-1 所示,本系统的实体有九个实体,分别是用户、社团、管理员、活动、通知、缴费记录、报名记录、社团类型、社团成员;用户的属性有账户、密码、姓名、性别、地址、电话号码;社团的属性有社团编号、社团名、社团创建时间、社长ID、社团类型和社团人数;活动的属性有活动编号、活动名称、报名时间、报名人数、活动概述、活动详情、发布社团、活动要求。

                                                         图4-1-1系统设计E-R图

4.2逻辑结构设计

用户(ID,用户账号,用户密码,用户姓名,用户性别,用户年龄,联系电话,联系地址,信息状态,创建时间,用户身份)

社团(ID,社团名称,建立时间,社团人数,社团团长,社团编号)

社团类型(ID,类型名称,创建时间)

缴费(ID,缴费时间,缴纳费用,收费社团,缴费用户)

通知(ID,通知标题,通知详情,创建时间,发布时间)

社团成员(ID,入团时间,加入社团,申请用户)

申请(ID,处理状态,申请时间,申请社团,申请用户)

活动(ID,活动名称,活动概述,活动详情,活动要求,报名人数,活动时间,发布社团)

活动日志(ID,报名时间,活动编号,报名用户)

4.3物理设计

表4-3-1 用户表 (users)

字段名

字段类型

长度

主键或外键

字段值约束

对应中文属性名

id

char

13

主键

NOT NULL

记录ID

user_name

varchar

32

NOT NULL

用户账号

pass_word

varchar

32

NOT NULL

用户密码

name

varchar

20

用户姓名

gender

char

2

用户性别

age

int

11

用户年龄

phone

char

11

联系电话

address

varchar

64

联系地址

status

int

11

NOT NULL

信息状态

create_time

char

19

NOT NULL

创建时间

type

int

11

NOT NULL

用户身份

表4-3-2社团表(team)

字段名

字段类型

长度

主键或外键

字段值约束

对应中文属性名

id

char

13

主键

NOT NULL

记录ID

name

varchar

20

NOT NULL

社团名称

create_time

char

10

NOT NULL

创建时间

total

int

11

NOT NULL

社团人数

manager

char

13

NOT NULL

社团团长

type_id

char

13

NOT NULL

社团编号

表4-3-3 社团类型表 (team_types)

字段名

字段类型

长度

主键或外键

字段值约束

对应中文属性名

id

char

13

主键

NOT NULL

记录ID

name

varchar

20

NOT NULL

类型名称

create_time

char

19

NOT NULL

创建时间

表4-3-4 缴费表 (pay_logs)

字段名

字段类型

长度

主键或外键

字段值约束

对应中文属性名

id

char

13

主键

NOT NULL

记录ID

create_time

char

19

NOT NULL

缴费时间

total

double

0

NOT NULL

缴纳费用

team_id

char

13

NOT NULL

收费社团

user_id

char

13

NOT NULL

缴费用户

表4-3-5 通知表(notices)

字段名

字段类型

长度

主键或外键

字段值约束

对应中文属性名

id

char

13

主键

NOT NULL

记录ID

title

varchar

20

NOT NULL

通知标题

detail

varchar

125

NOT NULL

通知详情

create_time

char

10

NOT NULL

创建时间

team_id

char

13

发布社团

表4-3-6 社团成员表 (members)

字段名

字段类型

长度

主键或外键

字段值约束

对应中文属性名

id

char

13

主键

NOT NULL

记录ID

create_time

varchar

20

NOT NULL

入团时间

team_id

varchar

   125

NOT NULL

加入社团

user_id

char

10

NOT NULL

申请用户

表4-3-7 申请表 (apply_logs)

字段名

字段类型

长度

主键或外键

字段值约束

对应中文属性名

id

char

13

主键

NOT NULL

记录ID

status

int

11

NOT NULL

处理状态

create_time

char

19

NOT NULL

申请时间

team_id

char

13

NOT NULL

申请社团

user_id

char

13

NOT NULL

申请用户

表4-3-8 活动表 (activities)

字段名

字段类型

长度

主键或外键

字段值约束

对应中文属性名

id

char

13

主键

NOT NULL

记录ID

name

varchar

20

NOT NULL

活动名称

comm

varchar

60

NOT NULL

活动概述

detail

varchar

256

NOT NULL

活动详情

ask

varchar

125

NOT NULL

活动要求

total

int

11

NOT NULL

报名人数

active_time

char

19

NOT NULL

活动时间

team_id

char

13

NOT NULL

发布社团

表4-3-9 活动日志(active_logs)

字段名

字段类型

长度

主键或外键

字段值约束

对应中文属性名

id

char

13

主键

NOT NULL

记录ID

create_time

char

19

NOT NULL

报名时间

active_id

char

13

NOT NULL

活动编号

user_id

char

13

NOT NULL

报名用户

4.4 数据库实施

4-4-1创建用户表 (users):

CREATE TABLE `users` (

  `id` char(13) NOT NULL COMMENT '记录ID',

  `user_name` varchar(32) NOT NULL COMMENT '用户账号',

  `pass_word` varchar(32) NOT NULL COMMENT '用户密码',

  `name` varchar(20) DEFAULT NULL COMMENT '用户姓名',

  `gender` char(2) DEFAULT NULL COMMENT '用户性别',

  `age` int(11) DEFAULT NULL COMMENT '用户年龄',

  `phone` char(11) DEFAULT NULL COMMENT '联系电话',

  `address` varchar(64) DEFAULT NULL COMMENT '联系地址',

  `status` int(11) NOT NULL COMMENT '信息状态',

  `create_time` char(19) NOT NULL COMMENT '添加时间',

  `type` int(11) NOT NULL COMMENT '用户身份',

  PRIMARY KEY (`id`) ,

) ;

4-4-2创建社团表(team):

CREATE TABLE `teams` (

  `id` char(13) NOT NULL COMMENT '记录ID',

  `name` varchar(20) NOT NULL COMMENT '社团名称',

  `create_time` char(10) NOT NULL COMMENT '建立时间',

  `total` int(11) NOT NULL COMMENT '社团人数',

  `manager` char(13) NOT NULL COMMENT '社团团长',

  `type_id` char(13) NOT NULL COMMENT '社团编号',

  PRIMARY KEY (`id`) ,

);

4-4-3创建社团类型表 (team_types):

CREATE TABLE `team_types` (

  `id` char(13) NOT NULL COMMENT '记录ID',

  `name` varchar(20) NOT NULL COMMENT '类型名称',

  `create_time` char(19) NOT NULL COMMENT '创建时间',

  PRIMARY KEY (`id`),

) ;

4-4-4创建缴费表 (pay_logs):

CREATE TABLE `pay_logs` (

  `id` char(13) NOT NULL COMMENT '记录ID',

  `create_time` char(19) NOT NULL COMMENT '缴费时间',

  `total` double NOT NULL COMMENT '缴纳费用',

  `team_id` char(13) NOT NULL COMMENT '收费社团',

  `user_id` char(13) NOT NULL COMMENT '缴费用户',

  PRIMARY KEY (`id`) ,

) ;

4-4-5创建通知表(notices):

CREATE TABLE `notices` (

  `id` char(13) NOT NULL COMMENT '记录ID',

  `title` varchar(20) NOT NULL COMMENT '通知标题',

  `detail` varchar(125) NOT NULL COMMENT '通知详情',

  `create_time` char(10) NOT NULL COMMENT '发布时间',

  `team_id` char(13) DEFAULT NULL COMMENT '发布社团',

  PRIMARY KEY (`id`) ,

) ;

4-4-6创建社团成员表 (members):

CREATE TABLE `members` (

  `id` char(13) NOT NULL COMMENT '记录ID',

  `create_time` char(19) NOT NULL COMMENT '入团时间',

  `team_id` char(13) NOT NULL COMMENT '加入社团',

  `user_id` char(13) NOT NULL COMMENT '成员ID',

  PRIMARY KEY (`id`),

 );

4-4-7 创建申请表 (apply_logs):

CREATE TABLE `apply_logs` (

  `id` char(13) NOT NULL COMMENT '记录ID',

  `status` int(11) NOT NULL COMMENT '处理状态',

  `create_time` char(19) NOT NULL COMMENT '申请时间',

  `team_id` char(13) NOT NULL COMMENT '申请社团',

  `user_id` char(13) NOT NULL COMMENT '申请用户',

  PRIMARY KEY (`id`) USING BTREE,

  KEY `team_id` (`team_id`) USING BTREE,

  KEY `user_id` (`user_id`) USING BTREE,

);

4-4-8创建活动表 (activities):

CREATE TABLE `activities` (

  `id` char(13) NOT NULL COMMENT '记录ID',

  `name` varchar(20) NOT NULL COMMENT '活动名称',

  `comm` varchar(60) NOT NULL COMMENT '活动概述',

  `detail` varchar(256) NOT NULL COMMENT '活动详情',

  `ask` varchar(125) NOT NULL COMMENT '活动要求',

  `total` int(11) NOT NULL COMMENT '报名人数',

  `active_time` char(19) NOT NULL COMMENT '活动时间',

  `team_id` char(13) NOT NULL COMMENT '发布社团',

  PRIMARY KEY (`id`) ,

) ;

4-4-9创建活动日志表(active_logs):

CREATE TABLE `active_logs` (

  `id` char(13) NOT NULL COMMENT '记录ID',

  `create_time` char(19) NOT NULL COMMENT '报名时间',

  `active_id` char(13) NOT NULL COMMENT '活动编号',

  `user_id` char(13) NOT NULL COMMENT '报名用户',

  PRIMARY KEY (`id`),

);

5 系统实现及测试

5.1系统实现

5.1.1用户注册功能实现:

用户注册功能是通过浏览器渲染一个表单,需要提供用户账号、密码、姓名、年龄、性别、电话、地址等信息。将数据传入后台,通过后台实现对用户的新增。

后台实现主要代码:
public R addInfo(Users users) {
    if(usersService.getUserByUserName(users.getUserName()) == null){
        users.setId(IDUtils.makeIDByCurrent());
        users.setCreateTime(DateUtils.getNowDate());

Log.info("添加系统用户,传入参数:{}", users);
        usersService.add(users);
        return R.success();
    }else{
        return R.warn("用户账号已存在,请重新输入");
    }
}

用户注册界面实现,如图5-1-1所示:

图5-1-1用户注册界面

5.1.2用户登录功能实现:

用户登录需要提供用户名、密码;当用户名和密码匹配时才能登录进入系统。关键(伪)代码如下:
public R login(String userName, String passWord, HttpSession session){
    Log.info("用户登录,用户名:{}, 用户密码:{}", userName, passWord);
    Users user = usersService.getUserByUserName(userName);
    if(user == null) {
       return R.error("输入的用户名不存在");
    }else {
        if(passWord.equals(user.getPassWord().trim())) {
            String token = IDUtils.makeIDByUUID();
            cacheHandle.addUserCache(token, user.getId());
            return R.success("登录成功", token);
        }else {
            return R.error("输入的密码错误");
        }
    }
}

用户登录界面实现,如图5-1-2所示:

图5-1-2用户登录界面

5.1.3用户密码修改功能实现:

通过前端渲染一个对话窗口,验证用户输入的原始密码是否正确,并将新密码传入后台进行密码修改。

后台主要代码:
public R pwd(String token, String password) {
    Log.info("修改用户密码,{}", password);
    Users user = usersService.getOne(cacheHandle.getUserInfoCache(token));
    user.setPassWord(password);
    usersService.update(user);
    return R.success();
}

修改密码界面,如图5-1-3所示:

                                                        图5-1-3修改密码界面

5.1.4系统用户信息修改功能实现:

通过前面的信息查询之后,可对用户信息进行修改。

后台主要代码:
public R updInfo(Users users) {
    Log.info("修改系统用户,传入参数:{}", users);
    usersService.update(users);
    return R.success();
}

修改信息界面,如图5-1-4:

图5-1-4修改信息界面

5.1.5社团类型管理功能实现:

功能可对社团类型进行查询、新增、修改、删除
public R getPageInfos(Long pageIndex, Long pageSize,
                      TeamTypes teamTypes) {
    Log.info("分页查找社团类型,当前页码:{},"
                    + "每页数据量:{}, 模糊查询,附加参数:{}", pageIndex,
            pageSize, teamTypes);
    PageData page = teamTypesService.getPageInfo(pageIndex, pageSize, teamTypes);
    return R.successData(page);
}
@PostMapping("/add")
@ResponseBody
public R addInfo(TeamTypes teamTypes) {
    teamTypes.setId(IDUtils.makeIDByCurrent());
    teamTypes.setCreateTime(DateUtils.getNowDate());
    Log.info("添加社团类型,传入参数:{}", teamTypes);
    teamTypesService.add(teamTypes);
    return R.success();
}
@PostMapping("/upd")
@ResponseBody
public R updInfo(TeamTypes teamTypes) {

    Log.info("修改社团类型,传入参数:{}", teamTypes);
    teamTypesService.update(teamTypes);
    return R.success();
}
@PostMapping("/del")
@ResponseBody
public R delInfo(String id) {
    if(teamTypesService.isRemove(id)){
        Log.info("删除社团类型, ID:{}", id);
        TeamTypes teamTypes = teamTypesService.getOne(id);
        teamTypesService.delete(teamTypes);
        return R.success();
    }else{
       return R.warn("存在关联社团,无法移除");
    }
}

社团类型管理界面,如图:

                                                           图5-1-5社团类型管理界面

5.1.6入团申请功能实现:

用户可以选择喜欢的社团,点击申请,由社长审核后,将用户加入到社团

后台主要代码:

@GetMapping("/info")
@ResponseBody
public R getInfo(String id) {
    Log.info("查找指定申请记录,ID:{}", id);
    ApplyLogs applyLogs = applyLogsService.getOne(id);
    return R.successData(applyLogs);
}
@GetMapping("/page")
@ResponseBody
public R getPageInfos(Long pageIndex, Long pageSize,
                      String token, String teamName, String userName) {
    Users user = usersService.getOne(cacheHandle.getUserInfoCache(token));
    if (user.getType() == 0) {
        Log.info("分页查看全部申请记录,当前页码:{},"
                        + "每页数据量:{}, 模糊查询,团队名称:{},用户姓名:{}", pageIndex,
                pageSize, teamName, userName);
        PageData page = applyLogsService.getPageInfo(pageIndex, pageSize, null, teamName, userName);
        return R.successData(page);
    } else if (user.getType() == 1) {
        Log.info("团队管理员查看申请记录,当前页码:{},"
                        + "每页数据量:{}, 模糊查询,团队名称:{},用户姓名:{}", pageIndex,
                pageSize, teamName, userName);
        PageData page = applyLogsService.getManPageInfo(pageIndex, pageSize, user.getId(), teamName, userName);
        return R.successData(page);
    } else {
        Log.info("分页用户相关申请记录,当前页码:{},"
                        + "每页数据量:{}, 模糊查询,团队名称:{},用户姓名:{}", pageIndex,
                pageSize, teamName, userName);
        PageData page = applyLogsService.getPageInfo(pageIndex, pageSize, user.getId(), teamName, null);
       return R.successData(page);
    }
}
@PostMapping("/add")
@ResponseBody
public R addInfo(String token, ApplyLogs applyLogs) {
    Users user = usersService.getOne(cacheHandle.getUserInfoCache(token));
    if(applyLogsService.isApply(user.getId(), applyLogs.getTeamId())){
        applyLogs.setId(IDUtils.makeIDByCurrent());
        applyLogs.setUserId(user.getId());
        applyLogs.setCreateTime(DateUtils.getNowDate());
        Log.info("添加申请记录,传入参数:{}", applyLogs);
        applyLogsService.add(applyLogs);
        return R.success();
    }else{
        return R.warn("申请审核中,请耐心等待");
    }
}
@PostMapping("/upd")
@ResponseBody
public R updInfo(ApplyLogs applyLogs) {
    Log.info("修改申请记录,传入参数:{}", applyLogs);
    applyLogsService.update(applyLogs);
    return R.success();
}
@PostMapping("/del")
@ResponseBody
public R delInfo(String id) {
    Log.info("删除申请记录, ID:{}", id);
    ApplyLogs applyLogs = applyLogsService.getOne(id);
    applyLogsService.delete(applyLogs);
    return R.success();
}

入团申请管理界面,如图5-1-6所示:

                                                  图5-1-6入团申请管理界面

5.1.7 活动信息功能实现

社长可以发布,删除,修改活动,用户在活动浏览界面可以查看到相关信息。

后台主要代码:
@PostMapping("/add")
@ResponseBody
public R addInfo(Activities activities) {
    activities.setId(IDUtils.makeIDByCurrent());
    Log.info("添加活动信息,传入参数:{}", activities);
    activitiesService.add(activities);
    return R.success();
}
@PostMapping("/upd")
@ResponseBody
public R updInfo(Activities activities) {
    Log.info("修改活动信息,传入参数:{}", activities);
    activitiesService.update(activities);
    return R.success();
}
@PostMapping("/del")
@ResponseBody
public R delInfo(String id) {
    Log.info("删除活动信息, ID:{}", id);
    Activities activities = activitiesService.getOne(id);
    activitiesService.delete(activities);
    return R.success();
}

活动信息浏览界面,如图5-1-7所示

                                                              图5-1-7活动信息浏览界面

5.1.8费用记录功能实现

后台主要代码:

@Controller
@RequestMapping("/payLogs")
public class PayLogsController extends BaseController {
    protected static final Logger Log = LoggerFactory.getLogger(PayLogsController.class);
    @Autowired
    private CacheHandle cacheHandle;
    @Autowired
    private UsersService usersService;
    @Autowired
    private PayLogsService payLogsService;

    @RequestMapping("")
    public String index() {
        return "pages/PayLogs";
    }
    @GetMapping("/info")
    @ResponseBody
    public R getInfo(String id) {
        Log.info("查找指定缴费记录,ID:{}", id);
        PayLogs payLogs = payLogsService.getOne(id);
        return R.successData(payLogs);
    }
       @PostMapping("/add")
    @ResponseBody
    public R addInfo( PayLogs payLogs) {
        payLogs.setId(IDUtils.makeIDByCurrent());
        payLogs.setCreateTime(DateUtils.getNowDate());
        Log.info("添加缴费记录,传入参数:{}", payLogs);
        payLogsService.add(payLogs);
        return R.success();
    }
    @PostMapping("/upd")
    @ResponseBody
    public R updInfo(PayLogs payLogs) {
        Log.info("修改缴费记录,传入参数:{}", payLogs);
        payLogsService.update(payLogs);
        return R.success();
    }
    @PostMapping("/del")
    @ResponseBody
    public R delInfo(String id) {
        Log.info("删除缴费记录, ID:{}", id);
        PayLogs payLogs = payLogsService.getOne(id);
        payLogsService.delete(payLogs);
        return R.success();
    }

费用记录管理界面,如图5-1-8所示:

                                                           图5-1-8费用记录管理

5.2 系统测试

测试工作是系统的最后一个工作环节,用以检验系统的各项功能是否实现及性能是否优良,对软件的质量和使用方便度做出正确评价[5]。软件测试从方法上可以分为黑盒测试和白盒测试,黑盒测试就是把系统封闭起来,从行为出发进行测试,而白盒测试更加注重内部结构,更关注程序编写的正确和规范与否[6]。

;