您的位置:首页 > 编程语言 > C语言/C++

C++程序设计

2014-03-09 22:53 169 查看
5.15 函数抽象和逐步求精

打印日历#include <iostream>
#include <iomanip>
using namespace std;

void printMonth(int year,int month);
void printMonthTitle(int year,int month);
void printMonthName(int month);
void printMonthBody(int year,int month);
int getStartDay(int year,int month);
int getTotalDay(int year,int month);
int getDayofMonth(int year,int month);
bool isLeapYear(int year);

int main(){
int year;
cout<<"input year"<<endl;
cin>>year;

int month;
cout<<"input month"<<endl;
cin>>month;

printMonth(year,month);
}

void printMonth(int year,int month){
printMonthTitle(year,month);
printMonthBody(year,month);
}

void printMonthTitle(int year,int month){
printMonthName(month);
cout<<year<<endl;
for(int i=0;i<7;i++)
cout<<"----";
cout<<endl;
cout<<" Sun"<<" Mon"<<" Tue"<<" Wed"<<" Thu"<<" Fri"<<" Sat"<<endl;
}

void printMonthName(int month){
cout<<setw(8)<<" ";
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;
default:

cout<<"Please enter 1-12";
break;
}
}

void printMonthBody(int year,int month){
int startDay=getStartDay(year,month);
int days=getDayofMonth(year,month);
int count=1;
int temp=startDay;
while (temp>0)
{
cout<<setw(4)<<" ";
temp--;
}
while (count<=days)
{
cout<<setw(4)<<count;
if((count+startDay)%7==0)
cout<<endl;
count++;
}
}

int getStartDay(int year,int month){
int startDay1901=2;
int totalDays=getTotalDay(year,month);
return (totalDays+startDay1901)%7;
}
int getTotalDay(int year,int month){
int total=0;

for(int i=1901;i<year;i++){
if(isLeapYear(i))
total+=366;
else
total+=365;
}
for(int i=1;i<month;i++)
total+=getDayofMonth(year,i);
return total;
}
int getDayofMonth(int year,int month){
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
return 31;
else if(month==2){
if(isLeapYear(year))
return 29;
else return 28;
}
else
return 30;
}

bool isLeapYear(int year){
if((year%4==0&&year%100!=0)||(year%400==0))
return true;
else
return false;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: