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
------------------------------------

 

posted @ 2016-10-22 12:13  Jeb  阅读(2360)  评论(0编辑  收藏  举报