前言
✨博主介绍:一线全栈工程师,毕设实战引路人。技术栈覆盖Java、Python、C#、PHP、Node.js及UniApp跨端开发,擅长多语言项目落地与架构设计。持续分享毕设源码、开题报告、技术选型心得与职场踩坑经验。用工程化思维写代码,帮你把毕设做成作品集。👍👍
👇精彩专栏 推荐订阅👇
海量实战库,源码任你选! 坐拥Java项目2000+套
海量实战库,源码任你选! 坐拥Python项目1000+套
海量实战库,源码任你选! 坐拥小程序/app项目500+套
✅获取源码请私信✅
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以找我咨询,希望帮助更多的人❤️
系统实现
用户功能
车位资讯
用户点击车位资讯,对资讯列表进行查看,对喜欢的资讯也可以进行点赞、收藏、评论。
车位资讯界面
查看车位列表
用户在首页或者个人中心点击之后进入到车位列表页面。页面显示车位信息,可以上下滑动浏览,也可以通过搜索来找到车位。点击任何一个车位卡片都会跳转到该车位的详情页查看。
车位列表界面
车位预约
用户在车位详情页选择车位的规格和选择停车预约时段,然后点击预约就会把车位预约锁定,用户随时可以进行车位预约页面查看自己已经预约的车位信息。
车位预约操作界面
停车记录
用户在个人中心查看停车记录,看自己的停车时长、停车位置、停车编号等信息,以便找车。
停车记录界面
查看停车账单
用户进入“停车账单”页面可以查看所有以前的停车账单。停车账单按照状态分类显示,用户可以点击任一停车账单查看详细信息,用户可以根据停车账单状态进行相应的操作。
停车账单界面
管理员功能
车位分类管理
管理员可以在后台对车位分类进行管理,可以添加、修改、删除等操作。
车位分类管理界面
预约时段管理
管理员在上面的页面上对预约时段进行管理。管理员可以查看车位列表,对车位预约时段进行审核,审核通过的车位推送给用户。管理员也可以编辑、或者删除车位预约时段。
预约时段管理界面
车位信息管理
管理员可以对车位信息进行管理。可以对车位信息列表和添加车位信息。
车位信息管理界面
停车账单列表管理
管理员进入停车账单列表管理页面可以查看系统生成所有的停车账单。管理员根据停车账单号、状态等条件筛选停车账单,点击停车账单可以查看停车账单详情。管理员对停车账单状态流转进行处理。
停车账单列表管理界面
离场记录管理
管理员在此界面中可以对用户的出场信息信息以及缴费离场进行管理。
离场记录管理界面
数据库参考
CREATE TABLE `message_inform` ( `inform_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '通知ID', `user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '通知人ID', `title` varchar(255) DEFAULT NULL COMMENT '标题', `state` varchar(255) DEFAULT NULL COMMENT '状态', `type` varchar(64) DEFAULT NULL COMMENT '分类', `content` varchar(255) 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 (`inform_id`) USING BTREE, KEY `user_id` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='通知记录'; DROP TABLE IF EXISTS `user_group`; CREATE TABLE `user_group` ( `group_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户组ID', `display` smallint(4) unsigned NOT NULL DEFAULT '100' COMMENT '显示顺序', `name` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '名称', `description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '描述', `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', `register` smallint(1) unsigned 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 '更新时间', PRIMARY KEY (`group_id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户组'; DROP TABLE IF EXISTS `article`; 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 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_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 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_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 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=COMPACT COMMENT='验证码';代码参考
package com.project.demo.controller; import com.project.demo.entity.ClassNameificationOfParkingSpaces; import com.project.demo.service.ClassNameificationOfParkingSpacesService; 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.*; /** * 车位分类:(ClassNameificationOfParkingSpaces)表控制层 * */ @RestController @RequestMapping("/class_nameification_of_parking_spaces") public class ClassNameificationOfParkingSpacesController extends BaseController<ClassNameificationOfParkingSpaces, ClassNameificationOfParkingSpacesService> { /** * 车位分类对象 */ @Autowired public ClassNameificationOfParkingSpacesController(ClassNameificationOfParkingSpacesService service) { setService(service); } @PostMapping("/add") @Transactional public Map<String, Object> add(HttpServletRequest request) throws IOException { Map<String,Object> paramMap = service.readBody(request.getReader()); paramMap.entrySet().removeIf(entry -> { Object value = entry.getValue(); return value instanceof String && ((String) value).isEmpty(); }); ClassNameificationOfParkingSpaces class_nameification_of_parking_spaces = new ClassNameificationOfParkingSpaces(); class_nameification_of_parking_spaces.setClass_nameification_of_parking_spaces(paramMap.get("class_nameification_of_parking_spaces")==null?null:String.valueOf(paramMap.get("class_nameification_of_parking_spaces"))); class_nameification_of_parking_spaces.setCreate_by(paramMap.get("create_by")==null?null:Integer.valueOf(String.valueOf(paramMap.get("create_by")))); this.addEntity(class_nameification_of_parking_spaces); System.out.println("车位分类新增成功"); return success(1); } @PostMapping("/set") @Transactional public Map<String, Object> set(HttpServletRequest request) throws IOException { Map<String,String> queryMap = service.readQuery(request); Map<String,String> configMap = service.readConfig(request); Map<String,Object> paramMap = service.readBody(request.getReader()); paramMap.entrySet().removeIf(entry -> { Object value = entry.getValue(); return value instanceof String && ((String) value).isEmpty(); }); ClassNameificationOfParkingSpaces class_nameification_of_parking_spaces = new ClassNameificationOfParkingSpaces(); class_nameification_of_parking_spaces.setClass_nameification_of_parking_spaces(paramMap.get("class_nameification_of_parking_spaces")==null?null:String.valueOf(paramMap.get("class_nameification_of_parking_spaces"))); this.setEntity(queryMap,configMap,class_nameification_of_parking_spaces); System.out.println("车位分类修改成功"); return success(1); } } package com.project.demo.controller; import com.project.demo.entity.DepartingRecord; import com.project.demo.service.DepartingRecordService; 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.*; /** * 离场记录:(DepartingRecord)表控制层 * */ @RestController @RequestMapping("/departing_record") public class DepartingRecordController extends BaseController<DepartingRecord, DepartingRecordService> { /** * 离场记录对象 */ @Autowired public DepartingRecordController(DepartingRecordService service) { setService(service); } @PostMapping("/add") @Transactional public Map<String, Object> add(HttpServletRequest request) throws IOException { Map<String,Object> paramMap = service.readBody(request.getReader()); paramMap.entrySet().removeIf(entry -> { Object value = entry.getValue(); return value instanceof String && ((String) value).isEmpty(); }); DepartingRecord departing_record = new DepartingRecord(); departing_record.setAppointment_number(paramMap.get("appointment_number")==null?null:String.valueOf(paramMap.get("appointment_number"))); departing_record.setName_of_parking_lot(paramMap.get("name_of_parking_lot")==null?null:String.valueOf(paramMap.get("name_of_parking_lot"))); departing_record.setParking_space_number(paramMap.get("parking_space_number")==null?null:String.valueOf(paramMap.get("parking_space_number"))); departing_record.setParking_price(paramMap.get("parking_price")==null?null:Double.valueOf(String.valueOf(paramMap.get("parking_price")))); departing_record.setParking_location(paramMap.get("parking_location")==null?null:String.valueOf(paramMap.get("parking_location"))); departing_record.setOrdinary_user(paramMap.get("ordinary_user")==null?null:Integer.valueOf(String.valueOf(paramMap.get("ordinary_user")))); departing_record.setUser_name(paramMap.get("user_name")==null?null:String.valueOf(paramMap.get("user_name"))); departing_record.setLicense_plate_number(paramMap.get("license_plate_number")==null?null:String.valueOf(paramMap.get("license_plate_number"))); departing_record.setAppointment_date(paramMap.get("appointment_date")==null?null:String.valueOf(paramMap.get("appointment_date"))); departing_record.setAppointment_period(paramMap.get("appointment_period")==null?null:String.valueOf(paramMap.get("appointment_period"))); if (paramMap.get("parking_time" ) != null && !StringUtils.isEmpty(String.valueOf(paramMap.get("parking_time" )))) { String timStr = String.valueOf(paramMap.get("parking_time" )); departing_record.setParking_time(parseToTimestamp(timStr)); } else { departing_record.setParking_time(null); } if (paramMap.get("time_of_departure" ) != null && !StringUtils.isEmpty(String.valueOf(paramMap.get("time_of_departure" )))) { String timStr = String.valueOf(paramMap.get("time_of_departure" )); departing_record.setTime_of_departure(parseToTimestamp(timStr)); } else { departing_record.setTime_of_departure(null); } departing_record.setParking_bill_limit_times(paramMap.get("parking_bill_limit_times")==null?null:String.valueOf(paramMap.get("parking_bill_limit_times"))); departing_record.setExtra(paramMap.get("extra")==null?null:String.valueOf(paramMap.get("extra"))); departing_record.setSource_table(paramMap.get("source_table")==null?null:String.valueOf(paramMap.get("source_table"))); departing_record.setSource_id(paramMap.get("source_id")==null?null:Integer.valueOf(String.valueOf(paramMap.get("source_id")))); departing_record.setSource_user_id(paramMap.get("source_user_id")==null?null:Integer.valueOf(String.valueOf(paramMap.get("source_user_id")))); departing_record.setCreate_by(paramMap.get("create_by")==null?null:Integer.valueOf(String.valueOf(paramMap.get("create_by")))); this.addEntity(departing_record); System.out.println("离场记录新增成功"); return success(1); } @PostMapping("/set") @Transactional public Map<String, Object> set(HttpServletRequest request) throws IOException { Map<String,String> queryMap = service.readQuery(request); Map<String,String> configMap = service.readConfig(request); Map<String,Object> paramMap = service.readBody(request.getReader()); paramMap.entrySet().removeIf(entry -> { Object value = entry.getValue(); return value instanceof String && ((String) value).isEmpty(); }); DepartingRecord departing_record = new DepartingRecord(); departing_record.setAppointment_number(paramMap.get("appointment_number")==null?null:String.valueOf(paramMap.get("appointment_number"))); departing_record.setName_of_parking_lot(paramMap.get("name_of_parking_lot")==null?null:String.valueOf(paramMap.get("name_of_parking_lot"))); departing_record.setParking_space_number(paramMap.get("parking_space_number")==null?null:String.valueOf(paramMap.get("parking_space_number"))); departing_record.setParking_price(paramMap.get("parking_price")==null?null:Double.valueOf(String.valueOf(paramMap.get("parking_price")))); departing_record.setParking_location(paramMap.get("parking_location")==null?null:String.valueOf(paramMap.get("parking_location"))); departing_record.setOrdinary_user(paramMap.get("ordinary_user")==null?null:Integer.valueOf(String.valueOf(paramMap.get("ordinary_user")))); departing_record.setUser_name(paramMap.get("user_name")==null?null:String.valueOf(paramMap.get("user_name"))); departing_record.setLicense_plate_number(paramMap.get("license_plate_number")==null?null:String.valueOf(paramMap.get("license_plate_number"))); departing_record.setAppointment_date(paramMap.get("appointment_date")==null?null:String.valueOf(paramMap.get("appointment_date"))); departing_record.setAppointment_period(paramMap.get("appointment_period")==null?null:String.valueOf(paramMap.get("appointment_period"))); if (paramMap.get("parking_time" ) != null && !StringUtils.isEmpty(String.valueOf(paramMap.get("parking_time" )))) { String timStr = String.valueOf(paramMap.get("parking_time" )); departing_record.setParking_time(parseToTimestamp(timStr)); } else { departing_record.setParking_time(null); } if (paramMap.get("time_of_departure" ) != null && !StringUtils.isEmpty(String.valueOf(paramMap.get("time_of_departure" )))) { String timStr = String.valueOf(paramMap.get("time_of_departure" )); departing_record.setTime_of_departure(parseToTimestamp(timStr)); } else { departing_record.setTime_of_departure(null); } departing_record.setParking_bill_limit_times(paramMap.get("parking_bill_limit_times")==null?null:String.valueOf(paramMap.get("parking_bill_limit_times"))); departing_record.setSource_table(paramMap.get("source_table")==null?null:String.valueOf(paramMap.get("source_table"))); departing_record.setSource_id(paramMap.get("source_id")==null?null:Integer.valueOf(String.valueOf(paramMap.get("source_id")))); departing_record.setSource_user_id(paramMap.get("source_user_id")==null?null:Integer.valueOf(String.valueOf(paramMap.get("source_user_id")))); this.setEntity(queryMap,configMap,departing_record); 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项目2000+套
海量实战库,源码任你选! 坐拥Python项目1000+套
海量实战库,源码任你选! 坐拥小程序/app项目500+套
✅获取源码请私信✅
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以找我咨询,希望帮助更多的人❤️