Backend Development 17 min read

Java Parking System Implementation Example

This article presents a complete Java-based parking system example, detailing functional requirements for users and administrators, and providing full source code for client interaction, entity definitions, service interfaces, and their implementations, illustrating backend development concepts such as singleton patterns, service layers, and basic CRUD operations.

Java Architect Essentials
Java Architect Essentials
Java Architect Essentials
Java Parking System Implementation Example

The article describes the design of a parking system where users can view available slots (up to 100), be assigned a random slot, pay based on parking duration (free for up to 3 hours, then 2 CNY per hour up to a maximum of 20 CNY), and check their parking history; administrators can view remaining slots, occupied slots, and payment records.

Below is the Java source code that implements the described functionality.

Client

package com.gem.client;
import java.util.Scanner;
import com.gem.entity.Admin;
import com.gem.entity.User;
import com.gem.service.impl.AdminServiceImpl;
import com.gem.service.impl.CarParkingServiceimpl;
import com.gem.service.impl.UserServiceimpl;

public class Client {
  public static void main(String[] args) {
    CarParkingServiceimpl carparkingservice = CarParkingServiceimpl.getCarparkingservice();
    UserServiceimpl userserviceimpl = UserServiceimpl.getUserserviceimpl();
    Scanner scanner = new Scanner(System.in);
    Menu1(carparkingservice, userserviceimpl, scanner);
  }

  private static void Menu1(CarParkingServiceimpl carparkingservice, UserServiceimpl userserviceimpl, Scanner scanner) {
    while (true) {
      System.out.println("****欢迎进入停车系统****");
      System.out.println("***1.请输入您的车牌***");
      System.out.println("***2.管理员***");
      System.out.println("***3.退出****");
      int choice = Integer.parseInt(scanner.nextLine().trim());
      switch (choice) {
        case 1:
          System.out.println("请输入您的车牌");
          String chepai = scanner.nextLine().trim();
          User a = userserviceimpl.login(new User(chepai));
          if (a != null) {
            System.out.println("车牌登记成功");
            Menu2(carparkingservice, userserviceimpl, scanner, a);
          } else {
            System.out.println("车牌登记失败");
          }
          break;
        case 2:
          Menu_Manger(carparkingservice, userserviceimpl);
          break;
        default:
          break;
      }
    }
  }

  //管理员的登录注册
  private static void Menu_Manger(CarParkingServiceimpl carparkingservice, UserServiceimpl userserviceimpl) {
    AdminServiceImpl adminserviceimpl = AdminServiceImpl.getAdminSeriver();
    while (true) {
      System.out.println("1.管理员登录");
      System.out.println("2.管理员注册");
      System.out.println("返回上一级");
      Scanner scanner = new Scanner(System.in);
      int chose = Integer.parseInt(scanner.nextLine().trim());
      switch (chose) {
        case 1:
          System.out.println("请输入管理员账号");
          String name = scanner.nextLine().trim();
          System.out.println("请输入管理员密码");
          String password = scanner.nextLine().trim();
          if (adminserviceimpl.login(name, password) != null) {
            System.out.println("登录成功");
            Menu_Manger2(carparkingservice, userserviceimpl, adminserviceimpl);
          } else {
            System.out.println("登录失败");
            return;
          }
          break;
        case 2:
          System.out.println("请输入注册账号");
          name = scanner.nextLine().trim();
          System.out.println("请输入注册密码");
          password = scanner.nextLine().trim();
          adminserviceimpl.register(new Admin(name, password));
          break;
        case 3:
          return;
        default:
          return;
      }
    }
  }

  //管理员操作
  private static void Menu_Manger2(CarParkingServiceimpl carparkingservice, UserServiceimpl userserviceimpl, AdminServiceImpl adminserviceimpl) {
    while (true) {
      System.out.println("***欢迎进入管理员操作***");
      System.out.println("1.查看现有停车位");
      System.out.println("2.查看停车位上的车以及缴费");
      System.out.println("3.返回上一级");
      Scanner scanner = new Scanner(System.in);
      int chose = Integer.parseInt(scanner.nextLine().trim());
      switch (chose) {
        case 1:
          carparkingservice.showlist();
          break;
        case 2:
          carparkingservice.show();
          break;
        case 3:
          return;
        default:
          System.out.println("输入错误");
          break;
      }
    }
  }

