| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 474 人关注过本帖
标题:求各位帮我改改代码
只看楼主 加入收藏
zhangad94
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-1-12
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
求各位帮我改改代码

查询:按月/年查询收/支情况,按所属类别进行统计查询;
设置支出警示线:可以修改该警示线,当月支出达到该警示线80%时提醒,当月支出超过该警示线时提醒。
这二个不知道怎么搞了
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<ctype.h>

#define N 200
struct fnacial  //财务数据
{
 int num;
 int year;
 int month;
 int day;
 char fname[25];
 double amount;
  
 
}FNAC;struct fnacial pro[N];

typedef struct datasort //月度统计
{
 int sorty;
 int sortm;
 double count;
 struct datasort *next;

}DSORT,*DSORTP;DSORT dsort[N];

FILE *fp;
DSORTP head;
int datalong;

void mainlist();

void datalist();
void datain();//输入信息
void datamo();//信息修改
void datadel();//删除信息

void quelist();
void alldata();//查询所有信息
void tdata();//按年月查询
void sz();//按收支查询

void stalist();
double sta(int y,int m);//按月份或年份统计收支
void szsta();//收支统计
void sort();//排序


char shuru();//判断输入是否为数字
int readfile();//读取财务信息
void writefile(int x);//记录财务信息

void main()
{
 
 datalong = readfile();
 mainlist();
 
}

/*
主菜单,可选功能    数据处理、查询、统计
*/
void mainlist()
{
 char input;

 printf("\t\t\t\t个人财务系统\n\n");
 printf("\t1.数据处理\n");
 printf("\t2.数据查询\n");
 printf("\t3.数据统计\n");
 printf("\t4.退出\n");
 printf("请输入选择:");
 input = shuru();
 switch(input)
 {
  case '1': datalist();break;
  case '2': quelist();break;
  case '3': stalist();break;
  case '4': exit(0);break;
 }
}

/*
数据处理菜单   功能数据录入、修改、删除
*/
void datalist()
{
 char input;
    system("cls");
 printf("\t\t\t\t数据处理\n\n");
 printf("\t1.数据录入\n");
 printf("\t2.数据修改\n");
 printf("\t3.数据删除\n");
 printf("\t4.返回\n");
 printf("请输入选择:");
 input = shuru();
 switch(input)
 {
  case '1': datain();mainlist();break;
  case '2': datamo();mainlist();break;
  case '3': datadel();mainlist();break;
  case '4': mainlist();break;
 }

}


/*
数据查询菜单  功能所有数据、按年月、按收支查询
*/
void quelist()
{
 char input;
 system("cls");
 printf("\t\t\t\t数据查询\n\n");
 printf("\t1.所有数据\n");
 printf("\t2.按年月查询\n");
 printf("\t3.按收入和支出查询\n");
 printf("\t4.返回\n");

 printf("请输入选择:");
 input = shuru();
 switch(input)
 {
  case '1': alldata();mainlist();break;
  case '2': tdata();mainlist();break;
  case '3': sz();mainlist();break;
  case '4': mainlist();break;

 }

}
/*
统计菜单  功能按时间、收支统计
*/
void stalist()
{
 char input;
 int y,m;
    system("cls");
 printf("\t\t\t\t收支统计\n\n");
 printf("\t1.按时间统计\n");
 printf("\t2.收支统计\n");
 printf("\t3.排序\n");
 printf("\t4.返回\n");

 printf("请输入选择:");
 input = shuru();
 switch(input)
 {
  case '1':
   {
    printf("请输入年份");
    scanf("%d",&y);
    printf("请输入月份");
    scanf("%d",&m);
    printf("该月份金额为:%lf\n",sta(y,m));mainlist();break;
   }
  case '2': szsta();mainlist();break;
  case '3': sort();mainlist();break;
  case '4': mainlist();break;

 }

}


