一、选题与前期调查
选题
随着经济的快速发展,特别是汽车和住房两大消费热点的持续升温,对于停车场的需求越来越迫切,停车场收费系统作为公共建筑和大型住宅区的重要组成成分,越来越引起人们的重视。地下停车场收费系统从早期的人工收费演变到现在的智能收费,有利于有效防止收入流失;能减少工作人员,降低使用成本、人工成本;计算机系统的统计汇总等强功能提高了管理效率。
前期调查
需求描述
(1)每次停车信息包括:车牌号码,车位号码,入场时间,出场时间。
(2)车辆进、出场后要显示停车场的空闲车位数。
(3)车辆入场后系统需记录车牌号码,入场时间。
(4)车辆出场时,记录出场时间并显示本次停车费用(例如:1小时内免费,1小时以上每小时3元)。
二、UML结构图
三、主要代码
(代码复制过程中删除自动生成setter/getter)
1、car类
private String carNum; private Date inTime; private Date outTime; private int parkNum; { System.out.println("********************"); System.out.println("欢迎到xxx停车场停车!"); System.out.println("本停车场前一个小时免费(不包含1小时),超时后每小时收费3元,不足一小时的部分不计费"); System.out.println("********************"); } public car(){} public car(String carNum){ this.carNum=carNum; this.inTime=new Date(); } public long stayTime(){ return (this.outTime.getTime()-this.inTime.getTime())/3600000; }
2、pakinglot类
Scanner scn=new Scanner(System.in); private static car[] cars=new car[50]; private static car[] temp=new car[50]; private static int num=0; private static int[] parkNum=new int[50]; public parkinglot(){ int a=1; for(int i=0;i<50;i++){ parkNum[i]=a; a++; } } public void carIn(int i){ if(num<50){ String carNum=scn.next(); temp[i]=new car(carNum); System.out.println("********************"); System.out.println("当前剩余车位数为"+(50-num)); System.out.println("********************"); num++; }else{ System.out.println("********************"); System.out.println("抱歉!本停车场暂无空余车位"); System.out.println("********************"); } } public void parkWhere(int i){ temp[i].setParkNum(scn.nextInt()); this.parkNum[(temp[i].getParkNum()-1)]=0; this.cars[(temp[i].getParkNum()-1)]=temp[i]; } public void carOut(){ String carNum=scn.next(); for (car c:this.cars){ if((c!=null)&&(c.getCarNum().equals(carNum))){ c.setOutTime(); num--; System.out.println("********************"); System.out.println("当前剩余车位数为"+(50-num)); System.out.println("本次停车费用为"+3*(c.stayTime())+"元,欢迎下次光临"); System.out.println("********************"); this.parkNum[(c.getParkNum()-1)]=c.getParkNum(); this.cars[(c.getParkNum()-1)]=null; } } } public void findCar(String carNum){ int y=0; for (car c:this.cars){ if(c!=null){ if(c.getCarNum().equals(carNum)){ System.out.println("********************"); System.out.println("车"+carNum+"在本停车场"); System.out.println("********************"); y++; break; } } } if(y==0){ System.out.println("********************"); System.out.println("车"+carNum+"不在本停车场"); System.out.println("********************"); } } public void rest(){ System.out.println("********************"); System.out.println("空余的车位有:"); for(int a:this.parkNum){ if(a!=0){ System.out.printf(a+" "); } } System.out.println(" "); System.out.println("********************"); } }
3、主类
public static void main(String[] args){ parkinglot pl=new parkinglot(); Scanner scn=new Scanner(System.in); for(;;){ String op=scn.next(); if (op.equals("in")){ int i=scn.nextInt(); pl.carIn(i); }else if(op.equals("park")){ int j=scn.nextInt(); pl.parkWhere(j); }else if(op.equals("out")){ pl.carOut(); }else if(op.equals("find")){ String carNum=scn.next(); pl.findCar(carNum); }else if(op.equals("rest")){ pl.rest(); }else if(op.equals("shut")){ break; }else{ System.out.println("error"); } } } }
四、系统描述
本代码一共编写了三个类,其中一个主类,一个car类和一个parkinglot类。car类中编写了入场时间,出场时间,车牌号码,停车位号码等属性,以及对应的构造方法和set和get方法,计算汽车停车时间的实例方法,和一个包含输出欢迎语句和停车场收费规则的实例代码块。parkinglot类中编写了停车场中的停车数,car类数组和停车位号码数组等属性,车入场,出场,查找车辆,查询剩余停车位,记录车辆停车位等方法。