public YYAccount GetByAccountNumber(string accountNumber) { YYAccount account = null; DbConnection.Instance().OpenConnection(); var queryString = "select * from `account` where accountNumber = @accountNumber and status = 1"; var cmd = new MySqlCommand(queryString, DbConnection.Instance().Connection); cmd.Parameters.AddWithValue("@accountNumber", accountNumber); var reader = cmd.ExecuteReader(); var isExist = reader.Read(); if (isExist) { account = new YYAccount { AccountNumber = reader.GetString("accountNumber"), Username = reader.GetString("username"), Password = reader.GetString("password"), Salt = reader.GetString("salt"), FullName = reader.GetString("fullName"), Balance = reader.GetInt32("balance") }; } reader.Close(); DbConnection.Instance().CloseConnection(); return(account); }
public bool TransferAmount(YYAccount currentLoggedInYyAccount, YYTransaction historyTransaction) { bool account = null; DbConnection.Instance().OpenConnection(); var queryString = "select * from `accounts` where username = @accountnumber and status = 1"; var cmd = new MySqlCommand(queryString, DbConnection.Instance().Connection); cmd.Parameters.AddWithValue("@accountnumber", accountNumber); var reader = cmd.ExecuteReader(); var isExist = reader.Read(); if (isExist) { account = new YYAccount { AccountNumber = reader.GetString("accountNumber"), Username = reader.GetString("username"), Password = reader.GetString("password"), Salt = reader.GetString("salt"), FullName = reader.GetString("fullName"), Balance = reader.GetInt32("balance") }; } DbConnection.Instance().CloseConnection(); return(account); }
public Boolean Save(YYAccount ac) { DbConnection.Instance().OpenConnection(); string query = ("insert into `account`" + "(accountNumber,userName,password,salt,balance,identityCard,fullName,email,phoneNumber,address," + "dob,gender,status) values" + "(@accountNumber,@userName,@password,@salt,@balance,@identityCard,@fullName,@email,@phoneNumber,@address," + "@dob,@gender,@status)"); MySqlCommand cmd = new MySqlCommand(query, DbConnection.Instance().Connection); cmd.Parameters.AddWithValue("@accountNumber", ac.AccountNumber); cmd.Parameters.AddWithValue("@userName", ac.UserName); cmd.Parameters.AddWithValue("@password", ac.Password); cmd.Parameters.AddWithValue("@salt", ac.Salt); cmd.Parameters.AddWithValue("@balance", ac.Balance); cmd.Parameters.AddWithValue("@identityCard", ac.IdentityCard); cmd.Parameters.AddWithValue("@fullName", ac.FullName); cmd.Parameters.AddWithValue("@email", ac.Email); cmd.Parameters.AddWithValue("@phoneNumber", ac.PhoneNumber); cmd.Parameters.AddWithValue("@address", ac.Address); cmd.Parameters.AddWithValue("@dob", ac.Dob); cmd.Parameters.AddWithValue("@gender", ac.Gender); cmd.Parameters.AddWithValue("@status", ac.Status); cmd.ExecuteNonQuery(); DbConnection.Instance().CloseConnection(); return(true); }
public YYAccount GetByAccountNumber(string anumber) { DbConnection.Instance().OpenConnection(); var queryString = "select * from account where accountNumber = @accounnumber"; var cmd = new MySqlCommand(queryString, DbConnection.Instance().Connection); cmd.Parameters.AddWithValue("@accounnumber", anumber); var reader = cmd.ExecuteReader(); if (reader.Read()) { YYAccount ac = new YYAccount(); ac.AccountNumber = reader.GetString(reader.GetOrdinal("accountNumber")); ac.UserName = reader.GetString(reader.GetOrdinal("userName")); ac.Salt = reader.GetString(reader.GetOrdinal("salt")); ac.Balance = reader.GetDecimal(reader.GetOrdinal("balance")); ac.IdentityCard = reader.GetString(reader.GetOrdinal("identityCard")); ac.FullName = reader.GetString(reader.GetOrdinal("fullName")); ac.Email = reader.GetString(reader.GetOrdinal("email")); ac.PhoneNumber = reader.GetString(reader.GetOrdinal("phoneNumber")); ac.Address = reader.GetString(reader.GetOrdinal("address")); ac.Gender = reader.GetInt16(reader.GetOrdinal("gender")); ac.Status = reader.GetInt16(reader.GetOrdinal("status")); DbConnection.Instance().CloseConnection(); return(ac); } DbConnection.Instance().CloseConnection(); return(null); }
public bool LoginAccount() { Console.WriteLine("Enter account infor."); Console.WriteLine("Username: "******"Password: "******"Invalid account information."); return(false); } if (!account.CheckEncryptPassWord(password)) { Console.WriteLine("Invalid account information."); return(false); } Program.currentLoggedInYyAccount = account; return(true); }
public YYAccount GetByAccountNumber(string accountnumber) { YYAccount account = null; DbConnection.Instance().OpenConnection(); string queryString = "select * from `accounts` where accountnumber = @accountnumber and status = 1"; MySqlCommand command = new MySqlCommand(queryString, DbConnection.Instance().Connection); command.Parameters.AddWithValue("@accountnumber", accountnumber); MySqlDataReader reader = command.ExecuteReader(); var isExit = reader.Read(); if (isExit) { account = new YYAccount(); account.AccountNumber = reader.GetString("accountnumber"); account.Username = reader.GetString("username"); account.Email = reader.GetString("email"); account.Name = reader.GetString("name"); account.PhoneNumber = reader.GetString("phoneNumber"); account.Address = reader.GetString("address"); account.Password = reader.GetString("password"); account.Salt = reader.GetString("salt"); account.Balance = reader.GetInt32("balance"); account.IdentityCard = reader.GetString("identityCard"); account.Gender = reader.GetInt32("gender"); account.Status = reader.GetInt32("status"); } DbConnection.Instance().CloseConnection(); return(account); }
public bool Save(YYAccount account) { DbConnection.Instance().OpenConnection(); string queryString = "insert into `accounts` (accountnumber,name , username, password, salt, balance, identityCard," + "email, phoneNumber, address, gender, dob) values " + "(@accountnumber,@name , @username, @password, @salt, @balance, @indentityCard," + "@email, @phoneNumber, @address, @gender,@dob)"; MySqlCommand command = new MySqlCommand(queryString, DbConnection.Instance().Connection); command.Parameters.AddWithValue("@accountnumber", account.AccountNumber); command.Parameters.AddWithValue("@name", account.Name); command.Parameters.AddWithValue("@username", account.Username); command.Parameters.AddWithValue("@password", account.Password); command.Parameters.AddWithValue("@salt", account.Salt); command.Parameters.AddWithValue("@balance", account.Balance); command.Parameters.AddWithValue("@indentityCard", account.IdentityCard); command.Parameters.AddWithValue("@email", account.Email); command.Parameters.AddWithValue("@dob", account.Dob); command.Parameters.AddWithValue("@phoneNumber", account.PhoneNumber); command.Parameters.AddWithValue("@address", account.Address); command.Parameters.AddWithValue("@gender", account.Gender); command.ExecuteNonQuery(); DbConnection.Instance().CloseConnection(); return(true); }
private YYAccount GetAccountInformation() { Console.WriteLine("----------------REGISTER INFORMATION----------------"); Console.WriteLine("Username: "******"Password: "******"Confirm Password: "******"Balance: "); var balance = Utility.GetDecimalNumber(); Console.WriteLine("Identity Card: "); var identityCard = Console.ReadLine(); Console.WriteLine("Full Name: "); var fullName = Console.ReadLine(); Console.WriteLine("Birthday: "); var birthday = Console.ReadLine(); Console.WriteLine("Gender (1. Male |2. Female| 3.Others): "); var gender = Utility.GetInt32Number(); Console.WriteLine("Email: "); var email = Console.ReadLine(); Console.WriteLine("Phone Number: "); var phoneNumber = Console.ReadLine(); Console.WriteLine("Address: "); var address = Console.ReadLine(); var yyAccount = new YYAccount { Username = username, Password = password, Cpassword = cpassword, IdentityCard = identityCard, Gender = gender, Balance = balance, Address = address, Dob = birthday, FullName = fullName, Email = email, PhoneNumber = phoneNumber, }; return(yyAccount); }
public void GetListTransaction() { Console.Clear(); StringBuilder builder = new StringBuilder(); YYAccount account = null; var list = TransactionModel.TransactionHistory(Program.currentLoggedInYyAccount.AccountNumber); builder.Append("Transaction history."); builder.AppendLine(); builder.AppendFormat("{0,-40} {1,-10} {2,-15} {3,-30} {4,-30} {5,-25} {6,-15}", "Transaction ID", "Type", "Amount", "Content", "From", "To", "Created date"); builder.AppendLine(); foreach (var transaction in list) { if (transaction.Type == YYTransaction.TransactionType.DEPOSIT) { builder.AppendFormat("{0,-40} {1,-10} {2,-15} {3,-30} {4,-30} {5,-25} {6,-15}", transaction.Id, "Deposit", transaction.Amount, transaction.Content, "You", "You", transaction.CreatedAt); builder.AppendLine(); } else if (transaction.Type == YYTransaction.TransactionType.WITHDRAW) { builder.AppendFormat("{0,-40} {1,-10} {2,-15} {3,-30} {4,-30} {5,-25} {6,-15}", transaction.Id, "Withdraw", transaction.Amount, transaction.Content, "You", "You", transaction.CreatedAt); builder.AppendLine(); } else { if (Program.currentLoggedInYyAccount.AccountNumber == transaction.SenderAccountNumber) { account = AccountModel.GetByAccountNumber(transaction.ReceiverAccountNumber); builder.AppendFormat("{0,-40} {1,-10} {2,-15} {3,-30} {4,-30} {5,-25} {6,-15}", transaction.Id, "Transfer", transaction.Amount, transaction.Content, "You", account.FullName, transaction.CreatedAt); } else { account = AccountModel.GetByAccountNumber(transaction.SenderAccountNumber); builder.AppendFormat("{0,-40} {1,-10} {2,-15} {3,-30} {4,-30} {5,-25} {6,-15}", transaction.Id, "Transfer", transaction.Amount, transaction.Content, account.FullName, "You", transaction.CreatedAt); } builder.AppendLine(); } } Console.WriteLine(builder); }
public void Account() { Console.WriteLine("Please enter User Name: "); string userName = Console.ReadLine(); if (_model.CheckExistUserName(userName)) { Console.WriteLine("Duplicate user name."); } else { Console.WriteLine("Please enter password: "******"Please enter balance: "); decimal balance = Decimal.Parse(Console.ReadLine()); Console.WriteLine("Please enter identity card: "); string identityCard = Console.ReadLine(); Console.WriteLine("Please enter full name: "); string fullName = Console.ReadLine(); Console.WriteLine("Please enter email: "); string email = Console.ReadLine(); Console.WriteLine("Please enter phone number: "); string phoneNumber = Console.ReadLine(); Console.WriteLine("Please enter address: "); string address = Console.ReadLine(); Console.WriteLine("Please enter date of birth(Yeah-month-day -)"); string dob = Console.ReadLine(); Console.WriteLine("Please enter gender: "); int gender = Int32.Parse(Console.ReadLine()); Console.WriteLine("Please enter status: "); int status = Int32.Parse(Console.ReadLine()); Console.WriteLine("Register succses"); YYAccount ac1 = new YYAccount(userName, password, balance, identityCard, fullName, email, phoneNumber, address, dob, gender, status); Console.WriteLine(ac1.AccountNumber); ac1.EncryptString(); try { _model.Save(ac1); } catch (Exception e) { Console.WriteLine(e); throw; } } }
private YYAccount GetAccountInformation() { while (true) { Console.WriteLine("---------------Register Information---------------: "); Console.WriteLine("Nhap Username: "******"Nhap Password: "******"Comfirm Password: "******"Nhap Balance: "); var balance = Utillty.GetDecimalNumber(); Console.WriteLine("Nhap IdentityCard: "); var identityCard = Console.ReadLine(); Console.WriteLine("Full Name: "); var fullName = Console.ReadLine(); Console.WriteLine("Nhap Birdthday: "); var birdthday = Console.ReadLine(); Console.WriteLine("Nhap Gender(1. male | 2.temale | 3. rather not say ): "); var gender = Utillty.GetInt32Number(); Console.WriteLine("Nhap Email: "); var email = Console.ReadLine(); Console.WriteLine("Nhap PhoneNumber: "); var phone = Console.ReadLine(); Console.WriteLine("Nhap Address: "); var address = Console.ReadLine(); YYAccount yyAccount = new YYAccount { Username = username, Password = password, Cpassword = cpassword, IdentityCard = identityCard, Gender = gender, Balance = balance, Address = address, Dob = birdthday, Name = fullName, Email = email, PhoneNumber = phone }; return(yyAccount); } }
/* * Tiến hành chuyển khoản, mặc định là trong ngân hàng. * 1. Yêu cầu nhập số tài khoản cần chuyển.(số tài khoản của người nhận.) * 1.1. Xác minh thông tin tài khoản và hiển thị tên người cần chuyển. * 2. Nhập số tiền cần chuyển. * 2.1. Kiểm tra số dư tài khoản. * 3. Nhập nội dung chuyển tiền. * 3.1 Xác nhận nội dung chuyển tiền. * 4. Thực hiện chuyển tiền. * 4.1. Mở transaction. Mở block try catch. * 4.2. Trừ tiền người gửi. * 4.2.1. Lấy thông tin tài khoản gửi tiền một lần nữa. Đảm bảo thông tin là mới nhất. * 4.2.2. Kiểm tra lại một lần nữa số dư xem có đủ tiền để chuyển không. * 4.2.2.1. Nếu không đủ thì rollback. * 4.2.2.2. Nếu đủ thì trừ tiền và update vào bảng `accounts`. * 4.3. Cộng tiền người nhận. * 4.3.1. Lấy thông tin tài khoản nhận, đảm bảo tài khoản không bị khoá hoặc inactive. * 4.3.1.1. Nếu ok thì update số tiền cho người nhận. * 4.3.1.2. Nếu không ok thì rollback. * 4.4. Lưu lịch sử giao dịch. * 4.5. Kiểm tra lại trạng thái của 3 câu lệnh trên. * 4.5.1. Nếu cả 3 cùng thành công thì commit transaction. * 4.5.2. Nếu bất kỳ một câu lệnh nào bị lỗi thì rollback. * 4.x. Đóng, commit transaction. */ public void Transfer() { Console.WriteLine("Nhập số tài khoản cần chuyển: "); var accountNumber = Console.ReadLine(); YYAccount account = model.GetByAccountNumber(accountNumber); if (account == null) { Console.WriteLine("Invalid account information"); return; } Console.WriteLine("Tên người cần chuyển: " + account.Name); Console.WriteLine("Nhập số tiền cần chuyển: "); var amount = Utillty.GetDecimalNumber(); Console.WriteLine("Please enter message content: "); var content = Console.ReadLine(); // Program.currentLoggedIn = model.GetAccountByUserName(Program.currentLoggedIn.Username); var historyTransaction = new YYTransaction() { Id = Guid.NewGuid().ToString(), Type = YYTransaction.TransactionType.TRANSFER, Amount = amount, Content = content, SenderAccountNumber = Program.currentLoggedInYyAccount.AccountNumber, ReceiverAccountNumber = accountNumber, Status = YYTransaction.ActiveStatus.DONE }; if (model.Tranfer(Program.currentLoggedInYyAccount, historyTransaction)) { Console.WriteLine("Transaction success!"); } else { Console.WriteLine("Transaction fails, please try again!"); } Program.currentLoggedInYyAccount = model.Login(Program.currentLoggedInYyAccount.Username); Console.WriteLine("Current balance: " + Program.currentLoggedInYyAccount.Balance); Console.WriteLine("Press enter to continue!"); Console.ReadLine(); }
public YYAccount GetByLogin(string accountnumber, string password) { DbConnection.Instance().OpenConnection(); var queryString = "select * from account where accountNumber = @accountnumber and password = @password"; var cmd = new MySqlCommand(queryString, DbConnection.Instance().Connection); cmd.Parameters.AddWithValue("@accountnumber", accountnumber); cmd.Parameters.AddWithValue("@password", password); var reader = cmd.ExecuteReader(); if (reader.Read()) { YYAccount ac = new YYAccount(); String anumber = reader.GetString("accountNumber"); String pword = reader.GetString("password"); String salt = reader.GetString("salt"); return(ac); } DbConnection.Instance().CloseConnection(); return(null); }
public bool Register() { while (true) { YYAccount yyAccount = GetAccountInformation(); Dictionary <string, string> errors = yyAccount.CheckValidate(); if (errors.Count > 0) { Console.WriteLine("Please fix errors below and try again."); foreach (var error in errors) { Console.WriteLine(error); } } else { yyAccount.EncryptPassWord(); model.Save(yyAccount); return(true); } } }
/** Xử lý đăng nhập người dùng. * 1. Yêu cầu người dùng nhập thông tin đăng nhập. * 2. Kiểm tra thông tin username người dùng vừa nhập vào. * 3. **/ public bool Login() { // Yêu cầu nhập thông tin đăng nhập. Console.WriteLine("----------------LOGIN INFORMATION----------------"); Console.WriteLine("Username: "******"Password: "); var password = Console.ReadLine(); // Tìm trong database thông tin tài khoản với username vừa nhập vào. // Trả về null nếu không tồn tại tài khoản trùng với username trên. // Trong trường hợp tồn tại bản ghi thì trả về thông tin account của // bản ghi đấy. YYAccount existingAccount = model.GetByUsername(username); // Nếu trả về null thì hàm login trả về false. if (existingAccount == null) { return(false); } // Nếu chạy đến đây rồi thì `existingAccount` chắc chắn khác null. // Tiếp tục kiểm tra thông tin password. // Mã hoá password người dùng vừa nhập vào kèm theo muối lấy trong database // của bản ghi và so sánh với password đã mã hoá trong database. if (!existingAccount.CheckEncryptedPassword(password)) { // Nếu không trùng thì trả về false, đăng nhập thất bại. return(false); } // Trong trường hợp chạy đến đây thì thông tin tài khoản chắc chắn khác null // và password đã trùng nhau. Đăng nhập thành công. // Lưu thông tin vừa lấy ra trong database vào biến // `currentLoggedInYyAccount` của lớp Program. Program.currentLoggedInYyAccount = existingAccount; // Hàm trả về true, login thành công. return(true); }
public bool Register() { YYAccount account = GetAccountInformation(); Dictionary <string, string> errors = account.CheckValidate(); if (errors.Count > 0) { Console.WriteLine("Please fix errros below and try again."); foreach (var error in errors) { Console.WriteLine(error); } return(false); } else { // Lưu vào database. account.EncryptPassword(); model.Save(account); return(true); } }
public bool Login() { Console.WriteLine("----------------LOGIN INFORMATION----------------"); Console.WriteLine("Username: "******"Password: "); var password = Console.ReadLine(); YYAccount existingAccount = model.GetByUsername(username); if (existingAccount == null) { return(false); } if (!existingAccount.CheckEncryptedPassword(password)) { return(false); } Program.currentLoggedInYyAccount = existingAccount; return(true); }
public bool UpdateBalance(YYAccount account, YYTransaction historyTransaction) { DbConnection.Instance().OpenConnection(); // đảm bảo rằng đã kết nối đến db thành công. var transaction = DbConnection.Instance().Connection.BeginTransaction(); // Khởi tạo transaction. try { /** * 1. Lấy thông tin số dư mới nhất của tài khoản. * 2. Kiểm tra kiểu transaction. Chỉ chấp nhận deposit và withdraw. * 2.1. Kiểm tra số tiền rút nếu kiểu transaction là withdraw. * 3. Update số dư vào tài khoản. * 3.1. Tính toán lại số tiền trong tài khoản. * 3.2. Update số tiền vào database. * 4. Lưu thông tin transaction vào bảng transaction. */ // 1. Lấy thông tin số dư mới nhất của tài khoản. var queryBalance = "select balance from `accounts` where username = @username and status = @status"; MySqlCommand queryBalanceCommand = new MySqlCommand(queryBalance, DbConnection.Instance().Connection); queryBalanceCommand.Parameters.AddWithValue("@username", account.Username); queryBalanceCommand.Parameters.AddWithValue("@status", account.Status); var balanceReader = queryBalanceCommand.ExecuteReader(); // Không tìm thấy tài khoản tương ứng, throw lỗi. if (!balanceReader.Read()) { // Không tồn tại bản ghi tương ứng, lập tức rollback transaction, trả về false. // Hàm dừng tại đây. throw new SpringHeroTransactionException("Invalid username"); } // Đảm bảo sẽ có bản ghi. var currentBalance = balanceReader.GetDecimal("balance"); balanceReader.Close(); // 2. Kiểm tra kiểu transaction. Chỉ chấp nhận deposit và withdraw. if (historyTransaction.Type != YYTransaction.TransactionType.DEPOSIT && historyTransaction.Type != YYTransaction.TransactionType.WITHDRAW) { throw new SpringHeroTransactionException("Invalid transaction type!"); } // 2.1. Kiểm tra số tiền rút nếu kiểu transaction là withdraw. if (historyTransaction.Type == YYTransaction.TransactionType.WITHDRAW && historyTransaction.Amount > currentBalance) { throw new SpringHeroTransactionException("Not enough money!"); } // 3. Update số dư vào tài khoản. // 3.1. Tính toán lại số tiền trong tài khoản. if (historyTransaction.Type == YYTransaction.TransactionType.DEPOSIT) { currentBalance -= historyTransaction.Amount; } else { currentBalance += historyTransaction.Amount; } // 3.2. Update số dư vào database. var updateAccountResult = 0; var queryUpdateAccountBalance = "update `accounts` set balance = @balance where username = @username and status = 1"; var cmdUpdateAccountBalance = new MySqlCommand(queryUpdateAccountBalance, DbConnection.Instance().Connection); cmdUpdateAccountBalance.Parameters.AddWithValue("@username", account.Username); cmdUpdateAccountBalance.Parameters.AddWithValue("@balance", currentBalance); updateAccountResult = cmdUpdateAccountBalance.ExecuteNonQuery(); // 4. Lưu thông tin transaction vào bảng transaction. var insertTransactionResult = 0; var queryInsertTransaction = "insert into `transactions` " + "(id, type, amount, content, senderAccountNumber, receiverAccountNumber, status) " + "values (@id, @type, @amount, @content, @senderAccountNumber, @receiverAccountNumber, @status)"; var cmdInsertTransaction = new MySqlCommand(queryInsertTransaction, DbConnection.Instance().Connection); cmdInsertTransaction.Parameters.AddWithValue("@id", historyTransaction.Id); cmdInsertTransaction.Parameters.AddWithValue("@type", historyTransaction.Type); cmdInsertTransaction.Parameters.AddWithValue("@amount", historyTransaction.Amount); cmdInsertTransaction.Parameters.AddWithValue("@content", historyTransaction.Content); cmdInsertTransaction.Parameters.AddWithValue("@senderAccountNumber", historyTransaction.SenderAccountNumber); cmdInsertTransaction.Parameters.AddWithValue("@receiverAccountNumber", historyTransaction.ReceiverAccountNumber); cmdInsertTransaction.Parameters.AddWithValue("@status", historyTransaction.Status); insertTransactionResult = cmdInsertTransaction.ExecuteNonQuery(); if (updateAccountResult == 1 && insertTransactionResult == 1) { transaction.Commit(); return(true); } } catch (SpringHeroTransactionException e) { transaction.Rollback(); return(false); } DbConnection.Instance().CloseConnection(); return(false); }
public bool TransferAmount(YYAccount account, YYTransaction historyTransaction) { DbConnection.Instance().OpenConnection(); var transaction = DbConnection.Instance().Connection.BeginTransaction(); try { // Kiểm tra số tài khoản mới nhất var queryBalance = "select `balance` from `account` where username = @username and status = 1"; MySqlCommand queryBalanceCommand = new MySqlCommand(queryBalance, DbConnection.Instance().Connection); queryBalanceCommand.Parameters.AddWithValue("@username", account.Username); var balanceReader = queryBalanceCommand.ExecuteReader(); // Không tìm thấy tài khoản tương ứng, throw lỗi. if (!balanceReader.Read()) { throw new TransactionException("Invalid username"); } var currentBalance = balanceReader.GetDecimal("balance"); currentBalance -= historyTransaction.Amount; balanceReader.Close(); // Update số dư vào database. var updateAccountResult = 0; var queryUpdateAccountBalance = "update `account` set balance = @balance where username = @username and status = 1"; var cmdUpdateAccountBalance = new MySqlCommand(queryUpdateAccountBalance, DbConnection.Instance().Connection); cmdUpdateAccountBalance.Parameters.AddWithValue("@username", account.Username); cmdUpdateAccountBalance.Parameters.AddWithValue("@balance", currentBalance); updateAccountResult = cmdUpdateAccountBalance.ExecuteNonQuery(); // Lưu thông tin transaction vào bảng transaction. var insertTransactionResult = 0; var queryInsertTransaction = "insert into `transaction` " + "(id, fromAccountNumber, amount, content, toAccountNumber, type, status) " + "values (@id, @fromAccountNumber, @amount, @content, @toAccountNumber, @type, @status)"; var cmdInsertTransaction = new MySqlCommand(queryInsertTransaction, DbConnection.Instance().Connection); cmdInsertTransaction.Parameters.AddWithValue("@id", historyTransaction.Id); cmdInsertTransaction.Parameters.AddWithValue("@fromAccountNumber", historyTransaction.SenderAccountNumber); cmdInsertTransaction.Parameters.AddWithValue("@amount", historyTransaction.Amount); cmdInsertTransaction.Parameters.AddWithValue("@content", historyTransaction.Content); cmdInsertTransaction.Parameters.AddWithValue("@toAccountNumber", historyTransaction.ReceiverAccountNumber); cmdInsertTransaction.Parameters.AddWithValue("@type", historyTransaction.Type); cmdInsertTransaction.Parameters.AddWithValue("@status", historyTransaction.Status); insertTransactionResult = cmdInsertTransaction.ExecuteNonQuery(); // Kiểm tra lại câu lệnh if (updateAccountResult == 1 && insertTransactionResult == 1) { transaction.Commit(); return(true); } } catch (TransactionException e) { transaction.Rollback(); return(false); } DbConnection.Instance().CloseConnection(); return(false); }
public bool Tranfer(YYAccount currentLoggedInYyAccount, YYTransaction historyTransaction) { DbConnection.Instance().OpenConnection(); // đảm bảo rằng đã kết nối đến db thành công. var transaction = DbConnection.Instance().Connection.BeginTransaction(); try { // 1. Lấy thông tin số dư mới nhất của tài khoản. var queryBalance = "select balance from `accounts` where accountnumber = @accountnumber and status = @status"; MySqlCommand queryBalanceCommand = new MySqlCommand(queryBalance, DbConnection.Instance().Connection); queryBalanceCommand.Parameters.AddWithValue("@accountnumber", currentLoggedInYyAccount.AccountNumber); queryBalanceCommand.Parameters.AddWithValue("@status", currentLoggedInYyAccount.Status); var balanceReader = queryBalanceCommand.ExecuteReader(); // Không tìm thấy tài khoản tương ứng, throw lỗi. if (!balanceReader.Read()) { // Không tồn tại bản ghi tương ứng, lập tức rollback transaction, trả về false. // Hàm dừng tại đây. throw new SpringHeroTransactionException("Invalid username"); } // Đảm bảo sẽ có bản ghi. var currentBalance = balanceReader.GetDecimal("balance"); balanceReader.Close(); if (historyTransaction.Amount > currentBalance) { throw new SpringHeroTransactionException("Not enough money!"); } currentBalance -= historyTransaction.Amount; var updateAccountResult = 0; var queryUpdateAccountBalance = "update `accounts` set balance = @balance where accountnumber = @accountnumber and status = 1"; var cmdUpdateAccountBalance = new MySqlCommand(queryUpdateAccountBalance, DbConnection.Instance().Connection); cmdUpdateAccountBalance.Parameters.AddWithValue("@accountnumber", currentLoggedInYyAccount.AccountNumber); cmdUpdateAccountBalance.Parameters.AddWithValue("@balance", currentBalance); updateAccountResult = cmdUpdateAccountBalance.ExecuteNonQuery(); var queryBalanceRecever = "select balance from `accounts` where accountnumber = @accountnumber and status = @status"; MySqlCommand queryBalanceCommandRecever = new MySqlCommand(queryBalanceRecever, DbConnection.Instance().Connection); queryBalanceCommandRecever.Parameters.AddWithValue("@accountnumber", historyTransaction.ReceiverAccountNumber); queryBalanceCommandRecever.Parameters.AddWithValue("@status", currentLoggedInYyAccount.Status); var balanceReaderRecever = queryBalanceCommandRecever.ExecuteReader(); if (!balanceReaderRecever.Read()) { // Không tồn tại bản ghi tương ứng, lập tức rollback transaction, trả về false. // Hàm dừng tại đây. throw new SpringHeroTransactionException("Invalid username"); } // Đảm bảo sẽ có bản ghi. var currentBalanceRecever = balanceReaderRecever.GetDecimal("balance"); balanceReaderRecever.Close(); if (historyTransaction.Amount > currentBalanceRecever) { throw new SpringHeroTransactionException("Not enough money!"); } currentBalanceRecever += historyTransaction.Amount; var updateAccountResultRecever = 0; var queryUpdateAccountBalanceRecever = "update `accounts` set balance = @balance where accountnumber = @accountnumber and status = 1"; var cmdUpdateAccountBalanceRecever = new MySqlCommand(queryUpdateAccountBalanceRecever, DbConnection.Instance().Connection); cmdUpdateAccountBalanceRecever.Parameters.AddWithValue("@accountnumber", historyTransaction.ReceiverAccountNumber); cmdUpdateAccountBalanceRecever.Parameters.AddWithValue("@balance", currentBalanceRecever); updateAccountResultRecever = cmdUpdateAccountBalanceRecever.ExecuteNonQuery(); // 4. Lưu thông tin transaction vào bảng transaction. var insertTransactionResult = 0; var queryInsertTransaction = "insert into `transactions` " + "(id, type, amount, content, senderAccountNumber, receiverAccountNumber, status) " + "values (@id, @type, @amount, @content, @senderAccountNumber, @receiverAccountNumber, @status)"; var cmdInsertTransaction = new MySqlCommand(queryInsertTransaction, DbConnection.Instance().Connection); cmdInsertTransaction.Parameters.AddWithValue("@id", historyTransaction.Id); cmdInsertTransaction.Parameters.AddWithValue("@type", historyTransaction.Type); cmdInsertTransaction.Parameters.AddWithValue("@amount", historyTransaction.Amount); cmdInsertTransaction.Parameters.AddWithValue("@content", historyTransaction.Content); cmdInsertTransaction.Parameters.AddWithValue("@senderAccountNumber", historyTransaction.SenderAccountNumber); cmdInsertTransaction.Parameters.AddWithValue("@receiverAccountNumber", historyTransaction.ReceiverAccountNumber); cmdInsertTransaction.Parameters.AddWithValue("@status", historyTransaction.Status); insertTransactionResult = cmdInsertTransaction.ExecuteNonQuery(); if (updateAccountResult == 1 && insertTransactionResult == 1 && updateAccountResultRecever == 1) { transaction.Commit(); return(true); } } catch (Exception e) { Console.WriteLine(e); throw; } return(true); }
public void Login() { Console.WriteLine("Please enter Acount Number: "); string anumber = Console.ReadLine(); Console.WriteLine("Please enter password: "******"Username or password false!"); } else { { while (true) { Console.WriteLine("-----------Welcome to SHB--------------"); Console.WriteLine("1, Account Information."); Console.WriteLine("2, The amount in the account"); Console.WriteLine("3, Deposit into account."); Console.WriteLine("4, Transfers."); Console.WriteLine("5, Withdrawal"); Console.WriteLine("6, Transaction history."); Console.WriteLine("7, Change history."); Console.WriteLine("8, Log out."); Console.WriteLine("---------------------------------------"); Console.WriteLine("Please enter choice: "); int choice = Int32.Parse(Console.ReadLine()); switch (choice) { case 1: DbConnection.Instance().CloseConnection(); Console.WriteLine("You choice acount information."); YYAccount ac = new YYAccount(); var infoAccount = _model.GetByAccountNumber(anumber); Console.WriteLine("Account Number: " + infoAccount.AccountNumber + ", User Name: " + infoAccount.UserName + ", Balance: " + infoAccount.Balance + ", Identity Card: " + infoAccount.IdentityCard + ", Full Name: " + infoAccount.FullName + "\n, Email: " + infoAccount.Email + ", Phone Number: " + infoAccount.PhoneNumber + ", Address: " + infoAccount.Address + ", Gender: " + infoAccount.Gender1() + ", Status: " + infoAccount.Status1()); Console.WriteLine("Do you want to change information(y/n): "); string conts = Console.ReadLine(); switch (conts) { case "y": ChangeAccount(anumber); break; case "n": break; } break; case 2: Console.WriteLine("You choice the amount in the account"); DbConnection.Instance().CloseConnection(); var amount = _model.GetByAccountNumber(anumber); Console.WriteLine("Account balance available is: " + amount.Balance); break; case 3: Console.WriteLine("You choice deposit into account."); DbConnection.Instance().CloseConnection(); DepositBalance(anumber); break; case 4: Console.WriteLine("You choice transfers."); DbConnection.Instance().CloseConnection(); Trasaction(anumber); break; case 5: Console.WriteLine("You choice withdrawal"); DbConnection.Instance().CloseConnection(); WithdrawalBalance(anumber); break; case 6: Console.WriteLine("You choice transaction history."); DbConnection.Instance().CloseConnection(); Console.WriteLine("You choice transaction history."); Console.WriteLine("{0,-10}{1,-20}{2,-20}{3,-10}{4,-20}{5,-30},{6,-20}", "Id", "Account Number", "Type", "Amount", "", "Trading account number", "Created Date"); List <YYTransactionHistory> list = _history.queryHistory(anumber); foreach (var th in list) { Console.WriteLine("{0,-10}{1,-20}{2,-20}{3,-10}{4,-20}{5,-30},{6, -20}", th.Id, th.AccountNumber, th.Type1(), th.Amount, "(VNĐ)", th.TradingAcountNumber1(), th.CreatedDate); } break; case 7: Console.WriteLine("You choice change history."); DbConnection.Instance().CloseConnection(); Console.WriteLine("{0,-60}{1,-40}", "Account Number", "Content"); List <YYChangeHistory> list1 = _change.queryChange(anumber); foreach (var ch in list1) { Console.WriteLine("{0,-60}{1,-40}", ch.AccountNumber, ch.Content); } break; case 8: Console.WriteLine("Log out."); DbConnection.Instance().CloseConnection(); break; default: Console.WriteLine("You enter fails. Please enter again!"); break; } if (choice == 8) { break; } } } } }