用Java开发一个停车场系统
程序员闪充宝
共 9147字,需浏览 19分钟
· 2020-11-27
作者:亰
来源:blog.csdn.net/weixin_43951778
现开发一个停车系统,用户根据车位停车
1)车主查看现在有无车位(最多100个车位),给车主随机分配一个车位,如果该位置上有车,不能停
2)按停车时间收费,3小时以内不收费,3小时以外,每小时2元,最大20元
3)车主可以查看自己停车的车位和收费,以及停车的时长
4)查看历史停车记录
管理员:
查看现有的剩余车位
查看已停车的车位
查看停在车位上的车以及历史缴费
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);
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
package com.gem.entity;
import java.util.ArrayList;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
public class Admin {
private String username;
private String password;
private double money;
private ArrayList<String> list = new ArrayList<String>();
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;
public class CarParking { //车位
public static String getLishi() {
return lishi;
}
public static void setLishi(String lishi) {
CarParking.lishi = lishi;
}
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 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) {
// 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;
public class User {
private String carid; //车牌登录
public String toString() {
return "车牌为" + carid;
}
}
AdminService
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() {
}
//管理员登录
public Admin login(String username, String password) {//登录
for (Admin admin : adminList) {
if (admin.getUsername().equals(username) && admin.getPassword().equals(password)) {
return admin;
}
}
return null;
}
//添加管理员
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); //离开
}
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, "当前车位为空")); // 为100个车位赋予编号 和状态
}
}
private static CarParkingServiceimpl carparkingservice = new CarParkingServiceimpl();
public static CarParkingServiceimpl getCarparkingservice() {
return carparkingservice;
}
public CarParkingServiceimpl() {
}
//停车过来的信息,车牌,还有车位,还有更改状态,利用车位编号来改变内容
@Override
public boolean parkcar(int id, String carid) {
// TODO Auto-generated method stub
for (CarParking car : carpaking) {
if (id == car.getId() && car.getState().equals("当前车位为空")) {
car.setState(carid);
car.setStime();
return true; //停车成功
}
}
return false;//当前车位有车
}
@Override //显示所有停车系统的信息
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();//得到当前的查询时间
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));
}
}
}
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();//得到当前的查询时间
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);
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("停车费为:" + car.getMoney());
car.setState("当前车位为空");
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 = new ArrayList ();
private static UserServiceimpl userserviceimpl = new UserServiceimpl(); //单例
private UserServiceimpl() {
}
public static UserServiceimpl getUserserviceimpl() {
return userserviceimpl;
}
public User login(User a) { //把车牌录入
user.add(a);
return a;
}
}
好文章,我在看
好文章,我在看
评论
一个朋友
一个朋友,在深圳奋斗7年,和女友在去年合力在龙华买了一套房,总价600万,首付3成。但就在昨天,他们崩溃了。深圳推出可售型人才住房,就在他们新房附近,同样面积,总价不到400万,售价近乎腰斩。他们想不明白,同样是深圳人,买房人为什么都要被当成炒房客对待?二手房冰封,卖不出,新房不断打着,像极了上世纪
嵌入式Linux
0
老爸嘲讽我了,写破代码一年就挣十几万,他在工地带50个工人,一个月光人头费就3万,让我滚回去跟他干!
点击上方 "大数据肌肉猿"关注, 星标一起成长点击下方链接,进入高质量学习交流群今日更新| 1052个转型案例分享-大数据交流群来自:网络,侵删有个网友的父亲是做工程的,天天就嘲笑他,说他天天写着破代码有啥用,一年就拿个十多万的死工资,然后告诉他自己在工地里面带了50个工人,一个月能抽三万
程序源代码
0
豆瓣9.7,这部Java神作第3版重磅上市!
文末赠书Java 程序员们开年就有重磅好消息,《Effective Java 中文版(原书第 3 版)》要上市啦!该书的第1版出版于 2001 年,当时就在业界流传开来,受到广泛赞誉。时至今日,已热销近20年,本书第 3 版已是 Java 程序员的必读神书,被誉为“Java 四大名著之一”,甚至连
编码之外
0
测试新人,如何快速上手一个陌生的系统!
大家好,我是狂师!作为刚入行不久的测试新人,面对一个陌生的系统时,可能会感到有些手足无措。面对一个全新的系统系统,如何快速上手并展开有效的测试工作是一个重要的挑战。本文将探讨测试新人如何通过一系列步骤和策略,快速熟悉并掌握新系统的测试要点,从而提高测试效率和质量。本文旨在为测试新手提供一份指导,帮助
测试开发技术
0
Windows格式化对话框是一个使用了30年的 “临时解决方案”
戴夫-普卢默(Dave Plummer)是微软的资深工程师,曾创造了任务管理器、Windows 弹球、原生 ZIP 支持(微软出钱买断该功能后,他用这笔钱购买了一辆红色克尔维特)等传奇。近日他在自己的 X 账户上分享了创建 "格式化" 对话框的故事 —— 称其是一个使用了长达 30 年的 “临时解决
开源Linux
0
一个神奇的 Linux命令——type
转自:科学随想录在Linux系统中,了解命令的类型、位置和完整路径对于系统管理和开发非常重要。type命令是一个强大而实用的工具,能够帮助我们查看给定命令的类型、位置和完整路径。在本文中,我们将深入探索type命令的用法和功能,并提供详细的代码示例和输出,以帮助读者全面了解该命令。第一部分:type
开源Linux
0
教你基于 Jenkins 搭建一套 CI/CD 系统
原文链接:https://mp.weixin.qq.com/s/KVc4IFky1z7kZn-7bz79DQ一、CI/CD环境介绍本次要实现如下效果,开发人员完成功能开发并提交代码到gitlab仓库,jenkins自动完成拉取代码、编译构建、代码扫描(sonarqube)、打
码农编程进阶笔记
0
大量 Java 开源项目停更...
点击关注公众号,Java 干货及时推送↓推荐阅读:投了 100 多份简历后…出品 | OSC开源社区(ID:oschina2013)Sonatype 发布了最新的一份《软件供应链状况》报告,深入探讨了如何在充满选择的世界中定义更好的软件,并探讨人工智能 (AI) 对软件开发的深远
Java技术栈
0