⽤python写atm⾃动取款_Python实现atm机的功能主要还是参考⽹上内容,⾃⼰做了修改。虽然代码有⼩bug,但是不影响学习和测试。
功能:
1.额度:8000
2.可以提现,⼿续费5%
3.每⽉最后⼀天出账单,写⼊⽂件
4.记录每⽉⽇常消费流⽔
5.提供还款接⼝
1.atm的脚本[root@python atm]# cat atm.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
Date:2017-03-23
Author:Bob
'''
import os
import time
import pickle
import readline #解决退格键和上下键引起的乱码,需要安装readline和readline-devel包
#定义账单,商品和购物车
Bill = {}
products = {}
shoplist = []
#define Bill function, used to record billing details(account/time/describe/money).
def Bill(Account,Time,Description,RMB):
Bill = {"Account":Account,"Time":Time,"Description":Description,"RMB":RMB}
#⽤pickle模块把账单信息存⼊到bill⽂件中去
pickle.dump(Bill,open("bill","a"))
#购物功能
def shop():
print '\033[;32mWelcome to shopping!\n\033[0m'
with open('') as f:
for line adlines():
print '{}'.format(line.strip())
with open('') as f:
for line adlines():
line = line.strip()
commodity = line.split()[0]
price = line.split()[1]
products[commodity] = price
choice = raw_input("\n\033[;36mPlease enter what you want to buy,if you want back,you can enter\033[0m \033[;31mback\033[0m:").strip()
if len(choice) == 0:
continue
elif choice == 'back':
list()
#如果有这个商品,就判断商品价格,如果商品价格⼤于余额,就提⽰余额不⾜
if products.has_key(choice):
#从userinfo⽂件中读取并反序列化
remaining = pickle.load(open('userinfo','rb'))
if int(products[choice]) > remaining[accountAuth][2]:
print 'In your card remaining sum already insufficiency, please prompt sufficient value!'
else:
while 1:
#把购买的商品追加到购物车
shoplist.append(choice)
#计算余额,余额就是总⾦额减去购买的商品价格
new_remaining = int(remaining[accountAuth][2]) - int(products[choice])
userInfo[accountAuth][2] = int(new_remaining)
#把余额信息序列化并存到userinfo⽂件中
pickle.dump(userInfo,open("userinfo","wb"))
#把购买的记录和账单写到Bill⽂件中
Bill(accountAuth,time.strftime("%Y-%m-%d %H:%M:%S"),choice,"-%d" % int(products[choice]))
#打印消费的⾦额和剩余⾦额
print "\033[;32mConsumption is %r Money is %r\033[0m" % (products[choice],new_remaining)
#打印购物车的商品
print "\033[;33mThe shopping list %s \033[0m" % shoplist
else:
print 'You choose {} is not in the shoplist!'.format(choice)
shop()
#查询余额功能
def query_money():
userInfo = pickle.load(open('userinfo','rb'))
totalmoney = userInfo[accountAuth][1]
remaining = userInfo[accountAuth][2]
print 'Your total money is {}, remaining money is \033[1;31m{}\033[0m!'.format(totalmoney, remaining)
#存钱功能
def save_money():
while 1:
save_desc = raw_input("Please describe save money the details:").strip()
if len(save_desc) == 0:
continue
try:
save_money = int(raw_input("Please save the money:"))
except ValueError:
print "\033[;31mYou entered must be number.\033[0m"
save_money()
if save_money % 100 != 0:
print 'You must enter an integer of 100!'import pickle
continue
userInfo = pickle.load(open('userinfo', 'rb'))
remaining = int(userInfo[accountAuth][2]) + save_money
userInfo[accountAuth][2] = remaining
pickle.dump(userInfo, open('userinfo', 'wb'))
print 'Your total money is %s, your remaining is \033[;31m%s\033[0m!' %(userInfo[accountAuth][1], userInfo[accountAuth][2])
Bill(accountAuth,time.strftime("%Y-%m-%d %H:%M:%S"),save_desc,"+%d" % float(save_money))
next = raw_input("1.continue \n2.return \n3.exit \nPlease select: ").strip()
if next == '1':
continue
elif next == '2':
list()
elif next == '3':
exit()
else:
print 'Please enter the correct content!'
#取钱功能
def draw_money():
while 1:
draw_desc = raw_input("Please describe draw money the details:").strip()
if len(draw_desc) == 0:
continue
try:
draw_money = int(raw_input("Please draw the money:"))
except ValueError:
print "\033[;31mYou entered must be number.\033[0m"
draw_money()
if draw_money % 100 != 0:
print 'You must enter an integer of 100!'
continue
userInfo = pickle.load(open('userinfo', 'rb'))
#There are bugs here!
if draw_money > int(userInfo[accountAuth][2]):
print '\033[;31mYour remaining is insufficient!\033[0m'
list()
userInfo = pickle.load(open('userinfo', 'rb'))
remaining = int(userInfo[accountAuth][2]) - draw_money - draw_money * 0.05
userInfo[accountAuth][2] = remaining
pickle.dump(userInfo, open('userinfo', 'wb'))
print 'Your total money is %s, your remaining is \033[;31m%s\033[0m!' %(userInfo[accountAuth][1], userInfo[accountAuth][2])
Bill(accountAuth,time.strftime("%Y-%m-%d %H:%M:%S"),draw_desc,"+%d" % float(draw_money))
next = raw_input("1.continue \n2.return \n3.exit \nPlease select: ").strip()
if next == '1':
continue
elif next == '2':
list()
elif next == '3':
exit()
else:
print 'Please enter the correct content!'
#转账功能,和上⾯的逻辑基本⼀样
def transfer_money():
while 1:
userInfo = pickle.load(open('userinfo', 'rb'))
transfer_desc = raw_input("Please describe transfer money: ").strip()
if len(transfer_desc) == 0:
continue
d_account = raw_input("Please input transfer account: ").strip()
if len(d_account) == 0:
continue
if userInfo.has_key(d_account) is False:
print "\033[;31mThis account does not exist\033[0m"
transfer_money()
d_money = int(raw_input("Please input transfer amount money: "))
if d_money % 100 != 0:
print "\033[;31mDeposit amount must be 100 integer times\033[0m"
continue
if d_money > int(userInfo[accountAuth][2]):
print "\033[;31mYour balance is insufficient\033[0m"
continue
userInfo[accountAuth][2] = int(userInfo[accountAuth][2]) - d_money - d_money * 0.10
userInfo[d_account][2] = int(userInfo[d_account][2]) + d_money
pickle.dump(userInfo,open('userinfo', 'wb'))
print "\033[;32mYour credit is %r,Your balance is %r\033[0m" % (userInfo[accountAuth][1],userInfo[accountAuth][2])
Bill(accountAuth,time.strftime("%Y-%m-%d %H:%M:%S"),transfer_desc,"-%d" % (userInfo[accountAuth][2] - d_money -d_money * 0.10))
next = raw_input("1.continue \n2.return \n3.exit \nPlease select: ").strip()