#pragma warning(disable : 4996)
#include <stdio.h>
#include <time.h>
int total(int yeara) //计算公元一年一月一日到输入年份之前的总天数
{
int i, s = 0, a;
for (i = 1; i <= yeara - 1; i++)
{
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
a = 366;
else
a = 365;
s = s + a;
}
return s;
}
int where(int yearb, int monb) //判断每月天数
{
int tian;
switch (monb)
{
case 1: tian = 31; break;
case 2:
if (yearb % 4 == 0 && yearb % 100 != 0 || yearb % 400 == 0)
tian = 29;
else
tian = 28;
break;
case 3: tian = 31; break;
case 4: tian = 30; break;
case 5: tian = 31; break;
case 6: tian = 30; break;
case 7: tian = 31; break;
case 8: tian = 31; break;
case 9: tian = 30; break;
case 10: tian = 31; break;
case 11: tian = 30; break;
case 12: tian = 31; break;
default:
printf("输入日期不存在");
main();
}
return tian;
}
void when(int day) //判断输入日期是星期几
{
FILE* fp = fopen("1.txt", "a+");
switch (day)
{
case 1: fprintf(fp, "该日为星期一\n"); printf("该日为星期一\n"); fclose(fp); break;
case 2: fprintf(fp,"该日为星期二\n"); printf("该日为星期二\n"); fclose(fp); break;
case 3: fprintf(fp,"该日为星期三\n"); printf("该日为星期三\n"); fclose(fp); break;
case 4: fprintf(fp,"该日为星期四\n"); printf("该日为星期四\n"); fclose(fp); break;
case 5: fprintf(fp,"该日为星期五\n"); printf("该日为星期五\n"); fclose(fp); break;
case 6: fprintf(fp,"该日为星期六\n"); printf("该日为星期六\n"); fclose(fp); break;
case 7: fprintf(fp,"该日为星期日\n"); printf("该日为星期日\n"); fclose(fp); break;
}
}
void why(int month, int day) //公历节日判断
{
FILE* fp = fopen("1.txt", "a+");
if (month == 1)
if (day == 1)
{
printf("该日是元旦\n");
fprintf(fp, "该日是元旦\n");
}
else
{
printf("该日不是公历节日!\n");
fprintf(fp, "该日不是公历节日!\n");
}
if (month == 3)
{
switch (day)
{
case 8: printf("该日是国际妇女节\n"); fprintf(fp, "该日是国际妇女节\n"); break;
case 12: printf("该日是植树节\n"); fprintf(fp, "该日是植树节\n"); break;
default: printf("该日不是公历节日!\n"); fprintf(fp, "该日不是公历节日!\n"); break;
}
}
if (month == 4)
if (day == 5)
{
printf("该日是清明节\n");
fprintf(fp, "该日是清明节\n");
}
else
{
printf("该日不是公历节日!\n");
fprintf(fp, "该日不是公历节日!\n");
}
if (month == 5)
{
switch (day)
{
case 1: printf("该日是劳动节\n"); fprintf(fp, "该日是劳动节\n"); break;
case 4: printf("该日是五四青年节\n"); fprintf(fp, "该日是五四青年节\n"); break;
default: printf("该日不是公历节日!\n"); fprintf(fp, "该日不是公历节日!\n"); break;
}
}
if (month == 6)
if (day == 1)
{
printf("该日是儿童节\n");
fprintf(fp, "该日是儿童节\n");
}
else
{
printf("该日不是公历节日!\n");
fprintf(fp, "该日不是公历节日!\n");
}
if (month == 7)
if (day == 1)
{
printf("该日是中国建党节\n");
fprintf(fp, "该日是中国建党节\n");
}
else
{
printf("该日不是公历节日!\n");
fprintf(fp, "该日不是公历节日!\n");
}
if (month == 8)
if (day == 1)
{
printf("该日是建军节\n");
fprintf(fp, "该日是建军节\n");
}
else
{
printf("该日不是公历节日!\n");
fprintf(fp, "该日不是公历节日!\n");
}
if (month == 9)
{
switch (day)
{
case 3: printf("该日是抗日战争胜利纪念日\n"); fprintf(fp, "该日是抗日战争胜利纪念日\n"); break;
case 10: printf("该日是教师节\n"); fprintf(fp, "该日是教师节\n"); break;
default: printf("该日不是公历节日!\n"); fprintf(fp, "该日不是公历节日!\n"); break;
}
}
if (month == 10)
if (day == 1)
{
printf("该日是国庆节\n");
fprintf(fp, "该日是国庆节\n");
}
else
{
printf("该日不是公历节日!\n");
fprintf(fp, "该日不是公历节日!\n");
}
if(month==11)
{
printf("该日不是公历节日");
fprintf(fp, "该日不是公历节日");
}
if (month == 2)
{
printf("该日不是公历节日");
fprintf(fp, "该日不是公历节日");
}
if (month == 12)
{
printf("该日不是公历节日");
fprintf(fp, "该日不是公历节日");
}
fclose(fp);
}
void output_year() //年份输出
{
int year, d, di, did, z, j;
printf("请输入年份(eg:2015):");
FILE* fp = fopen("1.txt", "a+");
scanf_s("%d", &year);
fprintf(fp, "查询%d年的年历\n",year);
z = total(year);
if (year > 2040 || year < 1940)
{
printf("查询范围为1940年到2040年");
fprintf(fp,"查询范围为1940年到2040年");
fclose(fp);
main();
}
else
{
for (j = 1; j <= 12; j++)
{
d = z % 7;
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf(" %d月份\n", j);
printf("sun mon tue wed thu fri sat\n");
fprintf(fp,"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
fprintf(fp," %d月份\n", j);
fprintf(fp,"sun mon tue wed thu fri sat\n");
if (d < 6)
for (di = 1; di <= d + 1; di++)
{
printf(" ");
fprintf(fp, " ");
}
for (did = 1; did <= where(year, j); did++)
{
printf("%d", did);
fprintf(fp, "%d", did);
if (did < 10)
{
printf(" ");
fprintf(fp, " ");
}
else
{
printf(" ");
fprintf(fp, " ");
}
if (did == 6 - d || (did - 6 + d) % 7 == 0 || did == where(year, j))
{
printf("\n");
fprintf(fp, "\n");
}
}
z = z + where(year, j);
}
fclose(fp);
main();
}
}
void output_month() //年月输出
{
int year, m, n, d, di, did, j, Z, D;
printf("请输入所查日历的年月(eg:2015 01):");
FILE* fp = fopen("1.txt", "a+");
scanf_s("%d%d", &m, &n);
fprintf(fp, "查询%d年%d月的月历\n",m,n);
if (m > 2040 || m < 1940)
{
printf("查询范围为1940年到2040年");
main();
}
else
{
Z = total(m);
for (j = 1; j <= n - 1; j++)
{
D = where(m, j);
Z = Z + D;
}
d = Z % 7;
if (n < 12)
{
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf(" %d月份\n", n);
printf("sun mon tue wed thu fri sat\n");
fprintf(fp,"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
fprintf(fp," %d月份\n", n);
fprintf(fp,"sun mon tue wed thu fri sat\n");
if (d < 6)
for (di = 1; di <= d + 1; di++)
{
printf(" ");
fprintf(fp, " ");
}
for (did = 1; did <= where(m, n); did++)
{
printf("%d", did);
fprintf(fp,"%d", did);
if (did < 10)
{
printf(" ");
fprintf(fp, " ");
}
else
{
printf(" ");
fprintf(fp, " ");
}
if (did == 6 - d || (did - 6 + d) % 7 == 0 || did == where(m, n))
{
printf("\n");
fprintf(fp, "\n");
}
}
}
else
{
printf("月份输入不正确");
}
fclose(fp);
main();
}
}
void output_day() //年月日输出
{
int d, h, j, k, l, x, y, z, Z, Z1, D, jian, judge;
time_t timep;
struct tm* p;
time(&timep); //系统时间获取
p = localtime(&timep); //此函数获得的tm结构体的时间,是已经进行过时区转化为本地时间
printf("请输入年月日(eg:2015 01 01):");
FILE* fp = fopen("1.txt", "a+");
scanf("%d%d%d", &x, &y, &z);
fprintf(fp, "查询%d年%d月%d日的日历\n",x,y,z);
if (x > 2040 || x< 1940)
{
printf("查询范围为1940年到2040年");
main();
}
else
{
judge = where(x, y);
if (judge < z || y>12)
{
printf("输入日期不存在!");
fprintf(fp, "输入日期不存在!");
}
else
{
Z = total(x);
for (j = 1; j <= y - 1; j++)
{
D = where(x, j);
Z = Z + D;
}
Z = Z + z;
h = 1900 + p->tm_year;//时间赋值
k = 1 + p->tm_mon;
l = 1 + p->tm_mday;
Z1 = total(h);
for (j = 1; j <= k - 1; j++)
{
D = where(k, j);
Z1 = Z1 + D;
}
Z1 = Z1 + l;
jian = Z1 - Z;
printf( "输入日期距今有%d天\n", jian);
fprintf(fp,"输入日期距今有%d天\n", jian);
d = Z % 7;
when(d);
why(y, z);
}
fclose(fp);
main();
}
}
int main()
{
int number;
printf("\n\n*************查询方式************* \n");
printf("* 1.查询某年的日历 * \n");
printf("* 2.查询某月的日历 * \n");
printf("* 3.查询特定的日期 * \n");
printf("* 4.查询特定的农历 * \n");
printf("* 5.查询结束--退出 * \n");
printf("********************************** \n");
do
{
printf("请输入查询方式:");
FILE* fp = fopen("1.txt", "a+");
scanf_s("%d", &number);
fprintf(fp, "所选的查询方式是第%d项\n",number);
time_t timep;
struct tm* p;
time(&timep);
p = gmtime(&timep);
fputs("日期: ", fp);
fprintf(fp, "%d", p->tm_year + 1900); //获取年
fputs("年", fp);
fprintf(fp, "%d", p->tm_mon + 1); //获取月
fputs("月", fp);
fprintf(fp, "%d", p->tm_mday); //获取日
fputs("日", fp);
fputs(" ", fp);
fputs("时间: ", fp);
fprintf(fp, "%d", p->tm_hour + 8); //获取时
fputs("时", fp);
fprintf(fp, "%d", p->tm_min); //获取分
fputs("分", fp);
fputs("\r\n", fp);
fclose(fp);
getchar();
//关闭文件
fclose(fp);
switch (number)
{
case 1: output_year(); break;
case 2: output_month(); break;
case 3: output_day(); break;
case 4: printf("暂未完成,敬请期待"); main();
case 5: break;
default: printf("输入错误!\n--------------\n"); break;
}
} while (number != 1 && number != 2 && number != 3 && number != 4&&number!=5);
}
已解决,for循环有点小问题,现在改正了