#includeiostreamusingnamespacestd;typedefstruct{charno[10];charname[30];intcount;}DataType;structNode{DataTypedata;Node*next;};classLink{public:Link();//构造函数,建立单链表intInsert();//插入节点,即添加货物Node*Search();//查找某个节点voidDelete();//删除节点或更改节点的数据voidshow();//输出节点信息charYn();//输入(y/n)函数char*No();//输入货物编号函数voidFprintf();//将单链表数据写到文件中voidFscanf();//读取文件中的数据private:Node*first,*real,*p,*q;};intmain(){intt=1,flag=1,f=1;charn;Node*p;LinkKu;while(t){printf(\n\n\n\n\n);printf(\n\t\t\t**********************************);printf(\n\t\t\t*XXX仓库管理系统*);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*0---退出仓库管理系统*);printf(\n\t\t\t**********************************);printf(\n\t\t\t请选择菜单号(0--4):);f=1;while(f==1){cinn;if(n'0'||n'4'){printf(输入有误,请重新输入(0--4):);f=1;}elsef=0;}printf(\n\n);switch(n){case'1':{printf(**********************************\n);printf(*存储货物*\n);printf(**********************************\n);//printf(货物编号货物名称货物数量\n);//printf(**********************************\n);inta=1;while(a==1){a=Ku.Insert();Ku.Fprintf();//将单链表里的数据写入文件。}break;}case'2':{printf(***********************************\n);printf(*查询货物信息*\n);printf(***********************************\n);flag=1;charyn;while(flag==1){p=Ku.Search();if(p){printf(\n货物编号货物名称货物数量\n);printf(---------------------------\n);printf(%5s%9s%8d\n,p-data.no,p-data.name,p-data.count);printf(---------------------------\n);}elseprintf(仓库中没有该货物!\n);printf(是否继续查询?(y/n):);yn=Ku.Yn();if(yn=='y'||yn=='Y')flag=1;if(yn=='n'||yn=='N')flag=0;}break;}case'3':{printf(***********************************\n);printf(*取出货物*\n);printf(***********************************\n);flag=1;charyn;while(flag==1){Ku.Delete();printf(是否继续取货?(y/n):);yn=Ku.Yn();//调用输入y/n函数if(yn=='y'||yn=='Y')flag=1;if(yn=='n'||yn=='N')flag=0;}break;}case'4':{Ku.show();break;}case'0':{charyn;printf(确定退出仓库管理系统吗?(y/n):);yn=Ku.Yn();//调用输入y/n函数if(yn=='y'||yn=='Y'){printf(谢谢使用...\n);t=0;}if(yn=='n'||yn=='N'){t=1;}break;}}}return0;}Link::Link(){first=newNode;first-next=NULL;real=first;FILE*fp=NULL;fp=fopen(d:\\file01.txt,a);fclose(fp);//Fprintf();Fscanf();}intLink::Insert(){charyn;charno[10],name[30];intcount,t;printf(\n货物编号货物名称(30)货物数量(5)\n);printf(-----------------------------------------------\n);printf(\n请输入货物编号(10个字符以内):\n);strcpy(no,No());printf(\n输入货物名称(30个字符以内):\n);cinname;t=1;while(t){printf(输入货物数量(整数):);cincount;if(count=0){t=1;printf(货物数量必须大于0,请重新);}elset=0;}p=first;real=first;p=p-next;while(p){if(strcmp(p-data.no,no)==0&&strcmp(p-data.name,name)==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')return1;if(yn=='n'||yn=='N')return0;}if(strcmp(p-data.no,no)==0&&strcmp(p-data.name,name)!=0){printf(该货物的名称输入有误,应为%s\n请重新输入(y)或取消存货(n):,p-data.name);yn=Yn();if(yn=='y'||yn=='Y')return1;if(yn=='n'||yn=='N')return0;}if(strcmp(p-data.no,no)!=0&&strcmp(p-data.name,name)==0){printf(该货物的编号输入有误,应为%s\n请重新输入(y)或取消存货(n):,p-data.no);yn=Yn();if(yn=='y'||yn=='Y')return1;if(yn=='n'||yn=='N')return0;}real=p;p=p-next;}if(p==NULL){Node*s=newNode;strcpy(s-data.no,no);strcpy(s-data.name,name);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')return1;if(yn=='n'||yn=='N')return0;}return0;}Node*Link::Search(){charab;charno[10],name[30];intf;p=first;printf(==================\n);printf(a.按货物编号查询\n);printf(b.按货物名称查询\n);printf(==================\n);printf(请选择(a/b):);f=1;while(f==1){cinab;if(ab=='a'||ab=='A'||ab=='b'||ab=='B'){f=0;if(ab=='a'||ab=='A'){printf(\n请输入货物编号(10个字符内):\n);strcpy(no,No());while(p&&strcmp(p-data.no,no)!=0)p=p-next;}if(ab=='b'||ab=='B'){printf(\n请输入货物名称(30个字符内):);cinname;while(p&&strcmp(p-data.name,name)!=0)p=p-next;}}else{f=1;printf(输入有误,请重新输入(a/b):);}}returnp;}voidLink::Delete(){Node*q,*p;intcount,t;charyn;p=Search();if(p==NULL){printf(仓库中没有该货物!\n);}else{printf(\n仓库中有该货物%d件。,p-data.count);intflag=1;while(flag==1){printf(\n请输入要取出的货物数量(整数):);t=1;while(t==1){cincount;if(count0){t=1;printf(取货数量不能为负数,请重新输入取货数量(整数):);}elset=0;}if(countp-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(countp-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;deletep;Fprintf();//将单链表里的数据写入文件。printf(\n取货成功!该货物已被全部取出!\n);}}}}}voidLink::show(){if(first-next==NULL)printf(仓库内没有货物!);else{printf(货物编号货物名称货物数量\n);printf(-----------------------------------------------------------------------------\n);p=first-next;while(p){printf(%15s%23s%23d\n,p-data.no,p-data.name,p-data.count);p=p-next;printf(-----------------------------------------------------------------------------