停车场管理———严蔚敏版数据结构实习题

*问题描述
* 设停车藏是一个可以停放n辆车的狭长的通道,且只有一个大门可供进出。汽车在停车场内按到达的先后顺序,一次由北向南停放,若场内停放已满,那么就先停放在便道中。
* 一旦由车从停车场内出来后。便道中的第一辆车马上那个听进去。当停车场内由车要出来时。在他后面的车要为他让路。然后再按原顺序进入停车场,收取费用。

parking.java
/**
 * ***********CopyRight**************
 *-------Powered by QianXunNet-----
 *-----Version 1.00   2009-01-17-----
 *-----   Design BY  NiChao    -----
 *=========description===========
 *^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 */

package yanweimin.Parking;
import java.util.Scanner;
import yanweimin.Parking.*;
import java.util.Scanner;
public class Park {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		        
		          //设定一个便道和两个车库
		System.out.println("the parking money is 10  yuan per hour");
		System.out.println("input a num for the maxsize of parking:");
		Scanner in = new Scanner(System.in);
		int maxsize = in.nextInt();
	 Queue biandao = new Queue();
	 StackArray main = new StackArray(maxsize,"主车库");
	 StackArray fuzhu = new StackArray(maxsize, "辅助车库");	 		
       loop: while(true)
        {
        	Scanner cin = new Scanner(System.in);
        	System.out.println("请输入当前时间:");
        	           //======当前时间=======
        	int time = cin.nextInt();
            System.out.println("select === 1: 到达 2.离去 3.结束程序");
                
                int select = cin.nextInt();
                switch(select)
                {
                         //车辆到站
                		case 1 :
                		{
                			 System.out.println("input the num of car");
                			 int num = cin.nextInt();
                			 Car mycar = new Car(time ,num);
                			 int into = main.push(mycar);
                			 if(into == -1)
                			 {
                				 biandao.addQueue(mycar);
                			 }
                			 break;
                			
                		}
                		     //出车库
                             case 2 :
                		{
                			System.out.println("input the num of the car you want to out:");
                		    int num = cin.nextInt();
                		    
                             while( main.stackvalue[main.p].num != num)
                             {
                            	 Car acar = main.stackvalue[main.p];
                            	 main.pop();
                            	 fuzhu.push(acar);
                             }
                             Car right_car = main.stackvalue[main.p]; 
                        	 main.pop();
                             int money = (time - right_car.time)*10;
                             System.out.println("该车应该付费"+money);

                             while( fuzhu.p != -1)
                            	 {
                            	    Car acar = fuzhu.stackvalue[fuzhu.p];
                            	    fuzhu.pop();
                            	    main.push(acar);
                            	 }
                              if(biandao.rear != -1)
                              {
                            	  Car acar = biandao.queuevalue[0];
                                  acar.time = time;
                                  biandao.delQueue();
                                  main.push(acar);
                              }
                              break;  
                		}
                		case 3 :
                		{
                			break loop;
                		}               			
                }
        }		      
	}
}



queue.class
package yanweimin.Parking;

            //优化过的数组模拟的队列类

import yanweimin.Parking.Car;
public class Queue {
   
		   /*
		    * 查看队列数组中的数
		    */
		//   public void coutQueue()
		//   {
			   //设定一根移动指针 用于指示当前的虚拟队头
          //     if(this.rear == -1)
          //  	   System.out.println("当前队列为空");
        //       else
        //       {
        //    	   int j = 0;
         //   	   for(int i =0; i<=rear;i++,j++)
    	//		   {
    	//			   System.out.print(queuevalue[i]+" ");
    	//		   }
       //     	   System.out.println("共有元素"+j+"个"); 
         //      }			   
		//   }
		   
		   		/*
		   		 * 向队列中增加元素
		   		 * @param num  欲增加的值
		   		 */
		   			public void addQueue(Car car)
		   			{
		   				 //队列已满
		   				if(this.rear == this.maxsize-1)
		   				{
		   					System.out.println("便道已满");		   					
		   				}
		   				else
		   				{
		   					this.rear ++;
		   					this.queuevalue[this.rear] = car;
		   					System.out.println(" 车牌号为 "+car.num+"进入便道了");
		   				}
		   			}
		   			
