Задание на лабораторную работу

Для каждого класса необходимо предоставить его графическое представление в диаграмме классов UML. Графическое представление добавить в протокол лабораторной работы и принести на защиту лабораторной работы.

1. Класс TimeSpan

1.1 Создание класса

Создайте класс с названием TimeSpan. Объект класса TimeSpanхранит интервал времени в часах и минутах (к примеру, временной интервал между 8:00 и 10:30 это 2 часа 30 минут). Класс TimeSpanдолжен иметь следующие методы

Название метода

Описание метода

TimeSpan(hours, minutes)

Конструктор. Входные аргументы – количество часов и минут

getHours()

Возвращает целое количество часов во временном интервале, без учета количества минут (например, если интервал 2 часа 15 минут, то метод вернет 2, так как 15 минут мы не учитываем)

getMinutes()

Возвращает количество минут во временном интервале, без учета количества часов (например, если интервал 2 часа 15 минут, то метод вернет 15, так как 2 часа мы отбрасываем)

add(hours, minutes)

Добавляет указанное количество часов и минут к промежутку. Новое значение промежутка должно пересчитываться корректно. Например, 2 часа 15 минут + 1 час 45 минут = 4 часа 0 минут. Помните, что необходимо проверить корректность входных аргументов (количество часов - не отрицательное число, количество минут от 0 до 59).

addTimeSpan(timespan)

Добавляет входной промежуток времени к указанному промежутку (используйте методы getHours() и getMinutes() для получения значений часов и минут).

getTotalHours()

Возвращает количество часов в промежутке в виде дробного числа. Например, если временной интервал 9 часов 45 минут, то метод должен вернуть 9.75.

getTotalMinutes()

Возвращает количество минут в текущем промежутке времени (помните, что в интервале есть еще показатель часов, который нужно умножить на 60)

Вы должны продумать:

  • как хранить значение временного интервала;

  • типы входных аргументов методов;

  • корректно реализовать требуемые методы;

  • в методах предусмотреть проверки на корректность входных данных.

1.2. Добавление метода subtract()

Добавьте к написанному ранее классу метод subtract()со следующей сигнатурой

public void subtract(TimeSpan span)

Метод вычитает из текущего временного интервала входной временной интервал. Если входной интервал больше текущего, выйдите из метода и не модифицируйте текущий интервал (можете выбросить исключение IllegalArgumentException, если знаете что это и знаете как выбрить исключение).

1.3 Добавление метода scale()

Добавьте к написанному ранее классу метод subtract()со следующей сигнатурой

public void scale(int factor)

Метод увеличивает текущий интервал в factorчисло раз. Например, если текущий временной интервал равен 1 час 45 минут, а входной аргумент равен 2, то интервал увеличится до 3 часов 30 минут. Убедитесь, что factor- неотрицательное число, помните про пересчет минут в часы при увеличении интервала.

2. Класс BankAccount

2.1 Добавление поля transactionFee

В программе существует класс BankAccount, исходный код которого приведен ниже.

// Каждый объект класса BankAccount представляет данные одного
// счета пользователя, включая имя и баланс счета

public class BankAccount {
    String name;
    double balance;

    public void deposit(double amount) {
        balance = balance + amount;
    }

    public double getBalance() {
        return this.balance;
    }

    public boolean withdraw(double amount) {
        balance = balance - amount;
        return true;
    }
}

Каждый объект класса предназначен для описания одного счета клиента банка, включая его имя и баланс. Модифицируйте класс следующим образом:

  • добавьте поле transactionFeeтипа double, которое хранит сумму, которая вычитается из баланса каждый раз, когда клиент банка снимает деньги (метод withdraw()). Изначальное значение равно 0.00, но значение может быть изменено в дальнейшем. Производите вычитание суммы каждый раз, когда клиент осуществляет снятие денег;

  • сделайте так, чтобы в результате снятия денег и снятия transactionFee, баланс счета не мог опуститься ниже нуля. Если в результате снятия денег и transactionFee баланс может стать отрицательным, выйдите из метода и не производите модификацию баланса вообще;

  • в методe deposit() входной аргумент не должен быть ноль или меньше;

  • в методе withdraw() входной аргумент не должно быть ноль или меньше.

Модификация класса может потребовать создания новых методов и полей.

2.2 Добавление метода transfer()

Добавьте к модифицированному ранее классу BankAccoutметод transfer() со следующей сигнатурой

public boolean transfer(BankAccount receiver, double amount)

Метод transfer() осуществляет перевод денег из одного счета (текущего) на другой счет (объект receiver). Первый параметр - счет получателя денег, второй параметр - количество денег, которые переводятся со счета на счет.

Важно!

При снятии денег должна учитываться комиссия (поле transactionFee). Следовательно, из текущего объекта должна быть вычтено amount + transactionFee.

Метод должен модифицировать баланс двух объектов. У текущего объекта должна вычтена сумма amount + transactionFeeиз баланса, а у объекта receiverдолжен быть пополнен баланс счета на сумму amount.

При реализации метода убедитесь, что amount > 0.

Если у текущего объекта баланс меньше amount + transactionFee, то выйдите из метода без какого-либо перевода денег.

3. Класс Student

Создайте класс Student, который хранит информацию о студенте. У студента есть имя, год обучения (от 1 до 4), а также массив изучаемых дисциплин.

Класс Student должен иметь следующие методы

Название метода

Описание метода

Student(name, year)

Конструктор. Входные аргументы – имя и год обучения

addCourse(courseName)

Добавляет дисциплину(в формате String) к массиву дисциплин студента

dropAll()

Удаляет все дисциплины студента

getCourseCount()

Возвращает количество дисциплин, которые студент изучает

getName()

Возвращает имя студента

getTuition()

Возвращает количество денег, которые студент заплатил за обучение (с условием, что каждый курс обошелся студенту в 1000 гривен)

getYear()

Возвращает год обучения студента (от 1 до 4)

Вы должны продумать:

  • как хранить данные студенты (типы данных, структуры и так далее);

  • типы входных аргументов методов и тип возвращаемого значения;

  • корректно реализовать требуемые методы;

  • в методах предусмотреть проверки на корректность входных данных.

Last updated