鱼C论坛

 找回密码
 立即注册
查看: 1613|回复: 8

[已解决]c语言图书管理系统求助

[复制链接]
发表于 2019-12-23 18:04:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问我的bookin    和delbook没办法在程序中增加或者减少数据
是不是某个地方错了呢?
就是红色的这两段
要怎样做呢?















  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<conio.h>
  4. #include<string.h>
  5. #define LEN sizeof(struct Book)
  6. #define DATA book_num,book_name
  7. struct Card
  8. {
  9.         char card_num[10];
  10.         char student_name[20];
  11.     int book_totle;
  12. };
  13. struct Card card[5]={{"20111101","Zhanjun",3},{"20111103","YangKai",1},{"20111113","WuGang",4},{"20111123","Shanglei",2},{"20111105","ZhangKun",5}};
  14. struct Date
  15. {
  16.         int year;
  17.         int month;
  18.         int day;
  19. };
  20. struct Book
  21. {
  22.     char book_num[10];
  23.         char book_name[20];
  24.    struct Date date;
  25.    int flag;
  26. };
  27. struct Book book[5]={{"305032","History",{0,0,0},1},{"409812","Geogrophy",{0,0,0},1},{"213401","English",{0,0,0},1},{"3287463","Maths",{0,0,0},1},{"4102102","Physicyl",{0,0,0},1}};


  28. char num[10];
  29. void menu();//函数的声明
  30. void borrowbook();
  31. void returnbook();
  32. void bookinquiry();
  33. void bookin();
  34. void readerinquiry();
  35. void readerupdate();
  36. void reborrow();
  37. void delbook();


  38. void borrowbook()
  39. {
  40.         int i;
  41.         char booknum[10];
  42.         printf("请输入要借阅的书号");
  43.         scanf("%s",booknum);
  44.         for(i=0;i<5;i++)
  45.         {
  46.                 if(strcmp(booknum,book[i].book_num)==0)
  47.                 {
  48.                         if(book[i].flag==0)
  49.                                 printf("这本书已经借出!\n");
  50.                         else
  51.                         {
  52.                                 book[i].flag=0;
  53.               printf("借出日期填写:(请按年/月/日的顺序,如2019/9/8)\n");
  54.                           scanf("%d/%d/%d",&book[i].date.year,&book[i].date.month,&book[i].date.day);
  55.                           break;
  56.                         }
  57.                 }
  58.         }
  59.     for(i=0;i<5;i++)
  60.                 if(strcmp(num,card[i].card_num)==0)
  61.                 { card[i].book_totle=card[i].book_totle+1;
  62.                 break;
  63.                 }
  64.                 printf("1.确认并返回菜单 2.确认信息并退出\n");
  65.                 scanf("%d",&i);
  66.                 if(i==1)menu();
  67.                 else exit(0);
  68. }
  69. void returnbook()
  70. {
  71. int i;
  72.         char booknum[10];
  73.         printf("请输入要还的书号");
  74.         scanf("%s",booknum);
  75.         for(i=0;i<5;i++)
  76.         {
  77.                 if(strcmp(booknum,book[i].book_num)==0)
  78.                 {
  79.                    book[i].flag=1;
  80.                    break;
  81.                 }
  82.                 if(i>=5)
  83.                         printf("卡号输入错误!");
  84.                 for(i=0;i<5;i++)
  85.                 if(strcmp(num,card[i].card_num)==0)
  86.                 {
  87.                         card[i].book_totle=card[i].book_totle+1;
  88.                     break;
  89.                 }
  90.                 printf("1.确认并返回菜单 2.确认信息并退出\n");
  91.                 scanf("%d",&i);
  92.                 if(i==1)menu();
  93.                 else exit(0);
  94.         }

  95. }
  96.        
  97. void bookinquiry()
  98. {
  99.         int i;
  100.         char booknum[10];
  101.         printf("请输入要查询的书号:");
  102.         scanf("%s",booknum);
  103.         for(i=0;i<5;i++)
  104.                 if(strcmp(booknum,book[i].book_num)==0)
  105.                 {
  106.         printf("编号  书名  借出日期  状态\n");
  107.         printf("%s %s",book[i].book_num,book[i].book_name);
  108.         printf("%4d年%2d月%2d日",book[i].date.year,book[i].date.month,book[i].date.day);
  109.         if(book[i].flag==1)
  110.                                 printf("未借出!\n");
  111.                         else
  112.                         printf("已借出!\n");
  113.         }
  114.         printf("1.确认并返回菜单 2.确认信息并退出\n");
  115.                 scanf("%d",&i);
  116.                 if(i==1)
  117.                         menu();
  118.                 else
  119.                         exit(0);
  120. }

  121. [color=Red]void bookin()

  122. {
  123.     int i,m=0;/*m是记录的条数*/
  124.     char ch[2];
  125.     FILE *fp;/*定义文件指针*/
  126.     if((fp=fopen("data","ab+"))==NULL)/*打开指定文件*/
  127.     {
  128.         printf("不能打开文件!\n");
  129.         return;
  130.     }
  131.     while(!feof(fp))
  132.     {
  133.         if(fread(&book[m] ,LEN,1,fp)==1)
  134.             m++;/*统计当前记录条数*/
  135.     }
  136.     fclose(fp);
  137.     if(m==0)
  138.         printf("没有找到!\n");
  139.    
  140.     if((fp=fopen("data","wb"))==NULL)
  141.     {
  142.         printf("不能打开文件!\n");
  143.         return;
  144.     }
  145.     for(i=0;i<m;i++)
  146.         fwrite(&book[i] ,LEN,1,fp);/*向指定的磁盘文件写入信息*/
  147.     printf("是否输入?(y/n):");
  148.     scanf("%s",ch);
  149.     while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要录入新信息*/
  150.     {
  151.         printf("号:");
  152.         scanf("%d",&book[m].book_num);
  153.         for(i=0;i<m;i++)
  154.             if(book[m].book_num ==book[i].book_num)
  155.             {
  156.                 printf("该记录已经存在,按任意键继续!");
  157.                 getch();
  158.                 fclose(fp);
  159.                 return;
  160.             }
  161.             printf("书名:");
  162.             scanf("%s",book[m].book_name);  
  163.               
  164.             
  165.             if(fwrite(&book[m],LEN,1,fp)!=1)  /*将新录入的信息写入指定的磁盘文件*/
  166.             {
  167.                 printf("不能保存!");
  168.                 getch();
  169.             }
  170.             else
  171.             {
  172.                 printf("%s 已经保存!\n",book[m].book_name);
  173.                 m++;
  174.             }
  175.             printf("是否继续?(y/n):");/*询问是否继续*/
  176.             scanf("%s",ch);
  177.     }
  178.     fclose(fp);
  179.     printf("OK!\n");
  180.                 printf("1.确认并返回菜单 2.确认信息并退出\n");
  181.                 scanf("%d",&i);
  182.                 if(i==1)
  183.                         menu();
  184.                 else
  185.                         exit(0);
  186. }




  187. void delbook()
  188. {
  189.     FILE *fp;
  190.     int snum,i,j,m=0;
  191.     char ch[2];
  192.     if((fp=fopen("data","ab+"))==NULL)
  193.     {
  194.         printf("不能打开文件\n");
  195.         return;
  196.     }
  197.     while(!feof(fp))  
  198.         if(fread(&book[m],LEN,1,fp)==1)
  199.             m++;
  200.         fclose(fp);
  201.         
  202.         printf("请输入编号:");
  203.         scanf("%d",&snum);
  204.         for(i=0;i<5;i++)
  205.             if(snum==book[i].book_num)
  206.                 break;
  207.             if(i==m)
  208.             {
  209.                 printf("没有找到!");
  210.                 getchar();
  211.                 return;
  212.             }
  213.             printf("已经找到该记录,是否删除?(y/n)");
  214.             scanf("%s",ch);
  215.             if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要进行删除*/
  216.             {
  217.                 for(j=i;j<m;j++)
  218.                     book[j] = book[j+1];/*将后一个记录移到前一个记录的位置*/
  219.                 i--;/*记录的总个数减1*/
  220.                 printf("成功删除!\n");
  221.             }
  222.             if((fp=fopen("data","wb"))==NULL)
  223.             {
  224.                 printf("不能打开!\n");
  225.                 return;
  226.             }
  227.             for(j=0;j<m;j++)/*将更改后的记录重新写入指定的磁盘文件中*/
  228.                 if(fwrite(&book[j] ,LEN,1,fp)!=1)
  229.                 {
  230.                     printf("不能保存!\n");
  231.                     getch();
  232.                 }
  233.                 fclose(fp);
  234.                 printf("1.确认并返回菜单 2.确认信息并退出\n");
  235.                 scanf("%d",&i);
  236.                 if(i==1)
  237.                         menu();
  238.                 else
  239.                         exit(0);
  240. }
  241. [/color]

  242. void readerinquiry()
  243. {
  244.         int i;
  245.         char studentname[20];
  246.         printf("请输入要查询的读者");
  247.         scanf("%s",studentname);
  248.         for(i=0;i<5;i++)
  249.         if(strcmp(studentname,card[i].student_name)==0)
  250.                 {
  251.         printf("借书证号  姓名  书名  借出日期  \n");
  252.         printf("%s %s %s",card[i].card_num,card[i].student_name,book[i].book_name);
  253.         printf("%4d年%2d月%2d日\n",book[i].date.year,book[i].date.month,book[i].date.day);
  254.        
  255.         }
  256.         printf("1.确认并返回菜单 2.确认信息并退出\n");
  257.                 scanf("%d",&i);
  258.                 if(i==1)menu();
  259.                 else exit(0);
  260. }
  261. void readerupdate()
  262. {

  263.         printf("这是添加与删除读者的函数\n");
  264. }

  265. void reborrow()
  266. {
  267.         int i;
  268.         char booknum[10];
  269.         printf("请输入要续借的书号");
  270.         scanf("%s",booknum);
  271.         for(i=0;i<5;i++)
  272.         if(strcmp(booknum,book[i].book_num)==0)
  273.         {
  274.         printf("编号  书名  借出日期  状态\n");
  275.         printf("%s %s",book[i].book_num,book[i].book_name);
  276.         printf("%4d年%2d月%2d日",book[i].date.year,book[i].date.month,book[i].date.day);
  277.        
  278.         if(book[i].flag==1)
  279.             printf("不能续借!\n");
  280.                         else
  281.                                 printf("可以续借!\n");
  282.         }

  283.                         printf("1.确认续借    2.取消续借");
  284.                         scanf("%d",&i);
  285.              if(i==1)
  286.                 {
  287.                book[i].flag=0;
  288.              printf("续借日期填写:(请按年/月/日的顺序,如2019/9/8)\n");
  289.                     scanf("%d/%d/%d",&book[i].date.year,&book[i].date.month,&book[i].date.day);
  290.                           
  291.                 }
  292.                 else
  293.                 printf("1.确认并返回菜单 2.确认信息并退出\n");
  294.                 scanf("%d",&i);
  295.                 if(i==1)menu();
  296.                 else exit(0);
  297. }
  298. void menu()
  299. {
  300.         int n;
  301.         printf("~~~欢迎使用本校图书管理系统~~~\n");
  302.         printf("*******************************\n");
  303.         printf("1.借书\n");
  304.         printf("2.还书\n");
  305.         printf("3.图书查询\n");
  306.         printf("4.新书上架\n");
  307.     printf("5.旧书下架\n");
  308.         printf("6.读者查询\n");
  309.         printf("7.添加与删除读者\n");
  310.         printf("8.续借\n");
  311.     printf("9.退出\n");
  312.         printf("请选择以上选项:\n");
  313.         printf("*******************************\n");
  314.         scanf("%d",&n);
  315.         switch(n)
  316.         {
  317.         case 1:borrowbook();break;
  318.         case 2:returnbook();break;
  319.         case 3:bookinquiry();break;
  320.         case 4:bookin();break;
  321.     case 5:delbook();break;
  322.         case 6:readerinquiry();break;
  323.         case 7:readerupdate();break;
  324.         case 8:reborrow();break;
  325.         case 9:exit(0);break;
  326.     default:printf("输入错误,退出\n");exit(0);break;
  327.         }

  328. }

  329. void main()
  330. {   
  331.         int i;
  332.         char num[10];
  333.         printf("请输入你的卡号");
  334.         scanf("%s",num);
  335.         for(i=0;i<5;i++)
  336.         if(strcmp(num,card[i].card_num)==0)
  337.                 break;
  338.         if(i>=5)
  339.         {
  340.                 printf("卡号不存在!");
  341.                 exit(0);
  342.         }
  343. else
  344.         menu();
  345.          
  346. }
复制代码
最佳答案
2019-12-23 21:39:47
book的book_num定义的是字符数组,所以bookin函数里:
scanf("%d", &book[m].book_num);
if (book[m].book_num == book[i].book_num)
应该改成:
scanf("%s", book[m].book_num);
if (strcmp(book[m].book_num, book[i].book_num) == 0)

delbook函数里判断书号也是类似的问题:
if (snum == book[i].book_num)
snum定义的是int,而book_num是字符数组。

动态添加删除改成用链表实现比较好吧。网上有很多例子,本论坛也有很多贴子。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-12-23 21:39:47 | 显示全部楼层    本楼为最佳答案   
book的book_num定义的是字符数组,所以bookin函数里:
scanf("%d", &book[m].book_num);
if (book[m].book_num == book[i].book_num)
应该改成:
scanf("%s", book[m].book_num);
if (strcmp(book[m].book_num, book[i].book_num) == 0)

delbook函数里判断书号也是类似的问题:
if (snum == book[i].book_num)
snum定义的是int,而book_num是字符数组。

动态添加删除改成用链表实现比较好吧。网上有很多例子,本论坛也有很多贴子。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-24 21:54:11 | 显示全部楼层
superbe 发表于 2019-12-23 21:39
book的book_num定义的是字符数组,所以bookin函数里:
scanf("%d", &book[m].book_num);
if (book[m].bo ...

非常感谢,这个问题困扰我好几天。
你的回答很好的帮助了我。
新手新手
链表的话还没有学到,后续一定会补上这部分内容
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-24 22:41:11 | 显示全部楼层
superbe 发表于 2019-12-23 21:39
book的book_num定义的是字符数组,所以bookin函数里:
scanf("%d", &book[m].book_num);
if (book[m].bo ...

你好,如果按照现在这种方法的话删除(delbook)要怎么做
我的bookin和delbook都是从其他类似的搬过来的
现在的话添加(bookin)已经能好了
但是delbook不能操作
请问是哪里有问题呢?
要怎么修改呢?
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<conio.h>
  4. #include<string.h>
  5. #define LEN sizeof(struct Book)
  6. #define DATA book_num,book_name
  7. struct Card
  8. {
  9.         char card_num[10];
  10.         char student_name[20];
  11.     int book_totle;
  12. };
  13. struct Card card[5]={{"20111101","Zhanjun",3},{"20111103","YangKai",1},{"20111113","WuGang",4},{"20111123","Shanglei",2},{"20111105","ZhangKun",5}};
  14. struct Date
  15. {
  16.         int year;
  17.         int month;
  18.         int day;
  19. };
  20. struct Book
  21. {
  22.     char book_num[10];
  23.         char book_name[20];
  24.    struct Date date;
  25.    int flag;
  26. };
  27. struct Book book[5]={{"305032","History",{0,0,0},1},{"409812","Geogrophy",{0,0,0},1},{"213401","English",{0,0,0},1},{"3287463","Maths",{0,0,0},1},{"4102102","Physicyl",{0,0,0},1}};


  28. char num[10];
  29. void menu();//函数的声明
  30. void borrowbook();
  31. void returnbook();
  32. void bookinquiry();
  33. void bookin();
  34. void readerinquiry();
  35. void readerupdate();
  36. void reborrow();
  37. void delbook();


  38. void borrowbook()
  39. {
  40.         int i;
  41.         char booknum[10];
  42.         printf("请输入要借阅的书号");
  43.         scanf("%s",booknum);
  44.         for(i=0;i<5;i++)
  45.         {
  46.                 if(strcmp(booknum,book[i].book_num)==0)
  47.                 {
  48.                         if(book[i].flag==0)
  49.                                 printf("这本书已经借出!\n");
  50.                         else
  51.                         {
  52.                                 book[i].flag=0;
  53.               printf("借出日期填写:(请按年/月/日的顺序,如2019/9/8)\n");
  54.                           scanf("%d/%d/%d",&book[i].date.year,&book[i].date.month,&book[i].date.day);
  55.                           break;
  56.                         }
  57.                 }
  58.         }
  59.     for(i=0;i<5;i++)
  60.                 if(strcmp(num,card[i].card_num)==0)
  61.                 { card[i].book_totle=card[i].book_totle+1;
  62.                 break;
  63.                 }
  64.                 printf("1.确认并返回菜单 2.确认信息并退出\n");
  65.                 scanf("%d",&i);
  66.                 if(i==1)menu();
  67.                 else exit(0);
  68. }
  69. void returnbook()
  70. {
  71. int i;
  72.         char booknum[10];
  73.         printf("请输入要还的书号");
  74.         scanf("%s",booknum);
  75.         for(i=0;i<5;i++)
  76.         {
  77.                 if(strcmp(booknum,book[i].book_num)==0)
  78.                 {
  79.                    book[i].flag=1;
  80.                    break;
  81.                 }
  82.                 if(i>=5)
  83.                         printf("卡号输入错误!");
  84.                 for(i=0;i<5;i++)
  85.                 if(strcmp(num,card[i].card_num)==0)
  86.                 {
  87.                         card[i].book_totle=card[i].book_totle+1;
  88.                     break;
  89.                 }
  90.                 printf("1.确认并返回菜单 2.确认信息并退出\n");
  91.                 scanf("%d",&i);
  92.                 if(i==1)menu();
  93.                 else exit(0);
  94.         }

  95. }
  96.        
  97. void bookinquiry()
  98. {
  99.         int i;
  100.         char booknum[10];
  101.         printf("请输入要查询的书号:");
  102.         scanf("%s",booknum);
  103.         for(i=0;i<5;i++)
  104.                 if(strcmp(booknum,book[i].book_num)==0)
  105.                 {
  106.         printf("编号  书名  借出日期  状态\n");
  107.         printf("%s %s",book[i].book_num,book[i].book_name);
  108.         printf("%4d年%2d月%2d日",book[i].date.year,book[i].date.month,book[i].date.day);
  109.         if(book[i].flag==1)
  110.                                 printf("未借出!\n");
  111.                         else
  112.                         printf("已借出!\n");
  113.         }
  114.         printf("1.确认并返回菜单 2.确认信息并退出\n");
  115.                 scanf("%d",&i);
  116.                 if(i==1)
  117.                         menu();
  118.                 else
  119.                         exit(0);
  120. }

  121. void bookin()

  122. {
  123.     int i,m=0;/*m是记录的条数*/
  124.     char ch[2];
  125.     FILE *fp;/*定义文件指针*/
  126.     if((fp=fopen("data","ab+"))==NULL)/*打开指定文件*/
  127.     {
  128.         printf("不能打开文件!\n");
  129.         return;
  130.     }
  131.     while(!feof(fp))
  132.     {
  133.         if(fread(&book[m] ,LEN,1,fp)==1)
  134.             m++;/*统计当前记录条数*/
  135.     }
  136.     fclose(fp);
  137.    
  138.    
  139.     if((fp=fopen("data","wb"))==NULL)
  140.     {
  141.         printf("不能打开文件!\n");
  142.         return;
  143.     }
  144.     for(i=0;i<m;i++)
  145.         fwrite(&book[i] ,LEN,1,fp);/*向指定的磁盘文件写入信息*/
  146.     printf("是否输入?(y/n):");
  147.     scanf("%s",ch);
  148.     while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要录入新信息*/
  149.     {
  150.         printf("图书编号:");
  151.         scanf("%s",book[m].book_num);
  152.         for(i=0;i<m;i++)
  153.             if (strcmp(book[m].book_num, book[i].book_num) == 0)
  154.             {
  155.                 printf("该记录已经存在\n");
  156.                 printf("1.确认并返回菜单 2.确认信息并退出\n");
  157.                         scanf("%d",&i);
  158.                 if(i==1)
  159.                         menu();
  160.                 else
  161.                         exit(0);
  162.             }
  163.             printf("书名:");
  164.             scanf("%s",book[m].book_name);  
  165.               
  166.             
  167.             if(fwrite(&book[m],LEN,1,fp)!=1)  /*将新录入的信息写入指定的磁盘文件*/
  168.             {
  169.                 printf("不能保存!");
  170.                 getch();
  171.             }
  172.             else
  173.             {
  174.                 printf("%s 已经保存!\n",book[m].book_name);
  175.                 m++;
  176.             }
  177.             printf("是否继续?(y/n):");/*询问是否继续*/
  178.             scanf("%s",ch);
  179.     }
  180.     fclose(fp);
  181.     printf("OK!\n");
  182.                 printf("1.确认并返回菜单 2.确认信息并退出\n");
  183.                 scanf("%d",&i);
  184.                 if(i==1)
  185.                         menu();
  186.                 else
  187.                         exit(0);
  188. }




  189. void delbook()
  190. {
  191.     FILE *fp;
  192.     int i,j,m=0;
  193.         char snum;
  194.     char ch[2];
  195.     if((fp=fopen("data","ab+"))==NULL)
  196.     {
  197.         printf("不能打开文件\n");
  198.         return;
  199.     }
  200.     while(!feof(fp))  
  201.         if(fread(&book[m],LEN,1,fp)==1)
  202.             m++;
  203.         fclose(fp);
  204.         
  205.         printf("请输入编号:");
  206.         scanf("%s",snum);
  207.         for(i=0;i<5;i++)
  208.             if (strcmp(snum, book[i].book_num) == 0)
  209.                
  210.       printf("已经找到该记录,是否删除?(y/n)");
  211.             scanf("%s",ch);
  212.             if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要进行删除*/
  213.             {
  214.                 for(j=i;j<m;j++)
  215.                     book[j] = book[j+1];/*将后一个记录移到前一个记录的位置*/
  216.                 i--;/*记录的总个数减1*/
  217.                 printf("成功删除!\n");
  218.             }
  219.             if((fp=fopen("data","wb"))==NULL)
  220.             {
  221.                 printf("不能打开!\n");
  222.                 return;
  223.             }
  224.             for(j=0;j<m;j++)/*将更改后的记录重新写入指定的磁盘文件中*/
  225.                 if(fwrite(&book[j] ,LEN,1,fp)!=1)
  226.                 {
  227.                     printf("不能保存!\n");
  228.                     getch();
  229.                 }
  230.                 fclose(fp);
  231.                 printf("1.确认并返回菜单 2.确认信息并退出\n");
  232.                 scanf("%d",&i);
  233.                 if(i==1)
  234.                         menu();
  235.                 else
  236.                         exit(0);
  237. }


  238. void readerinquiry()
  239. {
  240.         int i;
  241.         char studentname[20];
  242.         printf("请输入要查询的读者");
  243.         scanf("%s",studentname);
  244.         for(i=0;i<5;i++)
  245.         if(strcmp(studentname,card[i].student_name)==0)
  246.                 {
  247.         printf("借书证号  姓名  书名  借出日期  \n");
  248.         printf("%s %s %s",card[i].card_num,card[i].student_name,book[i].book_name);
  249.         printf("%4d年%2d月%2d日\n",book[i].date.year,book[i].date.month,book[i].date.day);
  250.        
  251.         }
  252.         printf("1.确认并返回菜单 2.确认信息并退出\n");
  253.                 scanf("%d",&i);
  254.                 if(i==1)menu();
  255.                 else exit(0);
  256. }
  257. void readerupdate()
  258. {






















  259.         printf("这是添加与删除读者的函数\n");
  260. }

  261. void reborrow()
  262. {
  263.         int i;
  264.         char booknum[10];
  265.         printf("请输入要续借的书号");
  266.         scanf("%s",booknum);
  267.         for(i=0;i<5;i++)
  268.         if(strcmp(booknum,book[i].book_num)==0)
  269.         {
  270.         printf("编号  书名  借出日期  状态\n");
  271.         printf("%s %s",book[i].book_num,book[i].book_name);
  272.         printf("%4d年%2d月%2d日",book[i].date.year,book[i].date.month,book[i].date.day);
  273.        
  274.         if(book[i].flag==1)
  275.             printf("不能续借!\n");
  276.                         else
  277.                                 printf("可以续借!\n");
  278.         }

  279.                         printf("1.确认续借    2.取消续借");
  280.                         scanf("%d",&i);
  281.              if(i==1)
  282.                 {
  283.                book[i].flag=0;
  284.              printf("续借日期填写:(请按年/月/日的顺序,如2019/9/8)\n");
  285.                     scanf("%d/%d/%d",&book[i].date.year,&book[i].date.month,&book[i].date.day);
  286.                           
  287.                 }
  288.                 else
  289.                 printf("1.确认并返回菜单 2.确认信息并退出\n");
  290.                 scanf("%d",&i);
  291.                 if(i==1)menu();
  292.                 else exit(0);
  293. }
  294. void menu()
  295. {
  296.         int n;
  297.         printf("~~~欢迎使用本校图书管理系统~~~\n");
  298.         printf("*******************************\n");
  299.         printf("1.借书\n");
  300.         printf("2.还书\n");
  301.         printf("3.图书查询\n");
  302.         printf("4.新书上架\n");
  303.     printf("5.旧书下架\n");
  304.         printf("6.读者查询\n");
  305.         printf("7.添加与删除读者\n");
  306.         printf("8.续借\n");
  307.     printf("9.退出\n");
  308.         printf("请选择以上选项:\n");
  309.         printf("*******************************\n");
  310.         scanf("%d",&n);
  311.         switch(n)
  312.         {
  313.         case 1:borrowbook();break;
  314.         case 2:returnbook();break;
  315.         case 3:bookinquiry();break;
  316.         case 4:bookin();break;
  317.     case 5:delbook();break;
  318.         case 6:readerinquiry();break;
  319.         case 7:readerupdate();break;
  320.         case 8:reborrow();break;
  321.         case 9:exit(0);break;
  322.     default:printf("输入错误,退出\n");exit(0);break;
  323.         }

  324. }

  325. void main()
  326. {   
  327.         int i;
  328.         char num[10];
  329.         printf("请输入你的卡号");
  330.         scanf("%s",num);
  331.         for(i=0;i<5;i++)
  332.         if(strcmp(num,card[i].card_num)==0)
  333.                 break;
  334.         if(i>=5)
  335.         {
  336.                 printf("卡号不存在!");
  337.                 exit(0);
  338.         }
  339. else
  340.         menu();
  341.          
  342. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-24 23:46:03 | 显示全部楼层
本帖最后由 superbe 于 2019-12-24 23:58 编辑

有一点小修改:
  1. void delbook()
  2. {
  3.     FILE *fp;
  4.     int i, j, m = 0;
  5.     char snum[10];                                                //修改的行  (原来是char snum; )
  6.     char ch[2];
  7.     if ((fp = fopen("data", "ab+")) == NULL)
  8.     {
  9.         printf("不能打开文件\n");
  10.         return;
  11.     }
  12.     while (!feof(fp))
  13.         if (fread(&book[m], LEN, 1, fp) == 1)
  14.             m++;
  15.     fclose(fp);

  16.     printf("请输入编号:");
  17.     scanf("%s", snum);
  18.     for (i = 0; i<5; i++)
  19.         if (strcmp(snum, book[i].book_num) == 0)
  20.         {                                                                   //修改的行 (添加了{ )
  21.             printf("已经找到该记录,是否删除?(y/n)");
  22.             break;                                                       //修改的行 (添加了break )
  23.         }                                                                   //修改的行 (添加了} )
  24.     scanf("%s", ch);
  25.     if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)/*判断是否要进行删除*/
  26.     {
  27.         for (j = i; j<m; j++)
  28.             book[j] = book[j + 1];/*将后一个记录移到前一个记录的位置*/
  29.         m--;           /*记录的总个数减1*/                                  //修改的行 (原来是 i--; )
  30.         printf("成功删除!\n");
  31.     }
  32.     if ((fp = fopen("data", "wb")) == NULL)
  33.     {
  34.         printf("不能打开!\n");
  35.         return;
  36.     }
  37.     for (j = 0; j<m; j++)/*将更改后的记录重新写入指定的磁盘文件中*/
  38.         if (fwrite(&book[j], LEN, 1, fp) != 1)
  39.         {
  40.             printf("不能保存!\n");
  41.             getch();
  42.         }
  43.     fclose(fp);
  44.     printf("1.确认并返回菜单 2.确认信息并退出\n");
  45.     scanf("%d", &i);
  46.     if (i == 1)
  47.         menu();
  48.     else
  49.         exit(0);
  50. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-25 07:53:15 | 显示全部楼层
好的,谢谢!
大神请收下我的膝盖!!!
突然觉得c语言的世界很奇妙
努力学c
加油
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-25 18:39:39 | 显示全部楼层
加油
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-12-27 17:12:45 | 显示全部楼层
想做一个显示所有信息的函数(show)
不输入数据的话信息显示挺好
如果用bookin函数输入数据的话就乱套了
用delbook删除居然还能再显示(show)函数查到
请问这是咋回事



  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<conio.h>
  4. #include<string.h>
  5. #define LEN sizeof(struct Book)
  6. #define FORMAT "%-15s%-15s%-15s%-15s\n"
  7. #define DATA card[i].card_num,card[i].student_name,book[i].book_num,book[i].book_name
  8. struct Card
  9. {
  10.         char card_num[99];
  11.         char student_name[20];
  12.     int book_totle;
  13. };
  14. struct Card card[10]={{"20111101","Zhanjun",3},{"20111103","YangKai",1},{"20111113","WuGang",4},{"20111123","Shanglei",2},{"20111105","ZhangKun",5}};
  15. struct Date
  16. {
  17.         int year;
  18.         int month;
  19.         int day;
  20. };
  21. struct Book
  22. {
  23.     char book_num[10];
  24.         char book_name[20];
  25.    struct Date date;
  26.    int flag;
  27. };
  28. struct Book book[10]={{"305032","History",{0,0,0},1},{"409812","Geogrophy",{0,0,0},1},{"213401","English",{0,0,0},1},{"3287463","Maths",{0,0,0},1},{"4102102","Physicyl",{0,0,0},1}};


  29. char num[10];
  30. void menu();//函数的声明
  31. void borrowbook();
  32. void returnbook();
  33. void bookinquiry();
  34. void bookin();
  35. void readerinquiry();
  36. void readerin();
  37. void reborrow();
  38. void delbook();
  39. void delreader();
  40. void show();


  41. void borrowbook()
  42. {
  43.         int i;
  44.         char booknum[10];
  45.         printf("请输入要借阅的书号");
  46.         scanf("%s",booknum);
  47.         for(i=0;i<5;i++)
  48.         {
  49.                 if(strcmp(booknum,book[i].book_num)==0)
  50.                 {
  51.                         if(book[i].flag==0)
  52.                                 printf("这本书已经借出!\n");
  53.                         else
  54.                         {
  55.                                 book[i].flag=0;
  56.               printf("借出日期填写:(请按年/月/日的顺序,如2019/9/8)\n");
  57.                           scanf("%d/%d/%d",&book[i].date.year,&book[i].date.month,&book[i].date.day);
  58.                           break;
  59.                         }
  60.                 }
  61.         }
  62.     for(i=0;i<5;i++)
  63.                 if(strcmp(num,card[i].card_num)==0)
  64.                 { card[i].book_totle=card[i].book_totle+1;
  65.                 break;
  66.                 }
  67.                 printf("1.确认并返回菜单 2.确认信息并退出\n");
  68.                 scanf("%d",&i);
  69.                 if(i==1)menu();
  70.                 else exit(0);
  71. }
  72. void returnbook()
  73. {
  74. int i;
  75.         char booknum[10];
  76.         printf("请输入要还的书号");
  77.         scanf("%s",booknum);
  78.         for(i=0;i<5;i++)
  79.         {
  80.                 if(strcmp(booknum,book[i].book_num)==0)
  81.                 {
  82.                    book[i].flag=1;
  83.                    break;
  84.                 }
  85.                 if(i>=5)
  86.                         printf("卡号输入错误!");
  87.                 for(i=0;i<5;i++)
  88.                 if(strcmp(num,card[i].card_num)==0)
  89.                 {
  90.                         card[i].book_totle=card[i].book_totle+1;
  91.                     break;
  92.                 }
  93.                 printf("1.确认并返回菜单 2.确认信息并退出\n");
  94.                 scanf("%d",&i);
  95.                 if(i==1)menu();
  96.                 else exit(0);
  97.         }

  98. }
  99.        
  100. void bookinquiry()
  101. {
  102.         int i;
  103.         char booknum[10];
  104.         printf("请输入要查询的书号:");
  105.         scanf("%s",booknum);
  106.         for(i=0;i<5;i++)
  107.                 if(strcmp(booknum,book[i].book_num)==0)
  108.                 {
  109.         printf("编号  书名  借出日期  状态\n");
  110.         printf("%s %s",book[i].book_num,book[i].book_name);
  111.         printf("%4d年%2d月%2d日",book[i].date.year,book[i].date.month,book[i].date.day);
  112.         if(book[i].flag==1)
  113.                                 printf("未借出!\n");
  114.                         else
  115.                         printf("已借出!\n");
  116.         }
  117.          
  118.                  printf("书号不存在\n");
  119.         printf("1.确认并返回菜单 2.确认信息并退出\n");
  120.                 scanf("%d",&i);
  121.                 if(i==1)
  122.                         menu();
  123.                 else
  124.                         exit(0);
  125.        
  126. }

  127. void bookin()

  128. {
  129.     int i,m=0;
  130.     char ch[2];
  131.     FILE *fp;
  132.     if((fp=fopen("data","ab+"))==NULL)
  133.     {
  134.         printf("不能打开文件!\n");
  135.         return;
  136.     }
  137.     while(!feof(fp))
  138.     {
  139.         if(fread(&book[m] ,LEN,1,fp)==1)
  140.             m++;
  141.     }
  142.     fclose(fp);
  143.    
  144.    
  145.     if((fp=fopen("data","wb"))==NULL)
  146.     {
  147.         printf("不能打开文件!\n");
  148.         return;
  149.     }
  150.     for(i=0;i<m;i++)
  151.         fwrite(&book[i] ,LEN,1,fp);
  152.     printf("是否输入?(y/n):");
  153.     scanf("%s",ch);
  154.     while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
  155.     {
  156.         printf("图书编号:");
  157.         scanf("%s",book[m].book_num);
  158.         for(i=0;i<m;i++)
  159.             if (strcmp(book[m].book_num, book[i].book_num) == 0)
  160.             {
  161.                 printf("该记录已经存在\n");
  162.                 printf("1.确认并返回菜单 2.确认信息并退出\n");
  163.                         scanf("%d",&i);
  164.                 if(i==1)
  165.                         menu();
  166.                 else
  167.                         exit(0);
  168.             }
  169.             printf("书名:");
  170.             scanf("%s",book[m].book_name);  
  171.               
  172.             
  173.             if(fwrite(&book[m],LEN,1,fp)!=1)  
  174.             {
  175.                 printf("不能保存!");
  176.                 getch();
  177.             }
  178.             else
  179.             {
  180.                 printf("%s 已经保存!\n",book[m].book_name);
  181.                 m++;
  182.             }
  183.             printf("是否继续?(y/n):");
  184.             scanf("%s",ch);
  185.     }
  186.     fclose(fp);
  187.     printf("OK!\n");
  188.                 printf("1.确认并返回菜单 2.确认信息并退出\n");
  189.                 scanf("%d",&i);
  190.                 if(i==1)
  191.                         menu();
  192.                 else
  193.                         exit(0);
  194. }









  195. void delbook()
  196. {
  197.     FILE *fp;
  198.     int i, j, m = 0;
  199.     char snum[10];                                                
  200.     char ch[2];
  201.     if ((fp = fopen("data", "ab+")) == NULL)
  202.     {
  203.         printf("不能打开文件\n");
  204.         return;
  205.     }
  206.     while (!feof(fp))
  207.         if (fread(&book[m], LEN, 1, fp) == 1)
  208.             m++;
  209.     fclose(fp);

  210.     printf("请输入编号:");
  211.     scanf("%s", snum);
  212.     for (i = 0; i<5; i++)
  213.         if (strcmp(snum, book[i].book_num) == 0)
  214.         {                                                                  
  215.             printf("已经找到该记录,是否删除?(y/n)");
  216.             break;                                                      
  217.         }                                                                  
  218.     scanf("%s", ch);
  219.     if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)
  220.     {
  221.         for (j = i; j<m; j++)
  222.             book[j] = book[j + 1];
  223.         m--;                                            
  224.         printf("成功删除!\n");
  225.     }
  226.     if ((fp = fopen("data", "wb")) == NULL)
  227.     {
  228.         printf("不能打开!\n");
  229.         return;
  230.     }
  231.     for (j = 0; j<m; j++)
  232.         if (fwrite(&book[j], LEN, 1, fp) != 1)
  233.         {
  234.             printf("不能保存!\n");
  235.             getch();
  236.         }
  237.     fclose(fp);
  238.     printf("1.确认并返回菜单 2.确认信息并退出\n");
  239.     scanf("%d", &i);
  240.     if (i == 1)
  241.         menu();
  242.     else
  243.         exit(0);
  244. }


  245. void readerinquiry()
  246. {
  247.         int i;
  248.         char studentname[20];
  249.         printf("请输入要查询的读者");
  250.         scanf("%s",studentname);
  251.         for(i=0;i<5;i++)
  252.         if(strcmp(studentname,card[i].student_name)==0)
  253.                 {
  254.         printf("借书证号  姓名  书名  借出日期  \n");

  255.         printf("%s %s %s",card[i].card_num,card[i].student_name,book[i].book_name);
  256.         printf("%4d年%2d月%2d日\n",book[i].date.year,book[i].date.month,book[i].date.day);
  257.        
  258.         }

  259.         printf("1.确认并返回菜单 2.确认信息并退出\n");
  260.                 scanf("%d",&i);
  261.                 if(i==1)menu();
  262.                 else exit(0);
  263. }
  264. void readerin()

  265. {
  266.     int i,m=0;
  267.     char ch[2];
  268.     FILE *fp;
  269.     if((fp=fopen("data","ab+"))==NULL)
  270.     {
  271.         printf("不能打开文件!\n");
  272.         return;
  273.     }
  274.     while(!feof(fp))
  275.     {
  276.         if(fread(&card[m] ,LEN,1,fp)==1)
  277.             m++;
  278.     }
  279.     fclose(fp);
  280.    
  281.    
  282.     if((fp=fopen("data","wb"))==NULL)
  283.     {
  284.         printf("不能打开文件!\n");
  285.         return;
  286.     }
  287.     for(i=0;i<m;i++)
  288.         fwrite(&card[i] ,LEN,1,fp);
  289.     printf("是否输入?(y/n):");
  290.     scanf("%s",ch);
  291.     while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
  292.     {
  293.         printf("学号:");
  294.         scanf("%s",card[m].card_num);
  295.         for(i=0;i<m;i++)
  296.             if (strcmp(card[m].card_num, card[i].card_num) == 0)
  297.             {
  298.                 printf("该记录已经存在\n");
  299.                 printf("1.确认并返回菜单 2.确认信息并退出\n");
  300.                         scanf("%d",&i);
  301.                 if(i==1)
  302.                         menu();
  303.                 else
  304.                         exit(0);
  305.             }
  306.             printf("姓名:");
  307.             scanf("%s",card[m].student_name);  
  308.               
  309.             
  310.             if(fwrite(&card[m],LEN,1,fp)!=1)  
  311.             {
  312.                 printf("不能保存!");
  313.                 getch();
  314.             }
  315.             else
  316.             {
  317.                 printf("%s 已经保存!\n",card[m].student_name);
  318.                 m++;
  319.             }
  320.             printf("是否继续?(y/n):");
  321.             scanf("%s",ch);
  322.     }
  323.     fclose(fp);
  324.     printf("OK!\n");
  325.                 printf("1.确认并返回菜单 2.确认信息并退出\n");
  326.                 scanf("%d",&i);
  327.                 if(i==1)
  328.                         menu();
  329.                 else
  330.                         exit(0);
  331. }
  332. void delreader()
  333. {
  334.     FILE *fp;
  335.     int i, j, m = 0;
  336.     char num[10];                                                
  337.     char ch[2];
  338.     if ((fp = fopen("data", "ab+")) == NULL)
  339.     {
  340.         printf("不能打开文件\n");
  341.         return;
  342.     }
  343.     while (!feof(fp))
  344.         if (fread(&card[m], LEN, 1, fp) == 1)
  345.             m++;
  346.     fclose(fp);

  347.     printf("请输入编号:");
  348.     scanf("%s", num);
  349.     for (i = 0; i<5; i++)
  350.         if (strcmp(num, card[i].card_num) == 0)
  351.         {                                                                  
  352.             printf("已经找到该记录,是否删除?(y/n)");
  353.             break;                                                      
  354.         }                                                                  
  355.     scanf("%s", ch);
  356.     if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)
  357.     {
  358.         for (j = i; j<m; j++)
  359.             card[j] = card[j + 1];
  360.         m--;                                            
  361.         printf("成功删除!\n");
  362.     }
  363.     if ((fp = fopen("data", "wb")) == NULL)
  364.     {
  365.         printf("不能打开!\n");
  366.         return;
  367.     }
  368.    
  369.     fclose(fp);
  370.     printf("1.确认并返回菜单 2.确认信息并退出\n");
  371.     scanf("%d", &i);
  372.     if (i == 1)
  373.         menu();
  374.     else
  375.         exit(0);
  376. }


  377. void reborrow()
  378. {
  379.         int i;
  380.         char booknum[10];
  381.         printf("请输入要续借的书号");
  382.         scanf("%s",booknum);
  383.         for(i=0;i<5;i++)
  384.         if(strcmp(booknum,book[i].book_num)==0)
  385.         {
  386.         printf("编号  书名  借出日期  状态\n");
  387.         printf("%s %s",book[i].book_num,book[i].book_name);
  388.         printf("%4d年%2d月%2d日",book[i].date.year,book[i].date.month,book[i].date.day);
  389.        
  390.         if(book[i].flag==1)
  391.             printf("不能续借!\n");
  392.                         else
  393.                                 printf("可以续借!\n");
  394.         }

  395.                         printf("1.确认续借    2.取消续借");
  396.                         scanf("%d",&i);
  397.              if(i==1)
  398.                 {
  399.                book[i].flag=0;
  400.              printf("续借日期填写:(请按年/月/日的顺序,如2019/9/8)\n");
  401.                     scanf("%d/%d/%d",&book[i].date.year,&book[i].date.month,&book[i].date.day);
  402.                           
  403.                 }
  404.                 else
  405.                 printf("1.确认并返回菜单 2.确认信息并退出\n");
  406.                 scanf("%d",&i);
  407.                 if(i==1)menu();
  408.                 else exit(0);
  409. }
  410. void show()     
  411. {
  412.    
  413.     int i;
  414.    
  415.     printf("学号           姓名           书号           书名\t\n");
  416.     for(i=0;i<10;i++)
  417.     printf(FORMAT,DATA);

  418.                 printf("1.确认并返回菜单 2.确认信息并退出\n");
  419.                 scanf("%d",&i);
  420.                 if(i==1)
  421.                         menu();
  422.                 else
  423.                         exit(0);
  424. }


  425. void menu()
  426. {
  427.         int n;
  428.         printf("~~~欢迎使用本校图书管理系统~~~\n");
  429.         printf("*******************************\n");
  430.         printf("1.借书\n");
  431.         printf("2.还书\n");
  432.         printf("3.图书查询\n");
  433.         printf("4.新书上架\n");
  434.     printf("5.旧书下架\n");
  435.         printf("6.读者查询\n");
  436.         printf("7.添加读者\n");
  437.         printf("8.删除读者\n");
  438.         printf("9.续借\n");
  439.         printf("10.显示\n");
  440.     printf("11.退出\n");
  441.         printf("请选择以上选项:\n");
  442.         printf("*******************************\n");
  443.         scanf("%d",&n);
  444.         switch(n)
  445.         {
  446.         case 1:borrowbook();break;
  447.         case 2:returnbook();break;
  448.         case 3:bookinquiry();break;
  449.         case 4:bookin();break;
  450.     case 5:delbook();break;
  451.         case 6:readerinquiry();break;
  452.         case 7:readerin();break;
  453.         case 8:delreader();break;
  454.         case 9:reborrow();break;
  455.         case 10:show();break;
  456.         case 11:exit(0);break;

  457.     default:printf("输入错误,退出\n");exit(0);break;
  458.         }

  459. }

  460. void main()
  461. {   
  462.         int i;
  463.         char num[10];
  464.         printf("请输入你的卡号");
  465.         scanf("%s",num);
  466.         for(i=0;i<5;i++)
  467.         if(strcmp(num,card[i].card_num)==0)
  468.                 break;
  469.         if(i>=5)
  470.         {
  471.                 printf("卡号不存在!");
  472.                 exit(0);
  473.         }
  474. else
  475.         menu();
  476.          
  477. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-27 22:30:16 | 显示全部楼层
本帖最后由 superbe 于 2019-12-27 22:36 编辑

可能是data文件和数组数据不一致导致的,实际上并没有从数组中删除掉。
例如data文件为空,delBook()函数里
if (fread(&book[m], LEN, 1, fp) == 1)  
    m++;
读取不成功,m值为0,所以
for (j = i; j<m; j++)
    book[j] = book[j + 1];
j<m不成立,没有执行。

这是书上的一个程序可以参考,和你的需求有点类似。这个代码开始就从文件中读取数据,如果文件为空就输入新数据,并保存到文件。以后每次读取文件都是最新数据,输入的新数据会追加到文件末尾,数组数据和文件是保持一致的。

  1. /* booksave.c -- 在文件中保存结构的内容 */
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #define MAXTITL  40
  6. #define MAXAUTL  40
  7. #define MAXBKS   10             /* 最大书籍数量 */
  8. char * s_gets(char * st, int n);
  9. struct book {                   /* book结构  */
  10.     char title[MAXTITL];
  11.     char author[MAXAUTL];
  12.     float value;
  13. };

  14. int main(void)
  15. {
  16.     struct book library[MAXBKS]; /* 结构数组  */
  17.     int count = 0;
  18.     int index, filecount;
  19.     FILE * pbooks;
  20.     int size = sizeof (struct book);
  21.    
  22.     if ((pbooks = fopen("book.dat", "a+b")) == NULL)
  23.     {
  24.         fputs("Can't open book.dat file\n",stderr);
  25.         exit(1);
  26.     }
  27.    
  28.     rewind(pbooks);            /* 定位到文件开始  */
  29.     while (count < MAXBKS &&  fread(&library[count], size,
  30.                                     1, pbooks) == 1)
  31.     {
  32.         if (count == 0)
  33.             puts("Current contents of book.dat:");
  34.         printf("%s by %s: $%.2f\n",library[count].title,
  35.                library[count].author, library[count].value);
  36.         count++;
  37.     }
  38.     filecount = count;
  39.     if (count == MAXBKS)
  40.     {
  41.         fputs("The book.dat file is full.", stderr);
  42.         exit(2);
  43.     }
  44.    
  45.     puts("Please add new book titles.");
  46.     puts("Press [enter] at the start of a line to stop.");
  47.     while (count < MAXBKS && s_gets(library[count].title, MAXTITL) != NULL
  48.            && library[count].title[0] != '\0')
  49.     {
  50.         puts("Now enter the author.");
  51.         s_gets(library[count].author, MAXAUTL);
  52.         puts("Now enter the value.");
  53.         scanf("%f", &library[count++].value);
  54.         while (getchar() != '\n')
  55.             continue;                /* 清理输入行  */
  56.         if (count < MAXBKS)
  57.             puts("Enter the next title.");
  58.     }
  59.    
  60.     if (count > 0)
  61.     {
  62.         puts("Here is the list of your books:");
  63.         for (index = 0; index < count; index++)
  64.             printf("%s by %s: $%.2f\n",library[index].title,
  65.                    library[index].author, library[index].value);
  66.         fwrite(&library[filecount], size, count - filecount,
  67.                pbooks);
  68.     }
  69.     else
  70.             puts("No books? Too bad.\n");
  71.    
  72.     puts("Bye.\n");
  73.     fclose(pbooks);
  74.    
  75.     return 0;
  76. }

  77. char * s_gets(char * st, int n)
  78. {
  79.     char * ret_val;
  80.     char * find;
  81.    
  82.     ret_val = fgets(st, n, stdin);
  83.     if (ret_val)
  84.     {
  85.         find = strchr(st, '\n');   // look for newline
  86.         if (find)                  // if the address is not NULL,
  87.             *find = '\0';          // place a null character there
  88.         else
  89.             while (getchar() != '\n')
  90.                 continue;          // dispose of rest of line
  91.     }
  92.     return ret_val;
  93. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-13 16:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表