📄 仓库管理系统.cpp
字号:
#include<math.h>
#include<stdio.h>
#include<malloc.h>
#define NULL 0
#define LEN sizeof(dlnode)
typedef struct dlnode /* 定义双向链表结构体 */
{int number; /* 货物编号 */
char name[10]; /* 货物名称 */
int counter; /* 货物数量 */
struct dlnode *prior,*next; /* 定义两指针,分别指向其前驱和后继 */
}dlnode;
int n,i; /*定意全局变量*/
dlnode *creattable(dlnode *head,dlnode *p1,dlnode *p2) /*建立仓库货物表*/
{n=0;
p1=(dlnode*)malloc(LEN);/*开辟存储空间*/
printf("请输入货物编号、名称、数量,当输入编号为0时结束\n");
scanf("%d %s %d",&p1->number,p1->name,&p1->counter);
head=NULL;/*头指针指向0号地址*/
while(p1->number!=0)/*输入货号数字"0"来结束数据输入*/
{n=n+1;
if(n==1) /*当第一次输入时,把头指针指向结点*/
{ p1->next=NULL;
head=p1;
}
else
{
if (p1->number>p2->number)/*当新货号大于头结点*/
{
p1->next=p2; /*把新结点插在头结点前面*/
p2->prior=p1;
head=p1;
}
else
{ if (n==2) /*如果是第二个输入,且小于前一个输入*/
{p1->next=p2->next;/*新结点插入头结点后面*/
p2->next=p1;
p1->prior=p2;}
else{
p1->prior=p2;
p1->next=p2->next;
while(p2->next!=NULL&&p1->number<p2->next->number)
{p2=p2->next;
p1->prior=p2;
p1->next=p2->next;
};
p1->prior->next=p1;
};
};
};
p2=head; /*把指针P2指向头结点*/
p1=(dlnode*)malloc(LEN);
printf("请输入货物编号、名称、数量,当输入编号为0时结束,\n");
scanf("%d %s %d",&p1->number,p1->name,&p1->counter);/*输入数据*/
};
return(head);/*返回头接点指针*/
};
void printf(dlnode *p2)/*打印仓库存货表*/
{printf(" 仓库存货表 \n");
printf("编号 名称 数量\n");
for(i=0;i<n;++i) /*寻找全部结点打印*/
{printf("%d %s %d\n",p2->number,p2->name,p2->counter);
p2=p2->next;
};
printf("\n");
};
dlnode *input(dlnode *head,dlnode *p1,dlnode *p2) /*货物入库*/
{p1=(dlnode*)malloc(LEN); /*开辟存储空间*/
printf("输入货物的编号、名称、数量:\n");
scanf("%d %s %d",&p1->number,p1->name,&p1->counter); /*输入数据*/
if(head==NULL) /*当表为空时*/
{n=1;
p1->next=NULL; /*把结点插入头指针*/
head=p1;
}
else /*查找插入位置*/
{p2=head;
p1->prior=p2;
p1->next=p2->next;
while(p2->next!=NULL&&p1->number<p2->next->number)
{p2=p2->next;
p1->prior=p2;
p1->next=p2->next;
};
if (p2->next==NULL)
{
p1->prior->next=p1;
}
else
{ p2=head;
while (p1->number!=p2->number)
{
p2=p2->next;
};
p2->counter+=p1->counter;
};
};
return(head); /*返回头指针*/
};
dlnode *output(dlnode *head,dlnode *p1,dlnode *p2)/*货物出库*/
{p1=(dlnode*)malloc(LEN); /*开辟存储空间*/
printf("输入货物的编号、名称、数量:\n");
scanf("%d %s %d",&p1->number,p1->name,&p1->counter); /*输入需要出库的货物*/
if (head==NULL) /*货物表为空*/
printf("仓库没有这种货物的记录\n");
else
{p2=head; /*寻找需要输入的位置*/
while (p2->next!=NULL&&p1->number!=p2->number)
{ p2=p2->next;
};
p2->counter-=p1->counter;
};
return(head); /*返回头指针*/
};
void main() /*主函数*/
{dlnode *head,*p1,*p2;
int k;
head=NULL;
printf("**************************仓库管理系统**********************************\n");
loop:printf(" 建立仓库货物表(请输入1)\n");
printf(" 货物入库 (请输入2)\n");
printf(" 货物出库 (请输入3)\n");
printf(" 打印仓库存货表(请输入4)\n");
scanf("%d",&k);
switch(k)
{case 1:head=creattable(head,p1,p2);break;
case 2:head=input(head,p1,p2);break;
case 3:head=output(head,p1,p2);break;
case 4:printf(head);break;
default :printf("您的输入有误,请重新输入\n");
};
goto loop;
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -