万年历,整的我老费劲了

#include<iostream>
#include <string>
#include <stdio.h>
#include <iomanip>
int year,month;

using namespace std;

bool isRunYear(int year);

long year2day(int year);

int month2day(int month,int year);
void zhuti();
int main()
{
   std::cout<<"\n\n\t\t——尊敬的会员,欢迎您光临普通日历查询系统——"<<std::endl;
   //提示输入密码和账号,如果错误则退出
   std::string account = "1"; //账号变量
   std::string password = "1";//密码变量
   //第一步:实现密码的控制,如果输入错误,根据选择继续或者退出

   do{
       std::cout<<"请输入您的会员账号:";
	   std::cin>>account;
	   std::cout<<"请输入您的会员密码:";
	   std::cin>>password;
	   std::cout<<"\n-------------------------------------------------------------------------\n";
	   if(account=="1"&&password=="1")
	   {
		 zhuti();//跳出循环执行主体代码

	   }
	   else
	   {
        break;	        //在没有输入正确的时候,做出的择
	   }
   }while(true);
  return 0;
}
void zhuti(){
    std::cout<<"\n\n\t\t***************欢 迎 使 用 万 年 历***********";

		int sumyear = 0,yushu,i,n;
		int summonth = 0,zongday,j;
         string answer;
                //第二步:用循环控制是否继续查询日历
	
			std::cout<<"\n请选择年份: ";
			std::cin>>year;
			std::cout<<"\n请选择月份: ";
			std::cin>>month;


			//第三步:判断输入年份是否是闰年

			sumyear=year2day(year);//第四步:计算输入的年份之前的天数


			for(n=1;n<month;++n){
			summonth=summonth+month2day(n,year);
			}//第五步:计算输入月份之前的天数

             zongday=sumyear+summonth;           //第六步:求出距离1900年1月1日的天数

			yushu=zongday%7;//第七步:计算输入月份的第一天是星期几
std::cout<<"星期日  星期一  星期二  星期三  星期四  星期五  星期六"<<endl;

			for(i=1;i<=month2day(month,year);++i){
				if(yushu==6){
				if(i%7==0){
				  cout<<setw(yushu)<<i<<endl;
				  continue;
				}
				}
				if(yushu==0){
				if(i==13||i==20||i==27){
				  cout<<i<<endl;
				  continue;
				}
				if(i==1){
				cout<<setw(9)<<1;
				cout<<setw(8)<<2;
				cout<<setw(8)<<3;
				cout<<setw(8)<<4;
				cout<<setw(9)<<5;
				i+=4;
				continue;
				}
				if(i==6){
				cout<<setw(7)<<i<<endl;
				continue;
				}				
				}
				if(yushu==1){
				
				if(i==19||i==12||i==26){
				  cout<<i<<endl;
				  continue;
				}
				if(i==1){
				cout<<setw(17)<<1;
				cout<<setw(8)<<2;
				cout<<setw(8)<<3;
				i+=3;
				continue;
				}
				if(i==5){
				cout<<setw(8)<<i<<endl;
				continue;
				}			
				}if(yushu==2){
				if(i==11||i==18||i==25){
				  cout<<i<<endl;
				  continue;
				}
				if(i==1){
				cout<<setw(26)<<1;
				cout<<setw(8)<<2;
				cout<<setw(8)<<3;
				i+=2;
				continue;
				}
				if(i==4){
				cout<<setw(8)<<i<<endl;
				continue;
				}		
				}if(yushu==3){
				if(i==10||i==17||i==24){
				  cout<<i<<endl;
				  continue;
				}
				if(i==1){
				cout<<setw(35)<<1;
				cout<<setw(8)<<2;
				i+=1;
				continue;
				}
				if(i==3){
				cout<<setw(8)<<i<<endl;
				continue;
				}		
				}if(yushu==4){
				if(i==9||i==16||i==23||i==30){
				  cout<<i<<endl;
				  continue;
				}
				if(i==1){
				cout<<setw(44)<<1;
				i+=0;
				continue;
				}
				if(i==2){
				cout<<setw(5)<<i<<endl;
				continue;
				}		
				}if(yushu==5){
				if(i==8||i==15||i==29||i==22){
				  cout<<i<<endl;
				  continue;
				}
				if(i==1){
				cout<<setw(49)<<1<<endl;
				continue;
				}		
				}
			cout<<setw(yushu)<<i<<'\t';
			
			}
//第八步:打印日历(注意需要打印输入月份第一天之前所对应星期的空格)
             cout<<endl;
			cout<<"按enter继续"<<endl;
             fflush(stdin);
        getchar();
        zhuti();
		}
bool isRunYear(int year){
    if((year%4==0&&year%100!=0)||(year%400==0)){
        return true;
    }else{
        return false;
    }
}

long year2day(int year){
    int i;
    long sum=0;
    for(i=1900;i<year;i++){
        if(isRunYear(i)){
            sum+=366;
        }else{
            sum+=365;
        }
    }
    return sum;
}

int month2day(int month,int year){
     int day=0;
     switch(month){
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
             day=31;
             break;
        case 4:
        case 6:
        case 9:
        case 11:
              day=30;
              break;
        case 2:
            if(isRunYear(year)){
                day=29;
            }else{
                day=28;
            }
            break;
     }
     return day;
}

运行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值