当前位置:文档之家› c语言仓库信息管理

c语言仓库信息管理

c语言 课设之仓库管理/*

问题描述:

已知一工厂有5个仓库(仓库编号、仓库名称、负责人),用于保存公司生产的10个产品(产品编号、产品名称、产品规格),任何一种产品可以保存在该5个仓库中,编写一程序完成以下功能:

1)产品入库:从键盘输入仓库编号、产品编号,入库日期,入库数量。需要判断仓库编号是否存在、产品编号是否存在、入库日期格式是否合法(格式为:YYYY-MM-DD,如2009-01-02),入库数量是否大于0,入库日期格式是否合法(格式为:YYYY-MM-DD,如2009-01-02))

2)产品出库:从键盘输入仓库编号、产品编号、出库日期,出库数量,需要判断仓库编号是否存在、产品编号是否存在、入库日期格式是否合法(格式为:YYYY-MM-DD,如2009-01-02),入库数量是否大于0,是否小于当前该仓库的库存量,出库日期格式是否合法(格式为:YYYY-MM-DD,如2009-01-02))出入库时间必须通过调用系统时间获得。

3)查询指定仓库编号的入库记录

4)查询指定产品编号的入库记录

5)查询指定仓库编号的出库记录

6)查询指定产品编号的出库记录

7)所有数据符合实际应用要求




提示:

?定义一个日期结构体保存日期,具体信息为:年、月、日

?判断入库日期和出库日期的格式是否合法时,需要判断长度是否为10,第5位和第8位是否为’-’,字符,将1-4位表示的年份,6-7位表示的月份,9-10位表示的日期分别转换成整数。判断是否满足构成日期的条件闰年月份只能是1-12之间的数,如果是闰年,二月可以是29天否则不能大于28,1,3,5,7,8,10,12月可以是31天,其余只能小于等于30(建议写成函数)。

?定义一个结构体数组,保存5个仓库信息,具体为:仓库编号、仓库名称、负责人

?定义一个结构体数组,保存10个产品信息,具体为:产品编号、产品名称、产品规格。

?定义一个产品出库(入库)链表,保存产品的出库(入库)信息。具体为:仓库编号、产品编号,入库日期,入库数量,操作类型(为1 表示入库,为-1表示出库)

?产品入库时,需要查询仓库数组和产品数组,如果产品编号和仓库编号存在,则插入产品出库(入库)链表

?产品出库时,需要查询产品出库(入库)链表,查询产品编号、仓库编号的入库记录得到入库的数量(类型为1),查询产品编号、仓库编号的出库记录得到出库的数量(类型为-1),计算得到该产品在该仓库的库存量,如果出库数量小于库存量,插入产品出库(入库)链表,类型为-1。*/

#include

#include

#include

#include

#include

//#include


char filename[20]={"c:\\仓库物流信息.txt"};

//仓库信息结构体

typedef struct stoinfo

{

char stoNo[4];

char stoname[20];

char stopers[20];

}STORAGE;

//商品信息结构体

typedef struct gooinfo

{char gooNo[4];

char gooname[20];

char googuige[20];

}GOODS;

//库记录结构体

typedef struct kuinfo

{ char kustoNo[4];

char kugooNo[4];

char kudatinfo[10];

int kustan;

int kind;

struct kuinfo *next;

}KUINFO;




STORAGE stoINFO[5]={{"1","甲","贾一"},{"2","乙","贾二"},{"3","丙","贾三"},{"4","丁","贾四"},{"5"," 无","贾五"}};

GOODS gooINFO[10]={{"10","一","大"},{"11","二","大"},{"12","三","大"},{"13","四","大"},{"14","五","大"},

{"15","六","大"},{"16","七","大"},{"17","八","大"},{"18","九","大"},{"19","十","大"}};

char date[10],knock[4]={"0"};

void baocun(KUINFO *head);//保存出入库记录到文件

int check(char date[]);//判断日期是否符合要求

void c1(KUINFO *head);

void c2();

void c3();

void c4();

void c5();

void c6();

struct kuinfo *head;

int main()

