作業要示: 購物車程式:啟動程式後,輸入用戶名密碼後,如果是第一次登錄,讓用戶輸入工資,然後列印商品列表允許用戶根據商品編號購買商品用戶選擇商品後,檢測餘額是否夠,夠就直接扣款,不夠就提醒 可隨時退出,退出時,列印已購買商品和餘額在用戶使用過程中, 關鍵輸出,如餘額,商品已加入購物車等消息,需高亮顯 ...
作業要示:
購物車程式:
啟動程式後,輸入用戶名密碼後,如果是第一次登錄,讓用戶輸入工資,然後列印商品列表
允許用戶根據商品編號購買商品
用戶選擇商品後,檢測餘額是否夠,夠就直接扣款,不夠就提醒
可隨時退出,退出時,列印已購買商品和餘額
在用戶使用過程中, 關鍵輸出,如餘額,商品已加入購物車等消息,需高亮顯示
用戶下一次登錄後,輸入用戶名密碼,直接回到上次的狀態,即上次消費的餘額什麼的還是那些,再次登錄可繼續購買
允許查詢之前的消費記錄
先上一下流程吧!
具體代碼還在優化中》》》先一下與流程圖對應的代碼吧!
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 import time,sys,os 5 with open('user_file.txt','r',encoding='utf-8') as user_file: 6 user_list=eval(user_file.readline())#轉換用戶文件中的字元串 7 lock_name=open('lock_name.txt','r+',encoding='utf-8')#打開鎖定用戶列表文件 8 lock_list=eval(lock_name.readline())#轉換鎖定用戶文件中的字元串 9 10 def userchar(_user_name):#檢測用戶名的函數 11 while True: 12 if _user_name in user_list and _user_name not in lock_list:#判斷用戶是否存在並正常 13 return True#存在返回真 14 break 15 elif _user_name in user_list and _user_name in lock_list:#判斷用戶是否被鎖定 16 print('您的用戶已經被鎖定,請聯繫商家解鎖!') 17 break 18 else: 19 print('您輸入用戶不存在,請先註冊') 20 break 21 22 def confirm():#退出確認函數 23 qu=input("是否退出登陸!按\033[31;1mY/y\033[0m退出? 按其它鍵重新登陸:") 24 if qu=='Y'or qu=='y': 25 print("您已經退出!" ) 26 exit()#退出程式 27 else : 28 pass 29 30 def user_pass(): 31 bool=True#定義退出迴圈條件變數 32 while bool: 33 _user_name=(input('請輸入用戶名:')) 34 if userchar(_user_name.strip()):#運行檢測用戶名的函數判斷,去除兩邊空格 35 count=3#定義鎖次數 36 while count>0 :#如果密碼錯誤次數超過退出密碼輸入 37 #password=getpass.getpass('請輸入密碼:') 38 password=input('請輸入密碼:') 39 if password==user_list[_user_name]:#密碼通過驗證結束迴圈 40 print("密碼通過驗證") 41 bool=False 42 print("歡迎您 \033[32;1m%s\033[0m 您已經登陸成功!" % _user_name) 43 return _user_name#返回用戶名 44 else: 45 count -=1#次數減少 46 print("密碼錯誤請重試,剩餘:\033[31;1m%s\033[0m次! "% count) 47 pass 48 else: 49 print("\033[31;1m超出所試次數,賬戶已鎖定!請聯繫商家!\033[0m") 50 lock_list.append(_user_name)#將用戶名加出鎖定列表 51 lock_name.seek(0)#指針移動到開頭,以免產生多個元組 52 lock_name.write(str(lock_list))#寫入鎖定用戶文件 53 lock_name.tell()#獲取當前指針,以免產生多個元組 54 lock_name.close()#關閉鎖定用戶文件 55 confirm()#退出確認函數 56 #continue#退回到輸入用戶名的位置 57 else:#如果用戶名出錯新來過 58 confirm() 59 pass 60 61 def infor():#打開用戶信息函數 62 with open('user_infor','r+',encoding='utf-8') as user_infor:#打開用戶購物信息文件 63 infor_list=eval(user_infor.readline())#轉換文件的字元串 64 return infor_list 65 66 #程式開始: 67 if os.path.exists('history'):#確認文件是否存在 68 pass 69 else: 70 with open('history','w',encoding='utf-8') as user_history:#創建一個用戶帳戶購物記錄文件 71 user_history.write('{}')#寫入空值 72 pass 73 74 if os.path.exists('user_infor'):#確認文件是否存在 75 pass 76 else: 77 with open('user_infor','w',encoding='utf-8') as user_infor:#創建一個用戶帳戶信息記錄文件 78 user_infor.write('{}')#寫入空值 79 pass 80 81 print("歡迎來到\033[31;1mpython\033[0m購物商城!") 82 time_format='%y-%m-%d %X'#定義時間格式 83 times=time.strftime(time_format)#定義時間 84 _user_name= user_pass()#將通過驗證的用戶名賦於變數 85 86 if _user_name in infor():#如果用戶信息存在記錄就跳過 87 pass 88 else: 89 while True: 90 name_char=input("首次登陸,請輸入工資(購物資金):")#用戶輸入工資(購物資金) 91 if name_char.isdigit():#檢測輸入是否為整數 92 name_char=int(name_char)#轉為int 93 with open('history','r+',encoding='utf-8') as user_history:#打開用戶帳戶購物記錄文件 94 history_list=eval(user_history.readline())#將文本讀為字典 95 history_list[_user_name]={}#創建用戶購物記錄 96 user_history.seek(0)#移到開頭 97 user_history.write(str(history_list))#寫入文件 98 with open('user_infor','r+',encoding='utf-8') as user_infor: 99 infor_list=eval(user_infor.readline())#轉換首登用戶文件中的字元串 100 infor_list[_user_name]={"金額":name_char} 101 user_infor.seek(0) 102 user_infor.write(str(infor_list))#寫入用戶信息 103 break 104 else: 105 print('金額不能為0或負數請正確輸入金額!') 106 continue 107 #再次登陸直接顯示用戶信息 108 infor_list=infor()#獲取用戶信息字典 109 name_char=int(infor_list[_user_name]['金額'])#獲取餘額 110 with open('history','r',encoding="utf-8") as user_history:#讀取用戶文件 111 history_list=eval(user_history.readline())#用戶購物信息 112 shoplist=[]#購物車列表 113 shop_count=0#購物金額統計 114 ###進入商品列表### 115 goodsname=[]#定義商品列表 116 print('用戶名:\033[32;1m%s\033[0m:'%_user_name)#輸出用戶信息 117 print('您的餘額:\033[31;1m%s\033[0m:'%name_char) 118 history=history_list[_user_name]#用戶購物記錄信息 119 print('您的購物記錄如下:') 120 for k,v in history.items():#轉為列表進行輸出 121 print(k,v)#輸出購物記錄 122 print('載入商品列表:') 123 #載入動態 124 for i in range(40): 125 sys.stdout.write('#') 126 sys.stdout.flush() 127 time.sleep(0.05) 128 print('\n') 129 130 131 with open('goodslist.txt','r',encoding='utf-8') as f:#打開商品列表文件 132 for line in f: 133 a=line.find(',')#定位分割符的索引進行分割 134 goodsname.append((line[0:a],int(line[a+1:])))#元組模式追加到列表,價格轉為整數 135 136 while True: 137 for index,p_item in enumerate(goodsname):#取出下標輸出 商品列表 138 print(index,p_item)#輸出商品列表 139 user_index=input('請輸入商品編號添加你所在購買的商品,按用\033[31;1mq/Q\033[0m退出>>>:') 140 if user_index.isdigit():#判斷是否為整數 141 user_index=int(user_index)#轉為數字 142 if user_index < len(goodsname) and user_index>=0:#判斷所選商品編號在在列表 143 p_item=goodsname[user_index]#讀取下標所在(元素)商品 144 if p_item[1]<=name_char:#餘額是否足夠 145 shoplist.append(p_item)#添加到購物車 146 name_char-=p_item[1]#扣除金額 147 shop_count+=p_item[1]#累加購物金額 148 print("添加 \033[32;1m%s\033[0m 到購物車,價格: \033[32;1m%s\033[0m 元"% p_item) 149 print("你的購物金額餘 \033[31;1m%s\033[0m 元"% name_char) 150 else: 151 print("你的購物金額餘 \033[41;1m%s\033[0m 元,無法購買該商品!" % name_char) 152 else: 153 print('輸入錯誤,該編號 \033[41;1m%s\033[0m 的商品不存在!'%user_index) 154 elif user_index=='q'or user_index=='Q': 155 print('你的購物清單:') 156 for up in shoplist:#列印購物清單 157 print(up) 158 print("你的購物總金額為:\033[32;1m%s\033[0m 元!"% shop_count) 159 print("你的購物金額餘: \033[31;1m%s\033[0m 元!" % name_char) 160 while True: 161 confirm=input("你是否確定退出購物?\033[31;1m Y/y \033[0m 是 \033[31;1mN/n\033[0m 否:") 162 if confirm== 'Y'or confirm== 'y' : 163 infor_list[_user_name]['金額']=name_char#修改用戶金額(購物後) 164 shoplist.append(('總額:',shop_count))#列表加入總額 165 history_list[_user_name][times+'購物清單:']=shoplist#添加時間:清單 166 with open('user_infor','w',encoding="utf-8") as user_infor:#寫入文件用戶信息 167 user_infor.seek(0)#移到最前 168 user_infor.write(str(user_list))#寫入 169 with open('history','r+',encoding='utf-8') as user_history:#購物信息寫入文件 170 user_history.seek(0)#移到最前 171 user_history.write(str(history_list))#寫入 172 exit(print("謝謝!歡迎您再次光臨!")) 173 elif confirm=='N'or confirm== 'n' : 174 break 175 else: 176 print("輸入錯誤!請按提示輸入!") 177 continue 178 else: 179 print('\033[41;1m輸入商品編號錯誤,請重新輸入!\033[0m')
還著一點點,擼了一天的代碼了!!還想要更好!!
完美 主義,傷不起來!!