Python购物车系统模拟1

核心内容:


1、算法展示
2、代码展示
3、相关文件展示


算法示例:
这里写图片描述
代码示例:

#!/usr/bin/python
# -*- coding:utf-8 -*-


"""
Author:Zmy
Date:2017年5月15日14:06:27
Function:Shopping cart system simulation
1、模拟用户3次验证登录
2、通过分页的方式显示商品信息
3、用户进行购物(加入到购物车)
4、用户进行结账
5、将用户的购物记录、登录次数、账户余额等同步到最新的文件中
6、用户通过模糊匹配查询的方式查询相应的购物记录
"""

#读取个人账户的相关信息
fr1 = open("personal_account","r",encoding="utf-8")
personal_data = fr1.read()
fr1.close()

#将用户的完整信息存储到字典中
user_info_dict = {}
user_info = personal_data.split("\n")
for item in user_info:
    temp = item.split("|")
    user_info_dict[temp[0]] = {
        "pass_wd": temp[1],
        "times"  : temp[2],
        "salary" : temp[3]
    }

#读取商品列表的相关信息
fr2 = open("goods_information", "r", encoding="utf-8")
goods_data = fr2.read()
fr2.close()

#将商品的完整信息存储到列表中
good_info_list = []
good_info = goods_data.split("\n")
for item in good_info:
    temp = item.split("|")
    good_info_dict = {}
    good_info_dict = {
        "good_name"   : temp[0],
        "good_salary" : temp[1]
    }
    good_info_list.append(good_info_dict)

#读取用户之前的购物记录信息并存储到列表中(存储方式最简单的一种,没有涉及到字典)
fr3 = open("shop_record", "r", encoding="utf-8")
per_good_data = fr3.read()
fr3.close()

user_good_list = []
per_good_info = per_good_data.split("\n")
for item in per_good_info:
    user_good_list.append(item)

#正式开始进入程序模块
#function1:3次登录验证操作

log_count = 0 #登录尝试的次数
log_flag = 0  #若用户登录成功,则将相应的登录的状态log_flag置为1

#通过search_info()查看用户之前对应的购物记录
def search_info():
    #标志位的创建是一个创新
    search_flag = 0
    while True:
        if search_flag == 1:
            break
        else:
            good_info = input("请输入相关的商品信息:")
            print("与其相关的购物记录:")
            for item in user_good_list:
                if good_info in item:
                    print(item)
            serch_lable = input("亲,是否继续查看? yes or no ?\n")
            if serch_lable == "no":
                search_flag = 1

#通过shop_trade函数进行相应的购物操作
shop_car_list = []
page_sum = len(good_info_list)//10 + 1  #这里应该继续优化一下
def shop_trade():
    #对于可能多次循环操作的设置一个标志位
    shop_status = 0
    print("您好,欢迎进入商品购物系统!")
    while True:
        if shop_status == 1:
            break
        page_num = input("您好,请输入需要查看的商品列表页码:\n")
        if page_num.isdecimal() and int(page_num) <= page_sum:
            page_num = int(page_num)
            #打印当前页的商品信息
            start = (page_num - 1)*10
            end = page_num * 10
            v1 = good_info_list[start:end]
            prompt_message = "编号"+"\t"+"单价"+"\t"+"商品名称"
            print(prompt_message.expandtabs(12))
            for index, value in enumerate(v1):
                line = str(index + 1) + "\t" + str(value["good_salary"]) + "\t" + value["good_name"]
                line = line.expandtabs(15)
                print(line)
            shop_mind = input("亲,是否将当前页的某件商品加入到购物车? yes or no ?\n")
            if shop_mind == "yes":
                id = int(input("请输入购买商品的编号:"))
                num = int(input("请输入相应商品的购买数量:"))
                good_info_dict = {
                    "good_name": v1[id - 1]["good_name"],
                    "good_salary": int(v1[id - 1]["good_salary"]),
                    "good_num": num
                }
                shop_car_list.append(good_info_dict)
                print("当前购物车中含有的商品:")
                prompt_message = "单价" + "\t" + "购买数量" + "\t" + "商品名称"
                print(prompt_message.expandtabs(28))
                for item in shop_car_list:
                    temp = str(item["good_salary"])+"\t"+str(item["good_num"])+"\t"+str(item["good_name"])
                    print(temp.expandtabs(30))
                lable = input("是否继续在购买系统浏览商品 ? yes or no ?\n")
                if lable == "yes":
                    continue
                else:
                    print("当前购物车中含有的商品:")
                    prompt_message = "单价" + "\t" + "购买数量" + "\t" + "商品名称"
                    print(prompt_message.expandtabs(28))
                    for item in shop_car_list:
                        temp = str(item["good_salary"]) + "\t" + str(item["good_num"]) + "\t" + str(item["good_name"])
                        print(temp.expandtabs(30))
                    #如果用户不想继续购买,则退出购买模式
                    shop_status = 1
            else:
                pass
        else:
            print("对不起,请输入小于等于%d的页码!" % (int(page_sum)))

