如何使下列结果对齐。。。

萌新瑟瑟发抖 发布于 2016/01/12 19:34
阅读 128
收藏 0
#include<iostream>
#include<iomanip>
#include<ctime>
#include<stdlib.h>
using namespace std;
int daysofmonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};




bool Isleap_year(int );//判断闰年 
int  get_days(int ,int ,int );//从1年1月1日到输入日一共有多少天
void printf_month(int ,int ,int );//打印月历
void search_day(int , int , int );//查找某一天


void printf_year()
{
system("cls");//清屏 
int sum,year,month;
int a[10],b[10];
cout<<"你想知道哪一年的年历呢?请输入:";
cin>>year;
cout<<"======================= The calender of year "<<year<<"========================"<<endl;
int i=1;
int j;
for(i=1;i<=12/3;i++)//每一行显示三个月的月历
{
cout<<"----------------------------------------------------------------------------"<<endl;
for(int h=1;h<=3;h++)
{
int m=3*(i-1)+h;
cout<<"        "<<m<<"月          ";//月份名
}
cout<<endl<<"-----------------------------------------------------------------------------"<<endl;
for( j=0;j<3;j++)
cout<<"日"<<" 一"<<" 二"<<" 三"<<" 四"<<" 五"<<" 六 "<<"  ";
cout<<endl;


for( j=0;j<3;j++)
{
month=3*(i-1)+j+1;
sum=get_days(year,month,1);
sum=sum%7;
for(int m=0;m<sum;m++)
cout<<"  ";
if(Isleap_year(year))
daysofmonth[2]=29;
b[j]=daysofmonth[month];
for(int k=1;k<8-sum;)
{
cout<<setw(2)<<setfill(' ')<<k<<" ";
k++;
a[j]=k;
}
cout<<"    ";
}
cout<<endl;
for(int w=1;w<=5;w++)
{
for(int j=0;j<3;j++)
{
  int m=1;
  for(m=1;m<=7;m++,a[j]++)
  {
  if(a[j]>b[j])
  break;
  cout<<setw(2)<<setfill(' ')<<a[j]<<" ";
  if(m==7)
  cout<<"  ";
  }
  for(int n=1;a[j]>b[j],n<=8-m;n++)
  cout<<"  ";
  if(a[j]>b[j]&&m!=8)
  cout<<"  ";
}
cout<<endl;
}
}
cout<<"================================================="<<endl;



}
int nowadays(int &y,int &m,int &d,int &h, int &min,int &sec)
{
    int sum;
    time_t t;
    time(&t);
    struct tm*local_time=localtime(&t);
sec=local_time->tm_sec;
min=local_time->tm_min;
h  =local_time->tm_hour;
d  =local_time->tm_mday;
m  =local_time->tm_mon+1;
y  =local_time->tm_year+1900;
sum =get_days(y,m,d);
return sum;

}
int main()
{
char menu;
int year,month,day=0;
for(;1;)
{
cout<<"=================== 菜单 menu ==================="<<endl;
cout<<"请做出如下选择:"<<endl;
cout<<"A.我想知道XXXX年的年历 "<<endl;
cout<<"B.我想知道XXXX年XX月的月历 " <<endl;
cout<<"C.我想知道XXXX年XX月XX日距离今天还有多少天 " <<endl;
cout<<"D.退出 "<<endl;
cout<<"================================================"<<endl; 
cin>>menu;
if(menu=='A')
printf_year();
 
else if(menu=='B')
{
cout<<"我想知道XXXX年XX月的月历"<<endl;
cin>>year>>month;
 
if(month>12)
  cout<<"没有"<<month<<"这个月份,请重新输入"<<endl;
  
  else printf_month(year,month,day);   
}
else if(menu=='C')
{
cout<<"我想知道XXXX年XX月XX日距离今天还有多少天"<<endl;
cin>>year>>month>>day;
 
if(month>12)
cout<<"没有"<<month<<"这个月份,请重新输入"<<endl;
 
else
  switch(month)
  {//四、六、九、十一月有三十天 
  case 4:
  case 6:
  case 9:
  case 11:
 {
  if(day>=1 && day<=30)
    search_day(year,month,day);
else 
cout<<"日期输入错误,请重新输入"<<endl; 
     }break;
  
   case 2: 
     {
     if(Isleap_year(year))
 {
   if(day>=1 && day<=29)
    search_day(year,month,day);
   else 
    cout<<"日期不存在,请重新输入"<<endl; 
       }
     else if(day>=1 && day <=28)
      search_day(year,month,day);
   
     else 
    cout<<"日期不存在,请重新输入"<<endl; 
        }break;
      
        default:
     {
        if(day>=1&& day<=31)
          search_day(year,month,day);
     
   else 
cout<<"日期不存在,请重新输入"<<endl;
     }
               }
   }
   else if(menu=='D')
   {
    cout<<"谢谢使用!"<<endl;
break; 
   }
   else
   cout<<"没有这个选项,请重新输入"<<endl; 
    }

bool Isleap_year(int year)//判断闰年 
{
if(year%400==0||(year%100!=0&&year%4==0))
return 1;

else
return 0;
}


int get_days(int year,int month,int day)//从1年1月1日到输入日一共有多少天 
{
int a,b=0;
for(a=1;a<year;a++)
{
if(Isleap_year(a))
b+=366;
else 
b+=365;
}
if(Isleap_year(year))
daysofmonth[2]=29;
 
for(a=1;a<month;a++)
  b+=daysofmonth[a];
   b+=day;
 return b;
}


void printf_month(int year,int month,int day)
{
system("cls");
int i,s;
s=get_days(year,month,1);
s=s%7;
cout<<"======================="<<year<<"年"<<month<<"月"<<"===================="<<endl;
cout<<"日\t一\t二\t三\t四\t五\t六\t";

if(s==6)
cout.put('\n');
for( i=0;i<s;++i)
cout<<'\t';
for(i=1;i<=daysofmonth[month];++i)
{
if(i==day)
cout<<"☆"<<i<<"\t";//\t为ASCII里的制表符
else 
cout<<i<<'\t';
if((i+s)%7==0)
cout<<'\n';
}
cout<<endl;
cout<<"===================================================="<<endl;
}


void search_day(int year,int month,int day)
{
system("cls");
int S,y,m,d,h,min,sec,s,sum;
s=get_days(year,month,day);
sum=s%7;
printf_month(year,month,day);
cout<<year<<"-"<<month<<"-"<<day<<"   是 ";
switch(sum)//星期几?
{
           case 0:cout<<"星期日"<<endl;break;
           case 1:cout<<"星期一"<<endl;break;
case 2:cout<<"星期二"<<endl;break;
case 3:cout<<"星期三"<<endl;break;
case 4:cout<<"星期四"<<endl;break;
case 5:cout<<"星期五"<<endl;break;
case 6:cout<<"星期六"<<endl;break;

}
switch(month)
{
case 1:switch(day)
  {
          case 1:cout<<"元旦节"<<endl;break;
          default:cout<<"不是阳历节日"<<endl;
  }break;


case 3:switch(day)
  {
         case 8:cout<<"妇女节"<<endl;break;
 case 12:cout<<"植树节"<<endl;break;
 default:cout<<"不是阳历节日"<<endl;
  }break;


case 4:switch(day)
  {
         case 5:cout<<"清明节"<<endl;break;
         default:cout<<"不是阳历节日"<<endl;
  }break;


case 5:switch(day)
  {
        case 1:cout<<"劳动节"<<endl;break;
case 4:cout<<"中国青年节"<<endl;break;
default:cout<<"不是阳历节日"<<endl;


  }break;


case 6:switch(day)
  {
       case 1:cout<<"儿童节"<<endl;break;
default:cout<<"不是阳历节日"<<endl;
  }break;


case 7:switch(day)
  {
          case 1:cout<<"中国共产党建立纪念日"<<endl;break;
  default:cout<<"不是阳历节日"<<endl;
  }break;


case 8:switch(day)
  {
        case 1:cout<<"建军节"<<endl;break;
default:cout<<"不是阳历节日"<<endl;
  }break;


case 9:switch(day)
  {
        case 3:cout<<"抗日战争胜利纪念日"<<endl;break;
        case 10:cout<<"教师节"<<endl;break;
             default:cout<<"不是阳历节日"<<endl;
  }break;


case 10:switch(day)
{
case 1:cout<<"国庆节"<<endl;break;
default:cout<<"不是阳历节日"<<endl;
}break;     
}
S=nowadays(y,m,d,h,min,sec);//计算从一年一月一日起现在一共有多少天,查找日距离今天有多天。
if(s>S)
cout<<"距今还有"<<s-S<<"天"<<endl;
else
cout<<"已经过去"<<S-s<<"天"<<endl;
}

加载中
1
wuyiw
wuyiw

1, 变量名尽量表达其意思, 不然揣摩变量意思的时间比debug时间还多...

2, 程序的思路没错, 空格数量错了导致不对齐, 有些地方需要3个空格只输出2个, 有些则相反, 你可以把空格换成'*'方便观察, 一步一步跟踪输出, 很快能修正.(更细致一点, 可以把不同地方的空格换成!@#$%^&*这些不同符号)

3, 红线处是一个小bug, 判断闰年那里少了个else

0
萌新瑟瑟发抖
萌新瑟瑟发抖


如图有些数字没有对齐偏了。。。不知道哪里错了。。。

0
萌新瑟瑟发抖
萌新瑟瑟发抖
大概只需要改printf_year()这个函数。。。所以不用全部看完的。。。。
0
萌新瑟瑟发抖
萌新瑟瑟发抖

引用来自“wuyiw”的评论

1, 变量名尽量表达其意思, 不然揣摩变量意思的时间比debug时间还多...

2, 程序的思路没错, 空格数量错了导致不对齐, 有些地方需要3个空格只输出2个, 有些则相反, 你可以把空格换成'*'方便观察, 一步一步跟踪输出, 很快能修正.(更细致一点, 可以把不同地方的空格换成!@#$%^&*这些不同符号)

3, 红线处是一个小bug, 判断闰年那里少了个else

非常感谢!!!!

对齐了!!!


处女座真的好满足!!!!

返回顶部
顶部