• day2、购物商城


      作业:购物商城

        商品展示,价格

        买,加入购物车

        付款,钱不够

    代码如下:

    import codecs
    #登录接口,用户名密码都正确登录成功,否则失败
    
    def login(your_name,your_password):
        with open("user_file","r") as l:
            for line in l:
                user_name,user_password,user_balance=line.strip().split(":")
                if your_name == user_name and your_password == user_password:
                    flag = 1
                    break
                else:
                    print("用户名或密码错误")
                    flag = 0
        return flag
    
    #商品展示列表
    def show_goods():
        print(10*'*' + "商品列表" + 10*"*")
        print(30 * "-")
        print("| 编号 | 名称 | 价格 | 数量 | ")
        try:
            with codecs.open("goods_file","r","utf-8") as f1:
                for line in f1:
                    (goods_id,goods_name,goods_rate,goods_num) = line.strip().split(":")
                    print(30 * "-")
                    print('| %s | %s | %s | %s |' %(goods_id,goods_name,goods_rate,goods_num))
                print(30*"-")
            # print("购买商品请输入产品编号/返回请输入b/退出请输入q")
            # the_num = input("请选择:")
        except ValueError:
            pass
    
    #展示购物车
    def show_gouwuche(your_name):
        with codecs.open("gouwuche","r","utf-8") as f2:
            n = 0
            print(30 * "-")
            print("| 编号 | 名称 | 数量 | 总价 |")
            for line in f2:
                user_name,goods_name,goods_num,goods_rate = line.strip().split(":")
                if user_name == your_name:
                    n += 1
                    print(30 * "-")
                    print(" | %s | %s | %s | %s |" %(n,goods_name,goods_num,goods_rate))
            print(30*"-")
    
    #查看当前用户已购产品
    def show_yigou(your_name):
        with codecs.open("yigoushangpin","r","utf-8") as f3:
            n = 0
            print(30*"-")
            print("| 编号 | 名称 | 数量 | 总价 |")
            for line in f3:
                user_name,goods_name,goods_num,goods_rate = line.strip().split(":")
                if user_name == your_name:
                    n += 1
                    print(30*"-")
                    print('| %s | %s | %s | %s |' %(n,goods_name,goods_num,goods_rate))
            print(30*"-")
    
    #账户余数查看
    def show_money(your_name):
        with open("user_file","r") as l:
            for line in l:
                user_name,user_password,user_blance = line.strip().split(":")
                if your_name == user_name:
                    print("您当前账户余额为:%s" %user_blance)
                    break
    
    
    # 账户余额查看
    def show_money(your_name):
        with open('user_file', 'r') as l:
            for line in l:
                user_name, user_password, user_balance = line.strip().split(':')
                if your_name == user_name:
                    print('您当前账户余额为:%s' % user_balance)
                    break
    
    #加入购物车,如果购物车中已经存在该商品则将商品数量相加,商品价格相加;如果购物车中不存在该商品,则添加到购物车中,并将可购买的库存量
    def add_gouwuche(n,your_name):
        with codecs.open("goods_file","r+","utf-8") as f1:
            for line1 in f1:
                goods_id,goods_name,goods_rate,goods_num = line1.strip().split(":")
                if n == goods_id:
                    goods_quantity = input("请输入数量:")
                    #如果输入的并非数字则不合法,输入的数量大于库存,均需要重新输入
                    while True:
                        if goods_quantity.isdigit():
                            if int(goods_num) < int(goods_quantity):
                                goods_quantity = input("您输入的数量大于当前库克数量,请重新输入数量:")
                            else:
                                break
                        else:
                            goods_quantity = input("您输入的不合法,请重新输入数量:")
                    with codecs.open("gouwuche","r+","utf-8") as f2:
                        for line2 in f2:
                            che_user_name,che_goods_name,che_goods_num,che_goods_rate = line2.strip().split(":")
                            #判断当前选择的商品是否在购物车存在,如果存在标志位che_flag = 1
                            if your_name == che_user_name and goods_name == che_goods_name:
                                che_flag = 1
                                che_goods_num = str(int(che_goods_num) + int(goods_quantity))
                                che_goods_rate = str(int(che_goods_rate) + int(goods_rate)*int(goods_quantity))
                                old_line = line2
                                new_line = che_user_name + ":" + che_goods_name + ":" + che_goods_num + ":" + che_goods_rate + "
    "
                                break
                        #当前选择的商品购物车中不存在,标志位che_flag = 0
                        else:
                            che_flag = 0
                            che_goods_rate = str(int(goods_rate) * int(goods_quantity))
                            che_goods_num = goods_quantity
                            che_goods_name = goods_name
                            che_user_name = your_name
                            new_line = ("%s:%s:%s:%s
    " %(che_user_name,che_goods_name,che_goods_num,che_goods_rate))
                            #购物车中存在,则将购物车中的数量更新,总价格更新
                            if che_flag == 1:
                                f2.seek(0)
                                old_gouwuche = f2.read()
                                new_gouwuche = old_gouwuche.replace(old_line,new_line)
                                f2.seek(0)
                                f2.truncate()
                                f2.write(new_gouwuche)
                            #购物车中不存在,则在购物车中添加
                            elif che_flag == 0:
                                f2.seek(0)
                                old_gouwuche =f2.read()
                                new_gouwuche = old_gouwuche + new_line
                                f2.seek(0)
                                f2.truncate()
                                f2.write(new_gouwuche)
                    #加入购物车后,将商品列表中的数量更新
                    new_goods_num = str(int(goods_num) - int(goods_quantity))
                    old_goods_line = line1
                    new_goods_line = ("%s:%s:%s:%s
    " %(goods_id,goods_name,goods_rate,new_goods_num))
                    f1.seek(0)
                    old_goods_file = f1.read()
                    new_goods_file = old_goods_file.replace(old_goods_line,new_goods_line)
                    f1.seek(0)
                    f1.truncate()
                    f1.write(new_goods_file)
                    goods_flag = True
                    break
            else:
                goods_flag = False
                print("抱歉您选择的商品不存在,请重新选择")
            return goods_flag
    
    #删除购物车的商品
    def del_gouwuche(del_gouwuche_num,your_name):
        with codecs.open("gouwuche","r+","utf-8") as f1:
            while True:
                n = 0
                for line in f1:
                    user_name,goods_name,goods_num,goods_rate = line.strip().split(":")
                    #判断删除的商品是否存在,若存在撒谎拿出标志位del_flag = 1
                    if user_name == your_name:
                        n += 1
                        if int(del_gouwuche_num) == n:
                            del_goods_name = goods_name
                            del_goods_num = goods_num
                            del_goods_line = line1
                            del_flag = 1
                            break
                    #商品存在,进行删除
                    if del_flag == 1:
                        f1.seek(0)
                        gouwuche_file = f1.readlines()
                        gouwuche_file.remove(del_goods_line)
                        f1.seek(0)
                        f1.truncate()
                        for line in gouwuche_file:
                            f1.write(line)
                        #更新商品清单,将从购物车删除的加到商品清单中
                        with codecs.open("goods_file","r+","utf-8") as f2:
                            for line2 in f2:
                                old_goods_line = list(line2.strip().split(":"))
                                old_line = line2.strip()
                                if old_goods_line[1] == del_goods_name:
                                    old_goods_line[3] = str(int(old_goods_line[3])) + int(del_goods_num)
                                    new_goods_line = old_goods_line
                                    del_flag = 1
                                    break
                            if del_flag == 1:
                                f2.seek(0)
                                new_line = ":".join(new_goods_line)
                                old_goods_file = f2.read()
                                new_goods_file = old_goods_file.replace(old_line,new_line)
                                f2.seek(0)
                                f2.truncate()
                                f2.write(new_goods_file)
                    break
                #要删除的商品不存在,标志位del_flag = 0
                else:
                    del_flag = 0
                    print("您要删除的商品不存在,请重新输入编号!")
                    break
        return del_flag
    
    #支付购物车商品
    def pay_gouwuche(gouwuche_num,your_name):
        with codecs.open("gouwuche","r+","utf-8") as f1:
            while True:
                n = 0
                for line1 in f1:
                    user_name,goods_name,goods_num,goods_rate = line1.strip().split(":")
                    #判断删除的商品是否存在,若存在删除标志位del_flag = 1
                    if user_name == your_name:
                        n += 1
                        if int(gouwuche_num) == n:
                            pay_goods_name = goods_name
                            pay_goods_num = goods_num
                            pay_goods_rate = goods_rate
                            pay_goods_line = line1
                            #查看当前用户余额是否能够支付商品
                            with open("user_file","r+") as user_file:
                                for line in user_file:
                                    user_name,user_password,user_balance = line.strip().split(":")
                                    if your_name == user_name:
                                        old_balance_line = line
                                        new_balance = int(user_balance) - int(goods_rate)
                                        break
                                if new_balance < 0:
                                    print("您的当前预余额不足,请充值后再支付!
    ")
                                    pay_flag = False
                                    break
                                #大于等于0时,则可以支付,并更新账户余额
                                else:
                                    pay_flag = True
                                    new_balance_line = user_name + ":" + user_password + ":" + str(new_balance) + "
    "
                                    user_file.seek(0)
                                    old_user_file = user_file.read()
                                    new_user_file = old_user_file.replace(old_balance_line,new_balance.line)
                                    user_file.seek(0)
                                    user_file.truncate()
                                    user_file.write(new_user_file)
                                    break
                        else:
                            pay_flag = ""
                #商品存在,支付成功后进行删除
                if pay_flag == True:
                    f1.seek(0)
                    gouwuche_file = f1.readlines()
                    gouwuche_file.remove(pay_goods_line)
                    f1.seek(0)
                    f1.truncate()
                    for line in gouwuche_file:
                        f1.write(line)
                    #更新已购买的商品清单,将已支付的商品加入到购买的清单中
                    with codecs.open("yigoushangpin","r+","utf-8") as f2:
                        for line2 in f2:
                            old_yigou_line = list(line2.strip().split(":"))
                            old_line = line2.strip()
                            #当已购商品清单存在该商品购买记录则将数量相加,总价格相加
                            if old_yigou_line[1] == pay_goods_name and old_yigou_line[0] == your_name:
                                old_yigou_line[2] = str(int(old_yigou_line[2]) + int(pay_goods_num))
                                old_yigou_line[3] = str(int(old_yigou_line[3]) + int(pay_goods_rate))
                                new_yigou_line = old_yigou_line
                                f2.seed(0)
                                new_line = ":".join(new_yigou_line)
                                old_yigou_file = f2.read()
                                new_yigou_file = old_yigou_file.replace(old_line,new_line)
                                f2.seed(0)
                                f2.truncate()
                                f2.write(new_yigou_file)
                                break
                        #当已购商品清单灭有购买记录,则附加购买记录
                        else:
                            f2.seek(0)
                            old_yigou_file = f2.read()
                            new_yigou_file = old_yigou_file + pay_goods_line
                            f2.seek(0)
                            f2.truncate()
                            f2.write(new_yigou_file)
                    print("
    ")
                    print("恭喜你,支付成功!")
                    break
                elif pay_flag == False:
                    flag = True
                    break
                #要删除的商品不存在,标志位del_flag = 0
                else:
                    pay_flag = False
                    print("您要支付的商品不存在,请重新输入编号!")
                    break
        return pay_flag
    
    #账户充值
    def add_money(blance_num,your_name):
        with open("user_file","r+") as f:
            for line in f:
                user_name,user_passwd,user_balance = line.strip().split(":")
                if user_name == your_name:
                    old_user_line = line
                    new_user_balance = str(int(user_balance) + int(balance_num))
                    new_user_line = user_name + ":" + user_passwd + ":" + new_user_balance + "
    "
                    break
            f.seek(0)
            old_user_file = f.read()
            new_user_file = old_user_file.replace(old_user_line,new_user_line)
            f.seek(0)
            old_user_file = f.read()
            new_user_file = old_user_file.replace(old_user_line,new_user_line)
            f.seek(0)
            f.truncate()
            f.write(new_user_file)
    
    def main():
        your_name = input("请输入用户名:")
        your_password = input("请输入密码:")
        menu_num = ""
        #登录,用户名或密码错误重新输入
        while True:
            if login(your_name,your_password):
                print("欢迎%s登录购物商城" %your_name)
                print(30 * "*")
                break
            else:
                your_name = input("请重新输入用户名:")
                your_password = input("请重新输入密码:")
        while True:
            print(30 * "*")
            print("欢迎来到主菜单,您可进行如下操作!")
            print(30 * "*")
            print("| 1 商品列表 | 2 查询购物车 | 3  查看已购商品 | 4 账户余额 | q 退出商城 |")
            if menu_num == "":
                menu_num = input("请输入:")
            #进入商品列表
            elif menu_num == "1":
                while True:
                    show_goods()
                    print("| 请输入商品编号加入购物车 | 输入b返回主菜单 | 输入q退出商城 |")
                    your_goods_num = input("请选择:")
                    print("
    ")
                    #判断输入的是否为纯数字,如果是
                    if your_goods_num.isdigit():
                        while add_gouwuche(your_goods_num,your_name):
                            #当商品加入购物车后直接返回给购物车
                            menu_num = "2"
                            break
                        break
                    elif your_goods_num == 'b':
                        menu_num = ""
                        break
                    elif your_goods_num == "q":
                        print("您已退出商城!")
                    else:
                        print("您输入的不合法,请重新输入!
    ")
            #查看购物车
            elif menu_num == "2":
                while True:
                    print(30 * "*")
                    print("您当前购物车商品如下所示:")
                    show_gouwuche(your_name)
                    print("| 1 返回主菜单 | 2 删除商品 | 3 支付商品 | q 退出商城 |")
                    gouwuche_menu_num = input("请输入:")
                    print("
    ")
                    #返回主菜单
                    if gouwuche_menu_num == '1':
                        menu_num = ''
                        break
                    #删除商品
                    elif gouwuche_menu_num == '2':
                        while True:
                            del_gouwuche_num = input("请输入要删除的商品编号,或者输入b返回:")
                            if del_gouwuche_num == "b":
                                break
                            elif not del_gouwuche_num.isdigit():
                                print("您输入的不合法,请重新输入!
    ")
                                continue
                            elif del_gouwuche(del_gouwuche_num,your_name):
                                print("删除成功
    ")
                                break
                    #支付商品
                    elif gouwuche_menu_num == "3":
                        while True:
                            pay_gouwuche_num = input("请输入要支付的商品编号,返回请输入b:")
                            if pay_gouwuche_num.isdigit():
                                if pay_gouwuche(pay_gouwuche_num,your_name):
                                    break
                            elif pay_gouwuche_num == "b":
                                break
                            else:
                                print("您输入的不合法,请重新输入!")
                    elif gouwuche_menu_num == "q":
                        print("您已退出商城!")
                        exit()
                    else:
                        print("您输入的不合法,请重新输入
    ")
            #查看已购买记录
            elif menu_num == "3":
                print(30 * "*")
                print("您已购买商品如下所示:")
                show_yigou(your_name)
                print("| 输入b返回主菜单 | 输入q退出程序 |")
                while True:
                    yigou_input = input("请输入:")
                    if yigou_input == "b":
                        menu_num = ""
                        print("
    ")
                        break
                    elif yigou_input == "q":
                        print("您已退出商城!
    ")
                    else:
                        print("你输入的不合法,请重新输入!
    ")
            #查看账户信息
            elif menu_num == "4":
                while True:
                    print(30 * "-")
                    print("您的账户信息如下所示:")
                    show_money(your_name)
                    print("| 1 充值账户 | b 返回主菜单 | q 退出商城 |")
                    money_num == input("请输入:")
                    if money_num == "1":
                        print(30 * "-")
                        add_money_num = input("请输入充值金额,输入b返回:")
                        if add_money_num.isdigit():
                            add_money_num = input("请输入充值金额,输入b返回:")
                            if add_money_num.isdigit():
                                add_money(add_money,your_name)
                                print("恭喜你,充值成功!
    ")
                                continue
                            elif add_money_num == "b":
                                continue
                            else:
                                print("您输入的不合法,请重新输入!
    ")
                                continue
                            elif money_num == "b":
                                menu_num = ""
                                break
                            elif money_num == "q":
                                print("您已退出商城!")
                                exit()
                            else:
                                print("您输入的不合法,请重新输入
    ")
                elif menu_num == "q":
                    print("您已退出商城!")
                    exit()
                else:
                    print("您的输入不合法,请重新输入!
    ")
    
    if __name__ == '__main__':
        main()

        上面代码是网上找的,准备自己好好写一遍,开始的时候没有什么思路,里面主要是对文件的操作,还有一些新的方法,都是常用的方法,但是平时自己不会用的。

  • 相关阅读:
    控制内插表达式的格式
    MySQL查看实时执行的SQL语句
    测试开源.net 混淆器ConfuserEx
    nginx 目录自动加斜线”/”
    兼职程序员一般可以从什么平台接私活?
    .NET之Hangfire快速入门和使用
    c#通过操作mongodb gridfs实现文件的数据库存储
    c# .net core + .net framework mongodb nuget 包
    asp.net core ModelState 模型状态验证扩展类
    Linux查看系统基本信息,版本信息(最全版)
  • 原文地址:https://www.cnblogs.com/gengcx/p/6821324.html
Copyright © 2020-2023  润新知