import json  # 调度内置 json 模块,用于数列化输入输出,相比eval,功能更全面,融合度更高from conf import settings  # 从配置文件configure (包) 中调用设置 setting (模块),用于使用setting中的名称空间from interface import user  # 从接口文件interface (包) 中调用 user (模块) 里面的名称空间from lib import commonfrom interface import bankfrom interface import shop

user_info = {'name': None}  # 定义确定登陆状态字典

# 注册def register():  # 定义注册功能函数    print('注册...')  # 打印注册,提示用户    while True:  # 启动循环        name = input('请输入用户名>>:').strip()        # name接收用户输入注册用户名,input内置了输出流在此体现注释功能,strip方法去除多余空格

        pwd = input('请输入密码>>:').strip()        # pwd接收用户输入注册密码,input内置了输出流在此体现注释功能,strip方法去除多余空格

        conf_pwd = input('请输入密码>>:').strip()        # conf_pwd 用户再次输入密码,用于用户确认自己输入的密码,strip方法去除多余空格

        if pwd == conf_pwd:  # 逻辑判断:如果第二次输入的密码等于第一次输入的密码            flag, msg = user.register_interface(name, pwd)            # 开头通过接口包导入了用户模块,在用户模块里面调用注册接口函数            # 通过res,与msg解压赋值 接收返回值            if flag:  # 如果两个返回值为通过解压赋值得到的第一个是True                print(msg)  # 输出的msg解压赋值得到得是字符串‘注册成功’                break  # 终止注册            else:  # 如果两个返回值为通过解压赋值得到的第一个是False,也就是相对与True的其他情况,else                print(msg)  # 输出‘用户已存在'

# 登陆def login():  # 定义登陆功能函数    if user_info['name']:        # 如果开头定义的user_info的K['name']有值,不为空,说明是已经登陆过的        return  # 无返回值,直接退出登陆系统

    while True:  # 循环打印        name = input('请输入用户名>>:').strip()  # 接收用户用户名        pwd = input('请输入密码>>:').strip()  # 接收用户密码        flag, msg = user.login_interface(name, pwd)  # flag,msg解压赋值接收(调用user内的登陆接口函数,传参执行,拿到返回值)        if flag:  # 如果flag = True            user_info['name'] = name  # 登陆成功,确定上线状态            print(msg)  # 登陆成功            break  # 退出当前循环        else:  # 其他情况,就是False            print(msg)  # 密码错误

# 查看余额@common.authdef check_balance():  # 定义查看余额功能函数    msg = user.check_balance_interface(user_info['name'])    print(msg)

# 提现@common.authdef withdraw():  # 定义提现功能函数    while True:  # 循环开始        money = input('请输入体现金额:').strip()  # 提示用户输入提现金额        if money.isdigit():            money = int(money)  # 将输入的字符串转化为整型            flag, msg = bank.withdraw_interface(user_info['name'], money)            # 执行bank模块里面的 withdraw_interface 提现接口函数功能            # 传入src开头的用户信息状态字典中的 'name' 的值,和用户输入的money整型钱数            # flag标识接收return的第一个返回值True/False            # msg信息接收return的第二个返回值,            # '用户:[%s] 提现 [%s¥]!' % (name, money)            # '尊敬的用户,您的余额不足,请充值!'            if flag:  # flag标识接收return的第一个返回值True                print(msg)  # 打印,'用户:[%s] 提现 [%s¥]!' % (name, money)                break  # 退出循环

            else:  # 其他情况,也就是flag标识接收return的第一个返回值False                print(msg)  # 打印,'尊敬的用户,您的余额不足,请充值!'        else:            print('请输入数字!')