/*
排序功能
*/
void sort()
{
 int y1,m1,y2,m2,i;
 DSORTP p,p1,p2,p3,p4;
 
 
 printf("请输入要排序的时间区间:\n");
 printf("年:");
 scanf("%d",&y1);
 printf("月:");
 scanf("%d",&m1);
 printf("年:");
 scanf("%d",&y2);
 printf("月:");
 scanf("%d",&m2);
 printf("\n");
 printf("你输入的区间为:%d年%d日-%d年%d日\n",y1,m1,y2,m2);
 
 head=NULL;

 for(i=m1-1;i<=m2;i++)
 {
  p=(DSORTP)malloc(sizeof(DSORT));
  p->sorty = y1;
  p->sortm = i;
  p->count = sta(y1,m1);
  if(i==m1)
  {
   head = p;
   p1=p;
  }else
  {
   p1->next = p;
   
  }
  p1=p;
  
 }
 p1->next=NULL;
 p4=p2 = head;
 p3=head;
 
 for(;p2->next;p2=p2->next)
 {
  if(p2!=head)
  {
   p4=p4->next;
  }
  for(;p3->next;p3=p3->next)
  {
   if(p2->count>p3->count)
   {
    p2->next = p3->next;
    p4->next = p3;
   }
  }
 }
 
 
 do
 {

  
  printf("%-5d%-5d%ld\n",p2->sorty,p2->sortm,p2->count);
  p2=p2->next;
 } while(p2->next);
}


/*
按年月统计
*/
double sta(int y,int m)
{
 int i;
 double sum = 0;
 
 

 for(i = 0;i < datalong;i++)
 {
  if(pro[i].year == y && pro[i].month == m)
  {
    sum +=pro[i].amount;
  }
 }
 return sum;


}


/*
按收支统计
*/
void szsta()
{
 char ch;
 int i;
 double sum=0;
 printf("\t\t\t1.收入\n\t\t\t2.支出\n请选择:");
 ch = shuru();
 switch(ch)
 {
  case '1':
   {
   
    for(i = 0;i < datalong;i++)
    {
     if(!(strcmp(pro[i].fname,"收入")))
     {
      sum +=pro[i].amount;
     }
    }
    printf("总收入金额:%lf\n",sum);

   };break;

  case '2':
   {
   
    for(i = 0;i < datalong;i++)
    {
     if(!(strcmp(pro[i].fname,"支出")))
     {
      sum +=pro[i].amount;
     }
    }
   
    printf("总支出金额:%lf\n",sum);

   };break;
 }
}

/*
输出所有信息
*/
void alldata()
{
 int i;
 printf("编号\t 年\t月\t日\t收支信息\t金额\n");
 for(i = 0;i < datalong;i++)
 {
  printf("%-10d%-9d%-5d%-5d%-15s%-5lf\n",pro[i].num,pro[i].year,pro[i].month,pro[i].day,pro[i].fname,pro

[i].amount);
 }

}
/*
按年月搜索
*/
void tdata()
{
 int y,m,i;
 
 printf("请输入年份");
 scanf("%d",&y);
 printf("请输入月份");
 scanf("%d",&m);

 printf("编号\t 年\t月\t日\t收支信息\t金额\n");
 for(i = 0;i < datalong;i++)
 {
  if(pro[i].year == y && pro[i].month == m)
  {
   printf("%-10d%-9d%-5d%-5d%-15s%-5lf\n",pro[i].num,pro[i].year,pro[i].month,pro[i].day,pro

[i].fname,pro[i].amount);
  }
 }
}
/*
按收支查询
*/
void sz()
{
 char ch;
 int i;
 printf("\t\t\t1.收入\n\t\t\t2.支出\n请选择:");
 ch = shuru();
 switch(ch)
 {
  case '1':
   {
    printf("编号\t 年\t月\t日\t收支信息\t金额\n");
    for(i = 0;i < datalong;i++)
    {
     if(!(strcmp(pro[i].fname,"收入")))
     {
      printf("%-10d%-9d%-5d%-5d%-15s%-5lf\n",pro[i].num,pro[i].year,pro

[i].month,pro[i].day,pro[i].fname,pro[i].amount);
     }
    }

   };break;
   case '2':
   {
    printf("编号\t 年\t月\t日\t收支信息\t金额\n");
    for(i = 0;i < datalong;i++)
    {
     if(!(strcmp(pro[i].fname,"支出")))
     {
      printf("%-10d%-9d%-5d%-5d%-15s%-5lf\n",pro[i].num,pro[i].year,pro

[i].month,pro[i].day,pro[i].fname,pro[i].amount);
     }
    }

   };break;
 }

}

