仓库库存管理系统源程序#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream.h>int shoudsave=0;struct item//物品信息定义{char code[10];//物品编码char name[20];//物品名称int num; //商品数量int level;//物品等级}item;typedef struct node{struct item data;struct node * next;}Node,*Link;//定义为链表void menu()//页面显示函数{system("cls");//清屏函数printf("***********************************《物品库存管理》*****************************\n");printf(" \n");printf("\n <1> 物品入库管理\n\t\n <2> 物品出库管理\n");printf("\n <3> 浏览库内物品信息\n\t\n <4> 修改物品信息\n");printf("\n <5> 保存物品信息\n\t\n <0> 退出库存管理\n");printf(" \n");cout<<"************************************************** ******************************"<<endl;printf("\n 请选择操作:");}void printstart(){printf("------------------------------------------\n");}void Wrong()//错误处理函数{printf("输入错误!\n");getchar();getchar();menu();return;}void Nofind(){printf("没有找到该物品!\n");}void printc()//本函数用于输出中文{printf(" 物品编码物品名称物品数量物品等级\n");}void printe(Node *p)//输出物品信息函数{cout<<endl<<" "<<p->data.code<<""<<p-><<" "<<p->data.num<<""<<p->data.level;}Node *Locate(Link l,char findmess[],char nameorcode[]) //用于定位连接中,符合要求的结点,并返回该指针{Node *r;if(strcmp(nameorcode,"code")==0)//{r=l->next;while(r!=NULL){if(strcmp(r->data.code,findmess)==0)return r;r=r->next;}}elseif(strcmp(nameorcode,"name")==0)//按名称查询{r=l->next;while(r!=NULL){if(strcmp(r->,findmess)==0)return r;r=r->next;}}return 0;}void Add(Link l)//增加物品函数{Node *p,*r,*s;char code[10];r=l;s=l->next;while(r->next!=NULL)r=r->next;while(l){system("cls");//清屏函数cout<<"请输入商品编码(输入'0'返回上一级菜单):"<<endl;scanf("%s",code);if(strcmp(code,"0")==0)break;while(s){if(strcmp(s->data.code,code)==0){printf("物品编码为'%s'的物品已经存在,如果要修改请选择'4 修改'!\n",code);printstart();printc();printe(s);printstart();printf("\n");return;}s=s->next;}p=(Node * )malloc(sizeof(Node));strcpy(p->data.code,code);printf("请输入物品名称:");scanf("%s",p->);getchar();printf("请输入物品数量:");scanf("%d",&p->data.num);printf("请输入物品等级:");scanf("%d",&p->data.level);p->next=NULL;r->next=p;r=p;shoudsave=1;}menu();}void Qur(Link l)//查询物品信息函数{int sel;char findmess[20];Node *p;if(!l->next){printf("\n没有信息可查询!\n");getchar();getchar();menu();}system("cls");//清屏函数printf("\n 1按物品编码查询\n 2按物品名称查询\n"); scanf("%d",&sel);if(sel==1)//{printf("请输入要查询的编码:\n");scanf("%s",findmess);p=Locate(l,findmess,"code");if(p){printf("\t\t\t\t查询结果\n");printstart();cout<<endl;printc();cout<<endl;printe(p);cout<<endl;printstart();getchar();getchar();return;}elseNofind();}elseif(sel==2)//{printf("请输入要查找的物品名称:");scanf("%s",findmess);p=Locate(l,findmess,"name");if(p){printf("\t\t\t查询结果\n");printstart();cout<<endl;printc();cout<<endl;printe(p);cout<<endl;printstart();getchar();getchar();menu();return;}elseNofind();}elseWrong();getchar();system("cls");//清屏函数menu();}void Del(Link l)//删除{int sel;Node *p,*r;char findmess[20];if(!l->next){system("cls");//清屏函数printf("\n您的仓库为空!\n");getchar();getchar();menu();return ;}system("cls");//清屏函数printf("\n 1按物品编码出仓\n 2按物品名称出仓\n"); scanf("%d",&sel);if(sel==1){printf("请输入要出仓的物品编码:");scanf("%s",findmess);p=Locate(l,findmess,"code");if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p);printf("\n该物品已经成功出仓\n");shoudsave=1;getchar();getchar();menu();return ;}elseNofind();}elseif(sel==2){system("cls");//清屏函数printf("请输入要出仓的物品名:");scanf("%s",findmess);p=Locate(l,findmess,"name");if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p);printf("\n该物品已经成功出仓!\n");shoudsave=1;getchar();getchar();menu();return;}elseNofind();}elseWrong();}void Modify(Link l)//物品信息修改{Node *p;char findmess[20];if(!l->next){system("cls");//清屏函数printf("\n您的库存为空,无需修改!\n");getchar();menu();return;}printf("请输入要修改的物品编码:");scanf("%s",findmess);p=Locate(l,findmess,"code");if(p){system("cls");//清屏函数printf("请输入新编码(原来的是%s):",p->data.code);scanf("%s",p->data.code);printf("请输入新名称(原来的是%s):",p->);scanf("%s",p->);getchar();printf("请输入新的物品数量(原来的是%d):",p->data.num);scanf("%d",&p->data.num);getchar();printf("请输入新的物品等级(原来的是%d):",p->data.level);scanf("%d",&p->data.level);printf("\n修改资料成功!\n");shoudsave=1;getchar();menu();return;}elseNofind();getchar();menu();}void Disp(Link l){int count=0;Node *p;p=l->next;if(!p){printf("\n 没有资料可以显示!\n");getchar();getchar();return;}printf("\t\t\t\t显示结果\n");printstart();printc();printf("\n");while(p){printe(p);p=p->next;}printstart();printf("\n");}void Save(Link l)//物品信息保存{FILE *fp;Node *p;int flag=1,count=0;fp=fopen("c:\\student","wb");if(fp==NULL){printf("\n重新打开文件时错误!\n");exit(1);}p=l->next;while(p){if(fwrite(p,sizeof(Node),1,fp)==1){p=p->next;count++;}else{flag=0;break;}}if(flag){system("cls");//清屏函数printf("\n 文件保存成功.(有%d条记录保存成功.)\n",count);shoudsave=0;getchar();getchar();menu();}fclose(fp);}void main()//主函数{menu();Link l;//链表Node *r;int sel;char ch;int count=0;l=(Node * )malloc(sizeof(Node));l->next=NULL;r=l;while(l){scanf("%d",&sel);if(sel==0){if(shoudsave==1){getchar();printf("\n 资料已改动,是否将改动的文件保存到文件中(y or n)?\n");scanf("%c",&ch);if(ch=='y' || ch=='Y')Save(l);}printf("\n 已退出系统!\n");break;}switch(sel){case 1:Add(l);break;//物品进库case 2:Del(l);break;//物品出库case 3:Qur(l);break;//查询物品case 4:Modify(l);break;//修改物品信息case 5:Save(l);break;//保存物品信息default:Wrong();getchar();break;}}}。