python 练习4
题目为信用卡消费管理系统:
主程序:main.py
#!usr/bin/env python
# encoding: utf-8
import conf,sys,time,re,os
import json
import login
tmp_dic = {} def shopping_center(arg):
print('\033[32mWelcome into Credit card store!\033[0m')
while True:
for i,(k,v) in enumerate(conf.shop_list.items(),1):
print('%s.%s:%s'%(i,k,v))
N = int(input('Please select you want to buy goods(input r:return p:pay):').strip())
if N == 7:
print('\033[31myou will return main list!\033[0m')
time.sleep(1)
tmp_dic.clear()#返回后如果没有支付则清空购物车
break elif N in range(1,len(conf.shop_list)-1):
key = list(conf.shop_list.items())[N - 1][0]
value = list(conf.shop_list.items())[N - 1][1]
if key in tmp_dic.keys():
tmp_dic[key] = tmp_dic[key] + value
else:
tmp_dic[key] = value
print('\033[35mYour shopping cart is as follows:\033[0m')
for x,y in tmp_dic.items():
print('\033[35m%-5s:%s\033[0m'%(x,y))
elif N == 8:
print('\033[33mThe total order for you:%s\033[0m'%sum(tmp_dic.values()))
sum_values = sum(tmp_dic.values())
with open('account.json','r') as f:
acc = json.load(f)
if sum_values > acc[arg][2]:
print('对不起你的信用卡额度不足,请重新购买!!')
login.log_record(arg, '消费', sum_values, 'fail')
tmp_dic.clear()
break
else:
acc[arg][2] = acc[arg][2] - sum_values
acc[arg][3] = acc[arg][3] + sum_values
with open('account.json','w') as z:
json.dump(acc,z)
login.log_record(arg,'消费',sum_values,'success')
print('恭喜你购物成功即将返回主菜单!!')
time.sleep(1)
tmp_dic.clear()
break #信用卡管理
def card_center(name):
if name == 'admin':
print('欢迎%s进入信用卡管理系统'%name)
while True:
for index,i in enumerate(conf.ad_list,1):
print('%s.%s' %(index,i))
p = int(input('请选择你要的操作的编号:').strip())
with open('account.json', 'r+') as f:
acc = json.load(f)
if p == 1:#添加用户
key = input('请输入你的用户名:').strip()
pawd = input('请输入密码:').strip()
paws = input('请输入支付密码:').strip()
acc[key] = [pawd, paws, 15000,0, "unlock"]
with open('account.json', 'w') as x:
json.dump(acc,x)
print('用户%s已经添加成功额度为15000'%key) elif p == 2:#用户额度调整
n = input('你的账号:')
limit = int(input('请输入你要的额度:').strip())
if n in acc.keys():
acc[n][2] = limit
with open('account.json','w') as y:
json.dump(acc,y)
continue
elif p == 3:#冻结账户
freeze = input('请输入你要冻结的账户:').strip()
acc[freeze][3] = "lock"
with open('account.json', 'w') as z:
json.dump(acc, z)
print('账号%s已冻结'%freeze)
continue
elif p == 4:#解冻账户
unfreeze = input('请输入你要解冻的账户:')
acc[unfreeze][3] = "unlock"
with open('account.json','w') as g:
json.dump(acc,g)
print('账户%s已解冻'%unfreeze)
continue
elif p == 5:#用户操作查询
pass
continue
elif p == 6:#返回主菜单
break
else:#消费者信用卡管理系统
print('\033[34m欢迎进入消费者信用卡管理系统!\033[0m')
with open('account.json', 'r+') as e:
acc1 = json.load(e)
while True:
for l,i in enumerate(conf.customer_list,1):
print('%s.%s'%(l,i))
custom_in = int(input('请选择你需要的操作:').strip())
if custom_in == 1:
print('#' * 20)
print('账户:%s\n额度:%s\n待还款:%s' %(name,acc1[name][2],acc1[name][3]))
print('#' * 20)
continue
elif custom_in == 2:
print('你的还款额:%s'%acc1[name][3])
huank = int(input('你要还多少:').strip())
acc1[name][2] = acc1[name][2] + huank
acc1[name][3] = acc1[name][3] - huank
with open('account.json', 'w') as g:
json.dump(acc1, g)
print('恭喜你还款成功!')
continue
elif custom_in == 3:
qukuan = int(input('请输入你要取款的金额:').strip())
acc1[name][2] = acc1[name][2] - qukuan
acc1[name][3] = acc1[name][3] + qukuan
with open('account.json', 'w') as h:
json.dump(acc1, h)
continue
elif custom_in == 4:
print('你的消费记录如下')
ff = open('record.log','r')
for line in ff:
if name in line:
print(line)
ff.close()
print('-'*20)
continue
elif custom_in == 5:
while True:
pa = input('请输入你要转账的账户:').strip()
pc = int(input('请输入你要转账的金额:').strip())
if pa not in acc1.keys():
print('你输入的账户不存在,请重新输入!')
continue
elif pc > acc1[name][2]:
print('你的转账额度不够,请重新输入!')
continue
else:
break
acc1[pa][3] = acc1[pa][3] - pc
acc1[pa][2] = acc1[pa][2] + pc
acc1[name][2] = acc1[name][2] - pc
acc1[name][3] = acc1[name][3] + pc
with open('account.json','w') as dd:
json.dump(acc1,dd)
print('恭喜你转账成功!')
continue
elif custom_in == 6:
break
else:
print('你选择的编号不对,请重新输入!!')
continue if __name__ == "__main__":
while True:
print('\033[32mWelcome into credit card store!!!\033[0m')
for index,i in enumerate(conf.main_list,1):
print('%s.%s'%(index,i))
Num = input('Please choose you to enter the system(input b exit):').strip()
if Num == 'b':
print(1)
sys.exit()
elif int(Num) == 1:
name1 = login.login()
card_center(name1)
continue
elif int(Num) == 2:
name = login.login()
shopping_center(name)
continue
配置文件:conf.py
#!usr/bin/env python
# encoding: utf-8
main_list = ['Credit card supervise','Credit card store'] shop_list = {'Car':100000,
'Iphone':5000,
'Mac Book':8000,
'pan':10,
'T-shirt':100,
'coffee':30,
'return':'返回主菜单',
'pay':'买单',
} ad_list = ['添加用户','用户额度调整','冻结账户','解冻账户','用户操作查询','返回上一级']
customer_list = ['账户查询','还款','提现','消费查询','转账','返回']
登录系统和日志系统:login.py
#!usr/bin/env python
# encoding: utf-8 import json,sys,time
# account = {'wyh':['a123',123,15000,'unlock'],
# 'bat':['b321',456,15000,'unlock'],
# 'admin':['admin',0,0,'unlock']}
# with open('account.json','w') as d:
# json.dump(account,d)
logfile = 'record.log' def login():
with open('account.json', 'r') as f:
acc = json.load(f)
i = 0
while True:
name = input('请输入账号:')
password = input('请输入密码:')
if acc[name][3] == 'lock':
print('你的账户被锁定请联系你的客户经理!!!')
sys.exit()
elif name not in acc.keys() or password != acc[name][0] :
print('你的账户信息请重新输入!!!')
i += 1
if i > 2:
print('你的账户被锁定请联系你的客户经理确认你的账户安全!!')
acc[name][3] = 'lock'
with open('account.json', 'w') as f1:
json.dump(acc, f1)
sys.exit()
continue
else:
print('欢迎%s'%name)
return name def log_record(name,Status,money,description='Null'):
date = time.strftime("%Y%m%d %H:%M:%S", time.localtime())
record_line = "%s %s %s %s %s\n" % (date, name, Status,money, description)
f = open(logfile, 'a')
f.write(record_line)
f.flush()
f.close()
账号文件:account.json
{"wyh": ["a123", 123, 14870, 100, "unlock"], "bat": ["b321", 456, 10070, 4930, "unlock"], "admin": ["admin", 0, 0, 0, "unlock"]}
python 练习4的更多相关文章
- Python中的多进程与多线程(一)
一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- Python 小而美的函数
python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况 any any(iterable) ...
- JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议
软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...
- 可爱的豆子——使用Beans思想让Python代码更易维护
title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...
- 使用Python保存屏幕截图(不使用PIL)
起因 在极客学院讲授<使用Python编写远程控制程序>的课程中,涉及到查看被控制电脑屏幕截图的功能. 如果使用PIL,这个需求只需要三行代码: from PIL import Image ...
- Python编码记录
字节流和字符串 当使用Python定义一个字符串时,实际会存储一个字节串: "abc"--[97][98][99] python2.x默认会把所有的字符串当做ASCII码来对待,但 ...
- Apache执行Python脚本
由于经常需要到服务器上执行些命令,有些命令懒得敲,就准备写点脚本直接浏览器调用就好了,比如这样: 因为线上有现成的Apache,就直接放它里面了,当然访问安全要设置,我似乎别的随笔里写了安全问题,这里 ...
- python开发编译器
引言 最近刚刚用python写完了一个解析protobuf文件的简单编译器,深感ply实现词法分析和语法分析的简洁方便.乘着余热未过,头脑清醒,记下一点总结和心得,方便各位pythoner参考使用. ...
- 关于解决python线上问题的几种有效技术
工作后好久没上博客园了,虽然不是很忙,但也没学生时代闲了.今天上博客园,发现好多的文章都是年终总结,想想是不是自己也应该总结下,不过现在还没想好,等想好了再写吧.今天写写自己在工作后用到的技术干货,争 ...
随机推荐
- python-day2列表、元祖、字典;编码;字符串
@导入模块时,会先搜索目前路径的同名py文件,再去全局环境变量找 @看模块的环境变量 import sys print(sys.path) @site-package存放第三方库,可以把自己建的拷贝在 ...
- 一文读懂PRBS定义、生成办法、作用
对于眼图测试.误码率和抖动容限测试,最常用的测试码是PRBS,主要有PRBS7.PRBS15.PRBS23和PRBS31.本文主要解释了PRBS的定义,生成方法以及简单应用. PRBS定义 二进制序列 ...
- HTML5 使用 JS 生成二维码,带头像
一般在项目开发中,前端显示给用户扫描的二维码基本都是由后端代码生成的,那么这个高大上的功能能不能用 JS 来绘制呢? 答案是肯定的 首先我们需要一个插件 jquery.qrcode.js,该插件基于 ...
- 为什么对string调用swap会导致迭代器失效
一般来说,swap操作将容器内容交换不会导致容器的指针.引用.迭代器失效. 但当容器类型为array和string时除外. 原因在于:SSO (Short String Optimization 指 ...
- mongodb插入数据获取本次插入的mongodb id
最近接了一个别人的项目做二次开发,使用php进行mongodb的数据操作时,需要插入数据后得到相应的mongodb 中的id,简单代码如下 $data = array('test' => 'aa ...
- CSS : color and unit
Color: CSS中定义颜色使用十六进制(hex)表示法为红,绿,蓝的颜色值结合.可以是最低值是0(十六进制00)到最高值是 255(十六进制FF).3个双位数字的十六进制值写法,以#符号开始部分颜 ...
- WebApp与Native App有何区别呢?
Native App(其实就是用java其他语言开发的安卓系统或ios系统): 1.开发成本非常大. 一般使用的开发语言为JAVA.C++.Objective-C. 2 ...
- cs架构与bs架构的对比
主要区别: Client/Server是建立在局域网的基础上的.Browser/Server是建立在广域网的基础上的. 1.硬件环境不同 C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网 ...
- linux查看进程已经运行了多长时间
ps -eo lstart 启动时间 ps -eo etime 运行多长时间. ps -eo pid,lstart,etime | grep 717
- 通过微信公众号API复制公众号自定义菜单同时增加子菜单方法
主要的原因是再不破坏公众号以前的菜单的基础上增加自定义菜单,主要步骤如下: 1.通过微信提供的微信公众平台接口调试工具获取公众号的所有自定义菜单 网址:https://mp.weixin.qq.com ...