Pythonは実際の銀行システムを実装しています

この記事の例では、参考のために銀行の実際の戦闘システムを実装するためのpythonの特定のコードを共有しています。具体的な内容は次のとおりです。

最初にソースコードを添付します。

│admin.py管理者インターフェース
│alluser.txtはユーザー情報を保存します
│atm.py銀行の各部の運営方法(入出金等)
│card.pyはカードクラスを定義します
│main.pyメインプログラムwhileTrue
│user.pyユーザークラス

main.pyのソースコード

"""
人
クラス名:ユーザー
属性:名前IDカード番号電話番号カード
動作:

カード
クラス名:カード
プロパティ:カード番号パスワード残高
動作:

ATM
クラス名:ATM
属性:ユーザー辞書
動作:アカウントの開設、引き出しの確認、送金のデポジット、パスワードの変更、ロック、復号化、カードの再発行、アカウントのキャンセル、終了

管理者
クラス名:管理者
属性:
動作:管理者インターフェイス管理者検証システム機能インターフェイス

"""
import os
import pickle

import admin
from atm import ATM

def main():
 # 管理者オブジェクト
 admin1 = admin.Admin()

 # 管理者ブート
 admin1.printAdminView()if admin1.adminOption():return-1

 # ATMオブジェクト
 filepath = os.path.join(os.getcwd(),"alluser.txt")
 f =open(filepath,"rb")
 allUsers = pickle.load(f)
 f.close()
 atm =ATM(allUsers)while True:
 admin1.printFunctionView()
 # ユーザーアクションを待っています
 option =input("操作を入力してください:")if option =="1" or option =="アカウントを開く":
 atm.creatUser()
 elif option =="2" or option =="お問い合わせ":
 atm.searchUserInfo()
 elif option =="3" or option =="撤退":
 atm.withdrawals()
 elif option =="4" or option =="預り金":
 atm.saveMoney()
 elif option =="5" or option =="転送":
 atm.transferMoney()
 elif option =="6" or option =="変化する":
 atm.changePasswd()
 elif option =="7" or option =="ロック":
 atm.lockUser()
 elif option =="8" or option =="ロックを解除する":
 atm.unlockUser()
 elif option =="9" or option =="カードを交換してください":
 atm.newCard()
 elif option =="0" or option =="アカウントのキャンセル":
 atm.killUser()
 elif option =="t" or option =="脱落":if not admin1.adminOption():
 # 現在のシステムのユーザー情報をファイルに保存します
 f =open(filepath,"wb")
 pickle.dump(atm.allUsers, f,2)
 f.close()return-1else:print("指示が間違っています。再入力してください。 !")

 admin.timeFlush()if __name__ =='__main__':main()

admin.pyのソースコード

import time

