Python簡易銀行システム
17869 ワード
機能:口座開設、照会、引き出し、預金、振替、秘密変更、ロック解除、カード補充、口座販売、退出
簡単な説明:ユーザーは身分証明書番号で口座を開設して銀行カード番号を登録する必要があり、照会、預金引き出しなどの機能を実現することができる.このシステムは主にオブジェクト向けの方法を採用し,情報記憶方式はjsonモジュールを用いて記憶する.(データストレージはpickleモジュールも使用できます.宝くじシステムはすでに採用されています.このシステムはpickleモジュールではなく、jsonモジュールを採用しています.以下、jsonとpickleの長所と短所を簡単に紹介します.個人的な見解です)
システムの主関数:
説明:
1、このシステムがファイルの絶対パスを取得する方法はosモジュールを採用する(宝くじシステムは指定の方式で絶対パスを取得する)
2、データストレージ:
終了時には、書き込みデータ方式は「a」(追加)ではなく「w」である.
理由:終了時に書き込みデータを「a」(追加)にすると、プログラムを実行するたびにデータ量が倍増し、メモリがいっぱいになりやすい.
3、ファイル操作:
文の中で2つの方式を採用してファイルに対して操作を行って、1つはファイルを読み終わった後に自動的にファイルを閉じます(つまりwith方式で)、1つはファイルを読み終わった後に手動でファイルを閉じなければなりません
システムのメインインタフェースモジュール:
主にシステムインタフェースの表示を実現する.
システム機能モジュール:
主にシステムの口座開設、照会、引き出しなどの機能を実現する.
システム補助機能モジュール:
主にユーザー名、パスワード、身分証明書などの情報が正しいかどうかを検証するために使用されます.
ユーザー情報:
このモジュールは主にユーザーの情報を格納するために使用されます.
jsonモジュールで情報をディスクに書き込み、strで書き込むため、ユーザーモジュールと銀行カードモジュールでは「_str_」を採用する必要はありません.ユーザー情報および銀行カード情報を再ロードします.ユーザー情報または銀行カード情報を表示すると、ストレージファイルを直接開くことができます.リロード印刷の確認は不要です.△前回宝くじシステムはpickleモジュールを用いてデータを格納し、書き込み方式はバイナリ方式であったため、情報を調べる際には、情報の再ロードや印刷が必要であった.
jsonモジュールとpickleモジュールの比較
jsonモジュールの利点:書き込み情報はstr形式で書き込まれ、情報の書き込みが正しいかどうかを確認できる
jsonモジュールの欠点:データの読み書きが面倒です.オブジェクト情報を直接ファイルに書き込むことはできません.カスタムメソッドでオブジェクト情報をファイルに書き込む必要があります.
(次の方法では、オブジェクトを辞書に変換して書き込む、オブジェクト情報を読み取るときに辞書をオブジェクトに変換する)
pickleモジュールの利点:データの読み書きが便利
pickleモジュールの欠点:情報を書き込むと、情報が正しく書き込まれているかどうかを確認できません.情報を表示するには、データを再ロードして印刷する必要があります.
銀行カード情報:
このモジュールは主にユーザーの銀行カードの情報を格納するために使用されます.
簡単な説明:ユーザーは身分証明書番号で口座を開設して銀行カード番号を登録する必要があり、照会、預金引き出しなどの機能を実現することができる.このシステムは主にオブジェクト向けの方法を採用し,情報記憶方式はjsonモジュールを用いて記憶する.(データストレージはpickleモジュールも使用できます.宝くじシステムはすでに採用されています.このシステムはpickleモジュールではなく、jsonモジュールを採用しています.以下、jsonとpickleの長所と短所を簡単に紹介します.個人的な見解です)
システムの主関数:
説明:
1、このシステムがファイルの絶対パスを取得する方法はosモジュールを採用する(宝くじシステムは指定の方式で絶対パスを取得する)
2、データストレージ:
終了時には、書き込みデータ方式は「a」(追加)ではなく「w」である.
理由:終了時に書き込みデータを「a」(追加)にすると、プログラムを実行するたびにデータ量が倍増し、メモリがいっぱいになりやすい.
3、ファイル操作:
文の中で2つの方式を採用してファイルに対して操作を行って、1つはファイルを読み終わった後に自動的にファイルを閉じます(つまりwith方式で)、1つはファイルを読み終わった後に手動でファイルを閉じなければなりません
from amt import Amt
from admin import Admin
from card import Card
from uers import Uers
import os
import json
def Main():
admin = Admin()
allUserDict = {}
path = os.path.join(os.getcwd(), "allUers.txt")
with open(path,"r") as f:
for line in f.readlines():
dict1 = eval(line)
user = Uers.dict2obj(dict1)
allUserDict[user.bankCard.bankCardNum] = user
amt = Amt(allUserDict)
admin.printAdminView()
if admin.adminOption() == -1:
print(" ! ...".center(48,"*"))
return -1
while True:
admin.printSysFunctionView()
operation = input(" :".center(42," "))
if operation == "1":
print(" ".center(48,"*"))
amt.createUers()
elif operation == "2":
print(" ".center(48,"*"))
amt.query()
elif operation == "3":
print(" ".center(48,"*"))
amt.getMoney()
elif operation == "4":
print(" ".center(48,"*"))
amt.saveMoney()
elif operation == "5":
print(" ".center(48,"*"))
amt.transferMoney()
elif operation == "6":
print(" ".center(48,"*"))
amt.changePassword()
elif operation == "7":
print(" ".center(48,"*"))
amt.lockCard()
elif operation == "8":
print(" ".center(48,"*"))
amt.solutionCard()
elif operation == "9":
print(" ".center(48,"*"))
amt.repairCard()
elif operation == "0":
print(" ".center(48,"*"))
amt.destoryCard()
elif operation == "t":
print(" ".center(48,"*"))
close = admin.adminOption()
if close != -1:
print(" !".center(43,"*"))
f = open(path, "w", encoding="utf-8")
for key, value in allUserDict.items():
json.dump(value, f, default=Uers.obj2dict)
f.write("
")
f.close()
return -1
else:
print(" ! ...".center(33,"*"))
continue
else:
print(" ! ...".center(38,"*"))
return -1
if __name__ == "__main__":
Main()
システムのメインインタフェースモジュール:
主にシステムインタフェースの表示を実現する.
import time
class Admin(object):
def __init__(self):
self.admin = "1"
self.passwd = "1"
def printAdminView(self):
print("**************************************************")
print("* *")
print("* *")
print("* *")
print("* *")
print("* *")
print("* *")
print("**************************************************")
def printSysFunctionView(self):
print("**************************************************")
print("* (1) (2) *")
print("* (3) (4) *")
print("* (5) (6) *")
print("* (7) (8) *")
print("* (9) (0) *")
print("* (t) *")
print("**************************************************")
def adminOption(self):
inputAdmin = input(" :")
inputPasswd = input(" :")
if self.admin != inputAdmin or self.passwd != inputPasswd:
return -1
time.sleep(1)
return True
if __name__ == "__main__":
pass
システム機能モジュール:
主にシステムの口座開設、照会、引き出しなどの機能を実現する.
from card import Card
from uers import Uers
import check
class Amt(object):
def __init__(self, allUers):
self.allUers = allUers
def createUers(self):
name = input(" :").strip()
if not check.checkName(name):
return -1
identityCardNum = input(" :").strip()
if not check.checkIdentity(identityCardNum):
return -1
phoneNum = input(" :").strip()
if not check.checkPhone(phoneNum):
return -1
bankCardNum = check.getBankCardNum()
# ,
while True:
if self.allUers.get(bankCardNum) != None:
bankCardNum = check.getBankCardNum()
else:
break
prestoredMoney = int(input(" :"))
if not check.checkPrestoredMoney(prestoredMoney):
return -1
onePassword = input(" :").strip()
for x in range(2):
if not check.checkPassword(onePassword):
print(" !")
else:
break
else:
print(" ! ...")
return -1
# ,
card = Card(bankCardNum, onePassword, prestoredMoney)
# ,
uers = Uers(name, identityCardNum, phoneNum, card)
self.allUers[bankCardNum] = uers
print(" ! , :", bankCardNum)
def query(self):
bankCardNum = input(" :").strip()
cardPassword = input(" :").strip()
uers = self.allUers.get(bankCardNum)
if uers == None or uers.bankCard.bankCardPassword != cardPassword:
print(" !")
return -1
if uers.bankCard.bankCardLock:
print(" ! ...")
return -1
print(" :%s
:%d" % (uers.bankCard.bankCardNum, uers.bankCard.bankCardMoney))
def getMoney(self):
bankCardNum = input(" :").strip()
cardPassword = input(" :").strip()
uers = self.allUers.get(bankCardNum)
if uers == None or uers.bankCard.bankCardPassword != cardPassword:
print(" !")
return -1
if uers.bankCard.bankCardLock:
print(" ! ...")
return -1
money = int(input(" :"))
if uers.bankCard.bankCardMoney > money:
uers.bankCard.bankCardMoney -= money
else:
print(" !")
return -1
print(" :%s
:%d" % (uers.bankCard.bankCardNum, uers.bankCard.bankCardMoney))
def saveMoney(self):
bankCardNum = input(" :").strip()
cardPassword = input(" :").strip()
uers = self.allUers.get(bankCardNum)
if uers == None or uers.bankCard.bankCardPassword != cardPassword:
print(" !")
return -1
if uers.bankCard.bankCardLock:
print(" ! ...")
return -1
money = int(input(" :"))
uers.bankCard.bankCardMoney += money
print(" :%s
:%d" % (uers.bankCard.bankCardNum, uers.bankCard.bankCardMoney))
def transferMoney(self):
bankCardNum = input(" :").strip()
cardPassword = input(" :").strip()
uers = self.allUers.get(bankCardNum)
if uers == None or uers.bankCard.bankCardPassword != cardPassword:
print(" !")
return -1
if uers.bankCard.bankCardLock:
print(" ! ...")
return -1
receiveBankCardNum = input(" :").strip()
receiveUers = self.allUers.get(receiveBankCardNum)
if receiveUers == None:
print(" !!!")
return -1
transferMoney = int(input(" :"))
if transferMoney > uers.bankCard.bankCardMoney:
print(" ! ...")
return -1
uers.bankCard.bankCardMoney -= transferMoney
receiveUers.bankCard.bankCardMoney += transferMoney
print(" :%s
:%d" % (uers.bankCard.bankCardNum, uers.bankCard.bankCardMoney))
def changePassword(self):
bankCardNum = input(" :").strip()
cardPassword = input(" :").strip()
uers = self.allUers.get(bankCardNum)
if uers == None or uers.bankCard.bankCardPassword != cardPassword:
print(" !")
return -1
if uers.bankCard.bankCardLock:
print(" ! ...")
return -1
onePassword = input(" :").strip()
if not check.checkPassword(onePassword):
print(" ! ...")
return -1
uers.bankCard.bankCardPassword = onePassword
print(" ! !")
def lockCard(self):
bankCardNum = input(" :").strip()
cardPassword = input(" :").strip()
uers = self.allUers.get(bankCardNum)
if uers == None or uers.bankCard.bankCardPassword != cardPassword:
print(" !")
return -1
if uers.bankCard.bankCardLock:
print(" ! ...")
return -1
uers.bankCard.bankCardLock = 1
print(" :%s !" % uers.bankCard.bankCardNum)
def solutionCard(self):
bankCardNum = input(" :").strip()
cardPassword = input(" :").strip()
uers = self.allUers.get(bankCardNum)
if uers == None or uers.bankCard.bankCardPassword != cardPassword:
print(" !")
return -1
if not uers.bankCard.bankCardLock:
print(" ! !")
return -1
uers.bankCard.bankCardLock = 0
print(" :%s !" % uers.bankCard.bankCardNum)
def repairCard(self):
bankCardNum = input(" :").strip()
cardPassword = input(" :").strip()
uers = self.allUers.get(bankCardNum)
if uers == None or uers.bankCard.bankCardPassword != cardPassword:
print(" !")
return -1
if uers.bankCard.bankCardLock:
print(" ! ...")
return -1
#
newBankCardNum = check.getBankCardNum()
while True:
if self.allUers.get(newBankCardNum) != None:
newBankCardNum = check.getBankCardNum()
else:
break
print(" :%s" % newBankCardNum)
#
onePassword = input(" :").strip()
if not check.checkPassword(onePassword):
return -1
card = Card(newBankCardNum, onePassword, uers.bankCard.bankCardMoney)
newUser = Uers(uers.name, uers.identityCardNum, uers.phoneNum, card)
self.allUers[newBankCardNum] = newUser
print(" :%s :%d" % (newBankCardNum, newUser.bankCard.bankCardMoney))#newUser.bankCardNum.bankCardMoney))
self.allUers.pop(bankCardNum)
def destoryCard(self):
bankCardNum = input(" :").strip()
cardPassword = input(" :").strip()
uers = self.allUers.get(bankCardNum)
if uers == None or uers.bankCard.bankCardPassword != cardPassword:
print(" !")
return -1
if uers.bankCard.bankCardLock:
print(" ! ...")
return -1
destory = input(" ?【yes/no】").strip()
if destory == 'yes':
self.allUers.pop(bankCardNum)
print(" !")
return -1
else:
print(" !")
return -1
if __name__ == "__main__":
pass
システム補助機能モジュール:
主にユーザー名、パスワード、身分証明書などの情報が正しいかどうかを検証するために使用されます.
import random
#
def checkName(user):
if len(user) != 1:
print(" !")
return False
for x in user:
if x >= '0' and x <= '9' or x >= 'a' and x <= 'z' or x >= 'A' and x <= 'Z' or x == '_':
pass
else:
print(" !")
return False
return True
#
def checkIdentity(identity):
if len(identity) != 1:
print(" !")
return False
for x in identity:
if x >= '0' and x <= '9':
pass
else:
print(" !")
return False
return True
#
def checkPhone(identity):
if len(identity) != 1:
print(" !")
return False
for x in identity:
if x >= '0' and x <= '9':
pass
else:
print(" !")
return False
return True
#
def checkPrestoredMoney(money):
if money > 0:
return True
else:
print(" !")
return False
#
def checkPassword(password):
AgainPassword = input(" :").strip()
if password == AgainPassword:
return True
else:
return False
#
def getBankCardNum():
bankCardNum = ""
for i in range(6):
bankCardNum += chr(random.randrange(10) + 48)
return bankCardNum
if __name__ == "__main__":
pass
ユーザー情報:
このモジュールは主にユーザーの情報を格納するために使用されます.
jsonモジュールで情報をディスクに書き込み、strで書き込むため、ユーザーモジュールと銀行カードモジュールでは「_str_」を採用する必要はありません.ユーザー情報および銀行カード情報を再ロードします.ユーザー情報または銀行カード情報を表示すると、ストレージファイルを直接開くことができます.リロード印刷の確認は不要です.△前回宝くじシステムはpickleモジュールを用いてデータを格納し、書き込み方式はバイナリ方式であったため、情報を調べる際には、情報の再ロードや印刷が必要であった.
jsonモジュールとpickleモジュールの比較
jsonモジュールの利点:書き込み情報はstr形式で書き込まれ、情報の書き込みが正しいかどうかを確認できる
jsonモジュールの欠点:データの読み書きが面倒です.オブジェクト情報を直接ファイルに書き込むことはできません.カスタムメソッドでオブジェクト情報をファイルに書き込む必要があります.
(次の方法では、オブジェクトを辞書に変換して書き込む、オブジェクト情報を読み取るときに辞書をオブジェクトに変換する)
pickleモジュールの利点:データの読み書きが便利
pickleモジュールの欠点:情報を書き込むと、情報が正しく書き込まれているかどうかを確認できません.情報を表示するには、データを再ロードして印刷する必要があります.
from card import Card
class Uers(object):
def __init__(self, name, identityCardNum, phoneNum, bankCard):
self.name = name
self.identityCardNum = identityCardNum
self.phoneNum = phoneNum
self.bankCard = bankCard
# def __str__(self):
# return "%s-%s-%s-%s-%s-%d-%s" % (self.name, self.identityCardNum, self.phoneNum,
# self.bankCard.bankCardNum, self.bankCard.bankCardPassword,
# self.bankCard.bankCardMoney, self.bankCard.bankCardLock)
@staticmethod
def obj2dict(uers):
return {"name":uers.name, "identityCardNum":uers.identityCardNum,
"phoneNum":uers.phoneNum, "bankCard":{"bankCardNum": uers.bankCard.bankCardNum,
"bankCardPassword": uers.bankCard.bankCardPassword,"bankCardMoney": uers.bankCard.bankCardMoney,
"bankCardLock": uers.bankCard.bankCardLock}}
@staticmethod
def dict2obj(dict1):
return Uers(dict1.get("name"), dict1.get("identityCardNum"), dict1.get("phoneNum"),
Card(dict1["bankCard"]["bankCardNum"], dict1["bankCard"]["bankCardPassword"],
dict1["bankCard"]["bankCardMoney"], dict1["bankCard"]["bankCardLock"]))
if __name__ == "__main__":
pass
銀行カード情報:
このモジュールは主にユーザーの銀行カードの情報を格納するために使用されます.
#
class Card(object):
def __init__(self, bankCardNum, bankCardPassword, bankCardMoney, bankCardLock = 0):
self.bankCardNum = bankCardNum
self.bankCardPassword = bankCardPassword
self.bankCardMoney = bankCardMoney
self.bankCardLock = bankCardLock
# def __str__(self):
# return "%s-%s-%d-%s" % (self.bankCardNum, self.bankCardPassword, self.bankCardMoney, self.bankCardLock)
if __name__ == "__main__":
pass