Python ATM功能實(shí)現(xiàn)代碼實(shí)例
編寫ATM程序?qū)崿F(xiàn)下述功能,數(shù)據(jù)來(lái)源于文件db.txt
1、充值功能:用戶輸入充值錢數(shù),db.txt中該賬號(hào)錢數(shù)完成修改
2、轉(zhuǎn)賬功能:用戶A向用戶B轉(zhuǎn)賬1000元,db.txt中完成用戶A賬號(hào)減錢,用戶B賬號(hào)加錢
3、提現(xiàn)功能:用戶輸入提現(xiàn)金額,db.txt中該賬號(hào)錢數(shù)減少
4、查詢余額功能:輸入賬號(hào)查詢余額
登錄功能
用戶登錄成功后,內(nèi)存中記錄下該狀態(tài),上述功能以當(dāng)前登錄狀態(tài)為準(zhǔn),必須先登錄才能操作
代碼如下
import os
user_staus = {'username': None}
def ad_credit(username, amount):
"""
充值功能
:param username:
:param amount:
:return:
"""
if user_staus['username'] is None:
login()
with open('db.txt', 'rt', encoding='utf-8')as f1, \
open('db.txt.swap', 'wt', encoding='utf-8')as f2:
while True:
cont = f1.readline()
if len(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
轉(zhuǎn)賬功能
:param user_out:
:param user_in:
:param amount:
:return:
'''
if user_staus['username'] is None:
login()
with open('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('用戶不存在')
return
if user_in not in userinfo:
print('收款方不存在')
return
if 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('轉(zhuǎn)賬成功,已成功從{}向{}匯款{}'.format(user_out, user_in, amount))
elif userinfo[user_out] < amount:
print('余額不足')
return
for 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):
'''
提現(xiàn)功能
:param username:
:param amount:
:return:
'''
if user_staus['username'] is None:
login()
with open('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('用戶不存在')
return
if username in userinfo and userinfo[username] >= int(amount):
userinfo[username] -= int(amount)
print('已從余額中取出{},現(xiàn)余額為{}'.format(amount, userinfo[username]))
elif userinfo[username] < amount:
print('余額不足,提現(xiàn)失敗')
return
for 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()
with open('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('用戶不存在')
return
if username in userinfo:
print('當(dāng)前余額為:{}'.format(userinfo[username]))
def login():
username = input('輸入用戶名')
userpassword = input('輸入密碼')
with open('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('已成功登出')
return
login()
tag = True
while tag:
cmd = input('''
請(qǐng)輸入你想使用的功能序號(hào)
1:充值
2:轉(zhuǎn)賬
3:提現(xiàn)
4:查詢余額
0:登出
''')
if cmd == '1':
username = input('輸入用戶名:')
amount = input('輸入充值金額:')
ad_credit(username, amount)
elif cmd == '2':
user_out = input('請(qǐng)輸入轉(zhuǎn)賬方:')
user_in = input('請(qǐng)輸入接收方:')
amount = input('輸入轉(zhuǎn)賬金額:')
transfer(user_out, user_in, amount)
elif cmd == '3':
username = input('輸入用戶名:')
amount = input('輸入提現(xiàn)金額')
cashon(username, amount)
elif cmd == '4':
username = input('輸入用戶名:')
check(username)
elif cmd == '0':
logout()
tag = False
else:
print('請(qǐng)正確輸入序號(hào)')
以下是模擬結(jié)果
'''
/Users/chenfeng/PycharmProjects/ATM/venv/bin/python /Users/chenfeng/PycharmProjects/ATM/main.py
輸入用戶名xilou
輸入密碼666
登陸成功請(qǐng)輸入你想使用的功能序號(hào)
1:充值
2:轉(zhuǎn)賬
3:提現(xiàn)
4:查詢余額
0:登出
1
輸入用戶名:xilou
輸入充值金額:200
充值成功,xilou的余額為700請(qǐng)輸入你想使用的功能序號(hào)
1:充值
2:轉(zhuǎn)賬
3:提現(xiàn)
4:查詢余額
0:登出
2
請(qǐng)輸入轉(zhuǎn)賬方:xilou
請(qǐng)輸入接收方:heiren
輸入轉(zhuǎn)賬金額:200
轉(zhuǎn)賬成功,已成功從xilou向heiren匯款200請(qǐng)輸入你想使用的功能序號(hào)
1:充值
2:轉(zhuǎn)賬
3:提現(xiàn)
4:查詢余額
0:登出
3
輸入用戶名:xilou
輸入提現(xiàn)金額100
已從余額中取出100,現(xiàn)余額為400請(qǐng)輸入你想使用的功能序號(hào)
1:充值
2:轉(zhuǎn)賬
3:提現(xiàn)
4:查詢余額
0:登出
4
輸入用戶名:xilou
當(dāng)前余額為:400請(qǐng)輸入你想使用的功能序號(hào)
1:充值
2:轉(zhuǎn)賬
3:提現(xiàn)
4:查詢余額
0:登出
0
已成功登出Process finished with exit code 0
'''以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python實(shí)現(xiàn)ATM系統(tǒng)
- python pyheatmap包繪制熱力圖
- python繪制熱力圖heatmap
- Python實(shí)現(xiàn)鼠標(biāo)自動(dòng)在屏幕上隨機(jī)移動(dòng)功能
- Python 實(shí)現(xiàn)網(wǎng)課實(shí)時(shí)監(jiān)控自動(dòng)簽到、打卡功能
- python3 實(shí)現(xiàn)口罩抽簽的功能
- Python 3.8 新功能來(lái)一波(大部分人都不知道)
- python爬蟲開發(fā)之使用python爬蟲庫(kù)requests,urllib與今日頭條搜索功能爬取搜索內(nèi)容實(shí)例
相關(guān)文章
Python企業(yè)編碼生成系統(tǒng)之系統(tǒng)主要函數(shù)設(shè)計(jì)詳解
這篇文章主要介紹了Python企業(yè)編碼生成系統(tǒng)之系統(tǒng)主要函數(shù)設(shè)計(jì),涉及目錄操作、文件讀寫、驗(yàn)證判斷、編碼輸出等功能實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-07-07
Python輸入圓半徑,計(jì)算圓周長(zhǎng)和面積的實(shí)現(xiàn)方式
這篇文章主要介紹了Python輸入圓半徑,計(jì)算圓周長(zhǎng)和面積的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
tensorflow使用range_input_producer多線程讀取數(shù)據(jù)實(shí)例
今天小編就為大家分享一篇tensorflow使用range_input_producer多線程讀取數(shù)據(jù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
python Multiprocessing.Pool進(jìn)程池模塊詳解
multiprocessing模塊提供了一個(gè)Process類來(lái)代表一個(gè)進(jìn)程對(duì)象,multiprocessing模塊像線程一樣管理進(jìn)程,這個(gè)是multiprocessing的核心,它與threading很相似,對(duì)多核CPU的利用率會(huì)比threading好的多2022-10-10
python實(shí)現(xiàn)Excel文件轉(zhuǎn)換為TXT文件
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)Excel文件轉(zhuǎn)換為TXT文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04

