弄了段程序,有些问题,求大神帮忙,指导!!!
程序整体没有问题,可是在录入信息后,输出和查询都无数据显示,看了半天没找出问题,求大神帮忙!!!代码如下:/*10、仓库管理
问题描述:
已知一工厂有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)查询指定产品编号的出库记录
提示:
1定义一个日期结构体保存日期,具体信息为:年、月、日
2判断入库日期和出库日期的格式是否合法时,需要判断长度是否为10,第5位和第8位是否为’-’,字符,将1-4位表示的年份,6-7位表示的月份,9-10位表示的日期分别转换成整数。判断是否满足构成日期的条件闰年月份只能是1-12之间的数,如果是闰年,二月可以是29天否则不能大于28,1,3,5,7,8,10,12月可以是31天,其余只能小于等于30(建议写成函数)。
3定义一个结构体数组,保存5个仓库信息,具体为:仓库编号、仓库名称、负责人
4定义一个结构体数组,保存10个产品信息,具体为:产品编号、产品名称、产品规格。
5定义一个产品出库(入库)链表,保存产品的出库(入库)信息。具体为:仓库编号、产品编号,入库日期,入库数量,操作类型(为1 表示入库,为-1表示出库)
6产品入库时,需要查询仓库数组和产品数组,如果产品编号和仓库编号存在,则插入产品出库(入库)链表
7产品出库时,需要查询产品出库(入库)链表,查询产品编号、仓库编号的入库记录得到入库的数量(类型为1),查询产品编号、仓库编号的出库记录得到出库的数量(类型为-1),计算得到该产品在该仓库的库存量,如果出库数量小于库存量,插入产品出库(入库)链表,类型为-1。*/
#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("-------------------\n");
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("-------------------\n");
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\n");
printf("\n\n");
printf("\n\n");
printf("\t ****************************仓库管理系统*********************\n");
printf("\t ******* 1. 产品入库 *******\n");
printf("\t ******* 2. 产品出库 *******\n");
printf("\t ******* 3. 查询指定仓库编号的入库记录 *******\n");
printf("\t ******* 4. 查询指定产品编号的入库记录 *******\n");
printf("\t ******* 5. 查询指定仓库编号的出库记录 *******\n");
printf("\t ******* 6. 查询指定产品编号的出库记录 *******\n");
printf("\t ******* 7. 退出 *******\n");
printf("\t *************************************************************\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->date,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<D[i-2].day)
{printf("日期晚于上一次输入时日期!");flag=0;}
}
else if(D[i-1].month<D[i-2].month)
{printf("日期晚于上一次输入时日期!");flag=0;}
}
else if(D[i-1].year<D[i-2].year)
{printf("日期晚于上一次输入时日期!");flag=0;}
}
return flag;
}