码迷,mamicode.com
首页 > 其他好文 > 详细

学生管理系统中的文件操作

时间:2015-05-27 17:29:32      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:c语言   编程   文件操作   

    这两天敲一个小例子——学生信息管理系统,其中需要用到对学习信息的保存和读取操作,这些有关文件操作如下:

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函数:该函数的原型为:long ftell(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>

学生管理系统中的文件操作

标签:c语言   编程   文件操作   

原文地址:http://blog.csdn.net/rcj183419/article/details/46047899

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!