#include<stdio.h>
#include<stdlib.h>
struct spType
{
int bianhao;
char name[50];
float jinjia;
float shoujia;
int kuchun;
};
void chaxun(struct spType,int);//查询
int xiaoshou(struct spType,int);//销售
void luru(struct spType );//录入
void paishu(struct spType,int);//排序
int ruku(struct spType,int);//入库
void luru(struct spType a)//录入商品
{
printf("编号:");
scanf("%d",&a.bianhao);
printf("名称:");
scanf(" %s",a.name);
printf("进价:");
scanf("%f",&a.jinjia);
printf("售价:");
scanf("%f",&a.shoujia);
printf("数量:");
scanf("%d",&a.kuchun);
}
void paishu(struct spType a[],int n)//按商品编号排序
{
struct spType temp;
int i,j;
for(i=1;i<=n;i++)
for(j=0;j<n+1-i;j++)
if(a[j].bianhao>a[j+1].bianhao)
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
int xiaoshou(struct spType a[],int n)//销售商品
{
printf("请输入售出商品编号:");
int num;
scanf("%d",&num);
printf("请输入数量:");
int num2;
scanf("%d",&num2);
for (int i=0;i<=n;i++)
{
if(a[i].bianhao==num&&a[i].kuchun==num2)//库存等于销量就买完了
for (int j=i;j<n;j++)
{
a[j]=a[j+1];
return n-1;
}
else if(a[i].bianhao==num&&a[i].kuchun>num2)//如果库存大于销量,减少库存
{
a[i].kuchun-=num2;
return n;
}
}
if(i==n+1)
{
printf("商品无库存或库存不足!");
return n;
}
}
void chaxun(struct spType a[],int n)//查询商品
{
printf("目前仓库内有货的商品有%d种\n",n+1);
printf("请输入要查询的编号:");
int num;
scanf("%d",&num);
for(int i=0;i<=n;i++)
if(a[i].bianhao==num)
break;
printf("\n商品的名称:%s\n库存为:%d\n",a[i].name,a[i].kuchun);
}
int ruku(struct spType a[],int n)//入库
{
luru(a[n+1]);//调用录入函数把录入结果放在N后面
paishu(a,n+1);//调用排序函数,重新排序
return n+1;
}
void main()
{
struct spType shangping[100];//定义结构体变量
while(1)
{
printf("\n*****************************");
printf("\n********商品管理系统*********");
printf("\n**1-初始化(录入) **");
printf("\n**2-查询库存 **");
printf("\n**3-销售 **");
printf("\n**4-入库 **");
printf("\n**0-退出 **");
printf("\n*****************************");
printf("\n注意:请先初始化!");
printf("\n请选择:");
int chiose;
scanf("%d",&chiose);
int count;//用count计算shangping的下标,即商品的种类
switch(chiose)
{
case 1://录入
{
int i;
for(i=0;1;i++)
{
luru(shangping[i]);//每次luru()对shangping的一个元素进行修改
printf("继续吗?(y or n):");
fflush(stdin);
char ch=getchar();
if(ch=='N'||ch=='n')
break;
}
count=i;
paishu(shangping,count);//录入完后对库存进行排序
break;
}
case 2://查询
{
chaxun(shangping,count);
break;
}
case 3://销售
{
count=xiaoshou(shangping,count);
break;
}
case 4://入库
{
count=ruku(shangping,count);
break;
}
case 0://退出
{
exit(0);
}
default:
{
printf("输入错误!");
}
}
}
}