  private static void Menu2(CarParkingServiceimpl carparkingservice, UserServiceimpl userserviceimpl, Scanner scanner, User a) {
    while (true) {
      System.out.println("欢迎车牌为:" + a.getCarid() + "车主" + "请选择您要的服务");
      System.out.println("1.停车");
      System.out.println("2.离开并缴费");
      System.out.println("3.查看停车车位");
      System.out.println("4.停车时长");
      System.out.println("0.返回上一级");
      int chose = Integer.parseInt(scanner.nextLine().trim());
      switch (chose) {
        case 1:
          if (carparkingservice.chack(a.getCarid())) {
            break;
          }
          while (true) {
            int random = (int) (Math.random() * 10); //随机一个车位
            if (carparkingservice.parkcar(random, a.getCarid())) {
              System.out.println("停车成功,停车位置为:" + random);
              break;
            } else {
              System.out.println("当前车位有车");
            }
          }
          break;
        case 2:
          if (carparkingservice.leavecar(a.getCarid())) {
            System.out.println("请缴费");
          } else {
            System.out.println("该车未停");
          }
          break;
        case 3:
          carparkingservice.showlist();
          break;
        case 4:
          carparkingservice.showcartime(a.getCarid());
          break;
        case 0:
          return;
        default:
          System.out.println("输入错误");
          break;
      }
    }
  }
}

Admin Entity

package com.gem.entity;
import java.util.ArrayList;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class Admin {
  private String username;
  private String password;
  private double money;
  private ArrayList
list = new ArrayList
();

  @Override
  public String toString() {
    return username + "\t" + password;
  }

  public Admin(String username, String password) {
    super();
    this.username = username;
    this.password = password;
  }
}

CarParking Entity

package com.gem.entity;
import java.text.SimpleDateFormat;
import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@AllArgsConstructor
@NoArgsConstructor
@Getter
public class CarParking { //车位
  private static String lishi = "";
  private int id; //停车的编号
  private double money; //钱的计算
  private String state; //当前停车状态
  private Date stime; //停车时间
  private Date etime; //停车结束
  private static double allmoney;

  public static String getLishi() { return lishi; }
  public static void setLishi(String lishi) { CarParking.lishi = lishi; }

  public void setEtime() {
    etime = new Date();
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    String time = dateFormat.format(this.etime);
  }

  public void setStime() {
    stime = new Date();
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    String time1 = dateFormat.format(this.stime);
  }

  public String toString() {
    return id + "\t" + money + "\t" + stime;
  }

  public CarParking(int id, String state) {
    this.id = id;
    this.state = state;
  }

  public void CarPark(int id, String carid) {
    this.id = id;
    this.state = carid;
  }

  public int getId() { return id; }
  public void setId(int id) { this.id = id; }
  public double getMoney() { return money; }
  public void setMoney(double money) { this.money = money; }
  public String getState() { return state; }
  public void setState(String state) { this.state = state; }
  public static double getAllmoney() { return allmoney; }
  public static void setAllmoney(double allmoney) { CarParking.allmoney = allmoney; }
}

User Entity

package com.gem.entity;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class User {
  private String carid; //车牌登录

  @Override
  public String toString() {
    return "车牌为" + carid;
  }
}

AdminService Interface

package com.gem.service;
import com.gem.entity.Admin;

public interface AdminService {
  //登录
  Admin login(String username, String password);
  //注册
  boolean register(Admin admin);
}

AdminServiceImpl

package com.gem.service.impl;
import java.util.ArrayList;
import com.gem.entity.Admin;
import com.gem.service.AdminService;

public class AdminServiceImpl implements AdminService {
  private ArrayList
adminList = new ArrayList
();
  //单例饿汉模式
  private static final AdminServiceImpl adminSeriver = new AdminServiceImpl();

  public static AdminServiceImpl getAdminSeriver() { return adminSeriver; }

  private AdminServiceImpl() {}

  @Override
  public Admin login(String username, String password) {
    for (Admin admin : adminList) {
      if (admin.getUsername().equals(username) && admin.getPassword().equals(password)) {
        return admin;
      }
    }
    return null;
  }

  @Override
  public boolean register(Admin admin) {
    return adminList.add(admin);
  }
}

CarParkingService Interface

package com.gem.service;
public interface CarParkingService {
  boolean parkcar(int id, String carid); //停车
  void showlist(); //显示所有列表
  boolean leavecar(String carid); //离开
}

CarParkingServiceimpl

package com.gem.service.impl;
import java.util.ArrayList;
import java.util.Date;
import com.gem.entity.CarParking;
import com.gem.service.CarParkingService;

