管理某个超市的商品。商品信息包括商品编号(条码号)、名称、库存数量、定价、折扣、生产日期、保质期(天)、类别。要求如下: 新增商品信息。修改商品信息,不允许修改商品编号。删除某种商品。商品编号和名称都是唯一的,新增和修改商品信息时需要保证这一约束。输入商品编号查询商品信息。输入商品名称查询商品信息。输出所有商品的信息报表。输出库存量低于某个数的商品信息报表。输出所有商品的价格报表,包括商品编号、名称、定价、折扣、折后价。统计平均价格(定价)。持久化商品信息到数据文件中。程序启动时自动读取商品数据文件中的数据到内存中。
2条回答 默认 最新
- 技术专家团-小桥流水 2022-04-08 19:29关注
基本就是链表的基本操作,可以尝试自己先写一写。
代码如下:#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct _stuffinfo { int id; //编号 char name[20];//名称 int kc; //库存 float price; //定价 float zk; //折扣 int year,mon,day;//生产日期 int bzq; //保质期(天) char type[10]; //类别 struct _stuffinfo* next; }Stuffinfo; //初始化链表 Stuffinfo* initList(Stuffinfo* head) { head = (Stuffinfo*)malloc(sizeof(Stuffinfo)); head->next = 0; return head; } //新增商品 void addStuf(Stuffinfo* head) { Stuffinfo* tail; Stuffinfo* p = (Stuffinfo*)malloc(sizeof(Stuffinfo)); p->next = 0; printf("请输入商品编号:"); scanf("%d",&p->id); printf("请输入商品名称:"); scanf("%s",p->name); printf("请输入库存数量:"); scanf("%d",&p->kc); printf("请输入定价:"); scanf("%f",&p->price); printf("请输入折扣(0-1):"); scanf("%f",&p->zk); printf("请输入生产日期(YYYY MM DD):"); scanf("%d %d %d",&p->year,&p->mon,&p->day); printf("请输入保质期:"); scanf("%d",&p->bzq); printf("请输入类别:"); scanf("%s",p->type); //找到链表的末尾 tail = head; while(tail && tail->next) tail = tail->next; tail->next = p; printf("商品添加成功!\n"); } //删除商品 根据商品编号删除 void delStuff(Stuffinfo* head) { int id; // Stuffinfo* p,*front; printf("请输入需要删除的商品编号:"); scanf("%d",&id); front = head; p = front->next; while(p) { if(p->id == id) { front->next = p->next; free(p); printf("删除成功!\n"); return ; }else { front = p; p = p->next; } } printf("未找到改商品!\n"); } //修改商品信息 void modStuff(Stuffinfo* head) { int id; // Stuffinfo* p; printf("请输入需要修改信息的商品编号:"); scanf("%d",&id); p = head->next; while(p) { if(p->id == id) { break; }else p = p->next; } if (p) { printf("请输入商品名称:"); scanf("%s",p->name); printf("请输入库存数量:"); scanf("%d",&p->kc); printf("请输入定价:"); scanf("%f",&p->price); printf("请输入折扣(0-1):"); scanf("%f",&p->zk); printf("请输入生产日期(YYYY MM DD):"); scanf("%d %d %d",&p->year,&p->mon,&p->day); printf("请输入保质期:"); scanf("%d",&p->bzq); printf("请输入类别:"); scanf("%s",p->type); printf("商品信息修改成功!\n"); }else printf("未找到该商品!\n"); } //输出所有商品新 void showAllStuf(Stuffinfo* head) { Stuffinfo* p; printf("所有商品信息如下:"); p = head->next; while(p) { printf("%6d %20s %6d %6.2f %4.2f %4d-%2d-%2d %3d %10s\n",p->id,p->name,p->kc,p->price,p->kc,p->year,p->mon,p->day,p->bzq,p->type); p = p->next; } } //统计低于某个价格的商品信息 void tongji(Stuffinfo* head) { Stuffinfo* p; int n; printf("请输入最低库存量:"); scanf("%d",&n); printf("库存低于%d的商品如下:\n"); p = head->next; while(p) { if(p->kc < n) printf("%6d %20s %6d %6.2f %4.2f %4d-%2d-%2d %3d %10s\n",p->id,p->name,p->kc,p->price,p->kc,p->year,p->mon,p->day,p->bzq,p->type); } } //输出所有商品的价格表,并统计平均价格 void showPrice(Stuffinfo* head) { Stuffinfo* p = head->next; float ave = 0; int nmb = 0; printf("商品价格表:\n"); while(p) { printf("%6d %20s %6.2f %4.2f %6.2f\n",p->id,p->name,p->price,p->kc,p->price*p->zk); nmb++; ave += p->price*p->zk; p = p->next; } printf("平均价格:%6.2f\n",ave/nmb); } //保存到文件 void saveFile(Stuffinfo* head) { Stuffinfo* p; FILE* fp; fp = fopen("data.txt","w"); p = head->next; while(p) { fprintf(fp,"%d %s %d %f %f %d-%d-%d %d %s\n",p->id,p->name,p->kc,p->price,p->kc,p->year,p->mon,p->day,p->bzq,p->type); p = p->next; } printf("保存成功!\n"); fclose(fp); } //读取文件 void readFile(Stuffinfo* head) { Stuffinfo *p,*t; FILE* fp = fopen("data.txt","r"); t = head; while(!feof(fp)) { p = (Stuffinfo *)malloc(sizeof(Stuffinfo)); fscanf(fp,"%d %s %d %f %f %d-%d-%d %d %s\n",&p->id,p->name,&p->kc,&p->price,&p->kc,&p->year,&p->mon,&p->day,&p->bzq,p->type); if(p->id > 0) { t->next = p; t = p; }else free(p); } fclose(fp); printf("读取成功!\n"); } int main() { Stuffinfo* head=0; int op,flag = 1; head = initList(head); readFile(head); //读取文件数据 while(flag) { 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("请选择:"); scanf("%d",&op); switch(op) { case 1:addStuf(head);break; case 2:modStuff(head);break; case 3:delStuff(head);break; case 4:showAllStuf(head);break; case 5:tongji(head);break; case 6:showPrice(head);break; case 7:saveFile(head);break; case 0:flag = 0;break; } } return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
- ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
- ¥50 opencv4nodejs 如何安装
- ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
- ¥15 nginx反向代理获取ip,java获取真实ip
- ¥15 eda:门禁系统设计
- ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
- ¥15 376.1电表主站通信协议下发指令全被否认问题
- ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
- ¥15 复杂网络,变滞后传递熵,FDA