商品信息包括:包括编号、类别、名称、价格、折扣比例、生产时间 、存货数量等要求:
1、信息首先保存在文件中,然后打开文件进行读写操作,信息的改写必须与文件中保存的数据同步。
2、完成以下功能:
1 系统以菜单方式工作
2 增加商品信息
3 删除指定的商品信息
4 修改指定的商品信息
5 能按照多种方式查询(至少两种,如编号、类别、名称等
6 统计功能。按类别统计各种商品的存货数量,平均价格及存货量最多的商品信息
7 按照商品类别进行排序
C语言项目,这个玩意儿应该怎么做?
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
18条回答 默认 最新
关注获得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中,每一行表示一个商品,用逗号分隔各个字段。 - 程序启动时会从文件中加载商品信息,退出时会将商品信息保存到文件中。
- 用户通过输入数字选择操作,对应不同的功能。
- 每个功能对应一个函数,具体实现了相应的逻辑。
- 代码中已经实现了增加、删除、修改、按照编号、类别查询以及统计功能,排序功能需要自行实现。
希望能对你有帮助!
评论 打赏 举报 编辑记录解决 1无用- 商品信息保存在文件