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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        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);
        }
Exemple #8
0
        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;
                }
            }
        }
Exemple #11
0
 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();
        }
Exemple #13
0
        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);
        }
Exemple #14
0
 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);
        }
Exemple #16
0
        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);
            }
        }
Exemple #17
0
        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);
        }
Exemple #18
0
        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);
        }
Exemple #20
0
        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;
                        }
                    }
                }
            }
        }