------------------------------------------------Car的类及属性
package com.parking.entity;
import com.parking.util.Tool;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;
public class Car {
private String carNo;//车牌号
private Date startTime;//开始停车时间
private Date endTime;//离开时间
private List costs = new ArrayList();//缴费流水
private int index = -1;//车位的索引号,默认值为-1
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
//停车
public void parking(ParkingArea area){
//随机出一个车位
Random random = new Random();
//int index = -1;
while(true) {
index = random.nextInt(100);
//获取车位对象
ParkingLot lot = area.getLots()[index];
//判断车位上是否已经停有车
if (lot.getCar() == null){
lot.setCar(this);//将当前车停在该车位上
this.setStartTime(new Date());//记录开始停车时间
break;
}
}
}
//缴费
public int cost(ParkingArea area){
int time = Tool.getSecond(this.getStartTime(),new Date());
int money = Tool.getParkingCost(time);
//将缴费加入流水
costs.add(money);
//将车位置为空
area.getLots()[index].setCar(null);
//将车位索引恢复为默认值
index = -1;
return money;
}
public String getCarNo() {
return carNo;
}
public void setCarNo(String carNo) {
this.carNo = carNo;
}
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
public Date getEndTime() {
return endTime;
}
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
public List getCosts() {
return costs;
}
public void setCosts(List costs) {
this.costs = costs;
}
}
----------------------------------------------停车场上的属性
package com.parking.entity;
public class ParkingLot {
private String lotNo;//车位号
private Car car;//车位上停的车
public String getLotNo() {
return lotNo;
}
public void setLotNo(String lotNo) {
this.lotNo = lotNo;
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
}
----------------------------------------------------停车位的构建方式及查询
package com.parking.entity;
public class ParkingArea {
private ParkingLot[] lots = new ParkingLot[100];
private Admin[] admins = new Admin[3];
public ParkingLot[] getLots() {
return lots;
}
public Admin[] getAdmins() {
return admins;
}
public void setAdmins(Admin[] admins) {
this.admins = admins;
}
//初始化的方法,实例化车位对象
public void init(){
for (int i=0;i<lots.length;i++){
//实例化车位对象
lots[i] = new ParkingLot();
//设置车位的编号
lots[i].setLotNo("NO." + (i+1));
}
}
//根据车牌号,查找该车是否已在车位上
public Car findCarByCarNo(String carNo){
for(int i=0;i<lots.length;i++){
Car car = lots[i].getCar();
if(car != null){
if(car.getCarNo().equals(carNo)){
return car;
}
}
}
return null;
}
//获取剩余的停车位
public int getFreeLots(){
int count = 0;
for(int i=0;i<lots.length;i++){
if(lots[i].getCar() == null){
count ++;
}
}
return count;
}
}
--------------------------------------------------------用户交互的阶段代码,注册和登录
package com.parking.entity;
import com.parking.util.Tool;
import java.util.Date;
import java.util.Scanner;
public class Admin {
private String name;
private String pass;
//登录
public boolean login(ParkingArea area){
Scanner sc = new Scanner(System.in);
System.out.print("账号:");
String name = sc.next();
System.out.print("密码:");
String pass = sc.next();
for(int i=0;i<area.getAdmins().length;i++){
Admin admin = area.getAdmins()[i];
if(admin != null){
if(admin.getName().equals(name)&&admin.getPass().equals(pass)){
return true;
}
}
}
return false;
}
//注册
public void regist(ParkingArea area){
//判断管理员是否有三个
boolean flag = false;
int index = -1;
for(int i=0;i<area.getAdmins().length;i++){
if(area.getAdmins()[i] == null){
index = i;
flag = true;
break;
}
}
if(flag){//允许注册
Scanner sc = new Scanner(System.in);
System.out.println("请输入注册账号:");
name = sc.next();
System.out.println("请输入注册密码:");
pass = sc.next();
area.getAdmins()[index] = this;
System.out.println("注册成功!");
}else{
System.out.println("已有三个管理员,不允许再注册了");
}
}
//查看现有停车位
public void show(ParkingArea area){
//遍历停车场的所有停车位
for(int i=0;i<area.getLots().length;i++){
ParkingLot lot = area.getLots()[i];
System.out.println(lot.getLotNo()+"\t"+
((lot.getCar()==null)?"当前车位为空":lot.getCar().getCarNo()));
}
}
//查看车位上的车以及停车费
public void showCost(ParkingArea area){
//遍历所有车位,如果车位上有车,则计算停车费
for(int i=0;i<area.getLots().length;i++){
ParkingLot lot = area.getLots()[i];
//判断车位上是否停车
if(lot.getCar()!=null){
Car car = lot.getCar();
int money = Tool.getParkingCost(Tool.getSecond(car.getStartTime(),new Date()));
//显示车位号,以及停车费用
System.out.println("车位:"+lot.getLotNo()+",停车费用为:"+money+"元");
}
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
}
------------------------------------------------------------------main方法的执行阶段
package com.parking.entity;
import com.parking.util.Tool;
import sun.security.rsa.RSASignature;
import java.util.Date;
import java.util.Scanner;
public class ParkingSystem {
public static void main(String[] args) {
//启动停车场
ParkingArea area = new ParkingArea();
area.init();//初始化车位信息
boolean flag = true;
while(flag) {
//输出一级菜单
System.out.println("****欢迎进入停车系统(剩余停车位"+area.getFreeLots()+")****");
System.out.println("***1、请输入您的车牌***");
System.out.println("***2、管理员***");
System.out.println("***3、退出***");
Scanner sc = new Scanner(System.in);
int enter = sc.nextInt();
switch (enter) {
case 1:
System.out.println("请输入您的车牌号:");
String carNo = sc.next();
//判断该车是否已经在停车位
Car car = area.findCarByCarNo(carNo);
//创建车的对象
if(car == null) {
car = new Car();
car.setCarNo(carNo);
System.out.println("车牌登记成功!");
}else{
System.out.println(carNo + "已经停在车位上了");
}
while (true) {
System.out.println("欢迎车牌为" + car.getCarNo() + "的车主,请选择您要的服务:");
System.out.println("1、停车");
System.out.println("2、离开并缴费");
System.out.println("3、查看停车车位");
System.out.println("4、停车时长");
System.out.println("0、返回上一级");
int enter1 = sc.nextInt();
if (enter1 == 0) {
break;
} else if (enter1 == 1) {//停车
if(area.getFreeLots()==0){
System.out.println("对不起,车位已满,无法驶入");
}else {
car.parking(area);
System.out.println("停车成功,停车位置为:" + area.getLots()[car.getIndex()].getLotNo());
}
} else {
if (car.getIndex() == -1) {
System.out.println("请您先停好车");
} else {
if (enter1 == 2) {//离开并缴费
System.out.println("停车时间:" + Tool.dateFormat(car.getStartTime()));
System.out.println("当前时间:" + Tool.dateFormat(new Date()));
System.out.println("已经停车时间:" + Tool.getSecond(car.getStartTime(), new Date()));
System.out.println("停车费:" + car.cost(area) + "元");
} else if (enter1 == 3) {//查看停车车位
System.out.println("您的爱车停在:" + area.getLots()[car.getIndex()].getLotNo());
} else if (enter1 == 4) {//停车时长
int time = Tool.getSecond(car.getStartTime(), new Date());
System.out.println("您的停车时长为:" + time + "秒");
}
}
}
}
break;
case 2://管理员操作部分
while(true){
System.out.println("1、管理员登录");
System.out.println("2、管理员注册");
System.out.println("3、退出");
int enter2 = sc.nextInt();
if(enter2 == 3){
break;
}
Admin admin = new Admin();
if(enter2 == 1){//登录
if(admin.login(area)){
System.out.println("登录成功");
while(true) {
System.out.println("***欢迎进入管理员操作***");
System.out.println("1、查看现有停车位");
System.out.println("2、查看停车位上的车以及缴费");
System.out.println("3、返回上一级");
int enter3 = sc.nextInt();
if(enter3 == 3){
break;
}else if(enter3 == 1){
//查看现有停车位
admin.show(area);
}else{
//查看停车位上的车以及缴费
admin.showCost(area);
}
}
}else{
System.out.println("登录失败");
}
}else{//注册
admin.regist(area);
}
}
break;
case 3:
System.out.println("欢迎下次光临");
flag = false;
break;
}
}
}
}