{

int x;char n;

printf("\n\n\n\n\n\n\n\t\t=================================================\n\n");

printf("\t\t\t 欢迎使用仓库管理系统\n\n");getchar();

printf("\t\t\t是否进入仓库管理系统(Y-N).\n");

printf("\t\t\t输入操作代码.\n\t\t\t(仅输入n或N时退出):");

scanf("%c",&n);

printf("\t\t==================================================");

if(n=='n'||n=='N')

{printf("\n\n \t\t\t欢迎下次使用");return 0;}

printf("\n\t\t\t\t 质询方式:12345678\n");

printf("\t\t\t\t\t\t作者:伤心的石头");

getchar();

head=NULL;

do{system("cls");

printf("\n\n\n\t******************欢迎使用仓库管理系统************************ \n");

printf("\t\t* * * * * * * * * * *\n");

printf("\t\t1)\t产品入库:\n");

printf("\t\t2)\t产品出库:\n");

printf("\t\t3)\t查询指定仓库编号的入库记录:\n");

printf("\t\t4)\t查询指定产品编号的入库记录:\n");

printf("\t\t5)\t查询指定仓库编号的出库记录:\n");

printf("\t\t6)\t查询指定产品编号的出库记录:\n");

printf("\t\t0)\t退出\n");

printf("\t************************************************************** \n");

printf("\t\t\t\t说明:输入0终止当前操作返回菜单界面\n");

while(1)

{printf("输入合法操作代码<0-6>:");

rewind(stdin);

scanf("%d",&x);

if(x==0||x==1||x==2||x==3||x==4||x==5||x==6)

break;

}

switch(x)

{

case(1):

c1(head); break;

case(2):

c2(); break;

case 3:

c3(); break;

case 4:

c4(); break;

case 5:

c5(); break;

case 6:

c6(); break;

case 0:

break;

}

}while(x);

printf("操作完成");

return 0;

}

////////////////////////////////////////////////////////////////////////////////////1111

vo

id c1(KUINFO *head)

{

int i=0,j=0,k,r=0 ;char bo[20],co[20],d,date1[5],date2[5];KUINFO *p1,*q1;

q1=p1=(KUINFO *)malloc(sizeof(KUINFO));

while(1)

{printf("第%d次入库输入\n",r+1);

while(1)

{ j=0;

printf("输入仓库编号(1~5)");

rewind(stdin);

scanf("%s",bo);

if(strcmp(knock,bo)==0) return;

for(i=0;i<5;i++)

{

if(strcmp(stoINFO[i].stoNo,bo)==0) break;

if(i==4&&strcmp(stoINFO[4].stoNo,bo)!=0)

{printf("\n输入信息不合法"); j=1;break;}

}

if(j==0)

break;

}

while(1)

{ j=0;

printf("输入产品编号(10~19):");

rewind(stdin);

scanf("%s",co);

if(strcmp(knock,co)==0) return;

for(i=0;i<10;i++)

{

if(strcmp(gooINFO[i].gooNo,co)==0) break;

if(i==9&&strcmp(gooINFO[9].gooNo,co)!=0)

{printf("\n输入信息不合法"); j=1;break;}

}

if(j==0)

break;

}

while(1)

{ time_t t=time(0);

char tmp[64];int p;

strftime(tmp,sizeof(tmp),"%x %X %j %z",localtime(&t));

puts(tmp);

printf("输入合法入库时间(YYYY-MM-DD):");

rewind(stdin);

scanf("%s",date);

if(strcmp(date,knock)==0) return;

date1[0]='2';date1[1]='0';date1[2]=tmp[6];date1[3]=tmp[7];date1[4]='\0';

for(i=0;i<4;i++) date2[i]=date[i];date2[4]='\0';

if(p=check(date)&&strcmp(date1,date2)==0)

break;

}

while (1)

{printf("输入产品数量:");

scanf("%d",&k);

if(k==0) return;

if(k<0) printf("\n输入数据不合法");

else break;

}

r++;

/*将入库记录放在入库对应的记录链表中 定义两个指针 把输入四个数据赋值给链表kuinfo*/

strcpy(p1->kustoNo,bo);

strcpy(p1->kugooNo,co);

strcpy(p1->kudatinfo,date);

p1->kustan=k;

p1->kind=1;

//if(r==1)

head=p1;

//else q1->next=p1;

q1=p1;

p1=(KUINFO *)malloc(sizeof(KUINFO));

q1->next=NULL;

baocun(head);

printf("产品是否继续入库(Y-N)");

rewind(stdin);

scanf("%c",&d);

if(d=='n'||d=='N')

break;

}

printf("结束" );

system("pause");

}

/////////////////////////////////调用函数 判断月天数

int check(char date[])

{

int year,month,day,i,j;

if((date[5]-'0')>1)

return 0;

if((date[5]-'0')==1&&(date[6]-'0')>2)

return 0;

if((date[4]!='-')||(date[7]!='-')||strlen(date)!=10)

return 0;

for(i=0,year=0;i<4;i++) //字符串转化成整型

year=year*10+(date[i]-'0');

for(i=5,month=0;i<7;i++)

month=month*10+(date[i]-'0');

for(i=8,day=0;i<10;i++)

day=day*10+(date[i]-'0');

if(month<=0||month>12)

return 0;

else

{

j=(year%4==0&&year%100!=0||year%400==0); //闰年条件:等于1为闰年

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

{

if(day<0||day>31)

return 0;

else

return 1;

}

else if(month==4||month==6||month==9||month==11)

{

if(day<0||day>30)

return 0;

else

return 1;

}

else if(j==1&&month==2)

{

if(day<0||day>29)

return 0;

el

se

return 1;

}

else

{

if(day<0||day>28)

return 0;

else

return 1;

}

}

}







/* 通过链表 把记录放入到文件中 可调用函数*/

void baocun(KUINFO *head)

{FILE *fp;KUINFO *p1;

fp=fopen(filename,"a");

rewind(stdin);

p1=head;

while(p1!=NULL)

{p1->kind=1;

fprintf(fp," %s %s %s %d %d \n",p1->kustoNo,p1->kugooNo,p1->kudatinfo,p1->kustan,p1->kind);

p1=p1->next;

}

fclose(fp);

printf("\n记录已保存");

}

//*******************************************dsfszffsd************************************************2222

void c2()

