




已阅读5页,还剩54页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章数据的文件管理,文件概述文件的打开与关闭文本文件的读写二进制文件的读写文件的定位文件的更新,【本章要点】,10.1引例,10.1.1问题描述信用卡是当今发展最快的一种集金融业务和电脑技术于一体的高科技产物。具有支付和信贷等功能。模拟信用卡帐户管理设计一个简易帐户信息管理系统,主要管理帐号、姓名、余额三项内容。具体操作有:添加帐户、删除帐户、更新帐户信息以及列出当前全部帐户信息等。,10.1引例,10.1.2问题分析信用卡帐户信息无疑是需要以文件形式长期保存的,需要解决的问题有:创建文件、打开和关闭文件、维护文件中的信息(添加、删除、更新)。10.1.3算法设计1.列帐户清单:列出当前所有帐户的信息。2.添加帐户:对于新办理信用卡的帐户进行添加。3.删除帐户:对于销户者进行删除。4.更新帐户:对于交易的帐户更新余额。,10.2文件概述,文件:存储在外存储器中的数据集合称为文件。C语言把文件看作是一个字符(字节)序列,即由一个个字符数据顺序组成,文件的存取以字节为单位。按照数据的组织方式,文件可分为文本文件和二进制文件。,10.2文件概述,文本文件:文本文件也称为ASCII码文件,该文件的每个字节存放一个字符的ASCII码,可以被文本编辑器、Office办公软件等读取并显示。内存中的二进制数需转换成ASCII码后才能保存到文本文件中.二进制文件:二进制文件是指把数据按其在内存中的存储形式原样存储到磁盘上所形成的二进制数据文件。由于编码不同,二进制文件用文本处理软件打开会出现乱码。,10.2文件概述,文件指针:指向文件的指针变量。用于建立缓冲文件系统与特定文件的关联。定义一个文件指针的格式:FILE*指针名;其中,FILE是在stdio.h中定义的结构体类型,封装了与文件有关的信息。在定义文件指针时,最好将文件指针指向空。如:FILE*fp=NULL;,10.3文件的打开与关闭,10.3.1文件的打开将文件指针关联到一个特定文件的过程称为打开文件。标准库函数fopen()可以实现此操作。fopen()函数的调用方式:fopen(文件名,文件打开方式)若打开文件成功,fopen()函数返回一个包括文件缓冲区等信息的FILE型地址;否则返回NULL。通常将fopen()函数的值赋给一个指针变量。,10.3文件的打开与关闭,其中:参数“文件名”指出要打开的具体文件。一般应指定文件路径,当前路径可缺省。例如,文件名“c:/demo/test1.txt”表示C:盘demo文件夹中的test1.txt文件。(注意:C语言中表示路径时,用字符/或转义字符作间隔符,与操作系统中的路径表示不同。)2.参数“文件打开方式”指明打开文件是进行读还是写,或者其他操作。参见下表:,10.3文件的打开与关闭,例如,以“只读”方式打开文件pressure.dat,并用文件指针fp指向该文件的语句如下:FILE*fp;fp=fopen(“pressure.dat”,“r”);注意:在打开文件时应该判断文件打开是否成功。例如:FILE*fp;fp=fopen(e:/demo/test1.txt,r);if(fp=NULL)printf(文件打开失败!n);exit(0);,10.3文件的打开与关闭,10.3.2文件的关闭文件使用完后断开文件指针和文件之间的关联的过程称为关闭文件。调用标准库函数fclose()可以关闭文件。函数fclose()的调用方式:fclose(文件指针)如果函数fclose()成功关闭文件则返回0;否则返回EOF。,10.4文本文件的读写,文本文件的读写方式有:按字符读写、按字符串读写和格式化读写等。10.4.1按字符读写文件1.fputc()函数函数原型:intfputc(charc,FILE*fp)该函数向fp所指的文件中写一个字符,若写入成功则返回其ASCII码;否则返回EOF。,10.4文本文件的读写,例10-1从键盘上输入一串字符,写入磁盘文件C:demo123.txt中。算法设计:1.以只写方式打开demo.txt文件。2.逐个将键入的字符用fputc()函数写入demo.txt中,直到遇到回车符为止。3.关闭demo.txt文件。,10.4文本文件的读写,程序设计:#include#includevoidmain()FILE*fp;charch;if(fp=fopen(c:/demo/123.txt,w)=NULL)printf(文件打开失败!n);exit(0);printf(请输入一行字符,回车结束。n);ch=getchar();while(ch!=n)fputc(ch,fp);ch=getchar();fclose(fp);,10.4文本文件的读写,2.fgetc()函数函数原型:intfgetc(FILE*fp)该函数从fp指针所指的磁盘文件中读取一个字符。若读取成功,则返回被读取字符的ASCII码;否则返回EOF。,10.4文本文件的读写,例10-2将C:盘demo文件夹中的123.txt文件的内容写入同名文件夹的hello.txt文件中。算法设计:1.以只读方式打开123.txt文件,以只写方式打开hello.txt文件。2.用fgetc()函数从123.txt文件中逐个读出字符,再用fputc()函数写入hello.txt中。3.关闭123.txt文件和hello.txt文件。,10.4文本文件的读写,程序设计:#include#includevoidmain()FILE*fp1,*fp2;charch;if(fp1=fopen(c:/demo/123.txt,r)=NULL)printf(123.txt文件打开失败!n);exit(0);if(fp2=fopen(c:/demo/hello.txt,w)=NULL)printf(hello.txt文件打开失败!n);exit(0);while(1)ch=fgetc(fp1);if(ch=EOF)break;fputc(ch,fp2);fclose(fp1);fclose(fp2);,10.4文本文件的读写,10.4.2按字符串读写文件1.fgets()函数函数原型:char*fgets(char*sp,intn,FILE*fp)该函数从fp所指的文件中连续读取字符,直至读到回车符n或者读入了n-1个字符时为止,然后在读入的字符串尾添加一个0,存入以sp为起始地址的内存空间。若读取成功,则返回sp的值,否则返回NULL。,10.4文本文件的读写,例10-3编写程序,用字符串读取方式将D:盘上文件“古诗.txt”的内容输出到屏幕上。算法设计:1.以只读方式打开“古诗.txt”文件。2.用fgets()函数将“古诗.txt”文件中的内容逐行读取并显示在屏幕上。3.关闭“古诗.txt”文件。,10.4文本文件的读写,程序设计:#include#includevoidmain()FILE*fp;charstr30;/*用于存储一行古诗*/fp=fopen(d:/古诗.txt,r);if(fp=NULL)printf(古诗.txt文件打开失败!n);exit(0);while(fgets(str,30,fp)!=NULL)printf(%s,str);printf(n);fclose(fp);,10.4文本文件的读写,2.fputs()函数函数原型:intfputs(char*sp,FILE*fp);该函数将sp所指字符串的内容(不包含0)写到fp所指的文件中。若写入成功,则返回一个非负数;否则返回EOF。,10.4文本文件的读写,例10-4将键盘上输入的多行文字写到D:盘上的English.txt文件中。算法设计:1.以只写方式打开English.txt文件。2.用while循环结构实现多行文本的输入。循环体中对输入的每行文本用fputs()函数写入English.txt中。3.关闭English.txt文件。,10.4文本文件的读写,程序设计:#include#includevoidmain()FILE*fp;charstr80;fp=fopen(d:/English.txt,w);if(fp=NULL)printf(Fileopenerror!n);exit(0);printf(pleaseenterlinesofEnglishandpresstheEntertwicetoendtheinput:n);while(strlen(gets(str)0)fputs(str,fp);fputs(n,fp);fclose(fp);,10.4文本文件的读写,10.4.3格式化读写文件1.fprintf()函数函数原型:intfprintf(FILE*fp,constchar*format,)该函数将输出表列中的各数据项按format指定的格式输出到fp所指的文件中。其中省略号表示输出项表列。,10.4文本文件的读写,例10-5将表10-2中的气压数据存入文件pressure.dat中。算法设计:1.以只写方式打开pressure.dat文件。2.用循环语句将表10-2中50组压强数据写入pressure.dat中,每行4组。3.关闭pressure.dat文件。,程序设计:#include#includevoidmain()inti;FILE*fp;structDatachartime8;intpressure;structDatadata50=9:00,96730,9:05,96740,9:10,96760,9:15,96760,9:20,96770,9:25,96770,9:30,96770,9:35,96770,9:40,96770,9:45,96770,9:50,96770,9:55,96770,10:00,96770,10:05,96760,10:10,96750,10:15,96750,10:20,96740,10:25,96740,10:30,96740,10:35,96750,10:40,96750,10:45,96750,10:50,96750,10:55,96750,11:00,96750,11:05,96750,11:10,96740,11:15,96730,11:20,96730,11:25,96730,11:30,96720,11:35,96720,11:40,96710,11:45,96710,11:50,96700,11:55,96690,12:00,96680,12:05,96680,12:10,96670,12:15,96660,12:20,96660,12:25,96650,12:30,96650,12:35,96640,12:40,96630,12:45,96620,12:50,96610,12:55,96610,13:00,96610,13:05,96610;fp=fopen(pressure.dat,w);if(fp=NULL)printf(pressure.dat文件打开失败!n);exit(0);for(i=0;i3|account1)printf(输入错误,请输入1-3之间的数:);scanf(%ld,10.8引例的实现,一、帐户文件的建立#include#includestructclientDatalongacctNum;/*帐号*/characctName16;/*用户名*/longbalance;/*帐户余额*/;voidmain()FILE*cfPtr;longi;structclientDatablankClient=0,0;if(cfPtr=fopen(credit.dat,wb)=NULL)printf(文件打开失败.n);exit(0);for(i=1;i=1000000;i+)fwrite(,10.8引例的实现,二、算法设计:针对创建的credit.dat文件,细化4个功能模块:列帐户清单:在屏幕上显示credit.dat文件中帐号不为0的全部帐户信息,换句话说,只显示实际存在的帐户信息。添加帐户:在credit.dat文件中查找帐号为0的记录,在其位置上写入新帐户信息,即将原始文件中的虚拟帐户以实际帐户替代。删除帐户:将credit.dat文件中被删除帐户的帐号、用户名、余额取为“0、0,即将实际帐户改为虚拟帐户。更新帐户余额:在credit.dat文件中定位到指定帐号,修改其余额。以上各模块分别定义为一个函数。在主函数中,通过菜单选择,调用各函数实现相应的功能。,10.8引例的实现,程序清单:#include#includestructclientDatalongacctNum;/*帐号*/characctName16;/*用户名*/longbalance;/*帐户余额*/;intenterChoice(void);voiddisplayRecord(FILE*fPtr);voidnewRecord(FILE*fPtr);voiddeleteRecord(FILE*fPtr);voidupdateRecord(FILE*fPtr);,10.8引例的实现,/*主函数*/voidmain()FILE*cfPtr;intchoice;if(cfPtr=fopen(credit.dat,rb+)=NULL)printf(文件打开失败.n);exit(0);while(choice=enterChoice()!=5)switch(choice)case1:displayRecord(cfPtr);break;case2:newRecord(cfPtr);break;case3:deleteRecord(cfPtr);break;case4:updateRecord(cfPtr);break;default:fflush(stdin);printf(无效选择,请输入数据!n);system(pause);fclose(cfPtr);,10.8引例的实现,/*提供选项的函数*/intenterChoice()intmenuChoice;system(cls);printf(-信用卡帐户管理系统-n1-显示当前系统中全部记录:n2-添加记录n3-删除记录n4-更新记录n5-退出程序nn请选择:);scanf(%d,10.8引例的实现,/*列帐户清单函数*/voiddisplayRecord(FILE*fPtr)structclientDatacl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 铣床考试试题及答案
- 化学氧气考试题及答案
- 视网膜脱离考试题及答案
- 一次函数试题及答案
- 校内外玩耍安全知识培训课件
- 2025年达州市水利发展有限责任公司招聘考试笔试试题(含答案)
- 树脂工艺基础知识培训总结
- 2025年药物临床试验质量管理培训试题及答案
- 抢救药品试题及答案
- 2025年农机以租代购合同范文
- 2025总公司授权分公司签订合同的示范文本
- 2025年医师定期考核法律法规试题及答案
- 学堂在线 大学计算机基础 章节测试答案
- 县域共配仓农村物流配送成本控制报告
- 二级实验室生物安全管理手册
- 2025年新演员签约协议书
- 上海金山区卫生系统招聘考试(护理学专业知识)题含答案2024年
- 2025届安徽省A10联盟高三上学期开学考-物理试题(含答案)
- 全国“安康杯”职工安全健康意识与应急技能知识竞赛试卷附答案
- 基孔肯雅热防控技术指南(2025年版)试题及答案
- 护理实践指南手术室废物管理
评论
0/150
提交评论