/*File name:1 //文件名
Auther:陈款 Version: windows7 Date:2017.3.8 // 作者、版本及完成日期
*/
#include<stdio.h>
#include<stdlib.h>
int X,Y;//全局变量
struct date{
int year;
int month;
int day;
};
//判断是否是闰年
int judge(struct date day)
{
static int day_tab[2][13]=
{{0,31,28,31,30,31,30,31,31,30,31,30,31,}, /*平均每月的天数*/
{0,31,29,31,30,31,30,31,31,30,31,30,31,},
};
int m,LP;
LP=day.year%4==0&&day.year%100!=0||day.year%400==0;
/*判定year为闰年还是平年,lp=0为平年,非0为闰年*/
m=day_tab[LP][day.month];
return m;
}
//判断起始日期是否有效
struct date BeginDay()
{
struct date term;
int R;
for(;;)
{
scanf("%d",&Y); //输入日期
if(Y>=10101&&Y<=99991231)
{
term.year=Y/10000;/*将输入数改成设备能识别的日期*/
term.month=Y/100%100;
term.day=Y%100;
if(term.month<=12)
{
R=judge(term);/*判断日数是否有效*/
if(term.day<=R)
break;
else
{ printf("您输入的日数有误,请重新输入日期:");
continue;
}
}
else
{ printf("您输入的月数有误,请重新输入日期:");
continue;
}
}
else
{ printf("您输入的年数有误,请重新输入日期:");
continue;
}
}
return(term);
}
//判断终止日期是否有效
struct date EndDay()
{
struct date today;
int R;
for(;;)
{
scanf("%d",&X); //输入日期
if(X>=Y&&X<=99991231)
{
today.year=X/10000;/*将输入数改成设备能识别的日期*/
today.month =X/100%100;
today.day=X%100;
if(today.month<=12)
{
R=judge(today);
if(today.day<=R)/*判断日数是否有效*/
break;
else
{ printf("您输入的日数有误,请重新输入日期:");
continue;
}
}
else
{ printf("您输入的月数有误,请重新输入日期:");
continue;
}
}
else
{ printf("您输入的年数有误,请重新输入日期:");
continue;
}
}
return(today);
}
int days1(struct date day)
{
static int day_tab[2][13]=
{{0,31,28,31,30,31,30,31,31,30,31,30,31,}, /*平均每月的天数*/
{0,31,29,31,30,31,30,31,31,30,31,30,31,},
};
int i,lp;
lp=day.year%4==0&&day.year%100!=0||day.year%400==0;
/*判定year为闰年还是平年,lp=0为平年,非0为闰年*/
day.day =day_tab[lp][day.month]-day.day ;
for(i=day.month+1;i<13;i++) /*计算起始年的天数*/
day.day+=day_tab[lp][i];
return day.day;
}
int days2(struct date day)
{
static int day_tab[2][13]=
{{0,31,28,31,30,31,30,31,31,30,31,30,31,}, /*平均每月的天数*/
{0,31,29,31,30,31,30,31,31,30,31,30,31,},
};
int i,lp;
lp=day.year%4==0&&day.year%100!=0||day.year%400==0;
/*判定year为闰年还是平年,lp=0为平年,非0为闰年*/
for(i=1;i<day.month;i++) /*计算起始年起的后一年的总天数*/
day.day+=day_tab[lp][i];
return day.day;
}
int days3(struct date dayterm,struct date daytoday)
{
static int day_tab[2][13]=
{{0,31,28,31,30,31,30,31,31,30,31,30,31,}, /*平均每月的天数*/
{0,31,29,31,30,31,30,31,31,30,31,30,31,},
};
int i,lp;
lp=dayterm.year%4==0&&dayterm.year%100!=0||dayterm.year%400==0;
/*判定year为闰年还是平年,lp=0为平年,非0为闰年*/
if(dayterm.month ==daytoday.month)
{
dayterm.day =daytoday.day -dayterm.day ;
}
else
{ dayterm.day =day_tab[lp][dayterm.month]-dayterm.day ;
for(i=dayterm.month+1;i<daytoday.month ;i++) /*计算起始年的天数*/
dayterm.day+=day_tab[lp][i];
dayterm.day +=daytoday.day;
}
return dayterm.day;
}
int main(void)
{
FILE *fp;
fp=fopen("1508010310.txt","wt+");
if(fp==NULL)
{ printf("can't open this file!\n");
exit(0);
}
fputs("起始日期为:",fp);//向文件中写入
struct date today,term;
int yearday,year,day,i;
printf("请输入日期:示例20100101\n");
printf("请输入起始日期:");
term=BeginDay();
fprintf(fp,"%d",Y);
while(i)/*实现多次输入*/
{
printf("请输入计算日期:");
today=EndDay();
fputs("\n计算日期为:",fp);//向文件中写入
fprintf(fp,"%d",X);
if(term.year ==today.year )
{
yearday=days3(term,today);
}
else
{
yearday=days1(term);/*计算起始年的天数*/
term.month =12;/*整年天数,方便计算*/
term.day =31;
for(year=term.year+1;year<today.year;year++)
{
term.year=year;
yearday+=days2(term); /*计算从起始年后一年至指定年的前一年共有多少天*/
}
yearday+=days2(today); /*加上指定年中到指定日期的天数*/
}
day=yearday%5+1; /*求余数*/
if(day>0&&day<4)
{ printf("今天打渔!\n"); /*打印结果*/
fputs(" 打渔\n",fp);
}
else
{ printf("今天晒网!\n");
fputs(" 晒网\n",fp);
}
printf("距起始日期的天数:");
printf("%d\n",yearday);
printf("输入1继续计算,输入0退出:");
scanf("%d",&i);
}
fclose(fp);
return 0;
}
Auther:陈款 Version: windows7 Date:2017.3.8 // 作者、版本及完成日期
*/
#include<stdio.h>
#include<stdlib.h>
int X,Y;//全局变量
struct date{
int year;
int month;
int day;
};
//判断是否是闰年
int judge(struct date day)
{
static int day_tab[2][13]=
{{0,31,28,31,30,31,30,31,31,30,31,30,31,}, /*平均每月的天数*/
{0,31,29,31,30,31,30,31,31,30,31,30,31,},
};
int m,LP;
LP=day.year%4==0&&day.year%100!=0||day.year%400==0;
/*判定year为闰年还是平年,lp=0为平年,非0为闰年*/
m=day_tab[LP][day.month];
return m;
}
//判断起始日期是否有效
struct date BeginDay()
{
struct date term;
int R;
for(;;)
{
scanf("%d",&Y); //输入日期
if(Y>=10101&&Y<=99991231)
{
term.year=Y/10000;/*将输入数改成设备能识别的日期*/
term.month=Y/100%100;
term.day=Y%100;
if(term.month<=12)
{
R=judge(term);/*判断日数是否有效*/
if(term.day<=R)
break;
else
{ printf("您输入的日数有误,请重新输入日期:");
continue;
}
}
else
{ printf("您输入的月数有误,请重新输入日期:");
continue;
}
}
else
{ printf("您输入的年数有误,请重新输入日期:");
continue;
}
}
return(term);
}
//判断终止日期是否有效
struct date EndDay()
{
struct date today;
int R;
for(;;)
{
scanf("%d",&X); //输入日期
if(X>=Y&&X<=99991231)
{
today.year=X/10000;/*将输入数改成设备能识别的日期*/
today.month =X/100%100;
today.day=X%100;
if(today.month<=12)
{
R=judge(today);
if(today.day<=R)/*判断日数是否有效*/
break;
else
{ printf("您输入的日数有误,请重新输入日期:");
continue;
}
}
else
{ printf("您输入的月数有误,请重新输入日期:");
continue;
}
}
else
{ printf("您输入的年数有误,请重新输入日期:");
continue;
}
}
return(today);
}
int days1(struct date day)
{
static int day_tab[2][13]=
{{0,31,28,31,30,31,30,31,31,30,31,30,31,}, /*平均每月的天数*/
{0,31,29,31,30,31,30,31,31,30,31,30,31,},
};
int i,lp;
lp=day.year%4==0&&day.year%100!=0||day.year%400==0;
/*判定year为闰年还是平年,lp=0为平年,非0为闰年*/
day.day =day_tab[lp][day.month]-day.day ;
for(i=day.month+1;i<13;i++) /*计算起始年的天数*/
day.day+=day_tab[lp][i];
return day.day;
}
int days2(struct date day)
{
static int day_tab[2][13]=
{{0,31,28,31,30,31,30,31,31,30,31,30,31,}, /*平均每月的天数*/
{0,31,29,31,30,31,30,31,31,30,31,30,31,},
};
int i,lp;
lp=day.year%4==0&&day.year%100!=0||day.year%400==0;
/*判定year为闰年还是平年,lp=0为平年,非0为闰年*/
for(i=1;i<day.month;i++) /*计算起始年起的后一年的总天数*/
day.day+=day_tab[lp][i];
return day.day;
}
int days3(struct date dayterm,struct date daytoday)
{
static int day_tab[2][13]=
{{0,31,28,31,30,31,30,31,31,30,31,30,31,}, /*平均每月的天数*/
{0,31,29,31,30,31,30,31,31,30,31,30,31,},
};
int i,lp;
lp=dayterm.year%4==0&&dayterm.year%100!=0||dayterm.year%400==0;
/*判定year为闰年还是平年,lp=0为平年,非0为闰年*/
if(dayterm.month ==daytoday.month)
{
dayterm.day =daytoday.day -dayterm.day ;
}
else
{ dayterm.day =day_tab[lp][dayterm.month]-dayterm.day ;
for(i=dayterm.month+1;i<daytoday.month ;i++) /*计算起始年的天数*/
dayterm.day+=day_tab[lp][i];
dayterm.day +=daytoday.day;
}
return dayterm.day;
}
int main(void)
{
FILE *fp;
fp=fopen("1508010310.txt","wt+");
if(fp==NULL)
{ printf("can't open this file!\n");
exit(0);
}
fputs("起始日期为:",fp);//向文件中写入
struct date today,term;
int yearday,year,day,i;
printf("请输入日期:示例20100101\n");
printf("请输入起始日期:");
term=BeginDay();
fprintf(fp,"%d",Y);
while(i)/*实现多次输入*/
{
printf("请输入计算日期:");
today=EndDay();
fputs("\n计算日期为:",fp);//向文件中写入
fprintf(fp,"%d",X);
if(term.year ==today.year )
{
yearday=days3(term,today);
}
else
{
yearday=days1(term);/*计算起始年的天数*/
term.month =12;/*整年天数,方便计算*/
term.day =31;
for(year=term.year+1;year<today.year;year++)
{
term.year=year;
yearday+=days2(term); /*计算从起始年后一年至指定年的前一年共有多少天*/
}
yearday+=days2(today); /*加上指定年中到指定日期的天数*/
}
day=yearday%5+1; /*求余数*/
if(day>0&&day<4)
{ printf("今天打渔!\n"); /*打印结果*/
fputs(" 打渔\n",fp);
}
else
{ printf("今天晒网!\n");
fputs(" 晒网\n",fp);
}
printf("距起始日期的天数:");
printf("%d\n",yearday);
printf("输入1继续计算,输入0退出:");
scanf("%d",&i);
}
fclose(fp);
return 0;
}