Backend Development 16 min read

Java Parking System Implementation with User and Admin Management

This article presents a Java-based parking system that includes user and admin login, random slot allocation, fee calculation based on parking duration, and full source code for client, entity, service, and implementation classes, illustrating backend development concepts.

Java Captain
Java Captain
Java Captain
Java Parking System Implementation with User and Admin Management

This article describes a complete Java parking system project, covering functional requirements such as viewing available slots, random slot assignment, fee calculation (free for up to 3 hours, hourly charge thereafter up to a maximum), user and admin operations, and historical record viewing.

The system consists of several layers: a client console interface, entity classes for Admin, User, and CarParking, service interfaces defining business operations, and concrete service implementations handling the core logic.

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; } } } }

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) { this.username = username; this.password = password; } }

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 int id; //停车的编号 private double money; //钱的计算 private String state; //当前停车状态 private Date stime; //停车时间 private Date etime; //停车结束 private static double allmoney; private static String lishi = ""; public void setStime() { //停车开始时间 stime = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); String time1 = dateFormat.format(this.stime); } public void setEtime() { //停车结束时间 etime = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); String time = dateFormat.format(this.etime); } @Override public String toString() { return id + "\t" + money + "\t" + stime; } public CarParking(int id, String state) { this.id = id; this.state = state; } // getters and setters omitted for brevity }

package com.gem.entity; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @AllArgsConstructor @Setter @NoArgsConstructor @Getter public class User { private String carid; //车牌登录 @Override public String toString() { return "车牌为" + carid; } }

package com.gem.service; /* * 管理员业务接口 */ import com.gem.entity.Admin; public interface AdminService { //登录 Admin login(String username, String password); //注册 boolean register(Admin admin); }

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); } }

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

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; } @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; } }

package com.gem.service; import com.gem.entity.User; public interface UserService { //用车牌登录 User login(User a); }

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 program demonstrates typical backend development patterns such as service interfaces, singleton implementations, in‑memory data storage, and console‑based user interaction, providing a practical example for learning Java application architecture.

backendJavaServiceEntityParking SystemFee Calculation
Java Captain
Written by

Java Captain

Focused on Java technologies: SSM, the Spring ecosystem, microservices, MySQL, MyCat, clustering, distributed systems, middleware, Linux, networking, multithreading; occasionally covers DevOps tools like Jenkins, Nexus, Docker, ELK; shares practical tech insights and is dedicated to full‑stack Java development.

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.