| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 443 人关注过本帖
标题:麻烦大家帮忙看看代码哪里错了
只看楼主 加入收藏
betterus
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-1-5
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
麻烦大家帮忙看看代码哪里错了
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10
struct books
{char ISBN[20];
 char name[20];
 float price;
 int storage;
 int salesquantity;
}book[N];
struct books *p;
int build()
{int i;
 FILE *fp;
 printf("请依次输入书籍参数,参数间用一个空格隔开,书籍间用回车键隔开\nISBN-------书名-售价-库存量-销量-\n");
 for(i=0;i<N;i++)
 {scanf("%s",&book[i].ISBN);
  scanf("%s",&book[i].name);
  scanf("%f",&book[i].price);
  scanf("%d",&book[i].storage);
  scanf("%d",&book[i].salesquantity);
 }
 for(i=0;i<N;i++)
 {printf("*****%s***** *****%s***** *****%.2f***** *****%d***** *****%d\n",book[i].ISBN,book[i].name,book[i].price,book[i].storage,book[i].salesquantity);
 }
 if((fp=fopen("resource.bin","wb"))==NULL)
  {printf("This file can not be opened!\n");
   exit(1);
  }
 fwrite(p,N*sizeof(struct books),1,fp);
 fclose(fp);
 return(1);
}
int inquire()
{char key[20];
 int i,j,flag=0;
 FILE *fp;
 again:
 if((fp=fopen("resource.bin","r"))==NULL)
  {printf("This file can not be opened!\n");
   exit(1);
  }
 fread(p,N*sizeof(struct books),1,fp);
 fclose(fp);
 printf("请输入查询书籍ISBN号\n");
 scanf("%s",&key);
 for(j=0;j<N;j++);
 {if(strcmp(key,book[j].ISBN)==0)
    {flag=1;
     printf("%s %s %f %d %d\n",book[j].ISBN ,book[j].name ,book[j].price ,book[j].storage ,book[j].salesquantity );
    }
 }
 if(flag==0)
    {printf("未找到相关书籍:1 重新输入ISBN号 2 返回上一级菜单\n");
     scanf("%d",&i);
     if(i==1) goto again;
     if(i==2) return(-1);
    }
  return(1);
 }
void Bubblesort()
{int i,j,p;
 struct books temp;
 for(i=0;i<N-1;i++)
  for(j=N;j>i;j--)
  {if(book[i].salesquantity <book[j].salesquantity )
   {strcpy(temp.ISBN,book[i].ISBN);
    strcpy(book[i].ISBN,book[j].ISBN);
    strcpy(book[j].ISBN,temp.ISBN);
    strcpy(temp.name ,book[i].name );
    strcpy(book[i].name ,book[j].name );
    strcpy(book[j].name ,temp.name );
    temp.price =book[i].price ;
    book[i].price =book[j].price ;
    book[j].price =temp.price ;
    temp.salesquantity =book[i].salesquantity ;
    book[i].salesquantity =book[j].salesquantity ;
    book[j].salesquantity =temp.salesquantity ;
    temp.storage =book[i].storage ;
    book[i].storage =book[j].storage ;
    book[j].storage =temp.storage ;
   }
  }
  printf("ISBN-------------书名------价钱---销量---");
  for(p=0;p<N;p++)
      printf("%s %s %d %d\n",book[p].ISBN ,book[p].name ,book[p].price ,book[p].salesquantity );
}
int call(int (*func)())
{return((*func)());
}
int storage()
{int i,j,n;
 struct books temp;
 for(i=0;i<N-1;i++)
     for(j=N;j>i;j--)
     {if (book[i].storage>book[j].storage)
      strcpy(temp.ISBN,book[i].ISBN);
      strcpy(book[i].ISBN,book[j].ISBN);
      strcpy(book[j].ISBN,temp.ISBN);
      strcpy(temp.name ,book[i].name );
      strcpy(book[i].name ,book[j].name );
      strcpy(book[j].name ,temp.name );
      temp.price =book[i].price ;
      book[i].price =book[j].price ;
      book[j].price =temp.price ;
      temp.salesquantity =book[i].salesquantity ;
      book[i].salesquantity =book[j].salesquantity ;
      book[j].salesquantity =temp.salesquantity ;
      temp.storage =book[i].storage ;
      book[i].storage =book[j].storage ;
      book[j].storage =temp.storage ;
     }
     for(n=0;n<N;i++)
     printf("%d %d\n",book[n].price ,book[n].storage);
     return (1);
}
int price()
{int i,j,n;
 struct books temp;
 for(i=0;i<N-1;i++)
     for(j=N;j>i;j--)
     {if (book[i].price >book[j].price )
      strcpy(temp.ISBN,book[i].ISBN);
      strcpy(book[i].ISBN,book[j].ISBN);
      strcpy(book[j].ISBN,temp.ISBN);
      strcpy(temp.name ,book[i].name );
      strcpy(book[i].name ,book[j].name );
      strcpy(book[j].name ,temp.name );
      temp.price =book[i].price ;
      book[i].price =book[j].price ;
      book[j].price =temp.price ;
      temp.salesquantity =book[i].salesquantity ;
      book[i].salesquantity =book[j].salesquantity ;
      book[j].salesquantity =temp.salesquantity ;
      temp.storage =book[i].storage ;
      book[i].storage =book[j].storage ;
      book[j].storage =temp.storage ;
     }
     for(n=0;n<N;i++)
     printf("%d %d\n",book[n].price ,book[n].storage);
     return (1);
}
void purchase()
{int n,m,flag=0;
 char aim[20];
 error:
 printf("请输入购买书籍的ISBN号\n");
 scanf("%s",&aim);
 for(n=0;n<N;n++)
     if(strcmp(book[n].ISBN,aim)==0)
     {flag=1;
      if(book[n].storage <3)
        {printf("库存量不足3本,请尽快购买!\n是否购买:1 是 2 否\n");
         scanf("%d",&n);
         if(n==1)
          {book[n].storage--;
           book[n].salesquantity++;
           printf("购买成功!\n");
          }
        }
      if(book[n].storage==0)
       {printf("库存量不足!\n建议购买热销书!\n");
        Bubblesort();
       }
     }
 if(flag==0)
  {printf("未找到相关书籍,请重新输入ISBN号\n");
   goto error;
  }
}
void returngoods()
{char aim[20];
 int i,flag=0;
 input:
 printf("请输入所退书籍ISBN号\n");
 scanf("%s",&aim);
 for(i=0;i<N;i++)
 if(strcmp(aim,book[i].ISBN )==0)
 {flag=1;
  book[i].salesquantity--;
  book[i].storage++;
  printf("退货成功!欢迎购买其他书籍!\n");
 }
 if(flag==0)
   {printf("输入错误,请重新输入\n");
    goto input;
   }
}
void main()
{int i,j1,j2,m,n;
 start:
 printf("请选择登陆身份:1 管理员 2 用户 3退出系统\n");
 scanf("%d",&i);
 if(i==1)
  {manager:
   printf("请选择操作:1 录入书籍 2 销量排行 3 对书籍库存量和价格进行排序 4 返回上一级菜单 5 退出系统\n");
   scanf("%d",&j1);
   if(j1==1)
           {build();
            printf("是否返回上一级菜单:1 是 2 否\n");
            scanf("%d",&m);
            if(m==1)
                goto manager;
            else if(m==2)
                    goto end;
           }
   else if(j1==2)
           {Bubblesort();
            printf("是否返回上一级菜单:1 是 2 否\n");
            scanf("%d",&m);
            if(m==1)
                goto manager;
            if(m==2)
                goto end;
           }
   else if(j1==3)
   {sort:
    printf("请选择按什么方式排序:1 库存量 2 价格 3返回上一级菜单\n");
    scanf("%d",&n);
    if(n==3)
            goto manager;
    else{int(*sort[2])();
         sort[0]=storage;sort[1]=price;
         call(sort[n]);
         printf("是否返回上一级菜单:1 是 2 否\n");
         scanf("%d",&m);
         if(m==1) goto sort;
         if(m==2) goto end;
        }
   }
   else if(j1==4)
           goto start;
   else if(j1==5)
           goto end;
   else
      {printf("输入错误,请重新选择\n");
       goto manager;
      }
  }
 else if(i==2)
      {user:
       printf("请选择操作:1 查询具体书籍 2 销量排行 3 购买书籍 4 退货 5返回上一级菜单 6 退出系统\n");
       scanf("%d",&j2);
       if(j2==1)
       {m=inquire();
        if(m==-1)
          goto user;
       }
       else if(j2==2)
            {Bubblesort();
             printf("是否返回上一级菜单:1 是 2 否 \n");
             scanf("%d",&m);
             if(m==1)
               goto user;
             if(m==2)
               goto end;
            }
       else if(j2==3)
            {purchase:
             purchase();
             printf("是否继续购买书籍:1 是 2 否\n");
             scanf("%d",&m);
             if(m==1)
                 goto purchase;
             if(m==2)
                 goto user;
            }
       else if(j2==4)
            {returngoods:
             returngoods();
             printf("请选择操作:1 继续退货 2 返回上一级菜单 3 退出系统\n");
             reput:
             scanf("%d",&m);
             if(m==1)
                 goto returngoods;
             else if(m==2)
                  goto user;
             else if(m==3)
                  goto end;
             else
                 {printf("输入错误,请重新输入\n");
                  goto reput;
                 }
            }
       else if(j2==5)
               goto start;
       else if(j2==6)
               goto end;
       else
            {printf("输入错误,请重新选择\n");
             goto user;
            }
      }
 else if(i=3)
     goto end;
 else         
    {printf("输入错误,请重新选择\n");
     goto start;
    }
 end:;
}
搜索更多相关主题的帖子: include storage 库存量 price 书籍 
2015-01-07 18:44
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:20 
这么长的代码竟然连一行注释都没有,功能也不说,这要从哪看起?

一片落叶掉进了回忆的流年。
2015-01-07 19:29
betterus
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-1-5
收藏
得分:0 
刚才弄了一会还是不行,放上我注释过的
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10       //宏定义10本书;
struct books       //定义结构体,包含书籍的ISBN号、书名、价格、库存量和销量;
{char ISBN[20];
 char name[20];
 float price;
 int storage;
 int salesquantity;
}book[N];          //结构体数组;
struct books *p;   //定义指向结构体的指针;
int build()        //录入书籍信息的函数;
{int i,j;
 input:
 printf("请依次输入书籍参数,参数间用一个空格隔开,书籍间用回车键隔开\nISBN-------书名-----售价-库存量-销量-\n");
 for(i=0;i<N;i++)                  //录入书籍信息;
 {scanf("%s",&book[i].ISBN);
  scanf("%s",&book[i].name);
  scanf("%f",&book[i].price);
  scanf("%d",&book[i].storage);
  scanf("%d",&book[i].salesquantity);
 }
 printf("请确认信息\n");
 for(i=0;i<N;i++)
 {printf("%s %s %.2f %d %d\n",book[i].ISBN,book[i].name,book[i].price,book[i].storage,book[i].salesquantity);//输出书籍信息以便用户确认
 }
  printf("是否重新输入:1 是 2 否\n");
  scanf("%d",&j);
  if(j==1)
      goto input;
 return(1);
}
int inquire()           //查询书籍信息的函数;
{char key[20];          //定义变量,将查询的书籍ISBN号赋值给它;
 int i,j,flag=0;        //flag用于标示是否找到相关书籍,初始化为0;
 again:
 printf("请输入查询书籍ISBN号\n");
 scanf("%s",&key);
 for(j=0;j<N;j++);
 {if(strcmp(key,book[j].ISBN)==0)
    {flag=1;            //若找到相关书籍,则把flag赋值为1;
     printf("%s %10s %f %d %d\n",book[j].ISBN ,book[j].name ,book[j].price ,book[j].storage ,book[j].salesquantity );
    }
 }
 if(flag==0)           //如果flag为0,表示没有找到相关书籍,给出相应提示;
    {printf("未找到相关书籍:1 重新输入ISBN号 2 返回上一级菜单\n");
     scanf("%d",&i);
     if(i==1) goto again;
     if(i==2) return(-1);
    }
  return(1);
 }
void Bubblesort()     //对书籍销量进行排序的函数;
{int i,j,p;
 struct books temp;   //定义一个临时中间结构体元素交换量temp;
 for(i=0;i<N-1;i++)
  for(j=0;j<N+1;j++)
  {if(book[i].salesquantity <book[j].salesquantity )  //冒泡排序;
   {strcpy(temp.ISBN,book[i].ISBN);
    strcpy(book[i].ISBN,book[j].ISBN);
    strcpy(book[j].ISBN,temp.ISBN);
    strcpy(temp.name ,book[i].name );
    strcpy(book[i].name ,book[j].name );
    strcpy(book[j].name ,temp.name );
    temp.price =book[i].price ;
    book[i].price =book[j].price ;
    book[j].price =temp.price ;
    temp.salesquantity =book[i].salesquantity ;
    book[i].salesquantity =book[j].salesquantity ;
    book[j].salesquantity =temp.salesquantity ;
    temp.storage =book[i].storage ;
    book[i].storage =book[j].storage ;
    book[j].storage =temp.storage ;
   }
  }
  printf("ISBN-------------书名------价钱---销量---\n");   //输出排序后结果;
  for(p=0;p<N;p++)
      printf("%s %s %.2f %d\n",book[p].ISBN ,book[p].name ,book[p].price ,book[p].salesquantity );
}
void storage()          //对书籍库存量进行排序的函数;
{int i,j,p;            
 struct books temp;    //定义一个临时中间结构体元素交换量temp;  
 for(i=0;i<N-1;i++)
  for(j=0;j<N+1;j++)
  {if(book[i].storage<book[j].storage)  //冒泡排序;
   {strcpy(temp.ISBN,book[i].ISBN);
    strcpy(book[i].ISBN,book[j].ISBN);
    strcpy(book[j].ISBN,temp.ISBN);
    strcpy(temp.name ,book[i].name );
    strcpy(book[i].name ,book[j].name );
    strcpy(book[j].name ,temp.name );
    temp.price =book[i].price ;
    book[i].price =book[j].price ;
    book[j].price =temp.price ;
    temp.salesquantity =book[i].salesquantity ;
    book[i].salesquantity =book[j].salesquantity ;
    book[j].salesquantity =temp.salesquantity ;
    temp.storage =book[i].storage ;
    book[i].storage =book[j].storage ;
    book[j].storage =temp.storage ;
   }
  }
  printf("书名--------价钱---销量---\n");  //输出排序后结果;
  for(p=0;p<N;p++)
      printf("%s %.2f %d\n",book[p].name ,book[p].price ,book[p].salesquantity );
}
void price()           //对书籍价格进行排序的函数;
{int i,j,p;
 struct books temp;    //定义一个临时中间结构体元素交换量temp;
 for(i=0;i<N-1;i++)    //冒泡排序;
  for(j=0;j<N+1;j++)
  {if(book[i].price >book[j].price )
   {strcpy(temp.ISBN,book[i].ISBN);
    strcpy(book[i].ISBN,book[j].ISBN);
    strcpy(book[j].ISBN,temp.ISBN);
    strcpy(temp.name ,book[i].name );
    strcpy(book[i].name ,book[j].name );
    strcpy(book[j].name ,temp.name );
    temp.price =book[i].price ;
    book[i].price =book[j].price ;
    book[j].price =temp.price ;
    temp.salesquantity =book[i].salesquantity ;
    book[i].salesquantity =book[j].salesquantity ;
    book[j].salesquantity =temp.salesquantity ;
    temp.storage =book[i].storage ;
    book[i].storage =book[j].storage ;
    book[j].storage =temp.storage ;
   }
  }
  printf("书名------价钱---销量---\n");     //输出排序后结果;
  for(p=0;p<N;p++)
      printf("%s %.2f %d\n",book[p].name ,book[p].price ,book[p].salesquantity );
}
void purchase()          //用户进行购买书籍的函数;
{int n,m,flag=0;         //flag用于标示是否找到相关书籍,并初始化为0;
 char aim[20];           //定义一个字符串aim,将用户输入ISBN号赋值给它;
 error:
 printf("请输入购买书籍的ISBN号\n");
 scanf("%s",&aim);
 for(n=0;n<N;n++)
     {if(strcmp(book[n].ISBN,aim)==0)
      {flag=1;                        //若找到相关书籍,则将flag赋值为1;
       if((book[n].storage >0)&&(book[n].storage <3))    //还有库存量但不足3本,给出相应提示;
        {printf("库存量不足3本,请尽快购买!\n是否购买:1 是 2 否\n");
         scanf("%d",&m);
         if(m==1)
          {book[n].storage--;
           book[n].salesquantity++;
           printf("购买成功!\n");
          }
         break;                //跳出循环,避免死循环;
         if(m==2)
           goto error;
        }
       if(book[n].storage==0)    //如果没有库存,给出相应提示,并给出销量排序,给出给用户的建议;
        {printf("库存量不足!\n建议购买热销书!\n");
         Bubblesort();
        }
       if(book[n].storage >=3)
        {printf("库存充足,是否购买:1 是 2 否\n");  //如果库存充足,给出相应提示;
         scanf("%d",&m);
         if(m==1)
          {book[n].storage--;
           book[n].salesquantity++;
           printf("购买成功!\n");
          }
         if(m==2)
             goto error;
        }
       }
     }
 if(flag==0)          //如果flag为0,表示没有找到相关书籍,给出相应提示;
  {printf("未找到相关书籍,请重新输入ISBN号\n");
   goto error;
  }
}
void returngoods()    //用户退货函数
{char aim[20];        //定义一个字符串aim,将用户输入ISBN号赋值给它;
 int i,flag=0;        //flag用于标示是否找到相关书籍,并初始化为0;
 input:
 printf("请输入所退书籍ISBN号\n");
 scanf("%s",&aim);
 for(i=0;i<N;i++)
 if(strcmp(aim,book[i].ISBN )==0)
 {flag=1;
  book[i].salesquantity--;
  book[i].storage++;
  printf("退货成功!欢迎购买其他书籍!\n");
 }
 if(flag==0)        //如果flag为0,表示没有找到相关书籍,给出相应提示;
   {printf("输入错误,请重新输入\n");
    goto input;
   }
}
void main()
{int i,j1,j2,m,n;//i用于判断身份;j1用于判断管理员操作;j2用于判断用户操作;m、n用于判断是否退出程序;
 start:
 printf("请选择登陆身份:1 管理员 2 用户 3退出系统\n");//选择登陆身份;
 scanf("%d",&i);//用于判断身份;
 if(i==1)
  {manager:
   printf("请选择操作:1 录入书籍 2 销量排行 3 对书籍库存量和价格进行排序 4 返回上一级菜单 5 退出系统\n");//选择操作;
   scanf("%d",&j1);//用于判断进行的操作;
   if(j1==1)
           {build();//录入信息的函数;
            printf("是否返回上一级菜单:1 是 2 否\n");
            scanf("%d",&m);//判断是否退回到上一级;
            if(m==1)
                goto manager;
            else if(m==2)
                    goto end;
           }
   else if(j1==2)
           {Bubblesort();//对销量进行排序的函数;
            printf("是否返回上一级菜单:1 是 2 否\n");
            scanf("%d",&m);//判断是否回到上一级;
            if(m==1)
                goto manager;
            if(m==2)
                goto end;
           }
   else if(j1==3)
   {sort:
    printf("请选择按什么方式排序:1 库存量 2 价格 3返回上一级菜单\n");
    scanf("%d",&n);//判断以何种方式排序;
    if(n==3)
            goto manager;
    else if(n==1)
        {storage();//对库存量进行排序的函数
         printf("是否返回上一级菜单:1 是 2 否\n");
         scanf("%d",&m);//判断是否回到上一级;
         if(m==1) goto sort;
         if(m==2) goto end;
        }
    else if(n==2)
        {price();//对价格进行排序的函数
         printf("是否返回上一级菜单:1 是 2 否\n");
         scanf("%d",&m);//判断是否回到上一级;
         if(m==1) goto sort;
         if(m==2) goto end;
        }
    else
       {printf("输入错误!请重新输入\n");
        goto sort;
       }
   }
   else if(j1==4)
           goto start;
   else if(j1==5)
           goto end;
   else
      {printf("输入错误,请重新选择\n");
       goto manager;
      }
  }
 else if(i==2)
      {user:
       printf("请选择操作:1 查询具体书籍 2 销量排行 3 购买书籍 4 退货 5返回上一级菜单 6 退出系统\n");
       scanf("%d",&j2);//判断用户进行的操作;
       if(j2==1)
       {m=inquire();//查询书籍的函数;
        if(m==-1)
          goto user;
       }
       else if(j2==2)
            {Bubblesort();//对销量进行排序的函数;
             printf("是否返回上一级菜单:1 是 2 否 \n");
             scanf("%d",&m);//判断是否退出程序;
             if(m==1)
               goto user;
             if(m==2)
               goto end;
            }
       else if(j2==3)
            {purchase:
             purchase();//进入购买书籍的函数;
             printf("是否继续购买书籍:1 是 2 否\n");
             scanf("%d",&m);//判断是否回到上一级;
             if(m==1)
                 goto purchase;
             if(m==2)
                 goto user;
            }
       else if(j2==4)
            {returngoods:
             returngoods();//进入退货的函数;
             printf("请选择操作:1 继续退货 2 返回上一级菜单 3 退出系统\n");
             reput:
             scanf("%d",&m);//判断是否回到上一级;
             if(m==1)
                 goto returngoods;
             else if(m==2)
                  goto user;
             else if(m==3)
                  goto end;
             else
                 {printf("输入错误,请重新输入\n");
                  goto reput;
                 }
            }
       else if(j2==5)
               goto start;
       else if(j2==6)
               goto end;
       else
            {printf("输入错误,请重新选择\n");
             goto user;
            }
      }
 else if(i=3)
     goto end;
 else         
    {printf("输入错误,请重新选择\n");
     goto start;
    }
 end:;
}
2015-01-07 20:10
betterus
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-1-5
收藏
得分:0 
是一个关于图书管理的程序,但是想弄一个可以保存数据的文件,就是最前面那样弄,但是不明白怎么错了。
2015-01-07 20:11
快速回复:麻烦大家帮忙看看代码哪里错了
数据加载中...
 
   



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

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