写一个商品管理的程序

1、添加商品

            商品名称:商品已经存在的话,要提示

            商品价格: 校验,是大于0的数字

            商品数量:校验,只能是大于0的整数

2、删除商品

            商品名称:商品不存在的话,要提示

3、查看商品

            显示所有的商品信息

4、退出

实现的过程如下:

import json
import os

def is_positive_float(str1):
    if str1.count('.') == 1:
        left, right = str1.split('.')
        if left.isdigit() and right.isdigit():
            return True
        else:
            return False
    elif str1.isdigit() and int(str1) > 0:
        return True
    return False

def add_product():
    with open('product.json', 'a+', encoding='utf-8') as f:   #以a+模式打开文件,如果存在判断是否有商品
        f.seek(0)    #文件指针放到最前面以便读取文件
        if os.path.getsize('product.json'): #有商品读出商品,放到字典里
            product = json.load(f)
        else:
            product = {}       #没有商品不告诉用户,直接往下走
    name = input('请输入要添加的商品名称:').strip()
    price = input('请输入商品价格:').strip()
    count = input('请输入商品数量:').strip()
    if name in product:
        print('您添加的商品已经存在')
    elif not is_positive_float(price):
        print('您添加的商品价格不是大于0的数字')
    elif not count.isdigit() or int(count) == 0:
        print('您添加的商品数量不是大于0的整数')
    else:
        product.setdefault(name, {'price': eval(price), 'count': eval(count)})
    with open('product.json', 'w', encoding='utf-8') as f:  #以清空原文件的写模式写入完整的字典数据
        json.dump(product, f, ensure_ascii=False, indent=4)


def del_product():
    with open('product.json', 'a+', encoding='utf-8') as f:
        f.seek(0)
        if os.path.getsize('product.json'):
            product = json.load(f)
        else:
            print("暂无商品,您需要先去添加商品")
            return       #文件不存在结束函数
    name = input('请输入要删除的商品名称:').strip()
    if name not in product:
        print('您输入的商品不存在!')
    else:
        product.pop(name)
    with open('product.json', 'w', encoding='utf-8') as f:
        if product:
            json.dump(product, f, ensure_ascii=False, indent=4)
        else:
            f.truncate()     #删除了所以商品后,product是空字典,继续写入会写入{},需要直接清空字典

def show_product():
    with open('product.json', 'a+', encoding='utf-8') as f:
        f.seek(0)
        if os.path.getsize('product.json'):
            product = json.load(f)
            return product
        else:
            print('暂无商品,请先添加商品')


if __name__ == '__main__':
    T = True
    while T:
        choice = input('请输入您的选择:A or a-添加商品,D or d-删除商品,S or s-查看商品,T or t-退出程序').strip()
        if choice not in ('A','D','S','T','a','s','d','t'):
            continue
        elif choice == 'A' or choice == 'a':
            add_product()
        elif choice == 'D' or choice == 'd':
            del_product()
        elif choice == 'S' or choice == 's':
            products = show_product()
            if products:
                print(products)
        elif choice == 'T' or choice == 't':
            T = False


1,文件内容为空时使用json.load(f)报错,json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0),所以要加一个判断文件内容是否为空。

2,当文件内已有商品时,a+模式下一开始没有seek(),导致有商品也未读到内容。

3,判断输入价格是否是大于0的数字时专门定义了一个函数来判断。

4,出现一些和以前的认知不符的结果时应该找找原因,肯定是哪里出问题了才会导致这样的结果,而不是直接否定之前的认识。

设计一个商品销售管理程序。该程序应该具有以下功能: (1)录入、修改、删除某商品信息; (2)显示所有商品信息; (3)按商品编号由小到大的顺序显示商品信息; (4)按商品销售数量从大到小的顺序显示商品信息; (5)按商品名称、商品编号、供货商等息进行查询,若查询息不存在,输出没找到的息; (6)商品的销售; (7)统计缺货商品(可设定一个边界范围,如数量小于5,以便及时订货),并产生订货息; (8)商品销售统计。 题目要求: (1)按照分析、设计、编码、调试和测试的软件开发过程完成这个应用程序,即在程序中加入异常处理,检查用户输入数据的有效性,以保证程序的健壮性; (2)商品信息应该包括商品编号、名称、规格、进货数量、销售数量、价格、供货商名称等; (3)为各项操作功能设计一个菜单,应用程序运行后,先显示这个菜单,然后用户通过菜单选项选则所需进行的操作项目,菜单要界面友好、清晰; (4)将所有商品信息存储在一个文件中,并实现文件的读操作,即将输入的数据以文件的形式存盘,将原来已经存盘的文件读入内存,进行管理; (5)应保证测试用例测试程序的各种边缘情况。 输入要求: 应用程序运行后,在屏幕上显示一个菜单。用户可以根据需要,选定相应的操作项目。进入每个操作后,根据应用程序的提示息,从键盘输入相应的息。 输出要求: (1)应用程序运行后,在屏幕上显示一个菜单。 (2)要求用户输入数据时,要给出清晰、明确的提示息,包括输入的数据内容、格式及结束方式等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值