c++日历改进版

#include<iostream>  
# include<fstream>  
#include<time.h>  
#include<string>  
#include<iomanip>  
using namespace std;  
void bangzhu();  
void xianzaishijian();  
void chakanrili();  
int runnian(int);  
int tianshu(int,int);  
void shuru();  
int shurupanduan(int ,int,int);  
void shuchu();  
void shuxiang(int);  
void shuchushuxiang();  
void dijitian();  
void nianli();  
int main()  //主函数  
{  
    int a;  
    bangzhu();  
    while(cin>>a)  
    {if(a==0)  
    break; 
	system("cls");
	
        switch(a)  
        {//case 0: break;break;  
        case 1: xianzaishijian(),bangzhu();break;  
        case 2: chakanrili();break;  
        case 3: shuchushuxiang();break;  
        case 4: dijitian();break;  
        case 5: nianli();break;  
  
        case 9: bangzhu();break;}  
          
}  
return 0;}  
  
void xianzaishijian()    //输出现在时间以及当前月份日历  
{   
time_t t = time(NULL);   
struct tm   *local = localtime(&t);   
int year = local -> tm_year + 1900;   
int month = local -> tm_mon + 1;   
int day = local -> tm_mday;  
int hour = local -> tm_hour;   
int minute = local -> tm_min;   
int second = local -> tm_sec;   
  
int d,y,m,l;  
y=year;  
m=month;  
d=day;  
int z=1;  
l=shurupanduan(y, m,z);  
 while(l==0)  
 {cin>>y>>m;  
l=shurupanduan(y,m,z);  
}  
    int q,s,i,sum=0;  
     for(i=1905;i<y;i++)  
     {sum+=365;  
       s=runnian(i);  
         if(s==1)  
           sum++;}  
     for(i=1;i<m;i++)  
     {s=runnian(y);  
switch(i)  
{case 1:q=31;break;  
case 2:q=28;break;  
case 3:q=31;break;  
case 5:q=31;break;  
case 7:q=31;break;  
case 8:q=31;break;  
case 10:q=31;break;  
case 12:q=31;break;  
case 4:q=30;break;  
case 6:q=30;break;  
case 9:q=30;break;  
case 11:q=30;break;}  
sum+=q;  
}  
     if(s==1&&m>2)  
        sum++;  
switch(m)  
{case 1:q=31;break;  
case 2:q=28;break;  
case 3:q=31;break;  
case 5:q=31;break;  
case 7:q=31;break;  
case 8:q=31;break;  
case 10:q=31;break;  
case 12:q=31;break;  
case 4:q=30;break;  
case 6:q=30;break;  
case 9:q=30;break;  
case 11:q=30;break;}  
s=runnian(y);  
if(s==1&&m==2)  
q++;  
int u,w;  
u=sum%7;  
w=3*u;  
sum=sum+d;  
d--;  
d=sum%7;  
  
cout <<"当前时间: "<<endl<<year<<"年"<<month<<"月"<<day<<"日"<<' '<<"星期";   
  
switch(d)  
{case 0:cout<<"日";break;  
case 1:cout<<"一";break;  
case 2:cout<<"二";break;  
case 3:cout<<"三";break;  
case 4:cout<<"四";break;  
case 5:cout<<"五";break;  
case 6:cout<<"六";break;  
}  
cout<<"  ";  
shuxiang(year);  
cout <<endl<<"     "<<hour<<":"<<minute<<":"<<second<<endl<<endl;   
cout<<" 日 一 二 三 四 五 六"<<endl;  
for(i=1;i<=w;i++)  
cout<<' ';  
  for(i=1;i<=q;i++)  
  {if(u==6)  
  {cout<<fixed<<setw(2)<<i<<"              "<<endl;;  
  u=-1;}  
   else cout<<fixed<<setw(2)<<i<<' ';  
  
   u++;}  
   
  
}   
void bangzhu()                         //操作指令提示  
{  cout<<"请输入以下指令"<<endl<<endl;   
      
    cout<<"    1.输出当前时间          " <<endl;  
    cout<<"============================"<<endl;  
    cout<<"    2.查看指定月份日历         "<<endl;  
    cout<<"============================"<<endl;  
    cout<<"    3.查看属相         "<<endl;  
    cout<<"============================"<<endl;  
    cout<<"    4,计算指定日期是一年中的第几天"<<endl;  
    cout<<"============================"<<endl;  
    cout<<"    5,显示输出任何一年的年历,并写入一文本"<<endl;  
    cout<<"============================"<<endl;  
    cout<<"    9.输出指令集"<<endl;  
    cout<<"============================"<<endl;  
    cout<<"    0.结束本程序          "<<endl ;  
    cout<<"============================"<<endl;  
}  
  
