数据结构课程设计仓库管理系统源程序.docx
《数据结构课程设计仓库管理系统源程序.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计仓库管理系统源程序.docx(17页珍藏版)》请在冰豆网上搜索。
数据结构课程设计仓库管理系统源程序
#include
usingnamespacestd;
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)
{
cin>>n;
if(n<'0'||n>'4')
{
printf("输入有误,请重新输入(0--4):
");
f=1;
}
else
f=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");
}
else
printf("仓库中没有该货物!
\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");
cin>>name;
t=1;
while(t)
{
printf("输入货物数量(整数):
");
cin>>count;
if(count<=0)
{
t=1;
printf("货物数量必须大于0,请重新");
}
else
t=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)
{
cin>>ab;
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个字符):
");
cin>>name;
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)
{
cin>>count;
if(count<0)
{
t=1;
printf("取货数量不能为负数,请重新输入取货数量(整数):
");
}
else
t=0;
}
if(count>p->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(countdata.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("-----------------------------------------------------------------------------\n");
}
}
}
charLink:
:
Yn()
{
intf=1;
charyn;
while(f==1)
{
cin>>yn;
if(yn=='y'||yn=='Y'||yn=='n'||yn=='N')
{
f=0;
returnyn;
}
else
{
f=1;
printf("输入有误,请重新输入(y/n):
");
}
}
}
char*Link:
:
No()
{
intt=1,i;
char*no=NULL,no1[10];
while(t)
{
t=0;
cin>>no1;
no=no1;
for(i=0;no[i];i++)
{
if(no[i]<'0'||no[i]>'9')
{
t=1;
printf("货物编号只能由0-9的字符组成,请重新输入货物编号(10个字符):
");
break;
}
}
}
returnno1;
}
voidLink:
:
Fprintf()
{
FILE*fp=NULL;
fp=fopen("d:
\\file01.txt","w");
p=first->next;
while(p!
=NULL)
{
fprintf(fp,"%10s%30s%10d\n",p->data.no,p->data.name,p->data.count);
p=p->next;
}
fclose(fp);
}
voidLink:
:
Fscanf()
{
FILE*fp=NULL;
p=first;
Node*s;
fp=fopen("d:
\\file01.txt","r");
if(fp==NULL)
{
cout<<"不能打开文件!
"<exit(0);
}
while(feof(fp)==0)
{
s=newNode;
fscanf(fp,"%s%s%d\n",s->data.no,s->data.name,&s->data.count);
if(s->data.count>0)
{
p->next=s;
p=s;
}
}
p->next=NULL;
fclose(fp);
}