77范文网 - 专业文章范例文档资料分享平台

C语言程序设计(第3版)何钦铭 颜 晖 第12章 文件(2)

来源:网络收集 时间:2019-06-05 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

}

while(!feof(fp1)){

fscanf(fp1,\ fprintf(fp2,\ }

if(fclose(fp1)){

printf(\ exit(0); }

if(fclose(fp2)){

printf(\ exit(0); }

return 0; }

【练习12-7】修改例12-6,增加修改资金账户的功能。输入一个记录ID,如果文件中已存在该记录,则输入新的记录信息并更新资金账户文件中相应记录的信息。要求定义和调用函数UpdateLog(),其功能是修改资金账户记录。 解答:

#include #include long size;

struct LogData{ long logid;

char logdate[11]; char 1ognote[15]; double charge; double balance; };

int inputchoice() {

int mychoice;

printf(\

printf(\ printf(\ scanf(\ return mychoice; }

long getLogcount(FILE *cfptr) {

long begin,end,logcount; fseek(cfptr,OL,SEEK_SET); begin=ftell(cfptr);

fseek(cfptr,size,SEEK_END);

end=ftell(cfptr);

logcount=(end-begin)/size-1; return logcount; }

/*列出所有收支流水账*/

void ListAllLog(FILE *cfptr) {

struct LogData log;

fseek(cfptr,OL,SEEK_SET); fread(&log,size,1,cfptr);

printf(\ while(!feof(cfptr)){

printf(\ote,log.charge,log.balance);

fread(&log,size,1,cfptr); }; }

/*查询显示最后一条记录*/

void QueryLastLog(FILE *cfptr) {

struct LogData log; long logcount;

logcount=getlogcount(cfptr); if(1ogcount>0) {

fseek(cfptr,size*(logcount-1),SEEK_SET); fread(&log,size,1,cfptr); printf(\

printf(\gdate,log.lognote);

printf(\ }

else printf(\}

/*添加新记录*/

void AddNewLog(FILE *cfptr) {

struct LogData log,lastlog; long logcount;

printf(\ scanf(\

printf(\ printf(\ scanf(\ logcount=getLogcount(cfptr);

if(logcount>0){

fseek(cfptr,size*(logcount-1),SEEK_SET); fread(&lastlog,size,1,cfptr)

log.logid=lastlog.1ogid+1;

log.balance=log.charge+lastlog.balance; }

else{ log.logid=1;

log.balance=log.charge; }

rewind(cfptr);ogid=last-taraetlastlog; printf(\

fwirte(&log,sizeof(struct LogData),1,cfptr); }

/*修改资金账户*/

void UpdateLog(FILE *cfptr) {

FILE *fpout;

struct LogData user; char date[11]; char note[15]; double charge; double balance; int choice,ID;

cfptr=fileopen(\

if((fpout=fopen(\ printf(\ exit(0); }

printf(\ scanf(\ while(!feof(cfptr)){

fread(&user,sizeof(struct LogData),1,cfptr); if(strcmp(user.logid,ID)==0){ printf(\请输入修改信息:\\n\ printf(\ scanf(\

strcpy(user.logdate,date); printf(\

scanf(\

strcpy(user.lognote,note); printf(\ user.charge=charge; printf(\ scanf(\ user.balance=balance;

fwrite(&user,sizeof(struct LogData),1,fpout); } else

fwrite(&user,sizeof(struct LogData),1,fpout); }

if(fclose(cfptr)){

printf(\ exit(0); }

if(fclose(fpout)){

printf(\ exit(0); }

unlink(\都是删除文件的函数 rename(\}

/*打开文件*/

FILE *openfile(char *openmode) {

FILE *fp;

if((fp=fopen(\ printf(\ exit(0); }

return (fp); }

int main(void) {

FILE *fp; int choice;

size=sizeof(struct LogData);

while((choice=inputchoice())!=0){ switch(choice){ case 1:

fp=openfile(\ AddNewLog(fp); break;

/*列出所有的收入支出情况*/

case 2:

fp=openfile(\ ListAllLog(fp); break;

/*查询最后记录及余额*/ case 3:

fp=openfile(\ QueryLastLog(fp); break; case 4:

fp=openfile(\ UpdateLog(fp); break; default:

printf(\ } }

if(fclose(fp)){

printf(\ exit(0); }

return 0; } 习题12

一、选择题

1 .以下语句将输出____B_____。 #include

printf (\‘\\0',EOF);

A.0 0 1 B.0 0 -1 C.NULL EOF D.1 0 EOF

2.如果二进制文件a.dat 已经存在,现在要写入全新数据,应以____B____方式打开。

A.\D.“wb+\

3.定义”FILE *fp;\则文件指针fp 指向的是_____D_____。

A.文件在磁盘上的读写位置 B文件在级冲区上的读写位置 C.整个磁盘文件 D.文件类型结构

4.缓冲文件系统的文件缓冲区位于____C______。 A.磁盘缓冲区中 B.磁盘文件中 C.内存数据区中 D.程序文件中

5.使文件指针重新定位到文件读写的首地址的函数是_____C_____。

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C语言程序设计(第3版)何钦铭 颜 晖 第12章 文件(2)在线全文阅读。

C语言程序设计(第3版)何钦铭 颜 晖 第12章 文件(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/649834.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: