目录
1.系统的受众说明
2.系统需求分析
2.1 问题分析
2.2 系统需求分析
2.2.1用户和管理员功能模块
2.3 系统流程分析
2.3.1操作流程
2.3.2添加信息流程
2.3.3删除信息流程
2.4 系统E-R图
3.系统概要设计
3.1系统的整体架构
3.2 系统功能结构图
3.3 数据库表
4.系统实现
4.1用户功能模块
4.2 管理功能模块
1.系统的受众说明
1 在校学习的学生,可用于日常学习使用或是毕业设计使用
2 毕业一到两年的开发人员,用于锻炼自己的独立功能模块设计能力,增强代码编写能力。
3 亦可以部署为商化项目使用。
4 需要完整资料及源码,请在文末获取联系方式领取。
2.系统需求分析
2.1 问题分析
校园公益捐助网站需要具有简洁易用的界面设计,能够吸引用户的注意力,提高用户的使用体验。需要具备交易物品的基本功能,包括发布慈善项目、查看捐赠进度信息、进行捐赠等。此外,网站还可以提供其他附加功能,如物品分类、支付等。校园公益捐助网站需要保证用户的信息安全,防止信息泄露和恶意篡改。因此,网站需要采取加密技术、身份验证机制等措施,来保证用户的信息安全。校园公益捐助网站的设计和开发需要考虑网站的可维护性。网站需要提供良好的操作说明,方便用户查看和使用;网站也需要定期更新和维护,以保证网站的正常运。
2.2 系统需求分析
2.2.1用户和管理员功能模块
(1)登录:管理员能够根据账号访问系统。
(2)用户管理:管理员可以添加、删除、修改用户信息,查看用户列表,对用户进行管理和控制。例如,管理员可以查看每个用户的个人信息、交易记录等,并可以对用户的交易行为进行审核和管理。
(3)公益项目管理:管理员可以添加、删除、修改慈善项目信息,查看慈善项目列表,对物品进行管理和控制。例如,管理员可以查看每个慈善项目的详细信息、交易记录等,并可以对慈善项目的交易情况进行审核和管理。
(4)捐赠管理:管理员可以查看交易信息,对交易进行管理和控制。例如,管理员可以查看每笔交易的详细信息,包括交易物品、交易时间、交易金额等,并可以对交易进行审核和管理。
(5)志愿者管理:对志愿者真实名字手机号技能年龄住址性别进行增删改查,管理和控制志愿者信息。
(6)新闻管理:对新闻作者,标题,发布时间增删改查,显示在前端用户端列表。
(8)退出模块:管理员可以在使用完系统后,进行系统退出操作,用于保证系统的安全性,避免自己不在的时候,别人登录系统。
2.3 系统流程分析
2.3.1操作流程
用户想进入系统,首先进入系统登录界面,通过正确的用户名、密码,选择登录类型登录,系统会检查登录信息,信息正确,然后输入相应的功能界面,提示信息错误,登录失败。系统操作流程如图2-1所示。
图2-1操作流程图
2.3.2添加信息流程
添加信息,编号系统使用自动编号模式,没有用户填写,用户添加信息输入信息,系统将自动确认的信息和数据,验证的成功是有效的信息添加到数据库,信息无效,重新输入信息。添加信息流程如图2-2所示。
图2-2添加信息流程图
2.3.3删除信息流程
用户选择要删除的信息并单击Delete按钮。系统提示是否删除信息。如果用户想要删除信息,系统将删除信息。系统数据库删除信息。删除信息流程图如图2-3所示。
图2-3删除信息流程图
2.4 系统E-R图
管理员信息表是用于存储管理员的基本信息,例如用ID、户名、密码等。
管理员实体属性如图2-4。
图2-4 管理员实体
(2)用户信息表是用于存储用户的基本信息,例如用户名、密码、注册时间和状态等。
用户实体属性如图2-5。
图2-5 用户实体
(3)捐赠项目表是用于描述收货人收货地址的基本信息,例如编号、手机号和默认地址等。
地址表属性如图2-6。
图2-6 捐赠项目实体
3.系统概要设计
3.1系统的整体架构
该系统的整体架构如下图3-1所示。
图3-1 系统整体架构图
通过对该系统的分析之后,该系统的整体架构可以分为如下五层:Pojo层、Dao层、Service层、Controller层、View层。
Pojo层其实就是对应着数据库中的实体类,并且实体类中的属性名与数据库属性名一样,在数据库没有访问的时候,Pojo层中的实体类有Spring提供的容器进行管理。
Dao层是数据访问层,和数据库联系比较密切。MyBaits提供了接口式编程方式,只需创建接口和在对应的配置文件中编写SQL语句[9],即可实现对数据库的增删改查。
Service层是业务层,用来处理具体的业务逻辑,并且不需要考虑其具体实现,通过调用Dao层对象实现业务逻辑的编写。
Controller层是控制层,该层和View层联系特别紧密,需要对前台用户发送的请求进行处理和页面跳转,并且需要调用Service层的对象。
View层是视图层,主要用来展示前台JSP页面,可以向后台发送请求,并且可以对后台返回的数据和结果进行响应。
3.2 系统功能结构图
校园公益捐助平台主要分为两个大模块:项目发布和公益捐助。用户具有查看网站首页和注册的功能查看图片集。没有注册之前游客只能观看首页并不能进行捐赠更改个人信息等多种权限操作。已经注册的用户可以更改自己的个人信息和选择合适的项目捐赠,并且可以申请成为志愿者。管理员具有登录、用户管理、慈善项目管理、捐助进度管理和退出模块等功能。其可以在用户管理模块内对系统中的用户进行相应的管理。慈善项目信息模块内可以对上线的物品进行相应的处理,如果违规则可以进行下架处理。捐助进度管理模块内可以对用户进行购买的捐助进度进行相应的管理等。并且管理员在不使用系统时,可以选择退出系统等操作。如图3-2校园公益捐助平台。
图3-2校园公益捐助平台模块
3.3 数据库表
(1)用户表
管理员表包含着其个人的基本资料信息,如编号、密码和管理员名字等字段,其具体展示见表3-1。
表3-1 用户表
字段名 | 数据类型 | 描述 |
id | int(11) | 编号 |
user_name | int(11) | 用户名 |
password | varchar(20) | 密码 |
type | varchar(32) | 用户类型 |
nick_name | varchar(32) | 真实名称 |
sex | varchar(32) | 性别 |
address | varchar(32) | 地址 |
occupation | varchar(32) | 职业 |
personal_introduction | varchar(32) | 个人介绍 |
phone_number | varchar(32) | 手机号 |
| varchar(32) | 邮箱 |
avatar | varchar(32) | 头像 |
create_time | datetime | 创建时间 |
del_flag | Int | 删除标记 |
(2)学生表
学生表包含着其个人基本信息资料,如账号、登录密码和注册时间等字段,其具体展示见表3-2。
表3-2 志愿者表
字段名 | 数据类型 | 描述 |
id | int(11) | 编号 |
name | varchar(20) | 志愿者真实名字 |
address | varchar(32) | 地址 |
sex | varchar(20) | 性别 |
age | varchar(20) | 年龄 |
| date | 邮件 |
phone_number | int(1) | 手机号 |
skill_id | int(1) | 技能id |
create_time | datetime | 创建时间 |
del_flag | int(1) | 删除标志 |
(3)志愿者专业技能表
学生表包含着其基本资料,如收货人姓名、收货人手机号和详细地址等字段。其具体展示见表3-3。
表3-3 志愿者专业技能表
字段名 | 数据类型 | 描述 |
id | int(11) | 编号 |
skill_name | varchar(20) | 技能名称 |
description | varchar(32) | 描述 |
del_flag | varchar(20) | 删除标志 |
(4)慈善项目表
消息表是用于展示用户给相关物品的评价信息表,包含留言内容、留言时间和所回复的留言等字段,其具体展示见表3-4。
表3-4 慈善项目表
字段名 | 数据类型 | 描述 |
id | int(11) | 编号 |
title | varchar(20) | 项目标题 |
summary | varchar(20) | 项目摘要 |
author | date | 项目发布者 |
task | varchar(20) | 项目任务目标 |
background | varchar(20) | 项目背景 |
raised | varchar(20) | 已筹集资金 |
goal | varchar(20) | 目标资金 |
type | varchar(20) | 项目分类(1普通公益2特色公益3热门活动) |
bigPic | varchar(20) | 项目展示大图路径 |
smallPic | varchar(20) | 项目展示小图路径 |
create_time | Datetime | 项目发布时间 |
del_flag | Int | 删除标志(0表示未删除1表示已删除) |
(5)评论表
收藏表是用于展示学生对喜欢的物品进行收藏等信息,包含收藏时间、用户主键和闲置主键等字段,其具体展示见表3-5。
表3-5评论表
字段名 | 数据类型 | 描述 |
id | int(11) | 编号 |
news_id | date | 新闻id |
root_id | int(11) | 根评论id |
content | int(11) | 评论内容 |
to_comment_user_id | int(11) | 评论人id |
to_comment_id | int(11) | 评论id |
create_time | Date | 创建时间 |
create_by | varchar(20) | 创建人 |
del_flag | int(1) | 删除标志 |
- 捐赠表
慈善项目表是用于展示学生上传的慈善项目等信息,包含闲置慈善项目名称、详情和图集等字段,其具体展示见表3-6。
表3-6 捐赠表
字段名 | 数据类型 | 描述 |
id | int(11) | 编号 |
trade_no | varchar(20) | 交易捐助进度号 |
amount | varchar(255) | 数额 |
user_id | varchar(20) | 用户id |
message | double(20,0) | 信息 |
cause_id | varchar(50) | 项目id |
create_time | varchar(50) | 创建时间 |
status | int(1) | 状态 |
del_flag | int(11) | 删除标志 |
(7)新闻表
捐助进度表是用于展示学生卖出慈善项目的捐助进度相关的物品信息,包含捐助进度总价、支付方式和支付时间等字段,其具体展示见表3-7。
表3-7 新闻表
字段名 | 数据类型 | 描述 |
id | int(11) | 编号 |
title | varchar(50) | 标题 |
content | varchar(50) | 内容 |
summary | varchar(50) | 摘要 |
type | double(20,0) | 类型 |
author | int(11) | 作者 |
create_time | varchar(50) | 创建时间 |
comments_number | Date | 评论数量 |
type | int(4) | 类型 |
bigPic | int(4) | 大图路径 |
del_flag | int(4) | 是否删除 |
4.系统实现
4.1用户功能模块
系统管理员和用户有不同的登录界面,当运行项目成功后,在浏览器输入
后台:http://localhost:8081/ 初始可用账号 admin 123456前台:http://localhost:8081/home/index/index初始可用账号 111 111 即可进入。其具体展现见图4-1-1。
图4-1 学生登录界面
@PostMapping("/userLogin")
public ResponseEntity<User> userLogin(@RequestParam("username") String username, @RequestParam("password") String password, HttpSession httpSession){
ResponseEntity<User> responseEntity = null;
if(username.equals("") || password.equals("")){
responseEntity = ResponseEntity.failed(TheCharityConst.MESSAGE_LOGIN_INCOMPLETE_INFORMATION);
}else{
//调用service验证账号密码查找出user对象
User user = userServiceImpl.userLogin(username,password);
if(user != null){
//登录成功
//存入session并响应数据
httpSession.setAttribute(TheCharityConst.ATTR_NAME_LOGIN_USER, user);
responseEntity = ResponseEntity.successWithData(user);
}else{
//登录失败
responseEntity = ResponseEntity.failed(TheCharityConst.MESSAGE_LOGIN_FAILED);
}
}
return responseEntity;
}
图4-1-1 注册界面
//注册用户
@PostMapping("/register")
public ResponseEntity register(User user){
//直接调用service的注册方法
return userServiceImpl.userRegister(user);
}
图4-1-2个人信息界面
图4-1-3修改个人信息界面
@PostMapping("/updateUser")
@SystemLog(businessName = "更新用户个人信息")
public ResponseEntity<User> updateUser(User user){
ResponseEntity responseEntity = null;
//直接调用service的方法
boolean flag = userServiceImpl.updateById(user);
if(flag){
responseEntity = ResponseEntity.successWithData(userServiceImpl.getById(user.getId()));
}else{
responseEntity = ResponseEntity.failed(TheCharityConst.MESSAGE_SYSTEM_ERROR);
}
return responseEntity;
}
图4-1-4图片集
图4-1-5慈善项目
/***
* 获取近期慈善项目
* @return
*/
@GetMapping("/getRecentlyCauses")
public ResponseEntity<List<Causes>> getRecentlyCauses(){
//直接调用service的方法
return causesServiceImpl.getRecentlyCauses();
}
/***
* 获取特色公益
* @return
*/
@GetMapping("/getFeatureCauses")
public ResponseEntity<List<Causes>> getFeatureCauses(){
return causesServiceImpl.getFeatureCauses();
}
/***
* 获取正在进行的公益
* @return
*/
@GetMapping("getGoingCauses")
public ResponseEntity<List<Causes>> getGoingCauses(){
return causesServiceImpl.getGoingCauses();
}
/***
* 获取热门公益
* @return
*/
@GetMapping("getHotCauses")
public ResponseEntity<List<Causes>> getHotCauses(){
return causesServiceImpl.getHotCauses();
}
/***
* 获取已经筹集的钱
* @return
*/
@GetMapping("getRaisedMoney")
public ResponseEntity<Integer> getRaisedMoney(){
return causesServiceImpl.getRaisedMoney();
}
/***
* 获取已完成的项目数
* @return
*/
@GetMapping("getFinishedCauseNum")
public ResponseEntity<Integer> getFinishedCauseNum(){
return causesServiceImpl.getFinishedCauseNum();
}
/***
* 分页查询慈善项目
* @param pageNum
* @param pageSize
* @param keyword
* @return
*/
@PostMapping("getCausesPage")
public ResponseEntity<Page<Causes>> getCausesPage(@RequestParam(value = "pageNum",defaultValue = "1") Integer pageNum,
@RequestParam(value = "pageSize",defaultValue = "3") Integer pageSize,
@RequestParam(value = "keyword",defaultValue = "")String keyword){
return causesServiceImpl.getCausesPage(pageNum,pageSize,keyword);
}
图4-1-6成为志愿者
4.2 管理功能模块
/***
* 分页查询志愿者
* @param pageNum
* @param pageSize
* @param keyword
* @return
*/
@PostMapping("getVolunteerPage")
public ResponseEntity<Page<Volunteer>> getVolunteerPage(@RequestParam(value = "pageNum",defaultValue = "1") Integer pageNum,
@RequestParam(value = "pageSize",defaultValue = "8") Integer pageSize,
@RequestParam(value = "keyword",defaultValue = "")String keyword){
return volunteerServiceImpl.getVolunteerPage(pageNum,pageSize,keyword);
}
图4-2-1志愿者列表
图4-2-2慈善项目列表
/***
* 获取慈善活动的分页
* @param pageNum
* @param pageSize
* @param keyword
* @return
*/
@PostMapping("getCausesPage")
public ResponseEntity<Page<Causes>> getCausesPage(@RequestParam(value = "pageNum",defaultValue = "1") Integer pageNum,
@RequestParam(value = "pageSize",defaultValue = "8") Integer pageSize,
@RequestParam(value = "keyword",defaultValue = "")String keyword){
return causesServiceImpl.getCausesPage(pageNum,pageSize,keyword);
}
图4-2-3捐助数据列表
@PostMapping("getDonationsPage")
public ResponseEntity<Page<Donations>> getDonationsPage(@RequestParam(value = "pageNum",defaultValue = "1") Integer pageNum,
@RequestParam(value = "pageSize",defaultValue = "8") Integer pageSize,
@RequestParam(value = "keyword",defaultValue = "")String keyword){
return donationsServiceImpl.getDonationsPage(pageNum,pageSize,keyword);
}
图4-2-4概览
图4-2-5登陆
/***
* 分页查询
* @param pageNum
* @param pageSize
* @param keyword
* @return
*/
@PostMapping("getNewsPage")
public ResponseEntity<Page<News>> getNewsPage(@RequestParam(value = "pageNum",defaultValue = "1") Integer pageNum,
@RequestParam(value = "pageSize",defaultValue = "8") Integer pageSize,
@RequestParam(value = "keyword",defaultValue = "")String keyword){
return newsServiceImpl.getNewsPage(pageNum,pageSize,keyword);
}
图4-2-5新闻资讯列表