C语言程序设计-第十章 学生信息的读取与保存_第1页
C语言程序设计-第十章 学生信息的读取与保存_第2页
C语言程序设计-第十章 学生信息的读取与保存_第3页
C语言程序设计-第十章 学生信息的读取与保存_第4页
C语言程序设计-第十章 学生信息的读取与保存_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

项目十学生信息的读取与保存-文件1【项目要求】从文件a.txt读取某班的期末考试成绩,按总分排序后写入另外一个文件b.txt。

在上一章实现的项目中发现,每次运行程序都要输入大量的数据,如果用我们以前学过的输入的方法就很不方便,最常用的方法就是预先将这些数据写到一个文件里,再将这个文件存放在磁盘上,需要时再将数据从该文件中读取。为实现本项目需要经过打开文件、从文件进行数据的读/写、关闭文件指针三步。

【项目分析】2问题情境及实现

#include<stdio.h>#defineN100typedef

structstudent{charnum[11];charname[9];intscore[3];floatavr;}STU;voidfsort(STU

s[],intn)//对结构体数组中的n个数据进行简单选择排序{

int

i,j,k; STUt;

for(i=0;i<n-1;i++) {k=i;

for(j=i+1;j<n;j++)

if(s[k].avr<s[j].avr)k=j;

if(i!=k){t=s[i];s[i]=s[k];s[k]=t;}}}3问题情境及实现

voidmain(){FILE*fp1,*fp2;STUs[N];int

i,n,j,sum;if((fp1=fopen("f:\\cresource\\10w2.txt","r"))==NULL){

printf("找不到该文件\n");/*如果打不开文件则给出相应的提示*/

getch();exit(0);}i=0;while(!feof(fp1))/*从文件中读取有关数据,一直读到文件末尾*/{ fscanf(fp1,"%s%s",s[i].num,s[i].name);

sum=0;

for(j=0;j<3;j++) { fscanf(fp1,"%d",&s[i].score[j]); sum+=s[i].score[j]; }

s[i].avr=sum/3.0;/*同时求出平均分*/ i++;}4问题情境及实现

fclose(fp1);/*关闭文件*/n=i;for(i=0;i<n;i++){

printf("\n第%d个学生的信息:%s%s",i+1,s[i].num,s[i].name);

for(j=0;j<3;j++)

printf("%d",s[i].score[j]);}fsort(s,n);fp2=fopen("f:\\cresource\\10w2_2.txt","w");/*打开文件进行保存数据*/for(i=0;i<n;i++){ fprintf(fp2,"%s%s",s[i].num,s[i].name);

for(j=0;j<3;j++) fprintf(fp2,"%d",s[i].score[j]); fprintf(fp2,"%f",s[i].avr); fprintf(fp2,"\n");/*写完一个学生的信息换行*/}fclose(fp2);}566相关知识2.文件的打开与关闭本讲小结1.文件概述3.文件的读写操作重点:文件的打开与关闭文件的读写操作4.文件应用举例1文件概述(1)1.1使用文件的目的①程序与数据分离:

数据文件的改动不引起程序的改动;②数据共享:

不同程序可以访问同一数据文件中的数据;③能长期保存程序运行的中间数据或结果数据。71文件概述(2)1.2文件的分类按文件的逻辑结构:记录文件:由具有一定结构的记录组成(定长和不定长)流式文件:由一个个字符(字节)数据顺序组成按存储介质:普通文件:存储介质文件(磁盘、磁带等)设备文件:非存储介质(键盘、显示器、打印机等)81文件概述(3)1.2文件的分类(续)按数据的组织形式:文本文件:ASCII文件,每个字节存放一个字符的ASCII码二进制文件:数据按其在内存中的存储形式原样存放9存储为二进制文件形式:00010000001001111文件概述(4)1.2文件的分类—文本文件和二进制文件0010011100010000存储为文本文件形式:0011000000110000001100000011000000110001如:int型数10000内存存储形式文本文件特点:存储量大、速度慢、便于对字符操作二进制文件特点:存储量小、速度快、便于存放中间结果101文件概述(5)1.3文件处理的方法缓冲文件系统:高级文件系统,系统自动为正在使用的文件开辟内存缓冲区,利用缓冲区完成文件读写操作。非缓冲文件系统:低级文件系统,由用户在程序中为每个文件设定缓冲区111文件概述(6)1.3文件处理的方法—缓冲文件系统输出文件缓冲区输入文件缓冲区程序数据区缓冲文件系统:磁盘文件写入文件读取文件121文件概述(7)1.3文件处理的方法—非缓冲文件系统程序缓冲区指令区用户数据区非缓冲文件系统:磁盘文件读写文件131文件概述(8)1.4文件类型指针—文件结构体typedef

struct{shortlevel;/*fill/emptylevelofbuffer*/unsignedflags;/*Filestatusflags*/charfd;/*Filedescriptor*/unsignedcharhold;/*Ungetccharifnobuffer*/shortbsize;/*Buffersize*/unsignedchar*buffer;/*Datatransferbuffer*/unsignedchar*curp;/*Currentactivepointer*/unsignedistemp;/*Temporaryfileindicator*/shorttoken;/*Usedforvaliditychecking*/}FILE;

教材P294有VC6.0下的结构定义141文件概述(9)1.4文件类型指针FILE*fp;文件打开时,系统自动建立文件结构体,并把指向它的指针返回来,程序通过这个指针获得文件信息,访问文件;文件关闭后,它的文件结构体被释放。返回主菜单文件使用方式:打开文件-->文件读/写-->关闭文件152文件的打开与关闭(1)2.1打开文件函数原型:FILE*fopen(char*name,char*mode)stdio.h要打开的文件名使用文件方式返回值:正常打开,返回指向文件结构体的指针;打开失败,为NULLP295页162文件的打开与关闭(2)2.1打开文件课堂练习:①打开当前文件夹下的namelist.txt文件,打开方式为追加②打开d盘test文件夹下的namelist.txt文件,如果该文件不存在,就创建该文件,然后增加文件内容课堂练习编写172文件的打开与关闭(3)2.2关闭文件函数原型:

int

fclose(FILE*fp)文件打开时返回的文件类型指针返回值:正常关闭为0;

出错时,非0课堂练习:关闭前面课堂练习中打开的文件返回主菜单183文件的读写(1)3.1文件的顺序读写—文件字符输入/输出函数函数原型:int

fputc(intc,FILE*fp)功能:把一字节代码c写入fp指向的文件中返值:正常,返回c;出错,为EOF函数原型:int

fgetc(FILE*fp)功能:从fp指向的文件中读取一字节代码返值:正常,返回读到的代码值;

读到文件尾(EOF)或出错(NULL)为止193文件的读写(1)3.1文件的顺序读写—文件字符输入/输出函数例1:从键盘输入若干字符,逐个将它们写入文件”file.txt”中,直到输入一个”*”为止。例1编写考虑如何编程完成将一个磁盘文件203文件的读写(2)3.1文件的顺序读写—文件字符串输入/输出函数函数原型:int

fputs(char*string,FILE*fp);

功能:把字符串写入fp指向的文件中返值:正常,返回0;出错,为EOF函数原型:char*fgets(char*s,intn,FILE*fp);

功能:从fp指向的文件中读取长度不超过n-1个字符返值:正常,返回读到字符串的首地址;

读到文件尾(EOF)或出错(NULL)为止P300页例11.2213文件的读写(3)3.1文件的顺序读写—文件的格式化输入/输出函数int

fprintf(FILE*fp,constchar*format[,argument,…])int

fscanf(FILE*fp,constchar*format[,address,…])功能:按格式对文件进行I/O操作返值:成功,返回I/O的个数;出错或文件尾,返回EOF223文件的读写(4)3.1文件的顺序读写—文件的格式化输入/输出函数例3:有如下的学生结构定义,从键盘输入4个学生的信息,保存到文件name-list.txt文件中struct

student_type{charname[10];

intnum;

intage;charaddr[15];}例3编写233文件的读写(5)3.1文件的顺序读写—文件的数据块输入/输出函数实现文件操作一次读取一组数据size_tfread(void*buffer,size_tsize,size_tcount,FILE*fp)size_tfwrite(void*buffer,size_tsize,size_tcount,FILE*fp)指向要输入/输出数据块的首地址的指针每个要读/写的数据块的大小(字节数)要读/写的数据块的个数要读/写的文件指针返值:成功,返回读/写的块数;出错或文件尾,返回0P304页例11.4243文件的读写(6)2文件的随机读写操作—rewind函数将文件的指针指向用户指定的位置,进行文件操作rewind函数函数原型:voidrewind(FILE*fp)功能:重置文件位置指针到文件开头返值:无253文件的读写(7)2文件的随机读写操作—rewind函数例4:分析下面程序的功能#include<stdio.h>main(){FILE*fp1,*fp2;fp1=fopen("file1.c","r");fp2=fopen("file2.c","w");

while(!feof(fp1))putchar(fgetc(fp1));rewind(fp1);

while(!feof(fp1))fputc(fgetc(fp1),fp2);fclose(fp1);fclose(fp2);}从文件中第一次将它内容显示在屏幕中,第二次读取将其复制到另一个文件中263文件的读写(7)2文件的随机读写操作—fseek函数fseek函数函数原型:

int

fseek(FILE*fp,longoffset,intwhence)功能:改变文件位置指针的位置返值:成功,返回0;失败,返回非0值273文件的读写(8)2文件的随机读写操作—fseek函数例5:分析下面程序的功能#include"stdio.h"

温馨提示

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

评论

0/150

提交评论