Skip to content
This repository was archived by the owner on Nov 3, 2025. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
118 changes: 117 additions & 1 deletion main_program.py
Original file line number Diff line number Diff line change
@@ -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")
2 changes: 1 addition & 1 deletion modules/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# modules/__init__.py
_all_ = [
__all__ = [
'atm_file_handler',
'auth',
'account',
Expand Down
24 changes: 12 additions & 12 deletions modules/account.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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):
Expand All @@ -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,
Expand All @@ -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(
Expand Down
22 changes: 12 additions & 10 deletions modules/auth.py
Original file line number Diff line number Diff line change
@@ -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"}

Expand Down Expand Up @@ -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)
Expand Down
Loading