1. 程式人生 > >python自動化-作業5.ATM+購物商城————A

python自動化-作業5.ATM+購物商城————A

模擬實現一個ATM + 購物商城程式:
額度 15000或自定義
實現購物商城,買東西加入 購物車,呼叫信用卡介面結賬
可以提現,手續費5%
每月22號出賬單,每月10號為還款日,過期未還,按欠款總額 萬分之5 每日計息
支援多賬戶登入
支援賬戶間轉賬
記錄每月日常消費流水
提供還款介面
ATM記錄操作日誌
提供管理介面,包括新增賬戶、使用者額度,凍結賬戶等。。。
使用者認證用裝飾器

完成時間:2018、12、14
專案名稱:
ATM + 購物商城程式v1.0版

工程檔案目錄:

start.py檔案:
import sys
import os

start_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(start_path)

from conf.config import *
from core.src import *
from core.atm import *


if __name__ == '__main__':
    while True:
        user 
= json.load(open('../db/admin_info', 'r')) print('歡迎來到ATM+完美購物商城'.center(100,'-')) in_user = input('請輸入您的賬號:\n>>>') if in_user == 'q': # 退出 Flog['exit_flog'] = True exit('您已經退出'.center(100,'-'
)) in_password = input('請輸入您的密碼:\n>>>') if in_password == 'q': # 退出 Flog['exit_flog'] = True exit('您已經退出'.center(100,'-')) for i in user: if in_user == i.get('username') and in_password == i.get('password'): Flog['login_flog'] = True print('登入成功'.center(50,'-')) logging.debug('debug') logging.info('--------<{}>成功登入--------'.format(i['username'])) Flog['tamp_item'] = i # tamp_item存放登入賬戶的所有資訊字典 Flog['tamp_item']['wares'] = {} # 拿購物車 Flog['tamp_item']['total_price'] = 0 # 單次購買商品總價 Flog['tamp_item']['this_buy'] = {} # 清空本次購買(上次購買) break if Flog['login_flog']: Flog['login_flog'] = False while True: print('請輸入您的選擇:\n1.ATM賬戶\n2.購物商城\n3.ATM管理(管理員賬戶可用)') select = input('請輸入您的選擇序號(q.退出登入):>>>') if select == 'q': print('退出成功'.center(50,'-')) logging.debug('debug') logging.info('--------<{}>退出成功--------'.format(Flog['tamp_item']['username'])) break if int(select) in range(1,4): if select == '1': Atm_System(user,Flog['tamp_item']['username']) # 進入ATM賬戶 if select == '2': Shopping_Mall(user) # 進入網上商城 if Flog['exit_flog']: break if select == '3': # 進入ATM管理(新增賬戶、提高額度、凍結賬戶) if not Flog['tamp_item']['manager']: print('請使用管理員賬戶登入'.center(50,'-')) break ATM_manage(user) # 只限管理員賬戶使用 if Flog['restart_system']: Flog['restart_system'] = False break else: print('您的輸入有誤,請重新輸入'.center(50,'-')) else: print('您的賬戶或密碼輸入錯誤,請重新輸入'.center(50,'-'))

atm.py檔案:

#author:    guogangzhi

import json
from conf.config import *

start_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(start_path)



def find_atminfo():                     # 查詢信用卡資訊
    print('登入的信用卡資訊'.center(100,'-'))
    print('賬戶名稱     信用卡可用額度      還款時間')
    print('{}           {}                 {}'.format(Flog['atm_tamp_item']['atm_user'],
                                               Flog['atm_tamp_item']['remainder'],
                                               Flog['atm_tamp_item']['repayment_time']))
    print('這個月的消費流水'.center(80,'-'))
    print('序號        購買時間                  數量       價格     商品名稱')
    Flog['atm_tamp_item']['consume_water'] = Flog['tamp_item']['Records_of_consumption']
    for buytime, item in Flog['atm_tamp_item']['consume_water'].items():
        print('---------------------------{}---------------------------'.format(buytime))
        for num, (x, i) in enumerate(item.items()):
            print('{: <3}       {: <20}       {: <3}        {}      {}'.format(num + 1, x, i[0], i[1], i[2]))

def withdraw_deposit():                 # 提現
    while True:
        out_money = input('請輸入你要提現的金額(手續費:5%)(q.退出提現):>>>')
        if out_money == 'q':
            print('退出提現'.center(50,'-'))
            break
        if out_money.isdigit():
            out_money = int(out_money)
            if Flog['atm_tamp_item']['remainder'] >= out_money*(1+0.05):
                Flog['atm_tamp_item']['remainder'] -= out_money*(1+0.05)
                print('提現成功'.center(50,'-'))
                logging.debug('debug')
                logging.info('{}賬戶提現成功'.format(Flog['atm_tamp_item']['atm_user']))
                break
            else:
                print('您的額度不夠,請減少提現金額'.center(50,'-'))
        else:
            print('您的輸入有誤,請重新輸入'.center(50,'-'))

def transfer_accounts(a):                # 轉賬
    while True:
        transfer_user = input('請輸入您要轉賬賬戶的使用者名稱(q.退出轉賬):>>>')
        if transfer_user == 'q':
            print('您已經退出轉賬'.center(50,'-'))
            break
        transfer_password = input('請輸入您要轉賬賬戶的密碼(q.退出轉賬):>>>')
        if transfer_password == 'q':
            print('您已經退出轉賬'.center(50,'-'))
            break
        for keys in a:
            for i in a[keys]:
                if transfer_user == i['atm_user'] and transfer_password == i['atm_password']:
                    print('賬戶存在'.center(50,'-'))
                    Flog['transfer_user_exist'] = True
                    Flog['atm_transfer_item'] = i
        if Flog['transfer_user_exist']:                         # 賬戶存在可以轉賬
            Flog['transfer_user_exist'] = False
            transfer_mormy = input('請輸入轉賬金額:>>>')
            if transfer_mormy.isdigit():
                transfer_mormy = int(transfer_mormy)
                if Flog['atm_tamp_item']['remainder'] >= transfer_mormy:
                    Flog['atm_transfer_item']['remainder'] += transfer_mormy        # 轉入賬戶+
                    Flog['atm_tamp_item']['remainder'] -= transfer_mormy            # 轉出賬戶-
                    print('轉賬成功'.center(50,'-'))
                    logging.debug('debug')
                    logging.info('{}賬戶提現成功'.format(Flog['atm_tamp_item']['atm_user']))
                    Flog['atm_transfer_item'] = None
                    break
                else:
                    print('額度不夠'.center(50,'-'))
            else:
                print('輸入錯誤'.center(50,'-'))
        else:
            for keys in a:
                for i in a[keys]:
                    if transfer_user == i['atm_user'] and '_' + transfer_password == i['atm_password']:
                        Flog['freeze_flog'] = True  # 判斷賬戶是否凍結
                        break
            if Flog['freeze_flog']:
                Flog['freeze_flog'] = False
                print('您的賬戶已經被凍結'.center(50,'-'))
            else:
                print('您輸入的賬戶不存在,請重新輸入'.center(50,'-'))

def repayment():            # 還款
    while True:
        in_repayment = input('請輸入還款金額(q.退出還款):>>>')
        if in_repayment == 'q':
            print('您現在已經退出還款'.center(50,'-'))
            break
        if in_repayment.isdigit():
            in_repayment = int(in_repayment)
            if in_repayment>0:
                Flog['atm_tamp_item']['remainder'] += in_repayment
                print('還款成功'.center(50,'-'))
                logging.debug('debug')
                logging.info('{}賬戶還款成功'.format(Flog['atm_tamp_item']['atm_user']))
                break
        else:
            print('您的輸入有誤,請重新輸入'.center(50,'-'))