int shurupanduan(int a,int b,int c=1)   //判断输入年月是否正确  
{int l=1,q;  
if(a<=0||b<=0||b>12||c<0)  
{l=0;  
cout<<"您的输入有误请重新输入"<<endl;}  
switch(b)  
{case 1:q=31;break;  
case 2:q=28;break;  
case 3:q=31;break;  
case 5:q=31;break;  
case 7:q=31;break;  
case 8:q=31;break;  
case 10:q=31;break;  
case 12:q=31;break;  
case 4:q=30;break;  
case 6:q=30;break;  
case 9:q=30;break;  
case 11:q=30;break;}  
if(c>q)  
{l=0;  
cout<<"您的输入有误请重新输入"<<endl;}  
  
return l;}  
  
int runnian(int a) //判断是是否为闰年  
{int l=0;  
if((a%4==0&&a%100!=0)||(a%400==0))  
l=1;  
return l;  
}  
  
void chakanrili()   //查看指定月份日历  
{cout<<"请输入年月中间用空格隔开如2013 1"<<endl;  
int y,m,l;  
cin>>y>>m;  
int z=1;  
l=shurupanduan(y,m,z);  
 while(l==0)  
 {cin>>y>>m;  
l=shurupanduan(y,m,z);  
}  
    int q,s,i,sum=0;  
     for(i=1905;i<y;i++)  
     {sum+=365;  
       s=runnian(i);  
         if(s==1)  
           sum++;}  
     for(i=1;i<m;i++)  
     {s=runnian(y);  
switch(i)  
{case 1:q=31;break;  
case 2:q=28;break;  
case 3:q=31;break;  
case 5:q=31;break;  
case 7:q=31;break;  
case 8:q=31;break;  
case 10:q=31;break;  
case 12:q=31;break;  
case 4:q=30;break;  
case 6:q=30;break;  
case 9:q=30;break;  
case 11:q=30;break;}  
sum+=q;  
}  
     if(s==1&&m>2)  
        sum++;  
switch(m)  
{case 1:q=31;break;  
case 2:q=28;break;  
case 3:q=31;break;  
case 5:q=31;break;  
case 7:q=31;break;  
case 8:q=31;break;  
case 10:q=31;break;  
case 12:q=31;break;  
case 4:q=30;break;  
case 6:q=30;break;  
case 9:q=30;break;  
case 11:q=30;break;}  
s=runnian(y);  
if(s==1&&m==2)  
q++;  
int u,w;  
u=sum%7;  
w=3*u;  
cout<<" 日 一 二 三 四 五 六"<<endl;  
for(i=1;i<=w;i++)  
cout<<' ';  
  for(i=1;i<=q;i++)  
  {if(u==6)  
  {cout<<fixed<<setw(2)<<i<<"              "<<endl;;  
  u=-1;}  
   else cout<<fixed<<setw(2)<<i<<' ';  
  
   u++;}  
cout<<endl;}  
  
