User interface language: English | Español

Date November 2017 Marks available 3 Reference code 17N.2.SL.TZ0.11
Level SL Paper 2 Time zone no time zone
Command term State Question number 11 Adapted from N/A

Question

The global variable tables is declared as follows:

Payment[] tables = new Payment[50];

The indices in this array represent the table number, so tables[1] is a Payment object for the customers occupying table number 1.

The driver (main) class contains the following code. Note: You can assume that all appropriate accessor and mutator methods have been included in their respective classes.

tables[1] = new Payment();
tables[2] = new Payment();
FoodItem a = new FoodItem("f102", 2);
FoodItem b = new FoodItem("f100", 1);
DrinkItem c = new DrinkItem("d102", 3);
tables[1].addFoodItem(a);
tables[1].addFoodItem(b);
tables[2].addDrinkItem(c);
tables[2].addDrinkItem(new DrinkItem("d103",1));
System.out.println(tables[1].getFiCount());
System.out.println(Payment.getFoodTax());
System.out.println(tables[2].getDi(1).getItemCode());

The price of each item is stored in an object of the Item class.
The class is outlined below:

public class Item
{
private String code; // item code
private String name; // item name
private double price; // unit price before tax
// all accessor, mutator and constructor methods are included
}

All of the objects in this class are held in the global array pl according to the following declaration: 

Item[] pl = new Item[200]

Note: The number of objects held in this array will change from week to week.

The method findPrice(Item[] pl, String c) in the Payment class looks up and returns the price of the item with code c.

State the output after this code is executed.

[3]
a.

Construct statements, in code, that will print out the following: The number of drink items ordered by table 40.

[1]
b.i.

Construct statements, in code, that will print out the following: The item code of the third food item ordered by table 2.

[1]
b.ii.

Construct the method findPrice(). You may assume that the item exists in the array.

[6]
c.

When a customer wishes to pay the bill, the calculateBill ( ) method is called. If the bill was for table 10 then the following call would be made:

double finalBill = tables[10].calculateBill(Item[] pl);

Construct the calculateBill() method. You should make use of any previously defined methods.

[7]
d.

Markscheme

Award [1] for each correct value.
2;
0.2;
d103;

a.

System.out.println(tables[40].getDiCount());

Allow variations of the get method name

Note: Ignore minor syntax errors.

b.i.

System.out.println(tables[2].getFi(2).getItemCode());

Allow variations of the get method name

Note: Ignore minor syntax errors.

b.ii.

Award marks as follows up to [6 max].
Award [1] for correct initialization.
Award [2] for loop that checks entries, but has early exit.
Award [1] for a loop that checks all 200 entries with no early exit.
Award [1] for correct assignment.
Award [1] for correct comparison.
Award [1] for correct return value.
Award [1] for both the assignment and comparison IF get methods are not used.

public static double findPrice(Item[] pl, String c)
{
int x = 0;
double price = 0.0;
boolean found = false;
while(!found)
{
if ((pl[x].getCode()) == c)
{
price = pl[x].getPrice();
found = true;
}
x++;
}
return price;
}
c.

Award marks as follows up to [7 max].
Award [1] for correct method header.
Award [1] for correct initialization.
Award [1] for correct loop.
Award [1] for finding item code.
Award [1] for use of findPrice method.
Award [2] for the calculation if completely correct, award only [1] if taxes are wrong and/or no use of accessor.
Award [1] for consideration of both food and drink objects (whether correct or not);

public double calculateBill(Item[] pl)
{
double total = 0.0;

for(int x = 0; x < fiCount; x++)
{
String c = fi[x].getItemCode();
double price = findPrice(pl,c);
total = total + fi[x].getQuantity()*price*(1 + foodTax);
}

for(int y = 0; y < diCount; y++)
{
String c = di[y].getItemCode();
double price = findPrice(pl,c);
total = total + di[y].getQuantity()*price*(1 + drinkTax);
}
return total;
}
d.

Examiners report

[N/A]
a.
[N/A]
b.i.
[N/A]
b.ii.
[N/A]
c.
[N/A]
d.

Syllabus sections

Option D: Object-oriented programming » D.3 Program development
Show 45 related questions
Option D: Object-oriented programming

View options