最近在学习Python,便利用业余时间开发了一个模拟ATM抢银行的小程序,不废话,直接上程序

#!/usr/bin/env python

#coding=utf-8

# Name: AtmCard.py

__author__ = 'kumikoda'

import pickle

import sys

import time

import hashlib

import os

def main():

'''打印功能信息列表,并提供用户输入接口再进行具体项目操作'''

cardNum = login('id')

if cardNum == False:

sys.exit()

while True:

wecome = raw_input("""欢迎使用本银行信用卡中心! 请输入如下功能对应的数字.

功能如下:

1. 第一次使用卡,请对卡进行初始化操作(重要).

2. AMT现金取款

3. 购物、消费等刷卡消费

4. 信用卡还款

5. 退出

Please input(1/2/3/4/5):""").split()

if len(wecome) == 0:

continue

number = wecome[0]

if number == '1':

init()

continue

elif number == '2':

draw_money(cardNum)

elif number == '3':

buy(cardNum)

elif number == '4':

repayment(cardNum)

elif number == '5':

print "Exit, Good Bye!"

sys.exit()

else:

print "你输入的数字不在功能列表内,请重新输入."

continue

def login(number=None):

'''用户登录验证'''

with open('F:\Python\Balance_tab','rb') as f:  # 读取文件并将数据放入元组

for line in f:

keys = line.split()[1]

print keys

vlues = line.split()[2]

print vlues

con = 0

while True:

CardNum = raw_input("\033[32;1m请输入您的信用卡卡号:")

if CardNum == keys:

UserPwd = raw_input("\033[32;1m请输入你的登录密码:")

md5 = hashlib.md5()

md5.update(UserPwd)

UserPwd = md5.hexdigest()

print md5.hexdigest()

if UserPwd == vlues:

print "登录成功."

if number == "id":

return CardNum

else:

return True

else:

con = con + 1

print "输入的密码或者用户名有误,请重新输入,[Error %s]" % con

if con == 3:

print "输入的密码错误三次."

return False

else:

continue

else:

print "没有找到你输入的卡号,请重新输入."

continue

def init():

'''新卡初始化(1.额度加载 2.设置修改卡密码 3. 添加记账日志格式头部)'''

money = []

with open('F:\Python\Balance_tab','rb') as f:

m = f.read().split()[-1]

money.append(m)

temp_log(Tlist=money, content='dump')

print "Temp money load OK."

initDlist = ['账号' + '时间' + '\t', '摘要' + '\t', '消费金额' + '\t', '手续费' + '\n']

day_log(initDlist)

print "Day log write OK."

def draw_money(cardNum):

'''取现功能'''

while True:

input_money = raw_input("欢迎使用本中心自助取款ATM系统,请输入本次取款金额:")

if len(input_money.split()) == 0:

continue

userinfo = raw_input("取现需收取%5的手续费,确认是否取现[Y/n]:")

if userinfo == "Y" or userinfo == "y":

## load总金额,并计算输出

t1 = temp_log(content='load')

money = float(t1[0])

fee = float(input_money) * 0.05  # 手续费

draw = float(input_money) + fee  # 本次取款额+手续费

if draw >= money:

print "账户余额不足,请重新输入取款金额."

continue

else:

total = money - draw      # 账户余额 - 本次取款额

print "您本次取现金额为: RMB% s 账户可取现总金额为: RMB% s" %(input_money, total)

## dump 消费后总金额,到文件内保存

totals = []

totals.append(total)

temp_log(Tlist=totals, content='dump')

## 写入日志文件

drawtime = time.strftime("%Y-%m-%d_%H:%M:%S", time.localtime())  # 获取当前日期

Dlist = [cardNum + '\t', drawtime + '\t', 'draw money' + '\t', '-' + input_money + '\t', '-' + str(fee) + '\n']

day_log(Dlist)

scont = raw_input("您是否继续取现:[Y/n]")

if scont == "Y" or scont == "y":

continue

elif scont == "N" or scont == "n":

print "Exit!"

break

elif userinfo == "N" or userinfo == "n":

print "Exit!"

sys.exit()

else:

print "你输入[Y/n]按回车键确认:"

continue

def buy(cardId):

'''购物/消费等'''

user_Money = int(temp_log(content='load')[0])

while True:

list = {1: ['Iphone 6s', '5000'], 2: ['MacBook', '15000'], 3: ['Tea', '550'], 4: ['Vegetables', '450'], 5: ['coffee', '250']}

print "购物清单:"

for x, y in list.items():

z = ' '.join(y)

print x, z

yn_list = raw_input("Do you need to buy [Y/n] or add shoping list [S] Enter:")

