C语言程序设计项目八.ppt
《C语言程序设计项目八.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计项目八.ppt(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、项目八项目八 学生成绩文件管理学生成绩文件管理 项目要求项目要求将一个班40个同学的相关数据,存入文件中,再从文件中读出,并将此数据按照平均分数从高到低进行排序后输出在屏幕上和另一文件中。项目分析项目分析要完成学生成绩的文件管理,第一必须要了解文件的概念,然后学会文件的打开与关闭;第二必须会对文件进行读取与写入。所以,将这一项目分成二个任务介绍。任务一是将学生成绩顺序读写到文件中;任务二是学生成绩随机读写到文件中。任务任务1 将学生成绩顺序读写到文件中将学生成绩顺序读写到文件中 一、问题情景一、问题情景(1)有一个班共40个同学参加了一次数学考试,现要将这个班的同学的成绩存到文件中,便于以后的
2、管理,请编一个程序实现之。(2)在上题的基础上,再把存到文件中的数据读出来,并将其输出在显示器上。二、具体实现二、具体实现#include stdio.hmain()int a10,i,b10;FILE*p;/*定义一个文件指针类型的变量*/p=fopen(“aaa.txt”,“w”);/*打开一个文件用以写入文本文件*/for(i=0;i10;i+)scanf(%d,&ai);/*将输入的成绩以5d的格式保存在文件aaa.txt中*/for(i=0;i10;i+)fprintf(p,%5d,ai);fclose(p);/关闭文件p=fopen(“aaa.txt”,“r”);/*打开一个文件用
3、以读入文本文件*/*将aaa.txt文件中的数据读入到数组b中*/for(i=0;i10;i+)fscanf(p,%d,&bi);/*输出数组b*/for(i=0;i10;i+)printf(%3d,bi);fclose(p);1、文件的打开与关闭;2、文件的读写;三、相关知识三、相关知识(一一)文件的打开关闭。文件的打开关闭。1.文件的概念文件的概念所谓“文件”是指记录在外部介质上的数据的有序集合。从文件的编码方式来看,文件可分为ASCII码文件和二进制码文件两种。2.文件类型指针文件类型指针FILE*指针变量标识符;例如:FILE*p;习惯上笼统地把p称为指向一个文件的指针。在进行读写操作
4、之前要先打开文件,使用完毕要关闭文件。3.文件的打开与关闭文件的打开与关闭(1)文件的打开(fopen()函数)fopen()函数用来打开一个文件,其调用的一般形式为:FILE*pp=fopen(文件名,使用文件方式)(2)文件的关闭(fclose函数)fclose(文件指针)例如:fclose(p);FILE*pp=fopen(“aa.dat”,”r”)FILE*fpfp=fopen(“d:a1.dat”,”rb”);FILE*fp;if(fp=fopen(“d:aa.dat”,”r”)=NULL)printf(“n cant open file!”);exit(1)(二二)文件的读写文件的
5、读写(二二)文件的读写文件的读写1.fprintf()函数和fscanf()函数调用格式:fscanf(文件指针,格式字符串,输入表列)fprintf(文件指针,格式字符串,输出表列)例如:fscantf(p,”%d,%f”,&a,&b);fprintf(p,”%d,%f”,a,b);#include stdio.hmain()int a10,i,b10;FILE*p;p=fopen(aaa.txt,w);for(i=0;i10;i+)scanf(%d,&ai);/*将输入的成绩以5d的格式保存在文件aaa.txt中*/for(i=0;i10;i+)fprintf(p,%5d,ai);fclo
6、se(p);/关闭文件p=fopen(aaa.txt,r);/*将aaa.txt文件中的数据读入到数组b中*/for(i=0;i10;i+)fscanf(p,%d,&bi);/*输出数组b*/for(i=0;i10;i+)printf(%3d,bi);fclose(p);分析问题情景中的分析问题情景中的C程序程序【例8-1】从键盘中输入一个学生的姓名及数学、英语、语文三门课的成绩,计算这个同学的平均分,然后将此同学的有关信息写入到文件cc.txt中;再把cc.txt文件中的数据读入并输出。分析:(1)需要定义一个字符数组存放姓名,三个整型变量存放三门课的成绩,一个实型变量用来存用平均分;(2)
7、在键盘上读入此同学的姓名、三门课的成绩,并计算平均分;(3)将姓名、三门课的成绩、平均分写入到以写入形式打开的文本文件cc.txt中,然后关闭此文件;(4)将cc.txt 文件以只读的形式打开后,将此文件中的数据读入到指定的变量中;(5)在显示器上输出变量;#include stdio.h#include“process.h”/*有exit()函数,所有用此库函数*/main()char name10,n110;int math,english,chinese,m1,e1,c1;float avg,a1;FILE*fp;/*以写入的形式打开文件cc.txt*/if(fp=fopen(cc.tx
8、t,w)=NULL)printf(打不开文件n);exit(1);printf(请输入这个学生的数据n);/*输入该同学的姓名、成绩并计算该同学的平均分*/scanf(%s%d%d%d,name,&math,&english,&chinese);avg=(math+english+chinese)/3.0;/*将此同学的姓名、三门课成绩、平均分写入到文件aa.txt中*/fprintf(fp,%s%d%d%d%.1fn,name,math,english,chinese,avg);fclose(fp);/*以读入的形式打开文件cc.txt*/if(fp=fopen(cc.txt,r)=NULL
9、)printf(打不开文件n);exit(1);/*将该同学的姓名、三门课成绩、平均分读入到指定的变量中*/fscanf(fp,%s%d%d%d%f,n1,&m1,&e1,&c1,&a1);fclose(fp);/*在显示器上输出数据*/printf(从文件中读出的数据为:n);printf(%s%d%d%d%.1fn,n1,m1,e1,c1,a1);【例8-2】从键盘中输入10个学生的姓名及数学、英语、语文三门课的成绩,计算每个同学的平均分,然后将此10个同学的姓名、三门课的成绩及平均分写入到文本文件aa.txt中。分析:编写此题的思路是:(1)需要定义一个结构体数组,用于存放10个同学的姓
10、名、三门课的成绩及平均分;(2)在键盘上读入10个同学的姓名、三门课的成绩,然后计算每个同学的平均分;(3)将10个同学的姓名、三门课的成绩及平均分写入到文本文件aa.txt中;程序如下:#include stdio.h#include process.h /*定义结构体定义结构体*/struct stuchar name10;int math,english,chinese;float avg;main()stu student10,*pp;FILE*fp;int i;pp=student;/*以写入的形式打开文件以写入的形式打开文件aa.txt*/if(fp=fopen(aa.txt,w)
11、=NULL)printf(打不开文件n);exit(1);printf(请输入十个学生的数据n);/*输入十个同学的姓名、成绩并计算每个输入十个同学的姓名、成绩并计算每个同学的平均分同学的平均分*/for(i=0;iname,&pp-math,&pp-english,&pp-chinese);pp-avg=(pp-math+pp-englist+pp-chinese)/3.0;pp=student;/*将十个同学的姓名、三门课成绩、平均将十个同学的姓名、三门课成绩、平均分写入到文件分写入到文件aa.txt中中*/for(i=0;iname,pp-math,pp-english,pp-chine
12、se,pp-avg);fclose(fp);/关闭文件输入的数据如下:打开件aa.txt【例【例8-3】将上例中的文本文件】将上例中的文本文件aa.txt数据读出,并将读出的数数据读出,并将读出的数据输出在显示器上。据输出在显示器上。分析:(1)定义一个结构体数组,用以存放读出的数据;(2)以只读的形式打开文件文件aa.txt;(3)将文本文件aa.txt中的数据读入到结构体数组中;(4)在显示器上输出此数组;#include stdio.h#include“process.h”/*有exit()函数,所有用此库函数*/*定义结构体*/struct stuchar name10;int mat
13、h,english,chinese;float avg;main()stu student10,*pp;int i;FILE*fp;/*以读入的形式打开文件aa.txt*/if(fp=fopen(aa.txt,r)=NULL)printf(打不开文件n);exit(1);pp=student;/*从文件中将十个同学的姓名、三门课成绩、平均分读入到结构体数组student中*/for(i=0;iname,&pp-math,&pp-english,&pp-chinese,&pp-avg);fclose(fp);pp=student;/*输出结构体数组student*/printf(从文件aa.tx
14、t中读出的数据为:n);for(i=0;iname,pp-math,pp-english,pp-chinese,pp-avg);fclose(fp);显然,输出的结果就是上例中的数据。2.fread()函数、函数、fwrite()函数函数 将一组数据,如一个数组元素,一个结构变量的值等一次性读写,其输入输出函数是二进制形式输入输出的函数,在输入输出中不必进行数据的转换,输入输出速度相对较快。读写数据块函数调用的一般形式为:读写数据块函数调用的一般形式为:fread(buffer,size,count,fp);fwrite(buffer,size,count,fp);说明:buffer:对于fr
15、ead()来说,指的是 读入数据的存放地址;对于fwrite来说,是要输出数据的地址。size读写数据时,每笔数据的大小count:读写数据的笔数fp:文件指针for(i=0;iname,&pp-math,&pp-englist,&pp-chinese,&pp-avg);fread(yy,sizeof(struct stu),10,fp);for(i=0;iname,pp-math,pp-englist,pp-chinese,pp-avg);fwrite(pp,sizeof(struct stu),10,fp);用用fread()、fwrite()函数将【例函数将【例8-2】【例】【例8-3】
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 项目
限制150内