-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBankSystem.cs
More file actions
224 lines (202 loc) · 7.14 KB
/
BankSystem.cs
File metadata and controls
224 lines (202 loc) · 7.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
using System;
using BankSystem;
namespace BankingApp
{
public class BankSystem
{
public enum MenuOption
{
Withdraw = 1,
Deposit,
Print,
Transfer,
AddAccount,
PrintTransactionHistory,
RollbackTransaction,
Quit
}
public static MenuOption ReadUserOption()
{
int choice;
do
{
Console.WriteLine("Choose an option:");
Console.WriteLine("1. Withdraw");
Console.WriteLine("2. Deposit");
Console.WriteLine("3. Print");
Console.WriteLine("4. Transfer");
Console.WriteLine("5. Add new account");
Console.WriteLine("6. Print transaction history");
Console.WriteLine("7. Rollback transaction");
Console.WriteLine("8. Quit");
if (int.TryParse(Console.ReadLine(), out choice) &&
Enum.IsDefined(typeof(MenuOption), choice))
{
return (MenuOption)choice;
}
else
{
Console.WriteLine("Invalid choice. Please select a valid option.");
}
} while (true);
}
public static void DoDeposit(Bank bank)
{
var account = FindAccount(bank);
if (account != null)
{
Console.Write("Enter deposit amount: ");
if (decimal.TryParse(Console.ReadLine(), out decimal depositAmount))
{
var depositTransaction = new DepositTransaction(account, depositAmount);
bank.ExecuteTransaction(depositTransaction);
depositTransaction.Print();
}
else
{
Console.WriteLine("Invalid amount entered.");
}
}
}
public static void DoWithdraw(Bank bank)
{
var account = FindAccount(bank);
if (account != null)
{
Console.Write("Enter withdrawal amount: ");
if (decimal.TryParse(Console.ReadLine(), out decimal withdrawAmount))
{
var withdrawTransaction = new WithdrawTransaction(account, withdrawAmount);
bank.ExecuteTransaction(withdrawTransaction);
withdrawTransaction.Print();
}
else
{
Console.WriteLine("Invalid amount entered.");
}
}
}
public static void DoPrint(Bank bank)
{
var account = FindAccount(bank);
if (account != null)
{
account.Print();
}
}
public static void DoTransfer(Bank bank)
{
Console.Write("Enter the name of the account to transfer from: ");
var fromAccount = FindAccount(bank);
if (fromAccount != null)
{
Console.Write("Enter the name of the account to transfer to: ");
var toAccount = FindAccount(bank);
if (toAccount != null)
{
Console.Write("Enter transfer amount: ");
if (decimal.TryParse(Console.ReadLine(), out decimal transferAmount))
{
var transferTransaction = new TransferTransaction(fromAccount, toAccount, transferAmount);
bank.ExecuteTransaction(transferTransaction);
transferTransaction.Print();
}
else
{
Console.WriteLine("Invalid amount entered.");
}
}
}
}
public static void AddNewAccount(Bank bank)
{
Console.Write("Enter account holder's name: ");
string name = Console.ReadLine();
Console.Write("Enter starting balance: ");
if (decimal.TryParse(Console.ReadLine(), out decimal balance))
{
if (balance >= 0)
{
var account = new Account(name, balance);
bank.AddAccount(account);
Console.WriteLine("Account created successfully.");
}
else
{
Console.WriteLine("Invalid balance entered. Balance cannot be negative.");
}
}
else
{
Console.WriteLine("Invalid balance entered.");
}
}
public static void PrintTransactionHistory(Bank bank)
{
bank.PrintTransactionHistory();
Console.Write("Enter the index of the transaction to rollback (or 0 to go back): ");
if (int.TryParse(Console.ReadLine(), out int index) && index > 0 && index <= bank.Transactions.Count)
{
DoRollback(bank, bank.Transactions[index - 1]);
}
}
public static void DoRollback(Bank bank, Transaction transaction)
{
try
{
bank.RollbackTransaction(transaction);
Console.WriteLine("Transaction rolled back successfully.");
}
catch (InvalidOperationException ex)
{
Console.WriteLine(ex.Message);
}
}
private static Account FindAccount(Bank bank)
{
Console.Write("Enter account name: ");
string name = Console.ReadLine();
var account = bank.GetAccount(name);
if (account == null)
{
Console.WriteLine("Account not found.");
}
return account;
}
public static void Main(string[] args)
{
Bank bank = new Bank();
while (true)
{
MenuOption option = ReadUserOption();
switch (option)
{
case MenuOption.Withdraw:
DoWithdraw(bank);
break;
case MenuOption.Deposit:
DoDeposit(bank);
break;
case MenuOption.Print:
DoPrint(bank);
break;
case MenuOption.Transfer:
DoTransfer(bank);
break;
case MenuOption.AddAccount:
AddNewAccount(bank);
break;
case MenuOption.PrintTransactionHistory:
PrintTransactionHistory(bank);
break;
case MenuOption.RollbackTransaction:
PrintTransactionHistory(bank);
break;
case MenuOption.Quit:
Console.WriteLine("Exiting...");
return;
}
}
}
}
}