标题:弄了段程序,有些问题,求大神帮忙,指导!!!
只看楼主
佐封
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-12-11
结帖率:50%
已结贴  问题点数:18 回复次数:8 
弄了段程序,有些问题,求大神帮忙,指导!!!
程序整体没有问题,可是在录入信息后,输出和查询都无数据显示,看了半天没找出问题,求大神帮忙!!!代码如下:



/*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;
}

搜索更多相关主题的帖子: 产品 仓库 负责人 规格 
2013-01-07 20:17
血雨萧瑟
Rank: 5Rank: 5
来 自:福州大学
等 级:职业侠客
帖 子:155
专家分:320
注 册:2012-11-19
得分:5 
真心晕菜了。

新手初学,可以拍砖。
游戏不是猛虎,网络在怎么发展网游都不可能消失只会越来越像一个世界。
2013-01-07 20:24
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:5 
最近临近交大作业 代码越来越长了

自己写的 自己都改不出来 我们更改不出来了。。
2013-01-07 20:26
麦香
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:65
专家分:163
注 册:2011-10-18
得分:5 
最近各种课程设计啊

你们要进窄门,因为引向灭亡的门是宽的,路是大的,进去的人也多。
2013-01-07 20:30
麦香
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:65
专家分:163
注 册:2011-10-18
得分:0 
楼主莫着急,一步一步来.相信你会成功的

你们要进窄门,因为引向灭亡的门是宽的,路是大的,进去的人也多。
2013-01-07 20:36
血雨萧瑟
Rank: 5Rank: 5
来 自:福州大学
等 级:职业侠客
帖 子:155
专家分:320
注 册:2012-11-19
得分:0 
刚试运行了一下有好几处报错的,不知是不是编译器的问题

新手初学,可以拍砖。
游戏不是猛虎,网络在怎么发展网游都不可能消失只会越来越像一个世界。
2013-01-07 20:38
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
得分:5 
main()
{
    int i=0;
    CR *head;
    head=malloc(sizeof(CR));
这里貌似有问题啊

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2013-01-07 20:41
血雨萧瑟
Rank: 5Rank: 5
来 自:福州大学
等 级:职业侠客
帖 子:155
专家分:320
注 册:2012-11-19
得分:0 

新手初学,可以拍砖。
游戏不是猛虎,网络在怎么发展网游都不可能消失只会越来越像一个世界。
2013-01-07 20:47
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
得分:0 
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;
这里也有问题啊,你的头结点没用啊,而且申请的空间也没转换
n=atoi(q->count);这里应该是n4

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2013-01-07 21:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-395662-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025891 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved