Python購物車程序


一、購物車需求說明

本文檔只適用於快速使用本程序,你可以獲得更多的細節,在作者的博客網站。
項目名稱:Python購物車程序
作者:Jeb/李家寶
時間:2016/10/21
功能說明:
1.購物車系統登錄時驗證用戶名及密碼(jeb/jeb.li);
2.用戶聯系管理員進行充值功能;
3.用戶購物並打印詳細購物列表;
4.用戶賬戶及余額持久化到文件。

使用方法:
python 購物車程序V0.2.py
適用於Windows、Linux等32位或64位操作系統,Python運行環境為python 3.5.1

備注:數據持久化均基於列表,更高效的方式可以采用Json或字典方式進行持久化,使用者可自行優化設計。

模塊代碼說明:
1.account_auth():用戶認證信息讀取函數
本函數為逐行讀取本地account_info.ini文件中用戶信息,並格式化輸出后返回account信息;
account_info.ini文本中的信息為:
jeb
jeb.li
格式化輸出后的列表信息如下:
['jeb', 'jeb.li']

2.auth_login():用戶登錄認證函數
本函數為循環登錄驗證函數,接收account_auth()傳遞的account信息,並進行驗證;
驗證通過進入購物車操作,驗證失敗重新進行用戶名及密碼輸入。

歡迎您購物車系統V0.2
請輸入用戶名:jeb
請輸入密碼:jeb.li

3.account_balance_read():從account_balance.ini文件中讀取用戶的余額信息並返回

歡迎您[jeb]光臨!
您的賬戶余額為:[7095]

4.account_recharge(user,cash):通過管理員賬戶登錄購物車,給在用戶充值指定的金額並持續化到本地;
-------------操作列表-------------
購物操作編號:1
充值操作編號:2
退出操作請輸入:quit
請輸入操作編號【quit】>>:2
-----------管理員登錄界面------------
請輸入管理員賬戶名:admin
請輸入管理員密碼:admin
歡迎管理員登錄購物車系統!
請輸入您需要為[jeb]賬戶充值的金額:2000
充值成功![jeb]賬戶現在的余額為:[9095]

5.account_save(account):用戶購物完畢后,更新用戶的余額信息到本地文件account_balance.ini,采用'W+'的方式進行覆蓋寫更新用戶及余額信息
------------您的購物清單------------
名稱 價格 數量
Iphone 5800 1
Coffee 30 2
您消費的總金額:[5860]
您所剩的余額為:[1235]
購物時間:2016-10-22 00:32:30
------------------------------------
6.shop():購物車主邏輯函數,包括判斷用戶及管理員密碼是否正確,余額是否足以購買商品,余額不足打印友好提示,並打印購物清單記錄,退出系統等。

Enjoy!

二、程序代碼段:

#!/usr/bin/env python
#_*_coding:utf-8 _*_
#__author__ = 'Jeb.li/李家寶'
#__Date__ = 2016/10/19
import datetime
import os

#購物車商品清單列表
shoplist =[
    ['Iphone',5800],
    ['Macbook',12800],
    ['Coffee','30'],
    ['Bike','2000'],
]
client_list = []#客戶購物清單商品名稱--價格列表
client_lists = []#客戶購物清單商品名稱--數量列表
client_lists2 = []#客戶購物清單商品名稱--價格--數量列表
client_lists3 = []#客戶購物清單商品名稱--價格--數量列表set集,去除重復項

#------------------------------------------------------
#購物車登錄模塊

#失敗次數計數器
count = 0
#賬戶認證列表,初始化用戶名jeb,密碼為jeb.li
account_info =[]
#賬戶余額信息列表
account_balance =[]
#客戶賬戶信息格式化讀取模塊
def account_auth():
    Account =[]
    file_object = open('account_info.ini', 'r')
    try:
        for line in file_object.readlines():
            line_temp = line.replace('\n','')
            Account.append(line_temp)
    finally:
        file_object.close()
    return Account

#管理員賬戶認證函數,初始化管理員賬戶為admin,密碼為admin
def account_admin_auth():
    Account_admin =[]
    file_object = open('admin_info.ini', 'r')
    try:
        for line in file_object.readlines():
            line_temp = line.replace('\n','')
            Account_admin.append(line_temp)
    finally:
        file_object.close()
    return Account_admin

#賬戶余額信息格式化讀取模塊
def account_balance_read():
    balance =[]
    file_object = open('account_balance.ini', 'r')
    try:
        for line in file_object.readlines():
            line_temp = line.replace('\n','')
            balance.append(line_temp)
    finally:
        file_object.close()
    return balance

#賬戶及余額信息持久化到本地account.ini
def account_save(account):
    #以消除文件內容,然后以讀寫方式打開文件。
    SaveFile = open('account_balance.ini','w+')
    SaveFile.write(account[0])
    SaveFile.write('\n')
    SaveFile.write(str(account[1]))
    SaveFile.close()
#賬戶充值函數
def account_recharge(user,cash):
    #以消除文件內容,然后以讀寫方式打開文件。
    SaveFile = open('account_balance.ini','w+')
    SaveFile.write(user)
    SaveFile.write('\n')
    SaveFile.write(str(cash))
    SaveFile.close()

#登錄循環驗證主模塊
def auth_login():
    while True:
        print("歡迎您購物車系統V0.2")
        name = input('請輸入用戶名:')
        pwd = input('請輸入密碼:')
        account = account_auth()
        if name == account[0] and pwd == account[1]:
            return name
        else:
            print("用戶名或密碼錯誤,請重新輸入!")

#-----------------------------------------------
#購物單日期函數
def shoptime():
    now = datetime.datetime.now()#時間數組
    styleTime = now.strftime("%Y-%m-%d %H:%M:%S")
    return styleTime