def change_loginuser(u,a,n):             # 更改繫結ATM賬戶
    '''
    :param u:   user
    :param n:   繫結商城的帳號名
    :return:
    '''
    while True:
        in_username = input('請輸入您新繫結賬戶的使用者名稱(q.退出繫結賬戶):>>>')
        if in_username == 'q':
            print('您已經退出繫結賬戶'.center(50,'-'))
            break
        in_userpassword = input('請輸入您新繫結賬戶的密碼(q.退出繫結賬戶):>>>')
        if in_username == 'q':
            print('您已經退出繫結賬戶'.center(50,'-'))
            break
        for i in a[n]:
            if in_username == i['atm_user'] and in_userpassword == i['atm_password']:
                print('賬戶存在'.center(50, '-'))
                Flog['transfer_user_exist'] = True
                Flog['atm_transfer_item'] = i
        if Flog['transfer_user_exist']:
            Flog['tamp_item']['username'] = Flog['atm_transfer_item']['atm_user']
            a[Flog['tamp_item']['username']] = a[n]                         # 在atm中將繫結商城的帳號修改
            del(a[n])                                                     # 用的方法是刪除原來的新建一個鍵值對
            json.dump(u,open('../db/admin_info','w'))
            json.dump(a,open('../db/atm_admin_info','w'))
            print('繫結賬戶成功'.center(50,'-'))
            logging.debug('debug')
            logging.info('{}繫結賬戶成功'.format(Flog['tamp_item']['username']))
            Flog['transfer_user_exist'] = False
            Flog['atm_transfer_item'] = None
            Flog['restart_system'] = True                   # 重啟系統
            print('請重新登入系統'.center(100,'-'))
            break
        else:
            for i in a[n]:
                if in_username == i['atm_user'] and '_' + in_userpassword == i['atm_password']:
                    Flog['freeze_flog'] = True  # 判斷賬戶是否凍結
                    break
            if Flog['freeze_flog']:
                Flog['freeze_flog'] = False
                print('您的賬戶已經被凍結'.center(50,'-'))
            else:
                print('您輸入的賬戶/密碼錯誤,請重新輸入'.center(50,'-'))

def login_elseuser(a,n):                                      # 登入其他賬戶(商城賬戶的使用者的其他atm賬戶)
    while True:
        in_atmusername = input('請輸入您其他賬戶的使用者名稱(q.退出繫結賬戶):>>>')
        if in_atmusername == 'q':  # 退出
            print('退出登入其他使用者'.center(50,'-'))
            break
        in_atmpassword = input('請輸入您其他賬戶的密碼(q.退出繫結賬戶):>>>')
        if in_atmpassword.startswith('_'):
            print('這個賬戶已被凍結,請使用其他賬戶'.center(50,'-'))
            break
        if in_atmpassword == 'q':  # 退出
            print('退出登入其他使用者'.center(50, '-'))
            break
        for i in a[n]:
            if in_atmusername == i.get('atm_user') and in_atmpassword == i.get('atm_password'):
                Flog['atm_login_flog'] = True   # 置位登入成功標誌
                Flog['atm_tamp_item'] = i       # tamp_item登入賬戶的所有資訊字典
                break
        if Flog['atm_login_flog']:
            Flog['atm_login_flog'] = False
            print('賬戶切換成功'.center(50, '-'))
            break
        else:
            for i in atm[login_goods_user]:
                if in_atmusername == i.get('atm_user') and '_' + in_atmpassword == i.get('atm_password'):
                    Flog['freeze_flog'] = True  # 判斷賬戶是否凍結
                    break
            if Flog['freeze_flog']:
                Flog['freeze_flog'] = False
                print('您的賬戶已經被凍結'.center(50,'-'))
            else:
                print('您輸入的帳號、密碼有誤,請重新輸入'.center(50,'-'))

