java实现停车场系统

Java实现停车场系统攻略

系统设计

  1. 初步确定系统需求

停车场系统需要实现两个功能,分别是车辆进入停车场和车辆离开停车场,并实现计费功能。

  1. 分析系统设计需求

系统设计需要涉及的类有停车场类 ParkingLot、车类 Car、计时器类 Timer、收费类 Fees,以及一个 main 函数。

其中停车场类需要实现车辆进入停车场、车辆离开停车场、查询剩余车位数和停车费用等方法。

车类需要拥有车牌号码和停车时间等信息。

计时器类需要记录停车时间。

收费类需要计算停车费用。

  1. 设计类之间的关系

停车场类需要使用 Car 和 Timer 类来记录车辆进出停车场的时间,以便计算停车时间和停车费用。收费类需要使用计时器类和车类计算停车费用。

代码实现

ParkingLot 类

import java.util.ArrayList;

public class ParkingLot {
    private int maxSize;
    private ArrayList<Car> parkedCars;
    private int fees = 5;

    public ParkingLot(int maxSize) {
        this.maxSize = maxSize;
        parkedCars = new ArrayList<>();
    }

    public boolean park(Car car) {
        if (parkedCars.size() >= maxSize) {
            return false;
        } else {
            parkedCars.add(car);
            return true;
        }
    }

    public int leave(String license) {
        for (int i = 0; i < parkedCars.size(); ++i) {
            Car car = parkedCars.get(i);
            if (car.getLicense().equals(license)) {
                parkedCars.remove(i);
                Fees fees = new Fees(car.getEnterTime());
                return fees.getFees();
            }
        }
        return -1;
    }

    public int getAvailableNumber() {
        return maxSize - parkedCars.size();
    }

    public int getFees() {
        return fees;
    }
}

Car 类

import java.util.Date;

public class Car {
    private String license;
    private Date enterTime;

    public Car(String license, Date enterTime) {
        this.license = license;
        this.enterTime = enterTime;
    }

    public String getLicense() {
        return license;
    }

    public Date getEnterTime() {
        return enterTime;
    }
}

Fees 类

public class Fees {
    private final int unitPrice = 2;
    private final int initHour = 3;
    private final int initCost = 5;

    private long startTime;

    public Fees(long startTime) {
        this.startTime = startTime;
    }

    public int getFees() {
        long duration = (System.currentTimeMillis() - startTime) / 3600000;
        if (duration < initHour) {
            return initCost;
        } else {
            return (int) (duration - initHour) * unitPrice + initCost;
        }
    }
}

示例

下面是一个基于 ParkingLot 类的使用示例:

import java.util.Date;

public class Test {
    public static void main(String[] args) {
        ParkingLot parkingLot = new ParkingLot(10);
        Car car1 = new Car("苏E88888", new Date());
        Car car2 = new Car("苏E77777", new Date());

        boolean ok = parkingLot.park(car1);
        if (!ok) {
            System.out.println("停车失败,车位已满");
        } else {
            System.out.println("停车成功");
        }

        ok = parkingLot.park(car2);
        if (!ok) {
            System.out.println("停车失败,车位已满");
        } else {
            System.out.println("停车成功");
        }

        int fees = parkingLot.leave("苏E88888");
        if (fees == -1) {
            System.out.println("车牌号不存在或车位已空");
        } else {
            System.out.println("离开费用:" + fees);
        }
    }
}

输出:

停车成功
停车成功
离开费用:5

总结

实现一个停车场系统,主要需要设计停车场类、车类和收费计算类,其中停车场类实现了车辆入场、出场和查询剩余车位等功能,车类记录车牌号和停车时间,收费计算类负责计算停车费用。达到以上效果即可实现一个简单的停车场系统。

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

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

