基本信息
源码名称:C语言实现个人资金管理程序(记录流水)
源码大小:0.54M
文件格式:.zip
开发语言:C/C++
更新时间:2021-08-22
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍
该程序是大一写的,已经不太记得细节。已经测试过了,可以完成基本操作
大作业一(个人资金管理).zip
void AddNewLog(FILE *cfp)             /*添加新记录*/
{
    struct LogData log,lastlog;
    long logcount;
    printf("输入日期(例如:2020-01-01):");
    scanf("%s",log.logdate);
    printf("事情说明:");
    scanf("%s",log.lognote);
    printf("输入费用明细(收入用“ ”and支出用“—”):");
    scanf("%lf",&log.charge);    
    logcount=getLogcount(cfp);                    /*获取记录数*/
if(logcount>0){
        fseek(cfp,size*(logcount-1),SEEK_SET);    /*fseek函数设置文件指针cfp的位置(从SEEK_SET开始移动size*(logcount-1))*/
        fread(&lastlog,size,1,cfp);              /*读入最后记录*/
log.logid=lastlog.logid 1;                    /*记录号按顺序是上次的号 1*/
        log.balance=log.charge lastlog.balance;
    }
    else{                                        /*如果文件是初始,记录数为0*/
        log.logid=1;
        log.balance=log.charge;
    }
    rewind(cfp);//重设文件指针
    getch();    //等待按下任意键,再继续执行下面的语句
    fwrite(&log,sizeof(struct LogData),1,cfp);    /*写入记录*/
    fclose(cfp);
}

void ListAllLog(FILE *cfp) /*列出所有收支流水帐*/
{
struct LogData log;
long logcount;
logcount=getLogcount(cfp);
if(logcount>0){ /*表示有记录存在*/
fseek(cfp,0L,SEEK_SET); /*定位指针到文件开始位置,0L—不移动*/
fread(&log,size,1,cfp); /*1.读取到的位置指针 2.一个对象的字节大小 3.对象个数 4.要读的目标指针*/
printf("流水号   日期 事件说明 费用(支出或收入) 余额\n");
while(!feof(cfp)){ //检测文件结束符,如果文件结束,则返回非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,cfp);
}
}
else printf("文件里没有水流记账!\n");

printf("\n");
printf("按任意键继续...");

system("pause");
}

void QueryLastLog(FILE *cfp) /*查询显示最后一条记录*/
{
struct LogData log;
long logcount;
logcount=getLogcount(cfp);
if(logcount>0){ /*表示有记录存在*/
fseek(cfp,size*(logcount-1),SEEK_SET); /*定位最后一条记录*/
    fread(&log,size,1,cfp); /*读取最后一条记录*/
    printf("最后一条流水记录为:\n"); /*显示最后一条记录*/
    printf("            流水号:%-6ld\n            日期:%-11s\n            事件说明:%-15s\n",
log.logid,log.logdate,log.lognote);
printf("            费用:%-10.2lf\n            余额:%-10.2lf\n",
log.charge,log.balance);
}
else printf("no logs in file!\n");

printf("\n");
    printf("请按任意键继续...");
getch();

}


/*函数功能:查询记录 ID 并更新账户记录*/
void Updatelog(FILE *cfp){
struct LogData log[1000],*plog=log,newlog; /*假定文件不超过1000记录*/ 
//plog=log数组首地址? 

long logcount,logid,i,index=-1;

  printf("输入要修改的流水ID:"); 
  scanf("%ld",&logid); /*输入要修改的记录 ID*/ 

/*查找帐户号是否存在,若存在则更新*/ 
logcount=getLogcount(cfp); /*获取记录数*/ 
rewind(cfp);
fread(plog,size,logcount,cfp); //相当于copy?从文件中读到数组中 
for(i=0;i<logcount;i ){
if(logid==log[i].logid){ /*已经找到*/ 
printf("流水号   日期 事件说明 费用(支出或收入) 余额\n");/*显示当前记录*/
printf("%5ld %-12s %-15s %10.2lf %10.2lf\n",
log[i].logid,log[i].logdate,log[i].lognote,log[i].charge,log[i].balance);
index=i;
break;
   

rewind(cfp); 
if(index>=0){
printf("输入日期(例如:2020-01-01):");
scanf("%s",newlog.logdate); 
printf("事件说明:");
scanf("%s",newlog.lognote); 
printf("输入费用明细(收入用“ ”and支出用“—”):");
scanf("%lf",&newlog.charge);
if(strcmp(log[index].lognote,newlog.lognote)!=0)//比较,如果不相同,则修改 
    strcpy(log[index].lognote,newlog.lognote); 
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<logcount;i )
      log[i].balance=log[i-1].balance log[i].charge;
  }
rewind(cfp);
fwrite(plog,size,logcount,cfp); /*更新回文件*/
  
}
else{  
printf("ID流水记账错误,尝试另一个!");
printf("按任意键继续...");
getch();
}
  fclose(cfp);
}

/*函数功能:查询记录 ID 并删除该账户记录*/ 
void Deletelog(FILE *cfp){ 
FILE *fp1;
struct LogData log[1000],*plog=log;/*假定文件不超过 1000 记录*/
long logcount,logid,i,index=-1; 

printf("输入要删除的流水ID:"); 
scanf("%ld",&logid); /*输入要删除的记录 ID*/ 

/*查找帐户号是否存在,若存在则更新*/ 
logcount=getLogcount(cfp); /*获取记录数*/ 
rewind(cfp); 
fread(plog,size,logcount,cfp); //从文件中读到数组中 
for(i=0;i<logcount;i ){ 
if(logid==log[i].logid){ /*已经找到,显示当前记录*/
    printf("流水号   日期 事件说明 费用(支出或收入) 余额\n");
    printf("%5ld %-12s %-15s %10.2lf %10.2lf\n",
log[i].logid,log[i].logdate,log[i].lognote,log[i].charge,log[i].balance);
index=i;
    getch();
    break; 


printf("\n"); 

rewind(cfp); 
if(index>=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("流水号   日期 事件说明 费用(支出或收入) 余额\n");
    for(i=0;i<logcount-1;i ){ /*输出当前new记录*/
    printf("%5ld %-12s %-15s %10.2lf %10.2lf\n",
log[i].logid,log[i].logdate,log[i].lognote,log[i].charge,log[i].balance);
}
getch();
fp1=fopen("cashbox.dat","wb ");
fwrite(plog,size,logcount-1,fp1);/*写回去更新*/
fclose(fp1);
  }
else{
printf("ID流水记账错误,尝试另一个!\n");
  printf("按任何键继续...");
  getch();

}