学生管理系统中的文件操作
来源:互联网 发布:vue2.js v html 编辑:程序博客网 时间:2024/06/03 16:38
这两天敲一个小例子——学生信息管理系统,其中需要用到对学习信息的保存和读取操作,这些有关文件操作如下:
1、将文件的信息读取到变量中
<span style="font-family:KaiTi_GB2312;font-size:24px;">//从文件d:/student.bin读取信息到变量中void readfile( FILE *fp, int &StuAmount, Stu Student[] ){if((fp=fopen("d:/student.bin","r"))==NULL) //判断是否打开文件{if((fp=fopen("d:/student.bin","w"))==NULL){printf("\n\t\t文件student.bin不存在。\n");printf("\n\t\t文件student.bin建立失败,程序中断。");exit(0);}}fseek(fp,0,2); //文件位置指针移动到文件末尾。if(ftell(fp)>0) //文件不为空。{rewind(fp); //文件位置指针移动到文件开始位置。for(StuAmount=0;!feof(fp) && fread(&Student[StuAmount],sizeof(struct Stuinfo),1,fp);StuAmount++); //文件导入。}}</span>
fopen函数:该函数原型为FILE * fopen(const char * path,const char * mode);第一个参数为文件的路径和文件名,第二个参数为打开的方式选择。函数打开文件成功会返回一个指向文件的指针,失败会返回NULL。对于打开文件的方式有:r:只读的方式。w:只写方式,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。a:追加方式,若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾。r+、w+、a+:是针对可读写文件,作用同上方r、w、a,说明:具体的情况有时要看相应的编译器。
fseek函数:该函数的功能为重定位文件内部位置指针,其函数原型为:int fseek(FILE *stream, long offset, int fromwhere)。如果执行成功stream将指向以fromwhere为基准,偏移offset个字节的位置;针对fromwhere可以用0代表文件头,1代表当前位置,2代表文件末尾。
ftell函数:该函数的原型为:longftell(FILE *stream);其功能为返回文件位置指针当前位置相对于文件首的偏移字节数。
rewind函数:用于将文件内部的指针重新指向一个文件开始位置。
feof函数:用来判断文件是否结束,如果遇到文件结束,函数返回值值为非零值,否则为0。
fread函数:该函数的原型为:size_t fread( void * buffer, size_t size,size_t count, FILE * stream );第一个参数为开始读入数据的内存地址,第二个参数说明每个数据项的大小,第三个参数指明要读入多少个数据项,第四个参数指明数据流。
2、文件的写入
<span style="font-family:KaiTi_GB2312;font-size:24px;">//文件写入void writeToFile(FILE *fp, int StuAmount, Stu Student[]){int i;if((fp=fopen("d:/student.bin","w"))==NULL){printf("\n\t\t文件打开失败");exit(0);}for(i=0;i<StuAmount;i++){if(fwrite(&Student[i],sizeof(struct Stuinfo),1,fp)!=1){printf("\n\t\t写入文件错误!\n");}}fclose(fp);printf("\n\t\t通讯录文件已保存在d:/student.bin中。");}</span>
fwrite函数:该函数用来向文件写入一个数据块。函数原型为:size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);该函数的用法与上边的fread是相似的。
fclose函数:用来关闭一个文件流,它可以对文件最后的缓冲区做好释放等相关的处理操作。
3、学生信息保存
<span style="font-family:KaiTi_GB2312;font-size:24px;">//将学生信息保存到d:/学生成绩统计.txt中(从OutputStuNo开始打印,StuAmount学生总数,OutputAmount需要打印的学生数目。)void OutputOne(int OutputStuNo,Stu Student[],int StuAmount,int OutputAmount){FILE *fp;if((fp=fopen("d:/学生成绩信息统计.txt","wb"))==NULL){printf("Can not open \"d:/学生成绩信息统计.txt\".\n");fclose(fp);return ;}fprintf(fp,"\n 学生成绩表\n\n");fprintf(fp," 学号 姓名 数学 外语 计算机 C语言 语文 平均成绩 名次\n");for(int i=OutputStuNo;i<OutputAmount;i++)fprintf(fp," %8d %8s %7d %7d %7d %7d %7d %7d %7d\n",Student[i].StuNo,Student[i].StuName,Student[i].StuMathScore,Student[i].StuEnglishScore,Student[i].StuComputerScore,Student[i].StuCPramScore,Student[i].StuChineseScore,Student[i].StuAverScore,Student[i].StuPlace );fclose(fp);printf("Student's data have saved into \"d:/学生成绩信息统计.txt\".\n");}</span>
- 学生管理系统中的文件操作
- 学生管理系统(文件)
- 简易学生管理系统(IO流、文件、)
- 学生管理系统(文件流)
- Android 学生管理系统 之 SQLite数据库操作
- 关于学生管理系统的简单操作(数据库应用)
- 一个学生管理系统
- 学生同学录管理系统
- 学生管理系统
- 销售学生管理系统
- 学生通讯管理系统
- 学生管理系统
- 学生管理系统
- 学生管理系统
- 学生管理系统
- 学生学籍管理系统
- 学生管理系统
- 学生通讯录管理系统
- 哈希表概述
- 录制web出现问题
- 在android上的车牌识别
- java异常概念及其处理
- monkey测试
- 学生管理系统中的文件操作
- 数组和链表的优缺点
- AIDL总结
- EBS Form: 有tab和无tab 的Foder Form 开发
- AIDL总结
- STL中迭代器失效问题
- 欢迎使用CSDN-markdown编辑器
- HDOJ吃糖果
- 开源中国iPhone客户端源码