#-------------------------------------------------
#購物車數據結構
#-------------------------------------------------
def shop():
    #客戶認證登錄函數
    user = auth_login()
    #賬戶信息-余額列表
    account_balance2 = [user]
    #賬戶余額從本地account_balance.ini讀取,並賦予變量account_balance
    account_balance = account_balance_read()
    #初始化salary值
    salary = int(account_balance[1])
    #保存salary值
    salary_init = salary
    #打印賬戶信息及余額
    print("歡迎您\033[32;1m[%s]\033[0m光臨!" %user)
    print("您的賬戶余額為:\033[31;1m[%s]\033[0m" %salary)

    while True:
        # 打印操作界
        print("操作列表".center(30, "-"))
        print("購物操作編號:1")
        print("充值操作編號:2")
        print("退出操作請輸入:quit")
        operations = input("請輸入操作編號【quit】>>:")
        if operations.isdigit():
            operations = int(operations)
            if operations == 1:
                break
            elif operations == 2:
                count =0
                while True:
                    print("管理員登錄界面".center(30,"-"))
                    name = input('請輸入管理員賬戶名:')
                    pwd = input('請輸入管理員密碼:')
                    admin = account_admin_auth()
                    if name == admin[0] and pwd == admin[1]:
                        print("歡迎管理員登錄購物車系統!")
                        break
                    else:
                        print("用戶名或密碼錯誤,請重新輸入!")
                        count = count +1
                        if count >= 3:
                            print("\033[31;1m管理員賬戶錯誤輸入超過三次,賬戶將自動退出系統!\033[0m")
                            exit()

                money = int(input("請輸入您需要為\033[31;1m[%s]\033[0m賬戶充值的金額:" % user))+salary
                account_recharge(user, money)
                money2 =int(account_balance_read()[1])
                print("充值成功!\033[31;1m[%s]\033[0m賬戶現在的余額為:\033[31;1m[%s]\033[0m" %(user,money2))
            else:
                print("請輸入正確的操作項數字!".center(30,"-"))
        elif operations == "quit":
            print("歡迎下次再來!".center(30,"-"))
            exit()

    #打印商品列表
    print("商品列表".center(30,"-"))
    for i,elem in enumerate(shoplist):
        print(i,elem[0],elem[1])
    print("".center(34,"-"))
    #購物車購物程序
    while True:
        choice = input("請輸入產品編號【quit】>>:")
        if choice.isdigit():
            choice = int(choice)
            if choice >=0 and choice < len(shoplist):
                #判斷錢夠不夠
                p = shoplist[choice]
                if salary > int(p[1]):#買的起
                    salary -= int(p[1])#執行扣款
                    client_list.append(p)
                    #\033[32;1m[%s]\033[0m 32--綠色 31--紅色
                    print("已加入\033[32;1m[%s]\033[0m進入您的購物車,您當前的余額為:\033[31;1m[%s]\033[0m" %(p[0],salary))
                else:
                    print("余額不足,您的余額為:\033[32;1m[%s]\033[0m" % salary)
                    continue
            else:
                print("沒有此商品,請輸入正確的商品編號!")
        elif choice == "quit":
            #購物清單商品名稱--數量列表
            for j, elem2 in enumerate(client_list):
                client_lists.append(elem2[0])
            # 購物清單商品名稱--價格--數量列表
            for k, elem3 in enumerate(client_list):
                client_lists2.append([elem3[0], elem3[1],client_lists.count(elem3[0])])
            # 購物清單商品名稱--價格--數量列表set集
            for m in client_lists2:
                if not m in client_lists3:
                    client_lists3.append(m)
            #client_lists3 = set(client_lists2)
            print("您的購物清單".center(30,"-"))
            print("名稱 價格 數量")
            for L,elem4 in enumerate(client_lists3):
                print(elem4[0],elem4[1],elem4[2])
            #print("您消費賬戶為:")
            print("您消費的總金額:\033[32;1m[%s]\033[0m"%(salary_init -salary))
            print("您所剩的余額為:\033[31;1m[%s]\033[0m" %salary)
            print("購物時間:%s" %shoptime())
            print("".center(36, "-"))
            account_balance2.append(salary)
            account_save(account_balance2)
            exit()
if __name__ == '__main__':
    shop()

三、程序流程圖:

四、程序執行效果:

歡迎您購物車系統V0.2
請輸入用戶名:jeb
請輸入密碼:jeb.li
歡迎您[jeb]光臨!
您的賬戶余額為:[11175]
-------------操作列表-------------
購物操作編號:1
充值操作編號:2
退出操作請輸入:quit
請輸入操作編號【quit】>>:2
-----------管理員登錄界面------------
請輸入管理員賬戶名:admin
請輸入管理員密碼:admin
歡迎管理員登錄購物車系統!
請輸入您需要為[jeb]賬戶充值的金額:2000
充值成功![jeb]賬戶現在的余額為:[13175]
-------------操作列表-------------
購物操作編號:1
充值操作編號:2
退出操作請輸入:quit
請輸入操作編號【quit】>>:1
-------------商品列表-------------
0 Iphone 5800
1 Macbook 12800
2 Coffee 30
3 Bike 2000
----------------------------------
請輸入產品編號【quit】>>:2
已加入[Coffee]進入您的購物車,您當前的余額為:[11145]
請輸入產品編號【quit】>>:2
已加入[Coffee]進入您的購物車,您當前的余額為:[11115]
請輸入產品編號【quit】>>:3
已加入[Bike]進入您的購物車,您當前的余額為:[9115]
請輸入產品編號【quit】>>:3
已加入[Bike]進入您的購物車,您當前的余額為:[7115]
請輸入產品編號【quit】>>:quit
------------您的購物清單------------
名稱 價格 數量
Coffee 30 2
Bike 2000 2
您消費的總金額:[4060]
您所剩的余額為:[7115]
購物時間:2016-10-22 12:09:43
------------------------------------

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM