====================================================================
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <dos.h>
#include <windows.h>
#define DEAL 50      /*设计最大交易次数*/
struct date
{
int da_year;
int da_mon;
int da_day;
};
struct time
{
int ti_hour;
int ti_min;
int ti_sec;
};
struct deal
{
struct date dt;      /*每笔交易的日期*/
struct time ti;      /*每笔交易的时间*/
double earning;      /*每笔交易的收入额度*/
double payout;      /*每笔交易的支出额度*/
};
typedef struct deal FINANCE;
FINANCE person[DEAL]={0};
/* 函数功能:求账面上的余额
函数参数:结构体指针变量per,代表指向结构体数组的指针
函数返回值:账面余额
*/
float Balance(FINANCE *per)
{
int i;
float sum1 = 0.0,sum2 = 0.0;
for(i=0;i<DEAL;i++)
{
sum1 += (per+i)->earning;
sum2 += (per+i)->payout;
}
return sum1+sum2;
}
/* 函数功能:年度统计,输出年度收入总额、支出总额、余额
函数参数:结构体指针变量per,代表指向结构体数组的指针
整型变量year,代表年度,如2004
函数返回值:无
*/
void OneYearBalance(FINANCE *per,int year)
{
int i;
float sum1 = 0.0,sum2 = 0.0;
printf函数返回值for(i=0;i<DEAL;i++)
{
if((per+i)->dt.da_year != year)continue;
sum1 += (per+i)->earning;
sum2 += (per+i)->payout;
}
printf("%d 年信息如下  :  ",year);
printf("总收入      总支出        余额\n");
printf("%28.2f%21.2f%19.2f\n",sum1,sum2,sum1+sum2);
}
/* 函数功能:打印所有的交易信息
函数参数:结构体指针变量per,代表指向结构体数组的指针
函数返回值:无
*/
void PrintBalance(FINANCE *per)
{
int i;
printf("  日期      时间      收入    支出    余额 \n");
for(i=0;i<DEAL;i++)
{
if((per+i)->dt.da_year != 0)
{
printf("%d/%d/%d  ",(per+i)->dt.da_year,
(per+i)->dt.da_mon,(per+i)->dt.da_day);
printf("%d:%d:%d :",(per+i)->ti.ti_hour,
(per+i)->ti.ti_min,(per+i)->ti.ti_sec);
}
if((per+i)->earning!=0)
printf("%8.2f\n",(per+i)->earning);
if((per+i)->payout!=0)
printf("            %8.2f\n",(per+i)->payout);
}
printf("                                            %8.2f\n",
Balance(per));
}
/* 函数功能:打印某一年的交易信息
函数参数:结构体指针变量per,代表指向结构体数组的指针
函数返回值:无
*/
void PrintOneYear(FINANCE *per)
{
int i,year;
printf("请输入年份 :");
scanf("%d",&year);
printf("  日期      时间      收入    支出    余额 \n");
for(i=0;i<DEAL;i++)
{
if((per+i)->dt.da_year != year) continue;
if((per+i)->dt.da_year!=0)
{
printf("%d/%d/%d  ",(per+i)->dt.da_year,
(per+i)->dt.da_mon,(per+i)->dt.da_day);
printf("%d:%d:%d :",(per+i)->ti.ti_hour,
(per+i)->ti.ti_min,(per+i)->ti.ti
_sec);
}
if((per+i)->earning!=0)
printf("%8.2f\n",(per+i)->earning);
if((per+i)->payout!=0)
printf("            %8.2f\n",(per+i)->payout);
}
OneYearBalance(per,year);
}
/* 函数功能:获得计算机的系统日期、时间
函数参数:结构体指针变量per,代表指向结构体数组的指针
函数返回值:无
*/
void GetDateTime(FINANCE *per)
{
SYSTEMTIME sys;
GetLocalTime( &sys );
per->dt.da_year = sys.wYear;
per->dt.da_mon = sys.wMonth;
per->dt.da_day = sys.wDay;
per->ti.ti_hour = sys.wHour;
per->ti.ti_min = sys.wMinute;
per->ti.ti_sec = sys.wSecond;
printf("%d/%d/%d :",per->dt.da_year,per->dt.da_mon,
per->dt.da_day);
printf("%d:%d:%d :",per->ti.ti_hour,per->ti.ti_min,
per->ti.ti_sec);
}
/* 函数功能:每一笔交易输入模块
函数参数:结构体指针变量per,代表指向结构体数组的指针
函数返回值:无
*/
void InputOneDeal(FINANCE *per)
{
char string[10];
printf("请输入交易金额 (+/-)\n");
GetDateTime(per);
scanf("%s",string);
if(string[0] == '-')
per->payout = atof(string);
else
per->earning = atof(string);
}
//==================================================
/*
函数功能:  读取数据文件
函数参数:  无
函数返回值:读入的记录条数
*/
int LoadData(void)
{
int i;
FILE* fp=fopen("deal.dat", "rb");
if (fp == NULL)
{
return 0;
}
i = fread(person, sizeof(FINANCE), DEAL, fp);
fclose(fp);
return i;
}
/*
函数功能:  保存数据文件
函数参数:  保存几条数据
函数返回值:无
*/
void SaveData(int i)
{
FILE* fp=fopen("deal.dat", "wb");
if (fp == NULL)
{
printf("Open deal.dat error:");
return;
}
fwrite(person, sizeof(FINANCE), i, fp);
fclose(fp);
}
//==================================================
/* 函数功能:菜单模块
函数参数:无
函数返回值:无
*/
void Menu()
{
printf("1.输入一笔交易\n");
printf("2.打印所有的交易\n");
printf("3.打印一年的交易\n");
printf("4.退出\n");
}
void main()
{
char key;
int i;
i = LoadData();
Menu();
while(1)
{
//key=bioskey(0);
key = getchar();
switch(key)
{
case '1':  InputOneDeal(person+i);
i++;
break;
case '2':  PrintBalance(person);
break;
case '3':  PrintOneYear(person);
break;
case '4':  SaveData(i);
exit(0);
default :  break;
}
}
}
==============================================================================

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。