java實(shí)現(xiàn)停車場(chǎng)系統(tǒng)
本文實(shí)例為大家分享了java實(shí)現(xiàn)停車場(chǎng)系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
現(xiàn)開(kāi)發(fā)一個(gè)停車系統(tǒng),用戶根據(jù)車位停車
1)車主查看現(xiàn)在有無(wú)車位(最多100個(gè)車位),給車主隨機(jī)分配一個(gè)車位,如果該位置上有車,不能停
2)按停車時(shí)間收費(fèi),3小時(shí)以內(nèi)不收費(fèi),3小時(shí)以外,每小時(shí)2元,最大20元
3)車主可以查看自己停車的車位和收費(fèi),以及停車的時(shí)長(zhǎng)
4)查看歷史停車記錄
管理員:
查看現(xiàn)有的剩余車位
查看已停車的車位
查看停在車位上的車以及歷史繳費(fèi)







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("****歡迎進(jìn)入停車系統(tǒng)****");
System.out.println("***1.請(qǐng)輸入您的車牌***");
System.out.println("***2.管理員");
System.out.println("***3.退出****");
int choice = Integer.parseInt(scanner.nextLine().trim());
switch (choice) {
case 1:
System.out.println("請(qǐng)輸入您的車牌");
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);
default:
break;
}
}
}
//管理員的登錄注冊(cè)
private static void Menu_Manger(CarParkingServiceimpl carparkingservice, UserServiceimpl userserviceimpl) {
AdminServiceImpl adminserviceimpl = AdminServiceImpl.getAdminSeriver();
while (true) {
System.out.println("1.管理員登錄");
System.out.println("2.管理員注冊(cè)");
System.out.println("返回上一級(jí)");
Scanner scanner = new Scanner(System.in);
int chose = Integer.parseInt(scanner.nextLine().trim());
switch (chose) {
case 1:
System.out.println("請(qǐng)輸入管理員賬號(hào)");
String name = scanner.nextLine().trim();
System.out.println("請(qǐng)輸入管理員密碼");
String password = scanner.nextLine().trim();
if (adminserviceimpl.login(name, password) != null) {
System.out.println("登錄成功");
Menu_Manger2(carparkingservice, userserviceimpl, adminserviceimpl);//進(jìn)行管理員操作
} else {
System.out.println("登錄失敗");
return;
}
break;
case 2:
System.out.println("請(qǐng)輸入注冊(cè)賬號(hào)");
name = scanner.nextLine().trim();
System.out.println("請(qǐng)輸入注冊(cè)密碼");
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("***歡迎進(jìn)入管理員操作***");
System.out.println("1.查看現(xiàn)有停車位");
System.out.println("2.查看停車位上的車以及繳費(fèi)");
System.out.println("3.返回上一級(jí)");
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("輸入錯(cuò)誤");
break;
}
}
}
private static void Menu2(CarParkingServiceimpl carparkingservice, UserServiceimpl userserviceimpl, Scanner scanner,
User a) {
while (true) {
System.out.println("歡迎車牌為:" + a.getCarid() + "車主" + "請(qǐng)選擇您要的服務(wù)");
System.out.println("1.停車");
System.out.println("2.離開(kāi)并繳費(fèi)");
System.out.println("3.查看停車車位");
System.out.println("4.停車時(shí)長(zhǎng)");
System.out.println("0.返回上一級(jí)");
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); //隨機(jī)一個(gè)車位
if (carparkingservice.parkcar(random, a.getCarid())) {
System.out.println("停車成功,停車位置為:" + random);
break;
} else {
System.out.println("當(dāng)前車位有車");
}
}
break;
case 2:
if (carparkingservice.leavecar(a.getCarid())) {
System.out.println("請(qǐng)繳費(fèi)");
} else {
System.out.println("該車未停");
}
break;
case 3:
carparkingservice.showlist();//顯示目前所有的空的車位
break;
case 4:
carparkingservice.showcartime(a.getCarid());//顯示停車時(shí)長(zhǎng)
break;
case 0:
return;
default:
System.out.println("輸入錯(cuò)誤");
break;
}
}
}
}
Admin
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<String> list = new ArrayList<String>();
@Override
public String toString() {
return username + "\t" + password;
}
public Admin(String username, String password) {
super();
this.username = username;
this.password = password;
}
}
CarParking
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 { //車位
public static String getLishi() {
return lishi;
}
public static void setLishi(String lishi) {
CarParking.lishi = lishi;
}
private int id; //停車的編號(hào)
private double money;//錢的計(jì)算
private String state; //當(dāng)前停車狀態(tài)
private Date stime;//停車時(shí)間
private Date etime;//停車結(jié)束
private static double allmoney;
private static String lishi = "";
public void setEtime() {//停車結(jié)束時(shí)間
etime = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String time = dateFormat.format(this.etime);
}
public void setStime() {//停車開(kāi)始時(shí)間
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) {
// TODO Auto-generated method stub
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
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;
}
}
AdminService
package com.gem.service;
/*
* 管理員業(yè)務(wù)接口
*
* */
import com.gem.entity.Admin;
public interface AdminService {
//登錄
Admin login(String username, String password);
//注冊(cè)
boolean register(Admin admin);
}
AdminServiceImpl
package com.gem.service.impl;
import java.util.ArrayList;
import com.gem.entity.Admin;
import com.gem.service.AdminService;
/*
* 管理員類實(shí)現(xiàn)類
* */
public class AdminServiceImpl implements AdminService {
private ArrayList<Admin> adminList = new ArrayList<Admin>();
//單例餓漢模式
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) {
boolean flag = adminList.add(admin);//添加管理員
return flag;
}
}
CarParkingService
package com.gem.service;
public interface CarParkingService {
boolean parkcar(int id, String carid); //停車
void showlist();//顯示所有列表
boolean leavecar(String carid); //離開(kāi)
}
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<CarParking> carpaking = new ArrayList<CarParking>();
{
for (int i = 1; i <= 10; i++) {
carpaking.add(new CarParking(i, "當(dāng)前車位為空")); // 為100個(gè)車位賦予編號(hào) 和狀態(tài)
}
}
private static CarParkingServiceimpl carparkingservice = new CarParkingServiceimpl();
public static CarParkingServiceimpl getCarparkingservice() {
return carparkingservice;
}
public CarParkingServiceimpl() {
}
//停車過(guò)來(lái)的信息,車牌,還有車位,還有更改狀態(tài),利用車位編號(hào)來(lái)改變內(nèi)容
@Override
public boolean parkcar(int id, String carid) {
// TODO Auto-generated method stub
for (CarParking car : carpaking) {
if (id == car.getId() && car.getState().equals("當(dāng)前車位為空")) {
car.setState(carid);
car.setStime();
return true; //停車成功
}
}
return false;//當(dāng)前車位有車
}
@Override //顯示所有停車系統(tǒng)的信息
public void showlist() {
// TODO Auto-generated method stub
for (CarParking car : carpaking) {
System.out.println(car.getId() + "\t" + car.getState());
}
}
public void showcartime(String carid) {
// TODO Auto-generated method stub
for (CarParking car : carpaking) {
if (car.getState().equals(carid)) {
car.setEtime();
Date time1 = car.getEtime();//得到當(dāng)前的查詢時(shí)間
Date time2 = car.getStime();//得到開(kāi)始時(shí)間
System.out.println("車位為:" + car.getId() + "車牌為" + car.getState());
System.out.println("停車時(shí)間為:" + car.getStime());
System.out.println("當(dāng)前時(shí)間為:" + car.getEtime());
System.out.println("已經(jīng)停車時(shí)間為:" + (time1.getTime() - time2.getTime()) / (1000 * 60 * 60));
}
}
}
public boolean leavecar(String carid) {
// TODO Auto-generated method stub
for (CarParking car : carpaking) {
if (car.getState().equals(carid)) {
car.setEtime();
Date time1 = car.getEtime();//得到當(dāng)前的查詢時(shí)間
Date time2 = car.getStime();//得到開(kāi)始時(shí)間
long t = (time1.getTime() - time2.getTime()) / (1000 * 60 * 60);
System.out.println("車位為:" + car.getId() + "車牌為" + car.getState());
System.out.println("停車時(shí)間為:" + car.getStime());
System.out.println("當(dāng)前時(shí)間為:" + car.getEtime());
System.out.println("已經(jīng)停車時(shí)間為:" + t);
if (t <= 3) {
car.setMoney(0);
car.setAllmoney(car.getAllmoney() + car.getMoney()); //錢累加
} else if (t > 3 && t <= 13) {
car.setMoney(2 * (t - 3));
car.setAllmoney(car.getAllmoney() + car.getMoney()); //錢累加
} else if (t > 13) {
car.setMoney(20);
car.setAllmoney(car.getAllmoney() + car.getMoney()); //錢累加
}
car.setLishi(car.getLishi() + "車位:" + car.getId() + "收入金額為:" + car.getMoney() + "\n");
System.out.println("停車費(fèi)為:" + car.getMoney());
car.setState("當(dāng)前車位為空");
return true;
}
}
return false;
}
public void show() {
// TODO Auto-generated method stub
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
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> user = new ArrayList<User>();
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;
}
}
更多學(xué)習(xí)資料請(qǐng)關(guān)注專題《管理系統(tǒng)開(kāi)發(fā)》。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)線性表的順序存儲(chǔ)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)線性表的順序存儲(chǔ),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10
關(guān)于Java垃圾回收開(kāi)銷降低的幾條建議
垃圾回收(Garbage Collection)是Java虛擬機(jī)(JVM)垃圾回收器提供的一種用于在空閑時(shí)間不定時(shí)回收無(wú)任何對(duì)象引用的對(duì)象占據(jù)的內(nèi)存空間的一種機(jī)制,下面這篇文章主要介紹了關(guān)于Java垃圾回收開(kāi)銷降低的幾條建議,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-02-02
Springboot?Vue實(shí)現(xiàn)單點(diǎn)登陸功能示例詳解
這篇文章主要為大家介紹了Springboot?Vue實(shí)現(xiàn)單點(diǎn)登陸功能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Spring AOP如何在注解上使用SPEL表達(dá)式注入對(duì)象
這篇文章主要介紹了Spring AOP如何在注解上使用SPEL表達(dá)式注入對(duì)象,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
Spring?IOC容器Bean管理的完全注解開(kāi)發(fā)放棄配置文件
這篇文章主要為大家介紹了Spring?IOC容器的Bean管理完全注解開(kāi)發(fā)放棄配置文件,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
JAVA對(duì)字符串進(jìn)行32位MD5加密的實(shí)踐
本文主要介紹了JAVA對(duì)字符串進(jìn)行32位MD5加密的實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
mybatis快速入門(mén)學(xué)習(xí)教程新手注意問(wèn)題小結(jié)
MyBatis 是支持定制化 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射的優(yōu)秀的持久層框架。接下來(lái)通過(guò)本文給大家介紹mybatis快速入門(mén)學(xué)習(xí)教程新手注意問(wèn)題小結(jié),需要的朋友可以參考下2017-02-02
Spring零基礎(chǔ)入門(mén)WebFlux響應(yīng)式編程
Spring 提供了兩個(gè)并行堆棧,一種是基于帶有 Spring MVC 和 Spring Data 結(jié)構(gòu)的 Servlet API,另一個(gè)是完全反應(yīng)式堆棧,它利用了 Spring WebFlux 和 Spring Data 的反應(yīng)式存儲(chǔ)庫(kù),這篇文章主要介紹了Spring-webflux 響應(yīng)式編程,需要的朋友可以參考下2022-10-10

