1. 程式人生 > 程式設計 >python實現銀行管理系統

python實現銀行管理系統

python 實現銀行管理系統,供大家參考,具體內容如下

有的地方用的方法的比較複雜,主要是為回顧更多的知識

test1用來存類和函式

#test1.py 
import random   #用來隨機產生卡號
import pickle  #序列化,用來存放和取出產生的使用者資料
import os    #產生檔案
import re    #正則表示式,用來判斷身份證和手機號,其他地方也可以使用
class Card:
 def __init__(self,cardId,password,money=0):
  self.cardId=cardId
  self.password=password
  self.money=money
class User(Card):
 def __init__(self,username,phone,uid,card):
  self.username=username
  self.phone=phone
  self.uid=uid
  self.user_card=card  #User繼承Card物件
class Bank(User):    #Bank 繼承User,Bank是序列化的物件,所以將其變為字典
 def __init__(self,user):
  self.cardId=user.user_card.cardId  
  self.user=user     
  self.users={self.cardId:self.user} #鍵,卡號 :值,User物件 

def generate_cardid():  #方法一 產生卡號
 list=[]
 for i in range(0,11):
  n=random.randint(0,9)
  n=str(n)
  list.append(n)
 # str="".join(list)
 return list
# generate_cardid()
# user_cardId=input("請輸入您的賬號:")
def create_user():   #方法2:開戶
 while True:
  uid=input("請輸入身份證:")
  realut=re.fullmatch("\d{17}[\d,X]",uid) #正則判斷身份證是否合理
  if realut:
   uid=realut.group()
   break
  else:
   print("格式不合法")
   continue
 username=input("請輸入姓名:")
 while True:
  phone=input("請輸入手機號碼:")
  realut = re.fullmatch("1\d{10}",phone) #正則判斷手機號是否合理,其他需要判斷的地方都可以判斷,我就不再使用了
  if realut:
   phone=realut.group()
   # print(phone)
   break
  else:
   print("格式不合法")
   continue
 list=generate_cardid()  #得到卡號列表
 cardId="".join(list)  #將卡號變成字串,字串的卡號才能做成鍵
 print(f"您的卡號為:{cardId}")
 while True:
  password1=input("請輸入密碼:")
  password2=input("再次輸入密碼確認:")
  if password1==password2:
   password=password1
   break
  else :
   print("兩次密碼不同,請重新輸入!")
   continue
 card=Card(cardId,password)  
 user=User(uid,card)
 bank=Bank(user)  #產生bank物件
 with open(f"data\\{cardId}.txt","ab") as file_w: #重點:建立一個資料夾data來存放產生的bank物件,每個物件根據卡號產生一個txt檔案,用來存放使用者的所有資料
  pickle.dump(bank,file_w) #將bank 序列化儲存到文件中
# create_user()

def user_login(user_cardId):  #登入

 if os.path.exists(f"data\\{user_cardId}.txt"):
  with open(f"data\\{user_cardId}.txt","rb") as file_r:
   u_data = pickle.load(file_r) #根據卡號取出txt文件,反序列化取出資料
   if u_data.cardId == user_cardId: #u_data是一個字典,鍵是卡號,值是user物件 
    n = 1
    while True:
     if n <= 3:
      user_pw = input("請輸入密碼:")
      if u_data.user.user_card.password == user_pw:
       return True
      else:
       print("密碼錯誤!")
       n+=1
       continue
     else:
      print("三次輸入密碼錯誤!")
      return
 else:
  print("沒有該使用者")

# user_login(user_cardId)
def save_money(user_cardId):  # 方法4:存錢
 if user_login(user_cardId): #如果登入成功
  money=int(input("請您輸入存錢金額:"))
  with open(f"data\\{user_cardId}.txt","rb") as file_r:
   u_data = pickle.load(file_r)
   u_data.user.user_card.money=u_data.user.user_card.money+money
   print("您的餘額為:",u_data.user.user_card.money)
   with open(f"data\\{user_cardId}.txt","wb") as file_w: #這裡要用wb,而不是ab,改變資料後,需要覆蓋原來的資料,而不是新增
    pickle.dump(u_data,file_w)
# save_money()

def withdraw_money(user_cardId): # 方法5:取錢
 if user_login(user_cardId):
  money=int(input("請您輸入取款金額:"))
  with open(f"data\\{user_cardId}.txt","rb") as file_r:
   u_data = pickle.load(file_r)
   if money>u_data.user.user_card.money:
    print("餘額不足")
   else:
    u_data.user.user_card.money=u_data.user.user_card.money-money
    print("您的餘額為:",u_data.user.user_card.money)
    with open(f"data\\{user_cardId}.txt","wb") as file_w:
     pickle.dump(u_data,file_w)

# withdraw_money()

def transfer_accounts(user_cardId):  #方法6,轉賬
 if user_login(user_cardId):
  with open(f"data\\{user_cardId}.txt","rb") as file_r:
   u_data = pickle.load(file_r)
   while True:
    money = int(input("請您轉賬取款金額:"))
    if money > u_data.user.user_card.money:
     print("餘額不足")
     break
    else:
     cardId=int(input("請您對方卡號:"))
     if os.path.exists(f"data\\{cardId}.txt"):  #如果對方卡號存在
      u_data.user.user_card.money = u_data.user.user_card.money - money #自己的money減
      print("您的餘額為:",u_data.user.user_card.money)
      with open(f"data\\{user_cardId}.txt","wb") as file_w:
       pickle.dump(u_data,file_w)

      with open(f"data\\{cardId}.txt","rb") as file_r1:  #根據對方的卡號進行查詢對方的資料
       u_data1 = pickle.load(file_r1)
       with open(f"data\\{cardId}.txt","wb") as file_w1:
        u_data1.user.user_card.money = u_data1.user.user_card.money + money  #對方money加
        pickle.dump(u_data1,file_w1)
        print("轉賬成功")
       break
     else:
      print("該使用者不存在")
      break

# transfer_accounts()

def select_user(user_cardId): # 方法7:查詢餘額
 if user_login(user_cardId):
  with open(f"data\\{user_cardId}.txt","rb") as file_r:
   u_data = pickle.load(file_r)
   print("您的餘額為:",u_data.user.user_card.money)
# select_user()

def update_password(user_cardId): # 方法8:修改密碼
 if user_login(user_cardId):
  while True:
   pw1=input("請輸入新密碼:")
   pw2=input("請再次輸入密碼:")
   if pw1==pw2:
    with open(f"data\\{user_cardId}.txt","rb") as file_r:
     u_data = pickle.load(file_r)
     u_data.user.user_card.password=pw1
    with open(f"data\\{user_cardId}.txt",file_w)
     break

   else:
    print("兩次密碼不相同")
    continue

test2用來呼叫test1中的函式

import test1
import os
T =True
while True:
 user_cardId=input("請輸入您的賬號,退出請按0,註冊請按1:\n")
 if os.path.exists(f"data\\{user_cardId}.txt"):
  true=True
  while true:
   x = input("[2]查詢餘額 [3]取款 [4]存錢 [5]轉賬 [6]修改密碼 [7]退出系統\n"
      "請選擇需要的操作輸入對應的數字:"
   if x=="2":  #鍵盤輸入預設是str型別
    test1.select_user(user_cardId)
    continue
   elif x=="3":
    test1.withdraw_money(user_cardId)
    continue

   elif x=="4":
    test1.save_money(user_cardId)
    continue
   elif x=="5":
    test1.transfer_accounts(user_cardId)
    continue
   elif x=="6":
    test1.update_password(user_cardId)
    continue
   elif x=="7":
    true=False
   else:
    print("沒有對應操作")
    continue
 elif user_cardId=="0":
  print("歡迎再次使用")
  break
 elif user_cardId=="1":
  test1.create_user()
  continue

 else :
  print("沒有該賬戶")
  T=True
  while T:
   num = input("需要註冊賬號請按1,退出註冊服務請按0:")
   if num =="1":
    test1.create_user()
   elif num =="0":
    print("歡迎再次使用")
    T =False
    break
   else:
    print("沒有對應操作")
    continue
  break

更多學習資料請關注專題《管理系統開發》。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。