| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 731 人关注过本帖
标题:新手求取 家庭财务管理系统
只看楼主 加入收藏
ljx19901221
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-6-16
结帖率:0
收藏
 问题点数:0 回复次数:7 
新手求取 家庭财务管理系统
在用第九个统计功能的时候出现问题了,哪位高手帮我看看代码哪里错了
 
 
 
 
 
#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 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.退出系统");
      
   }
void 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()->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()->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=' ';
   while(1)
   {
   printf(">请输入要查询的年月(例如:2009/1)");
   if(scanf("%d/%d",&year,&month)!=2)
   {
      printf(">输入有误\n");

   }
   else
   {
   p=head;
   count=0;
   while(p!=NULL)
   {
   if((p->info.year==year)&&(p->info.month==month)&&(p->info.type==type))
   {
   show_info(p);
   system("PAUSE");
   count++;
   }
   p=p->next;
   }
   if(count==0)
   {
   printf(">没有找到数据\n");
   }
   printf(">继续查找其他数据?(y or n)");
   input=getchar();
   if(input=='y'||input=='Y')
   continue;
   else
   break;
   }
   }
   }
   //初始化函数,读取文本数据
   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|\n");
  printf("|NO.\t |年/月\t|类型\t|姓名\t|金额\t|备注\t|\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|\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)");
   if(scanf("%d/%d",&year,&month)!=2)
   {
      printf(">输入有误\n");

   }
   else
   {
   p=head;
   count=0;
   while(p!=NULL)
   {
   if((p->info.year==year)&&(p->info.month==month)&&(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(">继续查找其他数据?(y or n)");
   input=getchar();
   if(input=='y'||input=='Y')
   continue;
   else
   break;
   }
   }

   }
    void delete_data(fi_type type)//删除数据函数
   {
   int year=0;
   int month=0;
   fi_data *p=NULL;
   fi_data *pre=NULL;
   int count=0;
   char input=' ';
   int i=0;
   while(1)
   {  printf(">请输入要查询的年月(例如:2009/1)");
     if(scanf("%d/%d",&year,&month)!=2)
   {
      printf(">输入有误\n");

   }
   else
   {
   p=head;
   count=0;
   while(p!=NULL)
   {
   if((p->info.year==year)&&(p->info.month==month)&&(p->info.type==type))
   {
    count++;
    show_info(p);
    pre=get_previous(p);
    if(pre==NULL)
    head=head->next;
    else
    pre->next=p->next;
    free(p);
    printf(">删除成功\n");
    }
   p=p->next;
   }
   if(count==0)

   printf(">没有找到数据\n");
    printf(">继续查找其他数据?(y or n)");
   input=getchar();
   if(input=='y'||input=='Y')
   continue;
   else
   break;
   }

   }
   }
   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()
   {
   search_data(income);
   }
   void delete_income()
   {
   delete_data(income);
   }
   void update_income()
   {
     update_data(income);
   }
搜索更多相关主题的帖子: 结构体 财务管理 姓名 
2011-06-16 15:12
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
这么长   报酬  联系方式
收到的鲜花
  • a95806432011-06-17 00:30 送鲜花  1朵   附言:我很赞同

                                         
===========深入<----------------->浅出============
2011-06-16 17:57
a9580643
Rank: 2
来 自:江西九江
等 级:论坛游民
帖 子:60
专家分:59
注 册:2011-4-21
收藏
得分:0 
回复 2楼 laoyang103
金钱,美女随便挑

花有重开日,人无在少年。
2011-06-17 00:29
sqsji48
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-6-16
收藏
得分:0 
好长呀!!!
2011-06-17 00:33
cxs365
Rank: 2
等 级:论坛游民
帖 子:32
专家分:30
注 册:2011-5-6
收藏
得分:0 
都编程编成这个份上了,还是新手。

每天前进一小步!
2011-06-17 07:53
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:0 
回复 5楼 cxs365
人家是刚注册的好不?
2011-06-17 08:00
bccn_2012
Rank: 6Rank: 6
等 级:侠之大者
帖 子:158
专家分:447
注 册:2011-5-14
收藏
得分:0 
回复 2楼 laoyang103
如果有美女老杨肯定第一个。。。
2011-06-17 11:04
bccn_2012
Rank: 6Rank: 6
等 级:侠之大者
帖 子:158
专家分:447
注 册:2011-5-14
收藏
得分:0 
回复 2楼 laoyang103
如果有美女老杨肯定第一个。。。
2011-06-17 11:04
快速回复:新手求取 家庭财务管理系统
数据加载中...
 
   



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

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