C语言实现货物管理系统:基于链表的增删查改与权限控制

Ryan
Ryan
发布时间:2026-10-14 | 5人浏览过
原创

本教程详细介绍如何使用C语言和单向链表构建一个具备基本商业逻辑的货物管理系统。通过封装节点结构体,实现了对商品编号、名称、价格、生产日期及库存的动态维护。代码包含了严格的权限认证模块和输入校验机制,并演示了如何将运行时内存数据写入本地文件以确保持久化存储。

核心结构与数据存储

系统的核心在于数据的组织形式。此处使用了单向链表来存储货物信息,每个节点包含货物详细信息以及指向下一个节点的指针。这种结构允许在运行时灵活地插入或删除记录,无需像数组那样预先分配固定空间或进行大量元素移动。

// 日期结构体定义
struct date {
    int year;
    int month; // 原文中变量名为 mouth,意为月份
    int day;
};

// 货物基本信息结构体
typedef struct goods {
    char numbs[6];      /* 编号 */
    char name[10];      /* 名称 */
    float purchase;     /* 进价 */
    float sales;        /* 售价 */
    char place[10];     /* 产地 */
    struct date Date;   /* 生产日期 */
    int days;           /* 保质期(天) */
    int datecha;        /* 保质期截止日期差(用于计算过期状态) */
    int stock;          /* 库存量 */
    int salesnumb;      /* 销量 */
    float income;       /* 总收入 */
} GoodsData;

// 链表节点定义
typedef struct node {
    GoodsData data;
    struct node *next;
} Node, *Link;

主界面与权限验证

程序启动后,首先显示欢迎菜单,允许用户选择进入“主管模式”或“普通用户模式”。主管模式拥有完整的管理权限,包括录入和删除货物;而普通用户仅能查看、搜索和排序现有数据。

  1. 主管权限:需要输入密码验证。代码中设置了硬编码密码 "123456",且限制最多尝试3次。若多次输入错误则锁定当前会话。
  2. 普通权限:直接跳过密码环节进入基础浏览菜单。
/* 简单的密码验证逻辑示例 */
static int n = 3; /* 剩余尝试次数 */
char password[7];
char mypassword[] = "123456";
// 循环接收字符并进行比对... 

功能操作详解

第1步:录入新货物信息

此步骤仅对主管开放。在执行添加前,系统会遍历现有链表检查编号是否重复。

  • 入口:主管菜单 → 1. 录入货物信息
  • 动作:提示用户依次输入货物编号、名称、进价、售价、产地、生产日期和库存量。
  • 关键点:系统在录入时会自动调用 S_input 和 Num_input 等辅助函数进行边界校验,例如防止年份或月份数值非法。
  • 完成状态:新节点被插入到链表头部(前插法),系统标记 saveflag=1 表示数据已修改需保存。

第2步:查询与显示货物

系统支持两种维度的显示视图,分别对应不同的权限需求:

  • 主管视图:显示完整的财务报表字段,包括编号、名称、进价、售价、产地、生产日期、保质期天数、库存、累计销量及当前收入。
  • 普通视图:隐藏敏感的进价数据,仅显示编号、名称、售价、产地、生产日期、保质期天数和当日销量。

查询接口支持通过编号或名称进行精确匹配(Locate 函数),找到目标节点后进行格式化打印。

第3步:数据维护(删除与补货)

在删除功能中,系统同样要求二次确认(y/n),以防止误操作导致的数据丢失。执行删除时,会通过遍历找到指定节点的前驱,然后调整指针完成断开操作,并使用 free() 释放内存。

此外,系统内置了智能补货提醒功能。通过计算 库存 - 销量,如果剩余数量低于阈值(代码中设定为100),则该货物会被标记并在特定菜单下列出。

第4步:有效期管理与促销策略

这是一个较为复杂的业务逻辑点。系统根据设定的“今天日期”,计算每批货物的剩余有效期天数 (datecha):

  • 过期处理:若 days < datecha,表明产品已过期,建议删除或下架。
  • 临期打折:若 (days - datecha) <= 10,说明距离过期不足10天,系统将自动把售价减半(sales = sales / 2),并标记为优惠商品。

第5步:文件保存与加载

为了保留工作成果,系统提供了两种文件保存方案,均默认保存在 D盘:

  1. 文本格式 (TXT):D:\Goods.txt。使用 fprintf 按固定格式字符串输出,方便人类阅读,但跨平台兼容性较差(路径中的反斜杠转义需注意)。
  2. 二进制格式 (Binary):D:\Goods。使用 fwrite 直接写入结构体内存块,效率更高且占用空间更小。

启动程序时,会自动读取 D:\Goods 二进制文件,利用 fread 将历史数据还原至链表内存中。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表