万年日历(转)

来源:互联网 发布:淘宝装修布局工具 编辑:程序博客网 时间:2024/04/28 08:32

#include<iostream>
#include<stdlib.h>
#include<iomanip>

using namespace std;

void years_and_month(int y,int m);//将日历显示出来的无返回值函数
int year_leap(int n);//判断闰年的函数,所以是有返回值

int main()

 int year,month;

 while(1)
 {
 system("color a");//改变字体颜色
 cout<<"请输入年和月:";
 cin>>year>>month;
 years_and_month(year,month);
 system("pause");
 system("cls");
 }
 return 0;
}
void years_and_month(int y,int m)
{
 long int year_days=0;//从公元第一年开始
 int  year_starts=1,per_year_starts;
 int months[]={31,28,31,30,31,30,31,31,30,31,30,31,29};
 while(year_starts<y)//从这里开始统计
 {
  if(year_leap(year_starts))//调用函数years_leap,判断years_starts是否为闰年
   per_year_starts=366;
  else
   per_year_starts=365;
  year_starts++;
  year_days=year_days+per_year_starts;
 }
 for(int i=0;i<m-1;i++)
  year_days=months[i]+year_days;
  
  switch(m)
 {
  case 1:
   cout<<"January\n";break;
  case 2:
   cout<<"February\n";break;
  case 3:
   cout<<"March\n";break;
  case 4:
   cout<<"April\n";break;
  case 5:
   cout<<"May\n";break;
  case 6:
   cout<<"June\n";break;
  case 7:
   cout<<"July\n";break;
  case 8:
   cout<<"August\n";break;
  case 9:
   cout<<"September\n";break;
  case 10:
   cout<<"October\n";break;
  case 11:
   cout<<"November\n";break;
  case 12:
   cout<<"December\n";break;
 }
 cout<<" Mon Tue Wed Thu Fri Sat Sun\n";
 int t,day;
 t=year_days%7;//从公元开始统计下来的天数除以7,用来控制每一个星期空几天
 if(t!=0)
  for(int i=0;i<t;i++)
   cout<<"    ";//先空4个格
  day=1;//每个月的第一天的号数
  if(year_leap(y)&&m==2)//当到2月份的时候,要判断输入的年是否为闰年
   while(day<months[12])
   {
    if(day>1)
     if(year_days%7==0)//控制一个星期为7天的时候,自动换行
      cout<<endl;
    cout<<setw(4)<<day;//制造日历的间隔
    year_days++;//保持上面换行能够成功
    day++;
   }
  else
   while(day<=months[m-1])//用事先temp在for语句里面的值控制每个月的天数
   {
    if(day>1)
     if(year_days%7==0)
      cout<<endl;
    cout<<setw(4)<<day;
    year_days++;
    day++;
   }cout<<endl;
 

}

int year_leap(int n)
{
 if((n%4==0&&n%100!=0)||n%400==0)
  return 1;
 else
  return 0;

}

原创粉丝点击