def Atm_System(u,login_goods_user):
    '''
    :param u:   admin_info中的所有資料
    :param login_goods_user:    商城的登入帳號名
    :return:
    '''
    while True:
        atm = json.load(open('../db/atm_admin_info', 'r'))
        in_atmpassword = input('請輸入您繫結商城的賬戶密碼(q.退出登入ATM):>>>')
        if in_atmpassword == 'q':                                                           # 退出
            Flog['quit_atm'] = True
            break
        for i in atm[login_goods_user]:
            if login_goods_user == i.get('atm_user') and in_atmpassword == i.get('atm_password'):
                Flog['atm_login_flog'] = True                                               # 置位登入成功標誌
                print('登入ATM成功'.center(50, '-'))
                logging.debug('debug')
                logging.info('{}登入ATM成功'.format(i['atm_user']))
                Flog['atm_tamp_item'] = i                           # tamp_item登入賬戶的信用卡密碼對應的資訊字典
                break
        if Flog['atm_login_flog']:
            Flog['atm_login_flog'] = False  # 復位登入成功標誌
            while True:
                print('【{}】請選擇您需要的服務專案:\n1.查詢信用卡資訊\n2.提現\n3.轉賬\n4.還款\n5.更改繫結ATM賬戶\n6.登入其他賬戶\n'.format(Flog['atm_tamp_item']['atm_user']))
                in_select = input('請輸入您的選擇(q.退出ATM、z.重啟系統):>>>')
                if in_select == 'q':                        # 退出ATM
                    Flog['quit_atm'] = True
                    break
                if in_select == 'z':                        # 退出整個系統
                    Flog['restart_system'] = True
                    break
                if int(in_select) in range(1,7):
                    if in_select == '1':                    # 1.查詢信用卡資訊
                        find_atminfo()
                    if in_select == '2':                    # 2.提現
                        withdraw_deposit()
                    if in_select == '3':                    # 3.轉賬
                        transfer_accounts(atm)
                    if in_select == '4':                    # 4.還款
                        repayment()
                    if in_select == '5':                    # 5.更改繫結ATM賬戶
                        change_loginuser(u,atm,login_goods_user)
                    if in_select == '6':                    # 6.登入其他賬戶(商城賬戶的使用者的其他atm賬戶)
                        login_elseuser(atm,login_goods_user)
                else:
                    print('輸入錯誤,請重新輸入'.center(50,'-'))
                if Flog['restart_system']:                  # 重新啟動系統
                    break
        else:
            for i in atm[login_goods_user]:
                if login_goods_user == i.get('atm_user') and '_' + in_atmpassword == i.get('atm_password'):
                    Flog['freeze_flog'] = True  # 判斷賬戶是否凍結
                    break
            if Flog['freeze_flog']:
                Flog['freeze_flog'] = False
                print('您的賬戶已經被凍結'.center(50,'-'))
            else:
                print('密碼輸入有誤,請重新輸入'.center(50,'-'))
        if Flog['restart_system']:  # 重新啟動系統
            break
        if Flog['quit_atm']:        # 退出ATM
            break
    if Flog['restart_system'] or Flog['quit_atm']:               # 判斷是否已經退出ATM
        json.dump(atm,open('../db/atm_admin_info','w'))         # 將資料儲存到檔案
        Flog['quit_atm'] = False
        print('您已經退出ATM'.center(100, '-'))
        logging.debug('debug')
        logging.info('{}登入ATM成功'.format(Flog['atm_tamp_item']['atm_user']))

def new_atm_user(u,a):                     # 新增賬戶
    while True:
        goods_user = input('請輸入您已經繫結的購物商城帳號:>>>')
        goods_password = input('請輸入您已經繫結的購物商城密碼:>>>')
        for i in u:
            if goods_user == i['username'] and goods_password == i['password']:
                Flog['goods_user_yes'] = True
                break
        if Flog['goods_user_yes']:              # 購物商城賬戶確認(表示在這個商城賬戶下建立ATM賬戶)
            in_user = input('請輸入您要在【{}】帳號下建立賬戶的使用者名稱>>>'.format(goods_user))
            in_password = input('請輸入您要在【{}】帳號下建立賬戶的密碼:>>>'.format(goods_user))
            new_user = {
                'atm_user': in_user,              # atm賬戶
                'atm_password': in_password,          # atm密碼
                'remainder': 15000,             # 信用卡額度
                'consume_water': {},            # 每月消費流水
                'repayment_time': '每個月10號', # 還款時間str
            }
            a[goods_user].append(new_user)           # 建立ATM賬戶完成
            # print(a[goods_user])
            json.dump(a, open('../db/atm_admin_info', 'w'))  # 將資料儲存到檔案
            print('ATM使用者建立完成'.center(50,'-'))
            logging.debug('debug')
            logging.info('{}ATM賬戶建立完成'.format(goods_user))
            break
        else:
            print('沒有這個繫結商城的帳號'.center(50,'-'))

