仓库库存管理系统源程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#include
#include
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<<"********************************************************************************"<
}
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<
}
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;
}
}
else
if(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'返回上一级菜单):"<
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->);
g
etchar();
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();
return;
}
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<
cout<
cout<
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<
cout<
cout<
getchar();
getchar();
menu();
return;
}
else
Nofind();
}
else
Wrong();
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 ;
}
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();
}
void Modify(Link l)//物品信息修改
{
Node *p;
char findmess[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->);
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);
getchar();
printf("\n修改资料成功!\n");
shoudsave=1;
getchar();
menu();
return;
}
else
Nofind();
getchar();
menu();
}
void Disp(Link l)
{
int count=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");
}
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;
}
}
}