コード例 #1
0
ファイル: HL_AccountModel.cs プロジェクト: Ly111999/AsmC-
        public bool Save(HL_Account account)
        {
            DbConnection.Instance().OpenConnection();
            string cnnStr = "insert into `account`" +
                            " (accountNumber, username, password, balance, identityCard, fullname, email, birthday,phoneNumber, address, gender, status, salt)" +
                            " values (@accountNumber, @username, @password, @balance, @identityCard, @fullname, @email, @birthday, @phoneNumber, @address, @gender, @status, @salt)";

            var cmd = new MySqlCommand(cnnStr, DbConnection.Instance().Connection);

            cmd.Parameters.AddWithValue("@accountNumber", account.AccountNumber);
            cmd.Parameters.AddWithValue("@username", account.Username);
            cmd.Parameters.AddWithValue("@password", account.Password);
            cmd.Parameters.AddWithValue("@balance", account.Balance);
            cmd.Parameters.AddWithValue("@identityCard", account.IdentityCard);
            cmd.Parameters.AddWithValue("@email", account.Email);
            cmd.Parameters.AddWithValue("@birthday", account.Birthday);
            cmd.Parameters.AddWithValue("@fullname", account.Fullname);
            cmd.Parameters.AddWithValue("@phoneNumber", account.PhoneNumber);
            cmd.Parameters.AddWithValue("@address", account.Address);
            cmd.Parameters.AddWithValue("@gender", account.Gender);
            cmd.Parameters.AddWithValue("@status", account.Status);
            cmd.Parameters.AddWithValue("@salt", account.Salt);

            cmd.ExecuteNonQuery();
            DbConnection.Instance().CloseConnection();
            return(true);
        }
コード例 #2
0
ファイル: HL_AccountModel.cs プロジェクト: Ly111999/AsmC-
        public HL_Account GetAccountByUserName(string username)
        {
            DbConnection.Instance().OpenConnection();
            var queryString = "select * from  `account` where username = @username and status = 1";
            var cmd         = new MySqlCommand(queryString, DbConnection.Instance().Connection);

            cmd.Parameters.AddWithValue("@username", username);
            var        reader  = cmd.ExecuteReader();
            HL_Account account = null;

            if (reader.Read())
            {
                var _username     = reader.GetString("username");
                var password      = reader.GetString("password");
                var salt          = reader.GetString("salt");
                var accountNumber = reader.GetString("accountNumber");
                var identityCard  = reader.GetString("identityCard");
                var balance       = reader.GetDecimal("balance");
                var phone         = reader.GetString("phoneNumber");
                var email         = reader.GetString("email");
                var fullName      = reader.GetString("fullName");
                var createdAt     = reader.GetString("createdAt");
                var updatedAt     = reader.GetString("updatedAt");
                var status        = reader.GetInt32("status");
                account = new HL_Account(username, password, salt, accountNumber, identityCard, balance, phone, email,
                                         fullName, createdAt, updatedAt, (HL_Account.ActiveStatus)status);
            }
            reader.Close();
            DbConnection.Instance().CloseConnection();
            return(account);
        }
コード例 #3
0
ファイル: HL_AccountModel.cs プロジェクト: Ly111999/AsmC-
        public HL_Account GetByAccountNumber(string accountNumber)
        {
            HL_Account 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 HL_Account
                {
                    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();
                return(account);
            }
            DbConnection.Instance().CloseConnection();
            return(null);
        }
コード例 #4
0
        public bool TransferAmount(HL_Account account, HL_Transaction historyTransaction)
        {
            DbConnection.Instance().OpenConnection();

            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();

            if (!balanceReader.Read())
            {
                throw new TransactionException("Invalid username");
            }
            var currentBalance = balanceReader.GetDecimal("balance");

            currentBalance -= historyTransaction.Amount;
            balanceReader.Close();

            if (UpdateBalanceAndSaveTransaction(account, currentBalance, historyTransaction))
            {
                return(true);
            }

            DbConnection.Instance().CloseConnection();
            return(false);
        }
コード例 #5
0
        public static Dictionary <string, HL_Account> ReadAccounts()
        {
            var dictionary = new Dictionary <string, HL_Account>();
            var lines      = File.ReadAllLines("ForgetMeNot.txt");

            for (var i = 0; i < lines.Length; i += 1)
            {
                if (i == 0)
                {
                    continue;
                }

                var linesSplited = lines[i].Split("|");
                if (linesSplited.Length == 6)
                {
                    var acc = new HL_Account()
                    {
                        AccountNumber = linesSplited[0],
                        Username      = linesSplited[1],
                        Fullname      = linesSplited[2],
                        Balance       = Decimal.Parse(linesSplited[3]),
                        Salt          = linesSplited[4],
                        Status        = (HL_Account.ActiveStatus)Int32.Parse(linesSplited[5])
                    };
                    if (dictionary.ContainsKey(acc.AccountNumber))
                    {
                        continue;
                    }

                    dictionary.Add(acc.AccountNumber, acc);
                }
            }

            return(dictionary);
        }
コード例 #6
0
ファイル: HL_AccountModel.cs プロジェクト: Ly111999/AsmC-
        public bool UpdateBalanceAndSaveTransaction(HL_Account account, decimal currentBalance, decimal currentBalanceRece1, HL_Transaction historyTransaction)
        {
            var transaction = DbConnection.Instance().Connection.BeginTransaction();

            try
            {
                //update số dư vào tài khoản người nhận
                var updateAccountRece          = 0;
                var queryUpdateAccountBalance1 = "update `account` set balance = @balance where accountNumber = @accountNumber and status = 1";
                var cmdUpdateAccountBalance1   = new MySqlCommand(queryUpdateAccountBalance1, DbConnection.Instance().Connection);
                cmdUpdateAccountBalance1.Parameters.AddWithValue("@accountNumber", historyTransaction.ReceiverAccountNumber);
                cmdUpdateAccountBalance1.Parameters.AddWithValue("@balance", currentBalanceRece1);
                updateAccountRece = cmdUpdateAccountBalance1.ExecuteNonQuery();

                // Update số dư vào tài khoản người gửi
                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
                Console.WriteLine("Account model: " + updateAccountResult + insertTransactionResult + updateAccountRece);
                if (updateAccountResult == 1 && insertTransactionResult == 1 && updateAccountRece == 1)
                {
                    transaction.Commit();
                    return(true);
                }
            }
            catch (TransactionException e)
            {
                Console.WriteLine(e);
                transaction.Rollback();
            }
            return(false);
        }