def up_atm_remainder(a):                 # 提高ATM賬戶額度
    while True:
        in_user = input('請輸入要提高額度ATM賬戶的使用者名稱:>>>')
        in_password = input('請輸入要提高額度ATM賬戶的密碼:>>>')
        for value in a.values():
            for i in value:
                if in_user == i['atm_user'] and in_password == i['atm_password']:
                    Flog['tamp_flog_yes'] = True
                    Flog['atm_manage_item'] = i
                    print('已經確認賬戶'.center(50,'-'))
                    break
            if Flog['tamp_flog_yes']:
                break
        if Flog['tamp_flog_yes']:
            Flog['tamp_flog_yes'] = False
            in_mormy = input('額度提升到多少:>>>')
            if in_mormy.isdigit() and int(in_mormy)>15000:
                in_mormy = int(in_mormy)-15000
                Flog['atm_manage_item']['remainder'] += in_mormy
                json.dump(a, open('../db/atm_admin_info', 'w'))  # 將資料儲存到檔案
                print('ATM賬戶額度以提高'.center(50,'-'))
                logging.debug('debug')
                logging.info('{}賬戶額度以提高'.format(Flog['atm_manage_item']['atm_user']))
                break
            else:
                print('您的輸入有錯誤,請重新輸入'.center(50,'-'))
        else:
            print('沒有找到對應賬戶'.center(50,'-'))

def freeze_atm(a):                               # 凍結賬戶 在賬戶的密碼前面加‘_’,在登入時做判斷是否凍結。
    while True:
        in_user = input('請輸入要凍結的ATM賬戶的使用者名稱:>>>')
        in_password = input('請輸入要凍結的ATM賬戶的密碼:>>>')
        for value in a.values():
            for i in value:
                if in_user == i['atm_user'] and in_password == i['atm_password']:
                    Flog['tamp_flog_yes'] = True
                    Flog['atm_manage_item'] = i
                    print('已經確認賬戶'.center(50,'-'))
                    break
            if Flog['tamp_flog_yes']:
                break
        if Flog['tamp_flog_yes']:
            Flog['tamp_flog_yes'] = False
            Flog['atm_manage_item']['atm_password'] = '_'+Flog['atm_manage_item']['atm_password']
            json.dump(a, open('../db/atm_admin_info', 'w'))  # 將資料儲存到檔案
            print('ATM賬戶以凍結'.center(50,'-'))
            logging.debug('debug')
            logging.info('{}賬戶已被凍結'.format(Flog['atm_manage_item']['atm_user']))
            break
        else:
            print('沒有找到對應賬戶'.center(50,'-'))

def ATM_manage(u):                            # 進入ATM管理(新增賬戶、提高額度、凍結賬戶)
    while True:
        atm = json.load(open('../db/atm_admin_info', 'r'))
        print('ATM管理'.center(100,'-'))
        logging.debug('debug')
        logging.info('登入ATM管理')
        print('請選擇您的操作:\n1.新增ATM賬戶\n2.提高賬戶額度\n3.凍結賬戶\n')
        in_select= input('請輸入您的選擇(q.退出ATM管理、z.重啟系統):>>>')
        if in_select == 'q':
            Flog['quit_atm_manage'] = True          # 退出ATM管理標誌置位
            break
        if in_select == 'z':
            Flog['restart_system'] = True           # 重啟系統
            break
        if int(in_select) in range(1,4):
            if in_select == '1':                    # 1.新增ATM賬戶
                new_atm_user(u,atm)
            if in_select == '2':                    # 2.提高賬戶額度
                up_atm_remainder(atm)
            if in_select == '3':                    # 3.凍結賬戶
                freeze_atm(atm)
        else:
            print('您的輸入有誤請重新輸入'.center(50,'-'))
    if Flog['restart_system'] or Flog['quit_atm_manage']:
        Flog['quit_atm_manage'] = False
        json.dump(atm, open('../db/atm_admin_info', 'w'))           # 將資料儲存到檔案
        print('您已經退出ATM管理'.center(100,'-'))
        logging.debug('debug')
        logging.info('退出ATM管理')

src.py檔案:

import json
import time
from conf.config import *
from bin.start import *
start_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(start_path)

def add_gocar(goods_key,unit_price,num):                               # 將商品加入購物車(商品名稱、單價、數量)
    time_obj = time.localtime()  # 加入購物車時間戳
    time_str = '{}-{}-{} {}:{}:{}'.format(
        time_obj.tm_year,
        time_obj.tm_mon,
        time_obj.tm_mday,
        time_obj.tm_hour,
        time_obj.tm_min,
        time_obj.tm_sec)
    if goods_key in Flog['tamp_item']['wares'].keys():
        select_value_num = Flog['tamp_item']['wares'][goods_key][0] + num  # 如果有同樣的商品和之前的購買數量相加
    else:
        select_value_num = num
        Flog['tamp_item']['wares'][goods_key] = [select_value_num,select_value_num*unit_price,time_str]  # 存入使用者商品名稱、數量、價格、時間戳到使用者賬戶

def display_gocar():
    print('您現在購物車中的商品有'.center(80,'-'))
    print('序號       名稱                        數量     價格')
    Flog['tamp_tamp'] = Flog['tamp_item'].get('wares')
    Flog['tamp_item']['total_price'] = 0
    for num, i in enumerate(Flog['tamp_tamp'].items()):
        Flog['tamp_item']['total_price'] += i[1][1]
        print('{: <3}      {: <15}{: <3}      {}'.format(num + 1, i[0], i[1][0], i[1][1]))
    print('-'*60)
    print('總價:{: >50}'.format(Flog['tamp_item']['total_price']))
    print('-' * 90)

def credit_card_interface():                 # 結賬
    if Flog['tamp_item']['total_price']:                                            # 購物車不為空
        if Flog['tamp_item']['remainder'] >= Flog['tamp_item']['total_price']:              # 判斷是否買得起
            Flog['tamp_item']['remainder'] -= Flog['tamp_item']['total_price']              # 從信用卡額度扣除
            print('購買成功'.center(50, '-'))
            time_obj = time.localtime()  # 下單時間戳
            time_str = '{}-{}-{} {}:{}:{}'.format(
                time_obj.tm_year,
                time_obj.tm_mon,
                time_obj.tm_mday,
                time_obj.tm_hour,
                time_obj.tm_min,
                time_obj.tm_sec)
            Flog['tamp_item']['Records_of_consumption'][time_str] = {}
            for w_name, w_value in Flog['tamp_item']['wares'].items():  # 購買時間/購買商品名稱 在字典中的位置互換
                Flog['tamp_item']['Records_of_consumption'][time_str].update(
                    {w_value[2]: [w_value[0], w_value[1], w_name]})     # 儲存到《購買記錄》

            Flog['tamp_item']['this_buy'].update(Flog['tamp_item']['wares'])                # 儲存到《本次購買記錄》
            Flog['tamp_item']['wares'] = {}                             # 清空購物車
        else:
            print('您的信用卡額度不足,請及時還款'.center(50, '-'))
    else:
        print('您的購物車為空'.center(50,'-'))

