
前言✨博主介绍一线全栈工程师毕设实战引路人。技术栈覆盖Java、Python、C#、PHP、Node.js及UniApp跨端开发擅长多语言项目落地与架构设计。持续分享毕设源码、开题报告、技术选型心得与职场踩坑经验。用工程化思维写代码帮你把毕设做成作品集。精彩专栏 推荐订阅Java精品项目案例【3000套】Python精品项目案例【500套】uniapp/微信小程序/安卓app【800套】2026-2027届Java毕业设计优质选题汇总百个热门方向完整推荐✅2026-2027届Python毕业设计优质选题汇总百个热门方向完整推荐✅2026-2027届小程序/APP毕业设计优质选题汇总百个热门方向完整推荐✅✅获取源码请私信✅感兴趣的可以先收藏起来还有大家在毕设选题项目以及论文编写等相关问题都可以找我咨询希望帮助更多的人❤️系统实现学生用户功能实现学生用户登录之后进入个人中心在个人中心页面点击环保知识菜单进入知识浏览页面。该页面的文章标题和摘要用列表形式展示用户可以点击任一文章标题查看详细的文章内容。用户查看文章的时候可以收藏或者分享感兴趣的内容。环保知识界面学生用户点击投放站点跳转进入站点查询页面。页面上设置有区域名称和站点名称的搜索框用户输入关键词可以筛选站点。页面下方的卡片列表里显示符合条件的站点信息用户点击卡片上的“查看详情”按钮可以进入站点详情页页面内包含站点位置、开放时间、接收物品等具体信息在底部设置有“投上一票”按钮供用户对站点服务做评价。投放站点界面学生用户点击积分商城菜单就会进入积分商品浏览、兑换页面。页面顶端有商品名、商品类型筛选查找功能。页面主体部分用网格的形式展示可以兑换的商品图片、名称和所需积分。用户点击商品卡片进入商品详情页查看更多的信息确定兑换就点一下兑换按钮系统会核实积分来创建出兑换订单。积分商城界面学生用户在个人中心或者打卡页面上点击“打卡”功能进入打卡提交界面。用户先从下拉列表中选择本次的打卡类型系统就显示出该类型对应的积分。用户选择或者输入打卡日期上传打卡图片填写描述性的打卡内容。信息填写完毕后点击页面底部的提交按钮来完成打卡记录的上传。学生打卡界面管理员功能实现管理员进入后台系统点击左侧菜单区域信息管理进入对应的页面。页面用表格的形式罗列所有的区域信息。管理员可以通过顶部的查询条件筛选区域点击新增按钮可打开表单添加新区域在表格的“操作”列里点修改或删除按钮即可对现有区域信息进行编辑或者移除。区域信息管理界面管理员选择投放站点管理进入站点管理页面。页面结构和区域管理类似显示所有的站点信息列表。管理员通过查询功能找到某个站点点击新增进入创建站点页面填写信息点击列表中修改按钮可以修改站点详情点击删除按钮可以删除无效站点。投放站点管理界面管理员在“回收打卡管理”页面查看学生提交的全部回收打卡申请。列表中清楚地显示出每项申请的详细情况以及目前的审核状态。管理员可以逐条查看申请详情对符合规定的申请点一下回收积分按钮确认发放积分。页面多选管理员可以选多条申请后用批量审核完成积分的审核和发放。回收打卡管理界面管理员进入排行榜单管理页面系统默认显示当前生效的榜单列表。管理员可以按照条件查询历史排行榜或者某段时期的排行榜。点击“新增”按钮来创建一个新的榜单设榜名、周期、规则。在现有的榜单操作列中修改按钮可以对榜单参数进行修改删除按钮可以删除过期的榜单。排行榜单管理界面管理员在积分商城管理页面管理所有的上架商品。页面上列出所有商品的名称、类型、积分、库存。管理员通过查询选择商品然后点按添加按钮进入添加商品信息表单。对需要下架的商品管理员点击对应行的删除按钮商品就会从商城中被移除。积分商城管理界面管理员在积分兑换管理页面处理学生的商品兑换申请。页面用订单列表的形式展示所有的兑换记录包含商品信息、申请人、所需积分、订单状态。管理员可以查询特定订单的详情并对待处理的订单进行审核操作审核通过后系统扣除学生积分并把订单标记成已完成的。积分兑换管理界面区域用户功能实现区域用户登录之后进入区域信息管理页面。该页面显示该人员所负责区域的具体情况。区域用户可以查看该区域的名称、位置、简介等基础信息也可以修改该区域的一些基本信息例如改变区域简介或者对区域进行描述。区域信息管理界面区域用户选择“投放站点管理”进入管理本区域内所有回收站点的页面。区域用户可以查看辖区内每个站点详细的站情和信息可以新增站点来扩大覆盖范围也可以修改已有站点的信息或者对废弃站点进行删除。投放站点管理界面区域用户在自己的管理界面中进入回收打卡管理模块。此模块集中展示所有提交给该用户所辖区域或者站点的回收打卡申请。区域用户可以对每一条申请进行物品及数量的详细信息查询并对这些申请实行审核操作来确定回收行为的有效性。回收打卡管理界面区域用户在回收积分管理页面上查看本区域的积分发放情况。页面提供查询功能用户可以按照学生、日期或者物品种类筛选积分流水记录。区域用户可以查看每一条积分发放的明细处理学生关于积分发放提出的问题或者申诉。回收积分管理界面数据库参考CREATE TABLE article ( article_id mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT 文章id, title varchar(125) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT COMMENT 标题, type varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 0 COMMENT 文章分类, hits int(10) unsigned NOT NULL DEFAULT 0 COMMENT 点击数, praise_len int(11) NOT NULL DEFAULT 0 COMMENT 点赞数, create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间, update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新时间, source varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 来源, url varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 来源地址, tag varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 标签, content longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT 正文, img varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 封面图, description text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT 文章描述, PRIMARY KEY (article_id,title) USING BTREE ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_general_ci COMMENT文章; DROP TABLE IF EXISTS access_token; CREATE TABLE access_token ( token_id int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 临时访问牌ID, token varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT 临时访问牌, info text CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT 信息, maxage int(2) NOT NULL DEFAULT 2 COMMENT 最大寿命默认2小时, create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间, update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新时间, user_id int(11) unsigned NOT NULL DEFAULT 0 COMMENT 用户编号, PRIMARY KEY (token_id) USING BTREE ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_general_ci COMMENT登陆访问时长; DROP TABLE IF EXISTS code_token; CREATE TABLE code_token ( code_token_id int(11) NOT NULL AUTO_INCREMENT COMMENT 验证码ID, token varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL COMMENT 令牌, code varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL COMMENT 验证码, expire_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 失效时间, create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间, update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新时间, PRIMARY KEY (code_token_id) USING BTREE ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_general_ci ROW_FORMATCOMPACT COMMENT验证码; DROP TABLE IF EXISTS collect; CREATE TABLE collect ( collect_id int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 收藏ID, user_id int(10) unsigned NOT NULL DEFAULT 0 COMMENT 收藏人ID, source_table varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT 来源表, source_field varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT 来源字段, source_id int(10) unsigned NOT NULL DEFAULT 0 COMMENT 来源ID, title varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT 标题, img varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT 封面, create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间, update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新时间, PRIMARY KEY (collect_id) USING BTREE ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_general_ci COMMENT收藏;代码参考package com.project.demo.controller; import com.project.demo.entity.DeliverySite; import com.project.demo.service.DeliverySiteService; import com.alibaba.fastjson.JSON; import com.project.demo.controller.base.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springframework.util.StringUtils; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import javax.persistence.Query; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.*; /** * 投放站点(DeliverySite)表控制层 * */ RestController RequestMapping(/delivery_site) public class DeliverySiteController extends BaseControllerDeliverySite, DeliverySiteService { /** * 投放站点对象 */ Autowired public DeliverySiteController(DeliverySiteService service) { setService(service); } PostMapping(/add) Transactional public MapString, Object add(HttpServletRequest request) throws IOException { MapString,Object paramMap service.readBody(request.getReader()); paramMap.entrySet().removeIf(entry - { Object value entry.getValue(); return value instanceof String ((String) value).isEmpty(); }); DeliverySite delivery_site new DeliverySite(); delivery_site.setArea_name(paramMap.get(area_name)null?null:String.valueOf(paramMap.get(area_name))); delivery_site.setRegional_location(paramMap.get(regional_location)null?null:String.valueOf(paramMap.get(regional_location))); delivery_site.setArea_squared(paramMap.get(area_squared)null?null:String.valueOf(paramMap.get(area_squared))); delivery_site.setRegional_users(paramMap.get(regional_users)null?null:Integer.valueOf(String.valueOf(paramMap.get(regional_users)))); delivery_site.setSite_name(paramMap.get(site_name)null?null:String.valueOf(paramMap.get(site_name))); delivery_site.setSite_location(paramMap.get(site_location)null?null:String.valueOf(paramMap.get(site_location))); delivery_site.setCover_image(paramMap.get(cover_image)null?null:String.valueOf(paramMap.get(cover_image))); delivery_site.setSite_introduction(paramMap.get(site_introduction)null?null:String.valueOf(paramMap.get(site_introduction))); delivery_site.setPraise_len(paramMap.get(praise_len)null?null:Integer.valueOf(String.valueOf(paramMap.get(praise_len)))); delivery_site.setCollect_len(paramMap.get(collect_len)null?null:Integer.valueOf(String.valueOf(paramMap.get(collect_len)))); delivery_site.setComment_len(paramMap.get(comment_len)null?null:Integer.valueOf(String.valueOf(paramMap.get(comment_len)))); delivery_site.setRecycling_clock_in_limit_times(paramMap.get(recycling_clock_in_limit_times)null?null:String.valueOf(paramMap.get(recycling_clock_in_limit_times))); delivery_site.setExtra(paramMap.get(extra)null?null:String.valueOf(paramMap.get(extra))); delivery_site.setSource_table(paramMap.get(source_table)null?null:String.valueOf(paramMap.get(source_table))); delivery_site.setSource_id(paramMap.get(source_id)null?null:Integer.valueOf(String.valueOf(paramMap.get(source_id)))); delivery_site.setSource_user_id(paramMap.get(source_user_id)null?null:Integer.valueOf(String.valueOf(paramMap.get(source_user_id)))); delivery_site.setCreate_by(paramMap.get(create_by)null?null:Integer.valueOf(String.valueOf(paramMap.get(create_by)))); this.addEntity(delivery_site); System.out.println(投放站点新增成功); return success(1); } PostMapping(/set) Transactional public MapString, Object set(HttpServletRequest request) throws IOException { MapString,String queryMap service.readQuery(request); MapString,String configMap service.readConfig(request); MapString,Object paramMap service.readBody(request.getReader()); paramMap.entrySet().removeIf(entry - { Object value entry.getValue(); return value instanceof String ((String) value).isEmpty(); }); DeliverySite delivery_site new DeliverySite(); delivery_site.setArea_name(paramMap.get(area_name)null?null:String.valueOf(paramMap.get(area_name))); delivery_site.setRegional_location(paramMap.get(regional_location)null?null:String.valueOf(paramMap.get(regional_location))); delivery_site.setArea_squared(paramMap.get(area_squared)null?null:String.valueOf(paramMap.get(area_squared))); delivery_site.setRegional_users(paramMap.get(regional_users)null?null:Integer.valueOf(String.valueOf(paramMap.get(regional_users)))); delivery_site.setSite_name(paramMap.get(site_name)null?null:String.valueOf(paramMap.get(site_name))); delivery_site.setSite_location(paramMap.get(site_location)null?null:String.valueOf(paramMap.get(site_location))); delivery_site.setCover_image(paramMap.get(cover_image)null?null:String.valueOf(paramMap.get(cover_image))); delivery_site.setSite_introduction(paramMap.get(site_introduction)null?null:String.valueOf(paramMap.get(site_introduction))); delivery_site.setPraise_len(paramMap.get(praise_len)null?null:Integer.valueOf(String.valueOf(paramMap.get(praise_len)))); delivery_site.setCollect_len(paramMap.get(collect_len)null?null:Integer.valueOf(String.valueOf(paramMap.get(collect_len)))); delivery_site.setComment_len(paramMap.get(comment_len)null?null:Integer.valueOf(String.valueOf(paramMap.get(comment_len)))); delivery_site.setRecycling_clock_in_limit_times(paramMap.get(recycling_clock_in_limit_times)null?null:String.valueOf(paramMap.get(recycling_clock_in_limit_times))); delivery_site.setSource_table(paramMap.get(source_table)null?null:String.valueOf(paramMap.get(source_table))); delivery_site.setSource_id(paramMap.get(source_id)null?null:Integer.valueOf(String.valueOf(paramMap.get(source_id)))); delivery_site.setSource_user_id(paramMap.get(source_user_id)null?null:Integer.valueOf(String.valueOf(paramMap.get(source_user_id)))); this.setEntity(queryMap,configMap,delivery_site); System.out.println(投放站点修改成功); return success(1); package com.project.demo.controller; import com.project.demo.entity.RecoveryPoints; import com.project.demo.service.RecoveryPointsService; import com.alibaba.fastjson.JSON; import com.project.demo.controller.base.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springframework.util.StringUtils; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import javax.persistence.Query; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.*; /** * 回收积分(RecoveryPoints)表控制层 * */ RestController RequestMapping(/recovery_points) public class RecoveryPointsController extends BaseControllerRecoveryPoints, RecoveryPointsService { /** * 回收积分对象 */ Autowired public RecoveryPointsController(RecoveryPointsService service) { setService(service); } PostMapping(/add) Transactional public MapString, Object add(HttpServletRequest request) throws IOException { MapString,Object paramMap service.readBody(request.getReader()); paramMap.entrySet().removeIf(entry - { Object value entry.getValue(); return value instanceof String ((String) value).isEmpty(); }); RecoveryPoints recovery_points new RecoveryPoints(); recovery_points.setArea_name(paramMap.get(area_name)null?null:String.valueOf(paramMap.get(area_name))); recovery_points.setSite_name(paramMap.get(site_name)null?null:String.valueOf(paramMap.get(site_name))); recovery_points.setRegional_users(paramMap.get(regional_users)null?null:Integer.valueOf(String.valueOf(paramMap.get(regional_users)))); recovery_points.setSite_location(paramMap.get(site_location)null?null:String.valueOf(paramMap.get(site_location))); recovery_points.setStudent_name(paramMap.get(student_name)null?null:String.valueOf(paramMap.get(student_name))); recovery_points.setStudent_number(paramMap.get(student_number)null?null:String.valueOf(paramMap.get(student_number))); recovery_points.setStudent_users(paramMap.get(student_users)null?null:Integer.valueOf(String.valueOf(paramMap.get(student_users)))); if (paramMap.get(recycling_date ) ! null !StringUtils.isEmpty(String.valueOf(paramMap.get(recycling_date )))) { String timStr String.valueOf(paramMap.get(recycling_date )); recovery_points.setRecycling_date(parseToTimestamp(timStr)); } else { recovery_points.setRecycling_date(null); } recovery_points.setRecycled_quantity(paramMap.get(recycled_quantity)null?null:Double.valueOf(String.valueOf(paramMap.get(recycled_quantity)))); recovery_points.setRecycled_items(paramMap.get(recycled_items)null?null:String.valueOf(paramMap.get(recycled_items))); recovery_points.setRecovery_points(paramMap.get(recovery_points)null?null:Double.valueOf(String.valueOf(paramMap.get(recovery_points)))); recovery_points.setExtra(paramMap.get(extra)null?null:String.valueOf(paramMap.get(extra))); recovery_points.setSource_table(paramMap.get(source_table)null?null:String.valueOf(paramMap.get(source_table))); recovery_points.setSource_id(paramMap.get(source_id)null?null:Integer.valueOf(String.valueOf(paramMap.get(source_id)))); recovery_points.setSource_user_id(paramMap.get(source_user_id)null?null:Integer.valueOf(String.valueOf(paramMap.get(source_user_id)))); recovery_points.setCreate_by(paramMap.get(create_by)null?null:Integer.valueOf(String.valueOf(paramMap.get(create_by)))); this.addEntity(recovery_points); String sql SELECT MAX(recovery_points_id) AS max FROM recovery_points; Integer max service.selectBaseCount(sql); sql UPDATE student_users INNER JOIN recovery_points ON student_users.student_numberrecovery_points.student_number SET student_users.student_points student_users.student_points recovery_points.recovery_points WHERE recovery_points.recovery_points_idmax; service.updateBaseSql(sql); System.out.println(回收积分新增成功); return success(1); } PostMapping(/set) Transactional public MapString, Object set(HttpServletRequest request) throws IOException { MapString,String queryMap service.readQuery(request); MapString,String configMap service.readConfig(request); MapString,Object paramMap service.readBody(request.getReader()); paramMap.entrySet().removeIf(entry - { Object value entry.getValue(); return value instanceof String ((String) value).isEmpty(); }); RecoveryPoints recovery_points new RecoveryPoints(); recovery_points.setArea_name(paramMap.get(area_name)null?null:String.valueOf(paramMap.get(area_name))); recovery_points.setSite_name(paramMap.get(site_name)null?null:String.valueOf(paramMap.get(site_name))); recovery_points.setRegional_users(paramMap.get(regional_users)null?null:Integer.valueOf(String.valueOf(paramMap.get(regional_users)))); recovery_points.setSite_location(paramMap.get(site_location)null?null:String.valueOf(paramMap.get(site_location))); recovery_points.setStudent_name(paramMap.get(student_name)null?null:String.valueOf(paramMap.get(student_name))); recovery_points.setStudent_number(paramMap.get(student_number)null?null:String.valueOf(paramMap.get(student_number))); recovery_points.setStudent_users(paramMap.get(student_users)null?null:Integer.valueOf(String.valueOf(paramMap.get(student_users)))); if (paramMap.get(recycling_date ) ! null !StringUtils.isEmpty(String.valueOf(paramMap.get(recycling_date )))) { String timStr String.valueOf(paramMap.get(recycling_date )); recovery_points.setRecycling_date(parseToTimestamp(timStr)); } else { recovery_points.setRecycling_date(null); } recovery_points.setRecycled_quantity(paramMap.get(recycled_quantity)null?null:Double.valueOf(String.valueOf(paramMap.get(recycled_quantity)))); recovery_points.setRecycled_items(paramMap.get(recycled_items)null?null:String.valueOf(paramMap.get(recycled_items))); recovery_points.setRecovery_points(paramMap.get(recovery_points)null?null:Double.valueOf(String.valueOf(paramMap.get(recovery_points)))); recovery_points.setSource_table(paramMap.get(source_table)null?null:String.valueOf(paramMap.get(source_table))); recovery_points.setSource_id(paramMap.get(source_id)null?null:Integer.valueOf(String.valueOf(paramMap.get(source_id)))); recovery_points.setSource_user_id(paramMap.get(source_user_id)null?null:Integer.valueOf(String.valueOf(paramMap.get(source_user_id)))); this.setEntity(queryMap,configMap,recovery_points); System.out.println(回收积分修改成功); return success(1);前端基于Vue.js框架构建用户界面使用HTML5、CSS3和JavaScript实现页面结构与交互逻辑通过Vue Router管理路由Vuex或Pinia维护全局状态。采用Element UI或Vant组件库快速搭建界面Axios封装HTTP请求实现与后端的数据通信。后端基于springboot框架搭建遵循Controller-Service-Mapper三层架构。Controller层接收前端请求并校验参数Service层处理核心业务逻辑Mapper层通过MyBatis或MyBatis-Plus完成数据库操作。使用Spring Security或Shiro结合JWT实现用户认证与权限控制。数据库采用MySQL存储持久化数据Redis缓存热点信息以提升系统性能。开发工具使用IDEA开发后端VSCode或HBuilderX开发前端Git进行版本管理Maven和npm分别管理前后端依赖。精彩专栏 推荐订阅Java精品项目案例【3000套】Python精品项目案例【500套】uniapp/微信小程序/安卓app【800套】2026-2027届Java毕业设计优质选题汇总百个热门方向完整推荐✅2026-2027届Python毕业设计优质选题汇总百个热门方向完整推荐✅2026-2027届小程序/APP毕业设计优质选题汇总百个热门方向完整推荐✅✅获取源码请私信✅感兴趣的可以先收藏起来还有大家在毕设选题项目以及论文编写等相关问题都可以找我咨询希望帮助更多的人❤️