基于Python的咖啡销售及数据分析系统设计实现
2026/9/19 2:34:11 网站建设 项目流程

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片!

1. 项目背景与目标

随着咖啡消费市场的持续增长,门店在日常经营中积累了大量的销售数据。如何高效管理商品、订单和库存,并从这些数据中挖掘有价值的经营信息,成为咖啡门店数字化转型的关键问题。本文设计并实现一个基于 Python 的咖啡销售及数据分析系统,覆盖商品管理、订单管理、销售统计和可视化分析等核心功能,帮助门店经营者更直观地掌握销售状况。

系统的主要目标包括:

  • 实现咖啡商品、订单和销售数据的统一管理。
  • 提供按时间、品类、门店等多维度的销售统计。
  • 通过可视化图表展示销售趋势和商品热度。
  • 为经营决策提供数据支撑,提升管理效率。

2. 系统总体设计

系统采用分层架构设计,整体分为数据层、业务逻辑层和展示层三个部分。数据层负责销售数据、商品信息和订单记录的存储与读取;业务逻辑层封装商品管理、订单处理、统计分析和报表生成等核心功能;展示层通过命令行交互和可视化图表向用户呈现结果。

系统功能模块划分如下:

  • 商品管理模块:负责咖啡商品的增删改查,包括名称、品类、价格和库存信息。
  • 订单管理模块:支持创建订单、记录销售明细和计算订单金额。
  • 销售统计模块:按日、周、月汇总销售额和销量,支持多维度对比。
  • 数据分析模块:分析热销商品、销售趋势和品类占比。
  • 可视化模块:使用图表库生成销售趋势图和商品销量排行图。

3. 开发环境与技术选型

系统基于 Python 3.9 开发,主要依赖以下第三方库:

  • Pandas:用于销售数据的清洗、聚合和统计分析。
  • Matplotlib:用于绘制销售趋势图、柱状图和饼图。
  • SQLite3:作为轻量级数据库,存储商品、订单和销售明细数据。
  • Tkinter:用于构建简单的图形化操作界面(可选)。

开发工具推荐使用 PyCharm 或 VS Code,操作系统支持 Windows、macOS 和 Linux。

4. 数据库设计

系统使用 SQLite 作为数据存储方案,主要设计三张数据表:商品表、订单表和订单明细表。

商品表结构如下:

字段名类型说明
idINTEGER商品编号,主键
nameTEXT商品名称
categoryTEXT商品品类
priceREAL销售单价
stockINTEGER当前库存

订单表结构如下:

字段名类型说明
idINTEGER订单编号,主键
order_timeTEXT下单时间
total_amountREAL订单总金额
customer_nameTEXT客户名称

订单明细表结构如下:

字段名类型说明
idINTEGER明细编号,主键
order_idINTEGER所属订单编号
product_idINTEGER商品编号
quantityINTEGER购买数量
subtotalREAL小计金额

5. 核心功能实现

本节给出系统核心模块的 Python 实现代码,包括数据库初始化、商品管理、订单创建和销售统计。

5.1 数据库初始化

首先创建数据库连接和表结构,代码如下:

import sqlite3 def init_db(): conn = sqlite3.connect("coffee_shop.db") cursor = conn.cursor() cursor.execute(""" CREATE TABLE IF NOT EXISTS products ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, category TEXT, price REAL NOT NULL, stock INTEGER DEFAULT 0 ) """) cursor.execute(""" CREATE TABLE IF NOT EXISTS orders ( id INTEGER PRIMARY KEY AUTOINCREMENT, order_time TEXT NOT NULL, total_amount REAL NOT NULL, customer_name TEXT ) """) cursor.execute(""" CREATE TABLE IF NOT EXISTS order_items ( id INTEGER PRIMARY KEY AUTOINCREMENT, order_id INTEGER NOT NULL, product_id INTEGER NOT NULL, quantity INTEGER NOT NULL, subtotal REAL NOT NULL ) """) conn.commit() conn.close() print("数据库初始化完成")

5.2 商品管理模块

商品管理模块实现商品的添加、查询和库存更新,代码如下:

def add_product(name, category, price, stock): conn = sqlite3.connect("coffee_shop.db") cursor = conn.cursor() cursor.execute( "INSERT INTO products (name, category, price, stock) VALUES (?, ?, ?, ?)", (name, category, price, stock) ) conn.commit() conn.close() print(f"商品 {name} 添加成功") def get_all_products(): conn = sqlite3.connect("coffee_shop.db") cursor = conn.cursor() cursor.execute("SELECT id, name, category, price, stock FROM products") rows = cursor.fetchall() conn.close() return rows def update_stock(product_id, new_stock): conn = sqlite3.connect("coffee_shop.db") cursor = conn.cursor() cursor.execute( "UPDATE products SET stock = ? WHERE id = ?", (new_stock, product_id) ) conn.commit() conn.close() print("库存更新成功")

5.3 订单创建模块

创建订单时,需要同时写入订单表和订单明细表,并扣减商品库存,代码如下:

from datetime import datetime def create_order(customer_name, items): """ items 格式: [(product_id, quantity), ...] """ conn = sqlite3.connect("coffee_shop.db") cursor = conn.cursor() total_amount = 0.0 order_items = [] for product_id, quantity in items: cursor.execute("SELECT price, stock FROM products WHERE id = ?", (product_id,)) row = cursor.fetchone() if row is None: print(f"商品 {product_id} 不存在") conn.close() return price, stock = row if stock < quantity: print(f"商品 {product_id} 库存不足") conn.close() return subtotal = price * quantity total_amount += subtotal order_items.append((product_id, quantity, subtotal)) cursor.execute( "UPDATE products SET stock = stock - ? WHERE id = ?", (quantity, product_id) ) order_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") cursor.execute( "INSERT INTO orders (order_time, total_amount, customer_name) VALUES (?, ?, ?)", (order_time, total_amount, customer_name) ) order_id = cursor.lastrowid for product_id, quantity, subtotal in order_items: cursor.execute( "INSERT INTO order_items (order_id, product_id, quantity, subtotal) VALUES (?, ?, ?, ?)", (order_id, product_id, quantity, subtotal) ) conn.commit() conn.close() print(f"订单创建成功,订单号:{order_id},总金额:{total_amount:.2f} 元")

5.4 销售统计模块

销售统计模块按日期汇总销售额和销量,代码如下:

import pandas as pd def load_sales_data(): conn = sqlite3.connect("coffee_shop.db") query = """ SELECT o.order_time, o.total_amount, oi.product_id, oi.quantity, oi.subtotal, p.name AS product_name, p.category FROM orders o JOIN order_items oi ON o.id = oi.order_id JOIN products p ON oi.product_id = p.id """ df = pd.read_sql_query(query, conn) conn.close() df["order_time"] = pd.to_datetime(df["order_time"]) return df def daily_sales_summary(df): df["date"] = df["order_time"].dt.date summary = df.groupby("date").agg( total_sales=("total_amount", "sum"), order_count=("order_id", "nunique") ).reset_index() return summary def category_sales_summary(df): summary = df.groupby("category").agg( total_sales=("subtotal", "sum"), total_quantity=("quantity", "sum") ).reset_index() return summary

6. 数据可视化实现

系统使用 Matplotlib 生成销售趋势图和商品销量排行图,帮助经营者直观了解销售情况。

6.1 销售趋势图

绘制每日销售额折线图,代码如下:

import matplotlib.pyplot as plt plt.rcParams["font.sans-serif"] = ["SimHei"] plt.rcParams["axes.unicode_minus"] = False def plot_sales_trend(df): summary = daily_sales_summary(df) plt.figure(figsize=(10, 5)) plt.plot(summary["date"], summary["total_sales"], marker="o", color="#C0392B") plt.title("每日销售额趋势") plt.xlabel("日期") plt.ylabel("销售额(元)") plt.xticks(rotation=45) plt.grid(True, linestyle="--", alpha=0.6) plt.tight_layout() plt.savefig("sales_trend.png") plt.show()

6.2 商品销量排行图

绘制销量前十商品的横向柱状图,代码如下:

def plot_top_products(df, top_n=10): product_sales = df.groupby("product_name").agg( total_quantity=("quantity", "sum"), total_sales=("subtotal", "sum") ).reset_index() top_products = product_sales.sort_values("total_quantity", ascending=False).head(top_n) plt.figure(figsize=(10, 6)) plt.barh(top_products["product_name"], top_products["total_quantity"], color="#27AE60") plt.title(f"销量前 {top_n} 商品") plt.xlabel("销量(杯)") plt.ylabel("商品名称") plt.gca().invert_yaxis() plt.tight_layout() plt.savefig("top_products.png") plt.show()

6.3 品类占比饼图

绘制不同品类销售额占比饼图,代码如下:

def plot_category_pie(df): category_summary = category_sales_summary(df) plt.figure(figsize=(8, 8)) plt.pie( category_summary["total_sales"], labels=category_summary["category"], autopct="%1.1f%%", startangle=90 ) plt.title("品类销售额占比") plt.axis("equal") plt.tight_layout() plt.savefig("category_pie.png") plt.show()

7. 系统测试与运行效果

为验证系统功能,编写测试脚本依次执行数据库初始化、商品添加、订单创建和销售统计,代码如下:

if __name__ == "__main__": init_db() add_product("美式咖啡", "咖啡", 18.0, 100) add_product("拿铁咖啡", "咖啡", 22.0, 80) add_product("卡布奇诺", "咖啡", 24.0, 60) add_product("抹茶拿铁", "茶饮", 20.0, 50) add_product("蓝莓芝士蛋糕", "甜点", 28.0, 30) create_order("张三", [(1, 2), (2, 1)]) create_order("李四", [(3, 1), (5, 2)]) create_order("王五", [(2, 3), (4, 1)]) df = load_sales_data() print("每日销售汇总:") print(daily_sales_summary(df)) print("品类销售汇总:") print(category_sales_summary(df)) plot_sales_trend(df) plot_top_products(df) plot_category_pie(df)

运行测试脚本后,系统能够正确完成商品录入、订单创建、库存扣减和销售汇总,并输出对应的可视化图表,验证了系统各模块的功能完整性。

8. 总结与展望

本文设计并实现了一个基于 Python 的咖啡销售及数据分析系统,覆盖商品管理、订单管理、销售统计和可视化分析等核心功能。系统采用 SQLite 存储数据,结合 Pandas 进行数据聚合分析,并使用 Matplotlib 生成直观的销售图表,能够有效帮助门店经营者掌握销售动态。

后续可以从以下方向继续完善系统:

  • 增加用户登录和权限管理功能,保障数据安全。
  • 引入 Web 前端框架,提供更友好的操作界面。
  • 接入真实业务数据,优化库存预警和采购建议。
  • 结合机器学习算法,实现销售预测和智能定价。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询