log_status = 0
while log_count < 3:
    if log_status != 0:
        break
    user_name = input("请输入您的用户名:")
    user_pass_wd = input("请输入您的密码:")
    #先判断用户输入的用户名是否存在
    if user_name in user_info_dict.keys():
        #若用户的账户存在,在判断personal_account中用户的登录次数times是否已经到达了3次
        #user_name已经是字符串,则无需再加双引号
        if int(user_info_dict[user_name]["times"]) < 3:
            #在账号和times都符合条件的情况下,在判断用户的密码是否正确
            if user_info_dict[user_name]["pass_wd"] == user_pass_wd:
                print("您好,登录成功")
                #将用户登录的次数times此时要重置为0
                user_info_dict[user_name]["times"] = 0
                log_flag = 1
                while True:
                    #登录成功之后,进入到第二个模块:功能选择
                    user_choice = input("亲你好,请输入指定的序号选择对应的服务,输入q表示退出购物车系统:\n"
                                        "1、查看之前的购物记录\n"
                                        "2、购买商品\n"
                                        "q、退出当前购物提供\n")
                    if user_choice == "1":
                        #通过函数查看之前的购物状态
                        search_info()
                        lable  = input("是否重新返回上一层目录? yes or no ")
                        if lable == "yes":
                            continue
                        else:
                            exit(-1)   #此处可以是exit(-1)
                    elif user_choice == "2":
                        #进入购物车系统进行购物
                        shop_trade()
                        #随后调用支付函数,进行支付,这里我没有用到函数处理,后续是个改进的地方
                        label = input("您好,是否进行支付 ? yes or no ?")
                        if label == "yes":
                            print("您当前的账户余额为:%s" % user_info_dict[user_name]["salary"])
                            consume_sum = 0
                            for item in shop_car_list:
                                good_salary = item["good_salary"]
                                good_num = item["good_num"]
                                good_name = item["good_name"]
                                consume_sum += int(good_salary) * int(good_num)
                            print("购物车中的商品需要支付%d元" % consume_sum)
                            salary = int(user_info_dict[user_name]["salary"]) - consume_sum
                            if salary < 0:
                                print("对不起,你当前账户的余额不足,差%d元" % salary)
                            else:
                                print("OK,支付成功,账户剩余额度为%d元" % salary)
                                # 在列表中更新用户的账户余额
                                user_info_dict[user_name]["salary"] = str(salary)
                            lable = input("是否重新返回上一层目录? yes or no ")
                            if lable == "yes":
                                continue
                            else:
                                print("欢迎再次光临!")
                                log_status = 1  #退出整个购物系统  跳出第一个while
                                break   #跳出当前while
                        else:
                                print("亲,后期再见!")
                                log_status = 1  # 退出整个购物系统  跳出第一个while
                                break  # 跳出当前while
                    elif user_choice == "q":
                        print("欢迎光临购物车系统,期望下次再见!")
                        log_status = 1  # 退出整个购物系统  跳出第一个while
                        break  # 跳出当前while
                    else:
                        print("您输入的信息有误,请重新输入!")
            else:
                print("对不起,您的密码输入有误.")
                #密码输入错误的时候登录尝试的次数也要加1
                user_info_dict[user_name]["times"] = str(int(user_info_dict[user_name]["times"])+1)
                log_count += 1
        else:
            print("对不起,您的账户已经锁定,请用其余的账号登录或者联系管理员进行解禁该账号")
            log_count += 1 #此时登录尝试次数加1
    else:
        print("对不起,您输入的用户账户不存在.")
        log_count += 1  #此时登录尝试次数加1

#将用户购物车中的购物记录存储到文件shop_record中
fr4 = open("shop_record", "a", encoding="utf-8")
for item in shop_car_list:
    line = str(item["good_name"])+"|"+str(item["good_num"])+"|"+str(item["good_salary"])
    fr4.write(line+"\n")
fr4.close()

#最后将用户最新的个人信息同步到personal_account文件中
fr5 = open("personal_account", "w")
j = 1
for key, item in user_info_dict.items():
    temp = key + "|" + item["pass_wd"] + "|" + str(item["times"])+"|" + str(item["salary"])
    if j != len(user_info_dict):
        fr5.write(temp + "\n")
    else:
        fr5.write(temp)
    j += 1

运行结果:

