面向对象大作业—停车场计费系统

一、选题与前期调查

选题

随着经济的快速发展,特别是汽车和住房两大消费热点的持续升温,对于停车场的需求越来越迫切,停车场收费系统作为公共建筑和大型住宅区的重要组成成分,越来越引起人们的重视。地下停车场收费系统从早期的人工收费演变到现在的智能收费,有利于有效防止收入流失;能减少工作人员,降低使用成本、人工成本;计算机系统的统计汇总等强功能提高了管理效率。

前期调查

需求描述

(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类数组和停车位号码数组等属性,车入场,出场,查找车辆,查询剩余停车位,记录车辆停车位等方法。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供多种期末作业选题,方便选题! 一、实验目的与任务    1、目的:加深和巩固本学期课堂所学内容,掌握使用Rational Rose2003进行软件建模的技能。同时,掌握面向对象的思想和UML的基本概念,并能够利用面向对象的思想进行系统分析和设计。    2、任务:确定课题,组织组员,合理分工,熟悉软件开发环境。培养团队精神,学习软件开发小组的组织和管理,并熟悉软件系统的分析和设计。 二、实验内容、要求与安排方式 实验内容与要求:   根据各组选择的课题,各组推荐一名组长,统一管理整个项目的实施过程,并合理调整资源和负责项目全局;根据项目的难易合理分配组员的任务,对问题达成一直的看法;针对项目的实施,熟悉相应的分析与设计过程以及具体的UML建模方法。 实验安排方式: 本实验为开放实验,各组可同时进行实验,每组3人。 三、实验题目   期末大作业的题目既可以从附录1中的题目中进行选择,也可以发挥自己的创造力,任选自己学习、工作和生活中某个领域存在的真实问题来建模,例如:吃饭、上课、复习、考试、锻炼、KTV唱歌....任何领域都可以。 四、实验步骤   1、需求。分析系统的需求,撰写需求陈述文档。建立用例模型:包括软件系统的用例图以及关键用例的用例描述(用例规约)。   2、静态分析。建立系统的类图。   3、动态分析。分析系统的用例模型,选择合适的平台和模型详细描述用例的设计与实现,包括顺序图、协作图、活动图以及状态图。   4、设计。建立系统的构件图和部署图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值