基于 Python 的农产品销售系统的设计与实现

举报
William 发表于 2025/06/18 09:16:44 2025/06/18
41 0 0
【摘要】 基于 Python 的农产品销售系统的设计与实现​​1. 引言​​在乡村振兴与农业数字化转型的背景下,农产品销售模式正从传统线下逐步转向线上化、信息化。传统农产品销售存在信息不透明、库存管理低效、供需匹配困难等问题,亟需通过数字化系统提升效率。本文设计的农产品销售系统基于 Python 开发,采用轻量级文件存储(CSV/JSON)和面向对象编程(OOP)技术,实现农产品信息管理、订单处理、库...

基于 Python 的农产品销售系统的设计与实现


​1. 引言​

在乡村振兴与农业数字化转型的背景下,农产品销售模式正从传统线下逐步转向线上化、信息化。传统农产品销售存在信息不透明、库存管理低效、供需匹配困难等问题,亟需通过数字化系统提升效率。
本文设计的农产品销售系统基于 Python 开发,采用轻量级文件存储(CSV/JSON)和面向对象编程(OOP)技术,实现农产品信息管理、订单处理、库存跟踪与销售统计功能。系统适用于农村合作社、小型农产品电商或个体农户,可作为数据库版本(如 SQLite/MySQL)的初级替代方案,也可作为农业信息化的实践案例。


​2. 技术背景​

​2.1 核心技术栈​

  • ​编程语言​​:Python 3.x(面向对象编程、文件操作、内置数据结构)。
  • ​数据存储​​:CSV 文件(轻量级数据持久化)、JSON 文件(结构化数据存储)。
  • ​开发工具​​:VS Code/PyCharm(IDE)、Git(版本控制)。
  • ​辅助库​​:os(文件路径操作)、csv(CSV 文件读写)、json(JSON 数据解析)。

​2.2 方案优势​

  • ​轻量易用​​:无需数据库依赖,适合快速部署与小规模场景。
  • ​模块化设计​​:代码分层清晰,便于扩展功能(如支付接口、物流跟踪)。
  • ​农业适配性​​:支持农产品分类(如蔬菜、水果、粮油)、季节性库存管理等特色功能。

​3. 应用使用场景​

​3.1 场景1:基础农产品信息与订单管理​

  • ​目标​​:实现农产品信息(名称、分类、价格、库存)的增删改查,以及订单的创建与状态跟踪。

​3.2 场景2:库存预警与销售统计​

  • ​目标​​:当库存低于阈值时触发预警,统计每日/每周销售数据并生成报表。

​3.3 场景3:数据持久化与恢复​

  • ​目标​​:将农产品信息与订单保存至 CSV/JSON 文件,程序重启后恢复数据。

​4. 不同场景下详细代码实现​

​4.1 场景1:基础农产品信息与订单管理​

​4.1.1 核心类设计​

# product.py - 农产品类与订单管理类
class Product:
    def __init__(self, product_id: str, name: str, category: str, price: float, stock: int):
        self.product_id = product_id      # 农产品ID
        self.name = name                  # 名称(如"红富士苹果")
        self.category = category          # 分类(如"水果")
        self.price = price                # 单价(元/kg)
        self.stock = stock                # 库存(kg)

    def update_stock(self, quantity: int):
        """更新库存(增加或减少)"""
        if self.stock + quantity < 0:
            raise ValueError("库存不足")
        self.stock += quantity
class OrderManager:
    def __init__(self):
        self.products = {}      # 农产品ID-产品对象字典
        self.orders = []        # 订单列表(每个订单是一个字典)

    def add_product(self, product: Product):
        """添加农产品"""
        if product.product_id in self.products:
            raise ValueError(f"农产品ID {product.product_id} 已存在")
        self.products[product.product_id] = product

    def create_order(self, customer_name: str, items: list) -> dict:
        """创建订单(items为[{"product_id": "p001", "quantity": 2}, ...])"""
        # 验证库存并计算总价
        total_price = 0
        for item in items:
            product_id = item["product_id"]
            quantity = item["quantity"]
            if product_id not in self.products:
                raise KeyError(f"农产品ID {product_id} 不存在")
            product = self.products[product_id]
            if product.stock < quantity:
                raise ValueError(f"农产品 {product.name} 库存不足(当前库存: {product.stock}kg)")
            total_price += product.price * quantity

        # 扣减库存并生成订单
        order = {
            "order_id": f"o{len(self.orders) + 1:04d}",  # 订单号(如o0001)
            "customer_name": customer_name,
            "items": items.copy(),
            "total_price": total_price,
            "status": "待发货"  # 订单状态:待发货/已发货/已完成
        }
        for item in items:
            product_id = item["product_id"]
            quantity = item["quantity"]
            self.products[product_id].update_stock(-quantity)
        self.orders.append(order)
        return order

