基本信息
源码名称:C语言实现个人资金管理程序(记录流水)
源码大小:0.54M
文件格式:.zip
开发语言:C/C++
更新时间:2021-08-22
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在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();
}
}
该程序是大一写的,已经不太记得细节。已经测试过了,可以完成基本操作
大作业一(个人资金管理).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();
}
}