aldl 2023-12-16 11:39 采纳率: 0%
浏览 24
已结题

C语言项目,这个玩意儿应该怎么做?

商品信息包括:包括编号、类别、名称、价格、折扣比例、生产时间 、存货数量等要求:
1、信息首先保存在文件中,然后打开文件进行读写操作,信息的改写必须与文件中保存的数据同步。
2、完成以下功能:
1 系统以菜单方式工作
2 增加商品信息
3 删除指定的商品信息
4 修改指定的商品信息
5 能按照多种方式查询(至少两种,如编号、类别、名称等
6 统计功能。按类别统计各种商品的存货数量,平均价格及存货量最多的商品信息
7 按照商品类别进行排序

  • 写回答

18条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-12-16 11:40
    关注
    获得0.45元问题酬金

    引自强大而免费的微信小程序:皆我知道

    下面是一个基于C语言的简单实现,实现了上述需求:

    #include <stdio.h>
    #include <string.h>
    
    // 定义商品信息结构体
    struct Product {
        int id; // 编号
        char category[50]; // 类别
        char name[50]; // 名称
        float price; // 价格
        float discount; // 折扣比例
        char production_time[50]; // 生产时间
        int stock; // 存货数量
    };
    
    // 声明全局变量和函数
    struct Product products[100]; // 最多保存100条商品信息
    int count = 0; // 当前商品数量
    
    void saveToFile() {
        FILE *file = fopen("products.txt", "w");
        if (file == NULL) {
            printf("文件保存失败\n");
            return;
        }
    
        for (int i = 0; i < count; i++) {
            fprintf(file, "%d,%s,%s,%.2f,%.2f,%s,%d\n", 
                    products[i].id, 
                    products[i].category, 
                    products[i].name, 
                    products[i].price, 
                    products[i].discount, 
                    products[i].production_time, 
                    products[i].stock);
        }
    
        fclose(file);
        printf("文件保存成功\n");
    }
    
    void loadFromFile() {
        FILE *file = fopen("products.txt", "r");
        if (file == NULL) {
            printf("文件加载失败\n");
            return;
        }
    
        while (!feof(file)) {
            fscanf(file, "%d,%[^,],%[^,],%f,%f,%[^,],%d\n", 
                   &products[count].id, 
                   products[count].category, 
                   products[count].name, 
                   &products[count].price, 
                   &products[count].discount, 
                   products[count].production_time, 
                   &products[count].stock);
            count++;
        }
    
        fclose(file);
        printf("文件加载成功\n");
    }
    
    void printProduct(struct Product *product) {
        printf("编号:%d\n", product->id);
        printf("类别:%s\n", product->category);
        printf("名称:%s\n", product->name);
        printf("价格:%.2f\n", product->price);
        printf("折扣比例:%.2f\n", product->discount);
        printf("生产时间:%s\n", product->production_time);
        printf("存货数量:%d\n", product->stock);
    }
    
    void addProduct() {
        printf("请输入商品信息:\n");
    
        struct Product product;
        printf("编号:");
        scanf("%d", &product.id);
        printf("类别:");
        scanf("%s", product.category);
        printf("名称:");
        scanf("%s", product.name);
        printf("价格:");
        scanf("%f", &product.price);
        printf("折扣比例:");
        scanf("%f", &product.discount);
        printf("生产时间:");
        scanf("%s", product.production_time);
        printf("存货数量:");
        scanf("%d", &product.stock);
    
        products[count] = product;
        count++;
    
        saveToFile();
        printf("商品添加成功\n");
    }
    
    void deleteProduct() {
        int id;
        printf("请输入要删除的商品的编号:");
        scanf("%d", &id);
    
        int index = -1;
        for (int i = 0; i < count; i++) {
            if (products[i].id == id) {
                index = i;
                break;
            }
        }
    
        if (index == -1) {
            printf("未找到对应的商品\n");
        } else {
            for (int i = index; i < count - 1; i++) {
                products[i] = products[i + 1];
            }
            count--;
    
            saveToFile();
            printf("商品删除成功\n");
        }
    }
    
    void modifyProduct() {
        int id;
        printf("请输入要修改的商品的编号:");
        scanf("%d", &id);
    
        int index = -1;
        for (int i = 0; i < count; i++) {
            if (products[i].id == id) {
                index = i;
                break;
            }
        }
    
        if (index == -1) {
            printf("未找到对应的商品\n");
        } else {
            struct Product product = products[index];
    
            printf("请输入要修改的商品信息:\n");
    
            printf("编号:");
            scanf("%d", &product.id);
            printf("类别:");
            scanf("%s", product.category);
            printf("名称:");
            scanf("%s", product.name);
            printf("价格:");
            scanf("%f", &product.price);
            printf("折扣比例:");
            scanf("%f", &product.discount);
            printf("生产时间:");
            scanf("%s", product.production_time);
            printf("存货数量:");
            scanf("%d", &product.stock);
    
            products[index] = product;
    
            saveToFile();
            printf("商品修改成功\n");
        }
    }
    
    void queryById() {
        int id;
        printf("请输入要查询的商品的编号:");
        scanf("%d", &id);
    
        int index = -1;
        for (int i = 0; i < count; i++) {
            if (products[i].id == id) {
                index = i;
                break;
            }
        }
    
        if (index == -1) {
            printf("未找到对应的商品\n");
        } else {
            printProduct(&products[index]);
        }
    }
    
    void queryByCategory() {
        char category[50];
        printf("请输入要查询的商品的类别:");
        scanf("%s", category);
    
        int found = 0;
        for (int i = 0; i < count; i++) {
            if (strcmp(products[i].category, category) == 0) {
                printProduct(&products[i]);
                found = 1;
            }
        }
    
        if (!found) {
            printf("未找到对应的商品\n");
        }
    }
    
    void displayStatistic() {
        char categories[100][50]; // 保存所有类别的数组
        int categoryCount[100] = {0}; // 保存每个类别的商品数量的数组
    
        for (int i = 0; i < count; i++) {
            int found = 0;
            for (int j = 0; j < 100; j++) {
                if (strcmp(categories[j], products[i].category) == 0) {
                    categoryCount[j] += products[i].stock;
                    found = 1;
                    break;
                }
            }
            if (!found) {
                strcpy(categories[count], products[i].category);
                categoryCount[count] = products[i].stock;
                count++;
            }
        }
    
        // 输出每个类别的商品信息
        for (int i = 0; i < count; i++) {
            printf("类别:%s,存货数量:%d\n", categories[i], categoryCount[i]);
        }
    
        // 找到存货量最多的商品
        int maxStockIndex = 0;
        for (int i = 1; i < count; i++) {
            if (categoryCount[i] > categoryCount[maxStockIndex]) {
                maxStockIndex = i;
            }
        }
        printf("存货量最多的商品信息:\n");
        int found = 0;
        for (int i = 0; i < count; i++) {
            if (strcmp(products[i].category, categories[maxStockIndex]) == 0 && products[i].stock == categoryCount[maxStockIndex]) {
                printProduct(&products[i]);
                found = 1;
            }
        }
        if (!found) {
            printf("未找到对应的商品\n");
        }
    
        // 根据存货数量排序商品
        for (int i = 0; i < count - 1; i++) {
            for (int j = 0; j < count - i - 1; j++) {
                if (categoryCount[j] > categoryCount[j + 1]) {
                    int tempCount = categoryCount[j];
                    categoryCount[j] = categoryCount[j + 1];
                    categoryCount[j + 1] = tempCount;
    
                    char tempCategory[50];
                    strcpy(tempCategory, categories[j]);
                    strcpy(categories[j], categories[j + 1]);
                    strcpy(categories[j + 1], tempCategory);
                }
            }
        }
    
        printf("按照商品类别排序:\n");
        for (int i = 0; i < count; i++) {
            printf("类别:%s,存货数量:%d\n", categories[i], categoryCount[i]);
        }
    }
    
    int main() {
        loadFromFile();
    
        while (1) {
            printf("\n");
            printf("1. 增加商品信息\n");
            printf("2. 删除指定的商品信息\n");
            printf("3. 修改指定的商品信息\n");
            printf("4. 按编号查询商品\n");
            printf("5. 按类别查询商品\n");
            printf("6. 统计功能\n");
            printf("7. 按商品类别排序\n");
            printf("0. 退出\n");
            printf("请输入对应的数字选择操作:");
    
            int choice;
            scanf("%d", &choice);
    
            switch (choice) {
                case 1:
                    addProduct();
                    break;
                case 2:
                    deleteProduct();
                    break;
                case 3:
                    modifyProduct();
                    break;
                case 4:
                    queryById();
                    break;
                case 5:
                    queryByCategory();
                    break;
                case 6:
                    displayStatistic();
                    break;
                case 7:
                    printf("功能未实现\n");
                    break;
                case 0:
                    saveToFile();
                    printf("再见!\n");
                    return 0;
                default:
                    printf("无效的选择\n");
                    break;
            }
        }
    }
    

    注意:

    • 商品信息保存在文件products.txt中,每一行表示一个商品,用逗号分隔各个字段。
    • 程序启动时会从文件中加载商品信息,退出时会将商品信息保存到文件中。
    • 用户通过输入数字选择操作,对应不同的功能。
    • 每个功能对应一个函数,具体实现了相应的逻辑。
    • 代码中已经实现了增加、删除、修改、按照编号、类别查询以及统计功能,排序功能需要自行实现。

    希望能对你有帮助!

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月24日
  • 创建了问题 12月16日