def timeFlush():
 sum =2 #カウントダウン時間を設定する
 timeflush =0.25 #画面の更新間隔を設定する
 for i inrange(0,int(sum / timeflush)):
 list =["\", "|", "/", "—"]
 index = i %4print("\r操作は成功しました!お待ちください{} ".format(list[index]), end="")
 time.sleep(timeflush)classAdmin(object):
 admin ="1"
 passwd ="1"

 def printAdminView(self):print("*****************************************************************")print("* *")print("* *")print("*csdnbankへのログインへようこそ*")print("* *")print("* *")print("*****************************************************************")

 def printFunctionView(self):print("\r*****************************************************************")print("*アカウントを開く(1)お問い合わせ(2) *")print("*撤退(3)預り金(4) *")print("*転送(5)変化する(6) *")print("*ロック(7)ロックを解除する(8) *")print("*カードを交換してください(9)アカウントのキャンセル(0) *")print("*脱落(t) *")print("*******************************************************************")

 def adminOption(self):
 inputAdmin =input("管理者アカウントを入力してください:")if self.admin != inputAdmin:print("アカウント番号が間違って入力されています! !")return-1
 inputPasswd =input("管理者パスワードを入力してください:")if self.passwd != inputPasswd:print("パスワードが間違っています! !")return-1

 # アカウントのパスワードが正しいことを意味します! !
 timeFlush()return0

user.pyのソースコード

classUser(object):
 def __init__(self, name, idCard, phone, card):
 self.name = name
 self.idCard = idCard
 self.phone = phone
 self.card = card

card.pyのソースコード

classCard(object):
 def __init__(self, cardId, cardPasswd, cardMoney):
 self.cardId = cardId
 self.cardPasswd = cardPasswd
 self.cardMoney = cardMoney
 self.cardLock = False

atm.pyのソースコード

import random
from card import Card
from user import User
classATM(object):
def __init__(self, allUsers):
self.allUsers = allUsers
# アカウントを開く
def creatUser(self):
# キーと値のペアのペアをユーザー辞書に追加します(カード番号--ユーザー)
name =input("あなたの名前を入力してください:")
idCard =input("IDカード番号を入力してください:")
phone =input("電話番号を入力してください:")
prestoreMoney =int(input("事前に保存された金額を入力してください:"))if prestoreMoney <0:print("事前に保存された金額が間違っています! !口座開設に失敗しました")return-1
onePasswd =input("パスワードを設定してください:")
# パスワードを照合します
if not self.checkPasswd(onePasswd):print("パスワードが間違っています! !口座開設に失敗しました")return-1
# ランダムなカード番号を生成する
cardId = self.randomCardId()
# カード情報を生成する
card =Card(cardId, onePasswd, prestoreMoney)
# ユーザー情報を生成する
user =User(name, idCard, phone, card)
# 辞書に保存
self.allUsers[cardId]= user
print("あなたのカード番号は%s,カード番号を覚えておいてください!!"% cardId)
# お問い合わせ
def searchUserInfo(self):
cardNum =input("カード番号を入力してください:")
# カード番号が存在することを確認します
user = self.allUsers.get(cardNum)if not user:print("カード番号がありません! !クエリに失敗しました")return-1if user.card.cardLock:print("カードがロックされました! !ロックを解除してから他の操作を行ってください!")return-1
# パスワードを照合します
if not self.checkPasswd(user.card.cardPasswd):print("パスワードが間違っています! !カードがロックされました! !ロックを解除してから他の操作を行ってください!")
user.card.cardLock = True
return-1print("口座番号:%sバランス:%d"%(user.card.cardId, user.card.cardMoney))
# 撤退
def withdrawals(self):
cardNum =input("カード番号を入力してください:")
# カード番号が存在することを確認します
user = self.allUsers.get(cardNum)if not user:print("カード番号がありません! !クエリに失敗しました")return-1if user.card.cardLock:print("カードがロックされました! !ロックを解除してから他の操作を行ってください!")return-1
# パスワードを照合します
if not self.checkPasswd(user.card.cardPasswd):print("パスワードが間違っています! !カードがロックされました! !ロックを解除してから他の操作を行ってください!")
user.card.cardLock = True
return-1
# このステップでは、カード番号情報が正しく、引き出し操作が行われます。
theMoney =int(input("引き出す必要のある金額を入力してください。"))if theMoney   user.card.cardMoney:print("残高不足! !")return-1
elif theMoney <0:print("入力した金額が正しくありません!!")else:
user.card.cardMoney -= theMoney
print("成功した撤退! !バランスは次のとおりです。%d"% user.card.cardMoney)
# 預り金
def saveMoney(self):
cardNum =input("カード番号を入力してください:")
# カード番号が存在することを確認します
user = self.allUsers.get(cardNum)if not user:print("カード番号がありません! !クエリに失敗しました")return-1if user.card.cardLock:print("カードがロックされました! !ロックを解除してから他の操作を行ってください!")return-1
# パスワードを照合します
if not self.checkPasswd(user.card.cardPasswd):print("パスワードが間違っています! !カードがロックされました! !ロックを解除してから他の操作を行ってください!")
user.card.cardLock = True
return-1
# このステップでは、カード番号情報が正しく、デポジット操作が行われます。
theMoney =int(input("デポジットする必要のある金額を入力してください。"))if theMoney <0:print("入力した金額が正しくありません!!")else:
user.card.cardMoney += theMoney
print("入金成功! !バランスは次のとおりです。%d"% user.card.cardMoney)
# 転送
def transferMoney(self):
cardNum =input("カード番号を入力してください:")
# カード番号が存在することを確認します
user = self.allUsers.get(cardNum)if not user:print("カード番号がありません! !クエリに失敗しました")return-1if user.card.cardLock:print("カードがロックされました! !ロックを解除してから他の操作を行ってください!")return-1
# パスワードを照合します
if not self.checkPasswd(user.card.cardPasswd):print("パスワードが間違っています! !カードがロックされました! !ロックを解除してから他の操作を行ってください!")
user.card.cardLock = True
return-1
# ここでは、カード番号情報が正しいことと、転送操作について説明します。
theOtherCardId =input("転送する必要のあるカード番号を入力してください。")
# カード番号が存在することを確認します
otheruser = self.allUsers.get(theOtherCardId)if not otheruser:print("カード番号がありません! !転送に失敗しました")return-1if otheruser.card.cardLock:print("カードがロックされました! !")return-1
theOtherCardName =input("転送する必要のある人の名前を入力してください。")
# 転送者の名前が正しいことを確認します
if otheruser.name != theOtherCardName:print("転送者の名前が間違って入力されている")return-1print("あなたのアカウントは%■あなたのバランスは%d"%(user.card.cardId, user.card.cardMoney))
# 転送を開始します
theMoney =int(input("送金する必要のある金額を入力してください。"))if theMoney <0:print("入力した金額が正しくありません!!")else:
user.card.cardMoney -= theMoney
otheruser.card.cardMoney += theMoney
print("転送は成功しました! !あなたのバランスは%d"% user.card.cardMoney)return-1
# 変化する
def changePasswd(self):
cardNum =input("カード番号を入力してください:")
# カード番号が存在することを確認します
user = self.allUsers.get(cardNum)if not user:print("カード番号がありません! !クエリに失敗しました")return-1if user.card.cardLock:print("カードがロックされました! !ロックを解除してから他の操作を行ってください!")return-1
# パスワードを照合します
if not self.checkPasswd(user.card.cardPasswd):print("パスワードが間違っています! !カードがロックされました! !ロックを解除してから他の操作を行ってください!")
user.card.cardLock = True
return-1
# パスワードを変更しましょう
newPasswd =input("新しいパスワードを入力してください:")if newPasswd == user.card.cardPasswd:print("古いパスワードと新しいパスワードを同じにすることはできません。 !操作に失敗しました")return-1
# パスワードを照合します
if not self.checkPasswd(newPasswd):print("パスワードが間違っています! !")return-1
user.card.cardPasswd = newPasswd
print("パスワードのリセットが完了しました。 !パスワードを覚えておいてください")
# ロック
def lockUser(self):
cardNum =input("カード番号を入力してください:")
# カード番号が存在することを確認します
user = self.allUsers.get(cardNum)if not user:print("カード番号がありません! !入力エラー")return-1if user.card.cardLock:print("カードがロックされました! !他の機能を使用する前にロックを解除してください")return-1
# パスワードを照合します
if not self.checkPasswd(user.card.cardPasswd):print("パスワードが間違っています! !ロックに失敗しました")return-1
tempIdCard =input("IDカード番号を入力してください")if tempIdCard != user.idCard:print("ID入力エラー! !ロックに失敗しました")return-1
# この手順に進むと、情報の入力が成功し、ロックが開始されます。
user.card.cardLock = True
print("正常にロックされました")
# ロックを解除する
def unlockUser(self):
cardNum =input("カード番号を入力してください:")
# カード番号が存在することを確認します
user = self.allUsers.get(cardNum)if not user:print("カード番号がありません! !入力エラー")return-1if not user.card.cardLock:print("カードはロックされていません! !ロックを解除する必要はありません")return-1
# パスワードを照合します
if not self.checkPasswd(user.card.cardPasswd):print("パスワードが間違っています! !ロックに失敗しました")return-1
tempIdCard =input("IDカード番号を入力してください")if tempIdCard != user.idCard:print("ID入力エラー! !ロックに失敗しました")return-1
# この手順に進むと、情報が正常に入力され、ロック解除が開始されたことを示します。
user.card.cardLock = False
print("正常にロック解除されました")
# カードを交換してください
def newCard(self):
cardNum =input("カード番号を入力してください:")
# カード番号が存在することを確認します
user = self.allUsers.get(cardNum)if not user:print("カード番号がありません! !クエリに失敗しました")return-1if user.card.cardLock:print("カードがロックされました! !ロックを解除してから他の操作を行ってください!")return-1
# パスワードを照合します
if not self.checkPasswd(user.card.cardPasswd):print("パスワードが間違っています! !カードがロックされました! !ロックを解除してから他の操作を行ってください!")
user.card.cardLock = True
return-1
CardName =input("あなたの名前を入力してください:")
# 名前が正しいことを確認します
if user.name != CardName:print("名前が間違って入力されています! !")return-1
useridCard =input("IDカード番号を入力してください:")
# IDが正しいことを確認します
if user.idCard != useridCard:print("ID番号の入力が間違っています! !")return-1
# この手順に進むと、情報が正しいことがわかります。以下はカードの交換操作です。カード番号のみが変更され、その他の情報は変更されません。
newIdCard= self.randomCardId()
self.allUsers[newIdCard]= self.allUsers.pop(user.card.cardId)
user.card.cardId = newIdCard
print("新しいカード番号は次のとおりです。%■覚えておいてください! !"% user.card.cardId)
# アカウントのキャンセル
def killUser(self):
cardNum =input("カード番号を入力してください:")
# カード番号が存在することを確認します
user = self.allUsers.get(cardNum)if not user:print("カード番号がありません! !クエリに失敗しました")return-1if user.card.cardLock:print("カードがロックされました! !ロックを解除してから他の操作を行ってください!")return-1
# パスワードを照合します
if not self.checkPasswd(user.card.cardPasswd):print("パスワードが間違っています! !カードがロックされました! !ロックを解除してから他の操作を行ってください!")
user.card.cardLock = True
return-1
CardName =input("あなたの名前を入力してください:")
# 名前が正しいことを確認します
if user.name != CardName:print("名前が間違って入力されています! !")return-1
useridCard =input("IDカード番号を入力してください:")
# IDが正しいことを確認します
if user.idCard != useridCard:print("ID番号の入力が間違っています! !")return-1
answer =input("アカウントをキャンセルしてもよろしいですか?決定する(1)キャンセル(2)")if answer =="1" or answer =="決定する":
del self.allUsers[cardNum]print("アカウントがキャンセルされました")return-1
elif answer =="2" or answer =="キャンセル":print("キャンセル成功!!")return-1else:print("入力エラー! !")return-1
# パスワードを照合します
def checkPasswd(self, realPasswd):for i inrange(3):
tempPasswd =input("パスワードをもう一度入力してください。")if tempPasswd == realPasswd:return True
return False
def randomCardId(self):while True:
str =""for i inrange(6):
# ランダムに数値を生成する
ch =chr(random.randrange(ord("0"),ord("9")+1))
str += ch
# 繰り返すかどうかを決定する
if not self.allUsers.get(str):return str

alluser.txtソースコード

�}q X 123456qcuser
User
q)�q}q(X nameqX 1qX idCardqhX phoneqhX cardq ccard
Card
q
) �q }q(X cardIdq
hX
cardPasswdqhX cardMoneyqKX cardLockq�ububs.

ピクルスライブラリはユーザー情報(辞書)を永続的に保存するために使用されるため、読み取りと書き込みのために開いたときに文字化けします。最初の行の123456はカード番号で、他のすべての情報は1です。pycharmでこのallUsersを変更しようとしないでください。 txtファイルを入力しないと、プログラムを起動できないというバグが発生します。作者は文字化け現象を改善する方法がわかりません。読者が最適化できることを願っています。

alluser.txtを実行できない状況が発生した場合:以下をお読みください:

ピクルスライブラリのおかげで、最初はこのファイルを読むつもりでした。プログラムはスムーズに読まれましたが、プログラムはクールではありませんでした。したがって、ピクルスライブラリで認識できるソースコードをalluser.txtに含める必要があります。 alluser.txtコードが原因でpycharmをコピーして貼り付けると、pycharmは自動的にutf-8またはその他に変換されます。

ピクルスライブラリが最初に読み取らないように、最初にalluser.txtを削除して、空の辞書を作成する必要があります。最初にアカウントを開いてからプログラムを終了します。新しいalluser.txtファイルが自動的に作成され、作成したばかりのユーザー情報が保存されます。すべてがtxtファイルに保存されるため、永続的な保存の目的を達成するために再度復元できます

filepath = os.path.join(os.getcwd(),"alluser.txt")
# 前のものをコメントアウトして、プログラムが読み取れないようにします
# f =open(filepath,"rb")
# allUsers = pickle.load(f)
# f.close()
# 新しい空の辞書を作成する
allUsers ={}
atm =ATM(allUsers)

次に、アカウントを開き、最後に終了すると、新しいalluser.txtファイルが自動的に作成されます。

filepath = os.path.join(os.getcwd(),"alluser.txt")
f =open(filepath,"rb")
allUsers = pickle.load(f)
f.close()
# その後、復元します
# allUsers ={}
atm =ATM(allUsers)

了解しました

動作結果:

その他の教材については、「管理システム開発」のトピックに注意してください。

以上が本稿の内容ですので、皆様のご勉強に役立てていただければ幸いです。

Recommended Posts

Pythonは実際の銀行システムを実装しています
Pythonは駐車場管理システムを実現
Pythonは車の管理システムを実装しています
Pythonは実店舗のゲームを実装しています
Pythonは学生のパフォーマンス評価システムを実装しています
Pythonがメール機能を実装する方法
Pythonは単にスネークゲームを実装します
Python3はシングルトンデザインパターンを実装しています
Pythonは最も急な降下方法を実装します
Pythonがタイマー機能を実装する方法
Pythonは航空機戦争プロジェクトを実装します
Pythonは分数シーケンスの合計を実装します
Pythonの基本的な実際の戦闘-年齢ゲームを推測する
pythonは勾配メソッドを実装しますpython最速の降下メソッド
python3は単に結合された設計パターンを実装します
2.1 Pythonインタープリター(pythonインタープリター)
Pythonは学生管理システムの開発を実現します
PythonはDoudizhuでカードのシャッフルを実装します
Pythonはスネークゲームのソースコードを実装しています
Pythonはシンプルな名刺管理システムを実装しています
Pythonはスーパーマリオを実装しています
Pythonはtic-tac-toeゲームを実装しています
Pythonはマンマシンゴバンを実装します
Pythonは画像スティッチングを実装しています
Pythonはスキャンツールを実装しています
Pythonの基盤を統合する(2)
Pythonはしきい値回帰を実装します
Pythonは地雷除去ゲームを実装しています
Pythonは電子辞書を実装しています
Pythonは推測ゲームを実装しています
Pythonは単純なタンクバトルを実装します
Python(7)の基盤を統合する
Pythonはudpチャットウィンドウを実装します
pythonはゲームという言葉を推測します
Python(6)の基盤を統合する
Pythonは推測ゲームを実装しています
Ubuntuは最新のPython3をインストールします。
Pythonはデジタル爆弾ゲームを実装しています
PythonはTCPファイル転送を実装します
Pythonは推測ゲームを実現します
Python拡張機能の違い
Pythonnumpyはローリングケースを実装します
OpenCVPythonはパズルゲームを実装しています
Pythonは単純なtic-tac-toeゲームを実装しています
Pythonはパスワード強度検証を実装します
Pythonはフェイスサインインシステムを実現します
Pythonはコードブロックフォールディングを実装します
Pythonはパノラマ画像スティッチングを実装しています
PythonはSMTPメール送信を実装します
Pythonは多次元配列ソートを実装しています
PythonがFTP機能を実装する方法
Pythonは平均シフトクラスタリングアルゴリズムを実装しています
Pythonは検証コード認識を実装します
Pythonは勾配降下法を実装しています
Pythonはテキストバージョンのminesweeperを実装しています
Pythonの基盤を統合する(3)
Pythonは画像スティッチング機能を実装しています