		   			/*
		   			 *  取出队列中的元素
		   			 *  @return num 取出的元素
		   			 */
		   				public void delQueue()
		   				{
		   					if(this.rear == -1)
		   					{
		   						System.out.println(" 便道已经空");
		   					}
		   					else
		   					{
		   						 Car car = this.queuevalue[0];
		   						 int temp = 0;
		   						 while ( temp != this.rear )
		   						 {
		   							 this.queuevalue[temp] = this.queuevalue[temp +1];
		   							 temp ++;
		   						 }
		   						 this.rear --;
		   						 System.out.println("车牌号为"+car.num+"出便道了");
		   					}
		   				}
		   				
		   				public int maxsize = 20;
		   				public Car[] queuevalue = new Car[maxsize];
		   				public int rear = -1;
		   	
	
}



stackarray.class
package yanweimin.Parking;


import yanweimin.Parking.Car;
public class StackArray {
  
	
	            //构造函数
			public StackArray(int maxsize,String name)
			{
				p = -1;
				this.maxsize = maxsize;
				stackvalue = new Car[maxsize];
				this.name = name;
			}
	
	
	
	
	     //打印数组内的数据
	   //	public void print()
	 //  	{
	   		   //指针指向当前栈的有效数组上
	   	//	if(this.p==-1)
	   		//	System.out.println("栈空");
	   	//	else
	   		//{
	   		//	int i = this.p;
	  	  // 	  while(i>=0)
	  	   //	  {
	  	   //		  System.out.println(this.stackvalue[p]);
	  	   //		 i--;
	  	  // 	  }
	   	//	}
	   			
	  // 	} //print
	   	         //进车库
			      //返回值 -1 没有成功进入车库
			      //返回值 1 成功进入车库
	   	public int push(Car value)
	   	{
	   		if(this.p == this.maxsize-1 ) 
	   			{
	   			System.out.println(name+"已满");
	   			return -1;
	   			}
	   		else 
	   			{
	   			this.p++;
	   			this.stackvalue[p] = value;
	   			System.out.println("车牌为 "+value.num+"进入了"+this.name);
	   			return 1;
	   			}
	   		  
	   	}  //push	   	
	   	
	   	
	   	public int pop()
	   	{
	   		// int temp = -1;
	   		if(this.p == -1)
	   			{
	   			System.out.println("车库中已经没有车了");
		   		return -1;
	   			}

	   		else
	   		{
	   			int temp;
                      temp = this.stackvalue[p].num;
	 	   		      System.out.println("车牌号为 "+temp+" 出"+this.name);
	 	   			  this.p--;

	   			return temp;
	   		}
	   	}
	
	
	
	
	 int p;       //栈内指针
	 int maxsize;       //栈的最大容量
   Car[] stackvalue;
	String name;
}



测试结果
--------------------------------------------
the parking money is 10  yuan per hour
input a num for the maxsize of parking:
2
请输入当前时间:
5
select === 1: 到达 2.离去 3.结束程序
1
input the num of car
1
车牌为 1进入了主车库
请输入当前时间:
10
select === 1: 到达 2.离去 3.结束程序
1
input the num of car
2
车牌为 2进入了主车库
请输入当前时间:
15
select === 1: 到达 2.离去 3.结束程序
2
input the num of the car you want to out:
1
车牌号为 2 出主车库
车牌为 2进入了辅助车库
车牌号为 1 出主车库
该车应该付费100
车牌号为 2 出辅助车库
车牌为 2进入了主车库
请输入当前时间:
20
select === 1: 到达 2.离去 3.结束程序
1
input the num of car
3
车牌为 3进入了主车库
请输入当前时间:
25
select === 1: 到达 2.离去 3.结束程序
1
input the num of car
4
主车库已满
车牌号为 4进入便道了
请输入当前时间:
30
select === 1: 到达 2.离去 3.结束程序
1
input the num of car
5
主车库已满
车牌号为 5进入便道了
请输入当前时间:
35
select === 1: 到达 2.离去 3.结束程序
2
input the num of the car you want to out:
2
车牌号为 3 出主车库
车牌为 3进入了辅助车库
车牌号为 2 出主车库
该车应该付费250
车牌号为 3 出辅助车库
车牌为 3进入了主车库
车牌号为4出便道了
车牌为 4进入了主车库
请输入当前时间:
40
select === 1: 到达 2.离去 3.结束程序
2
input the num of the car you want to out:
4
车牌号为 4 出主车库
该车应该付费50
车牌号为5出便道了
车牌为 5进入了主车库
请输入当前时间:
45
select === 1: 到达 2.离去 3.结束程序
3

你可能感兴趣的:(数据结构,编程,J#)