zoukankan      html  css  js  c++  java
  • 面版式购物车

    购物车程序:

    应该实现的功能:
      1. 注册
      2. 登陆
      3. 购物
      4. 支付
      5. 充值
    大概实现思路:
    要求用函数封装功能
    while True:
    print("""
    0. 退出
    1. 注册
    2. 登陆
    3. 购物
    4. 支付
    5. 充值
    """)
    choice=input('>>>: ').strip()
    if choice == '0':break
    if choice == '1':
    register()
    elif choice == '2':
    login()
    ....

      1 # 存储文件中用户信息
      2 # "abc|123|0,qwe|123|1000"
      3 # 将文件信息读取到内存中,以变量存储,后期需要大量与这些信息交互
      4 # 如何设计存储用户信息的集合变量
      5 # 以用户名为key的dict,value为{}
      6 users_dic = {} # 从文件中读取来
      7 '''
      8 {
      9     'abc': {'ps': '123', 'money': 0},
     10     'qwe': {'ps': '000', 'money': 1000}
     11 }
     12 '''
     13 # 存储当前登录成功的用户的信息
     14 user = {}
     15 # {'usr': 'abc', 'ps': '123', 'money': 0}
     16 
     17 # 获取所有已注册的用户,存放到user_dic
     18 # 获取文件中用户信息
     19 def get_users():
     20     # 如果用户集合已经有值,代表用户信息已经读取过了,不需要重复读取|当值为none,0,空时,为False
     21     if users_dic:#不为空,说明已经读取文件
     22         return users_dic
     23     # 为空,读文件,存用户们
     24     with open('usr.info', 'rt', encoding='utf-8') as f:
     25         # "abc|123|0,qwe|123|1000" or "abc|123|0" or none
     26         data = f.read()
     27         if not data:
     28             # 文件中并没有用户信息,那么用户集合也不需要存储,可以直接返回
     29             return users_dic
     30         # 'abc|123|0, qwe|123|1000' or 'abc|123|0',一个用户也可以用,进行分割
     31         data_list = data.split(',')
     32         for d in data_list:
     33             # ['abc', '123', '0']
     34             user_info = d.split('|')
     35             usr = user_info[0]
     36             ps = user_info[1]
     37             # 文件中读取的money为字符串,将money以数字存储在内存,分别购物等的运算
     38             money = int(user_info[2])
     39             # 按照 'abc': {'ps': '123', 'money': 0} 存储到 users_dic
     40             users_dic[usr] = {'ps': ps, 'money': money}
     41         return users_dic
     42 
     43 # 注册
     44 def regist():
     45     print("注册界面...")
     46     # 获取所有用户信息
     47     users = get_users()#获得返回的用户信息字典
     48     # 账号输入操作
     49     temp_info = ""
     50     #输入用户名阶段
     51     while True:
     52         usr = input(temp_info + "输入账号:").strip()
     53         # 输入的用户名有格式问题
     54         if not usr:  # 用户名为空
     55             print("账号不能为空!")
     56             temp_info = "请重新"
     57             continue
     58         # 用户已存在
     59         if usr in users:
     60             print("用户已存在,请更换用户名!")
     61             temp_info = "请重新"
     62             continue
     63         # 用户不存在,可以进入输入密码阶段
     64         break
     65     # 密码输入操作
     66     temp_info = ""
     67     while True:
     68         ps = input(temp_info + "输入密码:").strip()
     69         # 输入的密码有格式问题
     70         if len(ps) < 3:
     71             print("密码过短!")
     72             temp_info = "请重新"
     73             continue
     74         # ... 添加其他密码安全判断
     75         break
     76     # 账号密码均满足条件,可以注册(写入文件)
     77     with open('usr.info', 'at', encoding='utf-8') as f:
     78         # 文件是否为空
     79         # 为空;不为空abc|123|0 ,qwe|123|0
     80         # users是否为空可以直接反映文件是否为空
     81         if users:#不为空
     82             user_info = ',%s|%s|%d' % (usr, ps, 0)
     83         else:#为空
     84             user_info = '%s|%s|%d' % (usr, ps, 0)
     85         f.write(user_info)
     86     # 文件操作完代表信息更新到文件中了,
     87     # 还需要将信息更新到内存字典中
     88     users[usr] = {'ps': ps, 'money': 0} #key对应value进行存值
     89     print('注册成功!')
     90 
     91 
     92 # 登录
     93 def login():
     94     global user
     95     print("登录界面...")
     96     # 获取所有用户信息
     97     users = get_users()
     98     # 当前是否为登录状态
     99     # 可以通过user(存储已登录账号)来反映是否为登录状态
    100     if user:
    101         print("系统已经处于登录状态!")
    102         return#结束登录函数
    103     # 用户名输入
    104     temp_info = ""
    105     while True:
    106         usr = input(temp_info + '输入账号:').strip()
    107         # 输入账号为空
    108         if not usr:
    109             print("账号不能为空!")
    110             temp_info = "请重新"
    111             continue
    112         # 账号不存在
    113         if not usr in users:
    114             print("输入用户名不存在")
    115             # 文件为空,没有必要继续,不为空,可以让用户重新输入
    116             if users:
    117                 temp_info = "请重新"
    118                 continue
    119             #文件为空
    120             return
    121         #账号输入正确,结束循环
    122         break
    123     # 输入密码操作
    125     count = 0
    126     while count < 3:
    127         ps = input(temp_info + '输入密码:').strip()
    128         #密码正确
    129         if users[usr]['ps'] == ps:
    130             print('登录成功!')
    131             # money在二次以后操作文件可能已经拥有金额
    132             money = users[usr]['money']
    133             # 直接赋值代表覆盖,方法内不能直接覆盖全局变量,需要做global处理
    134             user = {'usr': usr, 'ps': ps, 'money': money}
    135             break
    136         #密码错误
    137         print('密码输入错误!')
    138         temp_info = "请重新"
    139         count += 1
    140 
    141 # # 登录状态验证
    142 # def not_login():
    143 #     if not user:
    144 #         print('系统未登录!')
    145 #         return True
    146 
    147 # 账户
    148 def account():
    149     #未登录
    150     if not user:
    151         print('系统未登录!')
    152         return  #结束函数
    153     #已登录
    154     user_info = '账户:%s | 密码:%s | 金额:%d ' % (user['usr'], user['ps'], user['money'])
    155     print(user_info)
    156 
    157 # 注销
    158 def logout():
    159     if not user:
    160         print('系统未登录!')
    161         return
    162     #已登录
    163     user.clear()
    164     print('注销成功')
    165 
    166 # 登录成功后,对于商品的一系列操作
    167 # 商品列表
    168 goods_dic = {'1': 'iPhone', '2': 'Mac', '3': 'iPad'}
    169 price_dic = {'iPhone': 100, 'Mac': 200, 'iPad': 50}
    170 # 购物车
    171 shop_car = {}
    172 # {'iPhone': 3, 'iPad': 1}
    173 goods_msg = '''
    174 请添加商品到购物车:
    175     1.iPhone | 2.Mac | 3.iPad | 0.退出购买'''
    176 
    177 # 充值
    178 def top_up():
    179     if not user:
    180         print('系统未登录!')
    181         return
    182     temp_info = ""
    183     while True:
    184         money = input(temp_info + '输入充值金额:').strip()
    185         if not money.isdigit():
    186             print('输入金额有误!')
    187             temp_info = "请重新"
    188             continue
    189         money = int(money)
    190         break
    191     # 更新金额
    192     update_info('money', money)
    193     print("充值完毕!")
    194 
    195 # 对密码或金额进行修改
    196 def update_info(k, v):
    197     # 需要更新的内容有:
    198     # 1.当前登录状态下的用户
    199     # 2.内存中的用户们
    200     # 3.文件中的用户信息
    201 
    202     # 更新1号位
    203     # 区分更新的类型
    204     if k == 'money':
    205         user[k] += v
    206     else:#改密码
    207         user[k] = v
    208     # 通过1号位更新2号位
    209     users = get_users()
    210     #users['abc']['money'] = user['money']
    211     users[user['usr']][k] = user[k]
    212     # 通过2号位更新3号位
    213     #
    214     # {'abc': {'ps': '123', 'money': 0},'qwe': {'ps': '000', 'money': 1000}}
    215     # 转换为
    216     # "abc|123|0,qwe|123|1000"
    217     # 写入文件
    218     # dict 转换为 str
    219     users_info = ''
    220     for k, v in users.items():
    221         usr = k
    222         ps = v['ps']
    223         #写入文件时是字符串
    224         money = str(v['money'])
    225         if not users_info:#拼接第一个用户
    226             users_info += '|'.join((usr, ps, money))#覆盖
    227         else:#拼接第二及以后用户时,文件已经写入第一个用户
    228             users_info += ',' + '|'.join((usr, ps, money))
    229     # 转换完毕后便可以写入文件
    230     with open('usr.info', 'wt', encoding='utf-8') as f:
    231         f.write(users_info)
    232 
    233 # 购物
    234 def shopping():
    235     if not user:
    236         print('系统未登录!')
    237         return
    238     print(goods_msg)
    239     while True:
    240         # 商品编号
    241         goods_num = input("商品编号:").strip()
    242         if goods_num == '0':
    243             print('退出购买!')
    244             break
    245         if not goods_num in goods_dic:
    246             print('商品不存在!')
    247             continue
    248 
    249         while True:
    250             # 商品数
    251             count = input('商品个数:').strip()
    252             if not count.isdigit():
    253                 print('个数有误!')
    254                 continue
    255             count = int(count)
    256             # 编号与个数均正确
    257             # 加入购物车:{商品名: 个数}
    258             goods = goods_dic[goods_num]#商品名
    259             # 通过商品与购物车进行匹配,判断商品个数是累加还是赋值
    260             if not goods in shop_car:
    261                 shop_car[goods] = count
    262             else:
    263                 shop_car[goods] += count
    264             # 更新完购物车后代表一次购物车添加完毕
    265             # 查看一下当前购物车信息
    266             shop_cart_info()
    267             break
    268     # 进入支付:余额充足直接付款,不足充值
    269     pay_money()
    270 
    271 # 购物车
    272 def shop_cart_info():
    273     if not shop_car:
    274         print("购物车为空,可前往购物!!!")
    275         return
    276     print("购物车: ", shop_car)
    277 
    278 # 支付
    279 def pay_money():
    280     if not user:
    281         print('系统未登录!')
    282         return
    283     # 由购物来到支付,也可能主动调用支付
    284     if not shop_car:
    285         print("购物车为空,请前往购物!")
    286         return
    287     # 计算购物车内商品总价
    288     total = 0
    289     for goods in shop_car:
    290         total += price_dic[goods] * shop_car[goods] # 名称*价格
    291     # 判断余额与商品总价大小
    292     if user['money'] >= total:
    293         print('余额充足,购买成功!')
    294         # 更新信息
    295         reduce = 0 - total
    296         update_info('money', reduce)
    297         # 支付成功后,需要清空购物车
    298         shop_car.clear()
    299     else:
    300         print('余额不足,请充值!')
    301         top_up()
    302 
    303 
    304 # 系统功能提示信息
    305 sys_msg = '''
    306 欢迎使用购物车简单系统,请选择:
    307 1.注册 | 2.登录 | 3.账户 | 4.充值 | 5.购物 | 6.支付 | 7.购物车 | 10.注销 | 0.退出
    308 >>>'''
    309 # 功能字典
    310 method_dic = {
    311     '1': regist,
    312     '2': login,
    313     '3': account,
    314     '4': top_up,
    315     '5': shopping,
    316     '6': pay_money,
    317     '7': shop_cart_info,
    318     '10': logout
    319 }
    320 
    321 # 系统入口
    322 def system():
    323     while True:
    324         choice = input(sys_msg).strip()
    325         # 退出选项
    326         if choice == '0':
    327             print("退出系统!")
    328             return
    329         # 错误选项
    330         if not choice in method_dic:
    331             print("功能输入有误,请重新输入")
    332             continue
    333         # 正确选项: eg: '1'-> regist
    334         method_dic[choice]()
    335 
    336 system()
  • 相关阅读:
    JavaWeb 之 XML 约束
    JavaWeb 之 XML 基础
    Java 之 方法引用
    Java 之 Stream 流
    Java 之 常用函数式接口
    Java 之 函数式编程
    Java 之 函数式接口
    Java 之 JDBCTemplate
    Java 之 数据库连接池
    Java 之 JDBC
  • 原文地址:https://www.cnblogs.com/xuechengeng/p/9688281.html
Copyright © 2011-2022 走看看