CSS Ribbon

Reproducing the GitHub Ribbon in CSS

路飞学城Python-Day16

settings.py
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
 
Shopping_info = '%s/shopping_mall/shop_list' % BASE_DIR
Database_user_info = r'%s/atm\database\user_info' % BASE_DIR
Log = r'%s/atm\log\behave'%BASE_DIR
cash_in.py
from atm.conf import settings
import os
import json
 
 
def incash(user_info):
in_cash = float(input('请输入还款金额:').strip())
user_info['balance'] = user_info['balance'] + in_cash
account_path = os.path.join(settings.Database_user_info, '%s.json' % user_info['id'])
with open(account_path,'w',encoding='utf-8') as f:
json.dump(user_info, f)
print('【系统提示】%s元已到账!'%in_cash)
cash_out.py
from atm.core import pay_center
 
 
def out(user_info):
out = float(input('【系统提示】总金额%.2f\n【系统提示】当前可以提取最大金额%.2f\n请输入提现金额>>>'%(user_info['balance'],float(user_info['balance'])/1.05)))
sum = out*1.05
if sum <= user_info['balance'] :
pay_center.cost(user_info,sum)
print('账户金额已发放,本次提取金额%.2f,手续费%.2f'%(out,sum-out))
else:
print('你的余额不足!')
cash_transfer.py
import os
import json
from atm.conf import settings
 
 
def transfer(user_info):
transfer_obj = input('请输入转账用户名').strip()
transfer_cash = float(input('请输入转账金额'))
#先扣款
path = os.path.join(settings.Database_user_info, '%s.json' % user_info['id'])
with open(path, 'r') as f:
data1 = json.load(f)
data1['balance'] -= transfer_cash
with open(path, 'w') as g:
json.dump(data1, g)
# 再到账
path = os.path.join(settings.Database_user_info, '%s.json' % transfer_obj)
with open(path, 'r') as f:
data = json.load(f)
data['balance'] += transfer_cash
with open(path, 'w') as g:
json.dump(data, g)
print('转账给%s,%.2f元成功!'%(transfer_obj,transfer_cash))
check_account.py
import os
from atm.conf import settings
import json
 
 
def check(username,pwd):
'''
支付信息验证
:param username:
:param pwd:
:return:
'''
addr = os.path.join(settings.Database_user_info,'%s.json' % username)
if os.path.isfile(addr):
with open(addr, 'r', encoding='utf-8') as f:
u = json.load(f)
if username == u['id'] and pwd == u['password']:
return u
else:
return False
else:
print('该账户不存在')
return False
distribution_center.py
from atm.core import cash_out,cash_in,cash_transfer
 
 
 
def distribute(user_info):
while True:
choice = input('+---------支付功能--------+\n1.提现\n2.还款\n3.转账\n4.退出').strip()
if user_info['status'] == 0:
if choice == '1':
cash_out.out(user_info)
elif choice == '2':
cash_in.incash(user_info)
elif choice == '3':
cash_transfer.transfer(user_info)
elif choice == '4':
break
else:
print(user_info['id']+'已经被锁定!')
break
main_func.py
from atm.core import check_account,distribution_center
from atm.log import logging
 
 
def main_func():
while True:
status = True
username = input('请输入支付账户').strip()
pwd = input('请输入密码').strip()
res = check_account.check(username,pwd)
if res['status'] == 0:
print('欢迎使用支付平台!')
logging.login(username,status)
distribution_center.distribute(res)
break
else:
print('登录失败!')
status = False
logging.login(username,status)
break
pay_center.py
from atm.conf import settings
import os
import json
 
 
def cost(username,pay_money):
 
