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线上问题的几种有效技术
工作后好久没上博客园了,虽然不是很忙,但也没学生时代闲了.今天上博客园,发现好多的文章都是年终总结,想想是不是自己也应该总结下,不过现在还没想好,等想好了再写吧.今天写写自己在工作后用到的技术干货,争 ...
随机推荐
- Mysql将查询结果合并为一列
利用函数:group_concat(),实现一个ID对应多个名称时,原本为多行数据,把名称合并成一行. 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order B ...
- java8 for ,forEach ,lambda forEach , strean forEach , parller stream forEach, Iterator性能对比
java8 for ,forEach ,Iterator,lambda forEach ,lambda strean forEach , lambda parller stream forEach性 ...
- Ubuntu16.04 导入tensorflow报错
错误1:Traceback (most recent call last): File "/home/lwc/anaconda3/lib/python3.6/site-packages/t ...
- Sql Server数据库之多表查询
一.连接查询 概念:根据两个表或多个表的列之间的关系,从这些表中查询数据 目的:实现多表查询操作 语法:From join_table join_type join_table[ON(join_con ...
- vlookup 公式使用及常见问题
该函数的语法规则如下: VLOOKUP(lookup_value,table_array,col_index_num,range_lookup) 参数 简单说明 输入数据类型 lookup_value ...
- Ubuntu上部署tomcat后无法访问8080端口问题
在tomacat的bin目录下,修改startup.sh文件,添加信息: #set java environment export JAVA_HOME=/usr/java/jdk1.8.0_111 e ...
- echars 图表提示框自定义显示
一 . 显示单条数据时在tooltip里调用formatter函数给自定义提示框内数据. 效果图显示 二 . 当显示多条数据时.为保证和原来的效果相同需要自己实现点的效果.如果不实现,提示框则不限点的 ...
- python入门(十六):正则
1.正则:对一些字符串实现模糊的匹配 使用场景: 爬虫:例如,网页源码里面的url都提取出来.网页里面提取我们想要的数据 分析日志:例如,拿到所有的ip,看看哪些ip访问过我的网站 2.引入包 > ...
- 【JAVA】String[]配列の相関
配列の作成: ①String[] str = new String[5]; ②String[] str = new String[]{"","","& ...
- 一文看懂大数据的技术生态Hadoop, hive,spark都有了[转]
大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的.你可以把它比作一个厨房所以需要的各种工具.锅碗瓢盆,各有各的用处,互相之间又有重合.你可 ...