|

楼主 |
发表于 2020-3-14 16:02:31
|
显示全部楼层
- #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循环有点小问题,现在改正了 |
|