username['balance'] = username['balance'] - pay_money
user_path = os.path.join(settings.Database_user_info, '%s.json' % username['id'])
with open(user_path, 'w', encoding='utf-8') as f:
json.dump(username, f)
boy.json
{"id": "boy", "password": "789", "credit": 10000.0, "balance": 9855.0, "enroll_date": "2018-07-14", "expire_date": "2018-09-20", "status": 0, "payday": "5"}
panda.json
{"id": "panda", "password": "123", "credit": 15000.0, "balance": 159.0, "enroll_date": "2018-07-13", "expire_date": "2099-12-12", "status": 0, "payday": "1"}
pandaboy.json
{"id": "pandaboy", "password": "456", "credit": 150000.0, "balance": 150000.0, "enroll_date": "2018-07-14", "expire_date": "2018-08-16", "status": 0, "payday": "1"}
zombie.json
{"id": "zombie", "password": "777", "credit": 5.0, "balance": 100000.0, "enroll_date": "2018-07-14", "expire_date": "2018-09-10", "status": 0, "payday": "5"}
login.log
2018-07-14 10:02:29+-----+panda+-----+登录失败
2018-07-14 10:04:03+-----+panda+-----+登录失败
2018-07-14 10:04:35+-----+panda+-----+登录成功
2018-07-14 10:16:00+-----+panda+-----+登录成功
2018-07-14 10:30:26+-----+panda+-----+登录成功
2018-07-14 10:31:08+-----+panda+-----+登录成功
2018-07-14 10:32:43+-----+panda+-----+登录成功
2018-07-14 10:36:58+-----+panda+-----+登录成功
2018-07-14 10:38:13+-----+panda+-----+登录成功
2018-07-14 10:38:50+-----+panda+-----+登录成功
2018-07-14 10:40:53+-----+panda+-----+登录成功
2018-07-14 10:48:12+-----+panda+-----+登录成功
2018-07-14 10:50:03+-----+panda+-----+登录成功
2018-07-14 10:53:11+-----+boy+-----+登录成功
2018-07-14 11:03:08+-----+panda+-----+登录成功
2018-07-14 11:04:20+-----+panda+-----+登录成功
2018-07-14 11:05:39+-----+panda+-----+登录成功
2018-07-14 11:06:34+-----+panda+-----+登录成功
2018-07-14 11:07:05+-----+panda+-----+登录成功
2018-07-14 11:11:57+-----+panda+-----+登录成功
2018-07-14 11:13:41+-----+panda+-----+登录成功
2018-07-14 11:14:05+-----+panda+-----+登录成功
2018-07-14 11:16:41+-----+panda+-----+登录失败
2018-07-14 11:22:55+-----+panda+-----+登录成功
2018-07-14 11:35:00+-----+panda+-----+登录成功
2018-07-14 11:35:08+-----+boy+-----+登录成功
logging.py
import logging
import os
from atm.conf import settings
 
def login(username,status):
log_file = os.path.join(settings.Log, 'login.log')
login_logger = logging.getLogger()
login_logger.setLevel(logging.DEBUG)
fh = logging.FileHandler(log_file, mode='a')
fh.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s+-----+%(message)s', datefmt='%Y-%m-%d %H:%M:%S')
fh.setFormatter(formatter)
login_logger.addHandler(fh)
if status == True:
logging.info('%s+-----+登录成功' % username)
else:
logging.info('%s+-----+登录失败' % username)
add_user.py
import time
from atm.conf import settings
import json
import os
 
 
def save(user_info):
file_directory = os.path.join(settings.Database_user_info, '%s.json' % user_info['id'])
f = open(file_directory, 'w')
json.dump(user_info, f)
 
def load(user_info):
file_directory = os.path.join(settings.Database_user_info, '%s.json' % user_info)
f = open(file_directory, 'r')
user_data = json.load(f)
return user_data
 
def add_users():
account = {}
account['id'] = input('账户:').strip()
account['password'] = input('密码:').strip()
account['credit'] = round(float(input('信用额度:').strip()), 2)
account['balance'] = account['credit']
account['enroll_date'] = time.strftime('%Y-%m-%d', time.localtime())
account['expire_date'] = input('有效期:(格式如%s):' % account['enroll_date']).strip()
account['status'] = 0
account['payday'] = input('还款日(号):').strip()
save(account)
change_credit.py
from atm.root import add_user
 
def change(username):
username = add_user.load(username)
username['credit'] = round(float(input('请输入调整后的信用额度:').strip()), 2)
print('\033[0;32m修改成功! \033[0m')
add_user.save(username)
freeze_user.py
from atm.root import add_user
 
def freeze(username):
username = add_user.load(username)
username['status'] = 1
print('\033[0;32m账户已冻结!\033[0m')
add_user.save(username)
root_func.py
from atm.root import add_user,change_credit,freeze_user,unfreeze_user
 
def login():
root_name = 'root'
root_pwd = '123'
rootname = input('请输入超级用户账号').strip()
rootpwd = input('请输入超级用户密码').strip()
while True:
if root_name ==rootname and root_pwd ==rootpwd:
print('------超级用户权限------\n1.添加账户\n2.修改账户额度\n3.冻结账户\n4.解冻账户\n5.退出')
choice = input('请输入功能序号').strip()
if choice == '1':
add_user.add_users()
elif choice == '2':
username = input('请输入需要修改的用户名').strip()
change_credit.change(username)
elif choice== '3':
username = input('请输入需要冻结的用户名').strip()
freeze_user.freeze(username)
elif choice== '4':
username = input('请输入需要解冻的用户名').strip()
unfreeze_user.unfreeze(username)
elif choice== '5':
break
else:
print('错误的命令!')
else:
print('错误的用户信息及密码')
break
unfreeze_user.py
from atm.root import add_user
 
def unfreeze(username):
username = add_user.load(username)
username['status'] = 0
print('\033[0;32m账户已解冻!\033[0m')
add_user.save(username)
pay_calling.py
from atm.core import check_account,pay_center
 
 
def pay(pay_money):
account = input('请输入支付账户').strip()
pwd = input('请输入支付密码').strip()
res = check_account.check(account, pwd)
if res:
if res['balance'] >= pay_money:
pay_center.cost(res, pay_money)
return True
else:
return False
record_history
2018-07-14 [{'name': '少了一半的苹果', 'price': 25}] 总价:25
shopping_list
{"panda": [], "pandaboy": [], "boy": [], "root": []}
user_info
{"panda": "123", "pandaboy": "456", "boy": "789", "root": "110"}
README
+----------------------------------------+
功能实现说明
1、额度 15000或自定义(已完成,自定义)
2、实现购物商城,买东西加入 购物车,调用信用卡接口结账(已完成)
3、可以提现,手续费5%(已完成)
4、支持多账户登录(支持)
5、支持账户间转账(已完成)
6、记录每月日常消费流水(已完成)
7、提供还款接口(已完成)
8、ATM记录操作日志(未完成)
9、提供管理接口,包括添加账户、用户额度,冻结账户等。。。
添加账户(已完成)
用户额度(可修改)
冻结账户(已完成)
解冻账户(已完成)
10、用户认证用装饰器(已完成)
+----------------------------------------+
更新日期:2018-07-14
系统功能
1.支付中心
测试支付账户 :panda
测试支付密码:123
支付功能
1.提现
测试提现金额:20
2.还款
还款金额:50
3.转账
转账账户:boy
转账金额:20
4.退出
+----------------------------------------+
2.购物商城
测试购物商城账号:panda
测试购物商城密码:123
商城功能
1.购物
选择商品 1
退出购物 0
输入支付账户:panda
输入支付密码:123
调用支付功能成功
2.查询
3.退出
+----------------------------------------+
3.超级用户
超级用户账号:root
超级用户密码:123
超级用户功能
1.添加账户
账户:zombie
密码:777
信用额度:100000
有效期:(格式如2018-07-14):2018-09-10
还款日(号):5
2.修改账户额度
修改的用户名zombie
调整后的信用额度:5
3.冻结账户
冻结的用户名panda
4.解冻账户
解冻的用户名panda
5.退出
+----------------------------------------+
startup.py
from shopping_mall.shop_list import mall
from atm.root import root_func
from atm.core import main_func
 
 
if __name__ == '__main__':
while True:
choice = input('欢迎登录XXX,请选择以下功能\n1.支付中心\n2.购物商城\n3.超级用户\n4.退出').strip()
if choice == '1':
main_func.main_func()
elif choice == '2':
mall.main()
elif choice == '3':
root_func.login()
elif choice == '4':
exit()
else:
print('【系统提示】错误的信息!')
 
 

posted on 2018-07-14 17:03  pandaboy1123  阅读(184)  评论(0编辑  收藏  举报

导航