# 转账@common.authdef transfer():  # 定义转账功能函数    while True:  # 开始循环        to_user = input('请输入转账目标用户:').strip()  # 转账目标用户,输入目标账户名称        money = input('请输入转账金额:').strip()  # 输入要转账的金额

        money = int(money)  # 将要转账的金额转换为整型        flag, msg = bank.transfer_interface(user_info['name'], to_user, money)        # flag,msg解压赋值接收 bank模块下面的转账接口函数        # (三个传值,登陆状态下的来源用户name作为K对应的值,目标用户的name,和要转账的金额的整型)        if flag:            # 如果 flag 接收的函数返回值是            # return False,'目标用户不存在!'            # return True,'转账成功,用户[%s]转账给用户[%s] %s $!'(只会执行if True,或者if not False)            # return False,'尊敬的用户,您的余额不足,请充值!'

            print(msg)  # 打印'转账成功,用户[%s]转账给用户[%s] %s $!'            break  # 退出转账循环        else:            # 其他情况            # return False,'目标用户不存在!'            # return False,'尊敬的用户,您的余额不足,请充值!'            print(msg)            # 输出'目标用户不存在!'            # 输出'尊敬的用户,您的余额不足,请充值!'

# 还款@common.authdef repay():  # 定义还款功能函数    while True:  # 开始循环        money = input('请输入还款金额:').strip()  # 接收用户输入的还款金额        money = int(money)  # 将用户输入的金额转换成整型,后续作运算        msg = bank.repay_interface(user_info['name'], money)        # msg接收bank模块 下面的还款接口功能函数 传入(用户登陆状态信息内的name作为K的值,传入的还款金额整型)        print(msg)  # 打印返回值  '还款[%s]成功!'% money        break  # 退出循环

# 查看流水@common.authdef check_flow():  # 定义查看流水账单功能函数    flow_s = bank.check_flow_interface(user_info['name'])    for line in flow_s:        print(line)

# 购物车功能@common.authdef shopping():  # 定义购物花钱赚钱功能函数    goods_list = [        ['凤爪', 50],        ['T-shirt', 150],        ['macbook', 21800],        ['iphoneX', 7000]    ]

    # 购物车    shopping_cart = {}

    # 购物总额    cost = 0

    # 获取用户余额    user_balance = bank.check_balance_interface(user_info['name'])

    while True:        for index, goods in enumerate(goods_list):            # enumerate枚举对象(取出内容信息,并加索引,索引默认值为1)            # index 接收索引,goods 接收商品信息            print(index, goods)  # 挨个打印出来

        choice = input('请选择商品编号:').strip()        # 提示用户输入商品编号

        if choice.isdigit():  # 如果用户输入的内容全是数字(isdigit()返回bool值,在此返回True才会执行内部代码)            choice = int(choice)  # 将用户输入的choice字符串类型 转换为 int 整型类型,以方便后续做数字的比较运算

            if choice >= 0 and choice < len(goods_list):                # 如果用户输入的数字大于等于0,此时0代表的商品是['凤爪', 50]                # 并且,用户输入的 小于商品列表的总索引数,此时总索引为 4

                good_name, good_price = goods_list[choice]                # goods_list[choice] ,假设输入的choice为1,goods_list[choice] == goods_list[1] == ['T-shirt', 150]                # 通过解压赋值                # good_name,拿到的是商品名称 'T-shirt'                # good_price,拿到的是商品价格 150

                if user_balance >= good_price:                    # 如果用户余额,大于等于,商品价格

                    if good_name in shopping_cart:  # 如果商品名在购物车中                        shopping_cart[good_name] += 1                        # 以商品名作为K,商品名的数量+1                    else:  # 如果不在                        shopping_cart[good_name] = 1                        # 加进去商品名,并设定初始值为1

                    cost += good_price  # 每添加到购物车一次商品,购物总额加上每一次添加的商品金额 再赋值给 购物总额

                    flag, msg = shop.add_shopping_cart_interface(user_info['name'], shopping_cart)                    # flag,msg 解压赋值接收 函数的返回值 True,'添加购物车成功!'                    if flag:  # 如果接收了True:                        print(msg)  # 输出msg通过解压赋值所得到的包含的信息 ‘添加购物车成功!’                        print(shopping_cart)  # 输出 目前的购物车列表                else:                    print('余额不足,请充值')

        elif choice == 'q':  # 如果输入的其他情况是q            if cost == 0: break  # 如果 商品总额为0,说明没有添加商品,没有产生价格变动,退出当前循环

            confirm = input('确认购买输入 y,取消输入 n').strip()            # 确认= 接收用户的输入信息,确认购买输入y,取消购买输入n

            if confirm == 'y':  # 如果输入的是y                flag, msg = bank.pay_interface(user_info['name'], cost)                # flag,msg通过解压赋值拿到 bank模块下面 付款接口功能 函数的返回值                # 返回给外界 True,'支付成功!' 或                # 返回给外界 False,'消费失败!'

                if flag:  # 如果 接收了True,继续执行下面代码                    print(msg)  # 输出'支付成功!'                    break  # 退出循环

                else:  # 其他情况 (接收了False)                    print(msg)  # 输出'消费失败!'

            else:  # 如果输入的不是y,                print('退出购买!')  # 输出'退出购买!'                break  # 退出循环

        else:  # 请选择商品编号时的输入有误,非本系统识别或存储类型            print('输入有误!')  # 输出提示 '输入有误!',继续循环

# 查看购物车@common.authdef check_shop():  # 定义查看购物车功能函数    shopping_cart = shop.show_shopping_cart_interface(user_info['name'])    # 调用显示购物车的接口,拿到返回值用户信息字典 中的 购物车作为K对应的值

    if shopping_cart:  # 如果用户信息字典 中的 购物车作为K对应的值 有数据,执行后续代码        print(shopping_cart)  # 输出购物车中的数据

    else:  # 用户信息中的购物车的K没有对应的值,为None的情况下        print('购物车已被清空')  # 输出'购物车已被清空'

# 注销用户@common.authdef logout():    msg = user.logout_interface()    print(msg)

func_dic = {    '1': register,    '2': login,    '3': check_balance,    '4': withdraw,    '5': transfer,    '6': repay,    '7': check_flow,    '8': shopping,    '9': check_shop,    '0': logout,}  # 定义函数功能字典,用于用户输入键位后,提取对应的K的值V,加括号运行对应函数功能

# 主程序def run():  # 运行,整个购物车的入口    while True:  # 循环开始        print('''         1.注册        2.登陆        3.查看余额        4.提现        5.转账        6.还款        7.查看流水        8.购物车        9.查看购物车        0.注销用户        q.退出        ''')  # 显示提示用户输入所需功能,根据序号输入        choice = input('请选择功能编号>>:').strip()  # 接收用户输入的信息,提示输入功能编号,并去空

        quit = ['q', 'Q', 'quit']  # 定义一个退出列表,包含三种可能输入的退出情况        if choice in quit:  # 逻辑判断,如果用户所输入的内容在退出字典中            break  # 上诉条件成立退出当前循环即整个系统

        # 判断用户选择的编号是否在1-9功能内        if choice in func_dic:  # 如果输入内容在函数功能字典中            func_dic[choice]()

            # 查找对应的数字K在字典中对应的值,提取值就是提前一个未运行的函数名,# 后面追加括号,执行该函数功能

        else:  # 否则,意思就是其他情况,不在1到9的范围内和退出列表中的输入信息,就是不符合输入规范            print('请输入正确的编号!')  # 字面

