⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 仓库管理系统.cpp

📁 1) 问题描述:建立一个仓库管理程序
💻 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 + -