{FILE *fp;







int i=0,j=0,k,m,d,sum=0,r=0;char bo[20],co[20],d1;

char b[20],c[20],dat[10];







rewind(stdin);




while(1)

{printf("第%d次出库输入\n",r+1);

//1将入库记录从文件读到一个结构体中 拿结构体来判断

//2 直接用指针 来比较

while(1)

{ j=0;fp=fopen(filename,"r");




printf("输入仓库编号(1~5):");

rewind(stdin);

scanf("%s",bo);

if(strcmp(knock,bo)==0) return;

while(!feof(fp))

{

fscanf(fp,"%s%s%s%d%d",b,c,date,&d,&m);

if(strcmp(b,bo)==0) break;

if(feof(fp))//如果文件读完后还未跳出

{j=1; printf("输入数据不合法");break;}

}

rewind(fp);//把指针指向文件头

if(j==0)

break;

}

while(1)

{ j=0;

printf("输入产品编号(如10~19):");

rewind(stdin);

scanf("%s",co);

if(strcmp(knock,co)==0) return;

while(!feof(fp))

{fscanf(fp,"%s%s%s%d%d",b,c,date,&d,&m);

if(strcmp(c,co)==0&&strcmp(b,bo)==0) break;

if(feof(fp))

{j=1; printf("输入数据不合法");break;}

}

rewind(fp);//把指针指向文件头

if(j==0)

break;

}

while(1)

{

time_t t=time(0);

char tmp[64];int p;

strftime(tmp,sizeof(tmp),"%x %X %j %z",localtime(&t));

date[5]=tmp[0];date[6]=tmp[1];date[8]=tmp[3];date[9]=tmp[4];

date[0]='2';date[1]='0';date[2]=tmp[6];date[3]=tmp[7];date[4]='-';date[7]='-';

printf("系统时间是:");puts(date);

if(p=check(date))

break;

}

while (1)

{ rewind(fp);

printf("输入产品规格(数量):");

scanf("%d",&k);sum=0;

if(k==0) return;

while(!feof(fp))

{

fscanf(fp,"%s%s%s%d%d",b,c,dat,&d,&m);

if(strcmp(c,co)==0&&strcmp(b,bo)==0)

{sum+=d*m;

d=0;m=0;}

}

rewind(fp);//把指针指向文件头

if(k>sum||k<0) printf("\n输入数据不合法 \n该库该产品库存量总量%d",sum);

else { printf("现在该库该产品库存量总量%d\n",sum-k); break;}

}

r++;

fclose(fp);

//*将入库记录放在入库对应的记录链表中 定义两个指针 把输入四个数据赋值给链表iningfo

fp=fopen(filename,"a");

m=-1;

fprintf(fp," %s %s %s %d %d \n",bo,co,date,k,m);

fclose(fp);

rewind(stdin);

printf("产品是否继续入库(Y-N)");

scanf("%c",&d1);

if(d1=='n'||d1=='N')

break;

}

printf("结束" );

system("pause

");

}

//////////////////////////////////////////////////////////////////33

void c3()

{ FILE *fp1;

char a[20],b[20],bo[20],j=0;

int c,d,m;



while(1)

{ j=0;fp1=fopen(filename,"r");




printf("输入查询仓库编号(1~5):");

rewind(stdin);

scanf("%s",bo);

if(strcmp(knock,bo)==0) return;

while(!feof(fp1))

{

fscanf(fp1,"%s%s%s%d%d",b,a,date,&d,&m);

if(strcmp(b,bo)==0) break;

if(feof(fp1))//如果文件读完后还未跳出

{j=1; printf("输入数据不合法");break;}

}

rewind(fp1);//把指针指向文件头

if(j==0)

break;

}






fscanf(fp1,"%s%s%s%d%d",a,b,date,&c,&d);

while(!feof(fp1))

{

if(d==1&&strcmp(a,bo)==0)

printf("\n仓库编号%s 产品编号 %s 入库日期 %s 入库数量%d",a,b,date,c);

fscanf(fp1,"%s%s%s%d%d",a,b,date,&c,&d);

}

fclose(fp1);

printf("\n操作结束");

system("pause");

}







//////////////////////////////////////////////////////////////////44444

void c4()

{ FILE *fp1;

char a[20],b[20],bo[20],j=0;

int c,d,m;



while(1)

{ j=0;fp1=fopen(filename,"r");




printf("输入查询产品编号(10~19):");

rewind(stdin);

scanf("%s",bo);

if(strcmp(knock,bo)==0) return;

while(!feof(fp1))

{

fscanf(fp1,"%s%s%s%d%d",b,a,date,&d,&m);

if(strcmp(a,bo)==0) break;

if(feof(fp1))//如果文件读完后还未跳出

{j=1; printf("输入数据不合法");break;}

}

rewind(fp1);//把指针指向文件头

if(j==0)

break;

}

fscanf(fp1,"%s%s%s%d%d",a,b,date,&c,&d);

while(!feof(fp1))

{

if(d==1&&strcmp(b,bo)==0)

printf("仓库编号%s 产品编号 %s 入库日期 %s 入库数量%d\n",a,b,date,c);

fscanf(fp1,"%s%s%s%d%d",a,b,date,&c,&d);

}

fclose(fp1);

printf("\n操作结束");

system("pause");

}

/////////////////////////////////////////////////////////////////////////////5555

void c5()

{ FILE *fp1;

char a[20],b[20],bo[20],j=0;

int c,d,m;






while(1)

{ j=0;fp1=fopen(filename,"r");




printf("输入查询仓库编号(1~5):");

rewind(stdin);

scanf("%s",bo);

if(strcmp(knock,bo)==0) return;

while(!feof(fp1))

{

fscanf(fp1,"%s%s%s%d%d",b,a,date,&d,&m);

if(strcmp(b,bo)==0) break;

if(feof(fp1))//如果文件读完后还未跳出

{j=1; printf("输入数据不合法");break;}

}

rewind(fp1);//把指针指向文件头

rewind(stdin);

if(j==0)

break;

}

fscanf(fp1,"%s%s%s%d%d",a,b,date,&c,&d);

while(!feof(fp1))

{

if(d==-1&&strcmp(a,bo)==0)

printf("仓库编号%s 产品编号 %s 出库日期 %s 出库数量%d \n",a,b,date,c);

fscanf(fp1,"%s%s%s%d%d",a,b,date,&c,&d);

}

fclose(fp1);

printf("\n操作结束");

system("pause");

}

///////////////////////////////////////////////////66666

void c6()

{ FILE *fp1;

char a[20],b[20],bo[20];

int c,d,j=0,m;







fp1=fopen(filename,"r");

rew

ind(stdin);

while(1)

{ j=0;fp1=fopen(filename,"r");




printf("输入查询产品编号(11~19):");

rewind(stdin);

scanf("%s",bo);

if(strcmp(knock,bo)==0) return;

while(!feof(fp1))

{

fscanf(fp1,"%s%s%s%d%d",b,a,date,&d,&m);

if(strcmp(a,bo)==0) break;

if(feof(fp1))//如果文件读完后还未跳出

{j=1; printf("输入数据不合法");break;}

}

rewind(fp1);//把指针指向文件头

if(j==0)

break;

}

fscanf(fp1,"%s%s%s%d%d",a,b,date,&c,&d);

while(!feof(fp1))

{




if(d==-1&&strcmp(b,bo)==0)

printf("仓库编号%s 产品编号 %s 出库日期 %s 出库数量%d\n",a,b,date,c);

fscanf(fp1,"%s%s%s%d%d",a,b,date,&c,&d);

}

fclose(fp1);

printf("\n操作结束");

system("pause");

}


相关主题
文本预览
相关文档 最新文档