​4.1.2 主程序交互逻辑​

# main.py - 主程序入口
from product import Product, OrderManager

def main():
    manager = OrderManager()
    while True:
        print("\n===== 农产品销售系统 =====")
        print("1. 添加农产品")
        print("2. 创建订单")
        print("3. 查询农产品库存")
        print("4. 查看所有订单")
        print("5. 退出")
        choice = input("请选择操作: ")

        if choice == "1":
            product_id = input("农产品ID: ")
            name = input("名称: ")
            category = input("分类: ")
            price = float(input("单价(元/kg): "))
            stock = int(input("库存(kg): "))
            try:
                product = Product(product_id, name, category, price, stock)
                manager.add_product(product)
                print("农产品添加成功!")
            except ValueError as e:
                print(f"错误: {e}")

        elif choice == "2":
            customer_name = input("客户姓名: ")
            items = []
            while True:
                product_id = input("农产品ID(输入q结束): ")
                if product_id == "q":
                    break
                quantity = int(input("购买数量(kg): "))
                items.append({"product_id": product_id, "quantity": quantity})
            try:
                order = manager.create_order(customer_name, items)
                print(f"订单创建成功!订单号: {order['order_id']}, 总价: {order['total_price']:.2f}元")
            except (KeyError, ValueError) as e:
                print(f"错误: {e}")

        elif choice == "3":
            product_id = input("农产品ID: ")
            try:
                product = manager.products[product_id]
                print(f"名称: {product.name}, 库存: {product.stock}kg, 单价: {product.price}元/kg")
            except KeyError as e:
                print(f"错误: {e}")

        elif choice == "4":
            for order in manager.orders:
                print(f"订单号: {order['order_id']}, 客户: {order['customer_name']}, 状态: {order['status']}, 总价: {order['total_price']:.2f}元")

        elif choice == "5":
            print("退出系统。")
            break

if __name__ == "__main__":
    main()

​4.2 场景2:库存预警与销售统计​

​4.2.1 库存预警功能扩展​

# 在 OrderManager 类中添加库存预警方法
class OrderManager:
    # ...(原有代码省略)

    def check_inventory_warning(self, threshold: int) -> list:
        """检查库存低于阈值的农产品"""
        warnings = []
        for product in self.products.values():
            if product.stock < threshold:
                warnings.append({
                    "product_id": product.product_id,
                    "name": product.name,
                    "current_stock": product.stock,
                    "threshold": threshold
                })
        return warnings

​4.2.2 销售统计功能扩展​

# 在 OrderManager 类中添加销售统计方法
class OrderManager:
    # ...(原有代码省略)

    def calculate_daily_sales(self, date: str) -> dict:
        """统计指定日期的销售数据(假设订单中有date字段,此处简化为示例)"""
        daily_orders = [order for order in self.orders if order.get("date") == date]  # 实际需扩展订单日期字段
        total_sales = sum(order["total_price"] for order in daily_orders)
        return {
            "日期": date,
            "订单数": len(daily_orders),
            "总销售额": total_sales
        }

​4.3 场景3:数据持久化与恢复​

​4.3.1 数据保存至 JSON 文件​

# 在 OrderManager 类中添加数据持久化方法
import json

class OrderManager:
    # ...(原有代码省略)

    def save_to_json(self, file_path: str):
        """将农产品和订单数据保存至JSON文件"""
        data = {
            "products": [
                {
                    "product_id": p.product_id,
                    "name": p.name,
                    "category": p.category,
                    "price": p.price,
                    "stock": p.stock
                } for p in self.products.values()
            ],
            "orders": self.orders
        }
        with open(file_path, mode="w", encoding="utf-8") as f:
            json.dump(data, f, ensure_ascii=False, indent=4)

    def load_from_json(self, file_path: str):
        """从JSON文件加载数据"""
        self.products = {}
        self.orders = []
        with open(file_path, mode="r", encoding="utf-8") as f:
            data = json.load(f)
            for item in data["products"]:
                product = Product(
                    item["product_id"],
                    item["name"],
                    item["category"],
                    item["price"],
                    item["stock"]
                )
                self.products[product.product_id] = product
            self.orders = data["orders"]

