diff --git a/main_program.py b/main_program.py index cfe6271..15be402 100644 --- a/main_program.py +++ b/main_program.py @@ -1,2 +1,118 @@ -#from modules import atm_file_handler, auth, account +from modules import atm_file_handler, auth, account +import datetime +def main(): + while True: + print("""==== ATM Simulation ==== + [1] Login + [2] Register + [3] Exit""") + menu = input("Enter menu number:").strip() + if menu == "1": + account_number = input("Enter account number: ").strip() + pin = input("Enter PIN number: ").strip() + login_result = auth.login(account_number, pin) + print(login_result["msg"]) + if login_result["status"] == "success": + main_menu(account_number) + elif menu == "2": + check_title = True + title = input("Enter title (MR/MS): ").strip() + if title != "MR" and title != "MS": + print("Select title MR or MS") + check_title = False + if check_title: + first_name = input("Enter first name: ").strip() + last_name = input("Enter last name: ").strip() + pin = input("Enter 6-digit PIN: ").strip() + register_result = auth.register(title, first_name, last_name, pin) + print(type(register_result["msg"])) + elif menu == "3": + print("Goodbye") + break + else: + print("Invalid menu number, please try again.") + +#ใบเสร็จ Receipt +def receipt(account_number,menu_type ,amount , account_numberv2=None): + #อ่านธุรกรรม + try: + transactions = atm_file_handler.read_transaction_file(account_number) + if not transactions: + print("ไม่พบบัญชีหรือไม่มีธุรกรรม") + return + lol_transaction = transactions[-1].strip().split(",") + transaction_id = lol_transaction[0] + timestamp = lol_transaction[1] + balance = lol_transaction[2] + account_numberv2_acc = account_numberv2 if account_numberv2 else "None" + print(f"""==== {menu_type} ==== +Time: {timestamp} +Account: {account_number} +Amount: {amount} +Target: {account_numberv2_acc} +Transaction ID: {transaction_id} +Balance: {balance} + ================""") + except FileNotFoundError: + print("ไม่พบไฟล์ธุรกรรมของบัญชีนี้") + + +#หน้า Main Menu +def main_menu(account_number): + while True: + print(f"""==== Main Menu (Account: {account_number}) ==== +[1] Check Balance +[2] Deposit +[3] Withdraw +[4] Transfer +[5] Transactions history +[6] Logout""") + choice = input("Enter menu number:").strip() + if choice == "1": + balance = account.check_balance(account_number) + #if balance is None: + print(balance) + elif choice == "2": + check_amount = True + amount = float(input("Enter deposit amount (100, 500, 1000 banknote only): ")) + if amount % 100 != 0: + print("100, 500, 1000 banknote only") + check_amount = False + if check_amount: + balance = account.check_balance(account_number) + print(balance) + print(amount) + result = account.add_transaction_firstdeposit(account_number, amount) + result = account.add_transaction_deposit(account_number, amount) + receipt(account_number, "Deposit", amount) + print(result["msg"]) + elif choice == "3": + check_amount = True + amount = float(input("Enter withdraw amount: ")) + if amount % 100 != 0: + print("100, 500, 1000 banknote only") + check_amount = False + if check_amount: + result = account.add_transaction_withdrawal(account_number, amount) + receipt(account_number, "Withdrawal", amount) + print(result["msg"]) + elif choice == "4": + account_numberv2 = input("Enter recipient account number: ").strip() + amount = float(input("Enter transfer amount: ")) + result = account.add_transaction_transfer(account_number,account_numberv2,amount) + receipt(account_number, "Transfer", amount, account_numberv2) + print(result["msg"]) + elif choice == "5": + transactions = atm_file_handler.read_transaction_file(account_number) + print("==== Transactions history ====") + for t in transactions: + print(t.strip()) + elif choice == "6": + print("Logging out...") + break + else: + print("Invalid menu number, please try again.") + +main() +#main_menu("123456789") \ No newline at end of file diff --git a/modules/__init__.py b/modules/__init__.py index 97830d3..869c41a 100644 --- a/modules/__init__.py +++ b/modules/__init__.py @@ -1,5 +1,5 @@ # modules/__init__.py -_all_ = [ +__all__ = [ 'atm_file_handler', 'auth', 'account', diff --git a/modules/account.py b/modules/account.py index 55aba60..ee02b2c 100644 --- a/modules/account.py +++ b/modules/account.py @@ -27,11 +27,11 @@ def add_transaction_deposit(account_number,amount): if i == lol - 1: decimal1 = float(cut1) plus_num += decimal1 - timestamps = datetime.datetime.now().isoformat() + timestamps = str(datetime.datetime.now()) atm_file_handler.append_transaction_log_file( account_number=account_number, transaction_id=gen_transaction_id, - timestamp=timestamps[0:19], + timestamp=timestamps, type_i="deposit", amount=amount, balance= amount+plus_num, @@ -58,11 +58,11 @@ def add_transaction_firstdeposit(account_number,amount): except: checkfile = True if check == True and checkfile == True: - timestamps = datetime.datetime.now().isoformat() + timestamps = str(datetime.datetime.now()) atm_file_handler.append_transaction_log_file( account_number=account_number, transaction_id=gen_transaction_id, - timestamp=timestamps[0:19], + timestamp=timestamps, type_i="deposit", amount=amount, balance=amount, @@ -85,13 +85,13 @@ def add_transaction_withdrawal(account_number,amount): if i == lol - 1: decimal1 = float(cut1) plus_num += decimal1 - timestamps = datetime.datetime.now().isoformat() + timestamps = str(datetime.datetime.now()) if amount > plus_num: return {"status":"error","msg":"ยอดเงินไม่เพียง่พอ"} atm_file_handler.append_transaction_log_file( account_number=account_number, transaction_id=gen_transaction_id, - timestamp=timestamps[0:19], + timestamp=timestamps, type_i="withdrawal", amount=-abs(amount), balance= plus_num-amount, @@ -111,7 +111,7 @@ def check_balance(account_number): if i == lol - 1: return {"status":"success","msg":acc_num} except FileNotFoundError: - return {"status":"error","msg":"ไม่พบบัญชี"} + return {"status":"error","msg":"ไม่พบบัญชีหรือธุรกรรม"} #โอนเงิน def add_transaction_transfer(account_number,account_numberv2,amount): @@ -127,13 +127,13 @@ def add_transaction_transfer(account_number,account_numberv2,amount): if i == lol - 1: decimal1 = float(cut1) plus_num += decimal1 - timestamps = datetime.datetime.now().isoformat() + timestamps = str(datetime.datetime.now()) if amount > plus_num: return {"status":"error","msg":"ยอดเงินไม่เพียงพอ"} atm_file_handler.append_transaction_log_file( account_number=account_number, transaction_id=gen_transaction_id, - timestamp=timestamps[0:19], + timestamp=timestamps, type_i="transfer", amount=-abs(amount), balance= plus_num-amount, @@ -156,9 +156,9 @@ def check_transaction_history(account_number): #kplus = check_transaction_history("123-4-56789-0") #print(kplus) -#x = add_transaction_firstdeposit(account_number="123-4-56789-0",amount=20000.0) -#y = add_transaction_deposit("123-4-56789-0",3000.00) -#m = add_transaction_withdrawal("123-4-56789-0",500.00) +# x = add_transaction_firstdeposit(account_number="870-9-74830-6",amount=20000.0) +# y = add_transaction_deposit("870-9-74830-6",3000.00) +# m = add_transaction_withdrawal("870-9-74830-6",500.00) #print(m) #print(x) # atm_file_handler.append_account_file( diff --git a/modules/auth.py b/modules/auth.py index 575aab4..47bb639 100644 --- a/modules/auth.py +++ b/modules/auth.py @@ -1,9 +1,16 @@ from modules import atm_file_handler import random -from datetime import datetime +import datetime -def register(title, first_name, last_name, account_number, pin): +def register(title, first_name, last_name, pin): #title ถ้าไม่ได้รับ MR หรือ ms + # สุ่มเลขบัญชี + acc_nums1 = random.randint(0, 999) + acc_nums2 = random.randint(0, 9) + acc_nums3 = random.randint(0, 99999) + acc_nums4 = random.randint(0, 9) + account_number = f"{acc_nums1:03}-{acc_nums2}-{acc_nums3:05}-{acc_nums4}" + lol=["MR", "MS"] if title != "MR" and title != "MS": return {"status": "error", "msg": "Select title MR or MS"} @@ -39,16 +46,11 @@ def register(title, first_name, last_name, account_number, pin): if not pin.isdigit(): return {"status": "error", "msg": "กรอกเป็นตัวเลขเท่านั้น"} - #สุ่มเลขบัญชี - acc_nums1 = random.randint(0, 999) - acc_nums2 = random.randint(0, 9) - acc_nums3 = random.randint(0, 99999) - acc_nums4 = random.randint(0, 9) - account_number = f"{acc_nums1:03}-{acc_nums2}-{acc_nums3:05}-{acc_nums4}" + #เวลา - timestamps = datetime.datetime.now().isoformat() - created_at = timestamps[0:19] + #timestamps = datetime.datetime.now() + created_at = str(datetime.datetime.now()) #เพิ่มข้อมูลเข้าไฟ atm_file_handler.append_account_file(title, first_name, last_name, account_number, pin, created_at)