次の機能を実現するATMプログラムを作成します。データは、ファイルdb.txtから取得されます。
1、 リチャージ機能:ユーザーがリチャージ金額を入力すると、db.txtのアカウント金額が変更されます
2、 転送機能:ユーザーAがユーザーBに1,000元を転送し、ユーザーAのアカウントがdb.txtで削減され、ユーザーBのアカウントが追加されます。
3、 引き出し機能:ユーザーが引き出し額を入力すると、db.txtのアカウントの金額が減額されます
4、 残高照会機能:口座番号を入力して残高照会
ログイン機能
ユーザーが正常にログインすると、ステータスがメモリに記録されます。上記の機能は、現在のログインステータスの影響を受けます。操作するには、最初にログインする必要があります。
コードは以下のように表示されます
import os
user_staus ={'username': None}
def ad_credit(username, amount):"""
充電機能
: param username::param amount::return:"""
if user_staus['username'] is None:login()withopen('db.txt','rt', encoding='utf-8')as f1, \
open('db.txt.swap','wt', encoding='utf-8')as f2:while True:
cont = f1.readline()iflen(cont)==0:break
name, remain = cont.strip().split(':')if username in name:
remain =int(remain)+int(amount)
f2.write('{}:{}\n'.format(name, remain))print('再充電は成功しました、{}バランスは{}'.format(username, remain))else:
f2.write(cont)
os.remove('db.txt')
os.rename('db.txt.swap','db.txt')
def transfer(user_out, user_in, amount):'''3
伝達関数
: param user_out::param user_in::param amount::return:'''
if user_staus['username'] is None:login()withopen('db.txt','rt', encoding='utf-8')as f1, \
open('db.txt.swap','wt', encoding='utf-8')as f2:
userinfo ={}for line in f1:
name, remind = line.strip().split(':')
userinfo[name]=int(remind)if user_out not in userinfo:print('ユーザーは存在しません')returnif user_in not in userinfo:print('受取人は存在しません')returnif user_out in userinfo and user_in in userinfo:if userinfo[user_out]=int(amount):
userinfo[user_out]-=int(amount)
userinfo[user_in]+=int(amount)print('転送は成功し、{}に{}送金{}'.format(user_out, user_in, amount))
elif userinfo[user_out]< amount:print('残高不足')returnfor name, remind in userinfo.items():
f2.write('{}:{}\n'.format(name, remind))
os.remove('db.txt')
os.rename('db.txt.swap','db.txt')
def cashon(username, amount):'''
撤退機能
: param username::param amount::return:'''
if user_staus['username'] is None:login()withopen('db.txt','rt', encoding='utf-8')as f1, \
open('db.txt.swap','wt', encoding='utf-8')as f2:
userinfo ={}for line in f1:
name, remind = line.strip().split(':')
userinfo[name]=int(remind)if username not in userinfo:print('ユーザーは存在しません')returnif username in userinfo and userinfo[username]=int(amount):
userinfo[username]-=int(amount)print('バランスから撤退{}、現在の残高は{}'.format(amount, userinfo[username]))
elif userinfo[username]< amount:print('バランスが不十分で、引き出しに失敗しました')returnfor name, remind in userinfo.items():
f2.write('{}:{}\n'.format(name, remind))
os.remove('db.txt')
os.rename('db.txt.swap','db.txt')
def check(username):'''
バランスクエリ機能
: param username::return:'''
if user_staus['username'] is None:login()withopen('db.txt','rt', encoding='utf-8')as f:
userinfo ={}for line in f:
name, remind = line.strip().split(':')
userinfo[name]= remind
if username not in userinfo:print('ユーザーは存在しません')returnif username in userinfo:print('現在の残高は次のとおりです。{}'.format(userinfo[username]))
def login():
username =input('ユーザー名を入力して下さい')
userpassword =input('パスワードを入力する')withopen('login.txt','rt', encoding='utf-8')as login_f:
login ={}for line in login_f:
name, psd = line.strip().split(':')
login[name]= psd
if username in login:if login[username]== userpassword:print('着陸成功')
user_staus['username']= username
break
elif username not in login:print('ユーザー名は存在しません')return
def logout():
user_staus['username']= None
print('正常にサインアウトしました')returnlogin()
tag = True
while tag:
cmd =input('''
使用したい機能のシリアル番号を入力してください
1 :補充
2 :転送
3 :撤回
4 :バランスを確認する
0 :サインアウト
''') if cmd =='1':
username =input('ユーザ名を入力してください:')
amount =input('再充電量を入力します。')ad_credit(username, amount)
elif cmd =='2':
user_out =input('転送先を入力してください:')
user_in =input('受信者を入力してください:')
amount =input('送金金額を入力してください。')transfer(user_out, user_in, amount)
elif cmd =='3':
username =input('ユーザ名を入力してください:')
amount =input('引き出し額を入力してください')cashon(username, amount)
elif cmd =='4':
username =input('ユーザ名を入力してください:')check(username)
elif cmd =='0':logout()
tag = False
else:print('シリアル番号を正しく入力してください')
シミュレーション結果は以下のとおりです
”’
/Users/chenfeng/PycharmProjects/ATM/venv/bin/python /Users/chenfeng/PycharmProjects/ATM/main.py
ユーザー名xilouを入力してください
パスワード666を入力してください
着陸成功
使用したい機能のシリアル番号を入力してください
1 :補充
2 :転送
3 :撤回
4 :バランスを確認する
0 :サインアウト
1
ユーザー名を入力してください:xilou
再充電量を入力してください:200
再充電は成功し、xilouのバランスは700です。
使用したい機能のシリアル番号を入力してください
1 :補充
2 :転送
3 :撤回
4 :バランスを確認する
0 :サインアウト
2
転送パーティを入力してください:xilou
受信者を入力してください:heiren
送金金額を入力してください:200
転送は成功し、200はxilouからheirenに正常に転送されました
使用したい機能のシリアル番号を入力してください
1 :補充
2 :転送
3 :撤回
4 :バランスを確認する
0 :サインアウト
3
ユーザー名を入力してください:xilou
引き出し額100を入力してください
残高から100が引き落とされ、現在の残高は400です。
使用したい機能のシリアル番号を入力してください
1 :補充
2 :転送
3 :撤回
4 :バランスを確認する
0 :サインアウト
4
ユーザー名を入力してください:xilou
現在の残高は次のとおりです:400
使用したい機能のシリアル番号を入力してください
1 :補充
2 :転送
3 :撤回
4 :バランスを確認する
0 :サインアウト
0
正常にサインアウトしました
Process finished with exit code 0
「上記はこの記事の全内容です。皆さんの研究に役立つことを願っています。
Recommended Posts