联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-23:00
  • 微信:codinghelp

您当前位置:首页 >> Java编程Java编程

日期:2019-12-07 10:23

CS102A 2019Fall Assignment5

Keyword Annotation:

Field(s): You can see the field(s) you need to define after it.

Method(s): You can see the method(s) you need to define or modify after it.


Question1 Simple Parking System


General Description


In the Parking lot, we can add parking space for SmallCar, LargeCar or any arbitrary subclass of Car. When the cars enters the parking lot, the size of specific kind of car will be deducted. When the cars leave out of the parking lot, parking fees should be paid.


It is only a simple Parking System for exercising the interface, abstract class, inheritance, polymorphism, wildcard, etc. The implement of Parking System in real world would be more complex than our assignment.


You need to define or modify following classes


1. class Time


Fields:


private int hour


private int minute


Methods:


public Time timeDifference(Time time)

return a new object of Time that indicates the difference between two time.

For example, the difference between 06:30 and 07:45 is 01:15.


public Time fewMinutesLater(int minutes)

return a new object of Time that indicates the time of several minutes later.

For example, if the current time is 06:30, time.fewMinutesLater(50) is 07:20.


public String toString()

Override method which returns a format type of String as "hour:minutes" such as 01:15, 10:02 or 23:59.


Do not modify or remove any methods or fields that have been already defined.

You can add other methods or attributes that you think are necessary.

2. class Car


It is an abstract class, which is the super class of other Concrete Car classes.

Fields:


private String plateNumber

Plate number of the car. It must have a prefix of "粤B". We can make sure that our test cases of plate number are all prefixed with "粤B" then appended five-digital integers.


private Time arriveTime

A Time type that record the arriving time of the car.


Do not modify or remove any methods or fields that have been already defined.

You can add methods or attributes that you think are necessary.

3. class SmallCar &. class LargeCar


Those are the subclasses of the class Car.

Field:


private boolean deduction

Only defined in class SmallCar**. If the last character of the plate number is an even number, the deduction is true, otherwise, the deduction is false.


Methods:


public String toString()

Override this method in each subclass. The output must be ClassName plateNumber ArriveTime (each output element are separated by only one space), and the if the deduction of a small car is true, the output must be ClassName plateNumber ArriveTime deducted.

For example:



SmallCar 粤B11113 01:55

SmallCar 粤B11114 01:55 deducted

LargeCar 粤B21111 01:55

public int calculateMoney()

Override this abstract method in each subclass. The way to calculate money is shown as following table:

Three attributes of price in each car:


PriceSmall CarLarge Car

Start Price150

Increment Price515

Max Price60100

Charges Notes:


Time(deduction)Small Car(false)Small Car(true)Large Car

Time < 30 min000

30 min ≤ Time < 1 hStart Price0Increment Price

1 hour ≤ Time < 2 hoursStart Price + Increment Price * hour0Increment Price * (hour+1)

2 hours ≤ TimeMin(Start Price + Increment Price * hour , Max Price)Min(Increment Price * (hour-1) , Max Price)Min(Increment Price * (hour+1) , Max Price)

Do not modify or remove any methods or fields that have been already defined.

You can add methods or attributes that you think are necessary.

4. class ConcreteParkingLot


It is a concrete class of the interface ParkingLot, in which you need to implement all abstract methods that are declared in the interface ParkingLot. Please read the annotations in ParkingLot.java carefully and all parameters, return values, functions of each method should be strictly followed the description in annotations. We provide Client1.java for you to understand all methods and its standard return values in ParkingLot. In class ConcreteParkingLot, the only one important field must be defined. Beyond that, you can define any attributes that you think are important.


Field:


private List<Car> cars

Contain all cars, including all different types such as Large Car, Small Car or other arbitrary subclass of Car.


5. You can add other Classes that you think are necessary.


Other Important parameters and Test cases


There are several initial parameters that need to mention to you, where to define those parameters are determined by your design.


The initial Time is 00:00, and we can make sure that the time cannot be exceeded 24 hours in this assignment.

When we mentions the current Time in this assignment, which means the current time of parking in our assignment, but not the actual time in the real world.

We can make sure that the test cases of plate numbers for each arriving car are all 5-digital numbers.

The original value of the plate number of car is "粤B" + those 5-digital numbers.

For example:


Time time1 = new Time(12, 45);

Car LargeCar = new LargeCar("11111", time1);

Car smallCar = new SmallCar("22222", time1);

System.out.println(LargeCar);

System.out.println(smallCar);

/*

  LargeCar 粤B11111 12:45

  SmallCar 粤B22222 12:45 deducted

*/

The original value of deduction of small car is determined by whether its plate number is an even number. If it is an even number, deduction is true, otherwise deduction is false.

For example:


SmallCar 粤B11110 deducted

SmallCar 粤B11112 deducted

SmallCar 粤B11116 deducted

SmallCar 粤B11117

SmallCar 粤B12321

SmallCar 粤B12345

If the count of current car equals to the capacity of the type of current car, the car cannot drive into the parking lot. For example, if the capacity of "SmallCar" is 5, and the current count of "SmallCar" in parking lot is 4, now there are 3 "SmallCar" (22222, 33333, 44444) want to drive in, in this case, only 22222 can drive in but other two cannot.

We can make sure that, in our test cases, the cars which want to drive out of the parking lots are all in the parking lot.

(Bonus Part) How to instantiate an object for specific Class object? You can try following code.


   Class clz = SmallCar.class;

   try {

       SmallCar smallCar=(SmallCar) clz.newInstance();

       smallCar.setPlateNumber("99990");

       System.out.println(smallCar);

   } catch (InstantiationException | IllegalAccessException e) {

       e.printStackTrace();

   }

/*

     SmallCar 粤B99990 null deducted

*/

We can make sure that, in our test cases, all subclasses of Car contain a constructor with no parameter.


(Bonus part) In java programming language, Class<? extents Car> contains Car.class and the Class type of its subclasses. But in our assignment, we can make sure that, in our test cases, only the Class type of subclasses of Car can be the parameters of following three methods:


public void addParkingSpot(Class<? extends Car> type, int count);

public String getParkingSpotInfo(Class<? extends Car> type);

public void driveInto(Class<? extends Car> type, String... plateNumbers);`


Other Requirements


For the whole project, you do not need to input anything. Please read carefully about what we will do in Client1 and the Client1LocalJudge. Other than that, you also need to read carefully about the annotations in ParkingLot.java, from which you can understand what to do in each abstract method.


Question2 Design Your ArrayList


General Description


Design your ArrayList that is similar to java.util.ArrayList.


Requirements


The name of class must be MyArrayList<T>

The max capacity of your ArrayList is 20

The structure inside must be an array

To extands a class such as java.util.List, java.util.ArrayList or java.util.LinkedList is not accepted.

Designing a field that is a subclass of Collection or List is not accepted.

Methods:


public void add(T t)

Appends the specified element to the end of this list. If your arraylist is full, the new element cannot be added.


public void add(T t, int index)

Inserts the specified element at the specified position(index) in this list. Shifts the element currently at that position (if any) and any subsequent elements to the right. If your arraylist is full, the new element cannot be added.


public boolean isEmpty()

return true if this list contains no elements, otherwise return false.


public int size()

return the number of elements in this list.


public T get(int index)

return the element at the specified position(index) in this list.


You can add other attributes that you think is necessary,

but any subclasses of java.util.Collection or java.util.List cannot appear in your Class.

Other Requirements


For the whole project, you needn’t input anything. Please read carefully about what we would do in Client2 (The official test case is another Client.java class, which is similar to this one), and the sample output for those.)


Submission of Assignment


1. You should submit all the source code files (with an extension “.java”).


2. You need submit at least those java files “.java” Car.java, LargeCar.java, SmallCar.java, ParkingLot.java, ConcreteParkingLot.java, Time.java, MyArrayList.java


3. You should submit all source code directly into your sakai system, do not compress them into one folder.


4. No Chinese characters are allowed to appear in your code.


5. No package included.


6. The output must strictly follow the description and the sample in this document and the Junit Test, and you can only get points for each task only when you pass the test case.


7. The assignment should be submitted before the deadline (Dec. 8th). Late submissions within 24 hours after the deadline (even a few minutes) will incur a 50% penalty, meaning that you can only get 50% of the score, which you could get if the assignment was submitted before the latest deadline. Assignments submitted after the latest deadline will not be graded (meaning your will get a zero for the assignment).


8. You will GET A ZERO if one of the following happens:


8.1 File name is not identical to the requirement


8.2 Compilation fail


8.3 Plagiarism



版权所有:编程辅导网 2018 All Rights Reserved 联系方式:QQ:99515681 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。