项目中学生数据的存储与重用ppt课件.ppt_第1页
项目中学生数据的存储与重用ppt课件.ppt_第2页
项目中学生数据的存储与重用ppt课件.ppt_第3页
项目中学生数据的存储与重用ppt课件.ppt_第4页
项目中学生数据的存储与重用ppt课件.ppt_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目中学生数据的存储与重用 技能目标 能用fopen函数和fclose函数打开和关闭文件能正确地读写文件能用文件定位函数对文件进行正确的定位操作能用格式化读写函数读写数据 知识目标 理解文件的概念 作用和文件的类型理解文件指针的概念和定义方法理解并掌握字符 字符串 数据块 格式化文件读写函数的格式理解文件定位函数的功能和使用方法 项目任务与解析 使用文件进行学生数据的读写 本项目包含下面1个任务 任务20 学生信息的保存 任务21 学生信息文件的打开 主要内容 8 1任务20 学生信息的保存8 2任务21 学生信息文件的打开8 3必备知识与理论8 4扩展知识与理论 1 问题描述学生属性是用结构体类型来实现的 首先定义学生数组长度 再定义学生信息结构体类型 最后定义能存储40个学生信息的数组和记录当前学生数的整型变量 2 具体实现学生信息保存在一个名为stuscore的文件中 以二进制文件的形式保存 保存的学生数由形参size决定 用写数据块函数实现保存 保存文件成功后给出提示 P240程序3 知识分析使用文件来对学生信息进行保存 8 1任务20 学生信息的保存 1 问题描述该函数用读数据块函数打开保存在stuscore文件中的学生信息 文件中的学生数由形参指针变量size返回 2 具体实现P241 P242程序3 知识分析对保存在文件中的学生信息进行读取 8 2任务21 学生信息文件的打开 8 3 1文件及其分类文件 file 是一种组织外部介质上的数据的数据类型 它有两个特征 一是对一个数据集合可以用一个名字命名 二是保存在外部介质上 例如磁带 磁盘 光盘 U盘上 可以长期保存 例如用文字处理软件 如WPS或Word 写好的一篇文章 把它起一个名字存放到磁盘上就是一个文件 与程序设计有关的文件 按内容来分 有 源程序文件 目标程序文件 可执行程序文件和数据文件等 本章主要讨论数据文件 即如何将程序处理的数据组织成文件保存到外部介质上 以及息怎样从外部介质上读取这些数据 8 3必备知识与理论 二进制文件是指以数据在内存中存储形式原样输出到磁盘上去 例如50201 在例7 18中知道50201二进制表示为00001 字符代码文件是指文件的内容是由一个一个字符组成的 每一个字符用一个代码表示 一般用ASCII代码 例如50201 共有5个字符 每个字符占一个字节 故共占5个字节 图8 2为两种这存储形式 一般说 二进制文件节省存储空间而且输入输出的速度快 因为在输出时不需要把数据由二进制形式转换为字符代码 在输入时也不需要把字符代码先转换成二进制形式然后存入内存 如果存入磁盘中的数据只是暂存的中间结果数据 以后还要调入继续处理的 一般用二进制文件以节省时间和空间 如果输出的数据是准备作为文档供给人们阅读的 一般用字符代码文件 它们通过显示器或打印机转换成字符输出 一般高级语言都能提供字符代码文件 ASCII文件 和二进制文件 用不同的方法来读写这两种不同的文件 8 3 2文件名 一个文件必须有一个文件名 文件名包括三部分 文件路径 文件名主干和文件名后缀 文件路径表明文件的存储位置 在操作系统中用反斜杠符 作为目录 子目录 文件之间的分隔 如f exe3 表明文件保存在f盘中的exe3目录 文件夹 中 但是 在C语言程序中 由于反斜杠符 是作为转义字符的起始符号 因此如果想用反斜杠符时要用两个反斜杠符表示 即要写成f exe3 文件名是文件的主要标志 它必须符合C语言关于标识符的规定 文件名后缀 用于对文件进行补充说明 一般不超过三个字符 通常用特定的后缀表明文件的类型 例如 txt表明是纯字符文件 用 c表示是C语言源程序文件 用 exe表示是可执行文件等 8 3 3文件的位置指针与读写方式 为了进行读写 系统要为每个文件设置一个位置指针 用于指向当前的读写位置 文件的位置指针的初始值可以按照程序员要进行的操作自动初始化 当要进行读或写时 文件的位置指针的初始值为文件头 当要为文件追加数据时 文件的位置指针指向文件尾 在ASCII文件中 通常 每进行一次读或写 位置指针就自动加1 指向下一个字符位置 为下一次读或写作准备 形成顺序读写方式 为了方便使用 C语言允许人为地移动位置指针 使位置指针跳动一个距离 或返回到文件头 形成文件的随机读写方式 8 3 4FILE类型指针FILE类型结构体类型2 FILE类型指针FILE fp 3 标准文件sdtin stdout stderr 8 3 5流 对文件的操作是高级语言的一种重要功能 由于对文件的操作要与各种外部设备发生联系 而所有外部设备都是由操作系统统一管理的 因此对文件的输入输出过程是通过操作系统来实现的 程序对文件的操作 读 写 过程如下页图所示 进行文件的读写 首先要为文件建立一个相应的缓冲区 当要向文件写据时 程序先把数据送到缓冲区 再把数据送到外部设备的指定文件中 当要从文件读取数据时 也要先把数据送到缓冲区 再由变量从缓冲区中提取相应的数据 缓冲区可以由系统自动为每个文件设置 也可以由程序员自己设置 采用前者的系统称为缓冲文件系统 而由用户自己根据需要设置缓冲区的系统称为非缓冲文件系统 ANSIC只建议使用缓冲文件系统 并对缓冲文件系统的功能进行了扩充 使之既能用于处理字符代码文件 也能处理二进制文件 在现代操作系统中 考虑到一个计算机系统要使用许多外部设备 如键盘 显示器 打印机 磁盘等 为了使简化用户对这些设备的操作 使用户不必具体考虑设备间的差异 可以将设备 缓冲区 应用程序之间的输入输出过程抽象为 数据的流动 并称为 流 stream 这样就可以使用统一的流处理函数进行设备 文件 的操作了 流包含了设备 文件 缓冲区以及操作性质 状态等 要进行文件操作 首先要建立一个流 建立了与文件相应的流 与该文件相应的文件结构体变量 即文件的信息区 才会有具体的值 FILE类型的指针也就会指向相应的文件的结构体变量 下图为三个FILE类型的指针指向对应的文件信息区 结构体变量 的示意图 所以文件指针和流是C语言文件系统的两个很重要的概念 8 3 6文件的打开与关闭 流的创建与撤销 文件的打开fopen 文件名 文件操作方式 说明 1 文件名应当包含文件路径 主文件名和文件后缀 即提供找到文件的有关信息 2 应当理解文件操作方式的意义 3 fopen 执行成功 则返回一个FILE类型的指针值 如果执行失败 如文件不存在 设备故障 磁盘满等原因 则返回一个NULL值 通常把该函数的返回值赋值给一个FILE类型的指针变量 后面就可以使用这个指针变量对文件进行操作 因此常用下面的方法打开一个文件 FILE fp if fp fopen file1 r NULL printf cannotopenthisfile n exit 1 4 对磁盘文件 在使用前先要打开 而对终端设备 尽管它们也作为文件来处理 但为什么在前面的程序中从未使用过 打开文件 的操作呢 这是由于在程序运行时 系统自动地打开三个标准文件 标准输入 标准输出和标准出错输出 系统自动地定义了三个指针变量 stdin stdout和stderr 分别指向标准输入 标准输出和标准出错输出 这三个文件都是以终端设备作为输入输出对象的 如果指定输出一个数据到stdout所指向的文件 就是指输出到终端设备 为使用方便 允许在程序中不指定这三个文件 也就是说 系统隐含的标准输入输出文件是指终端 5 每次最多能够同时打开的文件数目由一个宏FOPEN MAX决定 一般不少于8个 具体数目需要查阅编译手册 2 文件的关闭 简单地说 关闭文件就是撤销与操作文件相关的流 即通过关闭操作 通知系统释放相应的文件信息区 结构体变量 这样 原来的指针变量不再指向该文件 此后也就不可能通过此指针来访问该文件 如果是执行写操作后用fclose关闭文件 则系统会先输出文件缓冲区的内容 不论缓冲区是否已满 给文件 然后再关闭文件 这样可以防止丢失本来应写到文件上的数据 如果不关闭文件而直接使程序停止运行 这时就会丢失缓冲区中还未写入文件的信息 因此必须注意 文件用完后必须关闭 fclose 文件指针变量 C语言中 关闭缓冲文件使用fclose函数 它的格式为 fclose 文件指针变量 8 3 7文件的字符读写1 写一个字符到磁盘文件intfputc intch FILE fp 参数 ch 要写到文件的字符 fp FILE类型的数据文件指针变量 简称为指向该文件的指针 功能 把字符变量的值输出到指针变量fp所指向的文件 返回 该函数执行成功 返回写出的字符 失败 返回EOF include includeintmain void FILE fp intch if fp fopen f C3ex w NULL printf cannotopenthisfile n exit 1 while ch getchar n fputc ch fp fclose fp return0 运行情况如下 当键入 loveChina 时 这些字符将逐个被输出到磁盘文件中 2 从磁盘文件中读一个字符 exit 1 while ch fgetc fp EOF 将用fgetc 读入的字符逐个显示 putchar ch fclose fp return0 程序运行显示如下结果 IloveChina 8 3 8文件的字符串读写 1 fputs函数可以向文件写入一个字符串 其原型为 intfputs conststr FILE fp 参数 str 字符数组或字符串 功能 把字符数组str中的所有字符 或字符指针指向的串 或字符串常量 输出到fp所指向的文件 但字符串结束符 0 不输出 返回 成功 返回非负值 失败 返回EOF 2 函数fgets 可以从文件读取一个字符串 其原型为 char fgets char str intn FILE fp 参数 str 用于存放读入的字符串 n 送入到str中的字符个数 包括从文件中读取的n 1个字符和自动添加的 0 功能 从fp指向的文件读取n 1个字符 放到字符数组str中 如果在读入n 1个字符完成之前遇到换行符 n 或文件结束符EOF 即结束读入 但将遇到的换行符 n 也作为一个字符送入str数组 在读入的字符串之后自动加一个 0 返回 成功 str数组首地址 如读到文件尾或出错则返回NULL include include includeintmain void FILE fp charstring 81 if fp fopen f C3exe w NULL printf can topenfile exit 1 while strlen gets string 0 fputs string fp fputs n fp fclose fp return0 8 3 9文件的格式化读 写文件的格式化输出文件的格式化输出使用fpintf 函数 其原型为 intfprintf FILE stream char format argument 参数 stream 文件指针 format argument 格式字符串和输出参数列表与printf函数的含义是相同的 功能 传送格式化输出到一个stream所指向的流中 返回 成功 实际输出的字符数 include include includeintmain void FILE fp charname 20 intnum floatscore if fp fopen f C3exe w NULL printf can topenfile exit 1 printf typename num score scanf s d f name 文件的格式化输入文件的格式化输入使用fscanf 函数 其原型为 intfscanf FILE stream char format argument 参数 stream 文件指针 format argument 格式字符串和输入参数列表与scanf函数的含义是相同的 功能 从一个流中执行格式化输入 返回 成功 实际输入的数据个数 include includeintmain FILE fp charname 20 intnum floatscore if fp fopen f c3exe r NULL printf can topenfile exit 1 while fscanf fp s d f name 8 4 1文件位置指针的定位1 fseek函数fseek 函数的作用是使位置指针移动到所需的位置 fseek函数的原型为 intfseek FILE fp longintoffst intorgn 8 4扩展知识与理论 2 ftell函数ftell函数能告知用户位置指针的当前指向 例如ftell fp 的值是fp所指向的文件中位置指针的当前指向 如果出错 例如不存在此文件 则ftell函数返回值为 1 其原型为 longintftell FILE fp 3 rewind函数rewind函数的作用是使位置指针重新返回到文件的开头处 此函数无返回值 其原型为 voidrewind FILE fp 8 4 2文件随机读写程序的应用 include includecharbuff 32768 intmain intargc char argv FILE fp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论