题目为信用卡消费管理系统:

主程序: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的更多相关文章

  1. Python中的多进程与多线程(一)

    一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...

  2. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  3. Python 小而美的函数

    python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况   any any(iterable) ...

  4. JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议

    软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...

  5. 可爱的豆子——使用Beans思想让Python代码更易维护

    title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...

  6. 使用Python保存屏幕截图(不使用PIL)

    起因 在极客学院讲授<使用Python编写远程控制程序>的课程中,涉及到查看被控制电脑屏幕截图的功能. 如果使用PIL,这个需求只需要三行代码: from PIL import Image ...

  7. Python编码记录

    字节流和字符串 当使用Python定义一个字符串时,实际会存储一个字节串: "abc"--[97][98][99] python2.x默认会把所有的字符串当做ASCII码来对待,但 ...

  8. Apache执行Python脚本

    由于经常需要到服务器上执行些命令,有些命令懒得敲,就准备写点脚本直接浏览器调用就好了,比如这样: 因为线上有现成的Apache,就直接放它里面了,当然访问安全要设置,我似乎别的随笔里写了安全问题,这里 ...

  9. python开发编译器

    引言 最近刚刚用python写完了一个解析protobuf文件的简单编译器,深感ply实现词法分析和语法分析的简洁方便.乘着余热未过,头脑清醒,记下一点总结和心得,方便各位pythoner参考使用. ...

  10. 关于解决python线上问题的几种有效技术

    工作后好久没上博客园了,虽然不是很忙,但也没学生时代闲了.今天上博客园,发现好多的文章都是年终总结,想想是不是自己也应该总结下,不过现在还没想好,等想好了再写吧.今天写写自己在工作后用到的技术干货,争 ...

随机推荐

  1. DOM编程艺术章12:一个简单的Ajax例子

    大概入了JavaScript的门,现在要回过头恶补Ajax和json了,随手翻到dom编程艺术发现有一个适合回忆的例子,先抄录下来,引入对Ajax作用的大概印象,再去掰开了研究. <!DOCTY ...

  2. tornado框架设置

    路由 import tornado.ioloop #开启循环 让服务器一直等待请求的到来 import tornado.web #框架基本功能封装在此模块 #例子 class MainHendler( ...

  3. DataGridView添加的数据最后一步无法生效的问题。

    在做项目时,需要使用到大量固定的参数,使用时只需修改一部分定值即可,所以就选用DataGridView控件进行循环添加,数据添加完成,一切正常,但是在修改数据时发现,每一次修改的数据的操作的最后一步总 ...

  4. Day07 - Ruby比一比:Symbol符号与String字串

    前情提要: 第六天我们透过Ruby代码练习public,protected和privatemethod时,发现冒号在前面的参数,:mydraft,:myspace,这些就是符号Symbol.在今天,我 ...

  5. CSS 背景图像 填充整个页面示例

    background-image 属性可以设置背景图像. 背景图像可以填充整个页面的,也可以填写一部分. background-image 属性的使用很简单:background-image:url( ...

  6. angluar1时间控件,在浏览器里是没有问题的,但是真机时间报错NAN

    因为是老项目并且用的angluar1有时也会很头疼没法直接打包和手机联调,所以浏览器上测试的多但是真机和浏览器还是不一样的,废话不说了,看图吧 我的时间插件代码是这样的 后台返回的数据格式是这样的 , ...

  7. 如何使用wepy和 vant-weapp开发小程序

    这里记录一下  使用wepy框架和  vant-weapp库开发小程序废话 不多说 wepy文档: https://tencent.github.io/wepy/document.html#/ van ...

  8. Blender软件基本介绍(3D建模软件)

    1.Blender的好处: 1>.开源免费 2>.体积比较小 3>.和Unity的交互比较好(一般建模软件需要导出FBX的文件,然后用到Unity中,而Blender不需要导出,只需 ...

  9. css第四天

    四丶 补充:CSS Display(显示) 与 Visibility(可见性) display属性设置一个元素应如何显示,visibility属性指定一个元素应可见还是隐藏. 隐藏元素 - displ ...

  10. Commit can not be set while enrolled in a transaction

    [java] Exception: java.sql.SQLException [java] Message: Commit can not be set while enrolled in a tr ...