def Shopping_Mall(u):
    print('購物車網上商城'.center(100, '-'))
    while True:
        goods_list = [goods]
        while True:
            print('請選擇您需要的商品序號:')
            type_value = [*goods_list[-1].values()][0]
            if type(type_value) == int:                                                 # 判斷是商品列表中是最後一層   加¥價格
                for index,i in enumerate(goods_list[-1]):
                    print('{}.{: <10}  ¥{}'.format(str(index+1),i,[*goods_list[-1].values()][index]))
            else:                                                                       # 不是最後一層
                for index,key in enumerate(goods_list[-1]):
                    print('{}.{}'.format(str(index+1),key))

            in_goods_class = input('你選擇的商品序號是(b.使用者資訊查詢、c.充值、j.進入購物車、q.退出商城、z.返回上一級):>>>')
            if in_goods_class =='q':                                                    # 退出
                Flog['exit_flog'] = True
                break
            if in_goods_class == 'b':                                                   # 停止購買
                Flog['stop_flog'] = True
                break
            if in_goods_class == 'c':                                                   # 充值
                money = input('請輸入您要充值的金額:>>>')
                if money.isdigit():
                    Flog['tamp_item']['remainder'] += int(money)
                    print('錢已到賬,您現在的信用卡賬戶餘額是:【{}】'.format(Flog['tamp_item']['remainder']))
                    break
                else:
                    print('輸入錯誤,請重新選擇購買商品或充值!'.center(40,'-'))
                    break
            if in_goods_class == 'j':                                                   # 進入購物車
                display_gocar()
                isnot_account = input('是否結賬(y.是、n.清空購物車、任意鍵.還要買東西):>>>')
                if isnot_account == 'y':
                    credit_card_interface()     # 結算

                    break
                if isnot_account == 'n':
                    Flog['tamp_item']['wares'] = {}  # 清空購物車
                    print('購物車已經清空'.center(50,'-'))
                    break
                else:
                    break
            if in_goods_class == 'z':
                goods_list.pop()
                continue
            if in_goods_class.isdigit():
                in_goods_class=int(in_goods_class)
            else:
                print('輸入錯誤,請重新輸入您要的商品序號!'.center(20,'-'))
            if in_goods_class in range(1,len(goods_list[-1])+1):                  # 是否有這個商品類
                select_goods_class = [*goods_list[-1].values()][in_goods_class-1]       # select_goods_class是所選擇的字典的值
                select_goods_keys = [*goods_list[-1].keys()][in_goods_class-1]          # select_goods_key是所選擇的字典的鍵
                goods_list.append(select_goods_class)                                   # 壓棧
                if (type(select_goods_class) == int):                                   # 值是數字,說明是(最後層)
                    in_num = input('請輸入購買數量(b.使用者資訊查詢、j.購物車、q.退出商城、z.返回上一級):>>>')
                    if in_num == 'q':                                                   # 退出
                        Flog['exit_flog'] = True
                        break
                    if in_num == 'b':                                                   # 停止購買
                        Flog['stop_flog'] = True
                        break
                    if in_num == 'c':                                                   # 充值
                        money = input('請輸入您要充值的金額:>>>')
                        if money.isdigit():
                            Flog['tamp_item']['remainder'] += int(money)
                            print('錢已到賬,您現在的賬戶餘額是:【{}】'.format(Flog['tamp_item']['remainder']))
                            break
                        else:
                            print('輸入錯誤,請重新選擇購買商品或充值!'.center(40,'-'))
                            break
                    if in_num == 'j':                                                   # 進入購物車
                        display_gocar()
                        isnot_account = input('是否結賬(y.是、任意鍵.還要買東西):>>>')
                        if isnot_account == 'y':
                            credit_card_interface()  # 結算
                            break
                        else:
                            break
                    if in_num == 'z':                                                   # 返回上一級
                        goods_list.pop()
                        continue
                    in_num = int(in_num)
                    add_gocar(select_goods_keys,select_goods_class,in_num)                               # 加入購物車
                    break
        if Flog['exit_flog']:
            break
        while Flog['stop_flog']:                                                                                        # 查詢模式
            print('請選擇你要查詢的內容:\n1.您當前的餘額\n2.您的購物車(已付款)\n3.您的購買記錄')
            in_find_num = input('請輸入你要查詢的內容(b.採購商品、c.充值、q.退出):>>>')
            if in_find_num == '1':                                                                                  # 檢視當前使用者餘額
                while True:
                    is_not_money = input('您當前的餘額為:【{}】,是否充值(c.充值、任意鍵.退出):>>>'.format(Flog['tamp_item']['remainder']))
                    if is_not_money == 'c':
                        money = input('請輸入您要充值的金額:>>>')
                        if money.isdigit():
                            Flog['tamp_item']['remainder'] += int(money)
                            print('錢已到賬,您現在的賬戶餘額是:【{}】'.format(Flog['tamp_item']['remainder']))
                            break