停车场.docx

上传人:b****6 文档编号:7779082 上传时间:2023-01-26 格式:DOCX 页数:17 大小:44.55KB
下载 相关 举报
停车场.docx_第1页
第1页 / 共17页
停车场.docx_第2页
第2页 / 共17页
停车场.docx_第3页
第3页 / 共17页
停车场.docx_第4页
第4页 / 共17页
停车场.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

停车场.docx

《停车场.docx》由会员分享,可在线阅读,更多相关《停车场.docx(17页珍藏版)》请在冰豆网上搜索。

停车场.docx

停车场

停车场问题

[详细设计]

1、定义栈(停车场)structstack

初始化栈InitStack(stacks)

元素进栈InStack(stacks,carx)

元素出栈OutStack(stacks)

2、定义队列(车场外的便道)structqueue

初始化队列InitQueue(queueq)

元素进队列InQueue(queueq,intnum1)

元素出队列OutQueue(queueq)

3、处理车辆到达的情况CarArrival(stacks,queueq,carx)

处理车辆离开CarLeave(stacks1,stacks2,queueq,carx)

4、主程序main()

时间的具体实现是:

Datenow=newDate();//时间类

inthour=now.getHours();

intminute=now.getMinutes();

intsecond=now.getSeconds();

carStark1[n].inhour=hour;

carStark1[n].inminute=minute;

carStark1[n].insecond=second;

[调试分析]

运行程序后,首先显示的界面

开进:

开出

车位情况:

[程序总结]

该程序可以自动获取车辆进入、离开的时间,计算比较精确,并且统计了需要倒车的次数并给予一定的优惠,更人性化。

另外,此系统可以实时查询当前停车场以及便道上车辆情况,很好地了解当前车位状况。

此系统的不足是当输入信息错误时不能报错,不能很好地体现出来,并且没有设置面板,操作不方便。

[代码]

car.java

package停车场2;

publicclasscar{

publicStringnumber;//车牌号

publicintinhour;//进入小时

publicintinminute;//进入分

publicintinsecond;//进入秒

publicintouthour;//开出小时

publicintoutminute;//开出分

publicintoutsecond;//开出秒

publicintcount;//倒车次数

publiccarlink;//队列的指针

//构造方法1

publiccar(Stringnum){

this.number=num;

this.inhour=0;

this.inminute=0;

this.insecond=0;

this.outhour=0;

this.outminute=0;

this.outsecond=0;

intcount=0;

carlink=null;

}

//构造方法2

publiccar(){

this.number="";

this.inhour=0;

this.inminute=0;

this.insecond=0;

this.outhour=0;

this.outminute=0;

this.outsecond=0;

intcount=0;

carlink=null;

}

//成员方法:

修改指针

publicvoidsetLink(carn){

link=n;

}

//成员方法;得到车牌号

publicStringgetNum(){

returnnumber;

}

}

mylist.java

package停车场2;

//停车场基于顺序存储结构栈

importjava.util.Date;

publicclassmylist{

publicintLength1;

publicintLength2;

publiccar[]carStark1;//停车场

publiccar[]carStark2;//用于倒车的临时栈

//构造方法

publicmylist(){

carStark1=newcar[5];//5个车位的停车场即栈1

carStark2=newcar[5];//倒车的临时栈车位也为5即栈2

Length1=0;

Length2=0;

}

//入栈同时将系统时间压入

publicvoidpush(Stringvalue){

carnewcar=newcar(value);

intn=Length1;

carStark1[n]=newcar;

Datenow=newDate();//时间类

inthour=now.getHours();

intminute=now.getMinutes();

intsecond=now.getSeconds();

carStark1[n].inhour=hour;

carStark1[n].inminute=minute;

carStark1[n].insecond=second;

Length1++;

}

//由栈2回到栈1

publicvoidpush2(){

intn=Length1;

carStark1[n]=getTop2();

Length1++;

Length2--;

}

//出栈1入栈2

publicvoidpop(){

cartemp=getTop1();

intn=Length2;

carStark2[n]=temp;

carStark2[n].count++;

Length1--;

Length2++;

}

//出栈2

publicvoidpop3(){

Length2--;

}

//有时间的出栈1并且暂时入栈2

publicvoidpop2(){

intn=Length1-1;

Datenow=newDate();

inthour=now.getHours();

intminute=now.getMinutes();

intsecond=now.getSeconds();

carStark1[n].outhour=hour;

carStark1[n].outminute=minute;

carStark1[n].outsecond=second;

cartemp=getTop1();

carStark2[Length2]=temp;

Length1--;

Length2++;

}

//得到栈1顶元素

publiccargetTop1(){

returncarStark1[Length1-1];

}

//得到栈2顶元素

publiccargetTop2(){

returncarStark2[Length2-1];

}

//停车场里有几辆车

publicintgetLength(){

returnLength1;

}

//获得停车场中第i号车位的车牌号

publicStringgetNum(inti){

returncarStark1[i-1].number;

}

//察看车位情况

publicvoidprint(){

inti=0;

for(i=0;i

System.out.println(i+1+"号车位:

"+carStark1[i].number);

}

}

}

myQueue.java

package停车场2;

//队列基于单向链式存储结构

importjava.lang.*;

importjava.util.*;

//队列

publicclassmyQueue

{

carheader;

carcurrent;

intsize;

//构造方法:

建立一个空表

publicmyQueue()

{

header=newcar("");

current=header;

size=0;

}

//把当前位置之后插入一个新结点

publicvoidinsertcar(Stringvalue){

carnewcar=newcar(value);

newcar.setLink(current.link);

current.setLink(newcar);

current=newcar;

size+=1;

System.out.println("*********************************************");

System.out.println("您的车牌号:

"+newcar.number);

System.out.println("停车场已满,您现在在等待中,您的位置是"+size+"个位置");

System.out.println("*********************************************");

}

//删除当前位置结点后面的结点

publicvoiddelete(){

carreplace;

replace=current.link;

if(replace==null)return;

current.setLink(replace.link);

replace=null;

size-=1;

}

//删除第i个结点

publicvoiddelete(inti){

if(i>size||i<=0)return;

locate(i-1);

delete();

}

//由当前结点到下一个结点

publiccargetNext(){

if(current==null)returnnull;

current=current.link;

returncurrent;

}

//得到队列的左后一辆车

publiccargetLast(){

while(current.link!

=null)

{

getNext();

}

returncurrent;

}

//由车牌号找到车

publiccarfind(Stringvalue){

current=header;

while(current.number!

=value)

{

if(current.link==null)

{

System.out.println("找不到需要的数!

");

current=header;

break;

}

current=current.link;

}

returncurrent;

}

//取得第m位置的元素

publiccarlocate(intm){

if(m>size)returnnull;

current=header;

inti;

for(i=m;i>0;i--)

{

getNext();

}

returncurrent;

}

//取得第一个元素

publiccargetHeader()

{

returnheader.link;

}

//队列里有多少车

publicintgetLength()

{

returnsize;

}

//察看车位

publicvoidprint()

{

//current=header.getLink();

while(current!

=null){

inti=1;

System.out.print(i+"号车位:

"+current.getNum());

System.out.println("");

i++;

getNext();

}}}

DemoParking.java

package停车场2;

importjava.io.*;

importjava.lang.*;

publicclassDemoParking{

publicmylistparking;//停车场

publicmyQueuewaiting;//队列

publicStringx1;//选择

publicStringx2;//开入的车牌号

publicStringx3;//开出的车牌号

//构造方法

publicDemoParking(){

parking=newmylist();//初始化栈

waiting=newmyQueue();//初始化队列

x1="";

x2="";

x3="";

}

//成员方法:

菜单

publicvoidmenu(){

System.out.println("");

System.out.println("欢迎进入停车场系统");

System.out.println("*********************************************");

System.out.println("*本停车场每30s收费1元停车场内有5个车位*");

System.out.println("*倒车一次返回1元(最少不收费!

)*");

System.out.println("*********************************************");

System.out.println("1:

开进");

System.out.println("2:

开出");

System.out.println("3:

车位情况");

System.out.println("4:

退出");//+++++++++++++++++++++++++++

System.out.print("请选择:

");

try{

BufferedReaderkeyin=newBufferedReader(

newInputStreamReader(System.in));

x1=keyin.readLine();

}

catch(IOExceptione)

{

System.out.print("出错了");

}

choice();

}

//成员方法:

选择

publicvoidchoice(){

if(x1.equals("1")){//输入1开入

System.out.print("请输入车牌号:

");

try{

BufferedReaderkeyin1=newBufferedReader(

newInputStreamReader(System.in));

x2=newString(keyin1.readLine());

}

catch(IOExceptione){

System.out.print("出错了");

}

in(x2);

menu();

}

if(x1.equals("2")){//输入2开出

System.out.print("请输入车牌号:

");

try{

BufferedReaderkeyin1=newBufferedReader(

newInputStreamReader(System.in));

x3=newString(keyin1.readLine());

}

catch(IOExceptione){

System.out.print("出错了");

}

out(x3);

}

if(x1.equals("3")){//输入3查询

Allprint();

menu();

}

if(x1.equals("4")){//输入4退出

}

else{//输入不符合规定返回菜单

menu();

}

}

publicvoidin(Stringvalue){//成员方法:

开入车

if(parking.getLength()<5){//入栈

parking.push(value);

System.out.println("*********************************************");

System.out.println("您的车牌号:

"+parking.getTop1().number);

System.out.println("进入停车场时间:

"+parking.getTop1().inhour+":

"+parking.getTop1().inminute+":

"+parking.getTop1().insecond);

System.out.println("*********************************************");

}else{

waiting.insertcar(value);//入队列

}

}

//成员方法:

开出车

publicvoidout(Stringvalue){

inti=parking.getLength();

intb=parking.getLength();

//只有栈里有车查找到开出

if(waiting.getLength()==0){

while(parking.getTop1().number.equals(value)==false){

parking.pop();//开始倒车

i--;

}

parking.pop2();//开出这辆车进入栈2

System.out.println("*********************************************");

System.out.println("您的车牌号:

"+parking.getTop2().number);

System.out.println("进入时间:

"+parking.getTop2().inhour+":

"+parking.getTop2().inminute+":

"+parking.getTop2().insecond);

System.out.println("离开时间:

"+parking.getTop2().outhour+":

"+parking.getTop2().outminute+":

"+parking.getTop2().outsecond);

System.out.println("倒车次数:

"+parking.getTop2().count);

ints=(((parking.getTop2().outhour-parking.getTop2().inhour)*60+parking.getTop2().outminute-parking.getTop2().inminute)*60+parking.getTop2().outsecond-parking.getTop2().insecond)/30-1*parking.getTop2().count;

System.out.println("您的费用:

"+s+"元");

System.out.println("欢迎下次再来!

@_@再见");

System.out.println("*********************************************");

parking.pop3();//再从栈2中弹出

if(i==b){

}else{

for(intn=i;n

parking.push2();

}

}

}else{

//看在队列还是在栈里

while(parking.getNum(i).equals(value)==false){//栈

i--;

if(i==0){//检验队列

inta=waiting.getLength();

while(waiting.locate(a).number.equals(value)==false){

a--;

}System.out.println("*********************************************");

System.out.println("您的车牌号:

"+waiting.locate(a).number);

System.out.println("欢迎下次再来!

@_@再见");

System.out.println("*********************************************");

waiting.delete(a);

break;

}

}

if(i>0){//要开出的车在栈里

intc=i;

for(;i

parking.pop();

}

parking.pop2();

System.out.println("*********************************************");

System.out.println("您的车牌号:

"+parking.getTop2().number);

System.out.println("进入时间:

"+parking.getTop2().inhour+":

"+parking.getTop2().inminute+":

"+parking.getTop2().insecond);

System.out.println("离开时间:

"+parking.getTop2().outhour+":

"+parking.getTop2().outminute+":

"+parking.getTop2().outsecond);

System.out.println("倒车次数:

"+parking.getTop2().count);

ints=((parking.getTop2().outhour-parking.getTop2().inhour)*60+parking.getTop2().outminute-parking.getTop2().inminute)*60+parking.getTop2().outsecond-parking.getTop2().insecond-2*parking.getTop2().count;

if(s<0){

s=0;//费用最少为0

}

System.out.println("您的费用:

"+s);//利用时间计算费用

System.out.println("欢迎下次再来!

@_@再见");

System.out.println("*************************************

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1