python写的购物车程序
生活随笔
收集整理的這篇文章主要介紹了
python写的购物车程序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數據結構:
goods = [
{"name": "電腦", "price": 1999},
{"name": "鼠標", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998},
......
]
功能要求:
基礎要求:
1、啟動程序后,輸入用戶名密碼后,讓用戶輸入工資,然后打印商品列表
2、允許用戶根據商品編號購買商品
3、用戶選擇商品后,檢測余額是否夠,夠就直接扣款,不夠就提醒
4、可隨時退出,退出時,打印已購買商品和余額
5、在用戶使用過程中, 關鍵輸出,如余額,商品已加入購物車等消息,需高亮顯示
擴展需求:
1、用戶下一次登錄后,輸入用戶名密碼,直接回到上次的狀態,即上次消費的余額什么的還是那些,再次登錄可繼續購買
2、許查詢之前的消費記錄
代碼實現: import copy
# 從文件讀取用戶信息,數據結構為:
# id_info=dict(key:用戶名,values['密碼',余額,歷史消費記錄[{商品名:價格:數量:},{}],鎖定標志位:0未鎖定,1鎖定])
f = open("id_info.txt", 'r', encoding="GBK")
id_info = eval(f.read())
f.close()
# -----------------------------------------------用戶登陸模塊-------------------------------------------
# 新用戶登錄,輸入兩遍密碼確認;老用戶登錄則從用戶信息表讀取帳密校驗;同一帳號連續輸入三次則鎖定,退出程序
count = 0
user_name = None
is_same_user = True
last_login_user = None
is_login = False
while count < 3:
user_name = input("請輸入用戶名:").strip()
user_pwd = input("請輸入密碼:").strip()
if last_login_user is None: # 首次登陸
last_login_user = user_name
if user_name != last_login_user: # 判斷是否連續登陸
is_same_user = False
if user_name in id_info:
if id_info[user_name][3] == 0: # 判斷帳號是否鎖定
if user_pwd == id_info[user_name][0]:
print("尊敬的\033[1;31;40m%s\033[0m,歡迎登陸路飛商城!" % user_name)
is_login = True
break
else:
print("密碼錯誤,請重輸!")
else:
print("用戶帳號已凍結,請聯系管理員解鎖。")
else:
print("該用戶帳號不存在,請聯系管理員分配帳號!")
count += 1
else:
print("密碼輸入錯誤超過3次!")
if is_same_user is True: # 鎖定帳號,寫入文件保存
id_info[user_name][3] = 1
f = open("id_info.txt", 'w', encoding="GBK")
f.write(str(id_info))
f.close()
# ---------------------------------------------用戶選購商品模塊-------------------------------------------
# 支持保存和查詢全部歷史消費記錄,當天購物車清單,同時對展示的同類商品進行了數量合并
goods = [{"name": "電腦", "price": 1999}, {"name": "鼠標", "price": 10}, {"name": "游艇", "price": 20},
{"name": "美女", "price": 998}, ]
cart_history = id_info[user_name][2] # 讀取文件傳給id_info的歷史購物記錄
# 初始化本次購物車商品列表,用于按q打印時輸出
cart = []
j = 0
while j < len(goods):
cart.append({})
j += 1
# 定義打印菜單所需的字符串
s = "商品列表"
s_c = "本次購物車清單"
s_h = "歷史消費記錄"
if is_login:
while True:
if id_info[user_name][1] is None: # 未輸入工資的用戶,首次運行程序輸入,以后登陸不再輸入工資
user_salary = input("請輸入工資:").strip()
if user_salary.isdigit():
id_info[user_name][1] = int(user_salary)
break
else:
print("工資輸入的不是數字,請重輸!")
else:
break
# 用戶往購物車循環添加商品,加入的商品需同時保存到歷史記錄,退出時寫入文件保存
while True:
# 打印商品列表和高亮顯示余額
print(s.center(30, '-'))
for index, i in enumerate(goods):
print("%s. %s 單價:%s元".center(30) % (index, i['name'], i['price']))
print("您賬戶余額為: \033[1;31;40m%d\033[0m 元".center(38, '-') % id_info[user_name][1])
choice = input("請輸入商品數字編號加入購物車,\n查詢歷史消費記錄按h,退出請按q:")
if choice.isdigit():
choice_num = int(choice)
if 0 <= choice_num < len(goods):
if id_info[user_name][1] >= goods[choice_num]['price']: # 余額足夠
# 本次購物車無同種商品,則增加關鍵字num統計同種商品的購買數量
if cart[choice_num].get('num') is None:
cart[choice_num] = goods[choice_num]
cart[choice_num].setdefault('num', 1)
id_info[user_name][1] -= goods[choice_num]['price']
else:
cart[choice_num]['num'] += 1 # 如購物車已有同名商品則已購數量加1
id_info[user_name][1] -= goods[choice_num]['price']
# 歷史購物記錄同時加入本次購物記錄
if cart_history[choice_num].get('num') is None:
cart_history[choice_num] = copy.deepcopy(goods[choice_num])
cart_history[choice_num].setdefault('num', 1)
else:
cart_history[choice_num]['num'] += 1 # 如歷史記錄已有同名商品則已購數量加1
print("\033[1;31;40m商品 %s 已加入購物車!\033[0m" % goods[choice_num]['name'])
else:
print("對不起,您賬戶中\033[1;31;40m余額不足\033[0m,不能購買本件商品!") # 余額不足
else:
print("您輸入的商品數字編號有誤,請重新輸入:")
# 用戶輸入h,打印全部歷史消費清單和余額,含當天已消費的商品
elif choice.casefold() == 'h':
empty_num = 4
print(s_h.center(30, '-'))
for index, i in enumerate(cart_history):
if i != {}:
empty_num -= 1
print("%s. %s 單價:%d元 數量:%d" % (index, i['name'], i['price'], i['num']))
if empty_num == 4:
print("您還沒有任何歷史消費記錄,歡迎撥打客服\n電話反饋您的商品需求,謝謝!")
print("您賬戶余額為: \033[1;31;40m%d\033[0m 元".center(38, '-') % id_info[user_name][1])
# 用戶輸入q,打印本次購物車清單和余額,退出程序
elif choice.casefold() == 'q':
empty_num = 4
print(s_c.center(30, '-'))
for index, i in enumerate(cart):
if i != {}:
empty_num -= 1
print("%s. %s 單價:%d元 數量:%d" % (index, i['name'], i['price'], i['num']))
if empty_num == 4:
print("今天您還沒有購買商品,購物車是空的。")
print("您賬戶余額為: \033[1;31;40m%d\033[0m 元".center(38, '-') % id_info[user_name][1])
# 退出前將歷史消費記錄和余額保存到文件中
id_info[user_name][2] = copy.deepcopy(cart_history)
f = open("id_info.txt", 'w', encoding="GBK")
f.write(str(id_info))
f.close()
break
else:
print("您輸入的不是數字編號!")
代碼實現: import copy
# 從文件讀取用戶信息,數據結構為:
# id_info=dict(key:用戶名,values['密碼',余額,歷史消費記錄[{商品名:價格:數量:},{}],鎖定標志位:0未鎖定,1鎖定])
f = open("id_info.txt", 'r', encoding="GBK")
id_info = eval(f.read())
f.close()
# -----------------------------------------------用戶登陸模塊-------------------------------------------
# 新用戶登錄,輸入兩遍密碼確認;老用戶登錄則從用戶信息表讀取帳密校驗;同一帳號連續輸入三次則鎖定,退出程序
count = 0
user_name = None
is_same_user = True
last_login_user = None
is_login = False
while count < 3:
user_name = input("請輸入用戶名:").strip()
user_pwd = input("請輸入密碼:").strip()
if last_login_user is None: # 首次登陸
last_login_user = user_name
if user_name != last_login_user: # 判斷是否連續登陸
is_same_user = False
if user_name in id_info:
if id_info[user_name][3] == 0: # 判斷帳號是否鎖定
if user_pwd == id_info[user_name][0]:
print("尊敬的\033[1;31;40m%s\033[0m,歡迎登陸路飛商城!" % user_name)
is_login = True
break
else:
print("密碼錯誤,請重輸!")
else:
print("用戶帳號已凍結,請聯系管理員解鎖。")
else:
print("該用戶帳號不存在,請聯系管理員分配帳號!")
count += 1
else:
print("密碼輸入錯誤超過3次!")
if is_same_user is True: # 鎖定帳號,寫入文件保存
id_info[user_name][3] = 1
f = open("id_info.txt", 'w', encoding="GBK")
f.write(str(id_info))
f.close()
# ---------------------------------------------用戶選購商品模塊-------------------------------------------
# 支持保存和查詢全部歷史消費記錄,當天購物車清單,同時對展示的同類商品進行了數量合并
goods = [{"name": "電腦", "price": 1999}, {"name": "鼠標", "price": 10}, {"name": "游艇", "price": 20},
{"name": "美女", "price": 998}, ]
cart_history = id_info[user_name][2] # 讀取文件傳給id_info的歷史購物記錄
# 初始化本次購物車商品列表,用于按q打印時輸出
cart = []
j = 0
while j < len(goods):
cart.append({})
j += 1
# 定義打印菜單所需的字符串
s = "商品列表"
s_c = "本次購物車清單"
s_h = "歷史消費記錄"
if is_login:
while True:
if id_info[user_name][1] is None: # 未輸入工資的用戶,首次運行程序輸入,以后登陸不再輸入工資
user_salary = input("請輸入工資:").strip()
if user_salary.isdigit():
id_info[user_name][1] = int(user_salary)
break
else:
print("工資輸入的不是數字,請重輸!")
else:
break
# 用戶往購物車循環添加商品,加入的商品需同時保存到歷史記錄,退出時寫入文件保存
while True:
# 打印商品列表和高亮顯示余額
print(s.center(30, '-'))
for index, i in enumerate(goods):
print("%s. %s 單價:%s元".center(30) % (index, i['name'], i['price']))
print("您賬戶余額為: \033[1;31;40m%d\033[0m 元".center(38, '-') % id_info[user_name][1])
choice = input("請輸入商品數字編號加入購物車,\n查詢歷史消費記錄按h,退出請按q:")
if choice.isdigit():
choice_num = int(choice)
if 0 <= choice_num < len(goods):
if id_info[user_name][1] >= goods[choice_num]['price']: # 余額足夠
# 本次購物車無同種商品,則增加關鍵字num統計同種商品的購買數量
if cart[choice_num].get('num') is None:
cart[choice_num] = goods[choice_num]
cart[choice_num].setdefault('num', 1)
id_info[user_name][1] -= goods[choice_num]['price']
else:
cart[choice_num]['num'] += 1 # 如購物車已有同名商品則已購數量加1
id_info[user_name][1] -= goods[choice_num]['price']
# 歷史購物記錄同時加入本次購物記錄
if cart_history[choice_num].get('num') is None:
cart_history[choice_num] = copy.deepcopy(goods[choice_num])
cart_history[choice_num].setdefault('num', 1)
else:
cart_history[choice_num]['num'] += 1 # 如歷史記錄已有同名商品則已購數量加1
print("\033[1;31;40m商品 %s 已加入購物車!\033[0m" % goods[choice_num]['name'])
else:
print("對不起,您賬戶中\033[1;31;40m余額不足\033[0m,不能購買本件商品!") # 余額不足
else:
print("您輸入的商品數字編號有誤,請重新輸入:")
# 用戶輸入h,打印全部歷史消費清單和余額,含當天已消費的商品
elif choice.casefold() == 'h':
empty_num = 4
print(s_h.center(30, '-'))
for index, i in enumerate(cart_history):
if i != {}:
empty_num -= 1
print("%s. %s 單價:%d元 數量:%d" % (index, i['name'], i['price'], i['num']))
if empty_num == 4:
print("您還沒有任何歷史消費記錄,歡迎撥打客服\n電話反饋您的商品需求,謝謝!")
print("您賬戶余額為: \033[1;31;40m%d\033[0m 元".center(38, '-') % id_info[user_name][1])
# 用戶輸入q,打印本次購物車清單和余額,退出程序
elif choice.casefold() == 'q':
empty_num = 4
print(s_c.center(30, '-'))
for index, i in enumerate(cart):
if i != {}:
empty_num -= 1
print("%s. %s 單價:%d元 數量:%d" % (index, i['name'], i['price'], i['num']))
if empty_num == 4:
print("今天您還沒有購買商品,購物車是空的。")
print("您賬戶余額為: \033[1;31;40m%d\033[0m 元".center(38, '-') % id_info[user_name][1])
# 退出前將歷史消費記錄和余額保存到文件中
id_info[user_name][2] = copy.deepcopy(cart_history)
f = open("id_info.txt", 'w', encoding="GBK")
f.write(str(id_info))
f.close()
break
else:
print("您輸入的不是數字編號!")
轉載于:https://www.cnblogs.com/eric99/p/10000136.html
總結
以上是生活随笔為你收集整理的python写的购物车程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sprint冲刺计划第七天团队任务
- 下一篇: [Windows]查看运行进程的参数【w