在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例Windows系统编程 → C语言实现个人资金管理程序(记录流水)

C语言实现个人资金管理程序(记录流水)

Windows系统编程

下载此实例
  • 开发语言:C/C++
  • 实例大小:0.54M
  • 下载次数:8
  • 浏览次数:327
  • 发布时间:2021-08-22
  • 实例类别:Windows系统编程
  • 发 布 人:唐瑛琪
  • 文件格式:.zip
  • 所需积分:2
 相关标签: C语言 语言 资金管理程序

实例介绍

【实例简介】该程序是大一写的,已经不太记得细节。已经测试过了,可以完成基本操作
【实例截图】大作业一(个人资金管理).zipfrom clipboard
【核心代码】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();

}

实例下载地址

C语言实现个人资金管理程序(记录流水)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警