永发信息网

C++ 万年历这程序怎么改?

答案:2  悬赏:0  手机版
解决时间 2021-05-08 12:39

#include <iostream.h>
#include <iomanip.h>
#include <stdio.h>
char* weekd[7]={"SUN","MON","TUE","WEN","THU","FRI","STA"};
int year;
int l,c;
int day[13][3];
int i,j,k,t;
int getyear()
{
cout<<"请输入你想要查询的年份:";
cin>>year;
return year;
} //判断是否为闰年。
int ioleapyear()
{
if(year%4==0&&year%100!=0||year%400==0)
return 1;
else return 0;
}
int weekday(int b) //计算每年第一天是星期几。
{
return ((b-1)+(b-1)/4-(b-1)/100+(b-1)/400+1)%7;
}

int monthday(int i) //计算每个月多少天。
{
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) return 31;
else if (i==2)
if(ioleapyear()) return 29;
else return 28;
else return 30;
}

void putout(){
cout<<"你要输入几行几列(请让行与列相乘为12):";
cin>>l>>c;
day[1][0]=weekday(year);
day[1][1]=1;
day[1][2]=31;
for(i=2;i<=12;i++){
day[i][0]=( day[i-1][0]+monthday(i-1) )%7;
day[i][1]=1;
day[i][2]=monthday(i);
}
for(i=0;i<l;i++){
for(int j=0;j<c;j++){
if(j)cout<<" ";
cout<<"----------"<<i*c+j+1<<"----------";
}
cout<<endl;
for(j=0;j<c;j++){
if(j)cout<<" ";
cout<<"日 一 二 三 四 五 六";
}
cout<<endl;
for(k=0;k<6;k++){
for(j=0;j<c;j++){
if(k!=0)day[i*c+j+1][0]=0;
if(j)cout<<" ";
for(t=1;t<day[i*c+j+1][0];t++)cout<<" ";
while(day[i*c+j+1][0]!=7&&day[i*c+j+1][1]<=day[i*c+j+1][2]){
printf("%2d ",day[i*c+j+1][1]);
day[i*c+j+1][0]++;
day[i*c+j+1][1]++;
}
if(day[i*c+j+1][1]>day[i*c+j+1][2])
for(t=day[i*c+j+1][0];t<7;t++)cout<<" ";
}
cout<<endl;
}
}
}
int main(){
getyear();
putout();
getchar();
return 0;
}

怎么改能使日期对齐??

最佳答案

日期没有与星期对齐, 在输出日期时先输出2*weekday(year)个空格;

全部回答

#include <iostream.h> #include <iomanip.h> #include <stdio.h> class Data //声明一个类Data { private: //私有部分,关于这个的特点,自己看书去 int year; //私有变量,同上 public: //公有变量,特点看书去 void getyear(); //提示用户输入想要查询的年份 int ioleapyear(); //判断该年是不是闰年 int weekday(); //判断该年的元旦是星期几 int monthday(int i); //该年每个月的天数 void disp(); //显示结果。 }; char* weekd[7]={"MON","TUE","WEN","THU","FRI","STA","SUN"}; //记录星期一到星期天 void Data::getyear() { cout<<"请输入你想要查询的年份:"; //cout是输出 cin>>year; //cin是输入一个值到变量 } int Data::ioleapyear() //判断闰年和平年,闰年返回1,平年返回0 { if(year%4==0&&year%100!=0||year%400==0) //计算闰年和平年的方法 //四位年份能被4整除但不能被100整除,或能被400整除 return 1; else return 0; } int Data::weekday() { int n=year-1900; //已知1900年的元旦刚好是星期一

n=n+(n-1)/4+1; // 判断,以每年52个整星期计算year年比1900年多出来的天数 //多出来的天数除以7的余数就是这年第一天是星期几 n=n%7; //%就是取余的意思 if(n==0) //当n=0的时候是周日,使它返回7 return 7; //返回输入的年份的元旦是星期几 else return n; //n不是0的时候反正n的值就是星期几 } int Data::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(ioleapyear()) //当ioleapyear()返回1时就是闰年,则为29天,ioleapyear()是一个函数,调用的一个函数 return 29; else return 28; //否则为28天 else return 30; //其他的月份为30天 } void Data::disp() //这个是显示函数 { int i; //这个是月的记录变量 int n=weekday(); //这也是调用了一个函数,用n记录当年的元旦是星期几 for(i=1;i<=12;i++) //总共的月份 12 ,用循环来实现显示12个月 { int lemp=1; cout<<endl<<setw(5)<<i<<"月份"<<endl; //这个是显示月份的 //setw()是iomanip.h里的函数,只要在开头写上#include <iomanip.h> 就可以用了 //作用是设置宽度,就是i显示出来的宽度,这个是为了好看,当然你可以用空格什么的代替 cout<<"-------------------------------------------"<<endl; //endl是换行的意思,这句就是输出了一行横线 for(int j=0;j<7;j++) //循环显示星期上的字,就是mon,tue等等 cout<<setw(5)<<weekd[j]; cout<<endl<<"-------------------------------------------"<<endl; 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; //是星期天的话刚输出一个换行 lemp=0; //让临时记录星期的变量为0,以备下次使用 } } n=lemp%7; //当输出完一个月后,记录这个月的最后一天在哪,寻找下个月的 if(n==0) //第一天的起始位置 n=7; //就是当n为0的时候,是周日,令n为7 cout<<endl<<"-------------------------------------------"<<endl<<endl<<endl; }

} int main() { Data a; //创建一个对象a cout<<setw(45)<<"万年历查询"<<endl; cout<<"-------------------------------------------------------------------------------" <<endl; a.getyear(); //调用对象a里的函数,这个就管输入一个年份 a.disp(); //调用对象a的另一个函数,显示日历 return 0; }

自己对照着看一下,这是用类定义做的,你的也可以看一下,对修改你自己的程序应该有所帮助

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我的手机为什么别人打电话给我的时候,我听到
手机怎样下载微信软件,我怎样才能用手机下载
6120怎样设置短信密码
北大青岛昌平校区的具体地址在哪阿
我送戒指时显示她不是我的好友
地下城好玩吗…
金秋农资在什么地方啊,我要过去处理事情
关于学会合作的古训
侠盗飞车5圣安地列斯右上角
要长高的人但又怕肥的应该吃哪些东西?
《我爱你但是我说不出口》这首歌叫什么啊?
椒江海门派出所在什么位置?
QQ三国8级红色晶玉改出的项链和戒指是什么属
起凡关于PT的高手用法
这道题是判断题:因为9除以7=9比7,所以21除以7
推荐资讯
敬业名人名言大全摘抄,引用了哪些古人的名言
青岛市北区比较好的牙科医院,价格要公道哪里
国产手机天语A908价位?
介绍下DNF的时装打孔系统。据说下一章会出
怎样去除动态图片多余的帧数?
为什么我的QQ会员和红砖黄砖到2070年才到期?
今天怎么腾讯什么都要输入验证码
明天快男…谁有可能被淘汰?
那些办法能去黑头要有效果的
喜来喜商务宾馆-餐厅地址有知道的么?有点事
座右铭的意思是什么,座右铭是什么意思
肚子饿吃什么?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?