基于Java+Springboot+Vue校园志愿者管理系统设计与实现

博主介绍全栈开发工程师,精通Web前后端技术、数据库、架构设计。专注于Java技术领域和小程序领域的开发,毕业设计、课程设计项目中主要包括定制化开发、源代码、代码讲解、文档报告辅导、安装调试等

✅文末获取联系✅

目录

1 项目介绍

2 技术选型和工具

3 系统总体设计

3.1系统功能模块设计

3.2 数据库概念结构设计

3.3 数据库逻辑结构设计

4 项目效果图

4.1前台运行效果图

4.2 后台运行效果图

5 代码实现

5.1 后台登录代码

5.2 后台登录注册接口

5.3活动通知相关接口

6 总结

7 源码获取或咨询


1 项目介绍

    随着信息化时代的到来,管理系统都趋向于智能化、系统化,校园志愿者管理系统也不例外,但目前国内仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大,人工管理显然已无法应对时代的变化,而校园志愿者管理系统能很好地解决这一问题,轻松应对校园志愿者平时的工作,既能提高人力物力财力,又能加快工作的效率,取代人工管理是必然趋势。本系统主要包括首页、个人中心、志愿者管理、活动类型管理、活动信息管理、活动报名管理、活动通知管理、活动心得管理、交流反馈、系统管理等功能,通过这些功能的实现基本能够满足日常校园志愿者管理的操作。

2 技术选型和工具

    此系统基于java语言,采用B/S架构模式,使用技术有springboot+mybatis+vue等,数据库使用的是MySQL,采用maven构建工具,可使用开发软件有 idea/eclipse/myeclipse/vscode,都能够正常运行。

3 系统总体设计

3.1系统功能模块设计

     前台功能:用户进入系统可以实现首页、活动信息、活动心得、公告信息、交流反馈、个人中心、后台管理等功能进行操作;

     后台由管理员和志愿者,主要功能包括首页、个人中心、志愿者管理、活动类型管理、活动信息管理、活动报名管理、活动通知管理、活动心得管理、交流反馈、系统管理等功能;

    系统对这些功能进行整合,产生的功能结构图如下:


 3.2 数据库概念结构设计

     数据库的E-R图反映了实体、实体的属性和实体之间的联系。下面是各个实体以及实体的属性。

     活动信息实体属性图如下所示:

活动心得实体属性图如下所示:

活动报名实体属性图如下所示:


 3.3 数据库逻辑结构设计

   活动心得表

活动类型表

活动报名表

4 项目效果图

4.1前台运行效果图

(1)登录注册

 (2)系统首页

 (3)活动信息

 (4)活动信息详情

 (5)报名填表 

(6)个人中心 

(7)活动心得 

4.2 后台运行效果图

 (1)后台登录   

 (2)管理员-活动信息管理

 (3)管理员-活动类型管理

(4)管理员-活动报名管理

(5)管理员-志愿者管理

 (6)志愿者-活动报名管理

(7)志愿者-活动通知管理

(8)志愿者-活动心得管理

5 代码实现

 5.1 后台登录代码

