C程序设计文件流实用教案

上传人:ni****g 文档编号:568557311 上传时间:2024-07-25 格式:PPT 页数:46 大小:797.50KB
返回 下载 相关 举报
C程序设计文件流实用教案_第1页
第1页 / 共46页
C程序设计文件流实用教案_第2页
第2页 / 共46页
C程序设计文件流实用教案_第3页
第3页 / 共46页
C程序设计文件流实用教案_第4页
第4页 / 共46页
C程序设计文件流实用教案_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《C程序设计文件流实用教案》由会员分享,可在线阅读,更多相关《C程序设计文件流实用教案(46页珍藏版)》请在金锄头文库上搜索。

1、1四四. . 教学过程教学过程(guchng)(guchng)提提要要文件和文件流的概念文件的打开、关闭和读写顺序(shnx)文件随机文件布置作业题目和实验第1页/共45页第一页,共46页。2内容提要(ni rn t yo)3.11文件(wnjin)流操作第2页/共45页第二页,共46页。3先看一个(y)例子:#includevoidmain()/程序(chngx)从这里开始运行ofstreamSaveFile(e:f1.txt);SaveFile”;而向一个文件写入数据,可以使用其put、write函数以及(yj)插入符“”;而向一个文件写入数据,可以使用put、write函数以及插入符“”

2、。第17页/共45页第十七页,共46页。18【例3.11-1】向顺序(shnx)文件的读写操作#include#include/文件操作(cozu)必须的头文件voidmain()fstreamfile1;/定义一个fstream类的对象用于读file1.open(Ex_DataFile.txt,ios:in);if(!file1)coutEx_DataFile.txt不能打开!n;return;fstreamfile2;/定义一个fstream类的对象用于写file2.open(Ex_DataFileBak.txt,ios:out|ios:trunc);第18页/共45页第十八页,共46页。

