Python:簡單銀行系統實現
阿新 • • 發佈:2018-12-30
1、admin.py 定義管理員資訊和主介面顯示
#!/usr/bin/env python # coding:UTF-8 """ @version: python3.x @author:曹新健 @contact: [email protected] @software: PyCharm @file: admin.py @time: 2018/9/11 10:14 """ import time class Admin(): def __init__(self,name,passwd): self.name = name self.__passwd = passwd self.__status = False def adminView(self): for i in range(4): print("".center(60,"*")) s1 = "歡迎光臨曹氏銀行" print(s1.center(60-len(s1),"*")) for i in range(4): print("".center(60,"*")) if self.__status: print("管理員被鎖定,請聯絡大神曹新健") return -1 name = input("請輸入管理員使用者名稱:") if name != self.name: print("使用者名稱輸入錯誤") return -1 if self.checkAdminPasswd() != 0: return -1 return 0 def adminAction(self): print("""************************************************************ ***************開戶(1)****************銷戶(2)*************** ***************查詢(3)****************轉賬(4)*************** ***************取款(5)****************存款(6)*************** ***************鎖定(7)****************解鎖(8)*************** ***************改密(9)****************補卡(0)*************** ************************退出 系統(q)************************ ************************************************************ """) def checkAdminPasswd(self): n = 0 while n <= 3: if n == 3: self.status = True print("輸入超過3次,管理員被鎖定,請聯絡大神曹新健") return -1 passwd = input("請輸入密碼:") if passwd != self.__passwd: print("密碼輸入錯誤,請重新輸入") n += 1 else: print("密碼驗證成功,請稍後") time.sleep(2) return 0 @property def passwd(self): return self.__passwd @passwd.setter def passwd(self,password): self.__passwd = password @property def status(self): return self.__status @status.setter def status(self, st): self.__status = st if __name__ == "__main__": admin = Admin("cxj","1") while True: admin.adminView()
2、card.py定義銀行卡資訊
#!/usr/bin/env python # coding:UTF-8 """ @version: python3.x @author:曹新健 @contact: [email protected] @software: PyCharm @file: card.py @time: 2018/9/11 15:02 """ import random class Card(): def __init__(self,id,balance): self.__id = id self.__balance = balance self.status = False @property def id(self): return self.__id @id.setter def id(self,id): self.__id = id @property def balance(self): return self.__balance @balance.setter def balance(self,balance): self.__balance = balance if __name__ == "__main__": card = Card(1000) print(card.id) print(card.balance)
3、user.py定義銀行賬戶資訊
#!/usr/bin/env python # coding:UTF-8 """ @version: python3.x @author:曹新健 @contact: [email protected] @software: PyCharm @file: user.py @time: 2018/9/11 14:54 """ class User(): def __init__(self,name,idCard,phone,passwd,card): self.__name = name self.__idCard = idCard self.phone = phone self.__passwd = passwd self.card = card @property def name(self): return self.__name @name.setter def name(self,name): self.__name = name @property def idCard(self): return self.__idCard @idCard.setter def idCard(self, idCard): self.__idCard = idCard @property def passwd(self): return self.__passwd @passwd.setter def passwd(self, passwd): if self.__passwd == passwd: raise UsersException("新密碼跟舊密碼一樣") else: self.__passwd = passwd class UsersException(Exception): pass
4、functions.py銀行功能邏輯實現
#!/usr/bin/env python
# coding:UTF-8
"""
@version: python3.x
@author:曹新健
@contact: [email protected]
@software: PyCharm
@file: functions.py
@time: 2018/9/11 11:01
"""
import pickle,os,random
from admin import Admin
from card import Card
from user import User,UsersException
pathAdmin = os.path.join(os.getcwd(), "admin.txt")
pathUser = os.path.join(os.getcwd(), "users.txt")
def rpickle(path):
if not os.path.exists(path):
with open(path,"w") as temp:
pass
with open(path,'rb') as f:
try:
info = pickle.load(f)
except EOFError as e:
info = ""
return info
def wpickle(objname,path):
if not os.path.exists(path):
with open(path,"w") as temp:
pass
with open(path,'wb') as f:
pickle.dump(objname,f)
def adminInit():
# print(pathAdmin)
adminInfo = rpickle(pathAdmin)
if adminInfo:
admin = adminInfo
# print(admin.status)
else:
admin = Admin("cxj", "1")
return admin
def adminClose(admin):
wpickle(admin, pathAdmin)
def randomId(users):
while True:
str1 = ""
for i in range(6):
ch = str((random.randrange(0, 10)))
str1 += ch
if not users.get(str1,""):
return str1
def openAccount(users):
name = input("請輸入您的姓名:")
idCard = input("請輸入您的身份證號:")
phone = input("請輸入您的電話號碼:")
passwd = input("請輸入賬號密碼:")
balance = int(input("請輸入您的金額:"))
id = randomId(users)
card = Card(id,balance)
user = User(name,idCard,phone,passwd,card)
users[id] = user
print("請牢記您的銀行卡號%s" %(id))
def userInit():
userInfo = rpickle(pathUser)
if userInfo:
users = userInfo
else:
users = {}
return users
def userClose(users):
wpickle(users, pathUser)
def getUser(users):
id = input("請輸入您的銀行卡號:")
if not users.get(id, ""):
print("您輸入的卡號不存在")
user = None
else:
user = users.get(id)
return user
def transferUser(users):
id = input("請輸入轉賬(對方)的銀行卡號:")
if not users.get(id, ""):
print("您輸入的卡號不存在")
user = None
else:
user = users.get(id)
return user
def changeMoney(user,res):
money = int(input("請輸入交易金額:"))
if money <= 0:
print("輸入金額有誤")
return 0
if res:
if money > user.card.balance:
print("餘額不足")
return 0
return money
def serchAccount(users):
user = getUser(users)
if not user:
return -1
if user.card.status:
print("賬戶被鎖定,請解鎖後再使用其他功能")
return -1
res = checkUserPasswd(user)
if not res:
print("您的賬戶名稱為%s,您的餘額為%s" % (user.name, user.card.balance))
def transferAccount(users):
user = getUser(users)
if not user:
return -1
if user.card.status:
print("賬戶被鎖定,請解鎖後再使用其他功能")
return -1
res = checkUserPasswd(user)
if not res:
transUser = transferUser(users)
if not transUser:
return -1
money = changeMoney(user,1)
if not money:
return -1
user.card.balance -= money
transUser.card.balance += money
print("交易成功")
def withdrawal(users):
user = getUser(users)
if not user:
return -1
if user.card.status:
print("賬戶被鎖定,請解鎖後再使用其他功能")
return -1
res = checkUserPasswd(user)
if not res:
money = changeMoney(user,1)
if not money:
return -1
user.card.balance -= money
print("交易成功")
def deposit(users):
user = getUser(users)
if not user:
return -1
if user.card.status:
print("賬戶被鎖定,請解鎖後再使用其他功能")
return -1
res = checkUserPasswd(user)
if not res:
money = changeMoney(user,0)
if not money:
return -1
user.card.balance += money
print("交易成功")
def delAccount(users):
user = getUser(users)
if not user:
return -1
if user.card.status:
print("賬戶被鎖定,請解鎖後再使用其他功能")
return -1
res = checkUserPasswd(user)
if not res:
users.pop(user.card.id)
print("賬戶刪除成功")
return 0
def lockAccount(users):
user = getUser(users)
if not user:
return -1
if user.card.status:
print("賬戶被鎖定,請解鎖後再使用其他功能")
return -1
checkUserPasswdLock(user)
def unlockAccount(users):
user = getUser(users)
if not user:
return -1
if not user.card.status:
print("賬戶不需要解鎖")
return -1
res = checkUserPasswd(user)
if not res:
user.card.status = False
print("賬戶解鎖成功!")
def changePasswd(users):
user = getUser(users)
if not user:
return -1
if user.card.status:
print("賬戶被鎖定,請解鎖後再使用其他功能")
return -1
res = checkUserPasswd(user)
if not res:
newPasswd = input("請輸入新密碼:")
try:
user.passwd = newPasswd
except UsersException as e:
print(e)
else:
print("密碼修改成功!")
def makeNewCard(users):
user = getUser(users)
if not user:
return -1
if user.card.status:
print("賬戶被鎖定,請解鎖後再使用其他功能")
return -1
res = checkUserPasswd(user)
if not res:
id = randomId(users)
userinfo = users[user.card.id]
users.pop(user.card.id)
users[id] = userinfo
users[id].card.id = id
print("補卡成功,請牢記您的銀行卡號%s" % (id))
def checkUserPasswd(user):
n = 0
while n <= 3:
if n == 3:
user.card.status = True
print("輸入超過3次,賬戶被鎖定,請解鎖後再使用其他功能")
return -1
passwd = input("請輸入您的賬戶密碼:")
if passwd != user.passwd:
print("密碼輸入錯誤,請重新輸入")
n += 1
else:
return 0
def checkUserPasswdLock(user):
n = 0
while n <= 3:
if n == 3:
print("輸入超過3次,賬戶鎖定失敗!")
return -1
passwd = input("請輸入您的賬戶密碼:")
if passwd != user.passwd:
print("密碼輸入錯誤,請重新輸入")
n += 1
else:
user.card.status = True
print("賬戶鎖定成功!")
return 0
5、bankManage.py 主程式
#!/usr/bin/env python
# coding:UTF-8
"""
@version: python3.x
@author:曹新健
@contact: [email protected]
@software: PyCharm
@file: bankManage.py
@time: 2018/9/11 9:57
"""
'''
管理員類:
名稱:Admin
屬性:name、passwd
方法:顯示管理員歡迎介面、顯示功能介面
銀行卡:
名稱:Card
屬性:id,balance
方法:生成卡號
取款機:
名稱:ATM
屬性:
方法:開戶、查詢、取款、轉賬、存款、改密、鎖定、解鎖、補卡、銷戶
使用者:
名稱:user
屬性:姓名、身份號、電話號、銀行卡
方法:
'''
import time,os
from admin import Admin
import functions
#users = {}
def run():
admin = functions.adminInit()
users = functions.userInit()
#print(users)
if admin.adminView():
functions.adminClose(admin)
functions.userClose(users)
return -1
while True:
admin.adminAction()
value = input("請選擇你要辦理的業務:")
if value == "1":
functions.openAccount(users)
functions.userClose(users)
elif value == "2":
functions.delAccount(users)
functions.userClose(users)
elif value == "3":
functions.serchAccount(users)
elif value == "4":
functions.transferAccount(users)
functions.userClose(users)
elif value == "5":
functions.withdrawal(users)
functions.userClose(users)
elif value == "6":
functions.deposit(users)
functions.userClose(users)
elif value == "7":
functions.lockAccount(users)
functions.userClose(users)
elif value == "8":
functions.unlockAccount(users)
functions.userClose(users)
elif value == "9":
functions.changePasswd(users)
functions.userClose(users)
elif value == "0":
functions.makeNewCard(users)
functions.userClose(users)
elif value == "q":
functions.adminClose(admin)
functions.userClose(users)
return -1
elif value == "m":
for user in users:
print(user)
else:
print("艾瑪,您的輸入小編實在不能理解,重新輸入吧")
if __name__ == "__main__":
run()