|
![]() | 作者: 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号