用c++编写的万年历格式输出的有关问题,求解决啊都搞了好几天了
用c++编写的万年历格式输出的问题,求解决啊,都搞了好几天了
这种事居中输出的
------解决方案--------------------
#include <iostream>
#include <iomanip>
using namespace std;
char* weekd[7]={"日","一","二","三","四","五","六"};
bool Isrunnian(int n)
{
if(n%400==0||(n%4==0&&n%100!=0))
return true;
else
return false;
}
int weekday(int a)
{
int n=(a+(a-1)/4-(a-1)/100+(a-1)/400)%7;//计算a年元旦为星期n
return n+1;
}
int monthday(int i) //这里是返回月有几天的,i是月份
{
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
return 31; //如果是1,2,5,7,8,10,12月,则返回是31天
else if (i==2) //判断2月
if(Isrunnian(i)) //当返回1时就是闰年,则为29天
return 29;
else return 28; //否则为28天
else
return 30; //其他的月份为30天
}
void show1(int a)
{
int i,j;
int n=weekday(a);
for(i=1;i<=12;i++)
{
cout<<" ";
int lemp=1;
cout<<setw(16)<<i<<"月份";
cout<<endl;
cout<<" ";
for (j=0;j<7;j++)
cout<<setw(5)<<weekd[j];
cout<<endl;
cout<<" ";
for(int k=1;k<n;k++,lemp++) //输入每月第一天的起始位置,用空格补充
cout<<setw(5)<<" "; //就是如果是星期四,则前面有3个空格,1从星期四的位置出现
for(int d=1;d<=monthday(i);d++,lemp++) //循环输出每个月的日子
{
cout<<setw(5)<<d; //d就是日子
if(lemp==7) //控制一行输出到星期天,如果到星期天则重新计数
{
cout<<endl; //是星期六的话刚输出一个换行
cout<<" ";
lemp=0; //让临时记录星期的变量为0,以备下次使用
}
}
n=lemp%7; //当输出完一个月后,记录这个月的最后一天在哪,寻找下个月的
if(n==0) //第一天的起始位置
n=7;//就是当n为0的时候,是周日,令n为7
cout<<endl;
}
}
这种事居中输出的
c++
万年历
------解决方案--------------------
#include <iostream>
#include <iomanip>
using namespace std;
char* week_name="日 一 二 三 四 五 六";
bool Isrunnian(int n)
{
if(n%400==0
------解决方案--------------------
(n%4==0&&n%100!=0))
return true;
else
return false;
}
int weekday(int a)
{
int n=(a+(a-1)/4-(a-1)/100+(a-1)/400)%7;//计算a年元旦为星期n
return n+1;
}
int monthday(int i) //这里是返回月有几天的,i是月份
{
if(i==1
------解决方案--------------------
i==3
------解决方案--------------------
i==5
------解决方案--------------------
i==7
------解决方案--------------------
i==8
------解决方案--------------------
i==10
------解决方案--------------------
i==12)
return 31; //如果是1,2,5,7,8,10,12月,则返回是31天
else if (i==2) //判断2月
if(Isrunnian(i)) //当返回1时就是闰年,则为29天
return 29;
else return 28; //否则为28天
else
return 30; //其他的月份为30天
}
#define FIELD_WIDTH 5
#define LINE_WIDTH (FIELD_WIDTH*7)
#define LINE_NUMBER 8
typedef char month_map_t[LINE_NUMBER][LINE_WIDTH+1];
month_map_t calender[12];
void compose_calender(int a)
{
int i,j;
int n=weekday(a);
memset(calender, ' ', sizeof(calender));
for(i=1;i<=12;i++)
{
month_map_t *p_month_map = &calender[i-1];
sprintf(&(*p_month_map)[0][11], "%2d月份", i);
(*p_month_map)[0][strlen((*p_month_map)[0])] = ' ';
strcpy((*p_month_map)[1], week_name);