一、项目目的
设停车场采用南北方向的双口,每个口都有一个入口和出口。另外停车场入口处各有一个单车道的等候通道,并允许等候的车辆因急事从等候通道直接开走。
二、实验内容
设计停车场模拟管理程序。
- 采用栈和队列等数据结构;
- 实现对等候车辆的管理;
- 实现对停车位的管理。
三、实验要求
1、实验报告要求用Java语言实现,2或3人一组。
2、完成“数据结构项目情境实验报告”。
3、完成项目程序代码的编写,并能正确运行
四、开发环境及人员分工
集成开发环境(IDE) | Eclipse JAVA |
项目成员 | 分工 |
五、实现过程详细说明及流程图
1.停车场采用南北方向的双口,采用栈和队列实现每个口都有一个入口和出口。
2.停车场入口处各有一个单车道的等候通道,实现对等候车辆的管理
3.允许等候的车辆因急事从等候通道直接开走,实现对停车位的管理
六、实验总结
《数据结构》是一门实践性很强的课程,上机实习是对学生全面综合素质进行训练的一种最基本的方法,是与课堂听讲、自学和练习相辅相成的、必不可少的一个教学环节。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!
七、代码实现(程序粘贴,运行结果截图)
package CarParking;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Car {
private String number; //车牌号
private Date inTime; //汽车进入停车场的时间
private Date outTime; //汽车退出停车场的时间
public Car(){
this.number="";
inTime=null;
outTime=null;
}
public Car(String num){
this.number=num;
inTime=null;
outTime=null;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getInTime() {
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
return f.format(inTime);
}
public void setInTime(Date inTime) {
this.inTime = inTime;
}
public String getOutTime() {
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
return f.format(outTime);
}
public void setOutTime(Date outTime) {
this.outTime = outTime;
}
}
package CarParking;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class InOutCar {
private InStack inCar; //停车场
private OutStack outCar; //临时栈
private Queue waitCar; //候车区
public InOutCar(){
inCar = new InStack();
outCar = new OutStack();
waitCar = new Queue();
}
//停车到停车场
public void inCar(String number){
Car car = new Car(number);
//判断停车场是否满了
if (!inCar.isFull()){
//没满,停车到停车场
inCar.push(car);
System.out.println("*********************");
System.out.println("您的车牌号:"+inCar.getTop().getNumber());
System.out.println("进入停车场时间:"+inCar.getTop().getInTime());
System.out.println("*********************");
}else{
//满了,停车到候车区
waitCar.enqueue(car);
System.out.println("*********************");
System.out.println("您的车牌号:" + car.getNumber());
System.out.println("停车场已满,您现在在等待中,您的位置是第" + waitCar.getSize() + "个");
System.out.println("*********************");
}
}
//打印停车场信息
public void parkPrint() {
System.out.println("停车位 车牌号 到达时间");
System.out.println("------------------------------");
inCar.print();
}
//打印候车区信息
public void waitPrint() {
System.out.println("位置 车牌号");
System.out.println("------------------------------");
waitCar.print();
}
//退出停车场
public void outCar(String number){
try {
while (!inCar.getTop().getNumber().equals(number)){
//把之后进入的车辆先退出停车场
outCar.push(inCar.pop());
}
Car oCar = inCar.pop();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date inTime = df.parse(oCar.getInTime());
Date outTime = df.parse(oCar.getOutTime());
long time = outTime.getTime() - inTime.getTime();
System.out.println("*********************");
System.out.println("你的车牌号:"+oCar.getNumber());
System.out.println("进入停车场时间:"+oCar.getInTime());
System.out.println("离开停车场时间:"+oCar.getOutTime());
System.out.println("需要交纳的费用:"+time/1000 * Parking.getPrice()+"元");
System.out.println("*********************");
//把退出停车场的车加回去
int length = outCar.getLength();
for (int i = 0;i < length;i++){
inCar.push(outCar.pop());
}
//如果候车场有车,就安排进停车场
if (waitCar.getSize() != 0){
inCar.push(waitCar.dequeue());
}
} catch (ParseException e) {
e.printStackTrace();
}
}
}package CarParking;
import java.util.Date;
public class InStack implements MyStack {
private int maxsize;
private int top;
private Car[] inCar;
public InStack(){
maxsize = 5;
inCar = new Car[maxsize];
top = -1;
}
//入栈 同时将系统时间压入
public void push(Car car) {
Date time = new Date(); //时间类
car.setInTime(time);
inCar[++top] = car;
}
@Override
public Car pop() {
Car item = null;
if (!empty()){
item=inCar[top--];
item.setOutTime(new Date());
}
return item;
}
@Override
public boolean isFull(){
if (top == maxsize - 1){
return true;
}else{return false; } }
@Override
public boolean empty(){
if (top == -1){
return true;
}else{ return false; } }
public int getLength() {
return top + 1;
}
public Car getTop() {
return inCar[top];}
public void print(){
for (int i = 0;i < getLength();i++){
System.out.printf("%3d %12s %21s",(i+1),inCar[i].getNumber(),inCar[i].getInTime());
System.out.println(); } }}
package CarParking;
public class OutStack implements MyStack {
private int maxsize;
private int top;
private Car[] outCar;
public OutStack(){
maxsize = 5;
outCar = new Car[maxsize];
top = -1; }
//判断是否满了
public boolean isFull(){
if (top == maxsize - 1){
return true;
}else{
return false; }}//入栈public void push(Car car) {if (!isFull()){outCar[++top] = car;}} //出栈
public Car pop(){
Car item = null;
if (!empty()){
item=outCar[top--]; } return item; } //判断是否为空
public boolean empty(){
if (top == -1){return true;}else{return false;}}
public int getLength() {return top + 1;}}