当前位置: 代码迷 >> C语言 >> 商品管理系统中的一个小问题.
  详细解决方案

商品管理系统中的一个小问题.

热度:516   发布时间:2006-04-27 02:47:00.0
商品管理系统中的一个小问题.

#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("输入错误!");
}
}
}

}

搜索更多相关的解决方案: int  struct  spType  商品  void  

----------------解决方案--------------------------------------------------------

编译没有错误.运行时出现异常错误....
   郁闷中.
 有老大跟我看看吗? 


----------------解决方案--------------------------------------------------------

你的问题多多,我把排序的删了(没必要)
你的变量都是拼音,太不正式(我没改)
而且像你的录入也根本没考虑是不是已经有了这种商品(很多问题)
我改了一些,代码风格也改了下,你的太乱了
现在可以运行C-Free
不过还是只能实现你的一些想法,离真正的商品管理程序还离得很远

[CODE]
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <alloc.h>
struct spType
{
int bianhao;
char name[50];
float jinjia;
float shoujia;
int kucun;
};
void chaxun(struct spType[],int);//查询
int xiaoshou(struct spType[],int);//销售
void luru(struct spType );//录入
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->kucun);
}

int xiaoshou(struct spType a[],int n)//销售商品
{
int num,num2,i,j;

printf("请输入售出商品编号:");
scanf("%d",&num);
printf("请输入数量:");
scanf("%d",&num2);

for (i=0;i<=n;i++)
{
if(a[i].bianhao==num&&a[i].kucun==num2)//库存等于销量就买完了
{
for (j=i;j<=n;j++)
a[j]=a[j+1];
return n-1;
}
else if(a[i].bianhao==num&&a[i].kucun>num2)//如果库存大于销量,减少库存
{
a[i].kucun-=num2;
return n;
}
}
if(i==n+1)
{
printf("商品无库存或库存不足!");
return n;
}
}

void chaxun(struct spType a[],int n)//查询商品
{
int num,i;

printf("目前仓库内有货的商品有%d种\n",n+1);
printf("请输入要查询的编号:");

scanf("%d",&num);
for( i=0;i<=n;i++)
if(a[i].bianhao==num)
{
printf("\n商品的名称:%s\n库存为:%d\n",a[i].name,a[i].kucun);
break;
}
if(i>n)
printf("所查询的商品不存在\n");
}

int ruku(struct spType a[],int n)//入库
{
int i,num,num1;

printf("编号:");
scanf("%d",&num);
printf("数量:");
scanf("%d",&num1);
for(i=0;i<=n;i++)
if(a[i].bianhao==num)
{
a[i].kucun+=num1;
return n;
}
if(i>n)
{
a[n+1].bianhao=num;
a[n+1].kucun=num1;
printf("名称:");
scanf ("%s",a[n+1].name);
printf("进价:");
scanf ("%f",&a[n+1].jinjia);
printf("售价:");
scanf ("%f",&a[n+1].shoujia);
return n+1;
}
}


void main()
{
struct spType *shangpin;//定义结构体变量
int chiose,i,count,max=100;
char ch;

shangpin= (struct spType *) malloc ( sizeof(struct spType) *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请选择:");

scanf("%d",&chiose);

switch(chiose)
{
case 1://录入
{
for(i=0;i<100;i++)
{
luru(&shangpin[i]);
printf("继续吗?(y or n):");
fflush(stdin);
ch=getchar();
if(ch=='N'||ch=='n')
break;
}
count=i;
break;
}
case 2://查询
{
chaxun(shangpin,count);
break;
}
case 3://销售
{
count=xiaoshou(shangpin,count);
break;
}
case 4://入库
{
if(count==max-1)
{
shangpin=(struct spType *)realloc(shangpin,sizeof(struct spType)*(max+10));
max+=10;
}
count=ruku(shangpin,count);
break;
}
case 0:
{
free(shangpin);
exit(0);
}
default: printf("输入错误!");
}
}
}

[/CODE]


----------------解决方案--------------------------------------------------------

shangpin=(struct spType *)realloc(shangpin,sizeof(struct spType)*(max+10));

完整的 case 4 的那一行


----------------解决方案--------------------------------------------------------
  相关解决方案