<template>
  <div>
        <div class="container loginIn">

      <div :class="1 == 1 ? 'left' : 1 == 2 ? 'left center' : 'left right'">
        <el-form class="login-form" label-position="left" :label-width="1 == 3 || 1 == 2 ? '30px': '0px'">
          <div class="title-container"><h3 class="title">校园志愿者管理系统登录</h3></div>
          <el-form-item :style='{"padding":"0","boxShadow":"0 0 6px rgba(0,0,0,0)","margin":"0 auto 10px","borderColor":"rgba(0,0,0,0)","backgroundColor":"rgba(255, 255, 255, 1)","borderRadius":"20px","borderWidth":"0","width":"98%","borderStyle":"solid","height":"auto"}' :label="1 == 3 ? '用户名' : ''" :class="'style'+1">
            <span v-if="1 != 3" class="svg-container" style="
			color:#333;
			line-height:30px;
			font-size:14px;
			width:30px;
			padding:0;
			margin:0;
			radius:0;
			border-width:0;
			border-style:solid;
			border-color:rgba(0,0,0,0);
			background-color:rgba(0,0,0,0);
			box-shadow:0 0 6px rgba(0,0,0,0);
			}"><svg-icon icon-class="user" /></span>
            <el-input placeholder="请输入用户名" name="username" type="text" v-model="rulesForm.username" />
          </el-form-item>
          <el-form-item :style='{"padding":"0","boxShadow":"0 0 6px rgba(0,0,0,0)","margin":"0 auto 10px","borderColor":"rgba(0,0,0,0)","backgroundColor":"rgba(255, 255, 255, 1)","borderRadius":"20px","borderWidth":"0","width":"98%","borderStyle":"solid","height":"auto"}' :label="1 == 3 ? '密码' : ''" :class="'style'+1">
            <span v-if="1 != 3" class="svg-container" style="color:#333;
			line-height:30px;
			font-size:14px;
			width:30px;
			padding:0;
			margin:0;
			radius:0;
			border-width:0;
			border-style:solid;
			border-color:rgba(0,0,0,0);
			background-color:rgba(0,0,0,0);
			box-shadow:0 0 6px rgba(0,0,0,0);"><svg-icon icon-class="password" /></span>
            <el-input placeholder="请输入密码" name="password" type="password" v-model="rulesForm.password" />
          </el-form-item>
          <el-form-item v-if="roles.length>1" label="角色" prop="loginInRole" class="role" style="display: flex;align-items: center;">
            <el-radio
              v-for="item in roles"
              v-bind:key="item.roleName"
              v-model="rulesForm.role"
              :label="item.roleName"
            >{{item.roleName}}</el-radio>
          </el-form-item>
          <el-form-item v-if="roles.length==1" label=" " prop="loginInRole" class="role" style="display: flex;align-items: center;">
          </el-form-item>
          <el-button type="primary" @click="login()" class="loginInBt">{{'1' == '1' ? '登录' : 'login'}}</el-button>
          <el-form-item class="setting">
            <!-- <div style="color:${template2.back.login.loginInSettingFontColor}" class="reset">修改密码</div> -->
          </el-form-item>
        </el-form>
      </div>

    </div>
  </div>
</template>

 5.2 后台登录注册接口

/**
	 * 登录
	 */
	@IgnoreAuth
	@PostMapping(value = "/login")
	public R login(String username, String password, String captcha, HttpServletRequest request) {
		UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
		if(user==null || !user.getPassword().equals(password)) {
			return R.error("账号或密码不正确");
		}
		String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
		return R.ok().put("token", token);
	}
	
	/**
	 * 注册
	 */
	@IgnoreAuth
	@PostMapping(value = "/register")
	public R register(@RequestBody UserEntity user){
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }

 5.3活动通知相关接口

/**

* 活动通知

* 后端接口

* @author

* @email

* @date 2022-08-06 08:33:49

*/

@RestController

@RequestMapping("/huodongtongzhi")

public class HuodongtongzhiController {

@Autowired

private HuodongtongzhiService huodongtongzhiService;


/**

* 后端列表

*/

@RequestMapping("/page")

public R page(@RequestParam Map<String, Object> params,HuodongtongzhiEntity huodongtongzhi,

HttpServletRequest request){

String tableName = request.getSession().getAttribute("tableName").toString();

if(tableName.equals("zhiyuanzhe")) {

huodongtongzhi.setXuehao((String)request.getSession().getAttribute("username"));

}

EntityWrapper<HuodongtongzhiEntity> ew = new EntityWrapper<HuodongtongzhiEntity>();

PageUtils page = huodongtongzhiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, huodongtongzhi), params), params));


return R.ok().put("data", page);

}


/**

* 前端列表

*/

@IgnoreAuth

@RequestMapping("/list")

public R list(@RequestParam Map<String, Object> params,HuodongtongzhiEntity huodongtongzhi,

HttpServletRequest request){

EntityWrapper<HuodongtongzhiEntity> ew = new EntityWrapper<HuodongtongzhiEntity>();

PageUtils page = huodongtongzhiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, huodongtongzhi), params), params));

