您的位置:首页 > 编程语言 > Python开发

Python之路—Day2作业

2016-05-21 12:30 519 查看
作业需求:
1. 优化购物程序,购买时允许用户选择购买多少件;
2. 允许多用户登录,下一次登录后,继续按上次的余额继续购买(可以充值);
3. 允许用户查看之前的购买记录(纪录要显示商品购买时间);
4. 商品列表分级展示;
5. 显示已购买商品时, 如果有重复的商品, 不打印多行,而是在一行展示。

本程序包含文件:
1、shopping.py 主程序
2、shopping.jpg 流程图
3、account.txt 用户信息列表
4、login.py 用户登录模块
5、userlog.txt 用户的购买记录及余额
6、readme.txt

购物商城小程序执行说明:
一、login.py:
login中包含用户验证的函数,用户登录时输入用户名密码,传参到login函数中验证,验证通过读取用户文件中的用户信息,包括购买记录、余额,login函数对用户信息文件account.txt和userlog.txt进行只读操作。
account.txt为用户列表,保存用户名和密码;
userlog.txt为用户购买记录和余额信息文件。
二、shopping.py:
shopping是主程序,执行主程序首先导入login模块,要求用户输入用户名密码,login验证用户名信息,通过后打印商品分类;
用户通过输入选择分类标签,打印分类商品明细,包括商品名称和单价;
用户可以通过输入“c”查看购物车信息和用户余额,输入“b”可以返回商品分类选择,可以重新选择商品分类,在任意输入界面,输入“q”,可以退出程序,退出程序时打印购物车商品和余额,并保存到userlog.txt文件中,以便下次登陆认证通过后显示用户信息。

第一个程序login.py,用户登录验证程序:

#!/usr/bin/env python
#    -.-    coding: utf-8    -.-
# by sandler

import sys
import os
import datetime
import json
from login import login #从login.py导入login函数

username = input("username: ").strip()  #.strip可以去除用户输入中的空格
password = input("password: ").strip()

welcome = '''
**************************************
** \033[31mWelcome %s to NB shopping mall\033[0m **
**************************************
'''% username

item_dic = {
"手机":[
("Nokia",999),
("Samsung",3999),
("MOTO",2099),
("HTC",1999)
],
"汽车":[
("Jeep",20000),
("Benz",40000),
("BMW",30000),
("Tesla",8000)
]
}   #商品列表
'''
user_info = {
"jack":{
"balance":"",
"buyname":"",
"buynum":"",
"total":""
},
"yuli":{
"balance":"",
"buyname":"",
"buynum":"",
"total":""
},
"alice":{
"balance":"",
"buyname":"",
"buynum":"",
"total":""
}
}
''' #用户信息存储示例

r_log = open('userlog.txt','r') #读取文件
user_log = json.load(r_log) #读取的信息序列化为字典
r_log.close()   #关闭文件
Balance = user_log[username]["balance"]  #用户余额
Buyname = user_log[username]["buyname"]  #用户购买商品名称
Buynum = user_log[username]["buynum"]    #用户购买商品数量
Total = user_log[username]["total"]  #用户购买商品总价

check_car = '''
用 户 名:[\033[31m%s\033[0m]
余    额:[\033[31m%s\033[0m]
购买商品:[\033[31m%s\033[0m]
购买数量:[\033[31m%s\033[0m]
购买总价:[\033[31m%s\033[0m]
''' % (username,Balance,Buyname,Buynum,Total)

if login(username,password):    #用户登录检查
print(welcome)
else:
exit()  #用户登录失败退出程序
flag = True #定义退出标签
while flag:
print("\033[34m商品分类:\033[0m")
for index,val in item_dic.keys():   #循环商品分类
print(index,val)
user_choice = input('请选择您要购买的商品种类[q=Quit,c=Check]:')
if user_choice == "q":  #用户输入为“q”退出
flag = False
break
elif user_choice == 'c':    #用户输入为“c”打印用户信息
print(check_car)
print('-'*40)
continue
flag_t = True   #定义内循环标签
while flag_t:
if user_choice in item_dic.keys():  #判断用户输入商品分类
sp_item = item_dic[user_choice]
while flag:
print("商品列表")
for item in enumerate(sp_item): #循环打印商品明细
index = item[0]
p_name = item[1][0]
p_price = item[1][1]
print(index,'.',p_name,p_price)
sp_choice = input("请选择您要购买的商品[q=Quit,c=Check,b=Back]:") #用户输入需要购买的商品序号
if sp_choice == "q":
print(check_car)
print('-'*40)
print("[\033[31m程序即将推出,感谢使用,欢迎下次光临!\033[0m")
print('-'*40)
flag = False
break
elif sp_choice == 'c':
print(check_car)
print('-'*40)
continue
elif sp_choice == 'b':  #判断用户输入是否为“b”,是则返回商品分类选择
flag_t = False
break
sp_num = input("请输入需要购买的数量:")   #用户输入需要购买的数量
if sp_choice.isdigit() and sp_num.isdigit():#判断用户输入是否为数字
sp_choice = int(sp_choice)
sp_num = int(sp_num)
if sp_choice < len(sp_item) and sp_num != 0:
p_item = sp_item[sp_choice]
if p_item[1] <= Balance:
#shop_car.append(p_item[0]) #放入购物车
buy_money = p_item[1]*sp_num    #用户购买商品总价=数量乘以单价
Balance -= buy_money    #用户余额减去用户购买商品总价
print('购买[%s],数量[%s],总价[%s],您的余额为 [%s]' %(p_item[0],sp_num,buy_money,Balance))
user_log[username]["balance"] = Balance #用户购买商品后的余额写入预定字典
user_log[username]["buyname"] = p_item[0]   #用户购买商品名称写入预定字典
user_log[username]["buynum"] = sp_num   #用户购买商品数量写入预定字典
user_log[username]["total"] = buy_money ##用户购买商品总价写入预定字典
w_log = open('userlog.txt','w') #以写方式打开用户信息文件
json.dump(user_log,w_log)   #变更后的用户信息写入文件
w_log.close()   #关闭文件
#print(user_log)
else:
print('您的余额为 [%s],暂时不能购买,请充值! ' % Balance)


shopping.py
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: