C语言程序设计案例教程-课件10_第1页
C语言程序设计案例教程-课件10_第2页
C语言程序设计案例教程-课件10_第3页
C语言程序设计案例教程-课件10_第4页
C语言程序设计案例教程-课件10_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

第10章文件作业点评请简述一下结构体和共用体的异同。请分析一下结构体数组与链表的区别。预习检查什么是文件怎么打开和关闭文件3文件概述重点了解掌握2文件的随机读写文件的打开与关闭文件的读写1学习目标【案例1】-案例描述

新学年伊始,许多大一新生来校报道,为了方便对学生信息的统一管理,校方需要将学生的相关信息制作成学生信息表,存储到磁盘中。学生信息表中包含学号、姓名、年龄、性别四项信息,编程实现学生信息表的文本形式存储和二进制形式存储,并将生成的文件存储到D盘的Stu文件夹中。【案例1】-案例分析

本案例中学生信息的存储不借助既定的表格(如excel),而是将学生信息直接存储到文本文件或二进制文件中。在进行存储之前,应先有文件,因为要存储到两种形式的文件中,所以分别创建两个文件。在存储学生信息时,可以以每位学生的每一项信息为单位进行存储,也可以构造学生信息结构体,以每位学生的所有信息为单位进行存储。

在实现学生信息存储之前,需要先了解一下计算机中文件及文件存储的相关知识,以及针对计算机文件的相关操作,下面将针对所需知识逐一讲解。【案例1】-必备知识1计算机中的流文件23文件的缓冲区文件指针45文件的打开与关闭写文件6计算机中的流在C语言中将通过不同输入/输出设备(键盘、内存、显示器、网络等)之间的数据传输抽象表述为“流”。源输入流程序输出流程序目标【案例1】-必备知识什么是文件?【案例1】-必备知识【案例1】-必备知识文件所谓“文件”一般指存储在外部介质上数据的集合。操作系统是以文件为单位对数据进行管理的,也就是说,如果想找存放在外部介质上的数据,必须先按文件名找到指定的文件,然后从文件中读取数据。一个文件要有唯一的文件标识,以便用户识别和引用。文件标识包括3部分,分别为文件路径、文件名主干和文件后缀。

文件【案例1】-必备知识根据数据的组织形式,数据文件可分为文本文件和二进制文件。文件【案例1】-必备知识1、二进制文件数据在内存中是以二进制形式存储的,如果不加转换地输出到外存,就是二进制文件。

2、文本文件文本文件又称为ASCII文件,每一个字节放一个字符的ASCII码。

文件的缓冲区ANSIC标准采用“缓冲文件系统”处理文件。缓冲文件系统的特点是在内存开辟一个“缓冲区”,为程序的每一个文件使用。当程序执行读文件操作时,先将一批文件内容读到缓冲区中,然后再将内容从缓冲区逐个读到程序中。当程序执行写文件操作时,先将数据写入到缓冲区中,待缓冲区装满后再将数据从缓冲区一起写入到磁盘文件中。【案例1】-必备知识文件指针在C语言中,对文件的所有操作都必须依靠文件指针来完成。文件指针的定义格式如下所示:

FILE*变量名;例FILE*fp;【案例1】-必备知识一个文件指针变量只能指向一个文件。文件的打开与关闭操作文件之前首先要打开文件,不打开文件就不能对其进行读写。C语言提供了fopen()函数,该函数用于打开文件,其返回值类型为文件指针。fopen()函数的函数声明如下: FILE*fopen(char*filename,char*mode);【案例1】-必备知识打开文件并对文件操作结束后要关闭文件。关闭是释放缓冲区和其他资源的过程,不关闭文件就会慢慢耗光系统资源。C语言提供了一个fclose()函数,该函数用于关闭文件,其返回值类型为int类型。fclose()函数的函数声明如下: intfclose(FILE*fp);【案例1】-必备知识文件的打开与关闭用fopen()函数打开文件,需要确定文件的打开模式。文件常用的打开模式如下表所示。【案例1】-必备知识文件的打开与关闭打开模式名称描述r/rb只读模式以只读的形式打开一个文本文件/二进制文件,如果文件不存在或无法找到,fopen()函数调用失败,返回NULLw/wb只写模式以只写的形式创建一个文本文件/二进制文件,如果文件已存在,重写文件a/ab追加模式以只写的形式打开一个文本文件/二进制文件,只允许在该文件末尾追加数据,如果文件不存在,则创建新文件r+/rb+读取/更新模式以读/写的形式打开一个文本文件/二进制文件,如果文件不存在,fopen()函数调用失败,返回NULL

w+/wb+写入/更新模式以读/写的形式创建一个文本文件/二进制文件,如果文件已存在,则重写文件a+ab+追加/更新模式打开一个文本/二进制文件,允许进行读取操作,但只允许在文件末尾添加数据,若文件不存在,则创建新文件(1)、写文本文件fputc()函数用于向文件中写入一个字符,其语法格式如下:写文件 intfputc(charch,FILE*fp);【案例1】-必备知识ch表示写入的内容,fp表示一个文件指针,int表示函数返回值的类型为整数类型。写文件(1)、写文本文件fputs()函数将字符串写入文件,其函数声明如下: intfputs(constchar*str,FILE*file);【案例1】-必备知识参数str表示指向待写入的字符串的字符指针;参数file表示文件指针,该指针指向需要写入字符串的文件;返回值类型int类型表示函数返回值的类型为整型。写文件(2)、写二进制文件fwrite()函数用于以二进制的形式将数据写入文件,其函数声明如下: unsignedintfwrite(constvoid*str,unsignedintsize,

unsignedintcount,FILE*file);【案例1】-必备知识参数str为指向待写入数据的指针;size为待写入数据的字节数;count为待写入size个字节的数据的个数;file为文件指针,该指针指向需要写入字符的文件;返回值类型unsignedint型表示函数返回值的类型为无符号整型。写文件(2)、写二进制文件fprintf()函数用于格式化输出数据到文件,其函数声明如下:

intfprintf(FILE*file,constchar*format,...);【案例1】-必备知识参数file表示文件指针,该指针指向需要写入字符串的文件;参数format表示以什么样的字符串格式输出到文件中;返回值类型int型表示函数返回值的类型为整型。【案例1】-案例实现案例代码(详见教材代码实现)案例设计123打开一个文本文件;45调用fputs()函数、fputc()函数和fwrite()函数写入数据;调用fclose()函数关闭文件;打开一个二进制文件;调用fputs()函数、fputc()函数和fprintf()函数向其中写入数据;6调用fclose()函数关闭文件;【案例2】-案例描述

信息的存储是为了方便对信息的重复使用。一般对信息的操作包含增加、删除、修改和查询这四项,这四项操作都基于已存在的文件。本案例的目标是实现学生信息的读取,要求从案例1生成的文件中,读取学生信息,输出到屏幕上。【案例2】-案例分析

本案例的实现基于案例1中已存在的文件,通过案例1的学习可知,在对文件进行操作之前需要先打开文件,之后才能逐一读取文件中的内容。案例1中生成了两个文件,一个为文本文件,一个为二进制文件,因为其存放形式不同,所以在打开时需要使用不同的打开模式。【案例2】-必备知识1读文件文件位置指针2(1)、读文本文件fgetc()函数用于读取文件的字符,其语法格式如下:读文件 charfgetc(FILE*fp);【案例2】-必备知识参数fp表示一个文件指针变量,char表示函数返回值的类型为字符类型。读文件(1)、读文本文件fgets()函数用于从文件中读取一行字符串,或读取指定长度的字符串,其函数声明如下: char*fgets(char*buf,intmaxCount,FILE*file);【案例2】-必备知识参数buf指向用来存储文件数据的数组的地址;参数maxCount指明存储数据的大小;参数file是将要读取的文件的文件指针。返回值类型char*型表示函数返回值的类型是字符型指针。读文件(2)、读二进制文件fread()函数用于在程序中以二进制的形式来读取文件,其函数声明如下:

unsignedintfread(void*dstBuf,unsignedintelementSize,

unsignedintcount,FILE*file);【案例2】-必备知识参数dstBuf表示指向要接收数据的内存空间的指针;参数elementSize表示接收的数据项的字节数;参数count表示每次函数运行时要读取的数据项的个数,每个数据项是elementSize个字节;参数file表示文件指针,该指针指向需要写入字符的文件;返回值类型unsignedint型表示函数返回值的类型为无符号整型。(2)、读二进制文件fscanf()函数用于从文件中格式化读取数据,其函数声明如下:

intfscanf(FILE*file,constchar*format,...);读文件【案例2】-必备知识参数file表示文件指针,该指针指向需要读取字符串的文件;参数format表示文件中的字符串以什么样的格式输入到程序中;返回值类型int型表示函数返回值的类型为整型。1、rewind()函数rewind()函数的作用是将文件位置指针指向文件开头,该函数的定义的语法格式如下所示:文件位置指针

