一、输入一个年份,输出是在屏幕上显示该年的日历。假定输入的年份在1940-2040年之间
(1)输入年,输出该年的日历。
(2)输入年月,输出该月的日历。
(3)输入年月日,输出距今天还有多少天,星期几,是否是公历节日。

二、原理
此程序通过函数的调用实现了程序的运行,程序中运用了很多循环结构,来实现日期的显示,还运用了选择结构,通过选择判断闰年、星期几,输出相应的信息,还运用了指针,配合switch等语句显示日期是星期几。

三、 需求分析1.目前的计算机日历程序,比较典型的是Windows各版本中的日历程序以及基于该程序所开发的各种:应用程序中的日历程序。然而,这些程序都是千遍一律的局限于-一个很短的时间内。但是,很多情况下,特别是在众多的科学领域中,一个时间跨度较大的程序是有参考价值的。C++程序设计语言充分发挥了其自身无与伦比的优越性,用极短的程序文本就弥补了这一领域的空白。2.万年历作为日常中的一种小工具,它具有多方面的小工能,主要在日期的显示上给人以直观的表达效果,在日期的查询上方便简洁,还有就是在某些节日的提醒.上都给我们带来极大的方便,是一种比较实用的小工具给人的需求性很大,学生在做此万年历课程设计的同时,能够认识到C++编程给人带来的便捷,也能够清楚万年历表编程的出入。对培养学生的创新能力和动手能力具有很大的作用。

四、 总体思路
想要实现输出某年的日历,必须知道一个常识,那就是公元一年一月一日是星期一,这是一个重要的切入点。如果知道了这一点,那问题就迎刃而解了。首先,我们可以先把公元一年一月一日到这年一月一日之前的总天数计算出来,这用for语句比较容易实现,不过要注意到平年与闰年的区别。有了总天数,然后再除以7,余数为几,那么这年的一月一日就是星期几,如此依次排出一月的日历。再把一月的天数加上总天数得到的结果除以7,就可以知道二月一日是星期几,写出二月的日历。如此便可写出一到十二月的日历。至于输入年月,输出该月的日历,思路相同。至于判断是否为公历节日,用一个if语句便可实现。

(1)函数:
1.Isleapyear函数判断该年是否为闰年,判断一-年是否为闰年需要符合下面二者之一:
1.能被4整除,但不能被100整除。2.能被400整除。满足上述条件时,返回值为1,否则返回值为0。2.Alldays函数判断公元一月一号到公元某年某月的总天数,利用for循坏,求出该月前几月的天数和,加上输入日期的天数,就得到了公元一月一号到公元某年某月的总天数。
3.Days函数判断公元一月一号到公元前某年某月的总天数,利用for循坏,求出该月前几个月的天数和,再加上输入日期的天数,就得到了公元一月一号到公元前某年某月的总天数。
4.Outputtoscreen函数判断某年某月某日的編号,在l与j=0;j<1+1;j++的情况下,根据K=1;k<=dayofmonth[isleapyear(year)][month-1];k++,”%4d”,k,(i+k+1)%70得到与“日 一二三四五六"相对应的天数,并输出到屏幕。
5.Outputtofile函数判断某年某月某日的編号,在l6与j=0;j<1+1;j++的情况下,根据k=l;k<=dayofmonth[isleapyear (year)][month-1];k++, “%4d”,k ,(i+k+1)%70 得到与“日 一 二 三 四 五 六”相对应天数,并输出到文本
.6.Onemonth函数输入年分,月份,通过allday和day函数再由outputtoscreen函数得出结果,从而形成每七个数字一换行的效果,即形成月历。
7.Oneyear函数输入年份,通过allday和day函数再由outputtoscreen函数得出結果,定义変量month,赋初值为1,利用for循环,循环十二次,输出各个月的月历,从而显现出该年的毎一天,达到年历的效果。
8.Oneday函数输入年份,月份,日期,通过allday和day函数再由outputtoscreen函数得出结果,从而得到某天是周几。
9.ThedayafterN函数输入一个日期,再输入要经过的天数,通过allday和day函数,再由while语句得出査询的年月日星期。
10.Mainmenu函数输入要选择的服务项:
1.査询某年中的某个月;
2.査询某年;
3.査询某天是周几;
4.査询一段吋间日期;
5.査询两个日期间共有多少天;
6.输入一个日期,和一个整数n,査询n天以后的日期;
0: 退出。
再利用switch语句:
case l:onemonth();
break;
case 2:oneyear();
break;
case 3:oneday();
break;
case 4:somemonth();
break;
case 5:countof2date();
break;
case 6:thedayafterN();
break;
case 0:{Sign=1;break;}
链接到指定函数,运行所使用程序,得出结果。
(2)功能实现核心代码头文件#include <stdio.h>定义变量int monthdays[12]={31,28,31,30,31,30,31,31,30,31,30,31};int leapyearmonthdays[12]={31,29,31,30,31,30,31,31,30,31,30,31};int year=2011;int month=4;int day=22;int isweekday(int y,int m,int d)定义函数检测输入年份是否为闰年int isleapyear(int y){if (y%4000 || y%100!=0 && y%40)return 1; return 0;} void print_month(int y,int m){int i=0;int startday=isweekday(y,m,1);printf("\n%4d/%02d\n",y,m);printf("*****************************\n");检测该天是星期几int isweekday(int y,int m,int d){int weekday;if(m<3) { m+=12; y–;}return weekday=(2+2m+3(m+1)/5+y+y/4-y/100+y/400)%7;}计算输入日期距今的天数if(isleapyear(year) && month<=2)temp++; if(isleapyear(y) && m>2 ||(m2 && d29))temp++; for(i=month+1;i<=12;i++){days+=monthdays[i-1];} for(i=1;i<m;i++){days+=monthdays[i-1];}days+=(y-year-1)*365;}if(!(yeary && monthm)){days+=monthdays[month-1]-d
y+d;}else{days+=d-day;}days+=temp; printf("\n今天距%d/%d/%d还有%d天\n",y,m,d,days); return days;}主函数void main(){int temp;int y,m,d;char ch;do{printf(“请输入要查询的方式(1.查询年历\n 2.查询月历3.计算日期\n 4.设置当前日期(%d/%d/%d)):”,year,month,day);scanf("%d",&temp);switch(temp){case 1:printf(“请输入年份(ep:2011):”);scanf("%d",&y);print_year(y);break;case 2:printf(“请输入年月(ep:2011/4):”);scanf("%d/%d",&y,&m);print_month(y,m);break;case 3:printf(“请输入日期(ep:2011/4/22):”);scanf("%d/%d/%d",&y,&m,&d);counterdays(y,m,d);break;case 4:printf(“请输入当天日期(ep:2011/4/22):”);scanf("%d/%d/%d",&y,&m,&d);setday(y,m,d);break;default:break;}printf("\n\n是否继续?(Y键继续,任意键退出)");getchar();scanf("%c",&ch);}while(ch==‘y’ || ch==‘Y’);}

程序源代码:
#include <stdio.h>  int monthdays[12]={31,28,31,30,31,30,31,31,30,31,30,31};int leapyearmonthdays[12]={31,29,31,30,31,30,31,31,30,31,30,31};int year=2019;int month=6;int day=20; int isweekday(int y,int m,int d){int weekday;if(m<3) { m+=12; y–;}return weekday=(2+2m+3(m+1)/5+y+y/4-y/100+y/400)%7;} int isleapyear(int y){if (y%4000 || y%100!=0 && y%40) return 1; return 0;} void print_month(int y,int m){int i=0;int startday=isweekday(y,m,1);printf("\n%4d/%02d\n",y,m);printf(“\n");for(i=0;i<startday;i++){printf(" “);}if(isleapyear(y)){for(i=1;i<=leapyearmonthdays[m-1];i++){printf(”%3d “,i); if((startday+i)%70)printf("\n");}}else{for(i=1;i<=monthdays[m-1];i++){printf("%3d ",i); if((startday+i)%70)printf(”\n");}}printf("\n\n”);} void print_year(int y){int i;for(i=1;i<=12;i++){print_month(y,i);}} int counterdays(int y,int m,int d){int temp=0;int days=0;int i;for(i=year+1;i<y;i++){if(isleapyear(i))temp++;} if(y-year>=1){if(isleapyear(year) && month<=2)temp++; if(isleapyear(y) && m>2 ||(m2 && d29))temp++; for(i=month+1;i<=12;i++){days+=monthdays[i-1];} for(i=1;i<m;i++){days+=monthdays[i-1];}days+=(y-year-1)*365;}if(!(yeary && monthm)){days+=monthdays[month-1]-day+d;}else{days+=d-day;}days+=temp; printf("\n今天距%d/%d/%d还有%d天\n",y,m,d,days); return days;}  void setday(int y,int m,int d){year=y;month=m;day=d;} void main(){int temp;int y,m,d;char ch;do{printf(“请输入要查询的方式(1.查询年历2.查询月历3.计算日期4.设置当前日期(%d/%d/%d)):”,year,month,day);scanf("%d",&temp);switch(temp){case 1:printf(“请输入年份(ep:2019):”);scanf("%d",&y);print_year(y);break;case 2:printf(“请输入年月(ep:2019/6):”);scanf("%d/%d",&y,&m);print_month(y,m);break;case 3:printf(“请输入日期(ep:2019/6/20):”);scanf("%d/%d/%d",&y,&m,&d);counterdays(y,m,d);break;case 4:printf(“请输入当天日期(ep:2019/6/20):”);scanf("%d/%d/%d",&y,&m,&d);setday(y,m,d);break;default:break;}printf("\n\n是否继续?(Y键继续,任意键退出)");getchar();scanf("%c",&ch);}while(ch==‘y’ || ch==‘Y’);}

年历显示系统,输入一个年份,输出是在屏幕上显示该年的日历。相关推荐

  1. 年历显示。功能要求:1.输入一个年份,输出时在屏幕上显示该年的日历。假定输入的年份在1940-2040年之间。2.输入年月,输出该月的日历。

    问题分析 首先对于年份来份来说,闰年的二月有29天,对此,可通过运用算法设计判断所求年份是不是闰年,如果是,则为其二月份的天数加一. 其次,对于每个月份的第一天是星期几,则通过所求年月日距离1940年 ...

  2. 汇编 一星题目字符串合集:输入字符,操作,在屏幕上显示

    倒序 ASSUME CS:CODES,DS:DATAS,SS:STACKSDATAS SEGMENTKONG DB 0DH,0AH,'$' ;0D回车;0A换行 DATAS ENDSSTACKS SE ...

  3. Java黑皮书课后题第4章:*4.17(一个月的天数)编写一个程序,提示用户输入一个年份和一个月份名称的前3个字母(第一个字母使用大写形式),显示该月中的天数。如果月份非法则显示出错信息

    *4.17(一个月的天数)编写一个程序,提示用户输入一个年份和一个月份名称的前3个字母(第一个字母使用大写形式),显示该月中的天数.如果月份非法则显示出错信息 题目 题目概述 破题 运行示例 代码 题 ...

  4. java输入一个年份,利用Java实现从键盘输入一个年份,程序输出改年出生的人的生肖...

    从键盘输入一个年份,程序输出改年出生的人的生肖. import java.util.Scanner; public class Sesx { public static void main(Strin ...

  5. 3.8编写程序 ,要求用户从键盘输入一个年份,程序输出改年出生的人的生肖。中国生肖基于12年一个周期,Java

    1. 题目要求   编写程序 ,要求用户从键盘输入一个年份,程序输出改年出生的人的生肖.中国生肖基于12年一个周期,   每年一个生肖代表.鼠(rat).牛(ox).虎(tiger).兔(rabbit ...

  6. 从键盘输入一个年份和月份,输出该月有多少天(考虑闰年, 闰年的条件是:(1)能被4整除,并且不能被100整除;(2)能被400整除)。

    从键盘输入一个年份和月份,输出该月有多少天(考虑闰年, 闰年的条件是:(1)能被4整除,并且不能被100整除:(2)能被400整除). (提示:月份不在1-12都要输出"Input erro ...

  7. 【C语言】输入一个年份和月份,输出该月的天数

    分析: 三种类型, A.2月比较特殊,平年的2月只有28天,而闰年的2月有 29 天: B.4.6.9.11月: C.其他1.3.5.7.8.10.12月. 代码: /*输入一个年份和月份,输出该月的 ...

  8. 输入一个年份,输出是否为闰年。闰年的条件,又能被4整除但不能被100整除,或者能被400整除的年份都是闰年

    输入一个年份,输出是否为闰年.闰年的条件,又能被4整除但不能被100整除,或者能被400整除的年份都是闰年 year=int(input('请输入一个年份:')) if (year%4==0 and ...

  9. (C++)输入一个年份和一个月份,输出这一年这个月有多少天。

    输入一个年份和一个月份,输出这一年这个月有多少天 #include <stdio.h> void main() { int year,mounth,day; scanf("%d% ...

最新文章

  1. 真正的OKR是什么?
  2. Python与R的争锋:大数据初学者该怎样选?
  3. UE3 供游戏性程序员的使用的性能最优化方法
  4. 金陵科技学院计算机答辩,金陵科技学院优秀毕业论文答辩ppt模板
  5. 一行代码,能导入所有Python库!
  6. 1.4 php编译安装-安装顺序在最后
  7. Spring帖子汇总
  8. selenium中CSS选择器定位
  9. 计算机文本格式含义,文本格式是什么意思
  10. d3.js学习笔记-10(布局:树状图、集群图捆、捆图)
  11. echarts 地图自定义图标_echarts 地图自定义图标Symbol 及其颜色
  12. iPhone、iPod和iPad离线固件升级的方法
  13. JavaScript基础——第一章,基础
  14. Win10任务栏总是弹出推荐Edge浏览器广告的解决方法
  15. TCP/IP OSI七层模型
  16. 【避坑指南】Python12个坑爹的陷阱,再不看坑的就是你
  17. 安装nginx-kafka插件ngx_kafka_module
  18. “生命人寿保险欺骗疑点
  19. Vue3+springboot+mybatis-pius实现分页功能
  20. 约束优化问题的KKT条件推导

热门文章

  1. 拼接大屏数据展示_AOC×泰凡科技丨用拼接屏,实现大数据可视化展示
  2. UVa 11374 - Airport Express
  3. java计步器算法_区块链+计步运动项目,主要采用以太坊、智能合约、springboot以及小程序等技术...
  4. 衍射光学元件(DOE)和微结构元件
  5. MKV怎么转AVI格式?转换的简单方法介绍
  6. C#中Newtonsoft.Json(Json.NET)的使用和处理json格式数据
  7. Php字符拼出心形,怎么用文字拼成心形?名字心形图案怎么做?文字拼成一个爱心怎么制作?告白图片制作...
  8. 【微信小程序】本地缓存保持登录状态之 wx.setStorageSync() 使用技巧
  9. android广告拦截原理,android扫描带有广告应用原理
  10. php打印机,PHP云打印类完整示例