// 9. Разработать программу для обработки и анализа списка финансовых транзакций за месяц. Каждая транзакция включает в себя информацию о дате, типе операции (доход или расход) и сумме. Программа должна подсчитать общий доход и расход за месяц, вычислить итоговый баланс и идентифицировать день с самым большим расходом. В конце работы программа предоставляет подробный отчет. void main() { final transactionManager = TransactionManager(); transactionManager.addTransaction( Transaction( date: DateTime(2024, 07, 01), operation: Operation.income, transactionSum: 1000, ), ); transactionManager.addTransaction( Transaction( date: DateTime(2024, 07, 05), operation: Operation.expense, transactionSum: 200, ), ); transactionManager.addTransaction( Transaction( date: DateTime(2024, 07, 10), operation: Operation.expense, transactionSum: 300, ), ); transactionManager.addTransaction( Transaction( date: DateTime(2024, 07, 15), operation: Operation.income, transactionSum: 1500, ), ); transactionManager.addTransaction( Transaction( date: DateTime(2024, 07, 20), operation: Operation.expense, transactionSum: 100, ), ); final report = transactionManager.report; print('Общий доход: ${report.resultIncome}'); print('Общий расход: ${report.resultExpense}'); print('Итоговый баланс: ${report.resultBalanse}'); print('День с самым большим расходом: ${report.mostExpensesDay}'); } enum Operation { income, expense } final class Transaction { final DateTime date; final Operation operation; final double transactionSum; const Transaction({ required this.date, required this.operation, required this.transactionSum, }); @override String toString() { return 'Transaction{date: $date, operation: $operation, transactionSum: $transactionSum}'; } } final class TransactionManager { final List _transactions = []; void addTransaction(Transaction transaction) { _transactions.add(transaction); } Report get report => Report(_transactions); } final class Report { final List _transactions; const Report(this._transactions); double get resultIncome { var resultIncomeVar = 0.0; for (final transaction in _transactions) { if (transaction.operation == Operation.income) { resultIncomeVar += transaction.transactionSum; } } return resultIncomeVar; } double get resultExpense { var resultExpenseVar = 0.0; for (final transaction in _transactions) { if (transaction.operation == Operation.expense) { resultExpenseVar += transaction.transactionSum; } } return resultExpenseVar; } double get resultBalanse { return resultIncome - resultExpense; } DateTime? get mostExpensesDay { if (_transactions.isEmpty) { return DateTime.now(); } double maxExpense = 0; DateTime? maxExpenseDate; for (final transaction in _transactions) { if (transaction.operation != Operation.expense) continue; final date = DateTime( transaction.date.year, transaction.date.month, transaction.date.day, ); final expense = transaction.transactionSum; if (maxExpenseDate == null || expense > maxExpense) { maxExpense = expense; maxExpenseDate = date; } } return maxExpenseDate; } }