SSM+Mysql实现的共享单车管理系统(功能包含分角色,登录、用户管理、服务点管理、单车管理、分类管理、学生信息管理、单车租赁、信息统计、系统设置等)
创始人
2024-02-19 13:23:19

博客目录

  • SSM+Mysql实现的共享单车管理系统
    • 实现功能截图
    • 系统功能
    • 使用技术
    • 代码
    • 完整源码

SSM+Mysql实现的共享单车管理系统

本系统一个学校共享单车管理的项目,通过线上系统化的管理,可以为后续的运营以及单车的项目运转提供极大的帮助。
(文末查看完整源码)

实现功能截图

用户登录在这里插入图片描述
用户管理‘
在这里插入图片描述
服务点管理
在这里插入图片描述
单车管理
在这里插入图片描述
分类管理
在这里插入图片描述
学生信息管理
在这里插入图片描述
单车租赁
在这里插入图片描述
信息统计汇总
在这里插入图片描述
更改密码
在这里插入图片描述

系统功能

本系统实现了以下功能:
1、登录
2、用户管理
3、服务点管理
4、单车管理
5、单车租赁
6、学生信息管理
7、分类管理
8、信息统计汇总
9、系统设置

使用技术

数据库:mysql
开发工具:Idea(Myeclispe、Eclipse也可以)
知识点:SSM

项目结构
在这里插入图片描述

代码

java端
实体类
Admin.java

package com.webike.pojo;import java.util.Date;public class Admin {private Integer aid;private Integer aPid;private Place place;private String aUsername;private String aPassword;private String aRealName;private String aPhone;private String aRole;private String aIcon;private Date aLoginTime;private Date aCreateTime;private Date aUpdateTime;private String aComment;public Place getPlace() {return place;}public void setPlace(Place place) {this.place = place;}public Integer getAid() {return aid;}public void setAid(Integer aid) {this.aid = aid;}public Integer getaPid() {return aPid;}public void setaPid(Integer aPid) {this.aPid = aPid;}public String getaUsername() {return aUsername;}public void setaUsername(String aUsername) {this.aUsername = aUsername == null ? null : aUsername.trim();}public String getaPassword() {return aPassword;}public void setaPassword(String aPassword) {this.aPassword = aPassword == null ? null : aPassword.trim();}public String getaRealName() {return aRealName;}public void setaRealName(String aRealName) {this.aRealName = aRealName == null ? null : aRealName.trim();}public String getaPhone() {return aPhone;}public void setaPhone(String aPhone) {this.aPhone = aPhone == null ? null : aPhone.trim();}public String getaRole() {return aRole;}public void setaRole(String aRole) {this.aRole = aRole == null ? null : aRole.trim();}public String getaIcon() {return aIcon;}public void setaIcon(String aIcon) {this.aIcon = aIcon == null ? null : aIcon.trim();}public Date getaLoginTime() {return aLoginTime;}public void setaLoginTime(Date aLoginTime) {this.aLoginTime = aLoginTime;}public Date getaCreateTime() {return aCreateTime;}public void setaCreateTime(Date aCreateTime) {this.aCreateTime = aCreateTime;}public Date getaUpdateTime() {return aUpdateTime;}public void setaUpdateTime(Date aUpdateTime) {this.aUpdateTime = aUpdateTime;}public String getaComment() {return aComment;}public void setaComment(String aComment) {this.aComment = aComment == null ? null : aComment.trim();}@Overridepublic String toString() {return "Admin{" +"aid=" + aid +", aPid=" + aPid +", place=" + place +", aUsername='" + aUsername + '\'' +", aPassword='" + aPassword + '\'' +", aRealName='" + aRealName + '\'' +", aPhone='" + aPhone + '\'' +", aRole='" + aRole + '\'' +", aIcon='" + aIcon + '\'' +", aLoginTime=" + aLoginTime +", aCreateTime=" + aCreateTime +", aUpdateTime=" + aUpdateTime +", aComment='" + aComment + '\'' +'}';}
}

Bike,java

package com.webike.pojo;import java.util.Date;public class Bike {private Integer bid;private String bName;private String bIcon;private Integer bCid;private String bInTime;private String bState;private Date bCreateTime;private Date bUpdateTime;private String bComment;public Integer getBid() {return bid;}public void setBid(Integer bid) {this.bid = bid;}public String getbName() {return bName;}public void setbName(String bName) {this.bName = bName == null ? null : bName.trim();}public String getbIcon() {return bIcon;}public void setbIcon(String bIcon) {this.bIcon = bIcon == null ? null : bIcon.trim();}public Integer getbCid() {return bCid;}public void setbCid(Integer bCid) {this.bCid = bCid;}public String getbInTime() {return bInTime;}public void setbInTime(String bInTime) {this.bInTime = bInTime == null ? null : bInTime.trim();}public String getbState() {return bState;}public void setbState(String bState) {this.bState = bState == null ? null : bState.trim();}public Date getbCreateTime() {return bCreateTime;}public void setbCreateTime(Date bCreateTime) {this.bCreateTime = bCreateTime;}public Date getbUpdateTime() {return bUpdateTime;}public void setbUpdateTime(Date bUpdateTime) {this.bUpdateTime = bUpdateTime;}public String getbComment() {return bComment;}public void setbComment(String bComment) {this.bComment = bComment == null ? null : bComment.trim();}
}

service层
AdminServiceImpl.java

package com.webike.service.impl;import com.webike.dao.AdminMapper;
import com.webike.dao.PlaceMapper;
import com.webike.dto.JsonResult;
import com.webike.dto.Page;
import com.webike.enums.ResultEnum;
import com.webike.enums.RoleEnum;
import com.webike.pojo.*;
import com.webike.service.AdminService;
import com.webike.utils.FileUtil;
import com.webike.utils.MD5Util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.Date;
import java.util.List;/*** Created by Ming on 2018/2/9.*/
@Servicepublic class AdminServiceImpl implements AdminService {@Autowiredprivate AdminMapper adminMapper;@Autowiredprivate PlaceMapper placeMapper;@Overridepublic String checkUserPwd(Admin admin) {
//        String password = MD5Util.getMD5(admin.getaPassword());String password = admin.getaPassword();Admin realAdmin = findByUsername(admin.getaUsername());if(realAdmin != null ){if(password.equals(realAdmin.getaPassword())){return "成功";}return "密码错误~";}return "没有此账号~";}@Overridepublic boolean upDate(Admin admin) {AdminExample adminExample = new AdminExample();adminExample.createCriteria().andAUsernameEqualTo(admin.getaUsername());int i = adminMapper.updateByExampleSelective(admin, adminExample);return i > 0 ? true : false;}@Overridepublic Admin findByUsername(String username) {AdminExample adminExample = new AdminExample();adminExample.createCriteria().andAUsernameEqualTo(username);List admins = adminMapper.selectByExample(adminExample);if(admins != null && admins.size() > 0){Admin admin = admins.get(0);//pid不为空设置站点对象if(admin.getaPid() != null) {admin.setPlace(placeMapper.selectByPrimaryKey(admin.getaPid()));}return admin;}return null;}@Overridepublic Page findAllToPage(Integer page, Integer rows) {Page aPage = new Page<>();List lists = adminMapper.findToPage((page-1)*rows,rows);aPage.setRows(lists);aPage.setTotal(adminMapper.countByExample(new AdminExample()));return aPage;}@Overridepublic JsonResult deleteById(Integer aid) {if (aid == null) return new JsonResult(false, ResultEnum.SYSTEM_ERROR);int i = adminMapper.deleteByPrimaryKey(aid);return i > 0 ? new JsonResult(true, ResultEnum.DELETE_SUCCESS): new JsonResult(false, ResultEnum.DELETE_FAIL);}@Overridepublic List loadPlace() {List places = placeMapper.selectByExample(new PlaceExample());return places;}@Overridepublic JsonResult add(MultipartFile adminIcon, Admin admin, HttpServletRequest request) {if(!adminIcon.isEmpty()){String path = FileUtil.uploadImage(adminIcon, "adminIcon", request);if(path == null) return new JsonResult(false, ResultEnum.UPLOAD_TYPE_ERROR);admin.setaIcon(path);}if(admin.getaRole() == null) admin.setaRole(RoleEnum.MANAGER.getMassage());admin.setaPassword(MD5Util.getMD5(admin.getaPassword()));admin.setaCreateTime(new Date());admin.setaUpdateTime(new Date());try{int  row = adminMapper.insertSelective(admin);return row > 0 ? new JsonResult(true, ResultEnum.ADD_SUCCESS): new JsonResult(false, ResultEnum.ADD_FAIL);}catch (Exception e){e.printStackTrace();return new JsonResult(false, ResultEnum.REPEAT_ERROR);}}@Overridepublic JsonResult update(MultipartFile adminIcon, Admin admin, HttpServletRequest request) {try{if(!adminIcon.isEmpty()){//更新首先要先删除原来的文件if(admin.getaIcon() != null){File file = new File(request.getServletContext().getRealPath("/" + admin.getaIcon()));if(file != null) file.delete();}String path = FileUtil.uploadImage(adminIcon, "adminIcon", request);if(path == null) return new JsonResult(false, ResultEnum.UPLOAD_TYPE_ERROR);admin.setaIcon(path);}admin.setaUpdateTime(new Date());int i = adminMapper.updateByPrimaryKeySelective(admin);return i > 0 ? new JsonResult(false, ResultEnum.UPDATE_SUCCESS): new JsonResult(false, ResultEnum.UPDATE_FAIL);}catch (Exception e){e.printStackTrace();return new JsonResult(false, ResultEnum.SYSTEM_ERROR);}}}

BikeControllerImpl.java

package com.webike.service.impl;import com.webike.dao.BikeMapper;
import com.webike.dto.JsonResult;
import com.webike.dto.Page;
import com.webike.enums.BikeStateEnum;
import com.webike.enums.ResultEnum;
import com.webike.pojo.Bike;
import com.webike.pojo.BikeExample;
import com.webike.service.BikeService;
import com.webike.service.CategoryService;
import com.webike.utils.ArithmeticUtil;
import com.webike.utils.FileUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.*;/*** Created by Ming on 2018/2/10.*/
@Service
public class BikeControllerImpl implements BikeService {@Autowiredprivate BikeMapper bikeMapper;@Autowiredprivate CategoryService categoryService;//事务控制 该单车分类剩余量+1@Transactional@Overridepublic JsonResult add(MultipartFile bikeIcon, Bike bike, HttpServletRequest request,Integer bCount) {if(!bikeIcon.isEmpty()){String path = FileUtil.uploadImage(bikeIcon, "bikeIcon", request);if(path == null) return new JsonResult(false, ResultEnum.UPLOAD_TYPE_ERROR);bike.setbIcon(path);}bike.setbState(BikeStateEnum.AVAILABLE.getState());bike.setbCreateTime(new Date());bike.setbUpdateTime(new Date());try{int row = 0;for (int i = 0; i < bCount; i++) {row += bikeMapper.insertSelective(bike);}if(row == bCount){return categoryService.updateRemainById(bike.getbCid(),bCount) ?new JsonResult(true, ResultEnum.ADD_SUCCESS):new JsonResult(false, ResultEnum.ADD_FAIL);}else{throw new RuntimeException();}}catch (Exception e){e.printStackTrace();TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();return new JsonResult(false,ResultEnum.SYSTEM_ERROR);}}@Overridepublic JsonResult update(MultipartFile bikeIcon, Bike bike, HttpServletRequest request) {try{if(!bikeIcon.isEmpty()){//更新首先要先删除原来的文件if(bike.getbIcon() != null){File file = new File(request.getServletContext().getRealPath("/" + bike.getbIcon()));if(file != null) file.delete();}String path = FileUtil.uploadImage(bikeIcon, "bikeIcon", request);if(path == null) return new JsonResult(false, ResultEnum.UPLOAD_TYPE_ERROR);bike.setbIcon(path);}bike.setbUpdateTime(new Date());int i = bikeMapper.updateByPrimaryKeySelective(bike);return i > 0 ? new JsonResult(false, ResultEnum.UPDATE_SUCCESS): new JsonResult(false, ResultEnum.UPDATE_FAIL);}catch (Exception e){e.printStackTrace();return new JsonResult(false, ResultEnum.SYSTEM_ERROR);}}@Overridepublic Page findAllToPage(Integer page, Integer rows) {Page bPage = new Page<>();List lists = bikeMapper.findToPage((page-1)*rows,rows);bPage.setRows(lists);bPage.setTotal(bikeMapper.countByExample(new BikeExample()));return bPage;}//事务控制 该单车的分类剩余量减size@Transactional@Overridepublic JsonResult deleteById(String bids,String cids) {try{String[] bidList = bids.split(",");String[] cidList = cids.split(",");int row = 0;for (int i = 0; i < bidList.length; i++) {row += bikeMapper.deleteByPrimaryKey(Integer.parseInt(bidList[i]));}if(row == bidList.length){ //更新分类表的剩余数量HashMap cidMap = ArithmeticUtil.getElementForTimes(cidList);Set> entries = cidMap.entrySet();for (Map.Entry entry : entries) {boolean isSuccess = categoryService.updateRemainById(Integer.parseInt(entry.getKey()), - entry.getValue());if(!isSuccess) throw new RuntimeException();}return new JsonResult(true, ResultEnum.DELETE_SUCCESS);}else{throw new RuntimeException();}}catch (Exception e){e.printStackTrace();
//            throw new RuntimeException(e);TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();return new JsonResult(false,ResultEnum.SYSTEM_ERROR);}}@Overridepublic Bike findById(Integer bid) {return bikeMapper.selectByPrimaryKey(bid);}}

controller层
AdminController.java

package com.webike.web;import com.webike.dto.JsonResult;
import com.webike.dto.Page;
import com.webike.enums.ResultEnum;
import com.webike.pojo.Admin;
import com.webike.pojo.Place;
import com.webike.service.AdminService;
import com.webike.utils.MD5Util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Date;
import java.util.List;/**管理员controller* Created by Ming on 2018/2/8.*/
@Controller
@RequestMapping("/admin")
public class AdminController {@Autowiredprivate AdminService adminService;//跳转到首页@RequestMapping("/index")public String index(){return "index";}//验证登陆@RequestMapping(value = "/login",method = RequestMethod.POST)public String login(Admin admin, Model model, HttpSession session){String message = adminService.checkUserPwd(admin);if("成功".equals(message)) {//注入SessionAdmin realAdmin = adminService.findByUsername(admin.getaUsername());session.setAttribute("admin",realAdmin);//更新登陆的时间admin.setaLoginTime(new Date());admin.setaUpdateTime(new Date());admin.setaPassword(null);adminService.upDate(admin);return "redirect:index";}model.addAttribute("msg",message);return "forward:/login.jsp";}//退出登陆@RequestMapping("/logout")public String logout(HttpSession session){session.invalidate();return "redirect:/login.jsp";}//跳转到修改密码的页面@RequestMapping("/rePassword")public String rePassword(){return "rePassword";}//修改提交的密码@RequestMapping("/submitResetPwd")@ResponseBodypublic JsonResult submitResetPwd(String password, String newPassword,HttpSession httpSession){Admin admin = (Admin) httpSession.getAttribute("admin");if(!admin.getaPassword().equals(password))return new JsonResult(false,ResultEnum.OLD_PASSWORD_ERROR);admin.setaPassword(MD5Util.getMD5(newPassword));admin.setaUpdateTime(new Date());boolean isSuccess = adminService.upDate(admin);if(isSuccess) return new JsonResult(isSuccess, ResultEnum.UPDATE_SUCCESS);return new JsonResult(isSuccess, ResultEnum.UPDATE_FAIL);}//跳转到用户管理页面@RequestMapping("/adminManage")public String adminMange(){return "admin";}//显示用户页面@RequestMapping("/showAll")@ResponseBodypublic Page showAll(Integer page, Integer rows){return adminService.findAllToPage(page,rows);}//删除用户@RequestMapping("/remove")@ResponseBodypublic JsonResult remove(Integer aid){return adminService.deleteById(aid);}// 加载服务点到表单下拉框 loadPlace@RequestMapping("/loadPlace")@ResponseBodypublic List loadPlace(){return adminService.loadPlace();}//回显用户表单@RequestMapping("/loadForm")@ResponseBodypublic Admin loadForm(String username){Admin admin = adminService.findByUsername(username);return admin;}//addOrUpdate@RequestMapping("/addOrUpdate")@ResponseBodypublic JsonResult addOrUpdate(MultipartFile adminIcon, Admin admin, HttpServletRequest request){if(admin.getAid() == null) return adminService.add(adminIcon,admin,request);return adminService.update(adminIcon,admin,request);}}

BikeController.java

package com.webike.web;import com.webike.dto.JsonResult;
import com.webike.dto.Page;
import com.webike.pojo.Bike;
import com.webike.pojo.Category;
import com.webike.pojo.Student;
import com.webike.service.BikeService;
import com.webike.service.CategoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletRequest;
import java.util.*;/*** Created by Ming on 2018/2/10.*/
@Controller
@RequestMapping("/bike")public class BikeController {@Autowiredprivate BikeService bikeService;@Autowiredprivate CategoryService categoryService;//跳转到 bike管理页面@RequestMapping("/bikeManage")public String bikeManage(){return "bike";}//添加或更新bike@RequestMapping(value = "/addOrUpdate",method = RequestMethod.POST)@ResponseBodypublic JsonResult addOrUpdate(MultipartFile bikeIcon, Bike bike, HttpServletRequest request,Integer bCount){if(bCount != null) return bikeService.add(bikeIcon,bike,request,bCount);return bikeService.update(bikeIcon,bike,request);}//showAll bike@RequestMapping("/showAll")@ResponseBodypublic Page show(Integer page, Integer rows){return bikeService.findAllToPage(page,rows);}//删除单车和更新单车的分类@RequestMapping(value = "/remove",method = RequestMethod.POST)@ResponseBodypublic JsonResult remove(String bids,String cids){return bikeService.deleteById(bids,cids);}//点击修改回显bike弹出表单@RequestMapping("/loadForm")@ResponseBodypublic Bike loadForm(Integer bid){return bikeService.findById(bid);}//回显bike分类@RequestMapping(value = "/loadCategory",method = RequestMethod.POST)@ResponseBodypublic List loadCategory(){return categoryService.findAll();}}

完整源码

觉得有用,记得一键三连哦!

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...