论坛: 编程破解 标题: 出入库查询系统不能正常运行的问题 复制本贴地址    
作者: yqs0324 [yqs0324]    论坛用户   登录
程序运行时,选择11时,不能正常运行,本来是当入库的产品匹号跟出库的相同时,它会显示信息,但现在不能,请高手指点!

附程序如下:
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#define AD struct address_list
#define BD struct address1_list
struct person
{
  char time[20];
  char name[20];
  char num[20];
  int   good;
  int  fail;
  char my[20];
} ;
AD
{ char time[20];
  char name[20];
  char num[20];
  int good;
 int fail;
 char my[20];
  AD *next;
};
struct persona
{  char a[20];
   char b[20];
   char c[20];
   int d;
   char e[20];
};
BD
{  char a[20];
   char b[20];
   char c[20];
   int d;
   char e[20];
   BD *next1;
};
FILE *fp1,*fp2;
AD *load(char fname[])
{AD *p,*q,*head;
  struct person per;
  head=(AD *)malloc(sizeof(AD));
  q=head=NULL;
  if((fp1=fopen(fname,"rb"))==NULL)
   return head;
   else
   {while(!feof(fp1))
   {if(fread(&per,sizeof(struct person),1,fp1)==1)
    {p=(AD *)malloc(sizeof(AD));
     strcpy(p->time,per.time);strcpy(p->name,per.name);strcpy(p->num,per.num);p->good=per.good;p->fail=per.fail;strcpy(p->my,per.my);
     head=p;p->next=q;q=head;
     }
   }
   fclose(fp1);
   return(head);
  }
}
BD *loada (char fname2[])
{ BD *i,*j,*head2;
   struct persona pera;
   head2=(BD *)malloc(sizeof(BD));
   j=head2=NULL;
   if((fp2=fopen(fname2,"rb"))==NULL)
    return head2;
    else
    {while(!feof(fp2))
     {if(fread(&pera,sizeof(struct persona),1,fp2)==1)
      { i=(BD *)malloc(sizeof(BD));
strcpy(i->a,pera.a);strcpy(i->b,pera.b);strcpy(i->c,pera.c);i->d=pera.d;strcpy(i->e,pera.e);
head2=i;i->next1=j;j=head2;
      }
   }
   fclose(fp2);
   return (head2);
  }
}
AD *insert(AD *head)
{ AD *temp,*p;
  p=head;
  temp=(AD *)malloc(sizeof(AD));
   printf("\n\t请输入时间:");  scanf("%s",temp->time);
   printf("\n\t请输入品种:");  scanf("%s",temp->name);
   printf("\n\t请输入批号:");  scanf("%s",temp->num);
   printf("\n\t请输入成品数:");  scanf("%d",&temp->good);
   printf("\n\t请输入不良品数:");     scanf("%d",&temp->fail);
   printf("\n\t请输入交接人姓名:");  scanf("%s",temp->my);
   head=temp;
   temp->next=p;
   return head;
}
BD *inserta(BD *head2)
{BD *temp2,*i;
  i=head2;
  temp2=(BD*)malloc(sizeof(BD));
    printf("\n\t请输入出库时间:");scanf("%s",temp2->a);
    printf("\n\t请输入品种:");scanf("%s",temp2->b);
    printf("\n\t请输入批号:");scanf("%s",temp2->c);
    printf("\n\t请输入成品数:");scanf("%d",&temp2->d);
    printf("\n\t请输入交接人姓名:");scanf("%s",temp2->e);
    head2=temp2;
    temp2->next1=i;
    return head2;
}
void save(AD *head,char filename[])
{ AD *p;
  struct person per;
  if((fp1=fopen(filename,"wb"))==NULL)
   {printf("文件无法写入");exit(1);}
   else
   {p=head;
    while(p!=NULL)
    {strcpy(per.time,p->time);strcpy(per.name,p->name);strcpy(per.num,p->num);per.good=p->good;per.fail=p->fail;strcpy(per.my,p->my);

    if(fwrite(&per,sizeof(struct person),1,fp1)!=1)
      {printf("文件不能写入数据,请检查后重新运行.\n");exit(1);}
      p=p->next;
       }
       fclose(fp1);
   }
}
void savea(BD *head2,char filename2[])
{BD *i;
  struct persona pera;
   if((fp2=fopen(filename2,"wb"))==NULL)
    {printf("文件无法写入");exit(1);
     }
     else
     {i=head2;
 while(i!=NULL)
      { strcpy(pera.a,i->a);strcpy(pera.b,i->b);strcpy(pera.c,i->c); pera.d=i->d;strcpy(pera.e,i->e);
      if(fwrite(&pera,sizeof(struct persona),1,fp2)!=1)
       { printf("文件不能写入,请检查后再重新运行.\n");exit(1);}
       i=i->next1;
      }
     fclose(fp2);
    }
}
void show(AD *head)
{  AD *p;
  p=head;
  printf("\t入库时间        品种      批号       成品       废品     姓名\n");
  while(p!=NULL)
  {printf("\t%10s%10s%10s%11d%11d%10s\n",p->time,p->name,p->num,p->good,p->fail,p->my);
   p=p->next;
   }
}
void showa(BD *stu)
{  BD *i;
  i=stu;
  printf("\t出库时间        品种      批号       成品        姓名\n");
  while(i!=NULL)
  {printf("\t%10s%10s%10s%11d%10s\n",i->a,i->b,i->c,i->d,i->e);
   i=i->next1;
  }
}
void find(AD *head)
{ AD *p;
  char num[20];
   printf("请输入要查找的批号:");
   scanf("%s",num);
   p=head;
   while(p!=NULL)
   {if(strcmp(num,p->num)==0)
    {printf(" 入库时间:%s\n",p->time);
    printf("入库品种:%s\n",p->name);
    printf("产品批号:%s\n",p->num);
    printf("成品数:%11d\n",p->good);
    printf("废品数:%11d\n",p->fail);
    printf("姓名:%s\n",p->my);
    break;}
    else
    p=p->next;
   }
   if(p==NULL) printf("\n\t\t查无此批\n\n");
}
void finda(BD *head2)
{ BD *i;char c[20] ;
  printf("请输入要查找的批号:"); scanf("%s",&c);
  i=head2;
  while(i!=NULL)
  {if(strcmp(c,i->c)==0)
   {printf("出库时间:%s\n",i->a);
    printf("品种:%s\n",i->b);
    printf("批号:%s\n",i->c);
    printf("成品数:%d\n",i->d);
    printf("姓名:%s\n",i->e);
    break;}
    else
   i=i->next1;
  }
  if(i==NULL) printf("\n\t\t查无此批\n\n");
}
AD *delete(AD *head)
{ AD *p,*q;
  char num[20];
   printf("请输入要删除的产品批号:");
   scanf("%s",num);
   p=q=head;
   while(p!=NULL)
   { if(strcmp(num,p->num)==0)
    { if(head==p)head=p->next;
     else q->next=p->next;
      free(p);break;}
      else{q=p;p=p->next;}
    }
    if(p==NULL) printf("\n\t\t查无此批\n\n");
    return head;
}
BD *deletea(BD *head2)
{ BD *i,*j;
  char c[20];
  printf("请输入要删除的产品批号:");
  scanf("%s",c);
  i=j=head2;
  while(i!=NULL)
  {if(strcmp(c,i->c)==0)
   {if(head2==i) head2=i->next1;
    else j->next1=i->next1;
     free(i);break;}
     else{j=i;i=i->next1;}
    }if(i==NULL)printf("\n\t\t 查无此批\n\n");
    return head2;
}
void average(AD *head)
{

  double s1=0;
  double s2=0;
  int n=0;
  AD *p;
  p=head;
  while(p!=NULL)
  {s1=s1+(double)p->good;s2=s2+(double)p->fail;
   p=p->next;
   n++;}
   printf("\t总成品数=%g\n",s1);
   printf("\t总废品数=%g\n",s2);
   printf("\t总批数=%d\n",n);
}
void deg(BD *head2)
{  double f=0;
   int g=0;
   BD *i;
   i=head2;
   while(i!=NULL)
   {f=f+(double)i->d;
    i=i->next1;
    g++;}
    printf("\t总出库的成品=%g\n",f);
    printf("\t总出库的批数=%d\n",g);
}
void display(AD *head,BD *head2)
{ AD *p;
  BD *i;
  p=head;
   i=head2;
  printf("入库时间   品种   批号   成品数    废品数   交接人    出库时间   交接人\n");
  while(p!=NULL)
  {
    while(i!=NULL)
    {
      if(strcmp(p->num,i->c)==0)
      {printf("%4s%10s%10s%10d%10d%10s%10s%10s\n",p->time,p->name,p->num,p->good,p->fail,i->a,i->e);p=p->next;continue;}
       else
       i=i->next1;
    }p=p->next;
  }
}
void main()
{
   AD *head;
   BD *head2;
   char fname[20];
   char fname2[20];
   int choise;
   printf("请输入入库管理文件名:");
   scanf("%s",fname);
   printf("请输入出库管理文件名:");
   scanf("%s",fname2);
   head=load(fname);
   head2=loada(fname2);
   while(1)
   {
     printf("\t\t    出入库管理系统\n");
     printf("\t\t=======================\n");
     printf("\t\t    1.输入一条入库信息\n");
     printf("\t\t    2.显示所有记录\n");
     printf("\t\t    3.按批号查找\n");
     printf("\t\t    4.按批号删除\n");
     printf("\t\t    5.计算总入库的成品数和废品数\n");
     printf("\t\t    6.输入一条出库信息\n");
     printf("\t\t    7.显示所有出库信息\n");
     printf("\t\t    8.按批号查找\n");
     printf("\t\t    9.按批号删除\n");
     printf("\t\t    10.计算总出库数\n");
     printf("\t\t    11.显示出入库信息\n");
     printf("\t\t    12.出入库存盘并退出\n");
     printf("\n\n\t 请选择(1 ~ 11):");
     getchar();
     scanf("%d",&choise);
     switch(choise)
     {
       case 1: head=insert(head);break;
       case 2 : show(head);break;
       case 3 : find(head);break;
       case 4 :  head=delete(head);break;
       case 5 :  average(head);break;
       case 6 :  head2=inserta(head2);break;
       case 7 :  showa(head2);break;
       case 8 :   finda(head2);break;
       case 9 :   head2=deletea(head2);break;
       case 10 :  deg(head2);break;
       case 11 :  display(head,head2);break;
       case 12: { savea(head2,fname2);
                 save(head,fname); } exit(0);
       default:printf("输入错误请重新输入!\n");
     }
   }
}


[此贴被 山林柴夫(yqs0324) 在 06月14日00时30分 编辑过]

地主 发表时间: 06/13 16:06

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号