#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<math.h>
#include<windows.h>
#define SIZE 100
typedef struct
{
long no; /*每一组输入的编号*/
long Number; /*家庭成员编号*/
char Name[20]; /*家庭成员姓名*/
float in; /*家庭成员收入*/
char intime[10]; /*收入时间*/
float out; /*家庭成员支出*/
char outtime[10]; /*支出时间*/
float sum; /*总计*/
}money;
void tianjiashouzhi()/*添加财务收支信息记录*/
{
FILE *fp = NULL; /*定义指向文件的指针*/
money Tm,ch; /*定义进行操作时的临时结构体变量*/
char Da[40],next; /*存储财务收支信息的文件名*/
int count=1; /*计算可输入数据的最大范围*/
printf("\n 请输入要添加财务收支信息的文件名:");
gets(Da);
begin:count=1;
fp=fopen(Da,"ab+");
if (fp==NULL) /*判断文件是否成功打开*/
{
printf("\n 打开文件 %s 失败!按任意键结束!\n",Da);
exit(0);
}
while(fread(&ch,sizeof(money),1,fp)!=(int)NULL) /*从文件中读取数据并判断是否成功*/
{
count++;
}
fclose(fp);
/*如果成功打开或创建文件,则提示输入家庭成员序号、姓名、收入、支出等相关信息*/
fp=fopen(Da,"ab+");/*ab+:当文件存在时,追加,当文件不存在时,创建*/
printf("输入编号,姓名,收入,收入时间,支出,支出时间,输入编号为0时结束!\n");结构体sizeof
printf("编号不超过九位,姓名不超过二十个字符。\n");
while(count<=SIZE)
{
<=count;
printf("\n 输入 编号为零时结束输入!\n");
printf("成员编号:");
scanf("%ld",&Tm.Number);
if (Tm.Number==0 ) /*如果输入的编号为0,结束*/
break;
printf("输入成员姓名:");
scanf("%s",Tm.Name);
printf("输入成员收入:");
scanf("%f",&Tm.in);
printf("输入收入时间:");
scanf("%s",Tm.intime);
printf("输入成员支出:");
scanf("%f",&Tm.out);
printf("输入支出时间:");
scanf("%s",Tm.outtime);
Tm.sum=Tm.in-Tm.out;
printf("\n");
if(fwrite(&Tm,sizeof(money),1,fp)!=1) /*将数据写入文件并判断是否成功*/
{
printf("\n写入文件 %s 失败!以任意键结束!\n",Da);
exit(0);
}
count++;
}
/*如果输入的数据量超过最大允许的范围,则提示数据不能录入*/
if (count>SIZE)
printf("\n对不起,输入的数据量超过最大允许的范围%d\n",SIZE);
fclose(fp);
system("cls");
printf("您输入的数据已成功存储在 %s 文件中。\n",Da);
printf("文件全部内容如下:\n");
fp=fopen(Da,"rb"); /*只读方
式打开二进制文件*/
if (fp==NULL) /*判断是否打开成功*/
{
printf("\n打开文件%s失败!按任意键结束!\n",Da);
exit(0);
}
while(fread(&Tm,sizeof(money),1,fp)!=(int)NULL) /*从文件中读取数据,是否读取成功*/
{ printf(">>>>>>>>>##\n");
printf("成员编号:%ld\n",Tm.Number);
printf("成员姓名:%s\n",Tm.Name);
printf("成员收入:%f元\n",Tm.in);
printf("收入时间:%s\n",Tm.intime);
printf("成员支出:%f元\n",Tm.out);
printf("支出时间:%s\n",Tm.outtime);
printf("收支总和:%f\n",Tm.sum); printf(">>>>>>>>>##\n");
printf("\n\n");
}
fclose(fp);
/*询问是否继续*/
printf("\n是否继续?(是:y/Y; 否:n/N)");
next=getche();system("cls");
putchar('\n');
if ( next=='y'||next=='Y') goto begin;
}
void shanchushouzhi() /*删除家庭成员收支信息记录*/
{
int i,result=0;
long delnum; /*存放要输入的要删除家庭成员序号*/
money Tm; /*定义进行操作时的临时结构体变量*/
money s[SIZE];
int recNumber; /*原文件中的记录数*/
char Da[40],next;
FILE *fp; /*fp指针指向存储数据的文件名*/
printf("\n请输入存储数据的文件名,按回车键结束!\n");
gets(Da);
begin:
/*以二进制读的方式打开文件*/
fp=fopen(Da,"rb");
if (fp==NULL)
{
printf("\n打开文件 %s 失败!按任意键结束!\n",Da);
exit(0);
}
/*输入要删除的家庭成员序号*/
printf("请输入要删除的家庭成员编号:");
scanf("%ld",&delnum);
printf("您要删除的编号是:%ld\n",delnum);
while(fread(&Tm,sizeof(money),1,fp)!=(int)NULL) /*从文件中读取数据,是否读取成功*/
{
if(Tm.Number==delnum)
{ printf("该项收支记录如下:\n");
printf(">>>>>###\n");
printf("该项内容编号:%ld\n",Tm.no);
printf("成员编号:%ld\n",Tm.Number);
printf("成员姓名:%s\n",Tm.Name);
printf("成员收入:%f元\n",Tm.in);
printf("收入时间:%s\n",Tm.intime);
printf("成员支出:%f元\n",Tm.out);
printf("支出时间:%s\n",Tm.outtime);
printf("收支总和:%f\n",Tm.sum);
printf(">>>>>###\n");
result=1;
}
}
rewind(fp); /*把文件指针重新指向文件的开头*/
if(result==0)
{printf("\n你输入的编号不存在,请确认后重新输入\n");
printf("\n是否继续删除?(是:y/Y;否:n/N)");
next=getche();
system("cls");/*清屏*/
putchar('\n');
if ( next=='y'||next=='Y') goto begin;
}
/*询问是否删除*/
printf("\n你确定要删除该记录吗?删除后不可恢复!!(是:y/Y;否:n/N)");
next=getche();
putchar('\n');
if ( next=='y'||next=='Y')
{ system("cls");
printf("恭喜!该项纪录已成功删除。。\n");
/*将文件中信息存入结构体数组*/
/*与要删除的家庭成员序号相匹配的项不写入数组,
循环后数组中即为去掉了要删除记录后的剩余记录*/
recNumber=0;
while((fread(&Tm,sizeof(money),1,fp))!=(int)NULL)/*从文件中读取数据,是否读取成功*/
{
if(Tm.Number!=delnum)
{
s[recNumber].;
s[recNumber].Number=Tm.Number;
strcpy(s[recNumber].Name, Tm.Name);
s[recNumber].in=Tm.in;
strcpy(s[recNumber].intime,Tm.intime);
s[recNumber].out=Tm.out;
strcpy(s[recNumber].outtime,Tm.outtime);
s[recNumber].sum=Tm.sum;
recNumber++;
}
}
fclose(fp);
/*将删除后的剩余结构体记录写入文件*/
fp=fopen(Da,"wb+"); /*读写方式打开文件,原文件内容清空*/
if (fp==NULL)
{
printf("\n记录文件 %s失败!按任意键结束!\n",Da);
exit(0);
}
for(i=0;i<recNumber;i++) /*用循环将数据写入文件*/
{
if(fwrite(&s[i],sizeof(money),1,fp)!=1)
{
printf("\n记录文件 %s 失败!按任意键结束!\n",Da);
exit(0);
}
}
fclose(fp);
/*显示删除财务信息记录后的文件*/
printf("是否查看删除后剩下的内容、\n");
printf("\n是否?(是:y/Y;否:n/N)");
next=getche();system("cls");
putchar('\n');
if ( next=='y'||next=='Y')
{
fp=fopen(Da,"rb"); /*只读方式打开文件*/
if (fp==NULL)
{
printf("\n打开文件%s失败!按任意键结束! \n",Da);
exit(0);
}
printf(">>>>>>>>>>>>>>>>\n");
printf("删除后剩余全部内容是:\n");
while(fread(&Tm,sizeof(money),1,fp)!=(int)NULL)
{ printf(">>>>>###\n");
printf("成员编号:%ld\n",Tm.Number);
printf("成员姓名:%s\n",Tm.Name);
printf("成员收入:%f元\n",Tm.in);
printf("收入时间:%s\n",Tm.intime);
printf("成员支出:%f元\n",Tm.out);
printf("支出时间:%s\n",Tm.outtime);
printf("收支总和:%f\n",Tm.sum);
printf(">>>>>###\n");
}
}
}
else
{system("cls");
printf("\n删除失败,原因:用户取消操作\n\n");
}fclose(fp);
/*询问是否继续*/
printf("\n是否继续删除?(是:y/Y;否:n/N)");
next=getche();system("cls");
putchar('\n');
if ( next=='y'||next=='Y') goto begin;
}
void xiugaishouzhi() /*修改家庭成员收支信息记录*/
{
int i,result=0;
long modnum;/*存储要修改的家庭成员序号*/
/*输入各项修改后信
息*/
long no,Number;
char Name[20];
float in;
char intime[10];
float out;
char outtime[10];
float sum;
money Tm; /*定义进行操作时的临时结构体变量*/
money s[SIZE]; /*SIZE,在shead.h头文件中定义的常量,值为100 */
int recNumber;
char Da[40],next;
/*Da存储家庭成员收支信息信息的文件名,next为是否进行下一次操作的选项*/
FILE *fp; /*fp指针指向存储数据的文件名*/
/*输入要进行修改记录的文件名*/
printf("\n请输入存储数据的文件名,按回车键结束!\n");
gets(Da);
begin:
fp=fopen(Da,"rb"); /*只读方式打开文件*/
if(fp==NULL)
{
printf("\n打开文件 %s 失败!按任意键结束!\n",Da);
exit(0);
}
printf("请输入您要修改的家庭成员的成员编号:");
scanf("%ld",&modnum);
printf("您要修改的成员编号是:%ld\n\n",modnum);
while(fread(&Tm,sizeof(money),1,fp)!=(int)NULL) /*读取文件内容,判断是否读取成功*/
{
if(Tm.Number==modnum) /*输入的编号和文件内容的编号一致*/
{
printf(">>>>>###\n");
printf("\n该项内容编号:%ld\n",Tm.no);
printf("\n 成员编号:%ld\n",Tm.Number);
printf("\n 成员姓名:%s\n",Tm.Name);
printf("\n 成员收入:%f元\n",Tm.in);
printf("\n 收入时间:%s\n",Tm.intime);
printf("\n 成员支出:%f元\n",Tm.out);
printf("\n 支出时间:%s\n",Tm.outtime);
printf("\n 收支总和:%f\n",Tm.sum);
printf(">>>>>###\n");
result=1;
}
}
rewind(fp); /*把文件指针指向文件的开头*/
if(result==0)
{printf("你输入的编号不存在,请确认后重新输入:\n");
printf("\n是否继续?(是:y/Y,否:n/N)");
next=getche();system("cls");
putchar('\n');
if (next=='y'||next=='Y') goto begin;
else exit(0);
}
result=0;
printf("请输入你要修改的该项内容编号:\n");
scanf("%ld",&no);
/*输入要修改记录的各项内容值*/
Number=modnum;
printf("输入姓名,收入,收入时间,支出,支出时间,输入编号为0时结束!\n");
printf("成员姓名:");
scanf("%s",Name);
printf("成员收入:");
scanf("%f",&in);
printf("收入时间:");
scanf("%s",intime);
printf("成员支出:");
scanf("%f",&out);
printf("支出时间:");
scanf("%s",outtime);
sum=in-out;
/*将文件中要修改的信息存入结构体数组*/
recNumber=0;
/
*循环将文件数据读入结构体数组,
如文件中的数据家庭成员内容编号和要修改的家庭成员内容编号不符,则原样写入数组,
如文件中数据的家庭成员内容编号和要修改家庭成员内容编号匹配,
则根据输入的各项修改内容重新赋值,即修改
,并写入数组*/
while((fread(&Tm,sizeof(money),1,fp))!=(int)NULL) /*读取文件内容。是否成功*/
{
!=no) /*输入的内容编号和文件内容编号不一致*/
{
s[recNumber].;
s[recNumber].Number=Tm.Number;
strcpy(s[recNumber].Name, Tm.Name);
s[recNumber].in=Tm.in;
strcpy(s[recNumber].intime, Tm.intime);
s[recNumber].out=Tm.out;
strcpy(s[recNumber].outtime, Tm.outtime);
s[recNumber].sum=Tm.sum;
}
==no) /*输入的内容编号和文件内容编号一致*/
{
s[recNumber].no=no;
s[recNumber].Number=Number;
strcpy(s[recNumber].Name,Name);
s[recNumber].in=in;
strcpy(s[recNumber].intime,intime);
s[recNumber].out=out;
strcpy(s[recNumber].outtime,outtime);
s[recNumber].sum=sum;
result=1;
}
recNumber++;
}
fclose(fp);
/
*将修改后的结构体数组记录写入文件*/
fp=fopen(Da,"wb+"); /*打开文件,原文件内容清空*/
if (fp==NULL)
{
printf("\n打开文件%s失败!按任意键结束!\n",Da);
exit(0);
}
for(i=0;i<recNumber;i++) /*采用循环将数据写入文件*/
{
if(fwrite(&s[i],sizeof(money),1,fp)!=1)
{
printf("\n写入文件 %s 失败!按任意键结束!\n",Da);
exit(0);
}
}
fclose(fp);
if(result==1)
{
printf("文件修改成功,已成功保存在用户文件夹\n");
/*询问是否查看修改后的文件*/
printf("\n是否查看修改后的文件?(是:y/Y,否:n/N)");
next=getche();system("cls");
putchar('\n');
if (next=='y'||next=='Y')
{/*显示修改后的文件*/
fp=fopen(Da,"rb"); /*只读方式打开文件*/
if (fp==NULL)
{
printf("\n打开文件%s失败!按任意键结束!\n",Da);
exit(0);
}
system("cls");
printf("\n修改后的文件全部内容是:\n");
while(fread(&Tm,sizeof(money),1,fp)!=(int)NULL)
{ printf(">>>>>###\n\n");
printf(" 成员编号:%ld\n",Tm.Number);
printf(" 成员姓名:%s\n",Tm.Name);
printf(" 成员收入:%f元\n",Tm.in);
printf(" 收入时间:%s\n",Tm.intime);
printf(" 成员支出:%f元\n",Tm.out);
printf(" 支出时间:%s\n",Tm.outtime);
printf(" 收支总和:%f\n\n",Tm.sum);
printf(">>>>>###\n");
printf("\n");
}
fclose(fp);
}
}
if(result==0)
printf("\n你输入的内容编号不存在。文件修改失败。。\n\n");
/*提示是否进行下一次修改*/
printf("\n是否继续?(是:y/Y,否:n/N)");
next=getche();system("cls");
putchar
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
ref-struct-napi用法
« 上一篇
学生管理系统C代码
下一篇 »
推荐文章
热门文章
-
随机森林特征选择原理
2024-10-02 -
自动驾驶系统中的随机森林算法解析
2024-10-02 -
随机森林算法及其在生物信息学中的应用
2024-10-02 -
监督学习中的随机森林算法解析(六)
2024-10-02 -
随机森林算法在数据分析中的应用
2024-10-02 -
机器学习——随机森林,RandomForestClassifier参数含义详解
2024-10-02 -
随机森林 的算法
2024-10-02 -
随机森林算法作用
2024-10-02 -
监督学习中的随机森林算法解析(十)
2024-10-02 -
随机森林算法案例
2024-10-02 -
随机森林案例
2024-10-02 -
二分类问题常用的模型
2024-10-02 -
绘制ssd框架训练流程
2024-10-02 -
一种基于信息熵和DTW的多维时间序列相似性度量算法
2024-10-02 -
SVM训练过程范文
2024-10-02 -
如何使用支持向量机进行股票预测与交易分析
2024-10-02 -
二分类交叉熵损失函数binary
2024-10-02 -
tinybert_训练中文文本分类模型_概述说明
2024-10-02 -
基于门控可形变卷积和分层Transformer的图像修复模型及其应用
2024-10-02 -
人工智能开发技术的测试和评估方法
2024-10-02
最新文章
-
基于随机森林的数据分类算法改进
2024-10-02 -
人工智能中的智能识别与分类技术
2024-10-02 -
基于人工智能技术的随机森林算法在医疗数据挖掘中的应用
2024-10-02 -
随机森林回归模型的建模步骤
2024-10-02 -
r语言随机森林预测模型校准曲线
2024-10-02 -
《2024年随机森林算法优化研究》范文
2024-10-02
发表评论