如图所示,程序语句没有问题
运行之后黑屏,代码如下
int main(){
int t=1,flag=1,f=1;
char n;
Node* p;
Link Ku;
while(t)
{
printf("n\n\n\n\n");
printf("\n\t\t\t*******************************");
printf("\n\t\t\t* 仓库管理系统 *");
printf("\n\t\t\t* 1-存入货物 *");
printf("\n\t\t\t* 2-取出货物 *");
printf("\n\t\t\t* 3-显示所有货物信息 *");
printf("\n\t\t\t* 4-查询货物数据 *");
printf("\n\t\t\t*******************************");
printf("\n\t\t\t 请选择功能(1-4):");
f=1;
while(f=1)
{
cin>>n;
if(n<'1'||n>'4')
{
printf("输入有误,请重新输入(1-4):");
f=1;
}
else
f=0;
}
printf("\n\n");
switch(n)
{
case'1':
{
printf("***********************************************\n");
printf("* 存入货物 *\n");
printf("***********************************************\n");
printf(" 货物编号 货物颜色 货物尺码 货物数量 \n");
printf("***********************************************\n");
int a=1;
while(a=1)
{
a=Ku.Insert();
Ku.Fprintf();
}
break;
}
case'4':
{
printf("*********************************************\n");
printf("** 查询货物信息 **\n");
printf("*********************************************\n");
flag=1;
char yn;
while(flag=1)
{
p=Ku.Search();
if(p)
{
printf("\n 货物编号 货物颜色 货物尺码 货物数量 \n");
printf("--------------------------------------------\n");
printf("%5s%9s%9s%8d\n",p->data.no,p->data.color,p->data.size,p->data.count);
printf("--------------------------------------------\n");
}
else
printf("仓库中没有该货物!\n");
printf("是否继续查询?(y/n)");
yn=Ku.Yn();
if(yn=='y'||yn=='Y')
flag=1;
if(yn=='n'||yn=='N')
flag=0;
}
break;
}
case'2':
{
printf("************************************\n");
printf("* 取出货物 *\n");
printf("************************************\n");
flag=1;
char yn;
while(flag==1)
{
Ku.Delete();
printf("是否继续取货?(y/n):");
yn=Ku.Yn();
if(yn=='y'||yn=='Y')
flag=1;
if(yn=='n'||yn=='N')
flag=0;
}
break;
}
case'3':
{
Ku.show();
break;
}
}
}
return 0;
}
Link::Link()
{
first=new Node;
first->next=NULL;
real=first;
FILE *fp=NULL;
fp=fopen("d:\\file01.txt","a");
fclose(fp);
//Fprintf();
Fscanf();
}
int Link::Insert()
{
char yn;
char no[10],color[10],size[10];
int count,t;
printf("\n 货物编号 货物颜色 货物尺码 货物数量 \n");
printf("--------------------------------------\n");
printf("\n 请输入货物编号:\n");
strcpy(no,No());
printf("\n 请输入货物颜色: \n");
cin>>color;
printf("\n 请输入货物尺码: \n");
cin>>size;
t=1;
while(t)
{
printf("输入货物数量:");
cin>>count;
if(count<=0)
{
t=1;
printf("货物数量必须大于0,请重新");
}
else
t=0;
}
p=first;real=first;
p=p->next;
while(p)
{
if(strcmp(p->data.no,no)==0&&strcmp(p->data.color,color)==0&&strcmp(p->data.size,size)==0)
{
//printf("仓库中已有该货物%d件\n",p->data.count);
p->data.count=p->data.count+count;
printf("添加成功!仓库中现有该货物%d件\n是否继续存货?(y/n):",p->data.count);
yn=Yn();
if(yn=='y'||yn=='Y') return 1;
if(yn=='n'||yn=='N') return 0;
}
if(strcmp(p->data.no,no)==0&&strcmp(p->data.color,color)==0&&strcmp(p->data.size,size)!=0)
{
printf("该货物尺码输入有误,应为%s\n请重新输入(y),或取消存货(n):",p->data.size);
yn=Yn();
if(yn=='y'||yn=='Y') return 1;
if(yn=='n'||yn=='N') return 0;
}
if(strcmp(p->data.no,no)==0&&strcmp(p->data.color,color)!=0&&strcmp(p->data.size,size)==0)
{
printf("该货物颜色输入有误,应为%s\n请重新输入(y),或取消存货(n):",p->data.size);
yn=Yn();
if(yn=='y'||yn=='Y') return 1;
if(yn=='n'||yn=='N') return 0;
}
if(strcmp(p->data.no,no)!=0&&strcmp(p->data.color,color)==0&&strcmp(p->data.size,size)==0)
{
printf("该货物编号输入有误,应为%s\n请重新输入(y),或取消存货(n):",p->data.size);
yn=Yn();
if(yn=='y'||yn=='Y') return 1;
if(yn=='n'||yn=='N') return 0;
}
real=p;
p=p->next;
}
if(p=NULL)
{
Node *s=new Node;
strcpy(s->data.no,no);
strcpy(s->data.color,color);
strcpy(s->data.size,size);
s->data.count=count;
s->next=NULL;
real->next=s;
real=s;
printf("添加成功!仓库中现在有该货物%d件\n是否继续存货?(y/n):",real->data.count);
yn=Yn();
if(yn=='y'||yn=='Y') return 1;
if(yn=='n'||yn=='N') return 0;
}
return 0;
}
Node *Link::Search()
{
char abc;
char no[10],size[10],color[10];
int f;
p=first;
printf("========================\n");
printf(" a.按货物编号查询 \n");
printf(" b.按货物尺码查询 \n");
printf(" c.按货物颜色查询 \n");
printf("========================\n");
printf(" 请选择(a/b/c) \n");
f=1;
while(f=1)
{
cin>>abc;
if(abc=='a'||abc=='A'||abc=='b'||abc=='B'||abc=='c'||abc=='C')
{
f=0;
if(abc=='a'||abc=='A')
{
printf("请输入查询货物编号:\n");
strcpy(no,No());
while(p&&strcmp(p->data.no,no)!=0)
p=p->next;
}
if(abc=='b'||abc=='B')
{
printf("请输入查询货物尺码:\n");
cin>>size;
while(p&&strcmp(p->data.size,size)!=0)
p=p->next;
}
if(abc=='c'||abc=='C')
{
printf("请输入查询货物颜色:\n");
cin>>color;
while(p&&strcmp(p->data.color,color)!=0)
p=p->next;
}
}
else
{
f=1;
printf("输入有误,请重新输入(a/b/c)");
}
}
return p;
}
void Link::Delete()
{
Node *q,*p;
int count,t;
char yn;
p=Search();
if(p=NULL)
{
printf("仓库中没有该货物!\n");
}
else
{
printf("\n 仓库中有该货物%d件。",p->data.count);
int flag=1;
while(flag=1)
{
printf("请输入要取出的货物数量:");
t=1;
while (t=1)
{
cin>>count;
if(count<0)
{
t=1;
printf("取货数量不可小于0,请重新输入取货数量:");
}
else
t=0;
}
if(count>p->data.count)
{
printf("\n取货数量大于库存,是否要重新输入取货数量?(y/n):");
yn=Yn();
if(yn=='y'||yn=='Y') flag=1;
if(yn=='n'||yn=='N') flag=0;
}
else
{
flag=0;
if(count<p->data.count)
{
p->data.count=p->data.count-count;
Fprintf();
printf("\n 取货成功,仓库中还有该货物%d件\n",p->data.count);
printf("\n 是否继续取货:(y/n)");
yn=Yn();
if(yn=='y'||yn=='Y') flag=1;
if(yn=='n'||yn=='N') flag=0;
}
else
{
q=first;
while(q!=NULL&&q->next!=p)
q=q->next;
q->next=p->next;
delete p;
Fprintf();
printf("取货成功!该货物已被全部取出!\n");
}
}
}
}
}
void Link::show()
{
if(first->next=NULL)
printf("仓库内没有货物!");
else
{
printf(" 货物编号 货物颜色 货物尺码 货物数量 \n");
printf("----------------------------------------------\n");
p=first->next;
while(p)
{
printf("%15s%23s%23s%23d\n",p->data.no,p->data.color,p->data.size,p->data.count);
p=p->next;
printf("-----------------------------------------\n");
}
}
}
char Link::Yn()
{
int f=1;
char yn;
while(f==1)
{
cin>>yn;
if(yn=='y'||yn=='Y'||yn=='n'||yn=='N')
{
f=0;
return yn;
}
else
{
printf("输入有误,请重新输入(y/n):");
f=1;
}
}
}
char *Link::No()
{
int t=1,i;
static char *no=NULL,nol[10];
while(t)
{
t=0;
cin>>nol;
no=nol;
for(i=0;no[i];i++)
{
if(no[i]<'0'||no[i]>'z')
{
t=1;
printf("货物编号只能使用a-z,A-Z和0-9的字符组成,请重新输入货物编号:");
break;
}
}
}
return nol;
}
void Link::Fprintf()
{
FILE *fp=NULL;
fp=fopen("d:\\file01.txt","w");
p=first->next;
while(p!=NULL)
{
fprintf(fp,"%10s%30s%30s%10d\n",p->data.no,p->data.color,p->data.size,p->data.count);
p=p->next;
}
fclose(fp);
}
void Link::Fscanf()
{
FILE *fp=NULL;
p=first;
Node *s;
fp=fopen("d:\\file01.txt","r");
if(fp=NULL)
{
cout<<"不能打开文件!"<<endl;
exit(0);
}
while(feof(fp)==0)
{
s=new Node;
fscanf(fp,"%s%s%s%d\n",p->data.no,p->data.color,p->data.size,p->data.count);
if(s->data.count>0)
{
p->next=s;
p=s;
}
}
p->next=NULL;
fclose(fp);
}
18行while(f=1)漏了一个等号,应该是while(f==1)
54 行178行都是这个问题,下面还有,你检查一下
while(f=1) 改为 while(f==1)
if(fp=NULL) 改为 if(fp==NULL)
作为判定条件,要用==,不是=