入门项目 A3 src 主代码的更多相关文章

  1. 入门项目 A1 start

    ''' 启动文件入口 ''' from core import src import os import sys # 拿到项目的路径 path = os.path.dirname(__file__) ...

  2. Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例【附详细代码】

    http://blog.csdn.net/xiefu5hh/article/details/51707529 Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例[附 ...

  3. mvn编写主代码与测试代码

    maven编写主代码与测试代码 3.2 编写主代码 项目主代码和测试代码不同,项目的主代码会被打包到最终的构件中(比如jar),而测试代码只在运行测试时用到,不会被打包.默认情况下,Maven假设项目 ...

  4. maven编写主代码与测试代码

    3.2 编写主代码 项目主代码和测试代码不同,项目的主代码会被打包到最终的构件中(比如jar),而测试代码只在运行测试时用到,不会被打包.默认情况下,Maven假设项目主代码位于src/main/ja ...

  5. 【CuteJavaScript】Angular6入门项目(1.构建项目和创建路由)

    本文目录 一.项目起步 二.编写路由组件 三.编写页面组件 1.编写单一组件 2.模拟数据 3.编写主从组件 四.编写服务 1.为什么需要服务 2.编写服务 五.引入RxJS 1.关于RxJS 2.引 ...

  6. SpringCloud学习之手把手教你用IDEA搭建入门项目(一)

    SpringCloud简单搭建 jdk:1.8开发工具:IDEA注:需要了解springcloud 1.创建最简单的Maven项目 1)开始创建一个新的项目 ​ 2)创建一个空模板的maven项目,用 ...

  7. mnist手写数字识别——深度学习入门项目(tensorflow+keras+Sequential模型)

    前言 今天记录一下深度学习的另外一个入门项目——<mnist数据集手写数字识别>,这是一个入门必备的学习案例,主要使用了tensorflow下的keras网络结构的Sequential模型 ...

  8. 基于renren-fast的快速入门项目实战(实现报表增删改查)

    基于renren-fast的快速入门项目实战(实现报表增删改查) 说明:renren-fast是一个开源的基于springboot的前后端分离手脚架,当前版本是3.0 官方开发文档需付费,对于新手而言 ...

  9. 解决 IDEA 创建 Gradle 项目没有src目录问题

    解决 IDEA 创建 Gradle 项目没有src目录问题 前几天遇到一个问题,就是使用IDEA创建gradle项目后,src目录没有自动生成出来,今天就给大家分享一下怎么解决. 1. 目录:创建的 ...

随机推荐

  1. sliver

    import 'package:flutter/material.dart';import 'package:xxx/bloc/bloc.dart';import 'package:xxx/model ...

  2. keepalived + nginx 搭建负载均衡集群

    第一章 keepalived 1.1 keepalived 服务说明 Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现 ...

  3. 解决apache httpd列出目录列表中文乱码问题

    问题: 找了好几个方法都不对, 很多都是说修改AddDefaultCharset字段的, 下面是新的方法, 新测可行 在httpd.conf下, 随便找个地方把下面这个字段扔上去, 重启即可 Inde ...

  4. [转载]C++之路起航——标准模板库(deque)

    转自:https://www.cnblogs.com/grhyxzc/p/5074061.html deque(双端队列):http://baike.baidu.com/link?url=JTvA2c ...

  5. Mac OS X 避免产生临时文件 .DS_Store

    参考: 删除Mac中所有 .DS_Store 隐藏文件 Mac OS X 避免产生临时文件 .DS_Store .DS_Store 隐藏文件保存针对目录的特殊信息和设置配置,例如查看方式,图标大小以及 ...

  6. 基于 arduino 的低功耗无线传感结点设计

    发送端 仿真图: *仿真图中使用使用TMP传感器(LM34)代替实际使用的DHT11传感器. 连接方式: DHT11的正极(VCC)与5V电源接口连接 DHT11的负极(GND)与GND连接 DHT1 ...

  7. 【SMTP】常见错误码

    '* 邮件服务返回代码含义 '* 500 格式错误,命令不可识别(此错误也包括命令行过长) '* 501 参数格式错误 '* 502 命令不可实现 '* 503 错误的命令序列 '* 504 命令参数 ...

  8. Jquery动画效果(混合)

    1.图片随滚动条滚动 代码: var menuYloc = $("#right").offset().top; $(window).scroll(function () { var ...

  9. 环境准备——之Jdk安装

    JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK),没有JDK的话,无法编译Java程序(指java源码.java文件),如果想只运行Java程序(指cl ...

  10. servelet基础

    1.1           servlet简介 Java Servlet 是运行在 Web 服务器或应用服务器上的程序.她是一个浏览器和服务器之间的中间层.程序员开发程序,实现servlet的接口.S ...