前言
新人报到,第一次写博客,有哪里写得不好的地方,请各位大佬多多指导
主要功能
选项界面
1.输入两个日期,计算两个日期的间隔;
2.输入一个开始日期和天数,往后计算是哪天;
3.输入一个最终的日期和天数,往前计算是哪天;
4.退出程序。
直接贴程序
头文件
#include <stdio.h>
定义一个结构体
struct date
{
struct date
{
int year;
int month;
int day;
}*pdate;
定义每个月的长度
const int primeMonth[12]={31,29,31,30,31,30,31,31,30,31,30,31};
const int notPrimeMonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};
主函数
int main(void)
{
int isPrime(int year);
int dateDiff(struct date mindate,struct date maxdate);
int dateAdd(struct date *mindate,int days);
int dateSub(struct date *maxdate,int days);
struct date mindate,maxdate;
int days,n;
while(n!=4)
{
system("cls");
/*---------------开始的菜单选项-----------------*/
printf("**********************************\n");
printf("** What do you want to know? **\n");
printf("**********************************\n");
printf("**1.Difference between two days?**\n");
printf("**2.One day plus a few days? **\n");
printf("**3.One day subtract a few days?**\n");
printf("**4.Exit **\n");
printf("**********************************\n");
printf("I need:\n");
scanf("%d",&n);
printf("**********************************\n");
switch(n)
{
case 1://输入1,计算两天间隔
printf("Please input the one date:");
scanf("%i-%i-%i",&mindate.year,&mindate.month,&mindate.day);
printf("Please input other day:");
scanf("%i-%i-%i",&maxdate.year,&maxdate.month,&maxdate.day);
days=dateDiff(mindate,maxdate);
printf("The days are:%d\n",days);
system("pause");
break;
case 2://输入2,往后计算日期
printf("Please input the date:");
scanf("%i-%i-%i",&mindate.year,&mindate.month,&mindate.day);
printf("Please input the number of days:");
scanf("%d",&days);
pdate=dateAdd(&mindate,days);
printf("The date is:%i-%i-%i\n",pdate->year,pdate->month,pdate->day);
system("pause");
break;
case 3://输入3,往前计算日期
printf("Please input the date:");
scanf("%i-%i-%i",&maxdate.year,&maxdate.month,&maxdate.day);
printf("Please input the number of days:");
scanf("%d",&days);
pdate=dateSub(&maxdate,days);
printf("The date is:%i-%i-%i\n",pdate->year,pdate->month,pdate->day);
system("pause");
break;
case 4://输入4,退出程序
printf("You will regret it. Goodbye!\n");
system("pause");
break;
default://提示错误
printf("Why not take the request seriously?\n");
system("pause");
break;
return 0;
}
}
}
函数:判断是否闰年
int isPrime(int year)
{
if ((year%4==0&&year%100!=0)||(year%400==0))
return 1;
else
return 0;
}
函数:计算两个日期间隔
int dateDiff(struct date mindate,struct date maxdate)
{ int days=0, flag=1;
struct date tmp;
if ((mindate.year>maxdate.year)|| (mindate.year==maxdate.year&&mindate.month>maxdate.month)||(mindate.year==maxdate.year&&mindate.month==maxdate.month&&mindate.day>maxdate.day))
{
tmp=mindate;
mindate=maxdate;
maxdate=tmp;
}
int maxmonth,minmonth;
if (maxdate.month<mindate.month)
{
maxmonth=mindate.month;
minmonth=maxdate.month;
flag=-1;
}
else
{
maxmonth=maxdate.month;
minmonth=mindate.month;
flag=1;
}
int j=mindate.year;
for(j;j<maxdate.year;++j)
{
if (isPrime(j)==1)
{
days+=366;
}
else
days+=365;
}
int day;
if(isPrime(maxdate.year)==1)
{
int i=minmonth;
for(i;i<maxmonth;i++)
{
day=primeMonth[i-1]*flag;
days=days+day;
}
days=days+maxdate.day-mindate.day;
}
else
{
int i=minmonth;
for (i;i<maxmonth;i++)
{
day=notPrimeMonth[i-1]*flag;
days=days+day;
}
days=days+maxdate.day-mindate.day;
}
return days;
}
函数:往后计算日期
int dateAdd(struct date *mindate,int days)
{
struct date *pmaxdate=mindate;
for(days;days>=365;)
{
if(isPrime(pmaxdate->year)==1)
if(days>=366)
{
days-=366;
pmaxdate->year++;
}
else
break;
else
if(days>=365)
{
days-=365;
pmaxdate->year++;
}
}
pmaxdate->day+=days;
if(isPrime(pmaxdate->year)==1)
for(pmaxdate->day;pmaxdate->day>=primeMonth[pmaxdate->month-1];)
{
pmaxdate->day-=primeMonth[pmaxdate->month-1];
pmaxdate->month++;
if(pmaxdate->month>12)
{
pmaxdate->month-=12;
pmaxdate->year++;
}
}
else
for(pmaxdate->day;pmaxdate->day>=notPrimeMonth[pmaxdate->month-1];)
{
pmaxdate->day-=notPrimeMonth[pmaxdate->month-1];
pmaxdate->month++;
if(pmaxdate->month>12)
{
pmaxdate->month-=12;
pmaxdate->year++;
}
}
return pmaxdate;
}
函数:往前计算日期
int dateSub(struct date *maxdate,int days)
{
struct date *pmindate=maxdate;
for(days;days>=365;)
{
if(isPrime(pmindate->year-2)==1)
if(days>=366)
{
days-=366;
pmindate->year--;
}
else
break;
else
if(days>=365)
{
days-=365;
pmindate->year--;
}
}
if(days<pmindate->day)
pmindate->day-=days;
else
{
pmindate->day=days-pmindate->day;
pmindate->month--;
if(isPrime(pmindate->year)==1)
{
for(pmindate->day;pmindate->day>=primeMonth[pmindate->month-1];)
{
pmindate->day-=primeMonth[pmindate->month-1];
pmindate->month--;
if(pmindate->month<1)
{
pmindate->month+=12;
pmindate->year--;
}
}
pmindate->day=primeMonth[pmindate->month-2]-pmindate->day;
}
else
{
for(pmindate->day;pmindate->day>=notPrimeMonth[pmindate->month-1];)
{
pmindate->day-=notPrimeMonth[pmindate->month-1];
pmindate->month--;
if(pmindate->month<1)
{
pmindate->month+=12;
pmindate->year--;
if(isPrime(pmindate->year)==1)
break;
}
}
if(isPrime(pmindate->year)==1)
{
for(pmindate->day;pmindate->day>primeMonth[pmindate->month-2];)
{
pmindate->day-=primeMonth[pmindate->month-1];
pmindate->month--;
if(pmindate->month<1)
{
pmindate->month+=12;
pmindate->year--;
}
}
pmindate->day=primeMonth[pmindate->month-1]-pmindate->day;
}
else
pmindate->day=notPrimeMonth[pmindate->month-1]-pmindate->day;
}
}
return pmindate;
}
结束
要哭出来了这玩意排版太难了,请各位大佬指教