python快递分拣小程序_利用Python开发的ATM小程序
最近在学习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小程序相关推荐
- python连接linux堡垒机_利用Python Paramiko开发linux堡垒机
1.Paramiko模块下的demo.py程序 前面利用Python中的Paramiko模块可以进行SSH的连接,以及用来传送文件(SFTP),但是无论是哪一种方式,连接都是短暂的,并非是长连的,即一 ...
- python计算器程序_利用Python代码编写计算器小程序
1 importtkinter2 importtkinter.messagebox3 importmath4 classJSQ:5 6 7 def __init__(self):8 #创建主界面 9 ...
- python怎么重复程序_利用Python程序完成ABAQUS中的一些重复性操作
对于建立过大型的ABAQUS分析模型的同学们,肯定会面对繁琐的重复性建模过程.比如对上百个点施加集中力,比如建立几百个耦合约束.这些重复性操作,如果使用cae操作的话,不仅费时,而且极其容易出错. 利 ...
- 钉钉python 自动发消息软件_利用Python自动发送钉钉数据消息,一个简单的上手小项目...
现在大部分公司都使用钉钉作为内部的主要沟通工具,钉钉消息基本都上都能快速有效的被阅读,打开率会比邮件高上不少.所以准备使用钉钉来播报平台每日的成交额,并附上一些鼓励的话和图片.起到一个激励团队的作用 ...
- python测速程序_利用Python对网站进行测速
利用python可以编写的用于测试网站访问速率的代码,实现原理是输出打开某url的时间,并计算出访问100次的平均时间,最大时间和最小时间等等.根据时间的变化判断网站速度. 完整代码:import u ...
- python用渐变色画圆_利用python控制Autocad:pyautocad方式
发现pyautocad模块:可以用python控制autocad的包.今天把文档中的重点内容摘录出来,以后绘图.计算大工程量.或者识别施工图的时候时候也许可以用到. 一.连接cad pyautocad ...
- 利用python从网页查找数据_利用Python模拟淘宝的搜索过程并对数据进行可视化分析...
数据挖掘入门与实战 公众号: datadw 本文讲述如何利用Python模拟淘宝的搜索过程并对搜索结果进行初步的数据可视化分析. 搜索过程的模拟:淘宝的搜索页面有两种形式, 一种形式是, 2019/2 ...
- python用什么处理文件_利用Python如何快速处理文件
利用Python如何快速处理文件 我之前要合并将近1000个CSV表格 每个表格共370列,约360行不等,列名相同 三个方案瞬间浮现在我眼前: 1.Ctrl C + Ctrl V--可以睡公司了: ...
- python乘法符号手写_利用Python自动生成小学生加减乘除口算考试题卷,不再为手写算术题烦恼!...
还在为给孩子抄各种各样的口算题而烦恼?孩子上小学一年级之后,加减乘除的口算就要开始练习了,老师肯定会让家长出题.所以我们当家长的,要提前准备一下,就利用Python开发了一套自动生成小学生口算题的小应 ...
- python二元函数如何编写_利用python实现PSO算法优化二元函数
python实现PSO算法优化二元函数,具体代码如下所示: import numpy as np import random import matplotlib.pyplot as plt from ...
最新文章
- php实战第二十一天
- Android init.rc文件解析过程详解(一)
- Markdown的常用语法
- rostcm6情感分析案例分析_卷积情感分析
- SQL 使用总结一( 规范、基础)
- 每天生成 45 亿字符的 GPT-3,真能取代人工?
- volley6--CacheDispatcher从缓存中获取数据
- 如何删除尾随换行符?
- Android反编译与防止反编译
- 最新 PMP 考试真题概要及答案分析(中文版)(1)
- 宏函数比普通函数效率高
- 公众号排名优化技巧分享
- 网卡在linux系统下的驱动怎么安装,RedHat Linux系统如何安装无线网卡驱动
- 微信群发可以分组吗?群组标签分组设置
- oracle存储过程报ORA-20000的错误
- PyTorch—计算机视觉目标检测 mmdetection
- System/360 大型机差点毁了 IBM !
- static关键字是什么意思?java中是否可以覆盖一个private方法或者static方法
- 地平线与百丽国际达成战略合作 将联合打造智慧零售跨界合作标杆
- 华为2016开发者大赛:赢的不仅仅是百万元奖金
热门文章
- SQL必知必会-约束
- 计算机实训教学论文,计算机实训教学探索论文
- java 浏览器 excel导出excel_使用Java导出Excel表格并由浏览器直接下载——基于POI框架...
- 摄像头分辨率怎么调整_网络监控摄像头怎么选择 网络监控摄像头选择方法【介绍】...
- MogDB/openGauss 手动部署(非OM工具)单机、主备、主备级联架构
- 一次执行truncate触发ORA-02266解决过程
- 想提高运维效率,那就把MySQL数据库部署到Kubernetes 集群中
- 云小课 | MRS基础入门之HDFS组件介绍
- 从五大结构体,带你掌握鸿蒙轻内核动态内存Dynamic Memory
- makefile:带你了解一种常用于GNU gcc编译的工具语言