基于java+ssm+的高校共享单车管理系统

项目介绍

网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。因此高校单车租赁信息的管理计算机化,系统化是必要的。设计开发高校共享单车管理系统不仅会节约人力和管理成本,还会安全保存庞大的数据量,对于高校单车租赁信息的维护和检索也不需要花费很多时间,非常的便利。

高校共享单车管理系统是在MySQL中建立数据表保存信息,运用SSM框架和Java语言编写。并按照软件设计开发流程进行设计实现。系统具备友好性且功能完善。管理员管理单车和区域,审核租赁订单和还车订单,收取租赁费用,查看单车租赁统计信息。用户租赁单车,归还单车,支付单车租赁费用。

高校共享单车管理系统在让高校单车租赁信息规范化的同时,也能及时通过数据输入的有效性规则检测出错误数据,让数据的录入达到准确性的目的,进而提升高校共享单车管理系统提供的数据的可靠性,让系统数据的错误率降至最低。

4 系统设计
当前,系统的类型有很多,从系统呈现的内容来看,系统的类型有社交类,有商业类,有政府类,有新闻类等。那么,在众多系统类型中,先明确将要设计的系统的类型才是系统设计的首要工作,然后在此基础上明确系统的用户群,功能等,针对这些信息设计出具有独特体验和视觉的系统。如此才能让系统比较具有特色,也能够在众多相似系统中给用户留下深刻印象。

4.1系统目标
本系统在功能制定上,严格参照用户的要求,但是在设计本系统时,也要满足易操作,使用便利的设计要求。由此,设计出一个规范化并且符合用户需求的系统,一定要达到下述系统目标。

第一个系统目标:用户与系统之间的操作方式是基于人机对话,可视化界面的设计除了美观性之外,也具备友好性。可视化界面提供的各类信息符合准确性,可靠性的要求,并能够方便用户灵活查看。

第二个系统目标:用户与系统交互产生的数据,要严格规范的保存在数据库里,无论是后期管理人员查找与管理,都要确保数据安全。

第三个系统目标:实现用户需求的功能。根据对用户的调查得出的功能需求,完成高校共享单车管理系统的设计与实现。

第四个系统目标:在必要环节,对用户登记的数据进行检查,包括数据长度,以及数据输入类型等的检查,发现错误及时反馈,引导用户规范登记数据。常见的有密码修改,注册登录,用户资料填写等环节的数据核验。

第五个系统目标:设计开发本系统,需要尽最大努力,在系统具备易操作的特点外,也要求系统于后期使用中,维护方便,让系统具备易维护的特点。

第六个系统目标:本系统在交付用户使用时,可以达到运行稳定的目标,另外,系统具备安全性,也符合可靠性的条件,用户可以放心使用。

4.2功能结构设计
前面所做的功能分析,只是本系统的一个大概功能,这部分需要在此基础上进行各个模块的详细设计。
设计的管理员的详细功能见下图,管理员登录进入本人后台之后,管理单车和区域,审核租赁订单和还车订单,收取租赁费用,查看单车租赁统计信息。
基于java+ssm+的高校共享单车管理系统_第1张图片
设计的用户的详细功能见下图,用户租赁单车,归还单车,支付单车租赁费用。
基于java+ssm+的高校共享单车管理系统_第2张图片

开发环境

编程语言:Java
数据库 :Mysql
系统架构:B/S
后端框架:SSM
编译工具:idea或者eclipse,jdk1.8,maven
支持定做:java/php/python/android/小程序ue/爬虫/c#/asp.net

系统截图

5 系统实现
在此部分内容中,主要通过系统功能的运行效果图展示前面设计的最终结果。系统实现对编制人员的技术能力有较高要求,因为需要他们使用编程的方式去实现系统设计的方案。
5.1 管理员功能实现
5.1.1 单车信息管理
管理员权限中的单车信息管理,其运行效果见下图。管理员设置单车所属区域,每小时价格以及押金信息,并对这些数据进行修改或删除。
基于java+ssm+的高校共享单车管理系统_第3张图片

5.1.2 租赁订单管理
管理员权限中的租赁订单管理,其运行效果见下图。用户租赁单车,需要管理审核通过才可以使用。
基于java+ssm+的高校共享单车管理系统_第4张图片

5.1.3 还车订单管理
管理员权限中的还车订单管理,其运行效果见下图。用户使用完毕单车之后,自行归还单车,管理员也需要审核单车归还信息,同时对用户租赁单车产生的费用包括超时费等进行登记。
基于java+ssm+的高校共享单车管理系统_第5张图片
5.1.4 信息统计
管理员权限中的信息统计,其运行效果见下图。管理员查看数据统计信息,统计结果通过柱状图显示。
基于java+ssm+的高校共享单车管理系统_第6张图片

5.2 用户功能实现
5.2.1 单车信息
用户权限中的单车信息,其运行效果见下图。用户在前台查询单车,在单车介绍页面,对单车进行租赁。
基于java+ssm+的高校共享单车管理系统_第7张图片

5.2.2 租赁订单
用户权限中的租赁订单,其运行效果见下图。用户查看租赁的单车的审核状态,审核状态为通过时,用户才可以使用单车,用户归还单车也需要在此模块操作。
基于java+ssm+的高校共享单车管理系统_第8张图片

5.2.3 还车订单
用户权限中的还车订单,其运行效果见下图。用户归还单车,其信息也需要管理员审核。
基于java+ssm+的高校共享单车管理系统_第9张图片

5.2.4 租赁费用
用户权限中的租赁费用,其运行效果见下图。用户提交的还车信息在管理员审核通过之后,需要在此模块支付租赁单车产生的费用。
基于java+ssm+的高校共享单车管理系统_第10张图片

部分代码

package com.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;

import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;

import com.entity.XinxitongjiEntity;
import com.entity.view.XinxitongjiView;

import com.service.XinxitongjiService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;


/**
 * 信息统计
 * 后端接口
 */
@RestController
@RequestMapping("xitongji")
public class XinxitongjiController {
    @Autowired
    private XinxitongjiService xinxitongjiService;
    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,XinxitongjiEntity xinxitongji, HttpServletRequest request){

        EntityWrapper<XinxitongjiEntity> ew = new EntityWrapper<XinxitongjiEntity>();
		PageUtils page = xinxitongjiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, xinxitongji), params), params));
        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
    @RequestMapping("st")
    public R list(@RequestParam Map<String, Object> params,XinxitongjiEntity xinxitongji, HttpServletRequest request){
        EntityWrapper<XinxitongjiEntity> ew = new EntityWrapper<XinxitongjiEntity>();
		PageUtils page = xinxitongjiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, xinxitongji), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("sts")
    public R list( XinxitongjiEntity xinxitongji){
       	EntityWrapper<XinxitongjiEntity> ew = new EntityWrapper<XinxitongjiEntity>();
      	ew.allEq(MPUtil.allEQMapPre( xinxitongji, "xinxitongji")); 
        return R.ok().put("data", xinxitongjiService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(XinxitongjiEntity xinxitongji){
        EntityWrapper< XinxitongjiEntity> ew = new EntityWrapper< XinxitongjiEntity>();
 		ew.allEq(MPUtil.allEQMapPre( xinxitongji, "xinxitongji")); 
		XinxitongjiView xinxitongjiView =  xinxitongjiService.selectView(ew);
		return R.ok("查询信息统计成功").put("data", xinxitongjiView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        XinxitongjiEntity xinxitongji = xinxitongjiService.selectById(id);
        return R.ok().put("data", xinxitongji);
    }

    /**
     * 前端详情
     */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        XinxitongjiEntity xinxitongji = xinxitongjiService.selectById(id);
        return R.ok().put("data", xinxitongji);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("ve")
    public R save(@RequestBody XinxitongjiEntity xinxitongji, HttpServletRequest request){
    	xinxitongji.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(xinxitongji);

        xinxitongjiService.insert(xinxitongji);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody XinxitongjiEntity xinxitongji, HttpServletRequest request){
    	xinxitongji.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(xinxitongji);

        xinxitongjiService.insert(xinxitongji);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody XinxitongjiEntity xinxitongji, HttpServletRequest request){
        //ValidatorUtils.validateEntity(xinxitongji);
        xinxitongjiService.updateById(xinxitongji);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        xinxitongjiService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
    
    /**
     * 提醒接口
     */
	@RequestMapping("/remind/{columnName}/{type}")
	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("column", columnName);
		map.put("type", type);
		
		if(type.equals("2")) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar c = Calendar.getInstance();
			Date remindStartDate = null;
			Date remindEndDate = null;
			if(map.get("remindstart")!=null) {
				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
				c.setTime(new Date()); 
				c.add(Calendar.DAY_OF_MONTH,remindStart);
				remindStartDate = c.getTime();
				map.put("remindstart", sdf.format(remindStartDate));
			}
			if(map.get("remindend")!=null) {
				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindEnd);
				remindEndDate = c.getTime();
				map.put("remindend", sdf.format(remindEndDate));
			}
		}
		
		Wrapper<XinxitongjiEntity> wrapper = new EntityWrapper<XinxitongjiEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}


		int count = xinxitongjiService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	


}

论文参考

基于java+ssm+的高校共享单车管理系统_第11张图片

目 录
1 绪论 1
1.1 选题背景 1
1.2 选题意义 1
1.3 研究内容 2
2 系统开发技术 3
2.1 Java语言 3
2.2 SSM框架 3
2.3 MYSQL数据库 4
3 系统分析 5
3.1可行性研究 5
3.1.1经济可行性 5
3.1.2时间可行性 5
3.1.3操作可行性 5
3.2系统性能分析 6
3.2.1系统易用性 6
3.2.2系统健壮性 6
3.2.3系统安全性 6
3.3 系统流程分析 6
3.4系统功能分析 9
4 系统设计 12
4.1系统目标 12
4.2功能结构设计 13
4.3数据库设计 14
4.3.1数据库E-R图 14
4.3.2 数据库表结构 17
5 系统实现 21
5.1 管理员功能实现 21
5.1.1 单车信息管理 21
5.1.2 租赁订单管理 21
5.1.3 还车订单管理 22
5.1.4 信息统计 22
5.2 用户功能实现 23
5.2.1 单车信息 23
5.2.2 租赁订单 24
5.2.3 还车订单 24
5.2.4 租赁费用 25
6系统测试 26
6.1 系统测试的类型 26
6.2 功能测试 27
6.3 可用性测试 27
6.4 测试结果分析 27
结 论 28
参考文献 30
致 谢 31

你可能感兴趣的:(JAVA项目,java,ssm,vue,mysql)