import 'dart:io'; void main() { List> income = []; List> expense = []; const tax = 0.15; print('Welcome to Budget Management!'); while (true) { print('\n1) Add income\n2) Add expense\n3) View summary\n4) Exit'); stdout.write('Choose: '); switch (stdin.readLineSync()) { case '1': stdout.write('Income description: '); String desc = stdin.readLineSync() ?? ''; stdout.write('Amount: '); double? amt = double.tryParse(stdin.readLineSync() ?? ''); if (amt != null && amt >= 0) income.add({desc: amt}); break; case '2': stdout.write('Expense description: '); String desc = stdin.readLineSync() ?? ''; stdout.write('Amount: '); double? amt = double.tryParse(stdin.readLineSync() ?? ''); if (amt != null && amt >= 0) expense.add({desc: amt}); break; case '3': double inc = income.fold(0, (s, e) => s + e.values.first); double exp = expense.fold(0, (s, e) => s + e.values.first); double net = inc - exp; print('\nTotal income: \$${inc.toStringAsFixed(2)}'); print('Total expenses: \$${exp.toStringAsFixed(2)}'); print(net >= 0 ? 'Net profit: \$${net.toStringAsFixed(2)}' : 'Net loss: \$${(-net).toStringAsFixed(2)}'); double taxAmt = net > 0 ? net * tax : 0; if (taxAmt > 0) print('Tax (15%): \$${taxAmt.toStringAsFixed(2)}'); break; case '4': print('Goodbye!'); return; default: print('Invalid choice.'); } } }