java实现停车场系统

yizhihongxing

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日期转换注解配置date format时间失效

    Java中日期的转换是非常常见的操作,通常在开发过程中使用注解方式进行转换。然而,如果注解的配置中没有设置正确的date format,那么转换结果就会出现问题。本文将为您详细讲解如何解决Java日期转换注解配置date format时间失效的问题。 问题分析 在Java开发过程中,我们经常会用到注解来进行日期的转换,例如将java.util.Date类型转…

    Java 2023年5月20日
    00
  • Java数组归纳总结

    Java数组归纳总结 在Java语言中,数组是一种非常常用的数据结构,可以用来存储同一类型的数据。本文将对Java数组进行归纳总结,包括数组的定义、初始化、遍历、复制、排序等常用操作,以及一些常见问题和解决方案。 数组的定义 Java数组是一种固定长度的数据结构,可以存储同一类型的数据。数组定义时需要指定数组的长度和类型。 声明一个长度为10,类型为int的…

    Java 2023年5月26日
    00
  • Spring Security Remember me使用及原理详解

    Spring Security Remember me是一种通过在用户登录后为用户生成Token,使用户在下一次访问时可以跳过登录,直接使用Token进行自动登录的机制。 实现Remember me功能可以使用Spring Security提供的RememberMeAuthenticationFilter过滤器,该过滤器会在用户登录成功后创建一个Token,…

    Java 2023年5月20日
    00
  • 为什么在foreach循环中JAVA集合不能添加或删除元素

    为什么在foreach循环中JAVA集合不能添加或删除元素 在foreach循环中,JAVA集合是不允许添加或删除元素的。这是由于foreach循环需要遍历整个集合,而在循环过程中添加或删除元素会打乱集合中元素的顺序,从而可能导致遍历出错或漏掉某些元素,因此被JAVA设计者禁止了。 示例一: List<Integer> list = new Ar…

    Java 2023年5月20日
    00
  • springboot下使用mybatis的方法

    下面是详细的“springboot下使用mybatis的方法”的攻略: 1. 引入依赖 在pom.xml文件中引入mybatis-spring-boot-starter依赖,如下: <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId&…

    Java 2023年5月20日
    00
  • Mybatis实现增删改查

    下面是详细讲解MyBatis实现增删改查的完整攻略: 1.添加MyBatis配置文件 在项目下创建mybatis-config.xml配置文件,其中包含对mybatis初始化相关配置信息,如数据源、别名、 mapper扫描等。 <?xml version="1.0" encoding="UTF8" ?> &…

    Java 2023年5月19日
    00
  • Java实现搜索功能代码详解

    Java实现搜索功能代码详解 在Java Web应用程序开发中,搜索功能通常是必不可少的一个功能。本文将介绍如何使用Java实现搜索功能,包括搜索框处理、全文搜索等功能。 处理搜索框请求 在Java Web应用程序中,处理搜索功能的第一步是处理搜索框的请求。搜索框通常是一个包含输入框和提交按钮的HTML表单。例如,以下是一个简单的搜索框: <form …

    Java 2023年5月18日
    00
  • Java创建随机数的四种方式总结

    Java创建随机数的四种方式总结 在Java中,有多种方式可以创建随机数。下面将总结Java创建随机数的四种方式,并给出两个示例说明。 1. java.util.Random类 使用java.util.Random类可以生成随机数。这种方式通常使用步骤如下: 创建一个Random对象,如Random rand = new Random()。 调用rand对象…

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