第九节 保存程序数据.ppt
文本预览下载声明
主要内容 案例:将“学生信息管理系统”的学生信息进行永久保存 使用文件保存学生信息 案例实施 学生练习 拓展 小结 案例:保存学生信息 在本章,将继续完善“学生信息管理系统”案例程序。本章可以实现对学生完整信息的长期保存,能将学生的基本信息保存在磁盘上。当需要的时候可以从磁盘上读出数据,当数据被修改的时候,能重新写回磁盘,保证磁盘上的数据和内存数据一致。具体包括: (1)将学生的完整信息保存在磁盘的指定位置; (2)在程序运行的时候可以加载指定文件中的学生信息; 使用文件保存学生信息-文件概念 它一般指存储在外部介质上数据的集合。操作系统是以文件为单位对数据进行管理的。 根据文件的组织形式,C语言将文件分为文本文件和二进制文件两种。 按文本文件存放数据时,每个字符占一个字节,并且按其ASCII码存储到文件中,所以文本文件也称为ASCII文件。它的每个字节放一个ASCII代码,代表一个字符。 按二进制文件存放数据,其存放形式与数据在内存中的存储形式相同,也就是说数据是按其在内存中的存储形式原样输出到磁盘上存放。所以不需要转换,从而可以提高效率而且也能节省存储空间。 在C语言中,对文件的读写都是通过库函数实现的。 使用文件保存学生信息-文件操作 文件的处理必须包括: 打开文件 读或写文件、 关闭文件 使用文件保存学生信息-打开文件 标准输入输出函数,用fopen() 函数来实现打开文件。 fopen函数的调用方式通常是: FILE *fs; fs=fopen(文件名,打开模式); 其中 fs是一个文件指针,文件指针是FILE类型,FILE类型已由系统声明,可直接使用。通过文件指针,可以对它所指向的文件进行各种操作。 fopen是一个系统函数,有两个参数,其中文件名包括文件所在的全部路径,路径的分隔符\应采用转义字符的形式。文件可以是文本文件,也可以是二进制文件。 打开模式是指定所要打开的文件读写方式,打开模式要用小写,并且要用双引号括起来 使用文件保存学生信息-打开文件 使用文件保存学生信息-打开文件 如果不能实现“打开”文件的任务,fopen函数将会带回一个出错信息,出错的原因可能是用“r”方式打开一个并不存在的文件;磁盘出故障;磁盘已经满了,无法建立一个新文件等。此时fopen函数将带回一个空指针值NULL。常常用下面的方法打开一个文件: if((fs=fopen(file1, r))==NULL) { printf(cannot open this file\n); exit(0); } 使用文件保存学生信息-读写文件 fread函数和fwrite函数,一般调用形式为: fread(buffer,size,count,fs); fwrite(buffer,size,count,fs); 其中:buffer是一个指针,对fread来说,它是读入数据的存放地址,对fwrite来说,它是要输出数据的地址,都是指起始地址。 size要读写的字节数。 count要进行读写多少个size字节的数据项。 fs文件类型的指针。 使用文件保存学生信息-读写文件 Student *stu; stu = (Student *)malloc(total*sizeof(Student)); 假设学生的数据已经存放在磁盘文件中,并且存放了current个学生的信息,这时可以用下面的for语句和 fread函数读入current个学生的数据: for(i=0;icurrent;i++) fread((stu+i), sizeof(Student), 1, fs); 可以用fwrite函数把内存中的学生数据输出到磁盘文件中去: for(i=0;icurrent;i++) fwrite((stu+i), sizeof(Student), 1, fs); 使用文件保存学生信息-读写文件 fseek函数可以实现改变文件的位置指针。调用形式为: fseek(文件指针,位移量,起始点) 其中起始点用0、1和2代替,0代表“文件的开始”,1代表“当前位置”,2代表“文件的末尾”位移量是指以“起始点”为基点,向前移动的字节数(该位移量可以为正数,也可以是负数)。 ANSI C要求位移量是long型数据,这样当文件的长度大于64K时不会出问题。ANSI C标准规定在数字的末尾加一个字母L,表示是long型。 同时fseek函数一般用于二进制文件,因为文本文件要发生字符转换,计算位置时往往发生混乱。 可以用: succ = fseek(fs, 0, SEEK_END);使得fseek函数返回文件的末尾。 使用文件保
显示全部