Python 模擬購(gòu)物車(chē)的實(shí)例講解
1.功能簡(jiǎn)介
此程序模擬用戶登陸商城后購(gòu)買(mǎi)商品操作??蓪?shí)現(xiàn)用戶登陸、商品購(gòu)買(mǎi)、歷史消費(fèi)記查詢、余額和消費(fèi)信息更新等功能。首次登陸輸入初始賬戶資金,后續(xù)登陸則從文件獲取上次消費(fèi)后的余額,每次購(gòu)買(mǎi)商品后會(huì)扣除相應(yīng)金額并更新余額信息,退出時(shí)也會(huì)將余額和消費(fèi)記錄更新到文件以備后續(xù)查詢。
2.實(shí)現(xiàn)方法
架構(gòu):
本程序采用python語(yǔ)言編寫(xiě),將各項(xiàng)任務(wù)進(jìn)行分解并定義對(duì)應(yīng)的函數(shù)來(lái)處理,從而使程序結(jié)構(gòu)清晰明了。主要編寫(xiě)了六個(gè)函數(shù):
(1)login(name,password)
用戶登陸函數(shù),實(shí)現(xiàn)用戶名和密碼驗(yàn)證,登陸成功則返回登陸次數(shù)。
(2)get_balance(name)
獲取用戶余額數(shù)據(jù)。
(3)update_balance(name,balance)
更新用戶余額數(shù)據(jù),當(dāng)用戶按q鍵退出時(shí)數(shù)據(jù)會(huì)更新到文件。
(4)inquire_cost_record(name)
查詢用戶歷史消費(fèi)記錄。
(5)update_cost_record(name,shopping_list)
更新用戶消費(fèi)記錄,當(dāng)用戶按q鍵退出時(shí)本次消費(fèi)記錄會(huì)更新到文件。
(6)shopping_chart()
主函數(shù),完成人機(jī)交互,函數(shù)調(diào)用,各項(xiàng)功能的有序?qū)崿F(xiàn)。
主要操作:
(1)根據(jù)提示按數(shù)字鍵選擇相應(yīng)選項(xiàng)進(jìn)行操作。
(2)任意時(shí)刻按q鍵退出退出登陸,退出前會(huì)完成用戶消費(fèi)和余額信息更新。
使用文件:
(1)userlist.txt
存放用戶賬戶信息文件,包括用戶名、密碼、登陸次數(shù)和余額。每次用戶登陸成功會(huì)更新該用戶登陸次數(shù),每次按q鍵退出時(shí)會(huì)更新余額信息。
(2)***_cost_record.txt
存放某用戶***消費(fèi)記錄的文件,用戶首次購(gòu)買(mǎi)商品后創(chuàng)建,沒(méi)有購(gòu)買(mǎi)過(guò)商品的用戶不會(huì)產(chǎn)生該文件。每次按q鍵退出時(shí)會(huì)將最新的消費(fèi)記錄更新到文件。
3.流程圖
4.代碼
# Author:Byron Li #-*-coding:utf-8-*- '''----------------------------------------------使用文件說(shuō)明---------------------------------------------------------- 使用文件說(shuō)明 userlist.txt 存放用戶賬戶信息文件,包括用戶名、密碼、登陸次數(shù)和余額 ***_cost_record.txt 存放某用戶***消費(fèi)記錄的文件,用戶首次購(gòu)買(mǎi)商品后創(chuàng)建,沒(méi)有購(gòu)買(mǎi)過(guò)商品的用戶不會(huì)產(chǎn)生該文件 ---------------------------------------------------------------------------------------------------------------------''' import os import datetime def login(name,password): #用戶登陸,用戶名和密碼驗(yàn)證,登陸成功則返回登陸次數(shù) with open('userlist.txt', 'r+',encoding='UTF-8') as f: line = f.readline() while(line): pos=f.tell() line=f.readline() if [name,password] == line.split()[0:2]: times=int(line.split()[2]) line=line.replace(str(times).center(5,' '),str(times+1).center(5,' ')) f.seek(pos) f.write(line) return times+1 return None def get_balance(name): #獲取用戶余額數(shù)據(jù) with open('userlist.txt', 'r',encoding='UTF-8') as f: line = f.readline() for line in f: if name == line.split()[0]: return line.split()[3] print("用戶%s不存在,無(wú)法獲取其余額信息!"%name) return False def update_balance(name,balance): #更新用戶余額數(shù)據(jù) with open('userlist.txt', 'r+',encoding='UTF-8') as f: line = f.readline() while(line): pos1=f.tell() line=f.readline() if name == line.split()[0]: pos1=pos1+line.find(line.split()[2].center(5,' '))+5 pos2=f.tell() f.seek(pos1) f.write(str(balance).rjust(pos2-pos1-2,' ')) return True print("用戶%s不存在,無(wú)法更新其余額信息!" % name) return False def inquire_cost_record(name): #查詢用戶歷史消費(fèi)記錄 if os.path.isfile(''.join([name,'_cost_record.txt'])): with open(''.join([name,'_cost_record.txt']), 'r',encoding='UTF-8') as f: print("歷史消費(fèi)記錄".center(40, '=')) print(f.read()) print("".center(46, '=')) return True else: print("您還沒(méi)有任何歷史消費(fèi)記錄!") return False def update_cost_record(name,shopping_list): #更新用戶消費(fèi)記錄 if len(shopping_list)>0: if not os.path.isfile(''.join([name, '_cost_record.txt'])): #第一次創(chuàng)建時(shí)第一行標(biāo)上“商品 價(jià)格” with open(''.join([name, '_cost_record.txt']), 'a',encoding='UTF-8') as f: f.write("%-5s%+20s\n" % ('商品', '價(jià)格')) f.write(''.join([datetime.datetime.now().strftime('%c'), ' 消費(fèi)記錄']).center(40,'-')) #寫(xiě)入消費(fèi)時(shí)間信息方便后續(xù)查詢 f.write('\n') for product in shopping_list: f.write("%-5s%+20s\n"%(product[0],str(product[1]))) else: with open(''.join([name, '_cost_record.txt']), 'a',encoding='UTF-8') as f: f.write(''.join([datetime.datetime.now().strftime('%c'), ' 消費(fèi)記錄']).center(40, '-')) f.write('\n') for product in shopping_list: f.write("%-5s%+20s\n"%(product[0],str(product[1]))) return True else: print("您本次沒(méi)有購(gòu)買(mǎi)商品,不更新消費(fèi)記錄!") return False def shopping_chart(): #主函數(shù),用戶交互,函數(shù)調(diào)用,結(jié)果輸出 product_list=[ ('Iphone',5000), ('自行車(chē)',600), ('聯(lián)想電腦',7800), ('襯衫',350), ('洗衣機(jī)',1000), ('礦泉水',3), ('手表',12000) ] #商店商品列表 shopping_list=[] #用戶本次購(gòu)買(mǎi)商品列表 while(True): username = input("請(qǐng)輸入用戶名:") password = input("請(qǐng)輸入密碼:") login_times=login(username,password) #查詢輸入用戶名和密碼是否正確,正確則返回登陸次數(shù) if login_times: print('歡迎%s第%d次登陸!'.center(50,'*')%(username,login_times)) if login_times==1: balance = input("請(qǐng)輸入工資:") #第一次登陸輸入賬戶資金 while(True): if balance.isdigit(): balance=int(balance) break else: balance = input("輸入工資有誤,請(qǐng)重新輸入:") else: balance=int(get_balance(username)) #非第一次登陸從文件獲取賬戶余額 while(True): print("請(qǐng)選擇您要查詢消費(fèi)記錄還是購(gòu)買(mǎi)商品:") print("[0] 查詢消費(fèi)記錄") print("[1] 購(gòu)買(mǎi)商品") choice=input(">>>") if choice.isdigit(): if int(choice)==0: #查詢歷史消費(fèi)記錄 inquire_cost_record(username) elif int(choice)==1: #購(gòu)買(mǎi)商品 while (True): for index,item in enumerate(product_list): print(index,item) choice=input("請(qǐng)輸入商品編號(hào)購(gòu)買(mǎi)商品:") if choice.isdigit(): if int(choice)>=0 and int(choice)<len(product_list): if int(product_list[int(choice)][1])<balance: #檢查余額是否充足,充足則商品購(gòu)買(mǎi)成功 shopping_list.append(product_list[int(choice)]) balance = balance - int(product_list[int(choice)][1]) print("\033[31;1m%s\033[0m已加入購(gòu)物車(chē)中,您的當(dāng)前余額是\033[31;1m%s元\033[0m" %(product_list[int(choice)][0],balance)) else: print("\033[41;1m您的余額只剩%s元,無(wú)法購(gòu)買(mǎi)%s!\033[0m" %(balance,product_list[int(choice)][0])) else: print("輸入編號(hào)錯(cuò)誤,請(qǐng)重新輸入!") elif choice=='q': #退出賬號(hào)登陸,退出前打印本次購(gòu)買(mǎi)清單和余額信息,并更新到文件 if len(shopping_list)>0: print("本次購(gòu)買(mǎi)商品清單".center(50,'-')) for product in shopping_list: print("%-5s%+20s"%(product[0],str(product[1]))) print("".center(50, '-')) print("您的余額:\033[31;1m%s元\033[0m"%balance) update_cost_record(username,shopping_list) update_balance(username, balance) print("退出登陸!".center(50, '*')) exit() else: print("您本次沒(méi)有消費(fèi)記錄,歡迎下次購(gòu)買(mǎi)!") print("退出登陸!".center(50, '*')) exit() else: print("選項(xiàng)輸入錯(cuò)誤,請(qǐng)重新輸入!") else: print("選項(xiàng)輸入錯(cuò)誤,請(qǐng)重新輸入!") elif choice=='q': #退出賬號(hào)登陸 print("退出登陸!".center(50, '*')) exit() else: print("選項(xiàng)輸入錯(cuò)誤,請(qǐng)重新輸入!") break else: print('用戶名或密碼錯(cuò)誤,請(qǐng)重新輸入!') shopping_chart() #主程序運(yùn)行
以上這篇Python 模擬購(gòu)物車(chē)的實(shí)例講解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 使用Python的Django框架結(jié)合jQuery實(shí)現(xiàn)AJAX購(gòu)物車(chē)頁(yè)面
- Python實(shí)現(xiàn)的購(gòu)物車(chē)功能示例
- python簡(jiǎn)單商城購(gòu)物車(chē)實(shí)例代碼
- Python實(shí)現(xiàn)購(gòu)物車(chē)程序
- python購(gòu)物車(chē)程序簡(jiǎn)單代碼
- Python實(shí)現(xiàn)購(gòu)物車(chē)購(gòu)物小程序
- Python初學(xué)時(shí)購(gòu)物車(chē)程序練習(xí)實(shí)例(推薦)
- Python3實(shí)現(xiàn)購(gòu)物車(chē)功能
- Python實(shí)現(xiàn)購(gòu)物車(chē)功能的方法分析
- python實(shí)現(xiàn)購(gòu)物車(chē)功能
相關(guān)文章
Pytorch如何指定device(cuda or cpu)
這篇文章主要介紹了Pytorch如何指定device(cuda or cpu)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06Python 實(shí)現(xiàn)「食行生鮮」簽到領(lǐng)積分功能
今天我們就用 Python 來(lái)實(shí)現(xiàn)自動(dòng)簽到,省得我每天打開(kāi) APP 來(lái)操作了。感興趣的朋友跟隨小編一起看看吧2018-09-09python中的queue隊(duì)列類(lèi)型及函數(shù)用法
這篇文章主要介紹了python中的queue隊(duì)列類(lèi)型及函數(shù)用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09Python爬蟲(chóng)回測(cè)股票的實(shí)例講解
在本篇文章里小編給大家整理的是一篇關(guān)于Python爬蟲(chóng)回測(cè)股票的實(shí)例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-01-01在TensorFlow中實(shí)現(xiàn)矩陣維度擴(kuò)展
這篇文章主要介紹了在TensorFlow中實(shí)現(xiàn)矩陣維度擴(kuò)展方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05python 異常的傳遞性及主動(dòng)拋出學(xué)習(xí)
這篇文章主要為大家介紹了python 異常的傳遞性及主動(dòng)拋出學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03