请输入您的用户名:Alex
请输入您的密码:1234567
对不起,您的密码输入有误.
请输入您的用户名:Alex
请输入您的密码:123123
您好,登录成功
亲你好,请输入指定的序号选择对应的服务,输入q表示退出购物车系统:
1、查看之前的购物记录
2、购买商品
q、退出当前购物提供
1
请输入相关的商品信息:旅游鞋
与其相关的购物记录:
镂空跑步鞋女透气网鞋运动鞋旅游鞋|1|69
亲,是否继续查看? yes or no ?
no
是否重新返回上一层目录? yes or no yes
亲你好,请输入指定的序号选择对应的服务,输入q表示退出购物车系统:
1、查看之前的购物记录
2、购买商品
q、退出当前购物提供
2
您好,欢迎进入商品购物系统!
您好,请输入需要查看的商品列表页码:
2
编号          单价          商品名称
1              59             谷崎女鞋2017夏季新款网面
2              69             镂空跑步鞋女透气网鞋运动鞋旅游鞋
3              62             个人帆布鞋女百搭学生韩版
4              38             小白鞋女春系带情侣平底板鞋女
5              89             2017春秋新款真皮英伦风松糕底女鞋
6              123            2017新款羊皮蛋卷鞋女真皮单鞋春夏
7              89             圆头百搭蝴蝶结平底鞋女秋
8              43             新款鱼嘴鞋
9              39             防水台女单鞋春夏百搭真皮高跟鞋
10             69             浅口粗跟单鞋女鞋子
亲,是否将当前页的某件商品加入到购物车? yes or no ?
yes
请输入购买商品的编号:2
请输入相应商品的购买数量:1
当前购物车中含有的商品:
单价                          购买数量                        商品名称
69                            1                             镂空跑步鞋女透气网鞋运动鞋旅游鞋
是否继续在购买系统浏览商品 ? yes or no ?
yes
您好,请输入需要查看的商品列表页码:
3
编号          单价          商品名称
1              69             懒人鞋春季女2017新款一脚蹬女鞋
2              89             百搭小白鞋韩版帆布鞋学生板鞋子
3              39             远步春季懒人低帮
4              126            黑色韩版帆布鞋
5              65             休闲单鞋女学生平底板鞋子学院潮
6              48             男生圆领五分袖男装半袖薄款青年体恤衫学生2017夏季
7              52             骆驼男装
8              49             夏季短袖t恤男纯色V领半袖打底衫男士青年T恤薄款短
9              38             拓路者短袖t恤
10             49             男夏纯棉白色半袖男圆领宽松体恤
亲,是否将当前页的某件商品加入到购物车? yes or no ?
yes
请输入购买商品的编号:2
请输入相应商品的购买数量:2
当前购物车中含有的商品:
单价                          购买数量                        商品名称
69                            1                             镂空跑步鞋女透气网鞋运动鞋旅游鞋
89                            2                             百搭小白鞋韩版帆布鞋学生板鞋子
是否继续在购买系统浏览商品 ? yes or no ?
no
当前购物车中含有的商品:
单价                          购买数量                        商品名称
69                            1                             镂空跑步鞋女透气网鞋运动鞋旅游鞋
89                            2                             百搭小白鞋韩版帆布鞋学生板鞋子
您好,是否进行支付 ? yes or no ?yes
您当前的账户余额为:1493
购物车中的商品需要支付247元
OK,支付成功,账户剩余额度为1246元
是否重新返回上一层目录? yes or no yes
亲你好,请输入指定的序号选择对应的服务,输入q表示退出购物车系统:
1、查看之前的购物记录
2、购买商品
q、退出当前购物提供
q
欢迎光临购物车,期望下次再见!

Process finished with exit code 0

相关文件展示:(goods_information)

英爵伦男士短袖T恤|48
外套中老年人上衣|89
骆驼牌男装|88
男生新款潮流印花圆领半袖|69
2017新款男士夏季短袖t恤韩版|39
男生半袖夏装圆领体恤|42
春夏季田园印花小衫女新款|100
中年妇女装妈妈装棉短袖T恤|128
秋季中老年人女装|59
大码女装胖mm夏天短袖女士t恤|26
谷崎女鞋2017夏季新款网面|59
镂空跑步鞋女透气网鞋运动鞋旅游鞋|69
个人帆布鞋女百搭学生韩版|62
小白鞋女春系带情侣平底板鞋女|38
2017春秋新款真皮英伦风松糕底女鞋|89
2017新款羊皮蛋卷鞋女真皮单鞋春夏|123
圆头百搭蝴蝶结平底鞋女秋|89
新款鱼嘴鞋|43
防水台女单鞋春夏百搭真皮高跟鞋|39
浅口粗跟单鞋女鞋子|69
懒人鞋春季女2017新款一脚蹬女鞋|69
百搭小白鞋韩版帆布鞋学生板鞋子|89
远步春季懒人低帮|39
黑色韩版帆布鞋|126
休闲单鞋女学生平底板鞋子学院潮|65
男生圆领五分袖男装半袖薄款青年体恤衫学生2017夏季|48
骆驼男装|52
夏季短袖t恤男纯色V领半袖打底衫男士青年T恤薄款短|49
拓路者短袖t恤|38
男夏纯棉白色半袖男圆领宽松体恤|49
夏季加大码男装短袖T恤|52
V领打底衫半袖体恤|69
青少年学生t桖男上衣服|49

相关文件展示:shop_record

英爵伦男士短袖T恤|2|48
镂空跑步鞋女透气网鞋运动鞋旅游鞋|1|69
2017新款羊皮蛋卷鞋女真皮单鞋春夏|2|123
镂空跑步鞋女透气网鞋运动鞋旅游鞋|1|69
百搭小白鞋韩版帆布鞋学生板鞋子|2|89

相关文件展示:personal_account

Eric|123123|0|1500
Alex|123123|0|1246
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只懒得睁眼的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值