项目: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记录操作日志
提供管理接口,包括添加账户、用户额度,冻结账户等
用户认证用装饰器

posted @ 2021-08-24 15:31  牛肉炖青菜  阅读(38)  评论(0)    收藏  举报