zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    使用ASP.Net MVC5 Web API OData和Sencha Touch 开发WebAPP
    @MarkFan 口语练习录音 20140401
    Listening Carefully SP1403S
    Listening Carefully SP1403
    团队股权分配
    Sencha Architect 安装与使用
    离乡与理想 Demo
    PowerDesigner创建物理模型
    SOA 面向服务架构 阅读笔记(六)
    SOA 面向服务架构 阅读笔记(五)
  • 原文地址:https://www.cnblogs.com/sandler613/p/5514450.html
Copyright © 2011-2022 走看看