显示指定月份的日历
来源:互联网 发布:ubuntu svn checkout 编辑:程序博客网 时间:2024/05/16 17:29
1.写这个程序花了差不多6个小时
2.学习了自顶向下的设计方式,虽然是照着书上来构思的,但代码是自己写的
3.还用很多地方可以优化,比如采用更多函数,代码量至少还可以减少一百行
4.继续努力!!!!!
#include<iostream>#include<iomanip>using namespace std;//获得总天数 int getTotalDays(int year,int month,int NumberofLeapyear,bool LeapYear){int TotalofDays=NumberofLeapyear*366+(year-1800-NumberofLeapyear)*365; switch(month){ case 1: TotalofDays+=0; break; case 2: TotalofDays+=31; break; case 3: if(LeapYear) { TotalofDays+=(31+29); } else TotalofDays+=(31+28); break; case 4: if(LeapYear) { TotalofDays+=(31+29+31); } else TotalofDays+=(31+28+31); break; case 5: if(LeapYear) { TotalofDays+=(31+29+31+30); } else TotalofDays+=(31+28+31+30); break; case 6: if(LeapYear) { TotalofDays+=(31+29+31+30+31); } else TotalofDays+=(31+28+31+30+31); break; case 7: if(LeapYear) { TotalofDays+=(31+29+31+30+31+30); } else TotalofDays+=(31+28+31+30+31+30); break; case 8: if(LeapYear) { TotalofDays+=(31+29+31+30+31+30+31); } else TotalofDays+=(31+28+31+30+31+30+31); break; case 9: if(LeapYear) { TotalofDays+=(31+29+31+30+31+30+31+31); } else TotalofDays+=(31+28+31+30+31+30+31+31); break; case 10: if(LeapYear) { TotalofDays+=(31+29+31+30+31+30+31+31+30); } else TotalofDays+=(31+28+31+30+31+30+31+31+30); break; case 11: if(LeapYear) { TotalofDays+=(31+29+31+30+31+30+31+31+30+31); } else TotalofDays+=(31+28+31+30+31+30+31+31+30+31); break; case 12: if(LeapYear) { TotalofDays+=(31+29+31+30+31+30+31+31+30+31+30); } else TotalofDays+=(31+28+31+30+31+30+31+31+30+31+30); break;}return TotalofDays;};int main(void){//读取输入,有效性检验 cout<<"输入指定月份,将打印出该指定月份的日历"<<endl;cout<<"年(>=1800):"<<endl;int year=0;do{ bool right=true; cin>>year; if(year<1800) { cout<<"输入年份有误,请重新输入:"<<endl; right=false; } else break;}while(right);cout<<"月(整数):"<<endl;int month=1;do{ bool right=true; cin>>month; if(month<1||month>12) { cout<<"输入月份有误,请重新输入:"<<endl; right=false; } else break;}while(right);//打印日历头cout<<" ";switch(month){ case 1: cout<<"January"; break; case 2: cout<<"February"; break; case 3: cout<<"March"; break; case 4: cout<<"April"; break; case 5: cout<<"May"; break; case 6: cout<<"June"; break; case 7: cout<<"July"; break; case 8: cout<<"August"; break; case 9: cout<<"September"; break; case 10: cout<<"October"; break; case 11: cout<<"November"; break; case 12: cout<<"December"; break;}cout<<" "<<year<<endl;cout<<" "<<"---------------------------------"<<endl;cout<<setw(5)<<"Sun"<<setw(5)<<"Mon"<<setw(5)<<"Tue"<<setw(5)<<"Wen"<<setw(5)<<"Thu"<<setw(5)<<"Fri"<<setw(5)<<"Sat"<<setw(5)<<endl;//打印日历体//1.判断那些年是闰年const int STARTDAY1800=3;int NumberofLeapyear=0;bool LeapYear=true;for(int i=1800;i<year;i++){ if(i%4==0) { if(i%100==0&&i%400!=0) { LeapYear=false; } else LeapYear=true; } else LeapYear=false; if(LeapYear) NumberofLeapyear++;} //cout<<TotalofDays<<endl;//3.获得指定月份1号的星期值int theDate=(getTotalDays(year,month,NumberofLeapyear,LeapYear)+STARTDAY1800)%7;//打印一号前的空格 for(int k=0;k<theDate;k++){ cout<<setw(5)<<" ";}//打印第一周int i=1;for(;i<=7-theDate;i++){cout<<setw(5)<<i;} cout<<endl;int DaysofJanuary=31;int DaysofFebruary=LeapYear?29:28;int DaysofMarch=31;int DaysofApril=30;int DaysofMay=31;int DaysofJune=30;int DaysofJuly=31;int DaysofAugust=31;int DaysofSeptember=30;int DaysofOctober=31;int DaysofNovember=30;int DaysofDecember=31;//打印剩下周 int counter=0;switch(month){ case 1: for(int j=i;j<=DaysofJanuary;j++) { cout<<setw(5)<<j; counter++; if(counter%7==0) cout<<endl; } break; case 2: for(int j=i;j<=DaysofFebruary;j++) { cout<<setw(5)<<j; counter++; if(counter%7==0) cout<<endl; } break; case 3: for(int j=i;j<=DaysofMarch;j++) { cout<<setw(5)<<j; counter++; if(counter%7==0) cout<<endl; } break; case 4: for(int j=i;j<=DaysofApril;j++) { cout<<setw(5)<<j; counter++; if(counter%7==0) cout<<endl; } break; case 5: for(int j=i;j<=DaysofMay;j++) { cout<<setw(5)<<j; counter++; if(counter%7==0) cout<<endl; } break; case 6: for(int j=i;j<=DaysofJune;j++) { cout<<setw(5)<<j; counter++; if(counter%7==0) cout<<endl; } break; case 7: for(int j=i;j<=DaysofJuly;j++) { cout<<setw(5)<<j; counter++; if(counter%7==0) cout<<endl; } break; case 8: for(int j=i;j<=DaysofAugust;j++) { cout<<setw(5)<<j; counter++; if(counter%7==0) cout<<endl; } break; case 9: for(int j=i;j<=DaysofSeptember;j++) { cout<<setw(5)<<j; counter++; if(counter%7==0) cout<<endl; } break; case 10: for(int j=i;j<=DaysofOctober;j++) { cout<<setw(5)<<j; counter++; if(counter%7==0) cout<<endl; } break; case 11: for(int j=i;j<=DaysofNovember;j++) { cout<<setw(5)<<j; counter++; if(counter%7==0) cout<<endl; } break; case 12: for(int j=i;j<=DaysofNovember;j++) { cout<<setw(5)<<j; counter++; if(counter%7==0) cout<<endl; } break;}cout<<endl;return 0;}
0 0
- 显示指定月份的日历
- 输出今年指定月份的日历
- Core Java (六) 打印指定月份的日历
- oracle的周、月份、日历
- oracle的周、月份、日历
- 输出当前月份的日历
- 日历月份日期显示错误,修改
- Java使用Calendar类在控制台输出指定年份和月份的日历
- 通过用户输入的年份与月份来算显示当月的日历
- Shell实现从键盘输入年份和月份,显示该年、月的日历
- 用JAVA打印当前月份的日历
- c#图片添加当前月份的日历
- java 实现打印当前月份的日历
- 精确到月份的日历插件
- 获取指定月份的天数
- Java编写日历程序,显示当前月份及日期
- 【java】java实现在界面上显示当前月份的日历,并连接数据库的简易备忘录
- echarts+thinkphp+sql实现的筛选时间,分组,对应在日历中显示该月份的对应天数巡查次数。
- 项目分享-限流框架的实现
- C#—软件注册与注册机
- 【Gson】Gson 使用笔记
- foundation-数组的遍历2
- [华为机试练习题]22.N皇后
- 显示指定月份的日历
- 安装Kali小记
- Javascript 严格模式详解
- git 生成密码始终不成功
- Tomcat服务器的简单安装和配置
- kml文件初探
- Python读写文件实际操作的五大步骤
- MySQL详解(6)---------MySQL语句
- textfield设置只能输入的字符长度