[关闭]
@SuHongjun 2020-05-27T01:52:03.000000Z 字数 3501 阅读 416

C语言-Day 21 - 文件操作3、综合作业StartKit(1)

C语言 2020春季学期


二进制文件的读写fread()、fwrite()

  1. size_t fread(void *buffer, size_t size, size_t count, FILE * stream);
  2. size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
  3. 参数:
  4. ptr -- 这是指向要被写入的元素数组的指针。
  5. size -- 这是要被写入的每个元素的大小,以字节为单位。
  6. nmemb -- 这是元素的个数,每个元素的大小为 size 字节。
  7. stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流。
  8. #include "stdio.h"
  9. main()
  10. {
  11. int a[5]={1,2,3,4,5}, iRet;
  12. FILE *fp;
  13. fp = fopen("I:\\二进制int.dat","wb");
  14. if(fp != NULL)
  15. {
  16. iRet = fwrite(a, sizeof(int), 5, fp); //fwrite()应用示例
  17. fclose(fp);
  18. }
  19. }
  1. #include "stdio.h"
  2. main()
  3. {
  4. int a[5]={1,2,3,4,5}, iRet, i;
  5. int b[5]={0};
  6. FILE *fp;
  7. fp = fopen("I:\\二进制int.dat","wb"); //写二进制文件
  8. if(fp != NULL)
  9. {
  10. iRet = fwrite(a, sizeof(int), 5, fp);
  11. fclose(fp);
  12. }
  13. fp = fopen("I:\\二进制int.dat","rb"); //读二进制文件
  14. if(fp != NULL)
  15. {
  16. iRet = fread(b, sizeof(int), 5, fp);
  17. fclose(fp);
  18. for(i=0; i<5; i++)
  19. printf("%d\t", b[i]);
  20. }
  21. }

文件操作综合示例

  1. #include "stdio.h"
  2. struct BOOK //结构体类型定义,BOOK是类型名,定义的新类型是:struct BOOK类型
  3. {
  4. char ISBN[50]; //结构体的成员
  5. char bookName[100];
  6. char author[100];
  7. float price;
  8. int soldCount;
  9. };
  10. void InputBookInfo(struct BOOK *b);
  11. void outPutToScreen(struct BOOK *b);
  12. void outPutToTxt(struct BOOK *b);
  13. void outPutToDB(struct BOOK *b);
  14. void GetBookInfoFromDB(struct BOOK *b);
  15. main()
  16. {
  17. struct BOOK b[100]; //b是一个结构体数组,数组元素的类型是:struct BOOK
  18. GetBookInfoFromDB(b);
  19. //InputBookInfo(b);
  20. outPutToScreen(b);
  21. outPutToTxt(b);
  22. outPutToDB(b);
  23. }
  24. void GetBookInfoFromDB(struct BOOK *b)
  25. {
  26. FILE *fp;
  27. int i;
  28. fp = fopen("I:\\books.db","rb");
  29. fread(b,sizeof(struct BOOK),3,fp);
  30. fclose(fp);
  31. }
  32. void InputBookInfo(struct BOOK *b)
  33. {
  34. int i;
  35. char buff[100];
  36. printf("请录入图书信息:\n");
  37. for(i=0; i<3; i++)
  38. {
  39. printf("第%d本书--ISBN:",i+1);
  40. gets(b[i].ISBN); //b[i].ISBN 是数组名
  41. printf("第%d本书--书名:",i+1);
  42. gets(b[i].bookName); //b[i].bookName 是数组名
  43. printf("第%d本书--作者:",i+1);
  44. gets(b[i].author); //b[i].author 是数组名
  45. printf("第%d本书--售价:",i+1);
  46. scanf("%f",&b[i].price); //b[i].price 是float型
  47. printf("第%d本书--售出数量:",i+1);
  48. scanf("%d",&b[i].soldCount); //b[i].soldCount 是int型
  49. gets(buff);
  50. }
  51. }
  52. void outPutToScreen(struct BOOK *b)
  53. {
  54. int i;
  55. printf("已录入的图书信息:\n");
  56. printf("===============================================================\n");
  57. printf(" ISBN\t\t书名\t作者\t售价\t售出数量\n");
  58. printf("---------------------------------------------------------------\n");
  59. for(i=0; i<3; i++)
  60. printf(" %s\t%s\t%s\t%.2f\t%5d\n",
  61. b[i].ISBN,
  62. b[i].bookName,
  63. b[i].author,
  64. b[i].price,
  65. b[i].soldCount);
  66. printf("===============================================================\n");
  67. }
  68. void outPutToDB(struct BOOK *b)
  69. {
  70. FILE *fp;
  71. int i;
  72. fp = fopen("I:\\books.db","wb");
  73. fwrite(b,sizeof(struct BOOK) ,3,fp);
  74. fclose(fp);
  75. }
  76. void outPutToTxt(struct BOOK *b)
  77. {
  78. FILE *fp;
  79. int i;
  80. fp = fopen("I:\\books.txt","wt");
  81. fprintf(fp,"已录入的图书信息:\n");
  82. fprintf(fp,"===============================================================\n");
  83. fprintf(fp," ISBN\t\t书名\t作者\t售价\t售出数量\n");
  84. fprintf(fp,"---------------------------------------------------------------\n");
  85. for(i=0; i<3; i++)
  86. fprintf(fp," %s\t%s\t%s\t%.2f\t%5d\n",
  87. b[i].ISBN,
  88. b[i].bookName,
  89. b[i].author,
  90. b[i].price,
  91. b[i].soldCount);
  92. fprintf(fp,"===============================================================\n");
  93. fclose(fp);
  94. }

综合作业:

分组:每组不超过3个人
"书友俱乐部" 管理系统
俱乐部的书由大家捐赠,捐书的人就获得会员资格,会员可以借阅俱乐部的书,可借数量:min(10,捐赠数量)
总体原则:基本符合实际、在一些细节上做合理假设和简化,避免过于复杂

系统分析:

上述信息的录入、保存、读取、查询显示、修改

起步:StartKit(1):

  1. #include "stdio.h"
  2. struct DATE
  3. {
  4. int year;
  5. int month;
  6. int day;
  7. };
  8. struct BOOK
  9. {
  10. char sh[30];
  11. char bookName[200];
  12. char author[200];
  13. struct DATE publishDate;
  14. float price;
  15. char No[30];
  16. int status; //0:在馆、1:借出、-1:报废
  17. };
  18. //.........???????
  19. main()
  20. {
  21. //.........???????
  22. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注