Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаб_11 Головков И.Е. 12002108 Стратегия

.docx
Скачиваний:
3
Добавлен:
26.06.2024
Размер:
283.09 Кб
Скачать

БЕЛГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ

ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ»

(НИУ «БелГУ»)

ИНСТИТУТ ИНЖЕНЕРНЫХ И ЦИФРОВЫХ ТЕХНОЛОГИЙ

Кафедра информационных и робототехнических систем

Отчет по лабораторной работе №11 по дисциплине «Методы и средства проектирования информационных систем и технологий»

Вариант № 3

Тема работы «Стратегия»

студента очного отделения

3 курса 12002108 группы

Головкова Игоря Евгеньевича

Проверил:

асс. Пузырев Никита Сергеевич

БЕЛГОРОД, 2024

Вариант №3

Реализовать программу – калькулятор вкладов. Пользователь вводит сумму вклада процентную ставку и срок в месяцах. Проценты по вкладу могут начисляется ежемесячно, раз в два месяца и раз в квартал(период капитализации) . В таблицу Data GridView выводиться сумма начисленная по процентам и сумма вклада за период в зависимости от выбранного периода капитализации. Использовать шаблон стратегия.

Диаграмма классов для программы представлена на рисунке 1.

Рисунок 1 – Диаграмма классов

Результат работы программы, использующей паттерн стратегия, представлена на рисунке 2.

Рисунок 2 – Результат работы программы, использующей паттерн стратегия

// Класс BiMonthlyCapitalization public class BiMonthlyCapitalization implements ICapitalization { @Override public double calculateInterestAndSoutBalance(double balance, int rate, int month) { if (month % 2 == 0) { balance += balance * rate / 100 / 6; } return balance; } @Override public String toString() { return "Вклад с начислением процентов раз в два месяца"; } } // Интерфейс ICapitalization

public interface ICapitalization { double calculateInterestAndSoutBalance(double balance, int rate, int months); } // Класс Main

public class Main { public static void main(String[] args) { double balance = 100_000; int rate = 5; int months = 12; SavingsAccountCalculator calculator; calculator = new SavingsAccountCalculator(balance, rate, months, new MonthlyCapitalization()); calculator.calculate(); calculator.setCapitalization(new BiMonthlyCapitalization()); calculator.calculate(); calculator.setCapitalization(new QuarterlyCapitalization()); calculator.calculate(); } } // Класс MonthlyCapitalization

public class MonthlyCapitalization implements ICapitalization { @Override public double calculateInterestAndSoutBalance(double balance, int rate, int months) { balance += balance * rate / 100 / 12; return balance; } @Override public String toString() { return "Вклад с начислением процентов раз в месяц"; } } // Класс QuarterlyCapitalization

@AllArgsConstructor public class QuarterlyCapitalization implements ICapitalization { @Override public double calculateInterestAndSoutBalance(double balance, int rate, int month) { if (month % 3 == 0) { balance += balance * rate / 100 / 4; } return balance; } @Override public String toString() { return "Вклад с начислением процентов раз в три месяца (квартал)"; } } // Класс SavingsAccountCalculator

@AllArgsConstructor @Setter public class SavingsAccountCalculator { private double balance; private int rate; private int months; private ICapitalization capitalization; public void calculate() { String separator = "--------------"; System.out.printf("%n| %-45s |%n", capitalization); System.out.printf("| %-15s | %-15s | %-15s |%n", "Баланс, руб", "Начисления, руб", "Срок, мес"); System.out.printf("| %-15s | %-15s | %-15s |%n", separator, separator, separator); double previousBalance = balance; System.out.printf("| %-15.2f | %-15.2f | %-15d |%n", balance, balance - previousBalance, 0); for (int month = 1; month <= months; month++) { balance = capitalization.calculateInterestAndSoutBalance(balance, rate, month); System.out.printf("| %-15.2f | %-15.2f | %-15d |%n", balance, balance - previousBalance, month); } balance = previousBalance; } }