简单万年历
来源:互联网 发布:路易斯威廉姆斯数据 编辑:程序博客网 时间:2024/04/27 01:02
功能:输入年份,输出全年十二个月份,输入年月,输出当年的当前月份,输入年月日,输出当年当前月份,并将日期高亮,输入“+”查看下月日历,“-”查看上月日历
就算某月某天是星期几用的公式是 “泽勒一致性”,也叫“蔡勒公式”
#include <stdio.h>#include <stdlib.h>#include <windows.h>//判断每个月的第一天是星期几,int judgeFirstDate(int year, int m, int q){ if(m == 1 || m == 2) { m += 12;//如果月份为1,2,则表示为去年的13,14月,年份也改为去年 --year; } int j = year / 100;//j表示世纪 int k = year % 100;//k表示本世纪的第几年 int h = (q + 26*(m+1)/10 + k + k/4 + j/4 + 5*j) % 7;//h=0为周六,h=1为周日,依次类推 return h;}//处理周几,把h=0为周六改为h=0为周日,把h=1为周日改为h=1为周一,依次类推int judgeWeek(int week){ if(!week) return 6; else return --week;}//把输入的字符串转换为数字年份void input(char* cTime, int* year, int* month, int* day){ int len = strlen(cTime); if(cTime[0] == '+') { ++(*month); return; } else if(cTime[0] == '-') { --(*month); return ; } *year = *month = *day = 0; *year = atoi(cTime); if(len >= 6) *month = atoi(cTime+5); if(len >= 8) *day = atoi(cTime+7);}//判断是不是闰年int isLeapYear(int year){ if((year%400 == 0) || (year%4 == 0 && year%100 != 0)) return 1; return 0;}//输出月份最上边的哪个导航void outputWeek(){ printf("Sunday Monday Tuesday Wednesday Thursday Friday Saturday\n");}//判断某年某个月份有几天int monthDay(int year, int month){ int judge = isLeapYear(year); switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; break; case 4: case 6: case 9: case 11: return 30; break; case 2: return judge == 1 ? 29 : 28; break; } return 0;}//输出某年的某个月void outputOneMonth(int year, int month, int day){ int i; int dayNum = monthDay(year,month); int week = judgeFirstDate(year,month,1); week = judgeWeek(week); outputWeek(); for(i = 0; i < week; ++i) printf(" "); for(i = 1; i <= dayNum; ++i) { if(day == i) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_INTENSITY); printf("%-10d",i); if(day == i) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); if((week+1)%7 == 0) printf("\n"); ++week; } if(week %7 != 0) printf("\n");}//输出一年的所有月份void outputAllMonth(int year){ int i; for(i = 1; i <= 12; ++i) { outputOneMonth(year,i,0); printf("\n"); }}int main(){ int year,month,day; char cTime[11]; while(fgets(cTime,11,stdin)) { //读入数据 input(cTime,&year,&month,&day); printf("%d",year); if(month == 0) { printf("\n"); //输出一年的所有月份 outputAllMonth(year); } else { printf(".%d",month); if(day != 0) printf(".%d",day); printf("\n"); //输出某个月份 outputOneMonth(year,month,day); } printf("+:last month\n-:next month\n"); } return 0;}
结果:
0 0
- 简单万年历
- 简单万年历
- asp 简单万年历显示
- 简单万年历的实现
- Java简单万年历
- 简单干净的万年历
- Java输出简单万年历
- js简单万年历
- 实现简单的万年历
- 一个简单的万年历
- 简单的公历万年历
- PHP实现简单的万年历
- 实践课题-万年历(简单)
- 万年历
- 万年历
- 万年历
- 万年历
- 万年历
- connection.prepareStatement(sql).execute()返回值boolen类型什么意思?
- 工业电表接线方法,光纤接线方法、97,、2007协议
- php面向对象
- Jquery-zTree的基本用法
- zTree简单使用和代码结构
- 简单万年历
- 欢迎使用CSDN-markdown编辑器
- 续“SunshineCRM系统”二次开发总结
- 自定义圆头像
- 自我勉励
- mysqldump用法
- Shell简介:什么是Shell,Shell命令的两种执行方式
- IOS Dev Intro - Mac Commands
- android richEditText 可添加文本和图片的记事本功能的控件打造