管理某个超市的商品。商品信息包括商品编号(条码号)、名称、库存数量、定价、折扣、生产日期、保质期(天)、类别。要求如下: 新增商品信息。修改商品信息,不允许修改商品编号。删除某种商品。商品编号和名称都是唯一的,新增和修改商品信息时需要保证这一约束。输入商品编号查询商品信息。输入商品名称查询商品信息。输出所有商品的信息报表。输出库存量低于某个数的商品信息报表。输出所有商品的价格报表,包括商品编号、名称、定价、折扣、折后价。统计平均价格(定价)。持久化商品信息到数据文件中。程序启动时自动读取商品数据文件中的数据到内存中。
基本就是链表的基本操作,可以尝试自己先写一写。
代码如下:
#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;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!