python設計購物車
設計購物車
一需求:
1、啟動程序後,輸入用戶名密碼後,如果是第一次登錄,讓用戶輸入工資,然後打印商品列表
2、允許用戶根據商品編號購買商品
3、用戶選擇商品後,檢測余額是否夠,夠就直接扣款,不夠就提醒
4、可隨時退出,退出時,打印已購買商品和余額
5、在用戶使用過程中, 關鍵輸出,如余額,商品已加入購物車等消息,需高亮顯示
6、用戶下一次登錄後,輸入用戶名密碼,直接回到上次的狀態,即上次消費的余額什麽的還是那些,再次登錄可繼續購買
7、允許查詢之前的消費記錄
二.購物車用戶信息:
{‘name‘: {‘password‘: ‘10000‘}, ‘cx‘: {‘123‘: ‘725.0‘}, ‘even‘: {‘qw‘: ‘1560‘}, ‘cv1‘: {‘1‘: 100.5}}
以字典形式存儲用戶名,密碼,余額
三.歷史購物信息:
{‘name‘: [[‘iphone‘, 5800], [‘bike‘, 800]], ‘cx‘: [[‘iphone‘, 5800], [‘apple‘, 5], [‘apple‘, 5], [‘book‘, 75]]}
以字典形式,對應用戶名和歷史購物記錄
四.流程圖:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: Even
set = False # 設置set 當輸入為q就可以退出
file = open(‘購物車用戶信息存檔‘,‘r+‘,encoding=‘utf-8‘) # 讀取購物車用戶信息文件
f = str(file.read()) # 將文件內容轉化成字符串
for line in f: # 逐行讀取
file_str = str(f)
data= eval(file_str) # 將字符串轉換為字典data
name = input("請輸入姓名:") # 提示輸入用戶名
password = input("請輸入密碼:") # 提示輸入密碼
while True:
if name in data: # 用戶名在字典data
if password in data[name]: # 密碼如果能對應用戶名,就歡迎登錄
salay = float(data[name][password])
print(‘‘‘\033[32;1m歡迎登錄,當前余額為%s\033[0m‘‘‘%salay)
break
else: # 否則密碼輸入錯誤,提示重新輸入
password = input("密碼輸入錯誤,請重新輸入:")
continue
else: # 否則判斷為首次登錄,將用戶名,密碼,工資存到用戶信息文件中
password_salay = {}
salay_str = input("歡迎首次登錄,請輸入你的工資:") # 輸入工資數
salay = float(salay_str) # 將輸入的字符串轉換為數字
password_salay[password] = salay # 將工資對應到密碼
data[name] = password_salay # 將密碼-工資對對應到用戶名
file.seek(0) # 文件的讀取移到開頭
file.write(str(data)) # 寫入新的字典信息
file.tell() # 返回當前位置
break
list = [ # 購物清單
["iphone",5800],
["bike",800],
["macbook",17500],
["book",75],
["apple",5]
]
file_list_r = open(‘歷史購買記錄‘,‘r+‘,encoding=‘utf-8‘) # 讀取歷史購買記錄文件
f_list_r = str(file_list_r.read())
shoppinglist_dict = eval(f_list_r) # 將歷史記錄信息轉換為字典
if name not in shoppinglist_dict: # 如果首次登錄,會沒有歷史記錄
shoppinglist_dict[name] = [] # 首次登錄歷史記錄留空
shoppinglist = shoppinglist_dict[name] # 不是首次登錄,將之前歷史記錄賦值到變量
shoppinglist_now = [] # 本次購物記錄留空
choose = input("\n是否需要查詢歷史購物記錄(y/n):") # 詢問是否需要查詢歷史記錄
if choose == ‘y‘: # 選y,輸出歷史購物記錄
print("\n\n-----------歷史購物記錄------------")
print(shoppinglist)
print("--------------結束---------------\n\n")
while not set: # 購物車開始
print(‘-----------商品清單------------‘) # 輸出商品清單
for index,item in enumerate(list,1):
print(index,item)
print("-------------結束--------------")
number = input("請輸入想購買的商品編號:") # 輸入商品編號
if number == "q": # 當輸入為q,退出,打印本次購物清單
set = True
data[name][password] = str(salay) # 將字符串的工資給到對應用戶名下的密碼-工資對中
file.seek(0)
file.write(str(data)) # 將用戶信息寫入購物車用戶信息存檔中
file.tell()
print("------------購物清單------------") # 打印購物清單,提示余額
print(shoppinglist_now)
print("您的余額為:",salay)
print("-------------結束--------------")
shoppinglist.extend(shoppinglist_now) # 將本次購物記錄追加到購物記錄列表中
shoppinglist_dict[name] = shoppinglist # 購物列表與用戶名做對應
file_list_r.seek(0)
file_list_r.write(str(shoppinglist_dict)) # 寫入字符串的購物歷史記錄
file_list_r.tell()
elif number.isdigit() == False: # 校驗輸入是否為整數
print("\033[31;1m輸入不是編號內容,請重新輸入\033[0m")
elif int(number)>int(len(list)) or int(number)<= 0: # 如果輸入值不在清單中,提示報錯
print("\033[31;1m您所購買的商品不在清單中\033[0m")
else:
number_buy = int(number)-1
if list[number_buy][1]<(salay): # 如果余額夠,提示成功購買,顯示余額
salay = salay - int(list[number_buy][1])
msg = ‘‘‘
\033[32;1m您已將%s加入購物車中
余額為%d\033[0m
‘‘‘ % (list[number_buy][0],salay)
print(msg)
shoppinglist_now.append(list[number_buy]) # 本次購物信息加到本次購買記錄中
else:
print("\033[31;1m您已沒有余額可以購買\033[0m") # 否則提示余額不足
python設計購物車