首页下载资源行业研究20231113499_张钰萌_实验二.zip

ZIP20231113499_张钰萌_实验二.zip

2301_8007211347.79KB需要积分:1

资源文件列表:

20231113499_张钰萌_实验二.zip 大约有3个文件
  1. 20231113499_张钰萌_实验二/p2.cpp.cpp 8.28KB
  2. 20231113499_张钰萌_实验二/p2.dat 240B
  3. 20231113499_张钰萌_实验二/p2.exe.exe 136.6KB

资源介绍:

20231113499_张钰萌_实验二.zip
#include #include #include #include #include long size; //最近一次的流水号 struct logdata{ long logid; //ID char logdate[11]; //日期 char lognote[15]; //备注 double charge; //负支出 正收入 double balance; //余额 };//记录结构 int ichoice() { int mychoice; system("CLS"); //清屏 printf("\n"); printf(" 程序设计与实践 实验(二)个人资金账户管理\n\n"); printf("\n"); printf(" ------Personal Cashbox Management------ 23智能A1张钰萌2024年6月26日\n\n"); printf(" [1] Add a New Cash Log\n"); printf(" [2] List ALL Cash Log\n"); printf(" [3] Query LAST Cash Log\n"); printf(" [4] Update a Cash Log\n"); printf(" [5] Delete a Cash Log\n"); printf(" [0] End program\n"); printf("\n"); printf(" →Enter your Choice:"); scanf("%d",&mychoice); return mychoice; }//ichoice long getLogcount(FILE *cfptr) //获取文件记录总数 { long begin,end,logcount; fseek(cfptr,0L,SEEK_SET);//把cfptr移动到离文件头0个字节处(set文件头处) begin = ftell(cfptr);//获取文件的当前指针位置相对于文件首地址的偏移字节数 fseek(cfptr,size,SEEK_END);//把cfptr移动到离文件尾size个字节处(end文件尾处) end = ftell(cfptr); logcount=(end-begin)/size-1; return logcount; } void AddNewLog(FILE *cfptr) //添加新记录 { struct logdata log,lastlog; long logcount; //input printf("input logdata(FORMAT:XXXX-XX-XX):"); scanf("%s",log.logdate); printf("input lognote:"); scanf("%s",log.lognote); printf("input charge(incharge+ and expense-):"); scanf("%lf",&log.charge); logcount = getLogcount(cfptr); //获取记录数 if(logcount > 0){ fseek(cfptr,size*(logcount-1),SEEK_SET); //fseek函数设置文件指针cfptr的位置(从SEEK_SET开始移动size*(logcount-1)) fread(&lastlog,size,1,cfptr);//lastlog内存块指针,size每个元素大小,1元素个数,cfptr输入 log.logid=lastlog.logid+1; //记录号按顺序是上次的号+1 log.balance=log.charge+lastlog.balance; }else{//如果文件初始,记录数为0 log.logid=1; log.balance=log.charge; } rewind(cfptr);//reset指针cfptr的位置 getch();//等待按下任意键,再继续执行下面的语句 fwrite(&log,sizeof(struct logdata),1,cfptr); //写入 fclose(cfptr);//关闭刷新 返回eof(0) }//add void ListAllLog(FILE *cfptr) //列出所有收支流水账 { struct logdata log; long logcount; logcount = getLogcount(cfptr); if(logcount > 0){//若记录不为空 fseek(cfptr,0L,SEEK_SET); //定位指针到文件开始 fread(&log,size,1,cfptr); //(&)log读取到的位置指针 size一个对象的字节大小 1对象个数 cfptr要读的目标指针 printf("LogID LogDate LogNote Charge Balance\n"); while(!feof(cfptr)){//检测文件结束符,如果文件结束,则返回非0值,否则返回0 printf("%5ld %-12s %-15s %10.2lf %10.2lf\n",log.logid,log.logdate,log.lognote,log.charge,log.balance); fread(&log,size,1,cfptr);//为循环准备,再读一个 }//while 打印 }else{//若记录为空 printf("NO log in file!\n"); }//两种输出情况完毕 }//list all void QueryLastLog(FILE *cfptr) { struct logdata log; long logcount; logcount = getLogcount(cfptr); if(logcount>0){//若有记录 fseek(cfptr,size*(logcount-1),SEEK_SET); //指针定位到有效记录的表尾 fread(&log,size,1,cfptr);//读取最后一条记录((&)log读取到的位置指针 size一个对象的字节大小 1对象个数 cfptr要读的目标指针) printf("The last log is:\n");//开始输出 printf(" LogID:%-6ld\n LogDate:%-11s\n LogNote:%-15s\n",log.logid,log.logdate,log.lognote); printf(" Charge:%-10.2lf\n *Balance:%-10.2lf\n",log.charge,log.balance); }else{//若没有记录 printf("NO log in file!\n"); } } void UpdateLog(FILE *cfptr) //记录更新 { FILE *fp1; struct logdata log[1000],*plog=log,newlog;//plog=log数组的首地址 updatedlog long logcount,logid,i,index=-1; printf("Input LogID:"); scanf("%ld",&logid);//输入目标修改ID logcount=getLogcount(cfptr);//调取记录 rewind(cfptr); fread(plog,size,logcount,cfptr);//copy size主函数定义过 for(i=0;i=0){//有效位置 printf("input logdate(format:XXXX-XX-XX):"); scanf("%s",newlog.logdate); printf("input lognote:"); scanf("%s",newlog.lognote); printf("input Charge:Income+ and expend-:"); scanf("%lf",&newlog.charge); if(strcmp(log[index].lognote,newlog.lognote)!=0)//比较,若不相同,则修改 strcpy(log[index].lognote,newlog.lognote); //char型数组用strcpy //更新日期 if(strcmp(log[index].logdate,newlog.logdate)!=0) strcpy(log[index].logdate,newlog.logdate); //若输入的收支额度改变,则重新计算余额 if(newlog.charge!=log[index].charge){ newlog.balance=log[index].balance-log[index].charge+newlog.charge; //计算新余额 log[index].charge=newlog.charge;//更新收支* log[index].balance=newlog.balance;//更新余额 //当前记录之后的每条记录余额信息更新 for(i=index+1;i=0){//有效位置 for(i=index;i<=logcount-1;i++){//将index之后的数据整体前移 log[i].logid=i+1; strcpy(log[i].logdate,log[i+1].logdate); strcpy(log[i].lognote,log[i+1].lognote); log[i].charge=log[i+1].charge; log[i].balance=log[i-1].balance+log[i].charge; } printf("Now\n"); printf("LogID LogDate LogNote Charge Balance\n"); for(i=0;i
100+评论
captcha