コード例 #7
0
ファイル: HL_AccountModel.cs プロジェクト: Ly111999/AsmC-
        public bool TransferAmount(HL_Account account, HL_Transaction historyTransaction)
        {
            DbConnection.Instance().OpenConnection();
            try
            {
                // ng gui
                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();
                if (!balanceReader.Read())
                {
                    throw new TransactionException("Invalid username");
                }
                var currentBalance = balanceReader.GetDecimal("balance");
                balanceReader.Close();
                if (historyTransaction.Amount > currentBalance)
                {
                    throw new Exception("Not enough money");
                }
                currentBalance -= historyTransaction.Amount;

                // ng nhan
                var          queryBalanceRece     = "select `balance` from `account` where accountNumber = @accountNumber and status = 1";
                MySqlCommand queryBalanceCommand1 = new MySqlCommand(queryBalanceRece, DbConnection.Instance().Connection);
                queryBalanceCommand1.Parameters.AddWithValue("@accountNumber", historyTransaction.ReceiverAccountNumber);
                var balanceRece = queryBalanceCommand1.ExecuteReader();
                if (!balanceRece.Read())
                {
                    throw new TransactionException("Invalid username");
                }
                var currentBalanceRece = balanceRece.GetDecimal("balance");
                Console.WriteLine("tien ng nhaaj : " + currentBalanceRece);
                balanceRece.Close();
                Console.WriteLine("ok1");
                var currentBalanceRece1 = currentBalanceRece + historyTransaction.Amount;
                Console.WriteLine("abc: " + currentBalanceRece1);

                if (UpdateBalanceAndSaveTransaction(account, currentBalance, currentBalanceRece1, historyTransaction))
                {
                    return(true);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

            DbConnection.Instance().CloseConnection();
            return(false);
        }
コード例 #8
0
ファイル: HL_AccountModel.cs プロジェクト: Ly111999/AsmC-
        public HL_Account GetByUsername(string username)
        {
            HL_Account _account = null;

            DbConnection.Instance().OpenConnection();
            var cnnStr = "select * from `account` where `username` = @username and status IN (1,2)";
            var cmd    = new MySqlCommand(cnnStr, DbConnection.Instance().Connection);

            cmd.Parameters.AddWithValue("@username", username);
            MySqlDataReader reader = cmd.ExecuteReader();

            if (reader.Read())
            {
                _account = new HL_Account();
                _account.AccountNumber = reader.GetString("accountNumber");
                _account.Username      = reader.GetString("username");
                _account.Password      = reader.GetString("password");
                _account.Salt          = reader.GetString("salt");
                _account.Balance       = reader.GetInt32("balance");
                _account.IdentityCard  = reader.GetString("identityCard");
                _account.Fullname      = reader.GetString("fullname");
                _account.Email         = reader.GetString("email");
                _account.PhoneNumber   = reader.GetString("phoneNumber");
                _account.Address       = reader.GetString("address");
                _account.Gender        = reader.GetInt32("gender");
                var status = reader.GetInt32("status");
                switch (status)
                {
                case 1:
                    _account.Status = HL_Account.ActiveStatus.ACTIVE;
                    break;

                case 2:
                    _account.Status = HL_Account.ActiveStatus.LOCKED;
                    break;
                }
            }
            reader.Close();
            DbConnection.Instance().CloseConnection();
            return(_account);
        }
コード例 #9
0
ファイル: AccountController.cs プロジェクト: Ly111999/AsmC-
        public bool CheckLogin()
        {
            Console.WriteLine("Enter username:"******"Enter password:"******"Invalid account info.");
                return(false);
            }

            if (account1.CheckEncryptedPassword(pass) == false)
            {
                Console.WriteLine("Invalid account info.");
                return(false);
            }

            Program.currentLoggedIn = account1;
            return(true);
        }
コード例 #10
0
ファイル: HL_AccountModel.cs プロジェクト: Ly111999/AsmC-
        public bool UpdateBalance(HL_Account account, HL_Transaction historyTransaction)
        {
            DbConnection.Instance().OpenConnection();

            /**
             * 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 `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())
            {
                // Không tồn tại bản ghi tương ứng, lập tức rollback transaction, trả về false.
                throw new TransactionException("Invalid username");
            }

            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 != HL_Transaction.TransactionType.DEPOSIT &&
                historyTransaction.Type != HL_Transaction.TransactionType.WITHDRAW)
            {
                throw new TransactionException("Invalid transaction type!");
            }

            // 2.1. Kiểm tra số tiền rút nếu kiểu transaction là withdraw(rút).
            if (historyTransaction.Type == HL_Transaction.TransactionType.WITHDRAW &&
                historyTransaction.Amount > currentBalance)
            {
                throw new TransactionException("Not enough money!");
            }

            // 3.1. Tính toán lại số tiền trong tài khoản.
            if (historyTransaction.Type == HL_Transaction.TransactionType.DEPOSIT)
            {
                currentBalance += historyTransaction.Amount;
            }
            else if (historyTransaction.Type == HL_Transaction.TransactionType.WITHDRAW)
            {
                currentBalance -= historyTransaction.Amount;
            }

            Console.WriteLine(historyTransaction.Type);
            if (UpdateBalanceAndSaveTransaction(account, currentBalance, 0, historyTransaction))
            {
                return(true);
            }

            DbConnection.Instance().CloseConnection();
            return(false);
        }
コード例 #11
0
ファイル: AccountController.cs プロジェクト: Ly111999/AsmC-
        public bool AddAccount()
        {
            Console.WriteLine("----Please enter information----");
            Console.WriteLine("Enter username:"******"Username existed.");
                return(false);
            }
            Console.WriteLine("Enter password:"******"Enter confirm password:"******"Enter identityCard:");
            string identityCard = Console.ReadLine();

            Console.WriteLine("Enter fullname:");
            string fullname = Console.ReadLine();

            Console.WriteLine("Enter email:");
            string email = Console.ReadLine();

            Console.WriteLine("Enter birthday:");
            string birthday = Console.ReadLine();

            Console.WriteLine("Enter phoneNumber:");
            string phoneNumber = Console.ReadLine();

            Console.WriteLine("Enter address:");
            string address = Console.ReadLine();

            Console.WriteLine("Enter gender");
            int gender = ParseChoice.GetInputNumber();

            account = new HL_Account(username, password, cpassword, identityCard, fullname, email, birthday, phoneNumber, address, gender);

            var errors = account.CheckValid();

            if (errors.Count == 0)
            {
                account.GetMD5WithSalt();
                if (_accountModel.Save(account))
                {
                    Console.WriteLine("Save success!!!");
                }
                else
                {
                    Console.WriteLine("Not success. Please try again.");
                }
            }
            else
            {
                Console.Error.WriteLine("Please fix following errors and try again.");
                foreach (var messagErrorsValue in errors.Values)
                {
                    Console.Error.WriteLine(messagErrorsValue);
                }
            }
            return(true);
        }