配色: 字号:
9-2 随机存取会员信息
2022-11-17 | 阅:  转:  |  分享 
  
C语言程序设计任务2 随机存取会员信息主讲:彭顺生目 录CONTENTS目 录CONTENTS任务陈述C语言程序设计 顺序文件
读取某个记录时,需要从第一个记录开始依次读取,如果数据量很大,要检索某个记录,显然效率不高。随机文件可实现直接定位到操作的目标记录
上,实现直接存取,这样就可以读写数据文件中的任意数据记录,不需要从第一条记录依次读取,提高了读写效率。 本次任务采用随
机读写的方式,实现对会员信息的管理,完成将会员信息写入文件,读取文件中所有会员信息展示到控制台如图1,修改指定位置的会员信息并写入
文件,修改后读取会员信息并展示,如图2所示。运行结果目 录CONTENTS文件随机读写C语言程序设计a b c d e ffpa
b c d e ffp顺序读写随机读写所谓随机读写,就是要使打开文件时文件指针就直接指向需要读取的信息处,然后再读取文件指针所指向
的文件信息。随机读取的过程是:1.先打开文件2.定位文件的位置3.然后读取信息4.最后关闭1. fseek() 函数C语言程序设计
fseek()函数用来移动文件内部位置指针,即把文件位置指针移动到需要读取的信息处。其函数原型如下:int fseek(FILE
fp,long offset,int origin);参数fp是指向文件的指针;参数offset表示以参数origin为基准使文
件位置指针移动的偏移量,即字节数;参数origin表示文件位置指针的起始位置,它有三个枚举值:文件首、当前位置和文件尾。2. ft
ell()函数C语言程序设计ftell()函数用来获取文件位置指针当前指向的位置,也就是文件指针相对于文件起始位置的偏移量。其函数
原型如下:long ftell(FILE fp);函数调用成功返回偏移量,失败返回-1.3. rewind()函数C语言程序设计
rewind()函数用来将文件位置指针移动到文件的开头。其函数原型如下:void rewind(FILE fp);4. feof
()函数C语言程序设计牢记:在文件读取过程中,不能用feof函数的返回值直接用来判断文件是否结束。而是应用于当前文件读取结束的时候
,判断是读取失败结束,还是遇到文件结束。1.文本文件读取是否结束,判断返回值是否为EOF,或者NULL如:fgetc判断是否为EO
F fgets判断返回值是否为NULL2.二进制文件的读取结束判断,判断返回值是否小于实际要读的个数。如:frea
d判断返回值是否小于实际要读的个数目 录CONTENTS任务描述C语言程序设计顺序文件读取某个记录时,需要从第一个记录开始依次读取
,如果数据量很大,要检索某个记录,显然效率不高。随机文件可实现直接定位到操作的目标记录上,实现直接存取,这样就可以读写数据文件中的
任意数据记录,不需要从第一条记录依次读取,提高了读写效率。 本次任务采用随机读写的方式,实现对会员信息的管理,完成将会
员信息写入文件,读取文件中所有会员信息展示到控制台如图1,修改指定位置的会员信息并写入文件,修改后读取会员信息并展示,如图2所示。
实现步骤C语言程序设计(1)创建文件rw2.dat,定义会员信息结构体,定义符号常量;(2)输入需要进行文件操作的文件信息,包括路
径及文件名,打开文件;(3)文件打开成功,在控制台输入会员信息,并写入rw2.dat文件中;(4)将文件指针定位到文件头,读取会员
信息并展示;(5)输入待修改会员,以数字1-3分别代表需要修改第1位会员、第2位会员、第3位会员,并将文件指针定位到待修改会员的位
置;(6)输入修改后的会员信息,并从文件指针位置写入会员信息;(7)将文件指针定位到文件头,再次读取会员信息并展示;(8)关闭文件
。 程序实现C语言程序设计#include#define MAXLINE 81struct member{
char cardId[10]; char name[10]; int integral; int age; char phon
e[12];}member1[3],member2[3],pp;int main(){ FILE fp; int
i; char pathstr[MAXLINE]; printf("请输入需要打开的文件:\n"); gets(
pathstr); if((fp = fopen(pathstr,"wb+")) == NULL) { p
rintf("Cannot open file strike any key exit!"); getchar();
return 0; } printf("input data:\n"); for(i = 0;i
< 3;i ++)scanf("%s%s%d%d%s",member1[i].cardId,member1[i].name,&me
mber1[i].integral,&member1[i].age,member1[i].phone); f
write(member1,sizeof(struct member),3,fp); rewind(fp); fr
ead(member2,sizeof(struct member),3,fp); printf("\ncardId\tnam
e\tintegral\tage\tphone\n"); for(i = 0;i < 3;i ++) 程序实现C语言
程序设计printf("%s\t%s\t%5d %8d %s\n",member2[i].cardId,memb
er2[i].name,member2[i].integral,member2[i].age,member2[i].phone);
printf("请输入需要修改的会员1-3:\n");scanf("%d",&i);fseek(fp,(i-1)si
zeof(struct member),0);pp = member1;scanf("%s%s%d%d%s",pp -> card
Id,pp -> name,&pp -> integral,&pp -> age,pp -> phone);fwrite(pp,s
izeof(struct member),1,fp);rewind(fp); fread(member2,sizeof(st
ruct member),3,fp); printf("\ncardId\tname\tintegral\tage\tph
one\n"); for(i = 0;i < 3;i ++)printf("%s\t%s\t%5d %8d
%s\n",member2[i].cardId,member2[i].name,member2[i].integral,member2[i].age,member2[i].phone); fclose(fp);return 0;}测试程序C语言程序设计运行结果图1图2C语言程序设计再见
献花(0)
+1
(本文系籽油荃面原创)