标题:帮忙改一下错误,代码没错,但是运行时添加收入的信息和查询时的信息不一致 ...
取消只看楼主
a852996944
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-6-28
 问题点数:0 回复次数:1 
帮忙改一下错误,代码没错,但是运行时添加收入的信息和查询时的信息不一致,请大神帮忙改改,谢谢了
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define MAXNAME 11    //家庭成员姓名的最大长度
#define MAXDETAIL 21    //注最大长度


//自定义枚举类型fi_type,用来表示收入与支出
   typedef enum _fi_type
   {
   income=1,//收入
   payout =-1 //支出
   } fi_type;
  // 家庭财务信息结构体
typedef struct _fi_info
   {
   int year;
   int month;
   fi_type type;
   char name[9];
   float money;
   char detail[11];
   }fi_info;

   // 存储财务数据结构的结构体
   typedef struct _fi_data
   {
   fi_info info;
   struct _fi_data* next;
   } fi_data;
   fi_data *head;//财务数据的头结点
   void menu();//菜单函数
   void add_income();
   void search_income();
   void delete_income();
   void update_income();
   void add_payout();
   void search_payout();
   void delete_payout();
   void update_payout();
   void count_total();
   void quit();
   //
   void search_data(fi_type type);
   void delete_data(fi_type type);
   void update_data(fi_type type);
   void search_name(fi_type type);
   //
   void initialize();
   void save_to_file();
   void clear_data();
   fi_data *get_last();
   fi_data *get_previous(fi_data *p);
   void input_info(fi_info *info);
   void show_info(fi_data *p);
   void menu()
   {
      printf("\n");
      printf("\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
      printf("\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
      printf("\t\t\t    家庭财务管理系统\n");
      printf("\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
      printf("\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
      printf("\t\t*******************************************\n");
      printf("\t\t收入管理:");
      printf("1.添加收入");
      printf("  2.查询收入明细\n");
      printf("\t\t\t 3.删除收入");
      printf("  4.修改收入\n");
      printf("\t\t*******************************************\n");
      printf("\t\t支出管理:");
      printf("5.添加支出");
      printf("  6.查询支出明细\n");
      printf("\t\t\t 7.删除支出");
      printf("  8.修改支出\n");
      printf("\t\t*******************************************\n");
      printf("\t\t统计:");
      printf("9.统计总收入/总支出\n");
      printf("\t\t*******************************************\n");
      printf("\t\t0.退出系统");
      
   }
  main()
  {
      int selected=0;
      initialize();
      while(selected>=0&&selected<=9)
      {
       system("cls");
       menu();
       printf(">请选择要进行的操作(0-9)");
       if(scanf("%d",&selected)!=1||selected<0||selected>9)
       {
       printf(">输入有误!请选择(0-9)之间的数字!按任意键重试...");
       getchar();
       }
       else
       {
         switch(selected)
         {
           case 0:exit(0);clear_data();break;
           case 1:add_income();save_to_file();break;
           case 2:search_income();break;
           case 3:delete_income();save_to_file();break;
           case 4:update_income();save_to_file();break;
           case 5:add_payout();save_to_file();break;
           case 6:search_payout();break;
           case 7:delete_payout();save_to_file();break;
           case 8:update_payout();save_to_file();break;
           case 9:count_total();break;
         }
         
       }

      }

  }
 
  void add_income()//添加收入
  {
    fi_data *p=(fi_data *)malloc(sizeof(fi_data));
    p->next=NULL;
    input_info(&(p->info));
    p->info.type=income;
    if(head==NULL)
     head=p;
    else
     get_last(head)->next=p;
  }
   void add_payout()//添加收入
  {
    fi_data *p=(fi_data *)malloc(sizeof(fi_data));
    p->next=NULL;
    input_info(&(p->info));
    p->info.type=payout;
    if(head==NULL)
     head=p;
    else
     get_last(head)->next=p;
  }
  //输入函数
  void input_info(fi_info *info)
  {
  printf("<请输入记账日期(YYYY/M)");
  scanf("%d/%d",&(info->year),&(info->month));
  printf("<请输入家庭成员姓名(最大长度为%d):",MAXNAME-1);
  scanf("%s",info->name);
  printf(">请输入金额:");
  scanf("%f",&(info->money));
  printf(">请输入事项(最大长度为%d):",20);
  scanf("%s",info->detail);
  }

   //查找数据函数
   void search_data(fi_type type)
   {
   int year=0;
   int month=0;
   fi_data *p=NULL;
   int count=0;
   char input=' ';
   {
   printf(">请输入要查询的记账日期(例如:2009/1)");
   scanf("%d/%d",&year,&month);
   p=head;
   count=0;
   while(p!=NULL)
   {
   if((p->info.year==year)&&(p->info.type==type))
   {
   show_info(p);
   system("PAUSE");
   count++;
   }
   p=p->next;
   }
   if(count==0)
   {
   printf(">没有找到数据\n");
   }
   printf(">按任意键返回主菜单");
   getch();
   }
   }

    void search_name(fi_type type)
   {
   char name[9];
   fi_data *p=NULL;
   int count=0;
   char input=' ';
   printf(">请输入要查询的家庭成员姓名(例如:韩梅梅)");
   scanf("%s",name);
   p=head;
   count=0;
   while(p!=NULL)
   {
   if((p->info.name==name)&&(p->info.type==type))
   {
   show_info(p);
   system("PAUSE");
   count++;
   }
   p=p->next;
   }
   if(count==0)
   {
   printf(">没有找到数据\n");
   }
   printf(">按任意键返回主菜单");
   getch();
   }
   //初始化函数,读取文本数据
   void initialize()
   {
   FILE * fp=NULL;
   fi_data *p=NULL;
   fi_data *last=NULL;
   int count=0;
   fp=fopen("data.txt","rb");
   if(fp==NULL)
   {
   fp=fopen("data.txt","w");
   fclose(fp);
   return;
   }
   p=(fi_data*)malloc(sizeof(fi_data));
   memset(p,0,sizeof(fi_data));
   p->next=NULL;
   while(fread(&(p->info),sizeof(fi_info),1,fp)==1)
   {
   if(head==NULL)
   head=p;
   else
   {
   last=get_last();
   last->next=p;
   }
   count++;
   fseek(fp,count*sizeof(fi_info),SEEK_SET);
   p=(fi_data *)malloc(sizeof(fi_data));
   memset(p,0,sizeof(fi_data));
   p->next=NULL;
   }
   free(p);
   p=NULL;
   fclose(fp);
   }
   //显示信息函数
   void show_info(fi_data *p)
  {
  int i=0;
  printf("|\t\t\t|\t\t\t|\t\t\t|\t\t\t|\t\t\t|\t\t\t|\n");
  printf ("|  编号  |    日 期   |  类  型  |   金额    |   姓  名  |     备注    |\n");
  printf("|%5d\t|%4d/%02d|%4s\t|%10s|%10.2f|%20s|\n",i+1,
  p->info.year,p->info.month,p->info.type==income?"收入":"支出",
  p->info.name,p->info.money,p->info.detail);
  printf("|\t\t\t|\t\t\t|\t\t\t|\t\t\t|\t\t\t|\t\t\t|\n");
  }
  //统计总收入、总支出
   void count_total()
   {
   float total_income=0.0;
   float total_payout=0.0;
   fi_data *p=head;
   while(p!=NULL)
   {
   if(p->info.type==income)
   {
   total_income+=p->info.money;
   }
   else
   {
   total_payout+=p->info.money;
   }
    p=p->next;
   }
    printf("\t\t+\t\t+\t\t+\n");
    printf("|合计收入\t|合计支出\t|结余\t|\n");
   //printf("\t\t+\t\t+\t\t+\n");
    printf("%12.2f|%12.2f|%12.2f|\n",total_income,total_payout,total_income-total_payout);
    printf("\t\t+\t\t+\t\t+\n");
    printf(">按任意键返回主菜单。。。");
    getchar();

   }
   //保存到文件
  void save_to_file()
  {
  FILE *fp=fopen("data.txt","wb" );
  fi_data *p=head;
  while(p!=NULL)
  {
  fwrite(&(p->info),sizeof(fi_info),1,fp);
  fseek(fp,0,SEEK_END);
  p=p->next;
  }
  fclose(fp);
  }
   //修改信息函数
  void update_data(fi_type type)
   {  int year=0;
   int month=0;
   fi_data *p=NULL;
   fi_data *pre=NULL;
   char input=' ';
   int count=0;
   int i=0;
   while(1)
   {  printf(">请输入要查询的记账日期(例如:2009/1)");
   scanf("%d/%d",&year,&month);
   p=head;
   count=0;
   while(p!=NULL)
   {
   if((p->info.year==year)&&(p->info.type==type))
   {
    count++;
    show_info(p);
    input_info(&(p->info));
    printf("修改成功\n");
    p=get_previous(p);
   }

   p=p->next;
   }
   if(count==0)
    printf(">没有找到数据\n");
    printf(">按任意键返回主菜单");
   input=getchar();
   
   }
   }
 void update_name(fi_type type)
   {  char name[9];
   fi_data *p=NULL;
   int count=0;
   char input=' ';
   {  printf(">请输入要查询的家庭成员姓名(例如:韩梅梅)");
   scanf("%s",name);
   p=head;
   count=0;
   while(p!=NULL)
   {
   if((p->info.name==name)&&(p->info.type==type))
   {
    count++;
    show_info(p);
    input_info(&(p->info));
    printf("修改成功\n");
    p=get_previous(p);
   }

   p=p->next;
   }
   if(count==0)
    printf(">没有找到数据\n");
    printf(">按任意键返回主菜单");
   input=getchar();
   
   }
   }

    void delete_data(fi_type type)//删除数据函数
   {
   int year=0;
   int month=0;
   fi_data *p=NULL;
   fi_data *pre=NULL;
   int count=0;
   int i=0;
   while(1)
   {  printf(">请输入要查询的记账日期(例如:2009/1)");
    scanf("%d/%d",&year,&month);
   p=head;
   count=0;
   while(p!=NULL)
   {
   if((p->info.year==year)&&(p->info.type==type))
   {
    count++;
    show_info(p);
    input_info(&(p->info));
    printf("删除成功\n");
    p=get_previous(p);
   }

   p=p->next;
   }
   if(count==0)
    printf(">没有找到数据\n");
    printf(">按任意键返回主菜单");
   getchar();
   
   }
   }

  void delete_name(fi_type type)
   {  char name[9];
   fi_data *p=NULL;
   int count=0;
   char input=' ';
   {  printf(">请输入要查询的家庭成员姓名(例如:韩梅梅)");
   scanf("%s",name);
   p=head;
   count=0;
   while(p!=NULL)
   {
   if((p->info.name==name)&&(p->info.type==type))
   {
    count++;
    show_info(p);
    input_info(&(p->info));
    printf("删除成功\n");
    p=get_previous(p);
   }

   p=p->next;
   }
   if(count==0)
    printf(">没有找到数据\n");
    printf(">按任意键返回主菜单");
   input=getchar();
   
   }
   }

   void clear_data()//清空链表数据
  {
  fi_data *p=NULL;
  while(head!=NULL)
  {
  if(head->next!=NULL)
  {
  p=head;
  head=head->next;
  free(p);
  p=NULL;
  }
  else
  {
  free(head);
  head=NULL;
  }

  }
  }
  fi_data *get_last()
  {
  fi_data * p=head;
  if(p==NULL)
  return p;
  while((p!=NULL)&&(p->next!=NULL))
  p=p->next;
  return p;
  }
  fi_data *get_previous(fi_data *p)
  {
  fi_data *previous=head;
  while(previous!=NULL)
  {
  if(previous->next==p)
  break;
  previous=previous->next;
  }
  return previous;
  }
   void search_payout()
   {
   search_data(payout);
   }
   void delete_payout()
   {
   delete_data(payout);
   }
   void update_payout()
   {
   update_data(payout);
   }
     void search_income(){
      int a;
      printf("(1)按日期查询\n");
      printf("(2)按姓名查询\n");
      printf("请输入选择:");
      scanf("%d",&a);
      if(a==1) search_data(income);
      if(a==2) search_name(income);
  }
   void delete_income()
   {
   delete_data(income);
   }
   void update_income()
   {
     update_data(income);
   }
搜索更多相关主题的帖子: income detail include 结构体 money 
2015-06-28 23:36
a852996944
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-6-28
得分:0 
请大家帮帮忙啊,。明天要交的呢,急用啊急用啊
2015-06-28 23:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-454815-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.214082 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved