基于SSM的出租车管理系统的设计与实现

news2025/1/13 6:01:51

末尾获取源码
开发语言:Java
Java开发工具:JDK1.8
后端框架:SSM
前端:采用JSP技术开发
数据库:MySQL5.7和Navicat管理工具结合
服务器:Tomcat8.5
开发软件:IDEA / Eclipse
是否Maven项目:是


目录

一、项目简介

二、系统功能

三、系统项目截图

管理员功能实现

员工功能实现 

​编辑 驾驶员功能实现

四、核心代码

登录相关

文件上传

封装

五、结论


一、项目简介

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

出租车管理系统是在MySQL中建立数据表保存信息,运用SSM框架和Java语言编写。并按照软件设计开发流程进行设计实现。系统具备友好性且功能完善。本系统实现了车辆管理,年审管理,事故管理,驾驶员管理等功能。

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


二、系统功能

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

设计的管理员的详细功能见下图,管理员登录进入本人后台之后,管理驾驶员,员工,事故类型,车辆与年审信息。

设计的员工的详细功能见下图,员工管理车辆,登记年审与事故信息,查看公告。

 设计的驾驶员的详细功能见下图,驾驶员查询车辆,年审,事故,查看公告。



三、系统项目截图

管理员功能实现

 

员工功能实现 

 

 驾驶员功能实现

 

 


四、核心代码

登录相关


package com.controller;


import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
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.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;

/**
 * 登录相关
 */
@RequestMapping("users")
@RestController
public class UserController{
	
	@Autowired
	private UserService userService;
	
	@Autowired
	private 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);
        userService.updateById(user);//全部更新
        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        userService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

文件上传

package com.controller;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.UUID;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.ResourceUtils;
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 org.springframework.web.multipart.MultipartFile;

import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.ConfigEntity;
import com.entity.EIException;
import com.service.ConfigService;
import com.utils.R;

/**
 * 上传文件映射表
 */
@RestController
@RequestMapping("file")
@SuppressWarnings({"unchecked","rawtypes"})
public class FileController{
	@Autowired
    private ConfigService configService;
	/**
	 * 上传文件
	 */
	@RequestMapping("/upload")
	public R upload(@RequestParam("file") MultipartFile file,String type) throws Exception {
		if (file.isEmpty()) {
			throw new EIException("上传文件不能为空");
		}
		String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
		File path = new File(ResourceUtils.getURL("classpath:static").getPath());
		if(!path.exists()) {
		    path = new File("");
		}
		File upload = new File(path.getAbsolutePath(),"/upload/");
		if(!upload.exists()) {
		    upload.mkdirs();
		}
		String fileName = new Date().getTime()+"."+fileExt;
		File dest = new File(upload.getAbsolutePath()+"/"+fileName);
		file.transferTo(dest);
		FileUtils.copyFile(dest, new File("C:\\Users\\Desktop\\jiadian\\springbootl7own\\src\\main\\resources\\static\\upload"+"/"+fileName));
		if(StringUtils.isNotBlank(type) && type.equals("1")) {
			ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
			if(configEntity==null) {
				configEntity = new ConfigEntity();
				configEntity.setName("faceFile");
				configEntity.setValue(fileName);
			} else {
				configEntity.setValue(fileName);
			}
			configService.insertOrUpdate(configEntity);
		}
		return R.ok().put("file", fileName);
	}
	
	/**
	 * 下载文件
	 */
	@IgnoreAuth
	@RequestMapping("/download")
	public ResponseEntity<byte[]> download(@RequestParam String fileName) {
		try {
			File path = new File(ResourceUtils.getURL("classpath:static").getPath());
			if(!path.exists()) {
			    path = new File("");
			}
			File upload = new File(path.getAbsolutePath(),"/upload/");
			if(!upload.exists()) {
			    upload.mkdirs();
			}
			File file = new File(upload.getAbsolutePath()+"/"+fileName);
			if(file.exists()){
				/*if(!fileService.canRead(file, SessionManager.getSessionUser())){
					getResponse().sendError(403);
				}*/
				HttpHeaders headers = new HttpHeaders();
			    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);    
			    headers.setContentDispositionFormData("attachment", fileName);    
			    return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return new ResponseEntity<byte[]>(HttpStatus.INTERNAL_SERVER_ERROR);
	}
	
}

封装

package com.utils;

import java.util.HashMap;
import java.util.Map;

/**
 * 返回数据
 */
public class R extends HashMap<String, Object> {
	private static final long serialVersionUID = 1L;
	
	public R() {
		put("code", 0);
	}
	
	public static R error() {
		return error(500, "未知异常,请联系管理员");
	}
	
	public static R error(String msg) {
		return error(500, msg);
	}
	
	public static R error(int code, String msg) {
		R r = new R();
		r.put("code", code);
		r.put("msg", msg);
		return r;
	}

	public static R ok(String msg) {
		R r = new R();
		r.put("msg", msg);
		return r;
	}
	
	public static R ok(Map<String, Object> map) {
		R r = new R();
		r.putAll(map);
		return r;
	}
	
