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;
}
打印日历#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;
}
相关文章推荐
- C++程序设计
- C++程序设计(第四章)
- 2011年 C++程序设计
- 2011年 C++程序设计
- 2012C++程序设计实验报告【6.2】
- C++程序设计报告(12-1)
- C++程序设计实验报告(七十八)---第十五周任务三(3-2)
- 《C++程序设计》笔记之-运算符重载
- C++程序设计(4)之函数与预处理
- 基础复习C++程序设计
- 我的谭浩强版《c++程序设计》习题答案参考(新近添加第六章指针,将继续)
- C++程序设计
- 2011年 C++程序设计
- 2011年 C++程序设计
- C++程序设计教学材料-2011级
- c++程序设计报告(12-3)
- c++程序设计实验报告(15-1)
- 《c++程序设计》by Y.Daniel Liang
- C++程序设计(7)之自定义数据类型
- C++程序设计(第三版)谭浩强 二章习题