相关文章

  • Java实现几十万条数据插入实例教程(30万条数据插入MySQL仅需13秒)

    这篇文章主要介绍如何使用Java实现大批量数据插入到MySQL数据库中,并给出了具体实现的教程和示例代码。下面是详细的攻略流程: 1. 数据准备 首先需要准备数据,可以是一组代表性数据样例集或随机生成的大规模数据,此处以随机生成数据为例。可以使用Java中的Random类来生成随机数据。 2. MySQL数据库连接 使用Java语言连接MySQL数据库,这里…

    Java 2023年6月1日
    00
  • Spring Security自定义认证逻辑实例详解

    来详细讲解一下“Spring Security自定义认证逻辑实例详解”的完整攻略。 1. 概述 Spring Security是一个功能强大的安全框架,提供了包括认证、授权、攻击防范等在内的综合安全解决方案。在Spring Security中,认证是一个非常重要的环节。本攻略旨在详细讲解Spring Security中如何自定义认证逻辑。 2. 前置条件 在…

    Java 2023年5月20日
    00
  • Java构建乘积数组的方法

    Java构建乘积数组的方法可以通过使用常规的算法实现。假设给定一个长度为n的整数数组,要求构建一个长度为n的数组,其中的每个元素都是原始数组中除该元素外所有元素的乘积。实现这个算法的时候,可以按照以下步骤进行: 创建两个辅助数组leftProduct和rightProduct,它们的长度都是n。 对leftProduct数组进行初始化,使得leftProdu…

    Java 2023年5月26日
    00
  • Java实现ATM系统超全面步骤解读建议收藏

    Java实现ATM系统超全面步骤解读 1. 前言 ATM系统是日常生活中经常使用的自助银行系统,本文将介绍如何使用Java完成ATM系统的开发。该系统主要包括用户登录、查询账户信息、存款、取款、转账等基本功能。 2. 数据库设计 在开发ATM系统之前,需要先进行数据库设计。具体步骤如下: 2.1. 创建数据库 首先需要在MySQL数据库中创建一个名为ATM的…

    Java 2023年5月19日
    00
  • jQuery分页插件jquery.pagination.js使用方法解析

    jQuery分页插件jquery.pagination.js使用方法解析 什么是jquery.pagination.js jquery.pagination.js 是一个基于 jQuery 的分页插件,可以用于在网站中实现分页功能,便于用户查看大量数据。 如何使用jquery.pagination.js 引入文件 首先需要引入jquery和jquery.pa…

    Java 2023年6月15日
    00
  • Java Swing 多线程加载图片(保证顺序一致)

    Java Swing 多线程加载图片是一种在图形界面中快速显示大量图片的思路。在实现过程中,通过多线程并发加载图片,可以提高程序的运行效率,同时通过”保证顺序一致”的要求,可以使得程序在显示图片时始终保持正确的顺序,避免了一些错误和混淆。下面是交互过程及详细攻略。 交互过程 用户打开网站后,滑动页面会有几百张被切割成小图片的性感美女图片实时刷新显示,用户可以…

    Java 2023年5月18日
    00
  • Apache Shiro 使用手册(五) Shiro 配置说明

    下面是 Apache Shiro 使用手册(五) Shiro 配置说明 的完整攻略: 概述 本文将详细介绍 Apache Shiro 的配置方式,包括常见的配置项和配置文件的使用方法。通过本文的学习,你将能够快速上手 Apache Shiro 的配置工作。 常见配置项 SecurityManager 在 Apache Shiro 中,SecurityMana…

    Java 2023年6月15日
    00
  • Spring Boot 和 Spring 到底有啥区别你知道吗

    Spring是一个Java企业级应用框架,该框架在应用开发中蕴含了大量的设计模式和最佳实践,并提供了特性多样、功能强大的模块,帮助开发者更好地实现业务功能。而Spring Boot是在Spring基础上进一步简化了Spring的配置和使用,提供了一些约定大于配置的方式,让开发者专注于业务逻辑的实现,而非框架细节。 下面分别从以下几个方面详细讲解Spring和…

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