java实现停车场管理系统

Java实现停车场管理系统攻略

1.需求分析

停车场管理系统需要实现以下功能:

  • 停车:可以记录车辆的停放时间和位置(车位号)
  • 取车:可以计算车辆停放的费用并将车位号记录,同时从停车记录中删除该车辆
  • 车位管理:对车位进行增删改查,可以查询所有车位和空闲车位
  • 停车记录查询:可以查询所有停车记录以及某个时间段的停车记录

2.数据库设计

使用MySQL数据库存储停车场管理系统的相关数据:

  • vehicle_record表:记录所有车辆的停车信息,包含车牌号、停车开始时间、停车车位号、停车费用等字段。
  • parking_space表:记录所有车位的信息,包含车位号、该车位是否空闲等字段。

3.代码实现

3.1 数据库连接与操作

使用JDBC连接和操作MySQL数据库,具体步骤如下:

  1. 引入MySQL JDBC驱动jar包
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.23</version>
</dependency>
  1. 建立数据库连接,获取Connection对象
public class DBUtil {
    private static final String URL = "jdbc:mysql://localhost:3306/parking_system";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "123456";

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL, USERNAME, PASSWORD);
    }
}
  1. 定义公共的执行SQL语句的方法并获取PreparedStatement对象
public class DBUtil {
    // 省略getConnection()方法

    public static PreparedStatement getPreparedStatement(String sql) throws SQLException {
        Connection conn = getConnection();
        return conn.prepareStatement(sql);
    }
}

3.2 实现停车功能

当有车辆进入停车场时,调用以下方法记录他的停车信息:

public class ParkingService {
    public void park(String plate, String spaceNum) {
        // 获取停车开始时间
        Date beginTime = new Date();

        // 将车位设置为占用状态
        setSpaceStatus(spaceNum, 1);

        // 保存停车记录
        saveVehicleRecord(plate, beginTime, spaceNum);
    }
}

3.3 实现取车功能

当有车辆驶离停车场时,调用以下方法计算停车费用并记录车位号:

public class ParkingService {
    public void checkout(String plate, String spaceNum) {
        // 获取停车开始时间
        Date beginTime = getBeginTimeByPlate(plate);

        // 计算停车费用
        double cost = calculateCost(beginTime);

        // 将车位设置为空闲状态
        setSpaceStatus(spaceNum, 0);

        // 记录车位号
        updateSpaceNumByPlate(plate, spaceNum);

        // 删除停车记录
        deleteVehicleRecord(plate);
    }
}

3.4 实现车位管理功能

对车位进行增删改查操作,具体实现如下:

  1. 增加车位
public class ParkingSpaceService {
    public void addSpace(String spaceNum) {
        String sql = "INSERT INTO parking_space (space_num, status) VALUES (?, ?)";
        try (PreparedStatement ps = DBUtil.getPreparedStatement(sql)) {
            ps.setString(1, spaceNum);
            ps.setInt(2, 0);   // 新增车位默认为空闲状态
            ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
  1. 删除车位
public class ParkingSpaceService {
    public void deleteSpace(String spaceNum) {
        String sql = "DELETE FROM parking_space WHERE space_num = ?";
        try (PreparedStatement ps = DBUtil.getPreparedStatement(sql)) {
            ps.setString(1, spaceNum);
            ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
  1. 修改车位状态
public class ParkingSpaceService {
    public void updateStatus(String spaceNum, int status) {
        String sql = "UPDATE parking_space SET status = ? WHERE space_num = ?";
        try (PreparedStatement ps = DBUtil.getPreparedStatement(sql)) {
            ps.setInt(1, status);
            ps.setString(2, spaceNum);
            ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
  1. 查询车位
public class ParkingSpaceService {
    public List<ParkingSpace> getAllSpaces() {
        String sql = "SELECT space_num, status FROM parking_space";
        List<ParkingSpace> parkingSpaces = new ArrayList<>();
        try (PreparedStatement ps = DBUtil.getPreparedStatement(sql)) {
            try (ResultSet rs = ps.executeQuery()) {
                while (rs.next()) {
                    String spaceNum = rs.getString("space_num");
                    int status = rs.getInt("status");
                    parkingSpaces.add(new ParkingSpace(spaceNum, status));
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return parkingSpaces;
    }
}

3.5 实现停车记录查询功能

实现查询所有停车记录和某个时间段停车记录的方法如下:

  1. 查询所有停车记录
public class VehicleRecordService {
    public List<VehicleRecord> getAllRecords() {
        String sql = "SELECT plate, begin_time, space_num, cost FROM vehicle_record";
        List<VehicleRecord> vehicleRecords = new ArrayList<>();
        try (PreparedStatement ps = DBUtil.getPreparedStatement(sql)) {
            try (ResultSet rs = ps.executeQuery()) {
                while (rs.next()) {
                    String plate = rs.getString("plate");
                    Date beginTime = rs.getTime("begin_time");
                    String spaceNum = rs.getString("space_num");
                    double cost = rs.getDouble("cost");
                    vehicleRecords.add(new VehicleRecord(plate, beginTime, spaceNum, cost));
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return vehicleRecords;
    }
}
  1. 查询某个时间段停车记录
public class VehicleRecordService {
    public List<VehicleRecord> getRecordsByTime(Date startTime, Date endTime) {
        String sql = "SELECT plate, begin_time, space_num, cost FROM vehicle_record WHERE begin_time BETWEEN ? AND ?";
        List<VehicleRecord> vehicleRecords = new ArrayList<>();
        try (PreparedStatement ps = DBUtil.getPreparedStatement(sql)) {
            ps.setTime(1, new java.sql.Time(startTime.getTime()));
            ps.setTime(2, new java.sql.Time(endTime.getTime()));
            try (ResultSet rs = ps.executeQuery()) {
                while (rs.next()) {
                    String plate = rs.getString("plate");
                    Date beginTime = rs.getTime("begin_time");
                    String spaceNum = rs.getString("space_num");
                    double cost = rs.getDouble("cost");
                    vehicleRecords.add(new VehicleRecord(plate, beginTime, spaceNum, cost));
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return vehicleRecords;
    }
}

4.示例说明

以下为停车场管理系统的两个示例说明:

示例1:进入停车场

当车辆进入停车场时,调用park()方法记录停车信息。例如,当一辆车进入停车场,并且空闲车位为"A01"时,可以这样调用方法:

ParkingService parkingService = new ParkingService();
parkingService.park("京A12345", "A01");

示例2:查询停车记录

可以调用VehicleRecordService类的getAllRecords()方法查询所有停车记录,例如:

VehicleRecordService vehicleRecordService = new VehicleRecordService();
List<VehicleRecord> records = vehicleRecordService.getAllRecords();
for (VehicleRecord record : records) {
    System.out.println(record);
}

输出结果如下:

VehicleRecord{plate='京A12345', beginTime=09:30:15, spaceNum='A01', cost=2.5}
VehicleRecord{plate='京A67890', beginTime=11:20:10, spaceNum='B02', cost=4.5}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现停车场管理系统 - Python技术站

(0)
上一篇 2023年5月24日
下一篇 2023年5月24日

相关文章

  • javaweb实现注册登录页面

    实现一个Java Web注册登录页面一般需要以下步骤: 设计数据库 注册登录页面需要第一步是设计数据库,在数据库中创建用户表。用户表包括必需的字段,比如用户名、密码等等。 示例: CREATE TABLE users ( id int(11) NOT NULL AUTO_INCREMENT, username varchar(45) NOT NULL, pa…

    Java 2023年6月15日
    00
  • SpringMVC的执行过程浅析

    以下是关于“SpringMVC的执行过程浅析”的完整攻略,其中包含两个示例。 1. 前言 SpringMVC是一种常用Java Web开发框架,其核心思想是基于MVC模式来实现Web应用程序开发。在SpringMVC框架中,请求的处理过程是一个复杂的流程,本攻略将浅析SpringMVC的执行过程。 2. SpringMVC的执行过程 SpringMVC的执行…

    Java 2023年5月16日
    00
  • Java13 明天发布(最新最全新特性解读)

    Java13 发布攻略 Java13 于 2019年9月17日发布,在这篇文档中,我们将介绍 Java13 的最新特性。 1. 新特性 以下是 Java13 中的一些新特性: 1.1 Switch 表达式 Java 13 可以使用新的关键字 yield 或 -> 来作为 switch 表达式的返回值。这使得代码更加简洁。 下面是一个例子: public…

    Java 2023年5月19日
    00
  • java实现文件下载的两种方式

    接下来我将为你讲解如何使用Java实现文件下载的两种方式。 方式一:使用Java IO流实现文件下载 使用Java IO流实现文件下载的过程如下: 创建一个URL对象,用于指定文件所在的URL地址。 使用openStream()方法打开指定URL的流对象。 创建一个File对象并指定文件保存路径。 使用IO流将打开的URL流中的数据读取写入到本地文件中。 关…

    Java 2023年5月20日
    00
  • js插件YprogressBar实现漂亮的进度条效果

    下面是详细的“js插件YprogressBar实现漂亮的进度条效果”的完整攻略。 什么是 YprogressBar YprogressBar 是一个基于 jQuery 的 JavaScript 插件,用于实现网页进度条效果。它可以让进度条随着页面的加载而不断变化,既简单又漂亮,非常适合用于页面加载、文件上传等场合。 YprogressBar 的使用步骤 步骤…

    Java 2023年6月16日
    00
  • java异常处理详细介绍及实例

    Java异常处理详细介绍及实例 什么是Java异常 Java异常是指在程序运行过程中出现的异常事件,例如文件找不到、算数异常、空指针异常等等。在程序中出现异常会导致程序的异常终止,因此程序需要处理这些异常情况。 Java异常的分类 Java异常可以分为两种类型:检查异常和未检查异常。 检查异常 检查异常是指在编译期间就会被检查出来的异常,程序在编译时需要进行…

    Java 2023年5月26日
    00
  • Java中的ArrayList是什么?

    Java中的ArrayList是一种基于动态数组实现的集合类,它能够存储对象,并且可以根据需要动态扩展容量大小,具有快速的随机访问能力。本文将对Java中的ArrayList进行详细讲解,包括其定义、操作、特性和示例说明。 ArrayList的定义 ArrayList是Java中提供的一种集合类,它是基于动态数组实现的,能够存储对象,并且可以根据需要动态扩展…

    Java 2023年4月27日
    00
  • linux环境下安装Docker

    1、概念:docker是一个开源的应用容器引擎,docker可以让开发者打包他们的应用以及依赖环境包到一个轻量级、可移值的容器中。然后发布到任何流行的linux机器上。安装过程: 1、yum包更新到最新 yum update 2、安装需要的软件包 yum install -y yum-utils device-mapper-persistent-data l…

    Java 2023年4月18日
    00
合作推广
合作推广
分享本页
返回顶部