文档库 最新最全的文档下载
当前位置:文档库 › 仓库管理

仓库管理

#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"ctype.h"
#include"cstdlib"
#define HEADER "|--------|--------|------------|-------|-----|\n"


struct date/*结构数组放日期信息*/
{
int year;
int month;
int day;
}D[100];



struct cangku/*结构数组放仓库信息*/
{
char num[10];
char name[15];
char manager[15];
}ck[5];


struct chanpin/*结构数组放产品信息*/
{
char num[10];
char name[15];
char standard[10];
}cp[10];


typedef struct churu/*定义产品出入链表结构*/
{
char cknum[10];
char cpnum[10];
char count[10];
char date[15];
char kind[2];
struct churu *next;
}CR;


/*******函数原型*******/
void printheader(); /*输出表头信息*/
int date_legal(char *date); /*定义一个函数,判断日期是否合法*/
void input(CR *head); /*产品入库*/
void output(CR *head); /*产品出库*/
void searchon_cknum_input(CR *head); /*查询指定仓库编号的入库记录*/
void searchon_cpnum_input(CR *head); /*查询指定产品编号的入库记录*/
void searchon_cknum_output(CR *head); /*查询指定仓库编号的出库记录*/
void searchon_cpnum_output(CR *head); /*查询指定产品编号的出库记录*/
int menu_show(); /*主菜单函数*/
int menu_select(int sel,CR *head); /*功能函数*/


/*******主函数*******/
main()
{
int i=0;
CR *head;
head=malloc(sizeof(CR));
head->next=NULL;
printf("请输入产品信息!\n");
while(i<10)
{
printf("---------%d----------\n",i+1);
printf("编号: ");
scanf("%s",cp[i].num);
printf("名称 ");
scanf("%s",cp[i].name);
printf("规格 ");
scanf("%s",cp[i].standard);
i++;
if(i%5==0)
{
printf("按任意键继续......");
getch();
system("cls"); /****清屏*****/
}

}

system("cls");
printf("请输入仓库信息!\n");
i=0;
while(i<5)
{
printf("---------%d----------\n",i+1);
printf("编号: ");
scanf("%s",ck[i].num);
printf("名称: ");
scanf("%s",ck[i].name);
printf("负责人: ");
scanf("%s",ck[i].manager);
i++;

}
system("cls");
while(1)
menu_select(menu_show(),head);
}

/*******功能函数*******/
int menu_select(int sel,CR *head)
{
switch(sel)
{
case 1: input(head); break; /*产品入库*/
case 2: output(head); break; /*产品出库*/
case 3: searchon_cknum_input(head); break; /*查询指定仓库编号的入库记录*/
case 4: searchon_cpnum_input(head); break; /*查询指定产品编号的入库记录*/
case 5: searchon_cknum_output(head); break; /*查询指定仓库编号的出库记录*/
case 6: searchon_cpnum_output(head); break; /*查询指定产品编号的出库记录*/
case 7: exit(0);
}
return 1;
}


/*******主菜单函数*******

/
int menu_show()
{
char s[20];
int c;
printf("**************仓库管理系统****************\n");
printf(" 1. 产品入库\n");
printf(" 2. 产品出库\n");
printf(" 3. 查询指定仓库编号的入库记录\n");
printf(" 4. 查询指定产品编号的入库记录\n");
printf(" 5. 查询指定仓库编号的出库记录\n");
printf(" 6. 查询指定产品编号的出库记录\n");
printf(" 7. 退出\n");
printf("******************************************\n\n");
do{
printf("\n 请选择相关操作[1-7]:");
scanf("%s",s); /*输入选择项*/
c=atoi(s); /*将输入的字符串转换为整形数*/
}while(c<0||c>7);
return c; /*返回选择项*/

}


/*******输出表头信息*******/
void printheader()
{
printf("|仓库编号|产品编号| 日 期 |数 量|类 型|\n");

}


/*******产品入库*******/
void input(CR *head)
{
int i=0,a=0,b=0,c=0,m=1; char s[10];
CR *p,*temp;
p=head;
while(p->next!=NULL)
p=p->next;
system("cls"); /****清屏*****/
temp=malloc(sizeof(CR));
temp->next=NULL;
printf("请输入入库产品信息!\n");

printf("仓库编号: ");
scanf("%s",temp->cknum);
do
{
i=0; /***判断仓库编号是否存在***/
while(i<5)
{
if(strcmp(ck[i].num,temp->cknum)==0)
b=1; i++;
}
if(b==0)
{
printf("无此仓库编号!\n 请重输入\n ");
printf(" 仓库编号: ");
scanf("%s",temp->cknum);
}
}while(strcmp(ck[i].num,temp->cknum)!=0&&b==0);

printf("产品编号: ");
scanf("%s",temp->cpnum);
do
{
i=0;
while(i<10) /***判断产品编号是否存在***/
{
if(strcmp(cp[i].num,temp->cpnum)==0)
c=1; i++;
}
if(c==0)
{
printf("无此产品编号!\n请重输入\n ");
printf("产品编号: ");
scanf("%s",temp->cpnum);
}
}while(strcmp(cp[i].num,temp->cpnum)!=0&&c==0);


printf("入库日期: ");
scanf("%s",temp->date);

if(date_legal(temp->date)==0) /***判断日期格式是否正确***/
{
do{

printf("\n 请重输入\n ");
printf("入库日期: ");
scanf("%s",temp->date);
}while(date_legal(temp->date)==0);
}
do
{
if(m<=0)
printf("入库数量应大于0,请重输\n");
printf("入库数量: ");
scanf("%s",temp->count);
m=atoi(temp->count);
}while(m<=0);
printf("操作类型: ");
scanf("%s",temp->kind);


if(b&&c)
{
printf("入库成功,并保存!\n");
p->next=temp;
}
else

free(temp); /***释放存储区间***/

printf("\n\n\n\n\n");
printf("按任意键继续......");
getch();
system("cls"); /****清屏*****/
}




/**

*****产品出库*******/
void output(CR *head)
{
int a=0,b=0,c=0,i=0,sum1=0,sum2=0,m1=0,m2=0,n1=0,n2=0,m3=0,n3=0,n4=1; char s[10];
CR *p,*q,*m,*n;
p=head; m=head; n=head;
while(p->next!=NULL)
p=p->next ;
system("cls"); /****清屏*****/
q=malloc(sizeof(CR));
q->next=NULL;
printf("请输出库产品信息:\n");
printf("仓库编号: ");
scanf("%s",q->cknum);
do
{
i=0; /***判断仓库编号是否存在***/
while(i<5)
{
if(strcmp(ck[i].num,q->cknum)==0)
m3=1; i++;
}
if(m3==0)
{
printf("无此仓库编号!\n 请重输入\n ");
printf(" 仓库编号: ");
scanf("%s",q->cknum);
}
}while(strcmp(ck[i].num,q->cknum)!=0&&m3==0);

printf("产品编号: ");
scanf("%s",q->cpnum);
do
{
i=0;
while(i<10) /***判断产品编号是否存在***/
{
if(strcmp(cp[i].num,q->cpnum)==0)
n3=1; i++;
}
if(n3==0)
{
printf("无此产品编号!\n请重输入\n ");
printf("产品编号: ");
scanf("%s",q->cpnum);
}
}while(strcmp(cp[i].num,q->cpnum)!=0&&n3==0);


printf("出库日期: ");
scanf("%s",q->date);
if(date_legal(q->date)==0) /***判断日期格式是否正确***/
{
do{

printf("\n 请重输入\n ");
printf("出库日期: ");
scanf("%s",q->date);
}while(date_legal(q->date)==0);
}
do
{if(n4<=0)
printf("入库数量应大于0,请重输\n");
printf("出库数量: ");
scanf("%s",q->count);
n=atoi(q->count);
}while(n4<=0);
printf("操作类型: ");
scanf("%s",q->kind);

while(m!=NULL)
{
m1=atoi(m->cknum);m2=atoi(q->cknum);
n1=atoi(m->cpnum);n2=atoi(q->cpnum);
if(m1==m2&&n1==n2) /***判断编号是否存在***/
{
c=atoi(m->count);
a=atoi(m->kind);
if(a==1) sum1=sum1+c;
if(a==-1) sum2=sum2+c;
i++;
}
m=m->next;
}
if(i==0)
printf("无需出库产品的相应记录!\n");
b=atoi(q->count);
if(b<=(sum1-sum2))
{
printf("产品出库成功,并记录!\n");
p->next=q;
}
else
printf("对不起!该产品在%s仓库中库存不够。\n\n",q->cknum);

printf("\n\n\n\n\n");
printf("按任意键继续......");
getch();
system("cls"); /****清屏*****/
}



/*******查询指定仓库编号的入库记录*******/
void searchon_cknum_input(CR *head)
{
CR *p;
char a[5];
int i=0,c=0;
p=head->next;
system("cls"); /****清屏*****/
printf("请输入仓库编号: ");
scanf("%s",a);
system("cls"); /****清屏*****/
printheader(); /***打印表头***/
while(p!=NULL)
{
c=atoi(p->kind);
if(c==1&&strcmp(a,p->cknum)==0)
{
printf(HEADER);
printf(" %-10s%-6s%-14s%-8s%-5s\n",p->cknum,p->cpnum,p->dat

e,p->count,p->kind);
i++;
}
p=p->next;
if(i%3==0)
{
printf("按任意键继续......");
getch();
system("cls"); /****清屏*****/
}
}
if(i==0)
printf("您要查找的仓库无入库记录!\n\n");
printf("\n\n\n\n\n");
printf("按任意键继续......");
getch();
system("cls"); /****清屏*****/
}



