《保存程序数据》PPT课件.ppt

上传人:tia****nde 文档编号:12710025 上传时间:2020-05-15 格式:PPT 页数:22 大小:346.50KB
返回 下载 相关 举报
《保存程序数据》PPT课件.ppt_第1页
第1页 / 共22页
《保存程序数据》PPT课件.ppt_第2页
第2页 / 共22页
《保存程序数据》PPT课件.ppt_第3页
第3页 / 共22页
点击查看更多>>
资源描述
第九章保存程序数据,主要内容,案例:将“学生信息管理系统”的学生信息进行永久保存使用文件保存学生信息案例实施学生练习拓展小结,在本章,将继续完善“学生信息管理系统”案例程序。本章可以实现对学生完整信息的长期保存,能将学生的基本信息保存在磁盘上。当需要的时候可以从磁盘上读出数据,当数据被修改的时候,能重新写回磁盘,保证磁盘上的数据和内存数据一致。具体包括:(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(cannotopenthisfilen);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代表“文件的末尾”位移量是指以“起始点”为基点,向前移动的字节数(该位移量可以为正数,也可以是负数)。ANSIC要求位移量是long型数据,这样当文件的长度大于64K时不会出问题。ANSIC标准规定在数字的末尾加一个字母L,表示是long型。同时fseek函数一般用于二进制文件,因为文本文件要发生字符转换,计算位置时往往发生混乱。可以用:succ=fseek(fs,0,SEEK_END);使得fseek函数返回文件的末尾。,使用文件保存学生信息-读写文件,ftell()函数的作用是得到文件中的当前位置,用相对于文件开头的位移量来表示。由于文件中的位置指针经常移动,人们往往不容易知道当前的位置。用ftell函数可以得到当前的位置,如果ftell函数返回值为-1L,表示出错。如:i=ftell(fs);if(i=-1l)printf(errorn);,使用文件保存学生信息-读写文件,在使用完一个文件后应该关闭它,以防止它再被误用。“关闭文件”就是使文件指针变量不指向该文件,也就是文件指针变量与文件“脱钩”,此后不能再通过该指针对原来与其相联系的文件进行读写操作。除非再次打开,使该指针变量重新指向该文件。用fclose函数关闭文件。fclose函数的调用形式为:fclose(文件指针);fclose函数也带回一个值,当顺利地执行了关闭操作,则返回值为0,否则返回为EOF(-1)。前面曾经把打开文件(用fopen函数)时所带回的指针赋给了fs,今通过fs把该文件关闭,使其不再指向该文件。在编写程序的时候,应该养成在程序终止之前关闭所有文件的习惯,如果不关闭文件将可能造成数据的丢失。,使用文件保存学生信息-关闭文件,intsave()intcount;FILE*fs;fs=fopen(StudentData.dat,wb);if(fs=NULL)printf(不能打开文件n);return1;count=fwrite(stu,sizeof(Student),current,fs);fclose(fs);if(count!=current)printf(保存失败n);return1;printf(保存成功n);return0;,案例实施-使用文件保存学生信息,intload()FILE*fs;intcount;intsucc;fs=fopen(StudentData.dat,rb);if(fs=NULL)printf(不能打开文件n);return1;succ=fseek(fs,0,SEEK_END);if(succ!=0)printf(文件操作失败n);fclose(fs);return1;count=ftell(fs);fseek(fs,0,SEEK_SET);current=count/sizeof(Student);count=fread(stu,sizeof(Student),current,fs);fclose(fs);if(count!=current)printf(读文件失败n);return1;printf(读文件成功n);return0;,案例实施-使用文件保存学生信息,到现在为止,已经完成对学生信息进行永久保存了,即将学生的完整信息以指定的文件名保存到磁盘上指定的位置。同时也可以将磁盘上文件中的学生信息读入。现在到了你们完成图书信息管理系统中的数据保存和加载的时候了。继续完善你的案例程序,使之可以将图书信息在磁盘上进行长期保存,同时又可以将磁盘上文件的信息读入。具体要求:(1)编写能保存图书信息的案例程序;(2)编写能加载图书信息的案例程序;(3)在CodeBlocks环境下调试你的程序,使之正确运行。,学生练习,拓展-open函数,open()函数的作用是打开文件,其调用格式为:intopen(constchar*path,intaccess,unsignedmode);参数path是要打开的文件名,access是打开的模式,mode是修饰符,可选项。表示文件的属性,修饰符可以有多个,但基本模式只能有一个。文件open()函数打开成功,返回值就是文件描述字的值(非负值),否则返回-1。比如在案例程序“学生信息管理系统”中要在磁盘上保存学生信息。如果以StudentData.dat文件名保存在当前路径下,并且是以二进制文件保存。则基本模式为O_WRONLY。其打开文件代码为:fhandle=open(StudentData.dat,O_WRONLY|O_CREAT|O_TRUNC);如果现在想读取上面存储的学生信息,这个时候首先是以只读方式打开数据库文件。其代码是:fhandle=open(StudentData.dat,O_RDONLY);,拓展-write函数,write函数写一块数据到文件中。其调用格式为:intwrite(inthandle,void*buf,unsignedlen);参数buf读出的数据,len是写入的字节,函数返回实际写入的字节。如上面打开了文件,同时open函数的返回值赋给了整形变量fhandle。学生数据保存在结构体数组stu中,学生数目为current个,则把学生信息写入打开的数据库文件中的代码为:write(fhandle,stu,sizeof(Student)*current);,拓展-read函数,read()从文件读取一块数据。其调用格式为:intread(inthandle,void*buf,unsignedlen);参数buf保存读出的数据,len是读取的字节。函数返回实际读出的字节。同样可以把刚刚保存的学生信息从新加载。则代码为:read(fhandle,stu,sizeof(Student)*current);,拓展-lseek函数,lseek()函数定位到指定的位置,其调用格式为:longlseek(inthandle,longoffset,intfromwhere);参数offset是移动的量,fromwhere是移动的基准位置,取值和前面讲的fseek()一样,SEEK_SET:文件首部;SEEK_CUR:文件当前位置;SEEK_END:文件尾。此函数返回执行后文件新的存取位置。,拓展-close函数,同样的,当打开了文件不用的时候,也需要关闭文件,在这里关闭文件使用close函数。close()关闭一个句柄,其调用格式为:intclose(inthandle);同样,在前面的open函数中,调用它打开一个文件,同时返回一个句柄,赋给了变量fhandle。现在就可以通过close函数来关闭文件。其代码是:close(fhandle);,本章介绍了C语言程序设计的文件操作,并应用文件操作完善了案例程序“学生信息管理系统”的设计,通过使用文件操作实现了对学生信息的长期保存以及保存数据如何加载。文件是C语言中很重要的内容,在许多实际的C程序中都包含文件处理。希望学生在实践中掌握文件的使用。,小结,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!