3、19if(!file2)coutEx_DataFileBak.txt不能创建!n;file1.close();return;charch;while(file1.get(ch)/或:file1.read(&ch,1)coutch;file2.write(&ch,1);/或:file2chfile2.close();/不要(byo)忘记文件使用结束后要及时关闭file1.close();第19页/共45页第十九页,共46页。20【例3.11-2】有一个整型数组,含10个元素,从键盘输入10个整数给数组,将此数组存到磁盘文件中.#include“fstream.h”intmain()inta10;

4、ofstreamoutfile(f1.dat,ios:out);/定义文件流对象,打开磁盘文件f1.datif(!outfile)/如果打开失败(shbi),outfile返回0值coutopenerror!endl;return(1);第20页/共45页第二十页,共46页。21coutenter10integernumbers:endl;for(inti=0;iai;outfileai;/向磁盘(cpn)文件输出数据outfile.close();/关闭磁盘(cpn)文件f1.datreturn0;第21页/共45页第二十一页,共46页。22运行情况如下运行情况如下: :enter10int

5、egernumbers:enter10integernumbers:1352461087913524610879 请注意请注意: :在向磁盘文件输出一个数据后,要输出一个在向磁盘文件输出一个数据后,要输出一个( (或或几个几个) )空格或换行符,以作为数据间的分隔,否则空格或换行符,以作为数据间的分隔,否则(fuz)(fuz)以后从磁盘文件读数据时,以后从磁盘文件读数据时,1010个整数的数字连个整数的数字连成一片无法区分。成一片无法区分。第22页/共45页第二十二页,共46页。23【例【例3.11_33.11_3】从例】从例3.11_23.11_2建立建立(jinl)(jinl)的数据文件的

6、数据文件f1.datf1.dat中读入中读入1010个个整数放在数组中,找出并输出整数放在数组中,找出并输出1010个数中的最大者和它在数组中的序个数中的最大者和它在数组中的序号。号。#include“fstream.h”#include“fstream.h”intmain()intmain()inta10,max,i,order;inta10,max,i,order;ifstreaminfile(“f1.dat”,ios:in|ios:nocreate);ifstreaminfile(“f1.dat”,ios:in|ios:nocreate);/ /定义输入文件流对象,以输入方式打开磁盘文件

7、定义输入文件流对象,以输入方式打开磁盘文件f1.datf1.datif(!infile)if(!infile)cout“openerror!”endl;cout“openerror!”endl;return(1);return(1);第23页/共45页第二十三页,共46页。24for(i=0;iai;/从磁盘文件读入10个整数,顺序存放(cnfng)在a数组中coutai;/在显示器上顺序显示10个数coutendl;max=a0;order=0;第24页/共45页第二十四页,共46页。25for(i=1;imax)max=ai;/将当前(dngqin)最大值放在max中order=i;/将当

8、前(dngqin)最大值的元素序号放在order中coutmax=maxendlorder=orderendl;infile.close();return0;第25页/共45页第二十五页,共46页。263.11.4随机(suj)文件操作随机文件操作,即在文件中通过C+相关的函数移动文件指针(zhzhn),并指向所要处理的字符(字节)。(1)在istream类中提供了3个操作读指针(zhzhn)的成员函数:istream&istream:seekg(longpos);istream&istream:seekg(longoff,ios:seek_dirdir);streamposistream:t

9、ellg();第26页/共45页第二十六页,共46页。27其中(qzhng),pos为文件指针的绝对位置;off为文件指针的相对偏移量;dir为文件指针的参照位置,其值可能为:ios:cur文件指针的当前位置ios:beg文件开头ios:end文件尾tellg()函数没有参数,它返回一个long型值,用来表示从文件开始处到当前指针位置之间的字节数。第27页/共45页第二十七页,共46页。28(2)在ostream类中同样提供了3个操作写指针(zhzhn)的成员函数:ostream&istream:seekp(longpos);ostream&istream:seekp(longoff,dir)

10、;streamposistream:tellp();这3个成员函数的含义与前面3个操作读指针(zhzhn)成员函数的含义相同,只不过它们是用来操作写指针(zhzhn)的。第28页/共45页第二十八页,共46页。29【例3.11_4】将一批数据以二进制形式存放在磁盘(cpn)文件中。#includefstream.hstructstudentcharname20;intnum;intage;charsex;intmain()studentstud3=Li,1001,18,f,Fun,1002,19,m,Wang,1004,17,f;第29页/共45页第二十九页,共46页。30ofstreamou

11、tfile(e:stud.dat,ios:binary);if(!outfile)coutopenerror!endl;return1;/退出(tuch)程序for(inti=0;i3;i+)outfile.write(char*)&studi,sizeof(studi);outfile.close();return0;第30页/共45页第三十页,共46页。31【例3.11_5】将3.11_4以二进制形式存放在磁盘(cpn)文件中的数据读入内存并在显示器上显示。#includefstream.hstructstudent charname20;intnum;intage;charsex;int

12、main() studentstud3;inti;ifstreaminfile(stud.dat,ios:binary);第31页/共45页第三十一页,共46页。32if(!infile)coutopenerror!endl;return(0);for(i=0;i3;i+)infile.read(char*)&studi,sizeof(studi);infile.close();for(i=0;i3;i+)coutNO.i+1endl;coutname:studi.nameendl;coutnum:studi.numendl;coutage:studi.ageendl;coutsex:stud

13、i.sexendlendl;return0;第32页/共45页第三十二页,共46页。33问题:如果(rgu)只想读出第2个学生的信息,如何修改程序?第33页/共45页第三十三页,共46页。34【例3.11_6】重载流输出输入(shr)运算符读写随机文件的#include#include#include#includeclassCStudentpublic:CStudent(char*name,char*id,floatscore=0);voidprint();friendostream&operator(istream&is,CStudent&stu);private:charstrName1

14、0;/姓名(xngmng)charstrID10;/学号floatfScore;/成绩;第34页/共45页第三十四页,共46页。35续例3.11_6CStudent:CStudent(char*name,char*id,floatscore)strncpy(strName,name,10);strncpy(strID,id,10);fScore=score;voidCStudent:print()coutendl学生(xusheng)信息如下:endl;cout姓名:strNameendl;cout学号:strIDendl;cout成绩:fScoreendl;第35页/共45页第三十五页,共4

15、6页。36ostream&operator(istream&is,CStudent&stu)charname10;charid10;is.read(name,10);is.read(id,10);is.read(char*)&stu.fScore,4);strncpy(stu.strName,name,10);strncpy(stu.strID,id,10);returnis;续例3.11_6第36页/共45页第三十六页,共46页。37voidmain()CStudentstu1(MaWenTao,99001,88);CStudentstu2(LiMing,99002,92);CStudent

16、stu3(WangFang,99003,89);CStudentstu4(YangYang,99004,90);CStudentstu5(DingNing,99005,80);fstreamfile1;file1.open(student.dat,ios:out|ios:in|ios:binary);file1stu1stu2stu3stu4*one;one-print();续例3.11_6第37页/共45页第三十七页,共46页。38续例3.11_6file1.seekp(size*1);file1*one;one-print();file1.seekp(size*2,ios:cur);fil

17、e1*one;one-print();file1.close();deleteone;第38页/共45页第三十八页,共46页。39续例3.11_6运行(ynxng)结果如下:程序中,先将五个学生记录保存到文件中,然后移动文件指针,读取相应的记录,最后将数据输出到屏幕(pngm)上。需要说明的是,由于文件流file1既可以读(ios:in)也可以写(ios:out),因此用seekg代替程序中的seekp,其结果也是一样的。第39页/共45页第三十九页,共46页。40作业(zuy)71、建立两个磁盘(cpn)文件f1.dat和f2.dat,编程实现以下工作:(1)从键盘输入20个整数,分别存放在

18、两个磁盘(cpn)文件中(每个文件中放10个整数);(2)从f1.dat读入10个数,然后存放到f2.dat文件原有数据的后面;(3)从f2.dat中读入20个整数,将它们按从小到大排序存放到f2.dat(不保留原来的数据)。第40页/共45页第四十页,共46页。412、编程实现以下功能:(1)按职工号由小到大的顺序将5个员工的数据(包括职工号、姓名、年龄、工资)输出到磁盘文件中保存。(2)从键盘输入1个员工的数据(职工号大于已有的职工号),增加到文件的末尾。(3)输出文件中全部职工的数据。(4)从键盘输入一个号码,从文件中查找有无此职工号,如有则显示此职工的全部数据。如果没有,就输出“查无此

19、人”。可以反复(fnf)多次查询,如果输入查找的职工号为0,就结束查询。第41页/共45页第四十一页,共46页。42实验(shyn)5内容(nirng)参见“实验报告5”。第42页/共45页第四十二页,共46页。43实验(shyn)6实验题目:设计复数计算器目的和要求(1)掌握函数重载的特性;(2)掌握运算符重载的特性;(3)掌握文件读写的编程方法。设计任务和要求:(1)所设计的复数计算器可以进行(jnxng)+、-、*、+=、*=、+、-、=、=、=是针对复数的模进行(jnxng);(2)设计输入重载函数,要求能接收从键盘输入a+bi形式的复数,在程序中可以识别出实部并正确赋值。第43页/共

20、45页第四十三页,共46页。44(3)设计计算器测试程序,对加减法进行测试,要求在两位数以内进行,对乘法进行测试,乘法要求为一位数的运算。(4)设计记录(jl)功能,可以记录(jl)下不同用户使用计算器的情况,记录(jl)以文件形式保存在计算机内,程序运行时要求输入用户名,显示该用户以前的记录(jl)。用户记录(jl)包括:做了多少次加减法、乘法、进行测试的次数,后3次的测试平均分等,在退出计算器程序时用新的用户记录(jl)代替原有记录(jl)。第44页/共45页第四十四页,共46页。45感谢您的欣赏(xnshng)!第45页/共45页第四十五页,共46页。内容(nirng)总结1。第3页/共45页。fstream类的头文件是fstream.h。第10页/共45页。而向一个(y )文件写入数据,可以使用其put、write函数以及插入符“”。从文件中读取多个字符,读取个数由参数count决定。向文件写入多个字符,字符个数由count决定。/从磁盘文件读入10个整数,顺序存放在a数组中。dir为文件指针的参照位置,其值可能为:。第44页/共45页。感谢您的欣赏第四十六页,共46页。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号