241 lines
6.6 KiB
Plaintext
241 lines
6.6 KiB
Plaintext
# Lab 10 Objects and Classes
|
||
## Topic 4.1 to 4.4 Part (a) Objects and Classes
|
||
|
||
## Exercise 1
|
||
|
||
(a) Create a class `Employee` that has
|
||
|
||
Variables:
|
||
| Instance Variable name | Data type |
|
||
| - | - |
|
||
| name | String |
|
||
| salary | int |
|
||
|
||
Methods:`getName()`, `setName()`, `getSalary()` and `setSalary()`
|
||
|
||
(b) Complete the following test program that creates two `Employee` object instances named `emp1` and `emp2`. Then perform the followings:
|
||
1. Set the name and salary of `emp1` to *"Chan Tai Man"* and 12000, respectively.
|
||
2. Set the name and salary of `emp2` to *"Tam Ping Shing"* and 13500, respectively.
|
||
3. Print the current details of `emp1` and ``emp2``.
|
||
4. Increase the salary of *"Chan Tai Man"* by 10% and the salary of *"Tam Ping Shing"* by 5%.
|
||
5. Print the new details of `emp1` and `emp2`.
|
||
|
||
```java
|
||
public class Ex1b {
|
||
|
||
public static void main(String[] args) {
|
||
|
||
Employee emp1 = new Employee();
|
||
Employee emp2 = new Employee();
|
||
int oldSalary;
|
||
|
||
// Part 1-2 here
|
||
// Part 3 below
|
||
System.out.println("Before-");
|
||
System.out.println("Employee 1: name=" + emp1.getName() +" salary=" + emp1.getSalary());
|
||
System.out.println("Employee 2: name=" + emp2.getName() +" salary=" + emp2.getSalary());
|
||
|
||
// Part 4-5 here
|
||
|
||
}
|
||
}
|
||
```
|
||
|
||
The output of the program is shown below.
|
||
```
|
||
C:\> java Ex1b
|
||
|
||
Before-
|
||
Employee 1: name=Chan Tai Man salary=12000
|
||
Employee 2: name=Tam Ping Shing salary=13500
|
||
After-
|
||
Employee 1: name=Chan Tai Man salary=13200
|
||
Employee 2: name=Tam Ping Shing salary=14175
|
||
```
|
||
|
||
(c) Redo Part (b) by adding a Constructor to set the name and salary.
|
||
|
||
(d) Add a method `displayDetails()` to display the name and salary in Employee class, and modify Ex1b to use `displayDetails()`to print the details of `emp1` and `emp2`.
|
||
|
||
(e) Add method `raiseSalary()` that accepts a percentage increase in salary (`double`) as argument and increases the salary by the corresponding percentage. Create a new Test program `Ex1cde.java` to raise Chan’s salary by 10% and that of Tam by 5%. Print the details of `emp1` and `emp2` after the increase of salaries.
|
||
|
||
```
|
||
C:\> java Ex1cde
|
||
|
||
Before-
|
||
Employee: name=Chan Tai Man salary=12000
|
||
Employee: name=Tam Ping Shing salary=13500
|
||
After-
|
||
Employee: name=Chan Tai Man salary=13200
|
||
Employee: name=Tam Ping Shing salary=14175
|
||
```
|
||
|
||
## Exercise 2
|
||
(a) Create a class `Student` that has
|
||
|
||
Variables:
|
||
| Attribute name | Data type |
|
||
| - | - |
|
||
| name | String |
|
||
| id | int |
|
||
| score | double |
|
||
|
||
Methods: *the getter and setter methods for each of the above attributes.*
|
||
|
||
|
||
(b) Write a test program Ex2b.java that creates three Student object instances named `stud1`, `stud2` and `stud3`. Then perform the followings:
|
||
1. Set the name, id and score of stud1 to *"Cheung Siu Ming"*, 310567 and 87.1.
|
||
2. Set the name, id and score of stud2 to *"Ng Wai Man"*, 451267 and 77.5.
|
||
3. Set the name, id and score of stud3 to *"Wong Sui Kai"*, 789014 and 83.4.
|
||
4. Print the details of `stud1`, `stud2` and `stud3`.
|
||
5. Find and print the average score among the three students.
|
||
|
||
The output of the program is shown below.
|
||
```
|
||
C:\> java Ex2b
|
||
Student : name=Cheung Siu Ming id=310567 score=87.1
|
||
Student : name=Ng Wai Man id=451267 score=77.5
|
||
Student : name=Wong Sui Kai id=789014 score=83.4
|
||
|
||
Average Score = 82.66666666666667
|
||
```
|
||
|
||
(c) Redo Part (b) by adding a Constructor to set the name, id and score and then create a new test program `Ex2c.java` to test it.
|
||
|
||
```
|
||
C:\> java Ex2c
|
||
Student : name=Cheung Siu Ming id=310567 score=87.1
|
||
Student : name=Ng Wai Man id=451267 score=77.5
|
||
Student : name=Wong Sui Kai id=789014 score=83.4
|
||
|
||
Average Score = 82.66666666666667
|
||
```
|
||
|
||
## Exercise 2
|
||
Consider the following classes.
|
||
|
||
```java
|
||
class AStudent {
|
||
private String name;
|
||
public int age;
|
||
|
||
public void setName(String inName) {
|
||
name = inName;
|
||
}
|
||
|
||
public String getName() {
|
||
return name;
|
||
}
|
||
|
||
}
|
||
|
||
public class Ex3 {
|
||
|
||
public static void main(String s[]) {
|
||
AStudent stud1 = new AStudent();
|
||
AStudent stud2 = new AStudent();
|
||
stud1.setName("Chan Tai Man");
|
||
stud1.age = 19;
|
||
stud2.setName("Ng Hing");
|
||
stud2.age = -23;
|
||
System.out.println("Student: name=" + stud1.getName() +", age=" + stud1.age);
|
||
|
||
System.out.println("Student: name=" + stud2.getName() +", age=" + stud2.age);
|
||
|
||
}
|
||
}
|
||
```
|
||
|
||
For the object `stud2`, age is -23 which is a negative value, this is not allowed in human being.
|
||
|
||
Enhance the class `AStudent` by enforcing data encapsulation on the attribute `age`. If the inputted `age` is invalid, print an error message and set the age to 18.
|
||
|
||
```
|
||
C:\> java Ex3
|
||
-23 is not allowed! Age must be greater than or equal to 18!
|
||
Student: name=Chan Tai Man, age=19
|
||
Student: name=Ng Hing, age=18
|
||
```
|
||
|
||
## Exercise 4
|
||
Given the following CurrencyConverter class which handles the exchange between a foreign currency and US dollars.
|
||
```java
|
||
public class CurrencyConverter {
|
||
private double exchangeRate;
|
||
private double commissionRate;
|
||
private int largeAmount;
|
||
|
||
public CurrencyConverter(double er, double cr) {
|
||
exchangeRate = er;
|
||
commissionRate = cr;
|
||
}
|
||
|
||
public double fromUSDollar(double dollar) {
|
||
|
||
if (dollar >= largeAmount)
|
||
return (dollar * exchangeRate * (1 - commissionRate * 0.5));
|
||
else
|
||
return (dollar * exchangeRate * (1 - commissionRate));
|
||
|
||
}
|
||
|
||
public double toUSDollar(double foreignMoney) {
|
||
|
||
if (foreignMoney / exchangeRate >= largeAmount)
|
||
return (foreignMoney / exchangeRate * (1 - commissionRate * 0.5));
|
||
else
|
||
return (foreignMoney / exchangeRate * (1 - commissionRate));
|
||
|
||
}
|
||
|
||
public void setExchangeRate(double rate) {
|
||
exchangeRate = rate;
|
||
}
|
||
|
||
public double getExchangeRate() {
|
||
return exchangeRate;
|
||
}
|
||
|
||
public void setCommissionRate(double rate) {
|
||
commissionRate = rate;
|
||
}
|
||
|
||
public double getCommissionRate() {
|
||
return commissionRate;
|
||
}
|
||
|
||
public void setLargeAmount(int amount) {
|
||
largeAmount = amount;
|
||
}
|
||
|
||
public int getLargeAmount() {
|
||
return largeAmount;
|
||
}
|
||
}
|
||
```
|
||
|
||
Write a test program `Ex4.java` to test the CurrencyConverter class by performing the following operations:
|
||
|
||
1. Instantiate two `CurrencyConverter` object with the following attributes:
|
||
|
||
| | exchangeRate | comissionRate |
|
||
| - | - | - |
|
||
| yenConverter | 115.7 | 0.0005 |
|
||
| euroCOnverter | 0.9881 | 0.0003 |
|
||
|
||
2. Set `largeAmount` to 50000.
|
||
3. Use the `yenConverter` to convert 1500000 yens to US dollars.
|
||
4. Use the `yenConverter` to convert from US$2000 to yens.
|
||
5. Set the exchange rate of euro to 0.9881.
|
||
6. Use the `euroConverter` to convert 170000 euros to US$.
|
||
7. Use the `euroConverter` to convert from US$20000 to euros.
|
||
|
||
Sample output
|
||
```
|
||
C:\> java Ex4
|
||
1500000 yens = US$ 12958.0812445981
|
||
US$ 2000 = 231284.30000000002 yens
|
||
|
||
170000 euros = US$ 172021.55652261918
|
||
US$ 20000 = 19756.0714 euros
|
||
``` |