public class CarParkingServiceimpl implements CarParkingService {
  private ArrayList
carpaking = new ArrayList
();
  {
    for (int i = 1; i <= 10; i++) {
      carpaking.add(new CarParking(i, "当前车位为空")); // 为10个车位赋予编号 和状态
    }
  }
  private static CarParkingServiceimpl carparkingservice = new CarParkingServiceimpl();
  public static CarParkingServiceimpl getCarparkingservice() { return carparkingservice; }
  public CarParkingServiceimpl() {}

  @Override
  public boolean parkcar(int id, String carid) {
    for (CarParking car : carpaking) {
      if (id == car.getId() && car.getState().equals("当前车位为空")) {
        car.setState(carid);
        car.setStime();
        return true; //停车成功
      }
    }
    return false; //当前车位有车
  }

  @Override
  public void showlist() {
    for (CarParking car : carpaking) {
      System.out.println(car.getId() + "\t" + car.getState());
    }
  }

  public void showcartime(String carid) {
    for (CarParking car : carpaking) {
      if (car.getState().equals(carid)) {
        car.setEtime();
        Date time1 = car.getEtime(); //当前时间
        Date time2 = car.getStime(); //开始时间
        System.out.println("车位为:" + car.getId() + "车牌为" + car.getState());
        System.out.println("停车时间为:" + car.getStime());
        System.out.println("当前时间为:" + car.getEtime());
        System.out.println("已经停车时间为:" + (time1.getTime() - time2.getTime()) / (1000 * 60 * 60));
      }
    }
  }

  @Override
  public boolean leavecar(String carid) {
    for (CarParking car : carpaking) {
      if (car.getState().equals(carid)) {
        car.setEtime();
        Date time1 = car.getEtime();
        Date time2 = car.getStime();
        long t = (time1.getTime() - time2.getTime()) / (1000 * 60 * 60);
        System.out.println("车位为:" + car.getId() + "车牌为" + car.getState());
        System.out.println("停车时间为:" + car.getStime());
        System.out.println("当前时间为:" + car.getEtime());
        System.out.println("已经停车时间为:" + t);
        if (t <= 3) {
          car.setMoney(0);
          CarParking.setAllmoney(CarParking.getAllmoney() + car.getMoney());
        } else if (t > 3 && t <= 13) {
          car.setMoney(2 * (t - 3));
          CarParking.setAllmoney(CarParking.getAllmoney() + car.getMoney());
        } else if (t > 13) {
          car.setMoney(20);
          CarParking.setAllmoney(CarParking.getAllmoney() + car.getMoney());
        }
        car.setLishi(car.getLishi() + "车位:" + car.getId() + "收入金额为:" + car.getMoney() + "\n");
        System.out.println("停车费为:" + car.getMoney());
        car.setState("当前车位为空");
        return true;
      }
    }
    return false;
  }

  public void show() {
    for (CarParking car : carpaking) {
      System.out.println(car.getLishi());
      return;
    }
  }

  public boolean chack(String carid) {
    for (CarParking car : carpaking) {
      if (car.getState().equals(carid)) {
        System.out.println("车辆正在停使中");
        return true;
      }
    }
    return false;
  }
}

UserService Interface

package com.gem.service;
import com.gem.entity.User;

public interface UserService {
  //用车牌登录
  User login(User a);
}

UserServiceimpl

package com.gem.service.impl;
import java.util.ArrayList;
import com.gem.entity.User;
import com.gem.service.UserService;

public class UserServiceimpl implements UserService {
  private ArrayList
user = new ArrayList
();
  private static UserServiceimpl userserviceimpl = new UserServiceimpl(); //单例

  private UserServiceimpl() {}

  public static UserServiceimpl getUserserviceimpl() { return userserviceimpl; }

  @Override
  public User login(User a) { //把车牌录入
    user.add(a);
    return a;
  }
}

The complete example demonstrates how to structure a simple parking management application using Java, covering entity modeling, service abstraction, singleton implementation, and console‑based user interaction.

javaBackend DevelopmentCode ExampleSingletonService LayerParking System
Java Architect Essentials
Written by

Java Architect Essentials

Committed to sharing quality articles and tutorials to help Java programmers progress from junior to mid-level to senior architect. We curate high-quality learning resources, interview questions, videos, and projects from across the internet to help you systematically improve your Java architecture skills. Follow and reply '1024' to get Java programming resources. Learn together, grow together.

0 followers
Reader feedback

How this landed with the community

login Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.