基于Java+SpringBoot+vue+node.js实现自行车租赁平台管理系统
🍅 作者簡介:CSDN特邀作者?、博客專家?、java領域優質創作者💪
🍅關注公眾號【java李楊勇】? 簡歷模板、學習資料、面試題庫等都給你💪
🍅文末獲取源碼聯系🍅
🍅新星計劃·第三季【Java】賽道的報名入口!下一個新星就是你🍅
前言介紹:
? ? ? ? ? 隨著社會的發展,社會的各行各業都在利用信息化時代的優勢。計算機的優勢和普及使得各種信息系統的開發成為必需。自行車在線租賃管理系統,主要的模塊包括首頁、個人中心、用戶管理、會員管理、自行車租賃管理、租賃管理、會員租賃管理、還車管理、會員還車管理、分類欄管理、留言板管理、系統管理等功能。系統中管理員主要是為了安全有效地存儲和管理各類信息,還可以對系統進行管理與更新維護等操作,并且對后臺有相應的操作權限。要想實現自行車在線租賃管理系統的各項功能,需要后臺數據庫的大力支持。管理員驗證注冊信息,收集的信息,并由此分析得出的關聯信息等大量的數據都由數據庫管理。本文中數據庫服務器端采用了Mysql作為后臺數據庫,使Web與數據庫緊密聯系起來。在設計過程中,充分保證了系統代碼的良好可讀性、實用性、易擴展性、通用性、便于后期維護、操作方便以及頁面簡潔等特點。本系統的開發使獲取自行車在線租賃管理系統信息能夠更加方便快捷,同時也使自行車在線租賃管理系統管理信息變的更加系統化、有序化。系統界面較友好,易于操作。
功能設計:
? ? ? ? ?自行車在線租賃管理系統基于Web服務模式,是一個適用于Internet環境下的模型結構。只要用戶能連上Internet,便可以在不受時間、地點的限制來使用這個系統。自行車在線租賃管理系統工作原理圖,如圖所示:
? ? ? ? ? ? ? ? ??
? ? ? ? 系統架構圖屬于系統設計階段,系統架構圖只是這個階段一個產物,系統的總體架構決定了整個系統的模式,是系統的基礎。自行車在線租賃管理系統的整體結構設計如圖所示。
功能截圖:
首頁登錄注冊:
?用戶端:自行車在線租賃管理系統,在系統的首頁可以查看首頁、自行車租賃、活動、留言反饋、個人中心、后臺管理、在線客服等信息進行詳細操作
?自行車租賃,在自行車租賃頁面中可以查看自行車編號、品牌、分類、規格、簡介、時價、會員時價、點擊次數、圖片等信息,并進行租賃、會員租賃操作。
?自行車活動
?
留言反饋:
?個人中心:
管理員端:?管理員登錄進入系統之后,就可以對所有的信息進行查看,可以查看到首頁、個人中心、用戶管理、會員管理、自行車租賃管理、租賃管理、會員租賃管理、還車管理、會員還車管理、分類欄管理、留言板管理、系統管理等,并且還可以對其進行相應的操作管理
?用戶信息:
?自行車租賃管理:
?還車管理:
?分類專欄:
?留言板和回復:
?首頁輪播圖:
?活動管理:
關鍵代碼:
后端登錄controller:
/*** 登錄相關*/ @RequestMapping("users") @RestController public class UserController{@Autowiredprivate UserService userService;@Autowiredprivate TokenService tokenService;/*** 登錄*/@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){ // ValidatorUtils.validateEntity(user);if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {return R.error("用戶已存在");}userService.insert(user);return R.ok();}/*** 退出*/@GetMapping(value = "logout")public R logout(HttpServletRequest request) {request.getSession().invalidate();return R.ok("退出成功");}/*** 密碼重置*/@IgnoreAuth@RequestMapping(value = "/resetPass")public R resetPass(String username, HttpServletRequest request){UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));if(user==null) {return R.error("賬號不存在");}user.setPassword("123456");userService.update(user,null);return R.ok("密碼已重置為:123456");}/*** 列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params,UserEntity user){EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));return R.ok().put("data", page);}/*** 列表*/@RequestMapping("/list")public R list( UserEntity user){EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();ew.allEq(MPUtil.allEQMapPre( user, "user")); return R.ok().put("data", userService.selectListView(ew));}/*** 信息*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") String id){UserEntity user = userService.selectById(id);return R.ok().put("data", user);}/*** 獲取用戶的session用戶信息*/@RequestMapping("/session")public R getCurrUser(HttpServletRequest request){Long id = (Long)request.getSession().getAttribute("userId");UserEntity user = userService.selectById(id);return R.ok().put("data", user);}/*** 保存*/@PostMapping("/save")public R save(@RequestBody UserEntity user){ // ValidatorUtils.validateEntity(user);if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {return R.error("用戶已存在");}userService.insert(user);return R.ok();}/*** 修改*/@RequestMapping("/update")public R update(@RequestBody UserEntity user){ // ValidatorUtils.validateEntity(user);UserEntity u = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername()));if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {return R.error("用戶名已存在。");}userService.updateById(user);//全部更新return R.ok();}/*** 刪除*/@RequestMapping("/delete")public R delete(@RequestBody Long[] ids){userService.deleteBatchIds(Arrays.asList(ids));return R.ok();} }前端登錄vue代碼:?
<template><div><div class="container loginIn" style="backgroundImage: url(http://localhost:8080/springbootl5za3/upload/login_bg.png)"><div :class="2 == 1 ? 'left' : 2 == 2 ? 'left center' : 'left right'" style="backgroundColor: rgba(221, 239, 223, 0.3)"><el-form class="login-form" label-position="left" :label-width="1 == 3 ? '56px' : '0px'"><div class="title-container"><h3 class="title" style="color: rgba(86, 188, 225, 0.89)">自行車在線租賃管理系統登錄</h3></div><el-form-item :label="1 == 3 ? '用戶名' : ''" :class="'style'+1"><span v-if="1 != 3" class="svg-container" style="color:rgba(16, 15, 15, 0.97);line-height:44px"><svg-icon icon-class="user" /></span><el-input placeholder="請輸入用戶名" name="username" type="text" v-model="rulesForm.username" /></el-form-item><el-form-item :label="1 == 3 ? '密碼' : ''" :class="'style'+1"><span v-if="1 != 3" class="svg-container" style="color:rgba(16, 15, 15, 0.97);line-height:44px"><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="0 == '1'" class="code" :label="1 == 3 ? '驗證碼' : ''" :class="'style'+1"><span v-if="1 != 3" class="svg-container" style="color:rgba(16, 15, 15, 0.97);line-height:44px"><svg-icon icon-class="code" /></span><el-input placeholder="請輸入驗證碼" name="code" type="text" v-model="rulesForm.code" /><div class="getCodeBt" @click="getRandCode(4)" style="height:44px;line-height:44px"><span v-for="(item, index) in codes" :key="index" :style="{color:item.color,transform:item.rotate,fontSize:item.size}">{{ item.num }}</span></div></el-form-item><el-form-item label="角色" prop="loginInRole" class="role"><el-radiov-for="item in menus"v-if="item.hasBackLogin=='是'"v-bind:key="item.roleName"v-model="rulesForm.role":label="item.roleName">{{item.roleName}}</el-radio></el-form-item><el-button type="primary" @click="login()" class="loginInBt" style="padding:0;font-size:16px;border-radius:20px;height:44px;line-height:44px;width:100%;backgroundColor:rgba(64, 158, 255, 1); borderColor:rgba(64, 158, 255, 1); color:rgba(17, 17, 17, 1)">{{'1' == '1' ? '登錄' : 'login'}}</el-button><el-form-item class="setting"><!-- <div style="color:rgba(10, 10, 10, 1)" class="reset">修改密碼</div> --></el-form-item></el-form></div></div></div> </template> <script> import menu from "@/utils/menu"; export default {data() {return {rulesForm: {username: "",password: "",role: "",code: '',},methods: {setInputColor(){this.$nextTick(()=>{document.querySelectorAll('.loginIn .el-input__inner').forEach(el=>{el.style.backgroundColor = "rgba(255, 255, 255, 1)"el.style.color = "rgba(51, 51, 51, 1)"el.style.height = "44px"el.style.lineHeight = "44px"el.style.borderRadius = "20px"})document.querySelectorAll('.loginIn .style3 .el-form-item__label').forEach(el=>{el.style.height = "44px"el.style.lineHeight = "44px"})document.querySelectorAll('.loginIn .el-form-item__label').forEach(el=>{el.style.color = "rgba(16, 15, 15, 0.97)"})setTimeout(()=>{document.querySelectorAll('.loginIn .role .el-radio__label').forEach(el=>{el.style.color = "rgba(6, 5, 5, 0.97)"})},350)})},register(tableName){this.$storage.set("loginTable", tableName);this.$router.push({path:'/register'})},// 登陸login() {let code = ''for(let i in this.codes) {code += this.codes[i].num}if ('0' == '1' && !this.rulesForm.code) {this.$message.error("請輸入驗證碼");return;}if ('0' == '1' && this.rulesForm.code.toLowerCase() != code.toLowerCase()) {this.$message.error("驗證碼輸入有誤");this.getRandCode()return;}if (!this.rulesForm.username) {this.$message.error("請輸入用戶名");return;}if (!this.rulesForm.password) {this.$message.error("請輸入密碼");return;}if (!this.rulesForm.role) {this.$message.error("請選擇角色");return;}let menus = this.menus;for (let i = 0; i < menus.length; i++) {if (menus[i].roleName == this.rulesForm.role) {this.tableName = menus[i].tableName;}}this.$http({url: `${this.tableName}/login?username=${this.rulesForm.username}&password=${this.rulesForm.password}`,method: "post"}).then(({ data }) => {if (data && data.code === 0) {this.$storage.set("Token", data.token);this.$storage.set("role", this.rulesForm.role);this.$storage.set("sessionTable", this.tableName);this.$storage.set("adminName", this.rulesForm.username);this.$router.replace({ path: "/index/" });} else {this.$message.error(data.msg);}});},getRandCode(len = 4){this.randomString(len)},.center {position: absolute;left: 50%;top: 50%;width: 360px;transform: translate3d(-50%,-50%,0);height: 446px;border-radius: 8px;}.code {.el-form-item__content {position: relative;.getCodeBt {position: absolute;right: 0;top: 0;line-height: 40px;width: 100px;background-color: rgba(51,51,51,0.4);color: #fff;text-align: center;border-radius: 0 4px 4px 0;height: 40px;overflow: hidden;span {padding: 0 5px;display: inline-block;font-size: 16px;font-weight: 600;}}.el-input {& /deep/ input {padding: 0 130px 0 30px;}}}}.setting {& /deep/ .el-form-item__content {padding: 0 15px;box-sizing: border-box;line-height: 32px;height: 32px;font-size: 14px;color: #999;margin: 0 !important;.register {float: left;width: 50%;}.reset {float: right;width: 50%;text-align: right;}}}.style2 {padding-left: 30px;.svg-container {left: -30px !important;}.el-input {& /deep/ input {padding: 0 15px !important;}}}.code.style2, .code.style3 {.el-input {& /deep/ input {padding: 0 115px 0 15px;}}}}} </style>數據庫設計:
? ? ?將數據庫概念設計的E-R圖轉換為關系數據庫。在關系數據庫中,數據關系由數據表組成,但是表的結構表現在表的字段上。
表4-1:token表
| 字段名稱 | 類型 | 長度 | 字段說明 |
| id | bigint | 主鍵 | |
| userid | bigint | 用戶id | |
| username | varchar | 100 | 用戶名 |
| tablename | varchar | 100 | 表名 |
| role | varchar | 100 | 角色 |
| token | varchar | 200 | 密碼 |
| addtime | timestamp | 新增時間 | |
| expiratedtime | timestamp | 過期時間 |
表4-2:活動
| 字段名稱 | 類型 | 長度 | 字段說明 |
| id | bigint | 主鍵 | |
| addtime | timestamp | 創建時間 | |
| title | varchar | 200 | 標題 |
| introduction | longtext | 4294967295 | 簡介 |
| picture | varchar | 200 | 圖片 |
| content | longtext | 4294967295 | 內容 |
表4-3:留言板
| 字段名稱 | 類型 | 長度 | 字段說明 |
| id | bigint | 主鍵 | |
| addtime | timestamp | 創建時間 | |
| userid | bigint | 留言人id | |
| username | varchar | 200 | 用戶名 |
| content | longtext | 4294967295 | 留言內容 |
| cpicture | varchar | 200 | 留言圖片 |
| reply | longtext | 4294967295 | 回復內容 |
| rpicture | varchar | 200 | 回復圖片 |
表4-4:會員租賃
| 字段名稱 | 類型 | 長度 | 字段說明 |
| id | bigint | 主鍵 | |
| addtime | timestamp | 創建時間 | |
| zixingchebianhao | varchar | 200 | 自行車編號 |
| pinpai | varchar | 200 | 品牌 |
| fenlei | varchar | 200 | 分類 |
| guige | varchar | 200 | 規格 |
| jianjie | longtext | 4294967295 | 簡介 |
| huiyuanshijia | int | 會員時價 | |
| zulinshizhang | int | 租賃時長 | |
| zongjia | int | 總價 | |
| quchedian | varchar | 200 | 取車點 |
| zucheshijian | date | 租車時間 | |
| tupian | varchar | 200 | 圖片 |
| zhanghao | varchar | 200 | 賬號 |
| xingming | varchar | 200 | 姓名 |
| sfsh | varchar | 200 | 是否審核 |
| shhf | longtext | 4294967295 | 審核回復 |
| ispay | varchar | 200 | 是否支付 |
| longitude | float | 經度 | |
| latitude | float | 緯度 | |
| fulladdress | varchar | 200 | 地址 |
表4-5:會員還車
| 字段名稱 | 類型 | 長度 | 字段說明 |
| id | bigint | 主鍵 | |
| addtime | timestamp | 創建時間 | |
| zixingchebianhao | varchar | 200 | 自行車編號 |
| pinpai | varchar | 200 | 品牌 |
| fenlei | varchar | 200 | 分類 |
| guige | varchar | 200 | 規格 |
| haichedian | varchar | 200 | 還車點 |
| haicheshijian | datetime | 還車時間 | |
| zhanghao | varchar | 200 | 賬號 |
| tupian | varchar | 200 | 圖片 |
| xingming | varchar | 200 | 姓名 |
| sfsh | varchar | 200 | 是否審核 |
| shhf | longtext | 4294967295 | 審核回復 |
| longitude | float | 經度 | |
| latitude | float | 緯度 | |
| fulladdress | varchar | 200 | 地址 |
論文報告:
摘??要
1 系統概述
1.1 概述
1.2課題意義
1.3 主要內容
2 系統開發環境
2.1 Spring Boot框架
2.2 JAVA簡介
2.3訪問數據庫實現方法
2.4系統對MySQL數據庫的兩種連接方式
2.5 MySql數據庫
3 需求分析
3.1技術可行性:技術背景
3.2經濟可行性
3.3操作可行性
3.4系統設計規則
3.5系統流程和邏輯
4系統概要設計
4.1 概述
4.2 系統結構
4.3. 數據庫設計
4.3.1 數據庫實體
4.3.2 數據庫設計表
5 系統詳細設計
5.1系統功能模塊
5.2 管理員功能模塊
5.3 用戶功能模塊
5.4會員功能模塊
6 系統測試
6.1系統測試的目的
6.2系統測試方法
6.3 測試結果
結論
致 謝
參考文獻
源碼獲取:
?大家點贊、收藏、關注、評論啦 、查看👇🏻👇🏻👇🏻微信公眾號獲取聯系方式👇🏻👇🏻👇🏻
打卡 文章 更新?212/? 365天
?精彩專欄推薦訂閱:在下方專欄👇🏻👇🏻👇🏻👇🏻
Java項目精品實戰案例《100套》
web前端期末大作業網頁實戰《100套》
總結
以上是生活随笔為你收集整理的基于Java+SpringBoot+vue+node.js实现自行车租赁平台管理系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IDEA中运行springboot+vu
- 下一篇: mysql查看现在使用的引擎_mysql