一.前言
随着我国大学生综合素质的不断提高,将闲置物品捐赠给社会公益组织已经成为普遍行为,如何利用信息技术进行大学生爱心公益捐赠的引导和管理,是有效降低资源浪费和体现社会主义核心价值观优越性的重要课题。该课题基于时下热门的微信小程序技术和MVC开发模式开发爱心公益捐赠平台,在校园中营造勤俭节约,友爱奉献的良好氛围。
💗博主介绍:✌全网粉丝10W+,CSDN全栈领域优质创作者,博客之星、掘金/华为云/阿里云等平台优质作者。
👇🏻 精彩专栏 推荐订阅👇🏻
计算机毕业设计精品项目案例-200套
🌟文末获取源码+数据库+文档🌟
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以和学长沟通,希望帮助更多的人
二.技术环境
jdk版本:1.8 及以上
ide工具:Eclipse或者 IDEA,微信小程序开发工具
数据库: mysql5.7 (必须5.7)
编程语言: Java
java框架:SpringBoot
maven: 3.6.1
详细技术:HTML+CSS+JAVA+SpringBoot+MYSQL+VUE+MAVEN+微信开发工具
三.功能设计
基于爱心公益捐赠平台的设计基于现有的智能手机上运行,可以实现管理员服务端;首页、个人中心、学生管理、贫困儿童管理、捐赠物资管理、捐赠金额管理、勤俭知识管理、互助交流、系统管理等功能。方便学生微信端;首页、贫困儿童、勤俭知识、互助交流、我的等详细的了解及统计分析。根据系统功能需求建立的模块关系图如下图:
系统总体功能结构图如下所示:
四.数据设计
开发一个系统也需要提前设计数据库。这里的数据库是相关数据的集合,存储在一起的这些数据也是按照一定的组织方式进行的。目前,数据库能够服务于多种应用程序,则是源于它存储方式最佳,具备数据冗余率低的优势。虽然数据库为程序提供信息存储服务,但它与程序之间也可以保持较高的独立性。总而言之,数据库经历了很长一段时间的发展,从最初的不为人知,到现在的人尽皆知,其相关技术也越发成熟,同时也拥有着坚实的理论基础。本系统主要实体属性图如下所示:
五.部分效果展示
5.1小程序端实现效果
学生登录通过账号、密码页面,进入到爱心公益捐赠平台小程序主界面,进入到操作界面,进行相对应操作,如下图所示。
学生首页页面可以查看首页、贫困儿童、勤俭知识、互助交流、我的等信息,进行详细操作,如下图所示。
学生进入贫困儿童页面可以查看姓名、年龄、性别、家庭住址、家庭人数、照片、发布日期、点击次数等信息,进行捐赠物资、捐赠金额操作,如下图所示。
学生进入互助交流页面可以填写帖子标题等操作进行发布交流,如下图所示。
学生进入我的页面可以查看贫困儿童、捐赠物资、捐赠金额、勤俭知识、我的收藏管理、在线客服、我要发贴、我的发贴等信息,如下图所示。
5.2后台管理端实现效果
管理员通过爱心捐赠平台进行确认,管理员进入到爱心捐赠平台主界面,管理员进入到操作界面,通过登录窗口进行在线填写自己的账号和密码、角色进行登录,登录成功后进入到系统操作界面进行相应信息的获取,如下图所示。
管理员进入到界面,通过界面的任务大厅,登录成功后进入到系统查看首页、个人中心、学生管理、贫困儿童管理、捐赠物资管理、捐赠金额管理、勤俭知识管理、互助交流、系统管理等功能模块,进行相对应操作,如下图所示。
六.论文截图
七.部分功能代码
export default {
data() {
return {
username: '',
password: '',
codes: [{
num: 1,
color: '#000',
rotate: '10deg',
size: '16px'
}, {
num: 2,
color: '#000',
rotate: '10deg',
size: '16px'
}, {
num: 3,
color: '#000',
rotate: '10deg',
size: '16px'
}, {
num: 4,
color: '#000',
rotate: '10deg',
size: '16px'
}],
options: [
'请选择登录用户类型'
],
optionsValues: [
'',
'xuesheng',
],
index: 0,
roleNum:0
}
},
onLoad() {
let options = ['请选择登录用户类型'];
let menus = menu.list();
this.menuList = menus;
for(let i=0;i<this.menuList.length;i++){
if(this.menuList[i].hasFrontLogin=='是'){
options.push(this.menuList[i].roleName);
this.roleNum++;
}
}
if(this.roleNum==1) {
this.index = 1;
}
this.options = options;
this.randomString(4)
this.styleChange()
},
methods: {
randomString(len = 4) {
const chars = [
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2',
'3', '4', '5', '6', '7', '8', '9'
]
const colors = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']
const sizes = ['28', '30', '32', '34', '36']
for (let i = 0; i < len; i++) {
// 随机验证码
const key = Math.floor(Math.random() * chars.length)
this.codes[i].num = chars[key]
// 随机验证码颜色
let code = '#'
for (let j = 0; j < 6; j++) {
const key = Math.floor(Math.random() * colors.length)
code += colors[key]
}
this.codes[i].color = code
// 随机验证码方向
let rotate = Math.floor(Math.random() * 30)
const plus = Math.floor(Math.random() * 2)
if (plus == 1) rotate = '-' + rotate
this.codes[i].rotate = 'rotate(' + rotate + 'deg)'
// 随机验证码字体大小
const size = Math.floor(Math.random() * sizes.length)
this.codes[i].size = sizes[size] +'rpx'
}
},
styleChange() {
this.$nextTick(()=>{
// document.querySelectorAll('.uni-input .uni-input-input').forEach(el=>{
// el.style.backgroundColor = this.loginFrom.content.input.backgroundColor
// })
})
},
onRegisterTap(tableName) {
uni.setStorageSync("loginTable", tableName);
this.$utils.jump('../register/register')
},
onForgetTap() {
this.$utils.jump('../forget/forget')
},
async onLoginTap() {
if (!this.optionsValues[this.index]) {
this.$utils.msg('请选择登陆用户类型')
return
}
let res = await this.$api.login(`${this.optionsValues[this.index]}`, {
username: this.username,
password: this.password
});
uni.setStorageSync("token", res.token);
uni.setStorageSync("nickname",this.username);
uni.setStorageSync("nowTable", `${this.optionsValues[this.index]}`);
res = await this.$api.session(`${this.optionsValues[this.index]}`);
// 保存用户id
uni.setStorageSync("userid", res.data.id);
if(res.data.vip) {
uni.setStorageSync("vip", res.data.vip);
}
uni.setStorageSync("role", `${this.options[this.index]}`);
this.$utils.tab('../index/index');
},
optionsChange(e) {
this.index = e.target.value
}
}
}