仓库库存管理系统源程序.docx
《仓库库存管理系统源程序.docx》由会员分享,可在线阅读,更多相关《仓库库存管理系统源程序.docx(16页珍藏版)》请在冰豆网上搜索。
仓库库存管理系统源程序
仓库库存管理系统源程序
#include
#include
#include
#include
intshoudsave=0;
structitem//物品信息定义
{
charcode[10];//物品编码
charname[20];//物品名称
intnum;//商品数量
intlevel;//物品等级
}item;
typedefstructnode
{
structitemdata;
structnode*next;
}Node,*Link;//定义为链表
voidmenu()//页面显示函数
{
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<<"********************************************************************************"<printf("\n请选择操作:
");
}
voidprintstart()
{
printf("------------------------------------------\n");
}
voidWrong()//错误处理函数
{
printf("输入错误!
\n");
getchar();
getchar();
menu();
return;
}
voidNofind()
{
printf("没有找到该物品!
\n");
}
voidprintc()//本函数用于输出中文
{
printf("物品编码物品名称物品数量物品等级\n");
}
voidprinte(Node*p)//输出物品信息函数
{
cout<data.code<<""<data.name<<""<data.num<<""<data.level;
}
Node*Locate(Linkl,charfindmess[],charnameorcode[])//用于定位连接中,符合要求的结点,并返回该指针
{
Node*r;
if(strcmp(nameorcode,"code")==0)//
{
r=l->next;
while(r!
=NULL)
{
if(strcmp(r->data.code,findmess)==0)
returnr;
r=r->next;
}
}
else
if(strcmp(nameorcode,"name")==0)//按名称查询
{
r=l->next;
while(r!
=NULL)
{
if(strcmp(r->data.name,findmess)==0)
returnr;
r=r->next;
}
}
return0;
}
voidAdd(Linkl)//增加物品函数
{
Node*p,*r,*s;
charcode[10];
r=l;
s=l->next;
while(r->next!
=NULL)
r=r->next;
while(l)
{
system("cls");//清屏函数
cout<<"请输入商品编码(输入'0'返回上一级菜单):
"<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->data.name);
getchar();
printf("请输入物品数量:
");
scanf("%d",&p->data.num);
printf("请输入物品等级:
");
scanf("%d",&p->data.level);
p->next=NULL;
r->next=p;
r=p;
shoudsave=1;
}
menu();
}
voidQur(Linkl)//查询物品信息函数
{
intsel;
charfindmess[20];
Node*p;
if(!
l->next)
{
printf("\n没有信息可查询!
\n");
getchar();
getchar();
menu();
return;
}
system("cls");//清屏函数
printf("\n1按物品编码查询\n2按物品名称查询\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<printc();
cout<printe(p);
cout<printstart();
getchar();
getchar();
menu();
return;
}
else
Nofind();
}
else
if(sel==2)//
{
printf("请输入要查找的物品名称:
");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
printf("\t\t\t查询结果\n");
printstart();
cout<printc();
cout<printe(p);
cout<printstart();
getchar();
getchar();
menu();
return;
}
else
Nofind();
}
else
Wrong();
getchar();
system("cls");//清屏函数
menu();
}
voidDel(Linkl)//删除
{
intsel;
Node*p,*r;
charfindmess[20];
if(!
l->next)
{
system("cls");//清屏函数
printf("\n您的仓库为空!
\n");
getchar();
getchar();
menu();
return;
}
system("cls");//清屏函数
printf("\n1按物品编码出仓\n2按物品名称出仓\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;
}
else
Nofind();
}
else
if(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;
}
else
Nofind();
}
else
Wrong();
}
voidModify(Linkl)//物品信息修改
{
Node*p;
charfindmess[20];
if(!
l->next)
{
system("cls");//清屏函数
printf("\n您的库存为空,无需修改!
\n");
getchar();
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->data.name);
scanf("%s",p->data.name);
getchar();
printf("请输入新的物品数量(原来的是%d):
",p->data.num);
scanf("%d",&p->data.num);
getchar();
printf("请输入新的物品等级(原来的是%d):
",p->data.level);
scanf("%d",&p->data.level);
getchar();
printf("\n修改资料成功!
\n");
shoudsave=1;
getchar();
menu();
return;
}
else
Nofind();
getchar();
menu();
}
voidDisp(Linkl)
{
intcount=0;
Node*p;
p=l->next;
if(!
p)
{
printf("\n没有资料可以显示!
\n");
getchar();
getchar();
menu();
return;
}
printf("\t\t\t\t显示结果\n");
printstart();
printc();
printf("\n");
while(p)
{
printe(p);
p=p->next;
}
printstart();
printf("\n");
}
voidSave(Linkl)//物品信息保存
{
FILE*fp;
Node*p;
intflag=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);
}
voidmain()//主函数
{
menu();
Linkl;//链表
Node*r;
intsel;
charch;
intcount=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资料已改动,是否将改动的文件保存到文件中(yorn)?
\n");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(l);
}
printf("\n已退出系统!
\n");
break;
}
switch(sel)
{
case1:
Add(l);break;//物品进库
case2:
Del(l);break;//物品出库
case3:
Qur(l);break;//查询物品
case4:
Modify(l);break;//修改物品信息
case5:
Save(l);break;//保存物品信息
default:
Wrong();getchar();break;
}
}
}