/*
数据录入
*/
void datain()
{

 int i,word=1,x,k=0;
 for(;datalong<N && word==1;datalong++)
 {
  
     printf("请输入编号:\n");
      scanf("%d",&pro[datalong].num);
      printf("请输入年:\n");
   scanf("%d",&pro[datalong].year);
   printf("请输入月:\n");
   scanf("%d",&pro[datalong].month);
   printf("请输入日:\n");
   scanf("%d",&pro[datalong].day);
   printf("请输入收支项目名称:\n");
   scanf("%s",pro[datalong].fname);
   printf("请输入收支金额:\n");
   scanf("%lf",&pro[datalong].amount);
   printf("要继续吗?\n1.是  2.退出\n");
      scanf("%d",&word);
 }
 
 for(i = 0;i < datalong;i++)
 {
  printf("%-5d%-5d%-5d%-5d%-10s%-5lf\n",pro[i].num,pro[i].year,pro[i].month,pro[i].day,pro[i].fname,pro

[i].amount);
 }
    printf("\n新建的客房档案需要存档吗?\t1.是    2.否\n");
 scanf("%d",&x);
 writefile(x);
}

/*
数据修改
*/
void datamo()
{
 int ch,i;
 printf("请输入要修改的收支编号:\n");
 scanf("%d",&ch);

 for(i = 0;i < datalong;i ++)
 {
  if(pro[i].num == ch)
  {
   printf("请输入修改信息:\n");
   
   printf("请输入编号:\n");
      scanf("%d",&pro[i].num);
      printf("请输入年:\n");
   scanf("%d",&pro[i].year);
   printf("请输入月:\n");
   scanf("%d",&pro[i].month);
   printf("请输入日:\n");
   scanf("%d",&pro[i].day);
   printf("请输入收支项目名称:\n");
   scanf("%s",pro[i].fname);
   printf("请输入收支金额:\n");
   scanf("%lf",&pro[i].amount);
   
   writefile(1);

  }
 }

}

/*
数据删除
*/
void datadel()
{
 int ch,i;
 printf("请输入要修改的收支编号:\n");
 scanf("%d",&ch);

 for(i = 0;i < datalong + 1;i ++)
 {
  if(pro[i].num == ch)
  {
   
      pro[i].num = pro[i+1].num;
   pro[i].year = pro[i+1].year;
   pro[i].month = pro[i+1].month;
   pro[i].day = pro[i+1].day;
   strcpy(pro[i].fname,pro[i+1].fname);
   pro[i].amount = pro[i+1].amount;
      datalong = datalong - 1;
   
   writefile(1);

  }
 }

}

int readfile() //财务信息读取
{
  int k = 0;
 
 if((fp=fopen("data.txt","r"))==NULL)//读取客房信息
 {
  printf("初始化时未发现文件,已建立。\n");
  if((fp=fopen("data.txt","w"))==NULL)
  {
       printf("初始化失败!将无法进行存储信息。请重新登录系统。\n");exit(0);
  }
 }
 
 //注释部分调试的时候用 输出文件里的数据
 
 do
 {
  fread(&pro[k],sizeof(FNAC),1,fp);
  //printf("%-5d%-5d%-5d%-5d%-10s%-5lf\n",pro[k].num,pro[k].year,pro[k].month,pro[k].day,pro[k].fname,pro[k].amount);
  k++;
 }while(pro[k-1].num!=0);
 //printf("%d",k-1);
 
 return k-1;
 fclose(fp);
}
void writefile(int x) //财务信息写入
{
 int i = 0;

 if((fp=fopen("data.txt","w"))==NULL)
 {
  printf("写文件失败!\n");exit(0);
 }

 if(x==1)
 {
  for(i=0;i<datalong;i++)
  {
   fwrite(&pro[i],sizeof(FNAC),1,fp);
  }
  printf("文件修改成功。\n");
  fclose(fp);

 }
 else
  ;

}
char shuru()//判断输入的是否是数字
{
 char x;
 if(isdigit(x = getchar()))
 {
  printf("%c\n",x);
  getchar();
  return(x);
 }
 else
 {
  printf("%c\n",x);
  printf("请输入数字!\n");
  printf("请重新选择序号:");
  shuru();

 }
}
搜索更多相关主题的帖子: include double amount count 财务 
2014-01-12 13:36
xiaozi2013
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:四川成都
等 级:蒙面侠
威 望:6
帖 子:830
专家分:4331
注 册:2013-12-13
收藏
得分:20 
。。

--整天敲那些破代码能找着媳妇儿吗。。。---
2014-01-12 14:08
快速回复:求各位帮我改改代码
数据加载中...
 
   



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

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