return R.ok().put("data", page);

}


/**

* 列表

*/

@RequestMapping("/lists")

public R list( HuodongtongzhiEntity huodongtongzhi){

EntityWrapper<HuodongtongzhiEntity> ew = new EntityWrapper<HuodongtongzhiEntity>();

ew.allEq(MPUtil.allEQMapPre( huodongtongzhi, "huodongtongzhi"));

return R.ok().put("data", huodongtongzhiService.selectListView(ew));

}


/**

* 查询

*/

@RequestMapping("/query")

public R query(HuodongtongzhiEntity huodongtongzhi){

EntityWrapper< HuodongtongzhiEntity> ew = new EntityWrapper< HuodongtongzhiEntity>();

ew.allEq(MPUtil.allEQMapPre( huodongtongzhi, "huodongtongzhi"));

HuodongtongzhiView huodongtongzhiView = huodongtongzhiService.selectView(ew);

return R.ok("查询活动通知成功").put("data", huodongtongzhiView);

}


/**

* 后端详情

*/

@RequestMapping("/info/{id}")

public R info(@PathVariable("id") Long id){

HuodongtongzhiEntity huodongtongzhi = huodongtongzhiService.selectById(id);

return R.ok().put("data", huodongtongzhi);

}


/**

* 前端详情

*/

@IgnoreAuth

@RequestMapping("/detail/{id}")

public R detail(@PathVariable("id") Long id){

HuodongtongzhiEntity huodongtongzhi = huodongtongzhiService.selectById(id);

return R.ok().put("data", huodongtongzhi);

}





/**

* 后端保存

*/

@RequestMapping("/save")

public R save(@RequestBody HuodongtongzhiEntity huodongtongzhi, HttpServletRequest request){

huodongtongzhi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());

//ValidatorUtils.validateEntity(huodongtongzhi);

huodongtongzhiService.insert(huodongtongzhi);

return R.ok();

}


/**

* 前端保存

*/

@RequestMapping("/add")

public R add(@RequestBody HuodongtongzhiEntity huodongtongzhi, HttpServletRequest request){

huodongtongzhi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());

//ValidatorUtils.validateEntity(huodongtongzhi);

huodongtongzhiService.insert(huodongtongzhi);

return R.ok();

}


/**

* 修改

*/

@RequestMapping("/update")

@Transactional

public R update(@RequestBody HuodongtongzhiEntity huodongtongzhi, HttpServletRequest request){

//ValidatorUtils.validateEntity(huodongtongzhi);

huodongtongzhiService.updateById(huodongtongzhi);//全部更新

return R.ok();

}



/**

* 删除

*/

@RequestMapping("/delete")

public R delete(@RequestBody Long[] ids){

huodongtongzhiService.deleteBatchIds(Arrays.asList(ids));

return R.ok();

}

}

6 总结

   在这次毕业设计中,我使用了springboot框架,选择MySQL作为后台数据库进行访问及修改。虽然在这过程中也遇到了许多的困难,主要有系统逻辑功能不合适和系统设计中出错,当在自己查阅资料无法解决之时,我也会与同学和老师进行请教和讨论,所以在这个过程之中,也让我清楚的认识到自己的不足以及团队的力量才是最大,以后不论是在学习还是工作中,都要融入到集体之中,那样自己才会成长的更快。

   当然,在此次设计中,仍然存在着很多的不足,本来之前我想让其系统可以更为完美的实现角色与权限之间的控制,让系统中每一次的权限操作都进行控制,但是也因为时间的不足以及本人的能力有限,并未完成,我希望自己在以后的学习中继续完善,使这个系统更贴近实际的操作。

7 源码获取或咨询

  关注公众号:计算机编程吧

关注后 会不定时更新学习资源,发放福利哟!

感谢大家能够积极点赞、收藏、关注、评论哦 ,更多推荐:计算机毕业设计

👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻如果大家有任何疑虑,请下方昵称位置详细咨询。 

  • 13
    点赞
  • 117
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

计算机编程吧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值