Advertisement
ForestFox

госы_транзакции_dart

Jun 1st, 2025
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 3.90 KB | None | 0 0
  1. // 9. Разработать программу для обработки и анализа списка финансовых транзакций за месяц. Каждая транзакция включает в себя информацию о дате, типе операции (доход или расход) и сумме. Программа должна подсчитать общий доход и расход за месяц, вычислить итоговый баланс и идентифицировать день с самым большим расходом. В конце работы программа предоставляет подробный отчет.
  2.  
  3. void main() {
  4.   final transactionManager = TransactionManager();
  5.  
  6.   transactionManager.addTransaction(
  7.     Transaction(
  8.       date: DateTime(2024, 07, 01),
  9.       operation: Operation.income,
  10.       transactionSum: 1000,
  11.     ),
  12.   );
  13.   transactionManager.addTransaction(
  14.     Transaction(
  15.       date: DateTime(2024, 07, 05),
  16.       operation: Operation.expense,
  17.       transactionSum: 200,
  18.     ),
  19.   );
  20.   transactionManager.addTransaction(
  21.     Transaction(
  22.       date: DateTime(2024, 07, 10),
  23.       operation: Operation.expense,
  24.       transactionSum: 300,
  25.     ),
  26.   );
  27.   transactionManager.addTransaction(
  28.     Transaction(
  29.       date: DateTime(2024, 07, 15),
  30.       operation: Operation.income,
  31.       transactionSum: 1500,
  32.     ),
  33.   );
  34.   transactionManager.addTransaction(
  35.     Transaction(
  36.       date: DateTime(2024, 07, 20),
  37.       operation: Operation.expense,
  38.       transactionSum: 100,
  39.     ),
  40.   );
  41.  
  42.   final report = transactionManager.report;
  43.  
  44.   print('Общий доход: ${report.resultIncome}');
  45.   print('Общий расход: ${report.resultExpense}');
  46.   print('Итоговый баланс: ${report.resultBalanse}');
  47.   print('День с самым большим расходом: ${report.mostExpensesDay}');
  48. }
  49.  
  50. enum Operation { income, expense }
  51.  
  52. final class Transaction {
  53.   final DateTime date;
  54.   final Operation operation;
  55.   final double transactionSum;
  56.  
  57.   const Transaction({
  58.     required this.date,
  59.     required this.operation,
  60.     required this.transactionSum,
  61.   });
  62.  
  63.   @override
  64.   String toString() {
  65.     return 'Transaction{date: $date, operation: $operation, transactionSum: $transactionSum}';
  66.   }
  67. }
  68.  
  69. final class TransactionManager {
  70.   final List<Transaction> _transactions = [];
  71.  
  72.   void addTransaction(Transaction transaction) {
  73.     _transactions.add(transaction);
  74.   }
  75.  
  76.   Report get report => Report(_transactions);
  77. }
  78.  
  79. final class Report {
  80.   final List<Transaction> _transactions;
  81.  
  82.   const Report(this._transactions);
  83.  
  84.   double get resultIncome {
  85.     var resultIncomeVar = 0.0;
  86.     for (final transaction in _transactions) {
  87.       if (transaction.operation == Operation.income) {
  88.         resultIncomeVar += transaction.transactionSum;
  89.       }
  90.     }
  91.     return resultIncomeVar;
  92.   }
  93.  
  94.   double get resultExpense {
  95.     var resultExpenseVar = 0.0;
  96.     for (final transaction in _transactions) {
  97.       if (transaction.operation == Operation.expense) {
  98.         resultExpenseVar += transaction.transactionSum;
  99.       }
  100.     }
  101.     return resultExpenseVar;
  102.   }
  103.  
  104.   double get resultBalanse {
  105.     return resultIncome - resultExpense;
  106.   }
  107.  
  108.   DateTime? get mostExpensesDay {
  109.     if (_transactions.isEmpty) {
  110.       return DateTime.now();
  111.     }
  112.  
  113.     double maxExpense = 0;
  114.     DateTime? maxExpenseDate;
  115.  
  116.     for (final transaction in _transactions) {
  117.       if (transaction.operation != Operation.expense) continue;
  118.  
  119.       final date = DateTime(
  120.         transaction.date.year,
  121.         transaction.date.month,
  122.         transaction.date.day,
  123.       );
  124.       final expense = transaction.transactionSum;
  125.  
  126.       if (maxExpenseDate == null || expense > maxExpense) {
  127.         maxExpense = expense;
  128.         maxExpenseDate = date;
  129.       }
  130.     }
  131.  
  132.     return maxExpenseDate;
  133.   }
  134. }
  135.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement