2301_76863649 2023-03-08 12:16 采纳率: 50%
浏览 203
已结题

c语言商品信息管理系统

设计一个可进行商品管理的程序,具备基本的商品管理功能。
要求:程序菜单功能或详细的提示功能,商品信息输入、输出、添加(进货)、删除(销售)、查询(按商品名)、排序(按编号,品名,数量)、文件保存、文件读
入。

  • 写回答

13条回答 默认 最新

  • 「已注销」 2023-03-08 14:21
    关注

    参考GPT和自己的思路:以下是一个简单的 C 语言商品信息管理系统,包括菜单功能、商品信息输入、输出、添加、删除、查询、排序、文件保存、文件读入等基本功能。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define MAX_NAME_LEN 50
    #define MAX_ITEMS 100
    
    struct item {
        int id;  // 商品编号
        char name[MAX_NAME_LEN];  // 商品名称
        int quantity;  // 商品数量
    };
    
    struct item items[MAX_ITEMS];  // 商品列表
    int num_items = 0;  // 商品数量
    
    // 显示菜单
    void show_menu() {
        printf("商品信息管理系统\n");
        printf("-----------------\n");
        printf("1. 显示商品列表\n");
        printf("2. 添加商品\n");
        printf("3. 删除商品\n");
        printf("4. 查询商品\n");
        printf("5. 按编号排序\n");
        printf("6. 按名称排序\n");
        printf("7. 按数量排序\n");
        printf("8. 保存到文件\n");
        printf("9. 从文件读入\n");
        printf("0. 退出\n");
        printf("-----------------\n");
        printf("请选择操作:");
    }
    
    // 输入商品信息
    void input_item(struct item *pitem) {
        printf("请输入商品编号:");
        scanf("%d", &pitem->id);
        printf("请输入商品名称:");
        scanf("%s", pitem->name);
        printf("请输入商品数量:");
        scanf("%d", &pitem->quantity);
    }
    
    // 输出商品信息
    void output_item(const struct item *pitem) {
        printf("%d\t%s\t%d\n", pitem->id, pitem->name, pitem->quantity);
    }
    
    // 显示商品列表
    void show_items() {
        int i;
        printf("商品编号\t商品名称\t商品数量\n");
        printf("---------------------------------------\n");
        for (i = 0; i < num_items; i++) {
            output_item(&items[i]);
        }
    }
    
    // 添加商品
    void add_item() {
        struct item item;
        input_item(&item);
        items[num_items] = item;
        num_items++;
        printf("商品已添加。\n");
    }
    
    // 删除商品
    void delete_item() {
        int id, i, found = 0;
        printf("请输入要删除的商品编号:");
        scanf("%d", &id);
        for (i = 0; i < num_items; i++) {
            if (items[i].id == id) {
                found = 1;
                break;
            }
        }
        if (found) {
            for (; i < num_items - 1; i++) {
                items[i] = items[i + 1];
            }
            num_items--;
            printf("商品已删除。\n");
        } else {
            printf("未找到该商品。\n");
        }
    }
    
    // 查询商品
    void search_item() {
        char name[MAX_NAME_LEN];
        int i, found = 0;
        printf("请输入要查询的商品名称:");
        scanf("%s", name);
        printf("商品编号\t商品名称\t商品数量\n");
        printf("---------------------------------------\n");
        for (i = 0; i < num_items; i++) {
            if (strcmp(items[i].name, name) == 0) {
                output_item(&items[i]);
                found = 1;
            }
        }
        if (!found) {
            printf("未找到该商品。\n");
    }
    }
    
    // 按编号排序
    int compare_by_id(const void *p1, const void *p2) {
    const struct item *item1 = (const struct item *)p1;
    const struct item *item2 = (const struct item *)p2;
    return item1->id - item2->id;
    }
    
    // 按名称排序
    int compare_by_name(const void *p1, const void *p2) {
    const struct item *item1 = (const struct item *)p1;
    const struct item *item2 = (const struct item *)p2;
    return strcmp(item1->name, item2->name);
    }
    
    // 按数量排序
    int compare_by_quantity(const void *p1, const void *p2) {
    const struct item *item1 = (const struct item *)p1;
    const struct item *item2 = (const struct item *)p2;
    return item1->quantity - item2->quantity;
    }
    
    // 排序商品列表
    void sort_items() {
    int choice;
    printf("请选择排序方式:");
    scanf("%d", &choice);
    switch (choice) {
    case 1:
    qsort(items, num_items, sizeof(struct item), compare_by_id);
    break;
    case 2:
    qsort(items, num_items, sizeof(struct item), compare_by_name);
    break;
    case 3:
    qsort(items, num_items, sizeof(struct item), compare_by_quantity);
    break;
    default:
    printf("无效的选择。\n");
    return;
    }
    printf("商品已排序。\n");
    }
    
    // 保存商品列表到文件
    void save_items(const char *filename) {
    FILE *fp;
    int i;
    fp = fopen(filename, "wb");
    if (fp == NULL) {
    printf("无法打开文件。\n");
    return;
    }
    fwrite(&num_items, sizeof(num_items), 1, fp);
    for (i = 0; i < num_items; i++) {
    fwrite(&items[i], sizeof(struct item), 1, fp);
    }
    fclose(fp);
    printf("商品已保存到文件。\n");
    }
    
    // 从文件读入商品列表
    void load_items(const char *filename) {
    FILE *fp;
    int i;
    fp = fopen(filename, "rb");
    if (fp == NULL) {
    printf("无法打开文件。\n");
    return;
    }
    fread(&num_items, sizeof(num_items), 1, fp);
    for (i = 0; i < num_items; i++) {
    fread(&items[i], sizeof(struct item), 1, fp);
    }
    fclose(fp);
    printf("商品已从文件读入。\n");
    }
    
    int main() {
    int choice;
    char filename[MAX_NAME_LEN];
    while (1) {
    show_menu();
    scanf("%d", &choice);
    switch (choice) {
    case 0:
    printf("再见!\n");
    return 0;
    case 1:
    show_items();
    break;
    case 2:
    add_item();
    break;
    case 3:
    delete_item();
    break;
    case 4:
    search_item();
    break;
    case 5:
    case 6:
    case 7:
    sort_items();
    break;
    case 8:
    printf("请输入文件名:");
    scanf("%s", filename);
    save_items(filename);
    break;
    case 9:
    printf("请输入文件名:");
    scanf("%s", filename);
    load_items(filename);
    break;
    default:
    printf("无效的选择。\n");
    break;
    }
    }
    return 0;
    }
    
    
    

    代码解释:

    main() 函数是程序的入口,它通过显示菜单并读取用户的选择来控制程序的流程。
    choice 变量存储用户的选择。
    filename 变量用于读取或保存商品列表的文件名。
    while 循环保持程序运行,直到用户选择退出程序。
    show_menu() 函数显示菜单,其中包括了各种商品管理功能。
    根据用户的选择,使用 switch 语句调用相应的函数来完成商品管理任务,例如展示商品列表、添加商品、删除商品、查询商品、排序商品、保存商品列表到文件、从文件读入商品列表。
    如果用户选择退出程序,程序会返回 0,结束运行。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(12条)

报告相同问题?

问题事件

  • 系统已结题 3月17日
  • 已采纳回答 3月9日
  • 创建了问题 3月8日

悬赏问题

  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用