	public static R ok() {
		return new R();
	}

	public R put(String key, Object value) {
		super.put(key, value);
		return this;
	}
}

五、结论

出租车管理系统的开发设计并不是一件轻松事,因为毕设制作都是依照一定流程进行的。最开始是选择题目,然后通过各种方式查阅资料,以及对使用用户的需求进行调研,确定本系统的功能,为了降低系统编码的出错率,在设计阶段也需要下功夫,认真设计功能模块,使用大学所学的数据库知识,设计数据库。这样一来,对系统编码时,就会根据设计方案进行。编码完成,进行测试就能对合格的系统进行验收了。

借助身边同学还有导师提供的帮助,本人也顺利完成本系统的制作工作。对出租车管理系统的分析与总结,发现出租车管理系统具有如下特点:

(1)出租车管理系统有着详细的功能设计,所以编码时,基本依照设计的功能进行开发,因此具备较完善的功能;

(2)出租车管理系统在界面设计与布局时,参考了很多系统的界面设计风格,也从图书馆查阅了关于系统界面设计方面的资料,并把对本系统有用的知识做好笔记,有了这些知识积累,所以我在开发系统时,注重页面文字的排版,以及精确定位各页面元素,合理使用颜色搭配技巧,让本系统在不影响浏览效果的同时,让访问者产生一种简洁干净的视觉效果;

(3)出租车管理系统为了让用户易于使用,在能够直观表达系统内容的同时,也把页面的导航放在了页面中最关键的位置,这个位置也是充分考虑了用户的浏览习惯。所以用户操作系统,可以在短时间内找到需要的内容。

由于本人并不是专门从事开发工作的技术人员,目前在校学习的开发类知识处于初级阶段,只是对开发类技术有着简单了解和使用,加上日常完成的作业,也只是局限在某个系统的某个功能模块上,因此,完成一个功能完善的整个系统,对于我来说,还是有一定的压力。所以这也确定了我开发的系统具有缺陷。

(1)对于出租车管理系统的编码并没有完全依照编码规范,整个系统存在代码冗余的缺陷;

(2)出租车管理系统在数据输入上,对数据有效性检测还不够严格;

(3)对出租车管理系统的误操作提示,只是对部分功能进行了设计,还有很多功能都没有设计报错提示。

综上所述,本人仍需花费时间去学习编程知识,在后期,我将会学习代码模块化,将一些通用的函数,变量等进行单独设置,然后直接在需要的页面上进行调用,这样可以降低代码冗余率,同时也会多学习针对程序易出错地方的解决方案等知识。学习这些知识除了完善本系统之外,也是弥补自身编程能力不足的缺陷。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1030101.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智荟康午休课桌椅成为第十届中国慈善展览会公益亮点产品

第十届中国慈善展览会&#xff08;以下简称“慈展会”&#xff09;于9月15日至17日在深圳会展中心隆重举办&#xff0c;此次展会为期3天&#xff0c;主要围绕“共建现代化慈善&#xff0c;聚力高质量发展”的主题&#xff0c;重点聚焦聚力民生福祉&#xff0c;将打造“一展多元…

新手小白如何学习自动化测试?

前言 测试自动化在各个行业和应用中被广泛使用&#xff0c;并产生巨大的效果。软件开发方法&#xff0c;如DevOps、Agile、Waterfall和它们的不同风格&#xff0c;广泛使用测试自动化来降低成本&#xff0c;提高效率和准确性&#xff0c;并加快回归测试。 测试自动化是在充分…

LeetCode 75 - 01 : 最小面积矩形

type pair struct{x, y int }func minAreaRect(points [][]int)int{mp : map[pair]struct{}{}// 将二维数组中的坐标映射到map中for i : range points{mp[pair{points[i][0], points[i][1]}] struct{}{}}// 将结果设置为一个最大值&#xff0c;防止影响求最小值的逻辑res : ma…

学习记忆——宫殿篇——记忆宫殿——记忆桩——工人宿舍

脸盆铁盒白色泡沫绳子电热炉 6. 椅子 7. 门帘 8. 塑料 9. 书 10.安全帽 11. 凳子 暖壶烟灰缸计算器水杯刷子

【GPU编程】Visual Studio创建基于GPU编程的项目

vs创建基于GPU编程的项目 &#x1f34a;前言&#x1f438;方法一-CUDA Runtime生成&#x1f61d;debug设置 &#x1f345;方法二-空项目配置&#x1f349;&#x1f349;&#x1f349;代码验证 &#x1f34a;前言 cuda以及cudnn的安装以及系统环境变量的配置默认已经做完。如果…

七天学会C语言-第六天(指针)

1.指针变量与普通变量 指针变量与普通变量是C语言中的两种不同类型的变量&#xff0c;它们有一些重要的区别和联系。 普通变量是一种存储数据的容器&#xff0c;可以直接存储和访问数据的值。&#xff1a; int num 10; // 定义一个整数型普通变量num&#xff0c;赋值为10在例…

【算法训练-二叉树 四】【对称与翻转】对称二叉树、翻转二叉树

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【二叉树的形态变化】&#xff0c;使用【二叉树】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条…

后端思维:通过代码去重,做一个后端通用模板

目录 后端思维 1. 优化前的例子 2. 抽取公用方法去重 3. 反射对比字段 4.Lambda函数式泛型 5. 继承多态. 6. 模板方法 6.1 定义对比模板的骨架 6.2 模板的方法逐步细化 6.3 不同对比子类 7. 工厂模式 模板方法 策略模式全家桶 最后 后端思维 最近工作中,我通过层层…

学Python的漫画漫步进阶 -- 第十二步.文件读写

学Python的漫画漫步进阶 -- 第十二步.文件读写 十二、文件读写12.1 打开文件12.2 关闭文件12.2.1 在finally代码块中关闭文件12.2.2 在with as代码块中关闭文件 12.3 读写文本文件12.4 动动手——复制文本文件12.5 读写二进制文件12.6 动动手——复制二进制文件12.7 练一练12.8…

Redis之list类型

文章目录 Redis之list类型1. 列表添加/弹出元素2. 查看列表3. 获取列表中元素的个数4. 删除列表中指定的值5. 获取/指定元素的值6. 向列表中插入元素7. 删除指定索引范围之外的所有元素8. 将元素从一个列表转移到另一个列表9. 应用场景9.1 队列9.2 类似微信上订阅公众号&#x…

MidJourneyAI绘画之月满中秋情更浓

皓月当空照人间&#xff0c; 银河洒满天幕间。 嫦娥轻舞婵娟态&#xff0c; 桂香飘散诗意添。 团圆乐享如意时&#xff0c; 家人相聚笑声吹。 中秋欢庆如诗意&#xff0c; 祝福平安好运气。

从网约车平台合规问题看企业合规难题如何破解

随着互联网的快速发展&#xff0c;网约车行业逐渐崛起并成为人们出行的重要选择之一。然而&#xff0c;虽然网约车平台带来了便利和效率&#xff0c;但也引发了一系列合规问题。 近日&#xff0c;西安市交通运输综合执法支队和西安市出租汽车管理处组织开展了西安市网约车行业…

Leetcode 95. 不同的二叉搜索树 II

文章目录 题目代码&#xff08;9.21 首刷看解析&#xff09; 题目 Leetcode 95. 不同的二叉搜索树 II 代码&#xff08;9.21 首刷看解析&#xff09; class Solution { public:vector<TreeNode*> generateTrees(int n) {return build(1,n);}vector<TreeNode*> bu…

singularity docker 拉取镜像 seurat和scapy spatial空转数据转换 cell2location

JiekaiLab/scDIOR: scDIOR: Single cell data IO softwaRe (github.com) module availablemodule load singularitysingularity pull docker://jiekailab/scdior-image:Seuratv4_Scanpy1.8 export PATH/seu_share/apps/singularity/bin/singularity:$PATH

C++数据结构题:DS 顺序表--连续操作

建立顺序表的类&#xff0c;属性包括&#xff1a;数组、实际长度、最大长度&#xff08;设定为 1000 &#xff09; 该类具有以下成员函数&#xff1a; 构造函数&#xff1a;实现顺序表的初始化。 插入多个数据的 multiinsert(int i, int n, int item[]) 函数&#xff0c;实…

vue 脚手架 入门 记录

vue 脚手架 入门 记录 以管理员身份运行PowerShell执行&#xff1a;get-ExecutionPolicy&#xff0c;回复Restricted&#xff0c;表示状态是禁止的 3.执行&#xff1a;set-ExecutionPolicy RemoteSigned 4.选择Y 注意&#xff1a;一定要以管理员的身份运行PowerShell&#xff…

Verilog功能模块——标准FIFO转FWFT FIFO

前言 在使用FIFO IP核时&#xff0c;我更喜欢使用FWFT(First Word First Through) FIFO而非标准FIFO&#xff0c;FWFT FIFO的数据会预先加载到dout端口&#xff0c;当empty为低时数据就已经有效了&#xff0c;而rd_en信号是指示此FIFO更新下一个数据&#xff0c;这种FWFT FIFO的…

【Linux基础】第30讲 Linux用户和用户组权限控制命令(二)

1&#xff09;sudo命令 sudo是Linux系统管理指令&#xff0c;是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具&#xff0c;如halt,reboot,su等等&#xff0c;这样不仅减少了root用户的登录和管理时间&#xff0c;同样也提高了安全性。 2&#xff09;修改配置…

Grafana设置默认主页

点击【设置/管理】-> 【默认首选项 Preferences】-> 【主页仪表盘】 在下拉中选择一个页面作为主页即可

山西电力市场日前价格预测【2023-09-22】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-09-22&#xff09;山西电力市场全天平均日前电价为322.75元/MWh。其中&#xff0c;最高日前电价为386.53元/MWh&#xff0c;预计出现在06: 45。最低日前电价为237.40元/MWh&#xff0c;预计…