修修改改代码终于可以执行了,这次是本地版购物车(商品、用户信息等都存在本地txt文档里的,由于还没正式学习文件操作,很多地方可能比较傻瓜),目的是加强列表操作的掌握,顺便预习一下文件操作的内容~
首先是管理员接口,需要完成的功能有:
# 1.启动程序后,输入管理员用户名密码,然后打印商品列表 # 2.可随时退出,退出时,打印已新增商品及其价格 # plus1:商品信息存放在文件里 # plus2:可以添加商品,修改商品价格 代码如下:
1 # 购物车程序-管理员接口 2 # 1.启动程序后,输入管理员用户名密码,然后打印商品列表 3 # 2.可随时退出,退出时,打印已新增商品及其价格 4 # plus1:商品信息存放在文件里 5 # plus2:可以添加商品,修改商品价格 6 7 import sys 8 9 shopping = [] # 空表,后续用于存储在文件内读取出的商品 10 ad = [] # 空表,后续用于存储在文件内读取出的用户名和密码 11 goods_new = [] # 空表,后续用于存储新增商品及其价格 12 f = open("administrator.txt") 13 f1 = f.readlines() 14 for line in f1: 15 line = line.strip('\n') 16 line = line.split(',') 17 ad.append(line) # 将文件内的用户名密码读取至表ad内 18 f.close() 19 20 while True: 21 username = input("请输入用户名:") 22 password = input("请输入密码:") 23 ad_user = [username, password] 24 if ad_user in ad: # 判断用户名密码是否在表ad中 25 print(f"欢迎登录 ,{username}!".center(50, " ")) 26 while True: # 用户可以多次选择,故创建死循环 27 f2 = open("goods.txt", 'r', encoding='UTF-8') 28 f2.seek(0) 29 f3 = f2.readlines() 30 for line in f3: 31 line = line.strip('\n') 32 line = line.split(',') 33 shopping.append(line) # 读取txt文档中存储的商品及其价格信息至表shopping内(放于循环中,操作后打印的是修改后的内容) 34 f2.close() 35 print("当前商品列表".center(50, '-')) 36 for i, items in enumerate(shopping): 37 print(i+1, items) # 展示当前商品列表 38 choice = input("输入t增加商品,输入商品编号修改价格,输入q退出:") 39 if choice == 't': # 选择增加商品 40 goods_name = input("输入新增商品名称:") 41 goods_price = input("输入该商品价格:") 42 f2 = open("goods.txt", 'a+', encoding='UTF-8') 43 f2.write(goods_name) 44 f2.write(',') 45 f2.write(goods_price) 46 f2.write('\n') 47 f2.close() # 在商品列表中追加一条商品记录,内容为用户输入的名称与价格 48 print(f"添加商品\033[31m{goods_name}\033[0m成功!") 49 goods_new.append([goods_name, goods_price]) 50 shopping = [] # 将文件内容增加至列表中在循环内,要清除列表内容,否则会重复录入 51 elif choice == "q": 52 print("新增商品列表".center(50, '-')) 53 for t, items in enumerate(goods_new): 54 print(t+1, items) # 输出新增商品列表 55 sys.exit() 56 elif choice.isdigit(): # 输入的是数字 57 choice = int(choice) # 转换为整型 58 if 0 < choice < len(shopping) + 1: # 这个数字在商品编号范围内 59 print(f"您正在修改商品\033[31m{shopping[choice-1][0]}\033[0m的价格,请确认") 60 choice2 = input("输入y确认,输入b返回,输入q退出:") 61 if choice2 == 'b': # 选择返回 62 shopping = [] # 将文件内容增加至列表中在循环内,要清除列表内容,否则会重复录入 63 continue # 跳出本次循环,执行下一次循环 64 elif choice2 == 'q': # 选择退出 65 sys.exit() 66 elif choice2 == 'y': # 确认要修改这个商品的价格 67 f2 = open('goods.txt', 'r+', encoding='utf-8') 68 f2.truncate() # 把文档内原有的内容清空掉,注意打开方式必须是只写才能清空 69 f2.close() 70 while True: 71 new_price = input("请输入新价格:") 72 if new_price.isdigit(): 73 shopping[choice-1][1] = new_price # 在列表中更改这个商品的价格 74 for j in shopping: # 将列表内的新信息重新录入文档 75 f2 = open('goods.txt', 'a', encoding='utf-8') 76 f2.write(j[0]) 77 f2.write(',') 78 f2.write(j[1]) 79 f2.write('\n') 80 f2.close() 81 print(f"修改商品\033[31m{shopping[choice-1][0]}\033[0m的价格成功,新价格为\033[31m{new_price}\033[0m") 82 shopping = [] # 将文件内容增加至列表中在循环内,要清除列表内容,否则会重复录入 83 break # 更改完毕,文档已更新,跳出本次循环 84 else: 85 print("格式错误,请重新输入") # 返回输入新价格出(本次循环的开始) 86 else: 87 print("输入错误,请重试") 88 shopping = [] # 将文件内容增加至列表中在循环内,要清除列表内容,否则会重复录入 89 else: # 输入的数字不是商品编号 90 print("无此商品,请重试!") 91 shopping = [] # 将文件内容增加至列表中在循环内,要清除列表内容,否则会重复录入 92 else: # 输入的不是t,不是q也不是一个数字 93 print("输入错误,请重试!") 94 shopping = [] # 将文件内容增加至列表中在循环内,要清除列表内容,否则会重复录入 95 else: 96 print("用户名或密码错误,请重试!")
然后是用户接口,需要完成的功能有:
# 1.启动程序后,让用户输入工资,然后打印商品列表 # 2.允许用户根据商品编号购买商品 # 3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 # 4.可随时退出,退出时,打印已购买商品和余额 # plus1:商品信息存放在文件里 # plus2:存储已购商品和余额记录(第二次及以后登录无需再输入工资) 代码如下:
1 import sys 2 3 customer = [] 4 goods = [] 5 customer_name = [] 6 customer_balance = [] 7 shopping_cart = [] 8 customer_new = [] 9 10 f = open("customer.txt", encoding='utf-8') 11 for line in f.readlines(): 12 line = line.strip('\n') 13 line = line.split(',') 14 customer.append(line) 15 f.close() 16 f1 = open("goods.txt", encoding='utf-8') 17 for line in f1.readlines(): 18 line = line.strip('\n') 19 line = line.split(',') 20 goods.append(line) 21 f1.close() 22 for i in customer: 23 customer_name.append(i[0]) 24 customer_balance.append(i[1]) 25 username = input("请输入用户名:") 26 if username in customer_name: 27 j = customer_name.index(username) 28 while True: 29 print(f"您的余额还有\033[031m{customer_balance[j]}\033[0m元") 30 print("商品清单".center(50, '-')) 31 for k, items in enumerate(goods): 32 print(k+1, items) 33 while True: 34 choice = input("请输入编号以购买商品(或输入q退出):") 35 if choice.isdigit(): 36 choice = int(choice) 37 if 0 < choice < len(goods)+1: 38 print(f"您即将消费\033[31m{goods[choice-1][1]}\033[0m元购买\033[31m{goods[choice-1][0]}\033[0m") 39 confirm = input("输入y确认购买,输入b重新选择:") 40 if confirm == 'y': 41 if int(customer_balance[j]) >= int(goods[choice-1][1]): 42 print(f"购买\033[31m{goods[choice-1][0]}\033[0m成功!") 43 balance = int(customer_balance[j]) - int(goods[choice-1][1]) 44 customer_balance[j] = balance 45 customer[j][1] = str(balance) 46 shopping_cart.append(goods[choice-1][0]) 47 break 48 else: 49 print("您的余额不足") 50 continue 51 elif confirm == 'b': 52 continue 53 elif choice == 'q': 54 print("\033[31m购物清单\033[0m".center(50, '%')) 55 for t in shopping_cart: 56 print(t.center(40, ' ')) 57 print(f"您的余额为\033[31m{customer_balance[j]}\033[0m元,欢迎下次光临!") 58 f = open("customer.txt", 'r+', encoding='utf-8') 59 f.truncate() 60 f.close() 61 f = open("customer.txt", 'a', encoding='utf-8') 62 for m in customer: 63 f.write(m[0]) 64 f.write(',') 65 f.write(m[1]) 66 f.write('\n') 67 f.close() 68 sys.exit() 69 else: 70 print("格式错误,请重新输入!") 71 else: 72 salary = int(input("请输入您的工资:")) 73 while True: 74 print("商品清单".center(50, '-')) 75 for k, items in enumerate(goods): 76 print(k + 1, items) 77 while True: 78 choice = input("请输入编号以购买商品(输入q退出):") 79 if choice.isdigit(): 80 choice = int(choice) 81 if 0 < choice < len(goods) + 1: 82 print(f"您即将消费\033[31m{goods[choice - 1][1]}\033[0m元购买\033[31m{goods[choice - 1][0]}\033[0m") 83 confirm = input("输入y确认购买,输入b重新选择:") 84 if confirm == 'y': 85 if salary >= int(goods[choice - 1][1]): 86 print(f"购买\033[31m{goods[choice - 1][0]}\033[0m成功!") 87 salary = int(salary) - int(goods[choice - 1][1]) 88 shopping_cart.append(goods[choice - 1][0]) 89 break 90 else: 91 print("您的余额不足") 92 continue 93 elif confirm == 'b': 94 continue 95 elif choice == 'q': 96 print("购物清单".center(50, '%')) 97 for t in shopping_cart: 98 print(t.center(50, ' ')) 99 print(f"您的余额为\033[31m{salary}\033[0m元,欢迎下次光临!") 100 customer_new = [username, str(salary)] 101 f = open("customer.txt", 'a', encoding='utf-8') 102 f.write(customer_new[0]) 103 f.write(',') 104 f.write(customer_new[1]) 105 f.write('\n') 106 f.close() 107 sys.exit() 108 else: 109 print("格式错误,请重新输入!")