《《C++面向对象程序设计》-曹静-电子教案 第08章 数据流与文件的输入输出》由会员分享,可在线阅读,更多相关《《C++面向对象程序设计》-曹静-电子教案 第08章 数据流与文件的输入输出(24页珍藏版)》请在金锄头文库上搜索。
1、2019年5月24日星期五,C+面向对象程序设计,第8章 数据流与文件的输入/输出,8.1 I/O流的概念 8.2 数据流的控制 8.3 文件的输入/输出 项目设计7 校园信息管理系统中的数据存储,2019年5月24日星期五,C+面向对象程序设计,8.1 I/O流的概念,流是一种抽象,它负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动。 当程序与外界环境进行信息交换时,存在着两个对象,一个是程序中的对象,另一个是文件对象。 程序建立一个流对象,并指定这个流对象与某个文件对象建立连接,程序操作流对象,流对象通过文件系统对所连接的文件对象产生作用。 读操作在流数据抽象中被称为(从流中
2、)提取,写操作被称为(向流中)插入。,2019年5月24日星期五,C+面向对象程序设计,8.2 数据流的控制,8.2.1 数据流的格式控制 8.2.2 常用的输入/输出函数 8.2.3 数据流的错误侦测,2019年5月24日星期五,C+面向对象程序设计,8.2.1 数据流的格式控制,插入()运算符是为所有标准C+数据类型定义的,其作用是向流中传送和读取数据。插入和提取运算符与预先定义的操作符一起工作,用来控制输入和输出格式。 1输出宽度 为了调整输出时的显示宽度,可以通过调用width成员函数为每个项(item)指定输出宽度或在流中放入setw操纵符。,2019年5月24日星期五,C+面向对象
3、程序设计,8.2.1 数据流的格式控制,2对齐方式 输出流的默认对齐方式为文本右对齐,程序中可以用setiosflags和resetiosflags操作符重设对齐方式。 3精度 使用setprecision操作符改变精度,该操作符有两个标志,ios:fixed和ios:scientific。 4进制 可以用dec、oct和hex操纵符设置输入和输出的默认进制。,2019年5月24日星期五,C+面向对象程序设计,8.2.2 常用的输入/输出函数,常用istream成员函数包含: int istream:get() 如果输入流包括附加的数据,函数取得并返回下一个字符;否则它返回EOF。 istre
4、am& istream:get(char &c) 如果输入流包括附加的数据,函数取得并将下一个字符分配给c;否则就是没有定义对c的作用。返回一个对*this(调用对象)的引用。,2019年5月24日星期五,C+面向对象程序设计,8.2.2 常用的输入/输出函数,istream& istream:get(char s,int n,char delim=n) 从输入流获取字符并将它们分配给s直到下面的一个条件发生:取得n-1个字符,没有输入字符了,或者下一个接收的字符的值为delim。 istream& istream:getline(char s,int n,char delim=n) 从输入流
5、获取字符并将它们分配给s直到下面的一个条件发生:取得n-1个字符,没有输入字符了,或者下一个接收的字符的值为delim。,2019年5月24日星期五,C+面向对象程序设计,8.2.2 常用的输入/输出函数,int istream:peak() 如果输入流包括附加的数据,函数返回下一个接收的字符;否则它返回EOF。 istream& istream:unget(char c) 字符c被送到输入流。它将是下一个要接收的字符。函数返回一个对*this的引用。 库iostream还提供对ios成员函数的访问,一些程序在输入流中检测文件尾。 bool ios:eof() 如果流中达到文件尾则返回真;否则
6、函数返回假。,2019年5月24日星期五,C+面向对象程序设计,8.2.2 常用的输入/输出函数,库iostream还提供两个类似get()和getline()的ostream成员函数。 ostream& ostream:put(char c) 将字符c插入输入流中。函数返回一个对*this的引用。 ostream& ostream:write(const char s,int n) 将s中的n个字符插入到输入流中。空字符也是有效的。函数返回一个对*this的引用。 库iostream还提供常用的ostream成员函数。 ostream& ostream:flush() 强制任何没有完成的操作
7、符插入完成。函数返回一个对*this的引用。,2019年5月24日星期五,C+面向对象程序设计,8.2.3 数据流的错误侦测,流cerr和clog把显示输出到默认错误日志上,该日志通常是控制台显示器。 对流cerr的每个插入请求应该立即送出显示。下面给出几个错误消息的例子: cerr“系统将在10秒后重起!n“; cerr“输入值无效,请重新输入!n“;,2019年5月24日星期五,C+面向对象程序设计,8.2.3 数据流的错误侦测,如果出于效率的缘故,则有必要缓冲错误和系统状态消息,这样就应该使用带缓冲的错误流clog。像cerr一样,clog通常是定向到显示器。下面给出几个样例: clog
8、UserName“成功登陆!n“; clog“有新邮件!n“;,2019年5月24日星期五,C+面向对象程序设计,8.3 文件的输入/输出,8.3.1 fstream类 8.3.2 格式化文字模式的文件I/O 8.3.3 二进制模式的文件I/O 8.3.4 文件指针的使用,2019年5月24日星期五,C+面向对象程序设计,8.3.1 fstream类,C+里负责文件输入/输出的类主要有ifstream(文件输入)、ofstream(文件输出)以及fstream(文件输入/输出)。 所谓文件的I/O(输入/输出)是指以程序为主的角度而言,文件打开为输入状态时(in),表示程序将由文件读入数据;文
9、件打开为输出状态时(out),表示程序将输出数据至文件。 我们通常将数据由文件输入到程序称之为读取,程序将数据输出到文件称之为写入。,2019年5月24日星期五,C+面向对象程序设计,8.3.1 fstream类,fstream类可以用于将数据写入文件,或读取文件的数据。要使用fstream类执行文件的I/O时,首先必须先定义一个fstream类的对象。例如: fstream file; / 定义一个fstream对象 利用fstream所提供的open成员函数 ,打开一个文件。传入open函数的参数有两个,一个传入欲打开的磁盘文件的名称,另一个传入打开该文件的模式参数。 file.open(
10、“MyFile.txt“,ios:in); / 在读取模式下打开MyFile.txt文件,2019年5月24日星期五,C+面向对象程序设计,8.3.1 fstream类,表8-1 文件流的文件打开模式,2019年5月24日星期五,C+面向对象程序设计,8.3.1 fstream类,表8-2 文件处理函数,2019年5月24日星期五,C+面向对象程序设计,8.3.1 fstream类,C+的文件I/O模式分为两种,一种为格式化文字模式,另一种为二进制模式,默认的文件I/O模式为文字模式。 当使用格式化文字模式时,输出至文件的内容将被储存为字符,因此,格式化文字模式适合储存字符或字符串。 如果以二
11、进制的方式处理数字,不论是储存的方式,还是占有文件空间的方式都与其储存在内存中的方式相同,因此,在储存数字时使用二进制模式是比较合适的。,2019年5月24日星期五,C+面向对象程序设计,8.3.2 格式化文字模式的文件I/O,文件的最小单位为字符,由字符组成一个字段,好几个字段组成一个记录,而一个文件则由好几笔记录组成。 将数据输入输出到文件中,除了可以使用write和read函数外,还可以使用“”运算符,而所有在8.2.1节中提及的格式控制方法,均可以在文件I/O中使用。,2019年5月24日星期五,C+面向对象程序设计,8.3.3 二进制模式的文件I/O,在二进制模式下,文件的I/O将利
12、用write和read函数将所有数据以字节形式储存至文件里。 对于原本就是字符的数据,并不需要转型,即可读取/写入到文件里;但对于数字型的数据,则必须转为字符指针,然后传入write和read函数。,2019年5月24日星期五,C+面向对象程序设计,8.3.4 文件指针的使用,文件指针是文件读取/写入数据时插入或输出的位置。文件指针有两种,一个是写入指针,另一个是读取指针。当文件被打开时,这两个指针都将被设定指向文件的起始处。 在ios类里,定义了三个特定的文件指针。通过指针函数与特定的指针的配合使用,可供在处理文件I/O时移动文件指针之用。这三个位移指针分别是ios:beg(文件开头)、io
13、s:end(文件结尾)、ios:cur(当前的指针位置)。,2019年5月24日星期五,C+面向对象程序设计,8.3.4 文件指针的使用,表8-3 文件指针函数,2019年5月24日星期五,C+面向对象程序设计,项目设计7 校园信息管理系统中的数据存储,1 设计题目 校园信息管理系统中的数据存储 2 设计概要 要求掌握面向对象程序设计方法,I/O流的概念,以及如何利用文件存储对象。 3 系统分析 4 功能模块设计,2019年5月24日星期五,C+面向对象程序设计,3 系统分析,现在校园信息管理系统已经能够完成人员信息的输入、显示和分析等一系列工作,但是现在的程序并不能将信息长期保存,所以,将数据永久的保存是校园信息管理系统必须实现的功能。 将文件读写的功能加入到当前的校园信息管理系统中来,以实现信息的长期保存。,2019年5月24日星期五,C+面向对象程序设计,4 功能模块设计,在设计person、student和teacher类的时候,已经添加了用来将数据写入文件和读出文件的函数: void Save(ofstream* ofile); void Load(ifstream* ifile); 实现对象实例的存储也就是对其中数据的存储,对象中的数据就是其每个成员变量的取值,将它们的值全部存入文件就能实现对象的存储。,