voidrewind(FILE*fp);【案例2】-必备知识2、fseek()函数fseek()函数的作用是将文件位置指针指向指定位置,该函数定义的语法格式如下所示:文件位置指针

intfseek(FILE*fp,longoffset,intorigin);【案例2】-必备知识参数origin的值有三个,具体如下:●SEEK_SET:对应的数字值为0,表示从文件开头进行偏移;●SEEK_CUR:对应的数字值为1,相对于当前位置进行偏移;●SEEK_END:对应的数字值为2,相对于文件末尾进行偏移。3、ftell()函数ftell()函数的作用是获取文件位置指针的当前位置,该函数定义的语法格式如下所示:文件位置指针

longftell(FILE*fp);【案例2】-必备知识ftell()函数调用成功后,返回文件位置指针的当前位置,但如果当文件不存在或发生其他错误时,则函数的返回值为-1L。【案例2】-案例实现案例代码(详见教材代码实现)案例设计

读取文件之前应保证文件已经存在,本案例设计读取案例1中生成的文件。文件读取时同样需要打开和关闭,本案例中将使用不同的打开模式打开文本文件和二进制文件,之后分别使用fgetc()和fscanf()函数获取文本文件中的内容,使用fread()函数读取二进制文件中的内容。【案例3】-案例描述

编程实现学生成绩的存储和删除,具体要求如下:

(1)根据输入的路径和文件名创建或打开文件,通过输入设备输入多条学生信息,将输入的学生信息保存到磁盘文件中;

(2)根据用户输入的学生姓名,删除成绩表中对应的记录。【案例3】-案例分析

存储一条信息的方法在案例1中已经实现,本案例中需要实现的是存储多条信息到文件中,与案例1的不同在于在打开和关闭文件之间将会进行多次写操作。

删除信息的基本方法是:将文件中的数据读到辅助变量中,检测辅助变量中是否包含要删除的信息,如果有,则删除此条信息,然后以重写的方式打开文件,使用辅助变量中的数据覆盖原文件中的数据。

经过以上分析可知,删除学生信息的主要步骤依然是文件信息的读写。文件信息的读写方式在案例1和案例2中已经学习,本案例不再赘述。【案例3】-案例实现案例设计信息的写入和存储123构造学生结构体,结构体中包含学生姓名和成绩;使用追加方式打开一个二进制文件,将结构体数组中的数据逐条写入文件中;定义一个学生结构体变量数组,保存写入的每一条学生信息;【案例3】-案例实现案例设计信息的写入和存储123由用户输入一个学生姓名;45以重写的方式打开文件,将数组中的信息写入文件,之后关闭文件。检测数组中是否包含要删除的信息,作相应处理;查找学生信息;打开文件,将文件中信息存储到结构体数组中,关闭文件;案例代码(详见教材代码实现)【案例4】-案例描述

近些年来,因为信息泄露造成财产损失的事件时有发生。随着科技的发展,信息的传播与获取越来越方便,为了防止因信息泄露造成的各种危机,信息加密技术应得到充分的重视。本案例要求设计程序,对已经存在的文件进行加密和解密。【案例4】-案例分析

文件加密的目的是保证信息的安全,加密的原理是根据某种原则,对源文件中的信息进行修改,使加密后的文件在与源文件仍保持联系的情况下,不会直接反映出源文件中存储的信息,并且加密后的文件能根据某种原则,还原出源文件的内容。【案例4】-案例实现案例设计

根据案例分析,本案例中的文件可分为三个:源文件,加密文件和解密后的文件。

使用异或的方式对源文件进行加密。为了保证源文件的完整,这里将加密后的信息存放到新的文件中,所以将运算的结果存储到加密文件。

若要根据加密文件获取源文件中存储的信息,需要逐个读取加密文件中的字符,使其与密码再次异或,获取解密后的信息。案例代码(详见教材代码实现)【案例5】-案例描述

随着科技的发展,计算机的普及,计算机软件在诸多领域都得到了广泛的应用。如今,管理系统不再是大公司的专利,许多小型的管理系统,如餐厅的餐饮管理系统、超市的收银系统、学校的学生选课系统等都已逐步普及到了我们的生活中。

本案例要求实现一个基于单链表的图书管理系统,

温馨提示

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

评论

0/150

提交评论