• 购物车


    Readme:

    购物车程序:(by George.)
    
    1、启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表
    2、允许用户根据商品编号购买商品
    3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 
    4、可随时退出,退出时,打印已购买商品和余额
    5、在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示
    6、用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买
    7、允许查询之前的消费记录

    几个关键的逻辑处理思路:

    1.用户登录时查看:历史记录
    2.用户退出时查看:本次购买记录、历史记录
      1.先将列表中临时信息append写入文件中;
      2.用户退出时打印列表信息;
      3.用户登录、退出时有选项可查看历史记录,此时打印文件信息;
    3.余额修改
      1.登录时读取文件中余额;
      2.程序执行过程中完成扣款后将文件内容更新(新文件替换旧文件方式)
      3.程序退出时余额可直接从内存中读取

    程序文件: 

    user_passwd文件:

    George 123
    Tony 456
    Julius 12345

    balance文件:

    Julius 900
    Tony 500
    George 681#每次用户完成购买后会出现在底部,因为操作文件是以.append方法实现,同时需要说明的是如果George用户未出现在该文件中,但在user_passwd文件中存在,在登录时会视为新可登录用户,则需要输入工资,下次则无需再次输入。

    balance_tmp文件 :

    Julius 900
    Tony 500
    George 681

    commadity_price文件:

    [("电视机_PANASONIC_55DR600C",9999),
    ("冰箱_SIEMENS_KA92NV41TI",10409),
    ("空调_HITACHI_C50FVY",6899),
    ("笔记本电脑_MAC_PRO250G",13000),
    ("热水壶_MIDEA_WFS5017TM",319),
    ("运动鞋_NICK_AIR",900),
    ("手机_MAC_IPHONE8X",6688)]

    purchase_history文件:

    ('热水壶_MIDEA_WFS5017TM', 319)
    |2017-12-25 17:10:08|Julius
    ('运动鞋_NICK_AIR', 900)
    |2017-12-25 17:10:09|Julius
    ('热水壶_MIDEA_WFS5017TM', 319)
    |2017-12-25 17:11:25|George
    ('热水壶_MIDEA_WFS5017TM', 319)
    |2017-12-25 17:12:47|George
    ('热水壶_MIDEA_WFS5017TM', 319)
    |2017-12-25 17:13:03|Tony
    ('热水壶_MIDEA_WFS5017TM', 319)
    |2017-12-25 17:13:24|Tony
    ('热水壶_MIDEA_WFS5017TM', 319)
    |2017-12-25 17:23:36|George

    shopping.py文件(主程序):

    # -*-coding:utf-8-*-
    # _Author_:George
    import os,sys,time
    
    #用户名密码格式化字典
    dict_user_pass = {}
    #余额信息格式化字典
    dict_balance = {}
    #用户购买历史信息格式列表
    list_pruchase_history = []
    
    #用户登录欢迎信息
    msg = '''
    ############################################
                 欢迎登录 京东商城
    ############################################
    登录用户:33[34;1m%s33[0m   您的余额:33[34;1m%s33[0m'''
    
    #用户密码文件处理
    def user_pass_info():
        with open("user_passwd.txt","r") as f1:
            for i in f1:
                line = i.strip()
                dict_user_pass[i.split(" ")[0]] = i.split(" ")[1]
    
    # 余额文件处理
    def balance_info():
        with open("balance.txt", "r", encoding="utf-8") as f3:
            for i in f3:
                if not i.startswith("
    "):
                    line = i.strip()
                    dict_balance[i.split(" ")[0]] = i.split(" ")[1]
    
    #用户本次购买清单函数 (历史购买记录应该从文件里读,而不能从该列表中读)
    def pruchase_history():
        print("33[34;1m您的本次购物清单:33[0m")
        for i in list_pruchase_history:
            print(i)
    
    #####################################################################
    #购买记录写入历史记录文件
    def pruchase_his_wr_file():
        for i in list_pruchase_history:
            line = str(i).strip()
            with open("purchase_history.txt","a+",encoding="utf-8") as f:
                f.write(line+"
    ")
    
    #用户购买历史记录读取
    def pruchase_his_ro_file():
        print("-----------------以下是历史记录-------------------")
        with open("purchase_history.txt", "r", encoding="utf-8") as f:
            for i in f:
                print(i.strip())
        print("-----------------以上是历史记录-------------------")
    
    #余额信息改变后写入到文件
    def balance_wr_file():
        balance_info()
        if login in dict_balance.keys():
            with open("balance.txt","r") as f1,open("balance_tmp.txt","w") as f2:
                for i in f1:
                    if i.strip().split(" ")[0] == login or i.startswith("
    "):
                        continue
                    f2.write(i)
            with open("balance_tmp.txt", "a+") as f3:
                balance = str(user_balance)
                f3.write("
    "+login +" "+balance.strip())
            # os.remove("balance.txt")
            # os.rename("balance_tmp.txt", "balance.txt")
    
    #信息回写时文档格式化
            original = open("balance.txt","w")
            bala_tmp = open("balance_tmp.txt","r")
            lines = bala_tmp.readlines()
            for line in lines:
                if line.split():
                    original.writelines(line)
                else:
                    original.writelines("")
            original.close()
            bala_tmp.close()
    
    #####################################################################
    #主程序开始
    user_pass_info()
    count = 0
    while count <3:
        login = input("Username:").strip()
        passwd = input("Password:").strip()
        count +=1
    
        if login not in dict_user_pass.keys() or passwd not in dict_user_pass[login]:
            print("33[31;1mERROR! Invalid username or password!33[0m")
        elif login in dict_user_pass.keys() and passwd in dict_user_pass[login]:
            while True:
                balance_info()
                if login in dict_balance.keys():
                    user_balance = dict_balance[login]
                    print(msg % (login, user_balance))
                    while True:
                        print("
    序号---------商品名称------------商品价格")
                        with open("commodity_price.txt", "r", encoding="utf-8") as f3:
                            shopping_list = eval(f3.read())
                            for index, item in enumerate(shopping_list):
                                print(index, item)
    
                        user_choice = input("
    【33[34;1m序号33[0m】购买商品
    【33[34;1mb33[0m】退出
    【33[34;1mh33[0m】购买历史
    请输入您要的操作>>>").strip()
                        if user_choice == "b":
                            pruchase_history()
                            print("33[34;1m您当前余额为:%s33[0m" %user_balance)
                            exit()
                        if user_choice == "h":
                            pruchase_his_ro_file()
                        if user_choice.isdigit():
                            user_choice=int(user_choice)
                            if user_choice < len(shopping_list) and user_choice >=0:
                                p_item = shopping_list[user_choice]
                                p_item1_to_int = int(p_item[1])
                                user_balance = int(user_balance)
    
                                if p_item1_to_int <= user_balance:
                                    list_pruchase_history.append(p_item)
                                    list_pruchase_history.append("|"+ time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) + "|"+ login)
                                    user_balance -= p_item1_to_int
                                    print("33[35;1m已完成扣款并添加【%s】至您的购物车33[0m"%p_item[0])
                                    print("33[34;1m当前余额为:%s33[0m" %user_balance)
                                    pruchase_his_wr_file()
                                    balance_wr_file()
                                else:
                                    print("33[35;1m您的余额不足,还是努力敲代码吧!33[0m")
    
                            else:
                                error_input = input("Press '33[31;1m[c]33[0m' to continue>>:")
                                if error_input == 'c':
                                    continue
                        else:
                            error_input = input("Press 33[31;1m[c]33[0m to continue>>:")
                            if error_input == 'c':
                                continue
                else:
                    first_logiGen_input = input("
    33[35;1m>>>You are The first login<<<33[0m 
    Enter your salary first:")
                    if first_logiGen_input != 0 or first_logiGen_input.isdigit():
                        add = (login+" "+first_logiGen_input)
                        with open("balance.txt","a+") as f:
                            f.write("
    "+ add)
  • 相关阅读:
    maven3实战之仓库(快照版本)
    三、常见分析函数详解
    二、理解over()函数
    一、Oracle分析函数入门
    Java程序性能优化技巧
    同步synchronized用法
    java枚举使用详解
    jpa+spring配置多数据源
    jxl导入/导出excel
    CVS数据的导入和导出
  • 原文地址:https://www.cnblogs.com/wangcx/p/8110465.html
Copyright © 2020-2023  润新知