​4.3.2 数据加载调用示例​

# 在 main.py 的程序启动时加载数据
if __name__ == "__main__":
    manager = OrderManager()
    data_file = "agriculture_data.json"
    if os.path.exists(data_file):
        manager.load_from_json(data_file)
    print("数据加载完成。")

    # ...(主循环逻辑)

    # 程序退出前保存数据
    manager.save_to_json(data_file)
    print("数据已保存至文件。")

​5. 原理解释与流程图​

​5.1 系统原理​

  1. ​数据模型​​:通过 Product 类封装农产品信息与库存,OrderManager 类管理农产品集合与订单。
  2. ​文件存储​​:使用 JSON 文件以“键值对”形式保存数据,支持复杂嵌套结构(如订单中的农产品列表)。
  3. ​交互逻辑​​:主程序通过命令行菜单驱动,调用 OrderManager 的方法完成操作。

​5.2 原理流程图​

[用户输入命令][主程序解析命令][调用OrderManager方法][操作农产品/订单数据][保存至JSON文件]
          ↑                                                       ↓
[异常处理(如库存不足)]                          [文件读写异常处理]

​6. 环境准备​

​6.1 运行环境​

  • Python 3.8+
  • 依赖库:无需额外安装(仅使用 Python 标准库)。

​6.2 启动步骤​

# 创建项目目录
mkdir agriculture_sales_system
cd agriculture_sales_system

# 创建文件
touch product.py main.py

# 编写代码后运行
python main.py

​7. 运行结果与测试​

​7.1 测试场景​

  • ​功能测试​​:添加农产品、创建订单、库存扣减。
  • ​异常测试​​:库存不足时创建订单、查询不存在的农产品ID。
  • ​持久化测试​​:程序退出后重新启动,验证数据是否恢复。

​7.2 测试结果示例​

===== 农产品销售系统 =====
1. 添加农产品
2. 创建订单
3. 查询农产品库存
4. 查看所有订单
5. 退出
请选择操作: 1
农产品ID: p001
名称: 红富士苹果
分类: 水果
单价(/kg): 8.5
库存(kg): 100
农产品添加成功!

===== 农产品销售系统 =====
1. 添加农产品
2. 创建订单
3. 查询农产品库存
4. 查看所有订单
5. 退出
请选择操作: 2
客户姓名: 张三
农产品ID(输入q结束): p001
购买数量(kg): 5
农产品ID(输入q结束): q
订单创建成功!订单号: o0001, 总价: 42.50

​8. 部署场景​

  • ​单机部署​​:直接在本地运行 Python 脚本,适合农村合作社或个体农户。
  • ​文件共享部署​​:将 JSON 文件存储在共享网络驱动器中,多台电脑通过共享文件同步数据。

​9. 疑难解答​

  • ​问题1:JSON 文件中文乱码​
    • ​解决方案​​:在打开文件时指定编码为 utf-8(如 open(file_path, encoding="utf-8"))。
  • ​问题2:库存扣减后未更新​
    • ​解决方案​​:检查 update_stock 方法是否被正确调用(已在 create_order 中实现)。

​10. 未来展望与技术趋势​

  • ​技术趋势​​:
    • ​数据库升级​​:从 JSON 迁移至 SQLite/MySQL,提升查询效率与数据安全性。
    • ​Web 版本​​:基于 Flask/Django 开发 Web 应用,支持多终端访问与支付接口集成。
    • ​物联网整合​​:接入传感器数据(如温湿度),实现农产品质量追溯。
  • ​挑战​​:多用户并发订单处理、物流信息实时同步。

​11. 总结​

本文设计的农产品销售系统通过 Python 实现了基础的数据管理功能,涵盖了面向对象编程、文件操作与异常处理的核心技术。虽然当前版本使用 JSON 文件存储数据,但为后续升级至数据库或 Web 平台奠定了基础。该系统可作为农业信息化的入门工具,也可直接应用于农村合作社或小型电商场景,助力农产品销售数字化转型。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。