}
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
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)在线全文阅读。
相关推荐: