• 实验报告题目如下:

一、数据结构设计
项目需要使用栈和队列两种数据结构。其中栈用于停车场和中转区,队列用于便道,对应的类名分别为:CarStack和CarQueue。CarStack为顺序栈,CarQueue为链队列,队列中的结点为CarNode类。Car类为车辆信息类,记录了车辆的车牌,到达时间和离开时间等信息。
设有车辆栈和队列,其定义如下:
#define MAX 3 // 停车场最大容量为3辆,便于观察

// 车辆信息 typedef struct { char num[10]; // 车牌
long reach; // 车辆到达时间
long leave; // 车辆离开时间 }Car;

// 车辆顺序栈:停车场park和临时停车temp typedef struct { Car stack[MAX + 1];
int top;
int base; }SeqStack;

// 便道停车wait队列的结点 struct CarNode { Car data;
CarNode *next; };

// 便道停车链式队列 typedef struct { CarNode *head;
CarNode *rear; }LinkQueue;

1、完成车辆栈CarStack的基本操作函数。其中: private static int MAXSIZE = 3; //
最大容量为3辆,便于观察 (1)public boolean push(Car car) // 车辆进栈 // 函数源码:

(2)public Car pop() // 车辆出栈 // 函数源码:

(3)public boolean isEmpty() // 判空 // 函数源码:

(4)public boolean isFull() // 判满 // 函数源码:

2、完成车辆队列CarQueue的基本操作函数。其中: private CarNode front; // 队头 private
CarNode rear; // 队尾 (1)public boolean isEmpty() // 车辆队列判空 // 函数源码:

(2)public boolean offer(Car car) // 车辆入队 // 函数源码:

(3)public Car poll() // 车辆出队 // 函数源码:

二、业务逻辑设计 1、停车场业务功能为CarPark类。在CarPark类中实现了汽车驶入、汽车驶离、费用计算和显示停车场车辆信息等功能。
// 停车场业务 /** *
功能: 将carNo车牌的汽车驶入,如果停车场有车位则进入停车场,设定入场时间,否则在便道等待进入 * 参数: * carNo
– 车牌信息 * 返回值: / public boolean arrival(String carNo) { 【代码1】 // 参考相关业务流程,完成该函数模块的编码任务。 } /* * 功能:
将carNo车牌的汽车驶离停车场,设定离开时间,同时便道汽车进入停车场 * 参数: * carNo – 车牌信息 *
返回值:离开汽车 */ public Car leave(String carNo) { 【代码2】 //
参考相关业务流程,完成该函数模块的编码任务。 }

/** * 功能: 根据车辆的出入时间,计算费用及停车时长 * 参数: * car – 车辆信息 * 返回值:停车费用
*/ public double charging(Car car) {
long offset = car.leave.getTime() - car.arrive.getTime(); return offset / 60000 * price ; } // 显示所有入库车辆信息 public void
showPark(){ 【代码3】 // 参考相关业务流程,完成该函数模块的编码任务。 } // 显示所有在便道上等待信息 public
void showWaiting() { 【代码4】 // 参考相关业务流程,完成该函数模块的编码任务。 }

2、系统菜单及主类。 (1)系统菜单 // 操作菜单 public static void menu() {
System.out.println("\n §※§※§※§※§※§ 欢迎使用停车场系统.§※§※§※§※§※§\t\n");
System.out.println("\t※◎※◎※◎※◎ 1. 车辆到达登记.※◎※◎※◎※◎\t");
System.out.println("\t※◎※◎※◎※◎ 2. 车辆离开登记.※◎※◎※◎※◎\t");
System.out.println("\t※◎※◎※◎※◎ 3. 显示车辆信息.※◎※◎※◎※◎\t");
System.out.println("\t※◎※◎※◎※◎ 4. 退出系统.※◎※◎※◎※◎\t");
System.out.println("\n\t请选择:\t"); } (2)主函数 public static void
main(String[] args) { CarPark carPark = new CarPark(); Scanner
scanner = new Scanner(System.in); String carNo; while(true) {
menu(); int item = -1; while (true) {
item = scanner.nextInt();
if(item>0 && item <5)
break;
System.out.println("\n 输入有误,请重新选择: 1~4: “); } switch(item) {
case 1:
System.out.println(“请输入车牌号:”);
carNo = scanner.next();
carPark.arrival(carNo);
break;
case 2:
System.out.println(“请输入车牌号:”);
carNo = scanner.next();
Car car = carPark.leave(carNo);
long time = (car.leave.getTime() - car.arrive.getTime())/60000;
DecimalFormat df = new DecimalFormat(”#.00");
String fee = df.format(carPark.charging(car));
System.out.println(“车辆”+carNo+“停车时长”+time+“分钟,共收费”+fee+“元。”);
break;
case 3:
carPark.showPark();
carPark.showWaiting();
break;
case 4:
System.exit(0); } } }

  • 代码如下:
package C;
//车辆信息类,记录车辆的车牌,到达时间和离开时间等信息.
public class Car
{String carNo;          //车辆车牌信息long reach;         //到达时间long leave;           //离开时间float cost;               //停车费用public Car(String carNo) {this.carNo=carNo;}Car(String carNo,long reach,long leave,float cost) {this.carNo=carNo;this.reach=reach;this.leave=leave;this.cost=cost;}String getcarNo(){return this.carNo;}long getreach(){return this.reach;}long getleave(){return this.leave;}float getcost() {return this.cost;}}
package C;//CarNode类为模拟队列中的链表结点
public class CarNode {Car data;CarNode next;CarNode() {this.data=null;this.next=null;}public CarNode(Car car) {this.data=car;this.next=null;}Car getData(){return this.data;}}
package C;public class CarPark {CarStack CS1=new CarStack(3);   //停车场CarStack CS2=new CarStack(3); //中转区CarQueue CQ1=new CarQueue();  //便道//判断车辆是否驶入停车场,并设定入场时间。public boolean arrival(String carNo) {if(CS1.Se(carNo)) {System.out.println("车辆已在停车场中!");return false;}if(CQ1.qe(carNo)) {System.out.println("车辆已在便道等待!");return false;}Car car=new Car(carNo);//当停车场无车位时,在便道等待进入if(CS1.isFull()) {System.out.print("场地无空余车位,请稍作等候!");CQ1.offer(car);return false;}//当停车场有车位,车辆入栈CS1.push(car);car.reach=System.currentTimeMillis();      //设定入场时间return true;    }//车辆驶离停车场,设定离开时间,同时便道汽车进入停车场.public Car leave(String carNo) {//若车不在停车场和便道中if(!(CS1.Se(carNo))&&!(CQ1.qe(carNo))) {System.out.println("该车不在管理范围内!");return null;}Car car=null;//该车在停车场中if(CS1.Se(carNo)) {while(((car=CS1.pop())!=null)) {if(car.carNo.equals(carNo)) {break;}else {        //非目标车辆先退出停车场,进入中转区CS2CS2.push(car);}}//中转区的汽车按原来的顺序返回停车场while(!CS2.isEmpty()) {CS1.push(CS2.pop());}//便道汽车进入停车场if(!CQ1.isEmpty()) {CS1.push(CQ1.poll());}car.leave=System.currentTimeMillis();        //离开时间 return car;}//该车在便道中if(CQ1.qe(carNo)) {CQ1.remove(carNo);System.out.println("车辆"+carNo+"在便道等待,无需收费。");return car;}return car;}//根据车辆的出入时间,计算费用及停车时长.public double charging(Car car) {double charge=0;long t=car.getleave()-car.getreach();charge=t/10000*20;return charge;}//显示所有入库车辆信息 (遍历栈,注意数据出栈后还要回去)public void showPark(){System.out.println("停车场车辆信息:");CS1.list();}//显示所有在便道上等待信息(遍历队列)public void showWaiting() {//判空if(CQ1.isEmpty()) {System.out.println("便道无车辆等待!");return;}System.out.println("便道上车辆信息:");CQ1.bianli();}
}
package C;//定义一个CarQueue为链队列,用于便道.
public class CarQueue {private int SIZE = 0;   //队列的长度private CarNode front;       //指向队列头private CarNode rear;        //指向队列尾//判断队列是否为空public boolean isEmpty() {return SIZE == 0;}// 车辆入队public boolean offer(Car car) {//判断队列是否为空if(isEmpty()) {CarNode car1=new CarNode(car);front=car1;rear=front;SIZE++;return true;  }//队列不为空时CarNode car2=new CarNode(car);rear.next=car2;rear=rear.next;SIZE++;return true;}//获取队列的数据,车辆出队列public Car poll() {//先判断队列是否为空if(isEmpty()) {System.out.println("场地已空,无车辆信息!");}Car car=front.getData();front=front.next;SIZE--;return car;}//顺序遍历链表(队列)public void bianli() {CarNode p=front;while(p!=null) {Car car=p.getData();System.out.println(car.getcarNo());p=p.next;}   }//删除便道中车辆public void remove(String carNo) {CarNode p=front;if(p.getData().getcarNo().equals(carNo)) {front=front.next;p=p.next;}else {while(p.next!=null) {if(p.next.getData().getcarNo().equals(carNo)) { //找到想删掉的节点p.nextp.next=p.next.next;        //删掉节点后,p后移到p.next.next}elsep=p.next;       //不删除节点,即正常往后遍历}}}//判断便道是否存在该车牌号public boolean qe(String carNo) {//先判断队列是否为空if(isEmpty()) {return false;}CarNode p = front;while(p != null) {Car car=p.getData();if(car.getcarNo().equals(carNo))return true;p = p.next;}return false;}}
package C;//定义一个CarStack顺序栈,用于停车场和中转区
public class CarStack {private int MAXSIZE;     //栈的最大容量private Car[]stack;             //用数组stack[]来模拟栈,数据放在该数组private int top=-1;             //top表示栈顶,初始化为-1//构造器public CarStack(int MAXSIZE) {this.MAXSIZE=MAXSIZE;stack=new Car[this.MAXSIZE];}//返回栈的最大容量public int maxsize() {return MAXSIZE;}//栈满public boolean isFull() {return top==MAXSIZE-1;}//栈空public boolean isEmpty() {return top==-1;}//入栈操作-push,车辆进场public void push(Car car) {//先判断栈是否满if(isFull()) {//System.out.print("场地无空余车位,请稍作等候!");return ;}top++;stack[top]=car;}//出栈操作-pop,车辆出去,返回车辆信息public Car pop(){//先判断栈是否为空if(isEmpty()) {System.out.println("场地已空,无车辆停放!");}Car car=stack[top];top--;return car;}//遍历//显示栈的情况【遍历栈】,遍历时,需要从栈顶开始显示数据public void list() {if(isEmpty()) {System.out.println("停车场已空,无车辆停放!");}//显示数据for(int i=0;i<=top;i++) {System.out.println(stack[i].getcarNo());}}//判断停车场是否存在该车牌号public boolean Se(String carNo) {if(isEmpty()) {return false;}//需要从栈顶开始显示数据for(int i=top;i>=0;i--) {//          System.out.println(stack[i]);if(stack[i].getcarNo().equals(carNo)){return true;}}return false;}}
package C;
//停车场系统
import java.io.*;
import java.text.DecimalFormat;
import java.util.*;
public class Park {//主菜单public static void menu() {     System.out.println("\n    §※§※§※§※§※§ 欢迎使用停车场系统.§※§※§※§※§※§\t\n");System.out.println("\t※◎※◎※◎※◎  1. 车辆到达登记.※◎※◎※◎※◎\t");System.out.println("\t※◎※◎※◎※◎  2. 车辆离开登记.※◎※◎※◎※◎\t");System.out.println("\t※◎※◎※◎※◎  3. 显示车辆信息.※◎※◎※◎※◎\t");System.out.println("\t※◎※◎※◎※◎  4. 退出系统.※◎※◎※◎※◎\t");System.out.println("\n\t请选择:\t");}public static void main(String[] args) {CarPark carPark = new CarPark();Scanner scanner = new Scanner(System.in);String carNo;while(true) {menu();int item = -1;while (true) {item = scanner.nextInt();if(item>0 && item <5)break;System.out.println("\n 输入有误,请重新选择: 1~4: ");}switch(item) {case 1:System.out.println("请输入车牌号:");carNo = scanner.next();carPark.arrival(carNo);break;case 2:System.out.println("请输入车牌号:");carNo = scanner.next();Car car = carPark.leave(carNo);if(car==null) {break;}if(car.getreach()!=0) {long time = car.getleave() - car.getreach();DecimalFormat df = new DecimalFormat("#.00"); String fee = df.format(carPark.charging(car));   System.out.println("车辆"+carNo+"停车时长"+time/10000+"小时,共收费"+fee+"元。");}break;case 3:carPark.showPark();carPark.showWaiting();break;case 4:System.exit(0);}}}
}

停车场管理系统之控制台java实现相关推荐

  1. springboot毕设项目停车场管理系统8f46a(java+VUE+Mybatis+Maven+Mysql)

    springboot毕设项目停车场管理系统8f46a(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBu ...

  2. springboot毕设项目小区停车场管理系统zvzay(java+VUE+Mybatis+Maven+Mysql)

    springboot毕设项目小区停车场管理系统zvzay(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + H ...

  3. 停车场管理系统 java_使用java编写一个停车场管理系统

    使用java编写一个停车场管理系统 发布时间:2020-11-30 16:00:28 来源:亿速云 阅读:145 作者:Leah 这篇文章给大家介绍使用java编写一个停车场管理系统,内容非常详细,感 ...

  4. Springboot毕设项目大连和平广场停车场管理系统52oca(java+VUE+Mybatis+Maven+Mysql)

    项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  5. 酒店管理系统/停车场管理系统(毕业设计+代码)

    一 停车场管理系统 "CarParking" 基于java的停车场管理系统 1.基本实现了停车场该有的功能. 比如会员管理,收发邮件,优惠券生成与发放,车辆出库入库,自动计算停车费 ...

  6. java语言使用栈和队列实现简易停车场管理系统

    [问题描述]:设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出.车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面).如果停车场已放满n ...

  7. [附源码]计算机毕业设计JAVA停车场管理系统

    [附源码]计算机毕业设计JAVA停车场管理系统 项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(Intel ...

  8. [附源码]计算机毕业设计JAVA 停车场管理系统

    [附源码]计算机毕业设计JAVA 停车场管理系统 项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(Inte ...

  9. JAVA计算机毕业设计智能停车场管理系统Mybatis+源码+数据库+lw文档+系统+调试部署

    JAVA计算机毕业设计智能停车场管理系统Mybatis+源码+数据库+lw文档+系统+调试部署 JAVA计算机毕业设计智能停车场管理系统Mybatis+源码+数据库+lw文档+系统+调试部署 本源码技 ...

最新文章

  1. 开发者进阶宝典,HarmonyOS 职业认证全奉上
  2. 汇编:ret以及retf指令
  3. python保存创建文件报错 with open(fileName,‘w‘) as fp: IOError: [Errno 22] invalid mode (‘w‘) or filename
  4. Hibernate + MySQL中文乱码问题
  5. 【agc004d】Teleporter
  6. nodejs进程异常退出处理方法
  7. Collectors.toMap()
  8. StringUtils工具类常用方法汇总1(判空、转换、移除、替换、反转)
  9. 消息模板取数据的高阶使用说明
  10. 结合公司业务后,对极光推送的进一步思考
  11. linux主机安装sctp协议栈
  12. 【WSN通信】能量均衡的无线传感器网络非均匀分簇路由协议附matlab代码
  13. 《数字连线大招版》攻略
  14. 40岁前的男人必看的文章!共勉!
  15. 基于希克斯需求价格弹性计算_西方经济学(微观部分)计算题
  16. 《装甲战》的主要原则
  17. python wpf_为什么很少看到使用WPF开发的流行的应用程序呢?
  18. php个人编程词典,【编程词典】php htmlentities()函数
  19. tcping扫描所有端口_tcping端口检测工具使用
  20. 4.C++实现:线性插值

热门文章

  1. 软件项目文档规划的大道至简、小道至繁原则
  2. 永久关闭WPS打开时的登录界面
  3. mysql 日、周、月、年
  4. 正大国际期货:焦煤焦炭期货部分合约交易保证金水平将调整
  5. HTML5网页设计练习
  6. 曾鸣:互联网的下半场,拼的是协同效应
  7. Vue Zrender 应用一
  8. js load js
  9. MAC自带的Java版本以及Java安装目录查看
  10. 无组织排放管控治一体化解决方案