课程实践----万年历(三种输入三种显示)
来源:互联网 发布:c语言void函数返回值 编辑:程序博客网 时间:2024/06/05 18:40
问题及代码:
/**copyright (t) 2016,烟台大学计算机学院*All rights reserved.*文件名称:test.cpp*作者:张晴晴*完成日期:2016年6月30日*版本号:v1.0*问题描述:万年历(3)*输入描述:三种输入方法,1.输入年份。2.输入年份月份3.输入年月日*程序输出:1.输出一年的月份2.输出某年某月的月历3.输出某年某月某日所在的月历,具体日期标注*/#include <stdio.h>#include <stdlib.h>#include <windows.h>charmonths[13][10] = {"","Janurary","Feberury","March","April","May","June","July","Augest","September","October","November","December"};//判断每个月的第一天是星期几,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("Sun Mon Tues Wed Thu Fri Sat\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); printf("==================================\n"); printf("%s\n",months[month]); 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("%-5d",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"); printf("==================================\n");}//输出一年的所有月份void outputAllMonth(int year){ int i; for(i = 1; i <= 12; ++i) { outputOneMonth(year,i,0); printf("\n"); }}int main(){//console(); 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
- 课程实践----万年历(三种输入三种显示)
- 实践课题--万年历(按enter显示下个月份)
- Hadoop实践(三)---MapReduce中的输入和输出
- java输入方式 三种
- Java中的三种输入
- Python基础课程(三)
- 计算机网络课程笔记(三)
- 实践课题-万年历(简单)
- EditText中输入密码时的显示和隐藏三种方法
- 实践三
- 二级指针输入模型(三种内存模型)
- Java的三种输入方式
- oracle 输入命令的三种方式
- Java程序的三种输入
- java 输入的三种方法
- 移动端的三种输入方式
- Java编程中的三种输入方式
- 二级指针三种输入模型
- BigDecimal细节
- Factorials Trailing Zeroes
- AppBarLayout.OnOffsetChangedListener 解决下拉刷新先于AppbarLayout的问题
- # ls ' > > > > 应该如何退出
- matlab-自控原理 计算传递函数的零极点
- 课程实践----万年历(三种输入三种显示)
- (2)LR实战之——登录脚本
- 详解大端模式和小端模式
- Yalantis 那些动画效果很炫的 Android 及 iOS 开源项目
- 企业建立成功 DevOps 模式所需应对的5个挑战
- C++虚函数与纯虚函数
- 切换多国语言导致Fragment被回收,出现切换错乱
- matlab-自控原理 消除相同的零极点因子
- 风控相关