个人帐簿管理系统设计
五、程序运行结果
1、原文件内容
#include  <stdio.h>
#include  <stdlib.h>
#include  <memory.h>
#include  <windows.h>
fread和fwrite的区别
//文件保存路径
#define FilePath1 "Myinfor.dat"
#define FilePath2 ""
//查询用声明
#define Status int
#define OK 1
#define Error 0
#define NotFound 2
typedef struct {
    int month;//月份
    int spxf;//食品消费
    int fzfy;//房租费用
    int znjy;//子女教育费用
    int sdfy;//水电费用
    int ylfy;//医疗费用
    int cxfy;//储蓄费用
    int srfy;//收入费用
} Infor;
typedef struct {// 查询用自定义数据类型
    int no;
    int data;
  }pType;
void menu(void); //菜单
void input(Infor *newI); //接收键盘输入
void writeinfor(Infor *newI);//向文件内写入内容
void changeFormat(void );//将dat格式文件转换为txt文件
Status search(Infor *a);//查询函数[返回查询的结果及查询的状态]
void paixu(Infor *a);//对查询据结果排序
void modify(Infor *a,int mon);//修改数据
void delRecord(int mon);//删除数据
void main()
{
    while(1)
    {
    menu();
    }
}
void menu(void)
{
    int item;
    int mon;
    Infor *a;
    a=(Infor *)malloc(sizeof(Infor));
    do{
        printf("\n******个人帐簿管理系统设计*****\n\n");
        printf("1.录 入 数 据\n");
        printf("2.查 看 数 据\n");
        printf("3.修 改 数 据\n");
        printf("4.查 询 数 据\n");
        printf("5.排 序 数 据\n");
        printf("6.删 除 数 据\n");
        printf("0.退 出 系 统\n\n");
        printf("请输入要进行的操作: " );
        scanf("%d",&item);
    }while(item>6 || item<-1);
    switch(item)
    {  //退出程序
        case 0: getchar();
                getchar();
                exit(1);
                break;
        //录入数据
        case 1: input(a);
                writeinfor(a);
                break;
        //查看数据
        case 2: changeFormat();
                break;
        //修改数据
        case 3: item=search(a);
                mon=a->month;
                if (item!=OK) printf("\n没有符合条件的记录!\n"); 
                else
                {
                    printf("\n记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 \n");
                    printf("----------------------------------------------------------------------- \n");
                    printf("%7d %8d %8d %8d %8d %8d %8d %8d\n",a->month,a->spxf,a->fzfy,a->znjy,a->sdfy,a->ylfy,a->cxfy,a->srfy);
                    input(a);
                    modify(a,mon);
                }
                break;
        //查询数据
        case 4: item=search(a);
                if (item!=OK) printf("\n没有符合条件的记录!\n");
                else{
                    printf("\n记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 \n");
                    printf("----------------------------------------------------------------------- \n");
                    printf("%7d %8d %8d %8d %8d %8d %8d %8d\n",a->month,a->spxf,a->fzfy,a->znjy,a->sdfy,a->ylfy,a->cxfy,a->srfy);
                }   
                break;
        //排序数据
        case 5: item=search(a);
                if (item!=OK) printf("\n没有符合条件的记录!\n"); 
                else
                    paixu(a);
                break;
        //删除数据
        case 6:
                item=search(a);
                mon=a->month;
                if (item!=OK) printf("\n没有符合条件的记录!\n"); 
                else
                {
                    printf("\n记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 \n");
                    printf("----------------------------------------------------------------------- \n");
                    printf("%7d %8d %8d %8d %8d %8d %8d %8d\n",a->month,a->spxf,a->fzfy,a->znjy,a->sdfy,a->ylfy,a->cxfy,a->srfy);
                    delRecord(mon);
                }
                break;
       
    }
    free(a);//释放内存空间
}
void input(Infor *newI)
{
    printf("\n请依次输入数据(中间以空格符隔开):\n(本月月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 收入费用)\n");
    scanf("%d%d%d%d%d%d%d%d",&newI->month,&newI->spxf,&newI->fzfy,&newI->znjy,&newI->sdfy,&newI->ylfy,&newI->cxfy,&newI->srfy);
    fflush(stdin);
}
void writeinfor(Infor *newI)
{
    FILE *fp;
    fp=fopen(FilePath1,"ab+");
    if(fp==NULL)
    {
        printf("无法创建文件:%s",FilePath1);
        exit(0);
    }
    fwrite(newI,sizeof(Infor),1,fp);//这里可以做特别处理可防止存在同一月份有2条以上的记录问题。这里就不写了。
    fclose(fp);
    printf("数据录入成功!\n");
}
void changeFormat(void)  //暂时只能操作一行文件有待改进
{
  FILE *fp1,*fp2;
  Infor *a;
  a=(Infor *)malloc(sizeof(Infor));
  fp1=fopen(FilePath1,"rb+");
  if(fp1==NULL)
    {
        printf("无法到文件:%s\n",FilePath1);