java实现停车场管理系统

yizhihongxing

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日

相关文章

  • Java关于jar包的知识详解

    让我来为你详细讲解Java关于jar包的知识。 什么是jar包? jar是Java Archive的缩写,意思是Java压缩文件。它是Java中常用的一种打包方式,相当于将多个class文件或其它文件合并成一个文件,并对其中的文件进行压缩以减小体积。 jar包的优点 方便代码管理:将多个class文件或其它文件合并到一起,方便管理和分发。 便于发布和部署:只…

    Java 2023年5月20日
    00
  • Java项目实现定时任务的三种方法

    Java项目实现定时任务的三种方法 在Java项目中,我们经常需要实现一些定时任务,比如定时发送邮件、定时备份数据等。本文将介绍实现定时任务的三种常见方法,分别是使用Java内置的Timer类、使用Spring的@Scheduled注解和使用Quartz框架。 方法一:使用Java内置的Timer类 Java内置的Timer类是一个非常方便的定时任务实现方式…

    Java 2023年5月18日
    00
  • SpringBoot使用token简单鉴权的具体实现方法

    一、Token简单鉴权的原理 Token鉴权是一种前后端分离的权限验证方式,具体的原理如下: 用户登录时请求后端API,后端验证用户名和密码是否正确,如果正确,将返回一个Token给前端。 前端将Token保存在本地(通常是localStorage或sessionStorage),后续请求时需要将Token附带在请求头中发送给后端。 后端验证请求头中的Tok…

    Java 2023年5月20日
    00
  • Spring MVC请求参数接收的全面总结教程

    接下来我将详细讲解Spring MVC请求参数接收的全面总结教程。 为什么需要请求参数接收 在Web开发中,经常需要接收前端传来的数据,这些数据以请求参数的形式传递。请求参数通常包含了用户请求的具体行为,并提供了必要的参数数据。例如,访问百度搜索,连接中会携带请求参数q,表示搜索关键词。 Spring MVC框架提供了有用且全面的请求参数接收处理机制,让我们…

    Java 2023年5月16日
    00
  • mybatis 如何利用resultMap复杂类型list映射

    MyBatis是一款流行的Java ORM框架。我们可以使用它来实现数据的持久化操作。在MyBatis中,很多查询的结果都是List对象,但是有时候我们需要将复杂的结果集映射到List对象中。这个时候我们可以使用MyBatis中的ResultMap进行映射。 ResultMap是 MyBatis 映射语句中最重要的元素之一。 它可以很好地将复杂类型的结果集,…

    Java 2023年5月20日
    00
  • Spring Security登录添加验证码的实现过程

    实现Spring Security登录添加验证码的过程大体可以分为以下几步: 添加验证码依赖 首先需要在pom.xml文件中添加相关依赖,以下是一个基本的配置: <dependency> <groupId>com.google.code.kaptcha</groupId> <artifactId>kaptcha…

    Java 2023年5月20日
    00
  • Java实现储存对象并按对象某属性排序的几种方法示例

    让我们来详细讲解一下Java实现储存对象并按对象某属性排序的几种方法示例。 1.使用Comparable接口进行排序 实现Comparable接口 我们可以在对象类中实现Comparable接口,覆盖其compareTo方法,来实现按照某个属性进行排序。如下所示: public class Student implements Comparable<S…

    Java 2023年5月26日
    00
  • java模拟多线程http请求代码分享

    下面是详细的“java模拟多线程http请求代码分享”的攻略: 1. 如何使用Java模拟http请求 Java模拟http请求的主要方式是通过Java的第三方库Apache HttpClient进行实现。下面是几个常用的示例:1. 发送POST请求: CloseableHttpClient httpClient = HttpClients.createDe…

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