项目:ATM购物车
目录:

settings
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
# 配置文件基本路径索引
src
from lib import common
from interface import user, shop, bank
from db import db_handler
# 用户登录信息表
user_data = {
'username': None,
'is_login': False
}
# 注册
def register():
print('注册中'.center(50, '*'))
if user_data['is_login']:
print("已经登录")
return
while True:
username = input("请输入用户名>>>").strip()
if user.get_userinfo_interface(username):
print("用户名已存在")
continue
password = input("请输入密码>>>").strip()
user.register(username, password)
print("恭喜成功注册!!")
break
# 登录
def login():
print("登录中".center(50, '*'))
if user_data['is_login']:
print("已经登录")
return
count = 0
while count < 3:
username = input("请输入用户名>>>").strip()
user_dic = user.get_userinfo_interface(username)
if not user_dic:
print("用户名不存在")
continue
password = input("请输入密码>>>").strip()
if password == user_dic.get('password'):
print("登录成功")
user_data['username'] = username
user_data['is_login'] = True
common.write_log('%s刚刚登录了' % username)
break
else:
count += 1
if count == 2:
print("亲!再输错一次就要锁定了喔~~")
if count == 3:
user_dic['locked'] = True
user.locked(user_dic)
if user_dic.get('locked'):
common.write_log('%s刚刚被锁定了' % username)
print("亲!你的账户被锁定了喔~~")
break
print("密码错误")
# 提现
@common.login_auth
def withdraw():
print("提现中".center(50, '*'))
while True:
money = input("请输入您所需要提现的金额数>>>").strip()
if not money.isdigit():
print("请输入正确金额!!")
continue
money = int(money)
user_dic = db_handler.select(user_data['username'])
if not user_dic:
print("用户不存在")
continue
if user_dic['account'] >= money * 1.05:
bank.withdraw(user_dic, money)
print("提现成功!!")
break
else:
print("账户金额不足")
# 转账
@common.login_auth
def transfer():
print("转账中".center(50, '*'))
while True:
to_name = input("请输入你要转账的账户>>>").strip()
to_name_dic = user.get_userinfo_interface(to_name)
if not to_name_dic:
print("用户不存在")
continue
transfer_money = input("请输入转账金额>>>").strip()
if not transfer_money.isdigit():
print("请输入正确金额!!")
continue
transfer_money = int(transfer_money)
from_name_dic = user.get_userinfo_interface(user_data['username'])
if from_name_dic['account'] >= transfer_money:
bank.transfer(to_name_dic, from_name_dic, transfer_money)
print("转账成功!!")
break
# 充值
@common.login_auth
def pay():
print("充值中".center(50, '*'))
while True:
money = input("请输入充值金额>>>").strip()
if not money.isdigit():
print("输入的金额不是数字,请重新操作!!")
continue
money = int(money)
user_dic = user.get_userinfo_interface(user_data['username'])
if not user_dic:
print("用户不存在")
continue
print("充值成功")
break
# 查看余额
@common.login_auth
def check_balance():
print("查看余额中".center(50, '*'))
while True:
data = user.get_userinfo_interface(user_data['username'])
if not data:
print('用户不存在')
continue
common.write_log("%s刚刚查看了余额" % user_data['username'])
print(data['account'], '元')
break
# 查看流水
@common.login_auth
def check_flow():
print('查询流水中'.center(50, '*'))
while True:
data = user.get_userinfo_interface(user_data['username'])
if not data:
print("用户不存在")
continue
common.write_log("%s刚刚查看了流水" % user_data['username'])
print(data['flow'])
break
# 加入购物车
@common.login_auth
def add_shopping_cart():
print("加入购物车中".center(50, '*'))
user_dic = user.get_userinfo_interface(user_data['username'])
shopping_cart = user_dic['shopping_cart']
while True:
goods = [
['apple', 100],
['banana', 200],
['mango', 300],
['watermelon', 400]
]
for k, v in enumerate(goods):
print('%s %s %s ' % (k, v[0], v[1]))
num = input("请输入选择的商品编号(q to quit)>>>").strip()
if num.isdigit():
num = int(num)
if not num < len(goods):
print("输入不合法")
continue
goods_name = goods[num][0]
goods_price = goods[num][1]
if goods_name not in shopping_cart:
shopping_cart[goods_name] = {'price': goods_price, 'count': 1}
else:
shopping_cart[goods_name]['count'] += 1
print("请继续购物")
elif num == 'q':
if shopping_cart:
shop.shopping(user_dic,shopping_cart)
print("欢迎光临,喜欢再来")
break
else:
print("请输入正确的商品编号!!")
# 查看购物车
@common.login_auth
def check_shopping_cart():
print("查看购物车中".center(50, '*'))
while True:
data=user.get_userinfo_interface(user_data['username'])
if not data:
print("用户不存在")
continue
common.write_log("%s刚刚查看了购物车" % user_data['username'])
print(data['shopping_cart'])
break
# 退出程序
def logout():
print("欢迎下次光临".center(50,"*"))
quit()
# 程序功能表
func_dic = {
"1": register,
"2": login,
"3": withdraw,
"4": transfer,
"5": pay,
"6": check_balance,
"7": check_flow,
"8": add_shopping_cart,
"9": check_shopping_cart,
"0": logout,
}
def run():
while True:
print(
'''
**********************
1、注册
2、登录
3、提现
4、转账
5、充值
6、查看余额
7、查看流水
8、加入购物车
9、查看购物车
0、退出
**********************
'''
)
choice = input("请输入你的选项>>>").strip()
if choice not in func_dic:
print("输入错误")
continue
func_dic[choice]()
db_handler
import json
import os
from conf import settings
# 读取用户信息
def select(username):
path = settings.BASE_DIR
path_file = os.path.join(path, 'db', '%s.json' % username)
if os.path.exists(path_file):
with open(path_file, 'r', encoding='utf-8')as f:
return json.load(f)
else:
return False
# 更改用户信息
def update(user_dic):
path = settings.BASE_DIR
path_file = os.path.join(path, 'db', '%s.json' % user_dic['username'])
with open(path_file, 'w', encoding='utf-8')as f:
json.dump(user_dic, f)
bank
import time
from db import db_handler
from lib import common
now = time.strftime('%Y-%m-%d %X')
# 提现功能接口
def withdraw(user_dic, money):
user_dic['account'] -= money * 1.05
db_handler.update(user_dic)
common.write_log('%s刚刚提现了' % user_dic['username'])
# 转账功能接口
def transfer(to_name_dic, from_name_dic, transfer_money):
# 对方账户改动
to_name_dic['account'] += transfer_money
# 记日志
common.write_log('%s收到一笔转账' % to_name_dic['username'])
# 记流水
to_name_dic['flow'].append('%s从%s收到%s元' % (now, from_name_dic['username'], transfer_money))
db_handler.update(to_name_dic)
# 己方账户改动
from_name_dic['account'] -= transfer_money
# 记日志
common.write_log('%s收到一笔转账' % from_name_dic['username'])
# 记流水
from_name_dic['flow'].append('%s给%s转了%s元' % (now, to_name_dic['username'], transfer_money))
db_handler.update(from_name_dic)
# 充值功能接口
def pay(user_dic, money):
user_dic['account'] += money
common.write_log("%s充值成功" % user_dic['username'])
user_dic['flow'].append("%s于%s成功充值了%s元" % (user_dic['username'], now, money))
db_handler.update(user_dic)
shop
from db import db_handler
from lib import common
# 加入购物车功能接口
def shopping(user_dic,shopping_cart):
user_dic['shopping_cart'] = shopping_cart
db_handler.update(user_dic)
common.write_log('%s刚刚选择了商品' % user_dic['username'])
user
from db import db_handler
from lib import common
# 获取用户信息接口
def get_userinfo_interface(username):
return db_handler.select(username)
# 注册功能接口
def register(username,password):
user_dic = {'username': username, 'password': password, 'account': 10000, 'locked': False, 'flow': [],
'shopping_cart': {}}
db_handler.update(user_dic)
# 写日志
common.write_log('%s刚刚注册了' % username)
# 锁定
def locked(user_dic):
db_handler.update(user_dic)
common
import os
import logging
from conf import settings
from core import src
# 登录功能装饰器
def login_auth(func):
def wrapper(*args, **kwargs):
if src.user_data['is_login']:
return func(*args, **kwargs)
else:
src.login()
return wrapper
# 日志功能
logging.basicConfig(
filename=os.path.join(settings.BASE_DIR, 'log', 'access.log'),
format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',
level=10,
encoding='utf-8',
)
def write_log(info):
logging.debug(info)
start
from core import src
if __name__ == '__main__':
src.run()
readme
项目需求
额度 15000或自定义
实现购物商城,买东西加入 购物车
可以提现,手续费5%
支持多账户登录
支持账户间转账
记录每月日常消费流水
提供充值接口
ATM记录操作日志
提供管理接口,包括添加账户、用户额度,冻结账户等
用户认证用装饰器

浙公网安备 33010602011771号