if yn_list == "Y" or yn_list == "y":

user_input = raw_input("请输入你要购买的商品名称对应的编号:")

k = int(user_input)

if len(user_input) == 0:

print "你没有输入任何商品的名称,请重新输入."

continue

amount = int(list[k][1])   # 取字典中key对应的商品价格

if user_Money > amount:

user_Money = user_Money - amount

print "You need to pay RMB%s totally." % amount

print "你的账户余额为: RMB%s" % user_Money

## 消费写入日志文件

drawtime = time.strftime("%Y-%m-%d_%H:%M:%S", time.localtime())

defname = sys._getframe().f_code.co_name

Dlist = [cardId + '\t', drawtime + '\t', defname + ':' + list[k][0] + '\t', '-' + str(amount) + '\t', '0' + '\n']

day_log(Dlist)

## 将消费后金额写入temp文件

tmp_Money = []

tmp_Money.append(user_Money)

temp_log(Tlist=tmp_Money, content='dump')

elif user_Money

print "你的账户余额为: RMB%s" % user_Money

print "你的账户余额不足已支付本次购物,你可以尝试选择其他商品!"

continue

if (user_Money  0):

print "由于你的账户余额已低于购物清单任何物品单价,系统自动退出购物,请充值后再来购买."

sys.exit()

elif yn_list == "N" or yn_list == "n":

print "You input %s, exit buy!" % yn_list

#sys.exit()

break

elif yn_list == "S" or yn_list == "s":

while True:

shop_id = raw_input("请输入ID号,注意ID号不能重复:")

shop_m = raw_input("请输入商品名称和价格,中间已单个空格.")

list[shop_id] = shop_m

print "成功添加商品到货架."

print list

s_input = raw_input("是否继续添加[Y/n]:")

if s_input == "Y" or s_input == "y":

continue

else:

print "Exit, 退出商品添加."

break

else:

print "You input Other string, please again!"

continue

def day_log(Dlist):

'''日记账、每月账单导出功能'''

with open("log.txt", 'a') as df:

df.writelines(Dlist)

def temp_log(Tlist=None, content="load"):

'''总金额临时记录文件'''

try:

if content == "load":

loadput = open('temp.txt', 'r')

loaddata = pickle.load(loadput)

loadput.close()

return loaddata

elif content == "dump":

output = open('temp.txt', 'wb')

pickle.dump(Tlist, output, protocol=2)

output.close()

elif content == "loads":

data = pickle.loads(Tlist)

return data

else:

print "参数错误,重新输入."

except Exception, e:

print e

def repayment(cardID):

'''信用卡还款接口'''

try:

while True:

# 获取初始额度

with open('F:\Python\Balance_tab','rb') as f:

s = int(bf.read().split()[-1])

# 截止还款日获取卡内余额

balance = temp_log(content='load')[0]

repay = s - balance

if repay == 0:

print "您本月已还款,无需还款."

print "Exit, repayment."

break

else:

print "您本月需要还款金额为: ¥%s" % repay

h_input = raw_input("确认是否还款,请输入[Y/n]:")

if h_input == "Y" or h_input == "y":

amount_in = raw_input("请输入您本次还款金额:")

if float(amount_in) > repay:

print "您输入的还款额超过本月消费金额,请重新输入."

continue

else:

dumppay = float(amount_in) + balance

# dump到temp文件

dpay = [dumppay]

temp_log(Tlist=dpay, content='dump')

print "还款成功."

# 记录到流水日志

paytime = time.strftime("%Y-%m-%d_%H:%M:%S", time.localtime())

repadyLog = [cardID + '\t', paytime + '\t', "repayment" + '\t', '+' + amount_in + '\t', '0' + '\n']

day_log(repadyLog)

elif h_input == "N" or h_input == "n":

print "Exit, repayment system."

break

else:

print "Please input again."

continue

except Exception, e:

print e

if __name__ == '__main__':

main()

