这都是自己所编写的哦,绝对原创!
源自老师所布置的作业,不想努力随着岁月的流逝而消散,也希望能帮助有需之士……
/*文件名:financial.h*/
typedef struct /*工资基本数据类型*/
{
int date; /*日期,为关键字,惟一标识一个工资记录*/
float cost; /*金额*/
} WAGES;
typedef struct /*兼职基本数据类型*/
{
int date; /*日期,为关键字,惟一标识一个兼职记录*/
float cost; /*金额*/
} PARTTIME;
typedef struct /*其他基本数据类型*/
{
int date; /*日期,为关键字,惟一标识一个其他记录*/
float cost; /*金额*/
} OTHER;
typedef struct /*生活消费基本数据类型*/
{
int date; /*日期,为关键字,惟一标识一个生活消费记录*/
float cost; /*金额*/
} DAILY;
typedef struct /*娱乐消费基本数据类型*/
{
int date; /*日期,为关键字,惟一标识一个娱乐消费记录*/
float cost; /*金额*/
} ENTERTAINMENT;
typedef struct /*储蓄基本数据类型*/
{
int date; /*日期,为关键字,惟一标识一个储蓄记录*/
float cost; /*金额*/
} DEPOSIT;
typedef struct /*其他基本数据类型*/
{
int date; /*日期,为关键字,惟一标识一个其他记录*/
float cost; /*金额*/
} OTHER2;
/*文件名:income.cpp*/
#include <stdio.h>
#include "financial.h"
#define MAX 1000
void income();
extern void expend(); /*外部函数声明*/
main()
{
int sel2;
do
{
printf("主选项 1:个人收入 2:个人支出 0:退出=>");
scanf("%d",&sel2);
switch(sel2)
{
case 1:income();break; /*调用各功能函数*/
case 2:expend();break;
case 0:break;
default:printf("**选择错误\n");break;
}
} while (sel2!=0);
}
void income() /*个人收入*/
{
void wages(); /*各被调函数声明*/
void parttime();
void other();
int sel1;
do
{
printf("个人收入项目: 1:工资 2:兼职 3:其他 0:返回=>");
scanf("%d",&sel1);
switch(sel1)
{
case 1:wages();break; /*调用各功能函数*/
case 2:parttime();break;
case 3:other();break;
case 0:break;
default:printf("\t**选择错误\n");break;
}
} while (sel1!=0);
}
void wages()
{ void inwag(); /*各被调函数声明*/
void upwag();
void dewag();
void dawag();
int sel;
do
{
printf("工资记录操作: 1:添加 2:修改 3:删除 4:全删 0:返回=>");
scanf("%d",&sel);
switch(sel)
{
case 1:inwag();break; /*调用各功能函数*/
case 2:upwag();break;
case 3:dewag();break;
case 4:dawag();break;
case 0:break;
default:printf("\t**选择错误\n");break;
}
} while (sel!=0);
}
void inwag() /*添加一个记录*/
{
FILE *fp;
WAGES wag,wag1;
if ((fp=fopen("wages.dat","ab+"))==NULL) /*若文件存在以追加模式打开*/
if ((fp=fopen("wages.dat","wb+"))==NULL) /*否则以写模式打开*/
{
printf("\t>>不能建立wages.dat文件\n");
return;
}
printf("输入格式:日期 (例如20050101) 金额\n");
printf("个人记录:");
scanf("%d%f",&wag.date,&wag.cost);
rewind(fp); /*将位置指针移到文件首*/
while (!feof(fp)) /*查找是否有重日期的记录*/
{
fread(&wag1,sizeof(WAGES),1,fp);
if (wag1.date==wag.date) break;
}
if (!feof(fp)) /*存在重日期的记录,则提示相应信息*/
printf("\t>>已经存在此活动,应使用修改功能\n");
else /*不存在重日期的记录,则将新记录写入文件*/
fwrite(&wag,sizeof(WAGES),1,fp);
fclose(fp); /*关闭文件*/
}
void upwag() /*修改一个项目记录,规定不能修改日期,可以修改除日期外的其他数据*/
{
FILE *fp;
WAGES wag,nwag;
int i,dnum;
if ((fp=fopen("wages.dat","rb+"))==NULL)
{
printf("\t>>不能打开wages.dat文件\n");
return;
}
fseek(fp,0,2);
if (ftell(fp)>0) /*文件不空*/
{
rewind(fp);
printf("要修改的日期:");
scanf("%d",&dnum);
for (i=0;!feof(fp) && fread(&wag,sizeof(WAGES),1,fp)==1;i++)
if (wag.date==dnum) break;
if (feof(fp))
{
printf("\t>>没有%d日期的状态\n",dnum);
return;
}
printf("\t>>个人记录:%d %f\n",wag.date,wag.cost);
printf("输入格式: 金额:");
scanf("%f",&nwag.cost); /*获取新金额记录*/
nwag.date=wag.date; /*不能修改日期*/
fseek(fp,-(long)sizeof(WAGES),SEEK_CUR); /*指向修改记录开头*/
fwrite(&nwag,sizeof(WAGES),1,fp); /*用newwag覆盖当前记录*/
fclose(fp);
}
else /*文件为空*/
{
printf("\t>>无任何记录\n");
fclose(fp);
}
}
void dewag() /*按日期删除这条记录*/
{
void dawag();
FILE *fp;
WAGES wag[MAX];
int i,j,n,dnum;
if ((fp=fopen("wages.dat","rb"))==NULL)
{
printf("\t>>不能打开wages.dat文件\n");
return;
}
fseek(fp,0,2); /*文件位置指针移到文件末尾*/
if (ftell(fp)>0) /*文件不空*/
{
rewind(fp);
for (n=0;!feof(fp) && fread(&wag[n],sizeof(WAGES),1,fp);n++); /*n为记录个数*/
printf("要删除的日期:");
scanf("%d",&dnum);
for (i=0;i<n && wag[i].date!=dnum;i++);
if (i>=n)
{
printf("\t>>没有这个日期\n",dnum);
return;
}
fclose(fp); /*关闭重新以"w+"模式打开文件*/
if (n>1) /*原来记录数>1时重写文件*/
{
for (j=i;j<n-1;j++) /*记录移动,从wag数组中删除之*/
wag[j]=wag[j+1];
fp=fopen("wages.dat","wb"); /*删除原有的全部记录*/
for (i=0;i<n-1;i++) /*将wag中数据写入文件中*/
fwrite(&wag[i],sizeof(WAGES),1,fp);
fclose(fp);
}
else dawag(); /*原来只有一个记录,则全删除之*/
}
else /*文件为空*/
{
printf("\t>>无任何记录\n");
fclose(fp);
}
}
void dawag() /*删除全部记录*/
{
FILE *fp;
if ((fp=fopen("wages.dat","wb"))==NULL) /*删除原有全部记录*/
{
printf("\t>>不能打开wages.dat文件\n");
return;
}
printf("\t>>全部记录已删\n");
fclose(fp);
}
void parttime() /*兼职*/
{
void inpart(); /*各被调函数声明*/
void uppart();
void depart();
void dapart();
int sel;
do
{
printf("兼职记录操作: 1:添加 2:修改 3:删除 4:全删 0:返回=>");
scanf("%d",&sel);
switch(sel)
{
case 1:inpart();break; /*调用各功能函数*/
case 2:uppart();break;
case 3:depart();break;
case 4:dapart();break;
case 0:break;
default:printf("\t**选择错误\n");break;
}
} while (sel!=0);
}
void inpart() /*添加一个记录*/
{
FILE *fp;
PARTTIME part,part1;
if ((fp=fopen("parttime.dat","ab+"))==NULL) /*若文件存在以追加模式打开*/
if ((fp=fopen("parttime.dat","wb+"))==NULL) /*否则以写模式打开*/
{
printf("\t>>不能建立parttime.dat文件\n");
return;
}
printf("输入格式:日期 (例如20050101) 金额\n");
printf("个人记录:");
scanf("%d%f",&part.date,&part.cost);
rewind(fp); /*将位置指针移到文件首*/
while (!feof(fp)) /*查找是否有重日期的记录*/
{
fread(&part1,sizeof(PARTTIME),1,fp);
if (part1.date==part.date) break;
}
if (!feof(fp)) /*存在重日期的记录,则提示相应信息*/
printf("\t>>已经存在此活动,应使用修改功能\n");
else /*不存在重日期的记录,则将新记录写入文件*/
fwrite(&part,sizeof(PARTTIME),1,fp);
fclose(fp); /*关闭文件*/
}
void uppart() /*修改一个项目记录,规定不能修改日期,可以修改除日期外的其他数据*/
{
FILE *fp;
PARTTIME part,npart;
int i,dnum;
if ((fp=fopen("parttime.dat","rb+"))==NULL)
{
printf("\t>>不能打开parttime.dat文件\n");
return;
}
fseek(fp,0,2);
if (ftell(fp)>0) /*文件不空*/
{
rewind(fp);
printf("要修改的日期:");
scanf("%d",&dnum);
for (i=0;!feof(fp) && fread(&part,sizeof(PARTTIME),1,fp)==1;i++)
if (part.date==dnum) break;
if (feof(fp))
{
printf("\t>>没有%d日期的状态\n",dnum);
return;
}
printf("\t>>个人记录:%d %f\n",part.date,part.cost);
printf("输入格式: 金额:");
scanf("%f",&npart.cost); /*获取新金额记录*/
npart.date=part.date; /*不能修改日期*/
fseek(fp,-(long)sizeof(PARTTIME),SEEK_CUR); /*指向修改记录开头*/
fwrite(&npart,sizeof(PARTTIME),1,fp); /*用newpart覆盖当前记录*/
fclose(fp);
}
else /*文件为空*/
{
printf("\t>>无任何记录\n");
fclose(fp);
}
}
void depart() /*按日期删除这条记录*/
{
void dapart();
FILE *fp;
PARTTIME part[MAX];
int i,j,n,dnum;
if ((fp=fopen("parttime.dat","rb"))==NULL)
{
printf("\t>>不能打开parttime.dat文件\n");
return;
}
fseek(fp,0,2); /*文件位置指针移到文件末尾*/
if (ftell(fp)>0) /*文件不空*/
{
rewind(fp);
for (n=0;!feof(fp) && fread(&part[n],sizeof(PARTTIME),1,fp);n++); /*n为记录个数*/
printf("要删除的日期:");
scanf("%d",&dnum);
for (i=0;i<n && part[i].date!=dnum;i++);
if (i>=n)
{
printf("\t>>没有这个日期\n",dnum);
return;
}
fclose(fp); /*关闭重新以"w+"模式打开文件*/
if (n>1) /*原来记录数>1时重写文件*/
{
for (j=i;j<n-1;j++) /*记录移动,从part数组中删除之*/
part[j]=part[j+1];
fp=fopen("parttime.dat","wb"); /*删除原有的全部记录*/
for (i=0;i<n-1;i++) /*将part中数据写入文件中*/
fwrite(&part[i],sizeof(PARTTIME),1,fp);
fclose(fp);
}
else dapart(); /*原来只有一个记录,则全删除之*/
}
else /*文件为空*/
{
printf("\t>>无任何记录\n");
fclose(fp);
}
}
void dapart() /*删除全部记录*/
{
FILE *fp;
if ((fp=fopen("parttime.dat","wb"))==NULL) /*删除原有全部记录*/
{
printf("\t>>不能打开partes.dat文件\n");
return;
}
printf("\t>>全部记录已删\n");
fclose(fp);
}
void other() /*其它*/
{
void inoth(); /*各被调函数声明*/
void upoth();
void deoth();
void daoth();
int sel;
do
{
printf("其他记录操作: 1:添加 2:修改 3:删除 4:全删 0:返回=>");
scanf("%d",&sel);
switch(sel)
{
case 1:inoth();break; /*调用各功能函数*/
case 2:upoth();break;
case 3:deoth();break;
case 4:daoth();break;
case 0:break;
default:printf("\t**选择错误\n");break;
}
} while (sel!=0);
}
void inoth() /*添加一个记录*/
{
FILE *fp;
OTHER oth,oth1;
if ((fp=fopen("other.dat","ab+"))==NULL) /*若文件存在以追加模式打开*/
if ((fp=fopen("other.dat","wb+"))==NULL) /*否则以写模式打开*/
{
printf("\t>>不能建立other.dat文件\n");
return;
}
printf("输入格式:日期 (例如20050101) 金额\n");
printf("个人记录:");
scanf("%d%f",&oth.date,&oth.cost);
rewind(fp); /*将位置指针移到文件首*/
while (!feof(fp)) /*查找是否有重日期的记录*/
{
fread(&oth1,sizeof(OTHER),1,fp);
if (oth1.date==oth.date) break;
}
if (!feof(fp)) /*存在重日期的记录,则提示相应信息*/
printf("\t>>已经存在此活动,应使用修改功能\n");
else /*不存在重日期的记录,则将新记录写入文件*/
fwrite(&oth,sizeof(OTHER),1,fp);
fclose(fp); /*关闭文件*/
}
void upoth() /*修改一个项目记录,规定不能修改日期,可以修改除日期外的其他数据*/
{
FILE *fp;
OTHER oth,noth;
int i,dnum;
if ((fp=fopen("other.dat","rb+"))==NULL)
{
printf("\t>>不能打开other.dat文件\n");
return;
}
fseek(fp,0,2);
if (ftell(fp)>0) /*文件不空*/
{
rewind(fp);
printf("要修改的日期:");
scanf("%d",&dnum);
for (i=0;!feof(fp) && fread(&oth,sizeof(OTHER),1,fp)==1;i++)
if (oth.date==dnum) break;
if (feof(fp))
{
printf("\t>>没有%d日期的状态\n",dnum);
return;
}
printf("\t>>个人记录:%d %f\n",oth.date,oth.cost);
printf("输入格式: 金额:");
scanf("%f",¬h.cost); /*获取新金额记录*/
noth.date=oth.date; /*不能修改日期*/
fseek(fp,-(long)sizeof(OTHER),SEEK_CUR); /*指向修改记录开头*/
fwrite(¬h,sizeof(OTHER),1,fp); /*用newoth覆盖当前记录*/
fclose(fp);
}
else /*文件为空*/
{
printf("\t>>无任何记录\n");
fclose(fp);
}
}
void deoth() /*按日期删除这条记录*/
{
void daoth();
FILE *fp;
OTHER oth[MAX];
int i,j,n,dnum;
if ((fp=fopen("other.dat","rb"))==NULL)
{
printf("\t>>不能打开other.dat文件\n");
return;
}
fseek(fp,0,2); /*文件位置指针移到文件末尾*/
if (ftell(fp)>0) /*文件不空*/
{
rewind(fp);
for (n=0;!feof(fp) && fread(&oth[n],sizeof(OTHER),1,fp);n++); /*n为记录个数*/
printf("要删除的日期:");
scanf("%d",&dnum);
for (i=0;i<n && oth[i].date!=dnum;i++);
if (i>=n)
{
printf("\t>>没有这个日期\n",dnum);
return;
}
fclose(fp); /*关闭重新以"w+"模式打开文件*/
if (n>1) /*原来记录数>1时重写文件*/
{
for (j=i;j<n-1;j++) /*记录移动,从oth数组中删除之*/
oth[j]=oth[j+1];
fp=fopen("other.dat","wb"); /*删除原有的全部记录*/
for (i=0;i<n-1;i++) /*将oth中数据写入文件中*/
fwrite(&oth[i],sizeof(OTHER),1,fp);
fclose(fp);
}
else daoth(); /*原来只有一个记录,则全删除之*/
}
else /*文件为空*/
{
printf("\t>>无任何记录\n");
fclose(fp);
}
}
void daoth() /*删除全部记录*/
{
FILE *fp;
if ((fp=fopen("other.dat","wb"))==NULL) /*删除原有全部记录*/
{
printf("\t>>不能打开othes.dat文件\n");
return;
}
printf("\t>>全部记录已删\n");
fclose(fp);
}
/*文件名:expend.cpp*/
#include <stdio.h>
#include "financial.h"
#define MAX 1000
void expend()
{
void daily(); /*各被调函数声明*/
void entermainment();
void deposit();
void other2();
int sel1;
do
{
printf("个人支出项目: 1:生活消费 2:娱乐消费 3:储蓄 4:其他 0:返回=>");
scanf("%d",&sel1);
switch(sel1)
{
case 1:daily();break; /*调用各功能函数*/
case 2:entermainment();break;
case 3:deposit();break;
case 4:other2();break;
case 0:break;
default:printf("\t**选择错误\n");break;
}
} while (sel1!=0);
}
void daily() /*生活消费*/
{
void indai(); /*各被调函数声明*/
void updai();
void dedai();
void dadai();
int sel;
do
{
printf("生活消费记录操作: 1:添加 2:修改 3:删除 4:全删 0:返回=>");
scanf("%d",&sel);
switch(sel)
{
case 1:indai();break; /*调用各功能函数*/
case 2:updai();break;
case 3:dedai();break;
case 4:dadai();break;
case 0:break;
default:printf("\t**选择错误\n");break;
}
} while (sel!=0);
}
void indai() /*添加一个记录*/
{
FILE *fp;
DAILY dai,dai1;
if ((fp=fopen("daily.dat","ab+"))==NULL) /*若文件存在以追加模式打开*/
if ((fp=fopen("daily.dat","wb+"))==NULL) /*否则以写模式打开*/
{
printf("\t>>不能建立daily.dat文件\n");
return;
}
printf("输入格式:日期 (例如20050101) 金额\n");
printf("个人记录:");
scanf("%d%f",&dai.date,&dai.cost);
rewind(fp); /*将位置指针移到文件首*/
while (!feof(fp)) /*查找是否有重日期的记录*/
{
fread(&dai1,sizeof(DAILY),1,fp);
if (dai1.date==dai.date) break;
}
if (!feof(fp)) /*存在重日期的记录,则提示相应信息*/
printf("\t>>已经存在此活动,应使用修改功能\n");
else /*不存在重日期的记录,则将新记录写入文件*/
fwrite(&dai,sizeof(DAILY),1,fp);
fclose(fp); /*关闭文件*/
}
void updai() /*修改一个项目记录,规定不能修改日期,可以修改除日期外的其他数据*/
{
FILE *fp;
DAILY dai,ndai;
int i,dnum;
if ((fp=fopen("daily.dat","rb+"))==NULL)
{
printf("\t>>不能打开daily.dat文件\n");
return;
}
fseek(fp,0,2);
if (ftell(fp)>0) /*文件不空*/
{
rewind(fp);
printf("要修改的日期:");
scanf("%d",&dnum);
for (i=0;!feof(fp) && fread(&dai,sizeof(DAILY),1,fp)==1;i++)
if (dai.date==dnum) break;
if (feof(fp))
{
printf("\t>>没有%d日期的状态\n",dnum);
return;
}
printf("\t>>个人记录:%d %f\n",dai.date,dai.cost);
printf("输入格式: 金额:");
scanf("%f",&ndai.cost); /*获取新金额记录*/
ndai.date=dai.date; /*不能修改日期*/
fseek(fp,-(long)sizeof(DAILY),SEEK_CUR); /*指向修改记录开头*/
fwrite(&ndai,sizeof(DAILY),1,fp); /*用newdaid覆盖当前记录*/
fclose(fp);
}
else /*文件为空*/
{
printf("\t>>无任何记录\n");
fclose(fp);
}
}
void dedai() /*按日期删除这条记录*/
{
void dadai();
FILE *fp;
DAILY dai[MAX];
int i,j,n,dnum;
if ((fp=fopen("daily.dat","rb"))==NULL)
{
printf("\t>>不能打开daily.dat文件\n");
return;
}
fseek(fp,0,2); /*文件位置指针移到文件末尾*/
if (ftell(fp)>0) /*文件不空*/
{
rewind(fp);
for (n=0;!feof(fp) && fread(&dai[n],sizeof(DAILY),1,fp);n++); /*n为记录个数*/
printf("要删除的日期:");
scanf("%d",&dnum);
for (i=0;i<n && dai[i].date!=dnum;i++);
if (i>=n)
{
printf("\t>>没有这个日期\n",dnum);
return;
}
fclose(fp); /*关闭重新以"w+"模式打开文件*/
if (n>1) /*原来记录数>1时重写文件*/
{
for (j=i;j<n-1;j++) /*记录移动,从dai数组中删除之*/
dai[j]=dai[j+1];
fp=fopen("daily.dat","wb"); /*删除原有的全部记录*/
for (i=0;i<n-1;i++) /*将daid中数据写入文件中*/
fwrite(&dai[i],sizeof(DAILY),1,fp);
fclose(fp);
}
else dadai(); /*原来只有一个记录,则全删除之*/
}
else /*文件为空*/
{
printf("\t>>无任何记录\n");
fclose(fp);
}
}
void dadai() /*删除全部记录*/
{
FILE *fp;
if ((fp=fopen("daily.dat","wb"))==NULL) /*删除原有全部记录*/
{
printf("\t>>不能打开daily.dat文件\n");
return;
}
printf("\t>>全部记录已删\n");
fclose(fp);
}
void entermainment() /*娱乐消费*/
{
void inent(); /*各被调函数声明*/
void upent();
void deent();
void daent();
int sel;
do
{
printf("娱乐消费记录操作: 1:添加 2:修改 3:删除 4:全删 0:返回=>");
scanf("%d",&sel);
switch(sel)
{
case 1:inent();break; /*调用各功能函数*/
case 2:upent();break;
case 3:deent();break;
case 4:daent();break;
case 0:break;
default:printf("\t**选择错误\n");break;
}
} while (sel!=0);
}
void inent() /*添加一个记录*/
{
FILE *fp;
ENTERTAINMENT ent,ent1;
if ((fp=fopen("entertainment.dat","ab+"))==NULL) /*若文件存在以追加模式打开*/
if ((fp=fopen("entertainment.dat","wb+"))==NULL) /*否则以写模式打开*/
{
printf("\t>>不能建立entertainment.dat文件\n");
return;
}
printf("输入格式:日期 (例如20050101) 金额\n");
printf("个人记录:");
scanf("%d%f",&ent.date,&ent.cost);
rewind(fp); /*将位置指针移到文件首*/
while (!feof(fp)) /*查找是否有重日期的记录*/
{
fread(&ent1,sizeof(ENTERTAINMENT),1,fp);
if (ent1.date==ent.date) break;
}
if (!feof(fp)) /*存在重日期的记录,则提示相应信息*/
printf("\t>>已经存在此活动,应使用修改功能\n");
else /*不存在重日期的记录,则将新记录写入文件*/
fwrite(&ent,sizeof(ENTERTAINMENT),1,fp);
fclose(fp); /*关闭文件*/
}
void upent() /*修改一个项目记录,规定不能修改日期,可以修改除日期外的其他数据*/
{
FILE *fp;
ENTERTAINMENT ent,nent;
int i,dnum;
if ((fp=fopen("entertainment.dat","rb+"))==NULL)
{
printf("\t>>不能打开entertainment.dat文件\n");
return;
}
fseek(fp,0,2);
if (ftell(fp)>0) /*文件不空*/
{
rewind(fp);
printf("要修改的日期:");
scanf("%d",&dnum);
for (i=0;!feof(fp) && fread(&ent,sizeof(ENTERTAINMENT),1,fp)==1;i++)
if (ent.date==dnum) break;
if (feof(fp))
{
printf("\t>>没有%d日期的状态\n",dnum);
return;
}
printf("\t>>个人记录:%d %f\n",ent.date,ent.cost);
printf("输入格式: 金额:");
scanf("%f",&nent.cost); /*获取新金额记录*/
nent.date=ent.date; /*不能修改日期*/
fseek(fp,-(long)sizeof(ENTERTAINMENT),SEEK_CUR); /*指向修改记录开头*/
fwrite(&nent,sizeof(ENTERTAINMENT),1,fp); /*用newentd覆盖当前记录*/
fclose(fp);
}
else /*文件为空*/
{
printf("\t>>无任何记录\n");
fclose(fp);
}
}
void deent() /*按日期删除这条记录*/
{
void daent();
FILE *fp;
ENTERTAINMENT ent[MAX];
int i,j,n,dnum;
if ((fp=fopen("entertainment.dat","rb"))==NULL)
{
printf("\t>>不能打开entertainment.dat文件\n");
return;
}
fseek(fp,0,2); /*文件位置指针移到文件末尾*/
if (ftell(fp)>0) /*文件不空*/
{
rewind(fp);
for (n=0;!feof(fp) && fread(&ent[n],sizeof(ENTERTAINMENT),1,fp);n++); /*n为记录个数*/
printf("要删除的日期:");
scanf("%d",&dnum);
for (i=0;i<n && ent[i].date!=dnum;i++);
if (i>=n)
{
printf("\t>>没有这个日期\n",dnum);
return;
}
fclose(fp); /*关闭重新以"w+"模式打开文件*/
if (n>1) /*原来记录数>1时重写文件*/
{
for (j=i;j<n-1;j++) /*记录移动,从ent数组中删除之*/
ent[j]=ent[j+1];
fp=fopen("entertainment.dat","wb"); /*删除原有的全部记录*/
for (i=0;i<n-1;i++) /*将entd中数据写入文件中*/
fwrite(&ent[i],sizeof(ENTERTAINMENT),1,fp);
fclose(fp);
}
else daent(); /*原来只有一个记录,则全删除之*/
}
else /*文件为空*/
{
printf("\t>>无任何记录\n");
fclose(fp);
}
}
void daent() /*删除全部记录*/
{
FILE *fp;
if ((fp=fopen("entertainment.dat","wb"))==NULL) /*删除原有全部记录*/
{
printf("\t>>不能打开entertainment.dat文件\n");
return;
}
printf("\t>>全部记录已删\n");
fclose(fp);
}
void deposit() /*储蓄*/
{
void indep(); /*各被调函数声明*/
void updep();
void dedep();
void dadep();
int sel;
do
{
printf("储蓄记录操作: 1:添加 2:修改 3:删除 4:全删 0:返回=>");
scanf("%d",&sel);
switch(sel)
{
case 1:indep();break; /*调用各功能函数*/
case 2:updep();break;
case 3:dedep();break;
case 4:dadep();break;
case 0:break;
default:printf("\t**选择错误\n");break;
}
} while (sel!=0);
}
void indep() /*添加一个记录*/
{
FILE *fp;
DEPOSIT dep,dep1;
if ((fp=fopen("deposit.dat","ab+"))==NULL) /*若文件存在以追加模式打开*/
if ((fp=fopen("deposit.dat","wb+"))==NULL) /*否则以写模式打开*/
{
printf("\t>>不能建立deposit.dat文件\n");
return;
}
printf("输入格式:日期 (例如20050101) 金额\n");
printf("个人记录:");
scanf("%d%f",&dep.date,&dep.cost);
rewind(fp); /*将位置指针移到文件首*/
while (!feof(fp)) /*查找是否有重日期的记录*/
{
fread(&dep1,sizeof(DEPOSIT),1,fp);
if (dep1.date==dep.date) break;
}
if (!feof(fp)) /*存在重日期的记录,则提示相应信息*/
printf("\t>>已经存在此活动,应使用修改功能\n");
else /*不存在重日期的记录,则将新记录写入文件*/
fwrite(&dep,sizeof(DEPOSIT),1,fp);
fclose(fp); /*关闭文件*/
}
void updep() /*修改一个项目记录,规定不能修改日期,可以修改除日期外的其他数据*/
{
FILE *fp;
DEPOSIT dep,ndep;
int i,dnum;
if ((fp=fopen("deposit.dat","rb+"))==NULL)
{
printf("\t>>不能打开deposit.dat文件\n");
return;
}
fseek(fp,0,2);
if (ftell(fp)>0) /*文件不空*/
{
rewind(fp);
printf("要修改的日期:");
scanf("%d",&dnum);
for (i=0;!feof(fp) && fread(&dep,sizeof(DEPOSIT),1,fp)==1;i++)
if (dep.date==dnum) break;
if (feof(fp))
{
printf("\t>>没有%d日期的状态\n",dnum);
return;
}
printf("\t>>个人记录:%d %f\n",dep.date,dep.cost);
printf("输入格式: 金额:");
scanf("%f",&ndep.cost); /*获取新金额记录*/
ndep.date=dep.date; /*不能修改日期*/
fseek(fp,-(long)sizeof(DEPOSIT),SEEK_CUR); /*指向修改记录开头*/
fwrite(&ndep,sizeof(DEPOSIT),1,fp); /*用newdepd覆盖当前记录*/
fclose(fp);
}
else /*文件为空*/
{
printf("\t>>无任何记录\n");
fclose(fp);
}
}
void dedep() /*按日期删除这条记录*/
{
void dadep();
FILE *fp;
DEPOSIT dep[MAX];
int i,j,n,dnum;
if ((fp=fopen("deposit.dat","rb"))==NULL)
{
printf("\t>>不能打开deposit.dat文件\n");
return;
}
fseek(fp,0,2); /*文件位置指针移到文件末尾*/
if (ftell(fp)>0) /*文件不空*/
{
rewind(fp);
for (n=0;!feof(fp) && fread(&dep[n],sizeof(DEPOSIT),1,fp);n++); /*n为记录个数*/
printf("要删除的日期:");
scanf("%d",&dnum);
for (i=0;i<n && dep[i].date!=dnum;i++);
if (i>=n)
{
printf("\t>>没有这个日期\n",dnum);
return;
}
fclose(fp); /*关闭重新以"w+"模式打开文件*/
if (n>1) /*原来记录数>1时重写文件*/
{
for (j=i;j<n-1;j++) /*记录移动,从dep数组中删除之*/
dep[j]=dep[j+1];
fp=fopen("deposit.dat","wb"); /*删除原有的全部记录*/
for (i=0;i<n-1;i++) /*将depd中数据写入文件中*/
fwrite(&dep[i],sizeof(DEPOSIT),1,fp);
fclose(fp);
}
else dadep(); /*原来只有一个记录,则全删除之*/
}
else /*文件为空*/
{
printf("\t>>无任何记录\n");
fclose(fp);
}
}
void dadep() /*删除全部记录*/
{
FILE *fp;
if ((fp=fopen("deposit.dat","wb"))==NULL) /*删除原有全部记录*/
{
printf("\t>>不能打开deposit.dat文件\n");
return;
}
printf("\t>>全部记录已删\n");
fclose(fp);
}
void other2() /*其它2*/
{
void inoth2(); /*各被调函数声明*/
void upoth2();
void deoth2();
void daoth2();
int sel;
do
{
printf("其他记录操作: 1:添加 2:修改 3:删除 4:全删 0:返回=>");
scanf("%d",&sel);
switch(sel)
{
case 1:inoth2();break; /*调用各功能函数*/
case 2:upoth2();break;
case 3:deoth2();break;
case 4:daoth2();break;
case 0:break;
default:printf("\t**选择错误\n");break;
}
} while (sel!=0);
}
void inoth2() /*添加一个记录*/
{
FILE *fp;
OTHER2 oth2,oth21;
if ((fp=fopen("other2.dat","ab+"))==NULL) /*若文件存在以追加模式打开*/
if ((fp=fopen("other2.dat","wb+"))==NULL) /*否则以写模式打开*/
{
printf("\t>>不能建立other2.dat文件\n");
return;
}
printf("输入格式:日期 (例如20050101) 金额\n");
printf("个人记录:");
scanf("%d%f",&oth2.date,&oth2.cost);
rewind(fp); /*将位置指针移到文件首*/
while (!feof(fp)) /*查找是否有重日期的记录*/
{
fread(&oth21,sizeof(OTHER2),1,fp);
if (oth21.date==oth2.date) break;
}
if (!feof(fp)) /*存在重日期的记录,则提示相应信息*/
printf("\t>>已经存在此活动,应使用修改功能\n");
else /*不存在重日期的记录,则将新记录写入文件*/
fwrite(&oth2,sizeof(OTHER2),1,fp);
fclose(fp); /*关闭文件*/
}
void upoth2() /*修改一个项目记录,规定不能修改日期,可以修改除日期外的其他数据*/
{
FILE *fp;
OTHER2 oth2,noth2;
int i,dnum;
if ((fp=fopen("other2.dat","rb+"))==NULL)
{
printf("\t>>不能打开other2.dat文件\n");
return;
}
fseek(fp,0,2);
if (ftell(fp)>0) /*文件不空*/
{
rewind(fp);
printf("要修改的日期:");
scanf("%d",&dnum);
for (i=0;!feof(fp) && fread(&oth2,sizeof(OTHER2),1,fp)==1;i++)
if (oth2.date==dnum) break;
if (feof(fp))
{
printf("\t>>没有%d日期的状态\n",dnum);
return;
}
printf("\t>>个人记录:%d %f\n",oth2.date,oth2.cost);
printf("输入格式: 金额:");
scanf("%f",¬h2.cost); /*获取新金额记录*/
noth2.date=oth2.date; /*不能修改日期*/
fseek(fp,-(long)sizeof(OTHER2),SEEK_CUR); /*指向修改记录开头*/
fwrite(¬h2,sizeof(OTHER2),1,fp); /*用newoth2覆盖当前记录*/
fclose(fp);
}
else /*文件为空*/
{
printf("\t>>无任何记录\n");
fclose(fp);
}
}
void deoth2() /*按日期删除这条记录*/
{
void daoth2();
FILE *fp;
OTHER2 oth2[MAX];
int i,j,n,dnum;
if ((fp=fopen("other2.dat","rb"))==NULL)
{
printf("\t>>不能打开other2.dat文件\n");
return;
}
fseek(fp,0,2); /*文件位置指针移到文件末尾*/
if (ftell(fp)>0) /*文件不空*/
{
rewind(fp);
for (n=0;!feof(fp) && fread(&oth2[n],sizeof(OTHER2),1,fp);n++); /*n为记录个数*/
printf("要删除的日期:");
scanf("%d",&dnum);
for (i=0;i<n && oth2[i].date!=dnum;i++);
if (i>=n)
{
printf("\t>>没有这个日期\n",dnum);
return;
}
fclose(fp); /*关闭重新以"w+"模式打开文件*/
if (n>1) /*原来记录数>1时重写文件*/
{
for (j=i;j<n-1;j++) /*记录移动,从oth2数组中删除之*/
oth2[j]=oth2[j+1];
fp=fopen("other2.dat","wb"); /*删除原有的全部记录*/
for (i=0;i<n-1;i++) /*将oth2中数据写入文件中*/
fwrite(&oth2[i],sizeof(OTHER2),1,fp);
fclose(fp);
}
else daoth2(); /*原来只有一个记录,则全删除之*/
}
else /*文件为空*/
{
printf("\t>>无任何记录\n");
fclose(fp);
}
}
void daoth2() /*删除全部记录*/
{
FILE *fp;
if ((fp=fopen("other2.dat","wb"))==NULL) /*删除原有全部记录*/
{
printf("\t>>不能打开other2.dat文件\n");
return;
}
printf("\t>>全部记录已删\n");
fclose(fp);
}