zoukankan      html  css  js  c++  java
  • python之编写购物车(第二天) 凯

    作业:
    编写购物车

    具体实现了如下功能:
    1、可购买的商品信息显示
    2、显示购物车内的商品信息、数量、总金额
    3、购物车内的商品数量进行增加、减少和商品的删除
    4、用户余额的充值
    5、用户购买完成进行结账,将最终余额回写到用户文件中。


    一、用户文件说明:
    kevin 123 50000
    sky   123 54000
    mobi  123 80000
    用户信息

      其中第一列为用户名,第二列为密码,第三列为帐户余额

    二、流程图如下:

     

    三、具体python2.7下代码如下:

    #!/usr/bin/python27
    #_*_ coding:utf-8 _*_
    
    import sys,os,getpass,time
    
    ######################raw_input输入字符类型转化函数#######################
    def input_handle(s):
        if str.isdigit(s):                                                     ###对输入是否是数字进行判断###
            s = int(s)                                                         ###如果输出的是个数字,则转化为整数类型###
        return s                                                               ###返回输入字符###
    
    #################################框架函数#################################
    def framework(user='',init_money='',now_money='',recharge_money='',value=''):
        os.system('clear')                                                     ###清屏###
        init_money = int(init_money)                                           ###初始总金额数字化###
        now_money= int(now_money)                                              ###当前余额数字化###
        recharge_money = int(recharge_money)                                   ###充值金额数字化###
        print(''.center(82,'*'))
        print('*'+' '.center(80)+'*')
        print(''.ljust(1,'*')+'欢迎来到sky购物平台'.center(88,' ')+''.ljust(1,'*'))
        print('*'+' '.center(80)+'*')
        print(''.center(82,'*'))
        info = '会员 : {0} 金额 : {1} 当前余额 : {2} 充值金额 : {3} 购物车 : {4}'
        info = info.format(user,init_money,now_money,recharge_money,value)
        print(info.center(82,' '))
        print
    #    print('''
    #*********************************************************************************
    #*                                                                               *
    #*                                 欢迎来到sky购物平台                           *
    #*                                                                               *
    #*********************************************************************************
    #会员:%s\t金额:%d\t当前余额:%d\t充值金额:%d\t购物车:%d
    #''' % (user,init_money,now_money,recharge_money,value))
    
    ########################商品列表展示函数###################################
    def goods_list_show(my_dict):
    
        local_dict = {}                                                        ###定义函数内部字典###
        ############对商品列表进行遍历并加上数字编号###########################
        i = 1
        print('商品列表 : ')
        print('=================================================================================')
        print('%-5s  %-20s  %-20s  %-20s  %-20s' % ('编号','商品名称','商品价格(元)','商品总数量(个)','商品剩余数量(个)'))
        for k in my_dict:
            v = my_dict[k]
            if type(v) is dict:
                print('%-5d  %-20s  %-20d  %-20d  %-20d' % (i,k,v['price'],v['sum'],v['num']))
                local_dict[i] = [k,v['price'],v['num'],v['sum']]               ###将商品列表赋值到local_dict###
            i += 1
        print('=================================================================================')
    
        return local_dict                                                      ###返回格式化后的字典###
    
    ########################显示购物车商品列表函数#############################
    def cart_goods_show(show_dict):
        show_all_sum = 0                                                       ###初始化购物车商品总价###
        show_all_num = 0                                                       ###初始化购物车商品数量###
        ############对商品列表进行遍历并加上数字编号###########################
        print('%-5s  %-20s  %-20s  %-20s  %-20s  %-20s' % ('编号','商品名称','商品价格(元)','商品总数量(个)','购买数量(个)','购买金额(元)'))
        for k in show_dict:
            v = show_dict[k]
            if type(v) is list:
                print('%-5s  %-20s  %-20d  %-20d  %-20d  %-20d' % (k,v[0],v[1],v[2],v[3],v[4]))
                show_all_sum += v[4]                                           ###商品总价累计###
                show_all_num += 1                                              ###商品个数累计###
        print('请确认您购买商品,总金额:%d(元)'.center(84,'#') % show_all_sum)
        return (show_all_sum,show_all_num)                                     ###返回商品总价和商品个数###
    
    ########################修改购物车商品列表函数#############################
    def cart_goods_modify(modify_dict,modify_goods_dict):
    
        a_flag = 1                                                             ###初始化第一层编号循环标记###
        while a_flag:
            index = raw_input('请输入商品编号 | 完成修改(q) : ')
            if len(index) != 0:                                                ###商品编号不为空进行字符转化###
                index = input_handle(index)
            if index == 'q':                                                   ###输入为q,即完成修改退出###
                break
            elif index in modify_dict:                                         ###输入为正确编号###
                b_flag = 1                                                     ###初始化第二层数量循环标记###
                name = modify_dict[index][0]                                   ###对name赋值商品名称###
                while b_flag:
                    num = raw_input('请输入新的商品数量(最大值为%d) |  完成修改(q) : ' % modify_dict[index][2] )
                    if len(num) != 0:                                          ###商品数量不为空进行字符转化###
                        num = input_handle(num)
                    if num == 'q':                                             ###输入为q,即完成修改退出###
                        break
                    elif num == 0:                                             ###输入为0,即删除字典中的这个条目###
                        modify_goods_dict[name]['num'] = modify_dict[index][2] ###商品列表中的商品数量变为初始值###
                        del modify_dict[index]                                 ###购物车删除这个商品###
                        b_flag = 0
                    elif num > 0 and num <= modify_dict[index][2]:             ###输入为要求数字,则进行数量和金额修改###
                        modify_dict[index][3] = num
                        modify_dict[index][4] = modify_dict[index][1] * num
                        modify_goods_dict[name]['num'] = modify_dict[index][2] - num    ###更新商品列表中的商品数量###
                        b_flag = 0
                    else:
                        pass
            else:
                pass
        return (modify_dict,modify_goods_dict)                                 ###返回修改后的购物车商品列表###
    
    
    #########################购物车展示函数####################################
    def shopping_cart_show(my_cart,my_goods_dict):
    
        print('欢迎来到您的购物车'.center(80,'#'))
        goods_all_sum = 0                                                      ###初始化购物车商品总金额###
        goods_all_num = 0                                                      ###初始化购物车商品总数量###
    
        if my_cart:                                                            ###购物车参数不为空###
            ###########调用购物车商品列表函数,并返回商品总金额和总数量#########
            (goods_all_sum,goods_all_num)  = cart_goods_show(my_cart)
    
            choice = raw_input('请进行如下操作 : 修改记录(c) | 继续购物(!c)')
            if choice == 'c':                                                  ###对购物车商品列表进行修改###
                (my_shop_cart,my_goods_dict) = cart_goods_modify(my_cart,my_goods_dict)  ###调用商品修改函数,并返回新的商品列表###
                (goods_all_sum,goods_all_num) = cart_goods_show(my_shop_cart)  ###购物车商品展示,并返回最新的商品总价###
            else:
                pass
        else:
            print('当前您的购物车为空'.center(80,' '))
    
        time.sleep(2)
        return (goods_all_sum,goods_all_num,my_goods_dict)                      ###返回购物车中商品总价、数量和用户商品列表###
    
    
    #########################余额充值函数######################################
    def balance_recharge(recharge_init_balance,recharge_now_balance,recharge_money):
        recharge_flag = 1                                                       ###充值循环参数初始化###
        while recharge_flag:
            recharge_num = raw_input('请输入充值金额 | 返回(b) | 退出(q):')
            if len(recharge_num) != 0:                                          ###如果输入非空,对输入进行判断并转化类型###
                recharge_num = input_handle(recharge_num)
            if recharge_num == 'q':                                             ###如果输入为q,则退出程序###
                sys.exit(0)
            elif recharge_num == 'b':                                           ###如果输入为b,则返回第一层循环,重新选择商品编号###
                break
            elif type(recharge_num) is int and recharge_num > 0 :               ###输入要求充值金额###
                recharge_init_balance += recharge_num                           ###初始金额增加###
                recharge_now_balance += recharge_num                            ###当前余额增加###
                recharge_money += recharge_num                                  ###充值金额增加###
                recharge_flag = 0                                               ###改变充值循环参数###
                print('充值成功,请查收'.center(80,' '))                        ###提示充值成功###
            else:
                pass
        return (recharge_init_balance,recharge_now_balance,recharge_money)      ###返回初始、当前、充值金额###
    
    
    #########################用户结帐函数######################################
    def user_billing(billing_list,my_cart,billing_balance):
    
        print('欢迎来到结算菜单'.center(80,'#'))
        if my_cart:                                                             ###购物车参数不为空###
            #############调用购物车商品列表函数################################
            cart_goods_show(my_cart)
            billing_flag = raw_input('请确认是否商品结算(y | n):')
            if billing_flag == 'y':                                             ###商品结算确认###
                billing_file = open('info.txt','w')                             ###打开读写帐号文件###
                for user_info in billing_list:
                    print(user_info)
                    billing_file.writelines(user_info)                          ###回写用户列表信息###
                billing_file.close()                                            ###关闭帐号文件###
                sys.exit('结帐成功,你当前余额 :%d'.center(80,' ') % billing_balance)
            else:
                print('退出结算菜单,继续购物'.center(80,' '))
                time.sleep(2)
        else:
            print('当前您的购物车为空,无需结算'.center(80,' '))
            time.sleep(2)
    
    
    
    ################################主程序开始##################################
    
    ################################商品列表####################################
    ###num为当前商品数量,sum为商品总数量###
    goods_list = {
                 'iphone6': {'price':6000,'num':10,'sum':10},
                 'ipad': {'price':3000,'num':20,'sum':20},
                 'mi4': {'price':2000,'num':43,'sum':43},
                 'huawei6_plus': {'price':1999,'num':8,'sum':8},
    }
    
    i = 0
    while i < 3:                                                                ###只要用户登录异常不超过3次就不断循环###
        username = raw_input('请输入用户名:')                                  ###输入用户名###
        password = raw_input('请输入密码:')                                    ###输入隐藏密码###
        user_file = open('info.txt','r')                                        ###打开帐号文件###
        user_list = user_file.readlines()                                       ###用户列表信息###
        user_file.close()                                                       ###关闭帐号文件###
    
    
        for user_line in user_list:                                             ###对帐号文件进行遍历###
            ######################分别获取帐号、密码信息和当前余额##############
            (user,passwd,init_balance) = user_line.strip('\n').split()
    
            init_balance = int(init_balance)                                    ###对总金额进行数字化###
            now_balance = init_balance                                          ###对当前余额进行数字化###
            my_goods_sum = 0                                                    ###初始化购买商品总金额###
    
            if username == user and password == passwd:                         ###如用户名和密码正常匹配###
                user_shopping_cart = {}                                         ###初始化用户购物车字典###
                user_shopping_cart_count = 0                                    ###初始化用户购物车内商品的数量###
                recharge_value = 0                                              ###初始化充值金额###
                line_num = user_list.index(user_line)                           ###赋值匹配用户的下标###
                first_flag = 1                                                  ###定义第一层循环变量参数###
    
                while first_flag:
    
                    ########################调用框架函数输出用户信息############
                    framework(username,init_balance,now_balance,recharge_value,user_shopping_cart_count)
    
                    goods_output_dict = goods_list_show(goods_list)             ###调用商品列表展示函数输出商品信息###
                    print(now_balance)
                    goods_index = raw_input('请选择菜单 :输入商品编号 | 购物车(c) | 余额充值(r) | 结帐(b) | 退出(q) : ')
    
                    if len(goods_index) != 0:                                   ###如果输入非空,对输入进行判断并转化类型###
                        goods_index = input_handle(goods_index)
    
                    if goods_index == 'q':                                      ###如果输入为q,则退出程序###
                        sys.exit(0)
    
                    elif goods_index == 'c':                                    ###如果输入为c,则展示购物车###
                        ###调用购物车显示函数,并返回购物车商品总金额###########
                        (my_goods_sum,user_shopping_cart_count,goods_list) = shopping_cart_show(user_shopping_cart,goods_list)
                        now_balance = init_balance - my_goods_sum               ###计算出当前余额###
                        if now_balance < 0:
                            print('您的余额不足,请及时充值,谢谢')
                            time.sleep(2)
    
                    elif goods_index == 'r':                                    ###如果输入为r,则进行余额充值###
                        (init_balance,now_balance,recharge_value) = balance_recharge(init_balance,now_balance,recharge_value)
    
                    elif goods_index == 'b':                                    ###如果输入为b,则进入结账菜单###
                        ##############更新用户文件中用户的余额##################
                        user_list[line_num] = user + ' ' + passwd + ' ' + repr(now_balance) + '\n' 
                        print(user_list[line_num])
                        user_billing(user_list,user_shopping_cart,now_balance)  ###调用结算函数###
    
                    elif goods_index in goods_output_dict:                      ###输入编号为正确的商品编号###
    
                        ###############################取出goods_index商品列表信息并进行赋值和展示############
                        (goods_name,goods_price,goods_num) = (goods_output_dict[goods_index][0], goods_output_dict[goods_index][1], goods_output_dict[goods_index][2])
                        print('【 编号:%-5d \t 名称:%-15s \t 价格:%-5d(元) \t 数量:%-5d(个)】' % (goods_index,goods_name,goods_price,goods_num))
    
                        second_flag = 1                                         ###定义第二层循环变量参数###
                        while second_flag:
                            buy_num = raw_input('请输入购买商品个数(最大值为%d) | 返回(b) | 退出(q): ' % goods_num)
                            if len(buy_num) != 0:                               ###如果输入非空,对输入进行判断并转化类型###
                                buy_num = input_handle(buy_num)
                            if buy_num == 'q':                                  ###如果输入为q,则退出程序###
                                sys.exit(0)
                            elif buy_num == 'b':                                ###如果输入为b,则返回第一层循环,重新选择商品编号###
                                break
                            elif buy_num > 0 and buy_num <= goods_num:          ###输入要求商品数量###
                                my_goods_sum = goods_price * buy_num            ###计算购买商品的总金额###
                                if my_goods_sum <= now_balance:
                                    print('购买商品 %s 总价格为 : %d' % (goods_name,my_goods_sum))
                                    add_flag = raw_input('请确认是否加入购物车(y | n):')
                                    if add_flag == 'y':                         ###购买商品确认加入购物车###
    
                                        ###判断购物车不存在该商品###############
                                        if goods_index not in user_shopping_cart:
                                            user_shopping_cart_count += 1       ###购物车里商品数量加1###
                                            ####将该商品加入用户购物车字典中####
                                            user_shopping_cart[goods_index] = [goods_name,goods_price,goods_num,buy_num,my_goods_sum]
                                        ####购物车已经存在该商品,则进行数量和金额累计计算############
                                        else:
                                            user_shopping_cart[goods_index][3] += buy_num
                                            user_shopping_cart[goods_index][4] += my_goods_sum
    
                                        now_balance -= my_goods_sum             ###计算出当前余额###
    
                                        goods_list[goods_name]['num'] -= buy_num   ###商品列表的商品数量更新###
                                        second_flag = 0                         ###设置第二层循环值为0,结束第二层循环####
    
                                    else:
                                        break
                                else:
                                    print('您的余额不足,请充值或重新选择,谢谢')
                                    time.sleep(2)
                            else:
                                pass
                    else:
                        pass
        else:
            if i != 2:                                                         ###i=2时,是最后一次机会,不用在提示还剩余0次机会了###
                print('用户或密码错误,请重新输入,还有 %d 次机会' % (2 - i))
        i += 1                                                                 ###当用户输入错误时,循环值增加1###
    else:
        sys.exit('用户或密码输入错误超过三次,退出系统,欢迎下次光临')          ###用户输入三次错误后,异常退出###
    购物车python2.7

    四、具体python3.4下代码如下:

    #!/usr/bin/python34
    
    import sys,os,getpass,time
    
    ######################input输入字符类型转化函数###########################
    def input_handle(s):
        if str.isdigit(s):                                                     ###对输入是否是数字进行判断###
            s = int(s)                                                         ###如果输出的是个数字,则转化为整数类型###
        return s                                                               ###返回输入字符###
    
    #################################框架函数##################################
    def framework(user='',init_money='',now_money='',recharge_money='',value=''):
        os.system('clear')                                                     ###清屏###
        init_money = int(init_money)                                           ###初始总金额数字化###
        now_money= int(now_money)                                              ###当前余额数字化###
        recharge_money = int(recharge_money)                                   ###充值金额数字化###
        print('''
    *********************************************************************************
    *                                                                               *
    *                                 欢迎来到sky购物平台                           *
    *                                                                               *
    *********************************************************************************
    会员:%s\t金额:%d\t当前余额:%d\t充值金额:%d\t购物车:%d
    ''' % (user,init_money,now_money,recharge_money,value))
    
    ########################商品列表展示函数###################################
    def goods_list_show(my_dict):
    
        local_dict = {}                                                        ###定义函数内部字典###
        ############对商品列表进行遍历并加上数字编号###########################
        i = 1
        print('商品列表 : ')
        print('=================================================================================')
        print('%-5s  %-20s  %-10s  %-10s  %-10s' % ('编号','商品名称','商品价格(元)','商品总数量(个)','商品剩余数量(个)'))
        for k in my_dict:
            v = my_dict[k]
            if type(v) is dict:
                print('%-5d  %-20s  %-10d  %-10d  %-10d' % (i,k,v['price'],v['sum'],v['num']))
                local_dict[i] = [k,v['price'],v['num'],v['sum']]               ###将商品列表赋值到local_dict###
            i += 1
        print('=================================================================================')
    
        return local_dict                                                      ###返回格式化后的字典###
    
    ########################显示购物车商品列表函数#############################
    def cart_goods_show(show_dict):
        show_all_sum = 0                                                       ###初始化购物车商品总价###
        show_all_num = 0                                                       ###初始化购物车商品数量###
        ############对商品列表进行遍历并加上数字编号###########################
        print('%-5s \t %-20s \t %-10s \t %-10s \t %-10s \t %-10s' % ('编号','商品名称','商品价格(元)','商品总数量(个)','购买数量(个)','购买金额(元)'))
        for k in show_dict:
            v = show_dict[k]
            if type(v) is list:
                print('%-5s \t %-20s \t %-10d \t %-10d \t %-10d \t %-10d' % (k,v[0],v[1],v[2],v[3],v[4]))
                show_all_sum += v[4]                                           ###商品总价累计###
                show_all_num += 1                                              ###商品个数累计###
        print('请确认您购买商品,总金额:%d(元)'.center(84,'#') % show_all_sum)
        return (show_all_sum,show_all_num)                                     ###返回商品总价和商品个数###
    
    ########################修改购物车商品列表函数#############################
    def cart_goods_modify(modify_dict,modify_goods_dict):
    
        a_flag = 1                                                             ###初始化第一层编号循环标记###
        while a_flag:
            index = input('请输入商品编号 | 完成修改(q) : ')
            if len(index) != 0:                                                ###商品编号不为空进行字符转化###
                index = input_handle(index)
            if index == 'q':                                                   ###输入为q,即完成修改退出###
                break
            elif index in modify_dict:                                         ###输入为正确编号###
                b_flag = 1                                                     ###初始化第二层数量循环标记###
                name = modify_dict[index][0]                                   ###对name赋值商品名称###
                while b_flag:
                    num = input('请输入新的商品数量(最大值为%d) |  完成修改(q) : ' % modify_dict[index][2] )
                    if len(num) != 0:                                          ###商品数量不为空进行字符转化###
                        num = input_handle(num)
                    if num == 'q':                                             ###输入为q,即完成修改退出###
                        break
                    elif num == 0:                                             ###输入为0,即删除字典中的这个条目###
                        modify_goods_dict[name]['num'] = modify_dict[index][2] ###商品列表中的商品数量变为初始值###
                        del modify_dict[index]                                 ###购物车删除这个商品###
                        b_flag = 0
                    elif num > 0 and num <= modify_dict[index][2]:             ###输入为要求数字,则进行数量和金额修改###
                        modify_dict[index][3] = num
                        modify_dict[index][4] = modify_dict[index][1] * num
                        modify_goods_dict[name]['num'] = modify_dict[index][2] - num    ###更新商品列表中的商品数量###
                        b_flag = 0
                    else:
                        pass
            else:
                pass
        return (modify_dict,modify_goods_dict)                                 ###返回修改后的购物车商品列表###
    
    
    #########################购物车展示函数####################################
    def shopping_cart_show(my_cart,my_goods_dict):
    
        print('欢迎来到您的购物车'.center(80,'#'))
        goods_all_sum = 0                                                      ###初始化购物车商品总金额###
        goods_all_num = 0                                                      ###初始化购物车商品总数量###
    
        if my_cart:                                                            ###购物车参数不为空###
            ###########调用购物车商品列表函数,并返回商品总金额和总数量#########
            (goods_all_sum,goods_all_num)  = cart_goods_show(my_cart)
    
            choice = input('请进行如下操作 : 修改记录(c) | 继续购物(!c)')
            if choice == 'c':                                                  ###对购物车商品列表进行修改###
                (my_shop_cart,my_goods_dict) = cart_goods_modify(my_cart,my_goods_dict)  ###调用商品修改函数,并返回新的商品列表###
                (goods_all_sum,goods_all_num) = cart_goods_show(my_shop_cart)  ###购物车商品展示,并返回最新的商品总价###
            else:
                pass
        else:
            print('当前您的购物车为空'.center(80,' '))
    
        time.sleep(2)
        return (goods_all_sum,goods_all_num,my_goods_dict)                      ###返回购物车中商品总价、数量和用户商品列表###
    
    
    #########################余额充值函数######################################
    def balance_recharge(recharge_init_balance,recharge_now_balance,recharge_money):
        recharge_flag = 1                                                       ###充值循环参数初始化###
        while recharge_flag:
            recharge_num = input('请输入充值金额 | 返回(b) | 退出(q):')
            if len(recharge_num) != 0:                                          ###如果输入非空,对输入进行判断并转化类型###
                recharge_num = input_handle(recharge_num)
            if recharge_num == 'q':                                             ###如果输入为q,则退出程序###
                sys.exit(0)
            elif recharge_num == 'b':                                           ###如果输入为b,则返回第一层循环,重新选择商品编号###
                break
            elif type(recharge_num) is int and recharge_num > 0 :               ###输入要求充值金额###
                recharge_init_balance += recharge_num                           ###初始金额增加###
                recharge_now_balance += recharge_num                            ###当前余额增加###
                recharge_money += recharge_num                                  ###充值金额增加###
                recharge_flag = 0                                               ###改变充值循环参数###
                print('充值成功,请查收'.center(80,' '))                        ###提示充值成功###
            else:
                pass
        return (recharge_init_balance,recharge_now_balance,recharge_money)      ###返回初始、当前、充值金额###
    
    
    #########################用户结帐函数######################################
    def user_billing(billing_list,my_cart,billing_balance):
    
        print('欢迎来到结算菜单'.center(80,'#'))
        if my_cart:                                                             ###购物车参数不为空###
            #############调用购物车商品列表函数################################
            cart_goods_show(my_cart)
            billing_flag = input('请确认是否商品结算(y | n):')
            if billing_flag == 'y':                                             ###商品结算确认###
                billing_file = open('info.txt','w')                             ###打开读写帐号文件###
                for user_info in billing_list:
                    billing_file.writelines(user_info)                          ###回写用户列表信息###
                billing_file.close()                                            ###关闭帐号文件###
                sys.exit('结帐成功,你当前余额 :%d'.center(80,' ') % billing_balance)
            else:
                print('退出结算菜单,继续购物'.center(80,' '))
                time.sleep(2)
        else:
            print('当前您的购物车为空,无需结算'.center(80,' '))
            time.sleep(2)
    
    
    
    ################################主程序开始##################################
    
    ################################商品列表####################################
    ###num为当前商品数量,sum为商品总数量###
    goods_list = {
                 'iphone6': {'price':6000,'num':10,'sum':10},
                 'ipad': {'price':3000,'num':20,'sum':20},
                 'mi4': {'price':2000,'num':43,'sum':43},
                 'huawei6_plus': {'price':1999,'num':8,'sum':8},
    }
    
    i = 0
    while i < 3:                                                                ###只要用户登录异常不超过3次就不断循环###
        username = input('请输入用户名:')                                      ###输入用户名###
        password = input('请输入密码:')                                        ###输入隐藏密码###
        user_file = open('info.txt','r')                                        ###打开帐号文件###
        user_list = user_file.readlines()                                       ###用户列表信息###
        user_file.close()                                                       ###关闭帐号文件###
    
    
        for user_line in user_list:                                             ###对帐号文件进行遍历###
            ######################分别获取帐号、密码信息和当前余额##############
            (user,passwd,init_balance) = user_line.strip('\n').split()
    
            init_balance = int(init_balance)                                    ###对总金额进行数字化###
            now_balance = init_balance                                          ###对当前余额进行数字化###
            my_goods_sum = 0                                                    ###初始化购买商品总金额###
    
            if username == user and password == passwd:                         ###如用户名和密码正常匹配###
                user_shopping_cart = {}                                         ###初始化用户购物车字典###
                user_shopping_cart_count = 0                                    ###初始化用户购物车内商品的数量###
                recharge_value = 0                                              ###初始化充值金额###
                line_num = user_list.index(user_line)                           ###赋值匹配用户的下标###
                first_flag = 1                                                  ###定义第一层循环变量参数###
    
                while first_flag:
    
                    ########################调用框架函数输出用户信息############
                    framework(username,init_balance,now_balance,recharge_value,user_shopping_cart_count)
    
                    goods_output_dict = goods_list_show(goods_list)             ###调用商品列表展示函数输出商品信息###
                    goods_index = input('请选择菜单 :输入商品编号 | 购物车(c) | 余额充值(r) | 结帐(b) | 退出(q) : ')
    
                    if len(goods_index) != 0:                                   ###如果输入非空,对输入进行判断并转化类型###
                        goods_index = input_handle(goods_index)
    
                    if goods_index == 'q':                                      ###如果输入为q,则退出程序###
                        sys.exit(0)
    
                    elif goods_index == 'c':                                    ###如果输入为c,则展示购物车###
                        ###调用购物车显示函数,并返回购物车商品总金额###########
                        (my_goods_sum,user_shopping_cart_count,goods_list) = shopping_cart_show(user_shopping_cart,goods_list)
                        now_balance = init_balance - my_goods_sum               ###计算出当前余额###
                        if now_balance < 0:
                            print('您的余额不足,请及时充值,谢谢')
                            time.sleep(2)
    
                    elif goods_index == 'r':                                    ###如果输入为r,则进行余额充值###
                        (init_balance,now_balance,recharge_value) = balance_recharge(init_balance,now_balance,recharge_value)
    
                    elif goods_index == 'b':                                    ###如果输入为b,则进入结账菜单###
                        ##############更新用户文件中用户的余额##################
                        user_list[line_num] = user + ' ' + passwd + ' ' + repr(now_balance) + '\n' 
                        user_billing(user_list,user_shopping_cart,now_balance)  ###调用结算函数###
    
                    elif goods_index in goods_output_dict:                      ###输入编号为正确的商品编号###
    
                        ###############################取出goods_index商品列表信息并进行赋值和展示############
                        (goods_name,goods_price,goods_num) = (goods_output_dict[goods_index][0], goods_output_dict[goods_index][1], goods_output_dict[goods_index][2])
                        print('【 编号:%-5d \t 名称:%-15s \t 价格:%-5d(元) \t 数量:%-5d(个)】' % (goods_index,goods_name,goods_price,goods_num))
    
                        second_flag = 1                                         ###定义第二层循环变量参数###
                        while second_flag:
                            buy_num = input('请输入购买商品个数(最大值为%d) | 返回(b) | 退出(q): ' % goods_num)
                            if len(buy_num) != 0:                               ###如果输入非空,对输入进行判断并转化类型###
                                buy_num = input_handle(buy_num)
                            if buy_num == 'q':                                  ###如果输入为q,则退出程序###
                                sys.exit(0)
                            elif buy_num == 'b':                                ###如果输入为b,则返回第一层循环,重新选择商品编号###
                                break
                            elif type(buy_num) is int and buy_num > 0 and buy_num <= goods_num:          ###输入要求商品数量###
                                my_goods_sum = goods_price * buy_num            ###计算购买商品的总金额###
                                if my_goods_sum <= now_balance:
                                    print('购买商品 %s 总价格为 : %d' % (goods_name,my_goods_sum))
                                    add_flag = input('请确认是否加入购物车(y | n):')
                                    if add_flag == 'y':                         ###购买商品确认加入购物车###
    
                                        ###判断购物车不存在该商品###############
                                        if goods_index not in user_shopping_cart:
                                            user_shopping_cart_count += 1       ###购物车里商品数量加1###
                                            ####将该商品加入用户购物车字典中####
                                            user_shopping_cart[goods_index] = [goods_name,goods_price,goods_num,buy_num,my_goods_sum]
                                        ####购物车已经存在该商品,则进行数量和金额累计计算############
                                        else:
                                            user_shopping_cart[goods_index][3] += buy_num
                                            user_shopping_cart[goods_index][4] += my_goods_sum
    
                                        now_balance -= my_goods_sum             ###计算出当前余额###
    
                                        goods_list[goods_name]['num'] -= buy_num   ###商品列表的商品数量更新###
                                        second_flag = 0                         ###设置第二层循环值为0,结束第二层循环####
    
                                    else:
                                        break
                                else:
                                    print('您的余额不足,请充值或重新选择,谢谢')
                                    time.sleep(2)
                            else:
                                pass
                    else:
                        pass
        else:
            if i != 2:                                                         ###i=2时,是最后一次机会,不用在提示还剩余0次机会了###
                print('用户或密码错误,请重新输入,还有 %d 次机会' % (2 - i))
        i += 1                                                                 ###当用户输入错误时,循环值增加1###
    else:
        sys.exit('用户或密码输入错误超过三次,退出系统,欢迎下次光临')          ###用户输入三次错误后,异常退出###
    购物车python3.4

    五、效果图展示:

    1、用户成功登录,显示初始和当前的余额,还有商品:

     

    2、选择商品编号及购买的数量,数量不能超过总数量,并提示是否加入购物车:

    3、成功将商品加入购物车后,会显示当前的真实余额,并提示购物车内商品的种类数量:

    4、当余额不足时,会提示用户进行充值,充值金额不限:

    5、查看购物车的商品数量及总金额情况:

    6、并可以对购物车内的商品进行修改和删除:

    7、将商品mi4删除或修改后,购物车的总金额、用户的余额、购物车的商品数量均会相应的更新,并可以进行结帐:

    8、结账完成后,用户当前的余额会回写回用户的信息文件。

    六、针对二个版本的不同之处说明如下:

         1、在python2.7下,数字和字符串可以进行比较,会有true或false返回


     >>> a = 'b'

    >>> aa = 1
    >>> a > aa
    True


              在python3.4下,数字和字符串比较会报如下错误:

                          TypeError: unorderable types: str() > int()

               故在二者比较判断时,最好加上type(a) is int 

    做人一定要靠自己
  • 相关阅读:
    iOS 面试题搜集
    iOS 常用第三方类库、完整APP示例
    iOS 键盘遮挡输入 解决办法
    iOS UIColor RGB HEX
    iOS APP性能优化
    iOS Swift 数组 交换元素的两种方法
    iOS CoreData primitive accessor
    iOS Start developing ios apps (OC) pdf
    iOS 传值方式
    iOS IB_DESIGNABLE IBInspectable @IBDesignable @IBInspectable 加速UI开发
  • 原文地址:https://www.cnblogs.com/wushank/p/5087502.html
Copyright © 2011-2022 走看看