python快递分拣小程序_利用Python开发的ATM小程序相关推荐

  1. python连接linux堡垒机_利用Python Paramiko开发linux堡垒机

    1.Paramiko模块下的demo.py程序 前面利用Python中的Paramiko模块可以进行SSH的连接,以及用来传送文件(SFTP),但是无论是哪一种方式,连接都是短暂的,并非是长连的,即一 ...

  2. python计算器程序_利用Python代码编写计算器小程序

    1 importtkinter2 importtkinter.messagebox3 importmath4 classJSQ:5 6 7 def __init__(self):8 #创建主界面 9 ...

  3. python怎么重复程序_利用Python程序完成ABAQUS中的一些重复性操作

    对于建立过大型的ABAQUS分析模型的同学们,肯定会面对繁琐的重复性建模过程.比如对上百个点施加集中力,比如建立几百个耦合约束.这些重复性操作,如果使用cae操作的话,不仅费时,而且极其容易出错. 利 ...

  4. 钉钉python 自动发消息软件_利用Python自动发送钉钉数据消息,一个简单的上手小项目...

    现在大部分公司都使用钉钉作为内部的主要沟通工具,钉钉消息基本都上都能快速有效的被阅读,打开率会比邮件高上不少.所以准备使用钉钉来播报平台每日的成交额,并附上一些鼓励的话和图片.起到一个激励团队的作用 ...

  5. python测速程序_利用Python对网站进行测速

    利用python可以编写的用于测试网站访问速率的代码,实现原理是输出打开某url的时间,并计算出访问100次的平均时间,最大时间和最小时间等等.根据时间的变化判断网站速度. 完整代码:import u ...

  6. python用渐变色画圆_利用python控制Autocad:pyautocad方式

    发现pyautocad模块:可以用python控制autocad的包.今天把文档中的重点内容摘录出来,以后绘图.计算大工程量.或者识别施工图的时候时候也许可以用到. 一.连接cad pyautocad ...

  7. 利用python从网页查找数据_利用Python模拟淘宝的搜索过程并对数据进行可视化分析...

    数据挖掘入门与实战 公众号: datadw 本文讲述如何利用Python模拟淘宝的搜索过程并对搜索结果进行初步的数据可视化分析. 搜索过程的模拟:淘宝的搜索页面有两种形式, 一种形式是, 2019/2 ...

  8. python用什么处理文件_利用Python如何快速处理文件

    利用Python如何快速处理文件 我之前要合并将近1000个CSV表格 每个表格共370列,约360行不等,列名相同 三个方案瞬间浮现在我眼前: 1.Ctrl C + Ctrl V--可以睡公司了: ...

  9. python乘法符号手写_利用Python自动生成小学生加减乘除口算考试题卷,不再为手写算术题烦恼!...

    还在为给孩子抄各种各样的口算题而烦恼?孩子上小学一年级之后,加减乘除的口算就要开始练习了,老师肯定会让家长出题.所以我们当家长的,要提前准备一下,就利用Python开发了一套自动生成小学生口算题的小应 ...

  10. python二元函数如何编写_利用python实现PSO算法优化二元函数

    python实现PSO算法优化二元函数,具体代码如下所示: import numpy as np import random import matplotlib.pyplot as plt from ...

最新文章

  1. php实战第二十一天
  2. Android init.rc文件解析过程详解(一)
  3. Markdown的常用语法
  4. rostcm6情感分析案例分析_卷积情感分析
  5. SQL 使用总结一( 规范、基础)
  6. 每天生成 45 亿字符的 GPT-3,真能取代人工?
  7. volley6--CacheDispatcher从缓存中获取数据
  8. 如何删除尾随换行符?
  9. Android反编译与防止反编译
  10. 最新 PMP 考试真题概要及答案分析(中文版)(1)
  11. 宏函数比普通函数效率高
  12. 公众号排名优化技巧分享
  13. 网卡在linux系统下的驱动怎么安装,RedHat Linux系统如何安装无线网卡驱动
  14. 微信群发可以分组吗?群组标签分组设置
  15. oracle存储过程报ORA-20000的错误
  16. PyTorch—计算机视觉目标检测 mmdetection
  17. System/360 大型机差点毁了 IBM !
  18. static关键字是什么意思?java中是否可以覆盖一个private方法或者static方法
  19. 地平线与百丽国际达成战略合作 将联合打造智慧零售跨界合作标杆
  20. 华为2016开发者大赛:赢的不仅仅是百万元奖金

热门文章

  1. SQL必知必会-约束
  2. 计算机实训教学论文,计算机实训教学探索论文
  3. java 浏览器 excel导出excel_使用Java导出Excel表格并由浏览器直接下载——基于POI框架...
  4. 摄像头分辨率怎么调整_网络监控摄像头怎么选择 网络监控摄像头选择方法【介绍】...
  5. MogDB/openGauss 手动部署(非OM工具)单机、主备、主备级联架构
  6. 一次执行truncate触发ORA-02266解决过程
  7. 想提高运维效率,那就把MySQL数据库部署到Kubernetes 集群中
  8. 云小课 | MRS基础入门之HDFS组件介绍
  9. 从五大结构体,带你掌握鸿蒙轻内核动态内存Dynamic Memory
  10. makefile:带你了解一种常用于GNU gcc编译的工具语言