1ATM+购物车 续

day21ATM+购物车

start 开始文件

from core import src

if __name__ == '__main__':
    src.main()

用户视图层 core下的src.py

from interface import user
from interface import back
from interface import shopping
from db import db_handler
from lib import common

user_data = {
    'username': None,
    'is_login': False,
}


def logintout():
    print('退出成功')
    exit()


def register():
    print('注册功能')
    if user_data['is_login']:
        print('已经登录')
        return
    while True:
        username = input('请输入姓名')
        if user.get_userinfo_interface(username):
            print('用户名已存在')
            continue
        else:
            password = input('请输入密码:').strip()
            user.register_a(username, password)
            common.write_log('%s注册成功' % username)
            print('%s注册成功' % username)
            break


def login():
    print('登录功能')
    count = 0
    if user_data['is_login']:
        print('用户已登录')
        return

    while True:
        username = input('请输入姓名:').strip()

        user_dic = user.get_userinfo_interface(username)

        if not user_dic:
            print('账号不存在')
            continue

        if user_dic.get('locked'):
            print('账号已锁定,请联系相关人员')
            break
        password = input('请输入密码:').strip()
        user_dic = user.get_userinfo_interface(username)
        if password == user_dic['password']:
            print('登陆成功')
            common.write_log('%s登录成功' % username)
            user_data['username'] = username
            user_data['is_login'] = True
            break
        else:
            print('登陆失败')
            count += 1
            if count == 3:
                print('错误三次,账号锁定')
                user_dic['locked'] = True
                user.user_locked(user_dic)
                break


@common.login_auth
def withdraw():
    print('提现功能')
    while True:
        money = input('请输入提现金额:').strip()
        if not money:
            print("你啥也不输入 ,你提现个毛线")
            continue
        if not money.isdigit():
            print('请输入正确的金额')
            continue
        money = int(money)
        user_dic = user.get_userinfo_interface(user_data['username'])
        if user_dic['account'] >= money * 1.05:
            back.withdraw(user_dic, money)
            common.write_log('%s提现成功' % user_data['username'])
            print('%s提现成功,金额为:%s' % (user_dic['username'], money * 1.05))
            break
        else:
            print('余额不足')


@common.login_auth
def transfer():
    print('转账功能')
    while True:
        to_user = input('请输入对方账户:').strip()
        to_user_dic = user.get_userinfo_interface(to_user)
        if not to_user_dic:
            print('对方账户不存在,请从新输入')
            continue
        transfer_money = input('请输入转账金额:').strip()
        if not transfer_money.isdigit():
            print('金额必须是纯数字')
            continue
        transfer_money = int(transfer_money)
        from_user_dic = user.get_userinfo_interface(user_data['username'])
        if from_user_dic['account'] >= transfer_money:
            back.transfer(from_user_dic, to_user_dic, transfer_money)
            print('转账成功,金额为:%s' % transfer_money)
            common.write_log('%s转账成功' % from_user_dic['username'])
            break
        else:
            print('钱不够')


@common.login_auth
def pay():
    print('充值功能')
    while True:
        pay_money = input('请输入充值金额:').strip()
        if not pay_money.isdigit():
            print('请输入正确的金额')
            continue
        pay_money = int(pay_money)
        user_dic = user.get_userinfo_interface(user_data['username'])

        back.pay(user_dic, pay_money)
        print('充值成功,金额为:%s' % pay_money)
        common.write_log('%s充值成功' % user_data['username'])
        break


@common.login_auth
def check_money():
    print('查看余额')
    user_dic = user.get_userinfo_interface(user_data['username'])
    print('当前用户余额为:%s' % user_dic['account'])
    common.write_log('%s查看了余额' % user_data['username'])


@common.login_auth
def check_flow():
    print('查看流水')
    user_dic = user.get_userinfo_interface(user_data['username'])
    for i in user_dic['flow']:
        print(i)
    common.write_log('%s查看了流水' % user_data['username'])


@common.login_auth
def shopping_car():
    print('购买商品')
    shopping_car = {}
    while True:
        goods = [
            ['肥宅快乐水', 5],
            ['炸鸡', 30],
            ['苹果', 8],
            ['雪糕', 3],
            ['瓜子', 12],
            ['火腿', 2],
            ['烤全羊', 1000],
            ['辣条', 4],
            ['笔记本电脑', 8000],
            ['泡泡糖', 4.5]
        ]
        for k, v in enumerate(goods):
            print(k, v[0], v[1])
        num = input('请输入商品对应编号').strip()
        if num.isdigit():
            num = int(num)
            goods_names = goods[num][0]
            goods_price = goods[num][1]
            if goods_names not in shopping_car:
                shopping_car[goods_names] = {'price': goods_price, 'count': 1}
            else:
                shopping_car[goods_names]['count'] += 1
            print('接着买,输入q退出')
        elif num == 'q':
            if shopping_car:
                shopping.add_car(user_data['username'], shopping_car)
                print('欢迎下次再来')
                common.write_log('%s购买了商品' % user_data['username'])
                break
        else:
            print('输入不合法')


@common.login_auth
def check_shopping_car():
    print('查看购物车')
    user_dic = user.get_userinfo_interface(user_data['username'])
    for i in user_dic['shopping']:
        # print('名称:',i,'价格:',user_dic['shopping'][i]['price'],'数量:',user_dic['shopping'][i]['count'])
        print('名称:%s   价格:%s    数量:%s' % (i, user_dic['shopping'][i]['price'], user_dic['shopping'][i]['count']))

    common.write_log('%s查看了购物车' % user_data['username'])


func_dic = {
    '0': ['退出', logintout],
    '1': ['注册', register],
    '2': ['登录', login],
    '3': ['提现', withdraw],
    '4': ['转账', transfer],
    '5': ['充值', pay],
    '6': ['查看余额', check_money],
    '7': ['查看流水', check_flow],
    '8': ['购买商品', shopping_car],
    '9': ['查看购物车', check_shopping_car],
}


def main():
    while True:
        for line in func_dic:
            print(line, '-', func_dic[line][0])
        choise = input('请输入您要选功能的编号:').strip()
        if choise in func_dic:
            func_dic[choise][1]()
        else:
            print('请从新输入')

用户逻辑层,接口层 interface

①user.py用户接口

from db import db_handler

#创建用户初始化信息,加到json里面
def register_a(username,password):
     user_dic ={
         'username':username,
         'password':password,
         'account':15000,
         'locked':False,
         'flow':[],
         'shopping':{},

     }
     db_handler.update(user_dic)

#判断用户是否存在,返回用户信息
def get_userinfo_interface(username):
    return db_handler.select(username)


#锁定账户
def user_locked(user_dic):
    db_handler.update(user_dic)

②back.py

from db import db_handler
import time
now =time.strftime('%Y-%m-%d %X')
def withdraw(user_dic,money):
    user_dic['account']-=money*1.05
    user_dic['flow'].append('%s提现了%s元'%(now,money))
    db_handler.update(user_dic)



def transfer(from_user_dic,to_user_dic,money):
    to_user_dic['account']+=money
    to_user_dic['flow'].append('%s收到了%s的%s元'%(now,from_user_dic['username'],money))
    db_handler.update(to_user_dic)

    from_user_dic['account']-=money
    from_user_dic['flow'].append('%s转给了%s%s元'%(now,to_user_dic['username'],money))
    db_handler.update(from_user_dic)



def pay(user_dic,money):
    user_dic['account']+=money
    user_dic['flow'].append('%s充值了%s元'%(now,money))
    db_handler.update(user_dic)



③shopping

from db import db_handler
from interface import user

def add_car(username,shopping_car):
    user_dic=user.get_userinfo_interface(username)
    user_dic['shopping']=shopping_car
    db_handler.update(user_dic)

实体层 db下的db_handler

import os
from conf import settings
import json
#查看文件


def update(user_dic):
  path_file = os.path.join(settings.PATH_DIR, 'db', '%s.json' % user_dic['username'])

  with open(path_file,'w',encoding='utf-8')as f:
      json.dump(user_dic,f,ensure_ascii=False)


def select (username):
  path_file = os.path.join(settings.PATH_DIR, '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

conf 下的setting.py配置文件

import os
import sys

PATH_DIR=os.path.dirname(os.path.dirname(__file__))

lib下的common 常用函数

from core import src
import logging
import os
from conf import settings
def login_auth(func):
    def inner(*args,**kwargs):
        if src.user_data['username']:
            return func(*args,**kwargs)
        else:
            print('请先登录')
            src.login()
    return inner




# 一:日志配置
logging.basicConfig(
    # 1、日志输出位置:1、终端 2、文件
    # filename='access.log', # 不指定,默认打印到终端
    filename=os.path.join(settings.PATH_DIR, 'log', 'access.log'),  # 不指定,默认打印到终端

    # 2、日志格式
    format='%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s',

    # 3、时间格式
    datefmt='%Y-%m-%d %H:%M:%S %p',
    encoding='utf-8',
    # 4、日志级别
    # critical => 50
    # error => 40
    # warning => 30
    # info => 20
    # debug => 10
    level=10,
)


# 二:输出日志
# logging.debug('调试debug')
# logging.info('消息info')
# logging.warning('警告warn')
# logging.error('错误error')
# logging.critical('严重critical')

def write_log(info):
    logging.debug(info)


'''
# 注意下面的root是默认的日志名字
WARNING:root:警告warn
ERROR:root:错误error
CRITICAL:root:严重critical
'''


log 日志文件

2021-08-22 18:46:46 PM - root - DEBUG -common:  z注册成功
2021-08-22 18:50:42 PM - root - DEBUG -common:  qwe注册成功
2021-08-22 18:50:47 PM - root - DEBUG -common:  qwe登录成功
2021-08-22 18:50:53 PM - root - DEBUG -common:  qwe提现成功
2021-08-22 18:51:00 PM - root - DEBUG -common:  qwe转账成功
2021-08-22 18:51:07 PM - root - DEBUG -common:  qwe充值成功
2021-08-22 18:51:10 PM - root - DEBUG -common:  qwe查看了流水
2021-08-22 18:51:11 PM - root - DEBUG -common:  qwe查看了金额
2021-08-22 18:51:20 PM - root - DEBUG -common:  qwe购买了商品
2021-08-22 18:51:23 PM - root - DEBUG -common:  qwe查看了购物车

 

posted @ 2021-08-23 14:49  迪迦张  阅读(42)  评论(0)    收藏  举报