/*******查询指定产品编号的入库记录*******/

void searchon_cpnum_input(CR *head)
{
CR *p;
char a[5];
int i=0,c=0;
p=head->next;
system("cls"); /****清屏*****/
printf("请输入产品编号: ");
scanf("%s",a);
system("cls"); /****清屏*****/
printheader(); /***打印表头***/
while(p!=NULL)
{
c=atoi(p->kind);
if(c==1&&strcmp(a,p->cpnum)==0)
{
printf(HEADER);
printf(" %-10s%-6s%-14s%-8s%-5s\n",p->cknum,p->cpnum,p->date,p->count,p->kind);
i++;
}
p=p->next;
if(i%10==0)
{
printf("按任意键继续......");
getch();
system("cls"); /****清屏*****/
}
}
if(i==0)
printf("您要查找的产品无入库记录!\n\n");
printf("\n\n\n\n\n");
printf("按任意键继续......");
getch();
system("cls"); /****清屏*****/
}



/*******查询指定仓库编号的出库记录*******/

void searchon_cknum_output(CR *head)
{
CR *p;/*定义指针*/
char a[5];
int i=0,c=0;
p=head->next;
system("cls"); /****清屏*****/
printf("请输入仓库编号: ");
scanf("%s",a);
system("cls"); /****清屏*****/
printheader(); /***打印表头***/
while(p!=NULL)
{
c=atoi(p->kind);
if(c==-1&&strcmp(a,p->cknum)==0)
{
printf(HEADER);
printf(" %-10s%-6s%-14s%-8s%-5s\n",p->cknum,p->cpnum,p->date,p->count,p->kind);
i++;
}
p=p->next;
if(i%10==0)
{
printf("按任意键继续......");
getch();
system("cls"); /****清屏*****/
}
}
if(i==0)
printf("您要查找的仓库无出库记录!\n\n\n");
printf("\n\n\n\n\n");
printf("按任意键继续......");
getch();
system("cls"); /****清屏*****/
}



/*******查询指定产品编号的出库记录*******/

void searchon_cpnum_output(CR *head)
{
CR *p;
char a[5];
int i=0,c=0;
p=head->next;
system("cls"); /****清屏*****/
printf("请输入产品编号: ");
scanf("%s",a);
system("cls"); /****清屏*****/
printheader(); /***打印表头***/
while(p!=NULL)
{
c=atoi(p->kind);
if(c==-1&&strcmp(a,p->cpnum)==0)
{
printf(HEADER);
printf(" %-10s%-6s%-14s%-8s%-5s\n",p->cknum,p->cpnum,p->date,p->count,p->kind);
i++;
}
p=p->next;/*移动结点*/
if(i%10==0)
{
printf("按任意键继续......");
getch();
system("cls"); /****清屏*****/
}
}
if(i==0)
printf("您要查找的产品无出库记录!\n");
printf("\n\n\n\n\n");
printf("按任意键继续......");
getch();
system("cls");

/****清屏*****/
}



/*定义一个函数,判断日期是否合法*/
int date_legal(char *date)
{
static int i=0;
int leap;
int year,month,day; /* 2009-09-10*/
int flag=1;
if(strlen(date)==10)
{
if(date[4]=='-'&&date[7]=='-')
{
year = (date[0]-48)*1000+(date[1]-48)*100+(date[2]-48)*10+(date[3]-48)*1;/*转化为整数*/
month = (date[5]-48)*10+(date[6]-48)*1;
day = (date[8]-48)*10+(date[9]-48)*1;
D[i].year=year;
D[i].month=month;
D[i].day=day;
i++;

if(month==2)
{
leap=(year%4==0&&year%100!=0||year%400==0);/*判断是否为闰年*/
if(leap==1&&day>29){
printf("该年是闰年,二月是29天,输入错误!\n");
flag=0;
}
if(leap==0&&day>28){
printf("平年二月是28天,输入错误!\n");
flag=0;
}
}
if(month==4||month==6||month==9||month==11)
{
if(day>30)
{
printf("该月是30天,输入错误!\n");
flag=0;
}

}
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)

{
if(day>31)
{
printf("该月是31天,输入错误!\n");
flag=0;
}
}
if(month>12||month<1)/*月份的判断*/
{
printf("错啦!月份1~12!\n");
flag=0;
}
}
else
{
printf("日期输入格式错误(格式为YYYY-MM-DD)!\n");
flag=0;
}
}
else
{
printf("日期输入长度错误!\n");
flag=0;
}
if(i>=2)
{
if(D[i-1].year==D[i-2].year)
{
if(D[i-1].month==D[i-2].month )
{
if(D[i-1].day{printf("日期晚于上一次输入时日期!");flag=0;}
}
else if(D[i-1].month{printf("日期晚于上一次输入时日期!");flag=0;}
}
else if(D[i-1].year{printf("日期晚于上一次输入时日期!");flag=0;}
}


return flag;
}


相关文档