
Лаб_11 Головков И.Е. 12002108 Стратегия
.docxБЕЛГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ
ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ»
(НИУ «БелГУ»)
ИНСТИТУТ ИНЖЕНЕРНЫХ И ЦИФРОВЫХ ТЕХНОЛОГИЙ
Кафедра информационных и робототехнических систем
Отчет по лабораторной работе №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; } }