Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > C++之个人财务管理
【标  题】:C++之个人财务管理
【关键字】:C++
【来  源】:http://blog.chinaunix.net/article.php?articleId=52587&blogId=10883

C++之个人财务管理

Your Ad Here

这都是自己所编写的哦,绝对原创!

源自老师所布置的作业,不想努力随着岁月的流逝而消散,也希望能帮助有需之士……

/*文件名: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",&noth.cost);                       /*获取新金额记录*/
  noth.date=oth.date;       /*不能修改日期*/
  fseek(fp,-(long)sizeof(OTHER),SEEK_CUR); /*指向修改记录开头*/
  fwrite(&noth,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",&noth2.cost);                       /*获取新金额记录*/
  noth2.date=oth2.date;       /*不能修改日期*/
  fseek(fp,-(long)sizeof(OTHER2),SEEK_CUR); /*指向修改记录开头*/
  fwrite(&noth2,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);
}

将一个串的排列组合的所有结果输出:【上一篇】
成为编程高手的二十二个原则(ZT):【下一篇】
【相关文章】
  • C/C++基础知识一(变量声明与赋值)
  • C++的缺陷(1)——Stream的缺陷
  • 我现在理解的C++(转载)
  • c++ 软件 工具
  • C++ 的学习
  • 一个跨平台的 C++ 内存泄漏检测器
  • C/C++数组名与指针区别深入探索
  • C与C++的一些不同点
  • 《程序员》11期文章 C++在嵌入式系统中的运用
  • C++编程中的四个调试小技巧
  • 【随机文章】
  • Web服务搜索与执行引擎(三)——系统设计方案
  • 静态的与动态的内部路由
  • Source Insight3.0: Linux源代码阅读的利器
  • VLAN典型配置举例
  • 关于文本比较:理论和具体实现
  • Timer
  • 日记 [2006年04月24日]
  • 一个老程序员的心里话说到人的心坎
  • 利用注册表编辑器清理注册表文件
  • friend随笔
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.