python面向物件—銀行作業系統
阿新 • • 發佈:2019-01-07
使用python面向物件寫銀行系統:
- 銀行卡類:卡號、金額、密碼、狀態
- 使用者類:名字、身份證、銀行卡
- 管理員類:賬號、密碼、登入頁面、選單介面、歡迎資訊
- 操作類:開戶、存款、查詢、取款、轉賬、鎖定、解鎖、改密、退出
- 新建一個專案,建議使用pycharm。
1,新建card.py 檔案,寫銀行卡類
# 銀行卡類 class Card: def __init__(self, cid, pwd): self.cid = cid # 卡號 self.pwd = pwd # 密碼 self.money = 0 # 金額 self.is_lock = False # 是否鎖定
2,User.py 檔案,使用者資訊類
import os import pickle # 使用者類 class User: def __init__(self, uid, name, card): self.uid = uid # 身份證 self.name = name # 姓名 self.card = card # 銀行卡 def __str__(self): return '姓名:{},身份證:{},卡號:{}'.format(self.name, self.uid, self.card.cid) # 將使用者資訊序列化儲存 @staticmethod def save_user(userinfo): pathname = os.path.join(os.getcwd(), 'userinfo.db') with open(pathname, 'wb') as fp: pickle.dump(userinfo, fp) # 從檔案中載入使用者資訊 @staticmethod def load_user(): pathname = os.path.join(os.getcwd(), 'userinfo.db') # 判斷是否存在 if os.path.exists(pathname): with open(pathname, 'rb') as fp: userinfo = pickle.load(fp) return userinfo return {}
3,新建admin.py檔案,寫銀行管理員類
# 管理員類 class Admin: def __init__(self, account='admin', password='123456'): self.account = account self.password = password # 顯示歡迎資訊 def welcome(self): print('*' * 30) print(' ' * 5 + '歡迎使用XX銀行管理系統') print('*' * 30) # 登入頁面 def login(self): account = input('請輸入賬號:') password = input('請輸入密碼:') if account == self.account and password == self.password: return True return False # 操作選單 def menu(self): print('*' * 30) print('開戶[1] 銷戶[2] 查詢[3] 存款[4]') print('取款[5] 轉賬[6] 改密[7] 鎖定[8]') print('解鎖[9] 退出[0] 顯示所有使用者[10]') print('*' * 30)
4 ,bank.py 檔案,銀行資訊操作類
from user import User
from admin import Admin
from operate import Operate
if __name__ == '__main__':
# 記錄管理員登入失敗次數,若達到3次則直接結束
count = 0
# 建立管理員物件
admin = Admin()
while True:
# 顯示歡迎頁面
admin.welcome()
# 登入檢查
ret = admin.login()
if ret:
# 記錄是否退出
is_quit = False
# 先從檔案中載入使用者資訊
userinfo = User.load_user()
# 建立操作物件
op = Operate(userinfo)
while True:
# 顯示操作選單
admin.menu()
# 獲取使用者的操作
num = int(input('請選擇操作:'))
if num == 0:
print('退出')
is_quit = True
break
elif num == 1:
op.new_user()
elif num == 2:
op.del_user()
elif num == 3:
op.query_money()
elif num == 4:
op.save_money()
elif num == 5:
op.get_money()
elif num == 6:
op.transfer_money()
elif num == 7:
op.change_pwd()
elif num == 8:
op.lock_user()
elif num == 9:
op.unlock_user()
elif num == 10:
op.show_users()
else:
print('操作代號有誤,請重新輸入')
if is_quit:
break
else:
print('賬戶或密碼有誤,登入失敗')
count += 1
if count >= 3:
print('錯誤已達上限,禁止登入')
break
print('OVER')
5,operate.py 檔案,使用者操作類
from user import User
from card import Card
from helper import Helper
# 操作類
class Operate:
def __init__(self, userinfo={}):
# 使用者存放所有的使用者資訊
self.userinfo = userinfo
# 開戶
def new_user(self):
name = input('請輸入姓名:')
uid = input('請輸入身份證:')
pwd = input('請輸入密碼:')
# 密碼加密
pwd = Helper.generate_password_hash(pwd)
# 生成隨機卡號
cid = Helper.generate_cid()
# 建立銀行卡
card = Card(cid, pwd)
# 建立使用者
user = User(uid, name, card)
# 儲存使用者資訊
self.userinfo[cid] = user
# 儲存使用者資訊到檔案
User.save_user(self.userinfo)
print('開戶成功')
# 銷戶
def del_user(self):
print('銷戶成功')
# 查詢
def query_money(self):
cid = input('請輸入您的卡號:')
user = self.userinfo.get(cid)
if user:
print('您的餘額為:', user.card.money)
else:
print('無效的卡號')
# 轉賬
def transfer_money(self):
cid = input('請輸入您的卡號:')
user = self.userinfo.get(cid)
if user:
dst_cid = input('請輸入對方卡號:')
dst_user = self.userinfo.get(dst_cid)
if dst_user:
money = float(input('請輸入轉賬金額:'))
# 判斷餘額是否充足
if user.card.money < money:
print('餘額不足,轉賬失敗')
return
pwd = input('請輸入密碼:')
if Helper.check_password_hash(pwd, user.card.pwd):
user.card.money -= money
dst_user.card.money += money
User.save_user(self.userinfo)
print('轉賬成功')
else:
print('密碼有誤,轉賬失敗')
else:
print('無效的卡號')
else:
print('無效的卡號')
# 存款
def save_money(self):
cid = input('請輸入您的卡號:')
user = self.userinfo.get(cid)
if user:
# 檢視使用者是否鎖定
if user.card.is_lock:
print('該卡已鎖定,請先去解鎖')
return
# 記錄密碼錯誤次數
count = 0
while count < 3:
pwd = input('請輸入密碼:')
if Helper.check_password_hash(pwd, user.card.pwd):
money = input('請輸入您的存款金額:')
user.card.money += float(money)
User.save_user(self.userinfo)
print('存款成功')
break
else:
count += 1
print('密碼有誤,請重新輸入')
else:
user.card.is_lock = True
User.save_user(self.userinfo)
print('密碼錯誤已達上限,該卡已鎖定')
else:
print('無效的卡號')
# 取款
def get_money(self):
print('取款成功')
# 改密
def change_pwd(self):
print('密碼修改成功')
# 鎖定
def lock_user(self):
print('使用者鎖定')
# 解鎖
def unlock_user(self):
cid = input('請輸入卡號:')
user = self.userinfo.get(cid)
if user:
user.card.is_lock = False
User.save_user(self.userinfo)
print('解鎖成功')
else:
print('無效的卡號')
# 顯示所有使用者資訊
def show_users(self):
for user in self.userinfo.values():
print(user)
6 ,helper.py 檔案,幫助檔案,寫生產隨機卡號、資訊資料儲存持久化
import hashlib
from random import randint
# 助手函式類
class Helper:
# 生成銀行卡號
@staticmethod
def generate_cid(length=8):
cid = ''
for i in range(length):
cid += str(randint(0, 9))
return cid
# 加密密碼
@staticmethod
def generate_password_hash(password):
# 建立加密物件
m = hashlib.md5()
# 設定加密字串
m.update(password.encode('utf-8'))
# 返回加密字串
return m.hexdigest()
# 檢驗密碼
@staticmethod
def check_password_hash(pwd, pwd_hash):
m = hashlib.md5()
m.update(pwd.encode('utf-8'))
return m.hexdigest() == pwd_hash
7,成果。專案執行後的效果
******************************
歡迎使用XX銀行管理系統
******************************
請輸入賬號:admin
請輸入密碼:123456
******************************
開戶[1] 銷戶[2] 查詢[3] 存款[4]
取款[5] 轉賬[6] 改密[7] 鎖定[8]
解鎖[9] 退出[0] 顯示所有使用者[10]
******************************
請選擇操作:1
請輸入姓名:tang
請輸入身份證:4109282018
請輸入密碼:654321
開戶成功
******************************
開戶[1] 銷戶[2] 查詢[3] 存款[4]
取款[5] 轉賬[6] 改密[7] 鎖定[8]
解鎖[9] 退出[0] 顯示所有使用者[10]
******************************
請選擇操作:10
姓名:tang,身份證:4109282018,卡號:50646598
******************************
開戶[1] 銷戶[2] 查詢[3] 存款[4]
取款[5] 轉賬[6] 改密[7] 鎖定[8]
解鎖[9] 退出[0] 顯示所有使用者[10]
******************************
請選擇操作:3
請輸入您的卡號:50646598
您的餘額為: 0
******************************
開戶[1] 銷戶[2] 查詢[3] 存款[4]
取款[5] 轉賬[6] 改密[7] 鎖定[8]
解鎖[9] 退出[0] 顯示所有使用者[10]
******************************
請選擇操作:4
請輸入您的卡號:50646598
請輸入密碼:654321
請輸入您的存款金額:800000
存款成功
******************************
開戶[1] 銷戶[2] 查詢[3] 存款[4]
取款[5] 轉賬[6] 改密[7] 鎖定[8]
解鎖[9] 退出[0] 顯示所有使用者[10]
******************************
請選擇操作:3
請輸入您的卡號:50646598
您的餘額為: 800000.0
******************************
開戶[1] 銷戶[2] 查詢[3] 存款[4]
取款[5] 轉賬[6] 改密[7] 鎖定[8]
解鎖[9] 退出[0] 顯示所有使用者[10]
******************************
請選擇操作:5
取款成功
******************************
開戶[1] 銷戶[2] 查詢[3] 存款[4]
取款[5] 轉賬[6] 改密[7] 鎖定[8]
解鎖[9] 退出[0] 顯示所有使用者[10]
******************************
請選擇操作:5
取款成功
******************************
開戶[1] 銷戶[2] 查詢[3] 存款[4]
取款[5] 轉賬[6] 改密[7] 鎖定[8]
解鎖[9] 退出[0] 顯示所有使用者[10]
******************************
請選擇操作:6
請輸入您的卡號:50646598
請輸入對方卡號:
無效的卡號
******************************
開戶[1] 銷戶[2] 查詢[3] 存款[4]
取款[5] 轉賬[6] 改密[7] 鎖定[8]
解鎖[9] 退出[0] 顯示所有使用者[10]
******************************
請選擇操作:1
請輸入姓名:xin
請輸入身份證:4109282017
請輸入密碼:111222
開戶成功
******************************
開戶[1] 銷戶[2] 查詢[3] 存款[4]
取款[5] 轉賬[6] 改密[7] 鎖定[8]
解鎖[9] 退出[0] 顯示所有使用者[10]
******************************
請選擇操作:10
姓名:tang,身份證:4109282018,卡號:50646598
姓名:xin,身份證:4109282017,卡號:28496879
******************************
開戶[1] 銷戶[2] 查詢[3] 存款[4]
取款[5] 轉賬[6] 改密[7] 鎖定[8]
解鎖[9] 退出[0] 顯示所有使用者[10]
******************************
請選擇操作:6
請輸入您的卡號:50646598
請輸入對方卡號:28496879
請輸入轉賬金額:500000
請輸入密碼:654321
轉賬成功
******************************
開戶[1] 銷戶[2] 查詢[3] 存款[4]
取款[5] 轉賬[6] 改密[7] 鎖定[8]
解鎖[9] 退出[0] 顯示所有使用者[10]
******************************
請選擇操作:3
請輸入您的卡號:28496879
您的餘額為: 500000.0
******************************
開戶[1] 銷戶[2] 查詢[3] 存款[4]
取款[5] 轉賬[6] 改密[7] 鎖定[8]
解鎖[9] 退出[0] 顯示所有使用者[10]
******************************
請選擇操作:0
退出
OVER