void shuxiang(int y)//判断属相  
{int p;  
p=y%12;  
switch(p)   
 {case 1:cout<<"鸡年";break;  
 case 2:cout<<"狗年";break;   
 case 3:cout<<"猪年";break;  
 case 4:cout<<"鼠年";break;   
 case 5:cout<<"牛年";break;   
 case 6:cout<<"虎年";break;   
 case 7:cout<<"兔年";break;  
 case 8:cout<<"龙年";break;  
 case 9:cout<<"蛇年";break;  
 case 10:cout<<"马年";break;  
 case 11:cout<<"羊年";break;  
 case 12:cout<<"猴年";break;}  
}  
void shuchushuxiang() //输出属相  
{  
    cout<<"请输入年份"<<endl;  
    int y;  
    cin>>y;  
    shuxiang(y);  
    cout<<endl;  
}  
void dijitian()  
{int y,m,d,sum=0,i,l,s,q;  
cout<<"请输入年月日"<<endl;  
cin>>y>>m>>d;  
l=shurupanduan(y,m,d);  
 while(l==0)  
 {cin>>y>>m;  
l=shurupanduan(y,m,d);  
}  
    for(i=1;i<m;i++)  
     {s=runnian(y);  
switch(i)  
{case 1:q=31;break;  
case 2:q=28;break;  
case 3:q=31;break;  
case 5:q=31;break;  
case 7:q=31;break;  
case 8:q=31;break;  
case 10:q=31;break;  
case 12:q=31;break;  
case 4:q=30;break;  
case 6:q=30;break;  
case 9:q=30;break;  
case 11:q=30;break;}  
sum+=q;  
}  
     if(s==1&&m>2)  
        sum++;  
     sum=sum+d;  
     cout<<y<<"年"<<m<<"月"<<d<<"日是这一年中第"<<sum<<"天"<<endl;  
  
}  
void nianli()  
{cout<<"请输入文本名称:";   
char s[20];  
cin>>s;   
ofstream outfile(s,ios::out);  
cout<<"请输入年份"<<endl;  
int y,m,l;  
cin>>y;  
for(m=1;m<=12;m++)  
{  
int z=1;  
l=shurupanduan(y,m,z);  
 while(l==0)  
 {cin>>y>>m;  
l=shurupanduan(y,m,z);  
}  
    int q,s,i,sum=0;  
     for(i=1905;i<y;i++)  
     {sum+=365;  
       s=runnian(i);  
         if(s==1)  
           sum++;}  
     for(i=1;i<m;i++)  
     {s=runnian(y);  
switch(i)  
{case 1:q=31;break;  
case 2:q=28;break;  
case 3:q=31;break;  
case 5:q=31;break;  
case 7:q=31;break;  
case 8:q=31;break;  
case 10:q=31;break;  
case 12:q=31;break;  
case 4:q=30;break;  
case 6:q=30;break;  
case 9:q=30;break;  
case 11:q=30;break;}  
sum+=q;  
}  
     if(s==1&&m>2)  
        sum++;  
switch(m)  
{case 1:q=31;break;  
case 2:q=28;break;  
case 3:q=31;break;  
case 5:q=31;break;  
case 7:q=31;break;  
case 8:q=31;break;  
case 10:q=31;break;  
case 12:q=31;break;  
case 4:q=30;break;  
case 6:q=30;break;  
case 9:q=30;break;  
case 11:q=30;break;}  
s=runnian(y);  
if(s==1&&m==2)  
q++;  
int u,w;  
u=sum%7;  
w=3*u;  
outfile<<"   "<<y<<"年"<<m<<"月"<<endl;  
outfile<<" 日 一 二 三 四 五 六"<<endl;  
for(i=1;i<=w;i++)  
outfile<<' ';  
  for(i=1;i<=q;i++)  
  {if(u==6)  
  {outfile<<fixed<<setw(2)<<i<<"              "<<endl;;  
  u=-1;}  
   else outfile<<fixed<<setw(2)<<i<<' ';  
  
   u++;}  
outfile<<endl;  
}  
for(m=1;m<=12;m++)  
{  
int z=1;  
l=shurupanduan(y,m,z);  
 while(l==0)  
 {cin>>y>>m;  
l=shurupanduan(y,m,z);  
}  
    int q,s,i,sum=0;  
     for(i=1905;i<y;i++)  
     {sum+=365;  
       s=runnian(i);  
         if(s==1)  
           sum++;}  
     for(i=1;i<m;i++)  
     {s=runnian(y);  
switch(i)  
{case 1:q=31;break;  
case 2:q=28;break;  
case 3:q=31;break;  
case 5:q=31;break;  
case 7:q=31;break;  
case 8:q=31;break;  
case 10:q=31;break;  
case 12:q=31;break;  
case 4:q=30;break;  
case 6:q=30;break;  
case 9:q=30;break;  
case 11:q=30;break;}  
sum+=q;  
}  
     if(s==1&&m>2)  
        sum++;  
switch(m)  
{case 1:q=31;break;  
case 2:q=28;break;  
case 3:q=31;break;  
case 5:q=31;break;  
case 7:q=31;break;  
case 8:q=31;break;  
case 10:q=31;break;  
case 12:q=31;break;  
case 4:q=30;break;  
case 6:q=30;break;  
case 9:q=30;break;  
case 11:q=30;break;}  
s=runnian(y);  
if(s==1&&m==2)  
q++;  
int u,w;  
u=sum%7;  
w=3*u;  
cout<<"   "<<y<<"年"<<m<<"月"<<endl;  
cout<<" 日 一 二 三 四 五 六"<<endl;  
for(i=1;i<=w;i++)  
cout<<' ';  
  for(i=1;i<=q;i++)  
  {if(u==6)  
  {cout<<fixed<<setw(2)<<i<<"              "<<endl;;  
  u=-1;}  
   else cout<<fixed<<setw(2)<<i<<' ';  
  
   u++;}  
cout<<endl;  
}  
}  

原文地址:https://www.cnblogs.com/oversea201405/p/3767040.html