Python之路—Day2作业

作业需求:
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,用户登录验证程序:

 1 #!/usr/bin/env python
 2 #    -.-    coding: utf-8    -.-
 3 # by sandler
 4 
 5 account_file = 'account.txt'  # 用户列表,包含用户名和密码
 6 
 7 def login(username, password):
 8     for i in range(3):
 9         if len(username) != 0 and len(password) != 0:
10             f = open(account_file)
11             loginSuccess = False
12             for line in f.readlines():
13                 line = line.split()
14                 if username == line[0] and password == line[1]:
15                     #print("Welcon %s login shopping mall" % username)
16                     loginSuccess = True
17                     break
18             if loginSuccess is True:
19                 return True
20                 break
21             else:
22                 continue
23     else:
24         print("多次输入错误,程序即将推出!")
Login.py

第二个是主程序,购物商城,按照作业要求部分功能未实现,后续会修改:

  1 #!/usr/bin/env python
  2 #    -.-    coding: utf-8    -.-
  3 # by sandler
  4 
  5 import sys
  6 import os
  7 import datetime
  8 import json
  9 from login import login #从login.py导入login函数
 10 
 11 
 12 username = input("username: ").strip()  #.strip可以去除用户输入中的空格
 13 password = input("password: ").strip()
 14 
 15 welcome = '''
 16 **************************************
 17 ** 33[31mWelcome %s to NB shopping mall33[0m **
 18 **************************************
 19 '''% username
 20 
 21 item_dic = {
 22     "手机":[
 23         ("Nokia",999),
 24         ("Samsung",3999),
 25         ("MOTO",2099),
 26         ("HTC",1999)
 27     ],
 28     "汽车":[
 29         ("Jeep",20000),
 30         ("Benz",40000),
 31         ("BMW",30000),
 32         ("Tesla",8000)
 33     ]
 34 }   #商品列表
 35 '''
 36 user_info = {
 37     "jack":{
 38         "balance":"",
 39         "buyname":"",
 40         "buynum":"",
 41         "total":""
 42     },
 43     "yuli":{
 44         "balance":"",
 45         "buyname":"",
 46         "buynum":"",
 47         "total":""
 48     },
 49     "alice":{
 50         "balance":"",
 51         "buyname":"",
 52         "buynum":"",
 53         "total":""
 54     }
 55 }
 56 ''' #用户信息存储示例
 57 
 58 r_log = open('userlog.txt','r') #读取文件
 59 user_log = json.load(r_log) #读取的信息序列化为字典
 60 r_log.close()   #关闭文件
 61 Balance = user_log[username]["balance"]  #用户余额
 62 Buyname = user_log[username]["buyname"]  #用户购买商品名称
 63 Buynum = user_log[username]["buynum"]    #用户购买商品数量
 64 Total = user_log[username]["total"]  #用户购买商品总价
 65 
 66 check_car = '''
 67     用 户 名:[33[31m%s33[0m]
 68     余    额:[33[31m%s33[0m]
 69     购买商品:[33[31m%s33[0m]
 70     购买数量:[33[31m%s33[0m]
 71     购买总价:[33[31m%s33[0m]
 72 ''' % (username,Balance,Buyname,Buynum,Total)
 73 
 74 if login(username,password):    #用户登录检查
 75     print(welcome)
 76 else:
 77     exit()  #用户登录失败退出程序
 78 flag = True #定义退出标签
 79 while flag:
 80     print("33[34m商品分类:33[0m")
 81     for index,val in item_dic.keys():   #循环商品分类
 82         print(index,val)
 83     user_choice = input('请选择您要购买的商品种类[q=Quit,c=Check]:')
 84     if user_choice == "q":  #用户输入为“q”退出
 85         flag = False
 86         break
 87     elif user_choice == 'c':    #用户输入为“c”打印用户信息
 88         print(check_car)
 89         print('-'*40)
 90         continue
 91     flag_t = True   #定义内循环标签
 92     while flag_t:
 93         if user_choice in item_dic.keys():  #判断用户输入商品分类
 94             sp_item = item_dic[user_choice]
 95             while flag:
 96                 print("商品列表")
 97                 for item in enumerate(sp_item): #循环打印商品明细
 98                     index = item[0]
 99                     p_name = item[1][0]
100                     p_price = item[1][1]
101                     print(index,'.',p_name,p_price)
102                 sp_choice = input("请选择您要购买的商品[q=Quit,c=Check,b=Back]:") #用户输入需要购买的商品序号
103                 if sp_choice == "q":
104                     print(check_car)
105                     print('-'*40)
106                     print("[33[31m程序即将推出,感谢使用,欢迎下次光临!33[0m")
107                     print('-'*40)
108                     flag = False
109                     break
110                 elif sp_choice == 'c':
111                     print(check_car)
112                     print('-'*40)
113                     continue
114                 elif sp_choice == 'b':  #判断用户输入是否为“b”,是则返回商品分类选择
115                     flag_t = False
116                     break
117                 sp_num = input("请输入需要购买的数量:")   #用户输入需要购买的数量
118                 if sp_choice.isdigit() and sp_num.isdigit():#判断用户输入是否为数字
119                     sp_choice = int(sp_choice)
120                     sp_num = int(sp_num)
121                     if sp_choice < len(sp_item) and sp_num != 0:
122                         p_item = sp_item[sp_choice]
123                         if p_item[1] <= Balance:
124                             #shop_car.append(p_item[0]) #放入购物车
125                             buy_money = p_item[1]*sp_num    #用户购买商品总价=数量乘以单价
126                             Balance -= buy_money    #用户余额减去用户购买商品总价
127                             print('购买[%s],数量[%s],总价[%s],您的余额为 [%s]' %(p_item[0],sp_num,buy_money,Balance))
128                             user_log[username]["balance"] = Balance #用户购买商品后的余额写入预定字典
129                             user_log[username]["buyname"] = p_item[0]   #用户购买商品名称写入预定字典
130                             user_log[username]["buynum"] = sp_num   #用户购买商品数量写入预定字典
131                             user_log[username]["total"] = buy_money ##用户购买商品总价写入预定字典
132                             w_log = open('userlog.txt','w') #以写方式打开用户信息文件
133                             json.dump(user_log,w_log)   #变更后的用户信息写入文件
134                             w_log.close()   #关闭文件
135                             #print(user_log)
136                         else:
137                             print('您的余额为 [%s],暂时不能购买,请充值! ' % Balance)
shopping.py
原文地址:https://www.cnblogs.com/sandler613/p/5514450.html