万年历-更新详细程序代码
C语言万年历代码
题目:年历显示。
功能要求:(1)输入一个年份,输出是在屏幕上显示该年的日历。
假定输入的年份在1940-2040年之间。
(2)输入年月,输出该月的日历。
(3)输入年月日,输出距今天还有多少天,星期几,是否是公历节日。
如下图:以下部分为代码:#include<stdio.h>#include<math.h>void part1(int x); //函数1~6为打印日历的函数void part2(int x);void part3(int x);void part4(int x);void part5(int x);void part6(int x);int weak(int x,int y); //计算1号对应的星期int weak2(int x,int y,int z); //计算星期,为函数day提供数据int year(int x); //打印日历的函数int mouth(int x); //打印月历的函数int day(int x); //查询天数的函数int distance(int x,int y,int z); //提供距离天数查询int main(){int a;char z;printf("****************************************************************\n");printf(" * *\n");printf(" * *\n");printf(" * *\n");printf(" * 欢迎使用万年历!*\n");printf(" * *\n");printf(" * *\n");printf(" * 开发:杨润*\n");printf("****************************************************************\n");x: //位置标注printf("\n");printf("请输入一个日期(Ex:20150302或201503或2015):");scanf("%d",&a);printf("\n");if((1940<=a)&&(a<=2040)){year(a);}else if((194001<=a)&&(a<=204012)){mouth(a);}else if((19400101<=a)&&(a<=20401231)){day(a);}else{printf("输入错误,请重新输入!");goto x;}printf("\n");printf("\n");printf("继续查询(y),退出(n):");scanf("%s",&z);if(z=='y'){goto x;}else{;}return 0;}int year(int x){printf("-------------------------------%d年的年历----------------------------\n",x);printf("\n");part1(x); //调用第一部分函数part2(x);part3(x);part4(x);part5(x);part6(x);printf("-----------------------------------------------------------------------\n");return 0;}int mouth(int x){int i,n,y,y2,w,week,yue2,bz1; //n表示年份,y表示月份,w,y2均为临时变量,yue2表示2月份天数n=(int)(x/100);y=(int)(x%100);printf("您现在查询的是%d年%d月\n",n,y);printf(" \n");if(y==1) //1月的情况{printf("1月Sun Mon Tue Wed Thu Fri Sat\n");printf(" ");if(n<2000) //计算小于两千的1.1星期{y2=(n-1)%100; //y2 w=(int)(y2+(y2/4)+(19/4)-38+(26*1.4));week=w%7;}if(n>=2000) //计算大于两千的1.1星期{ y2=(n-1)%100;w=(int)(y2+(y2/4)+(20/4)-40+(26*1.4));week=w%7;}for(i=0;i<week;i++){printf(" ");}bz1=1;for(i=0;i<(7-week);i++) //第一行的一月份{if(bz1<10){printf(" %d ",bz1);}bz1=bz1+1;}printf("\n");printf(" "); //第二行的1月份for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf("\n");printf(" "); //第三行的1月份for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf("\n");printf(" "); //第四行的1月份for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf("\n");printf(" "); //第五行的1月份for(i=0;i<7;i++){if(bz1<=31){printf(" %d ",bz1);}if(bz1>31){printf(" ");}bz1=bz1+1;}printf("\n");printf(" "); //第六行的1月份for(i=0;i<7;i++){if(bz1<=31){printf(" %d ",bz1);}if(bz1>31){printf(" ");}bz1=bz1+1;}printf("\n");}if(y==2) //2月的情况{if(n%4==0){if(n%100!=0)yue2=29;else if(n%100==0&&n%400==0)yue2=29;elseyue2=28;}else{yue2=28;}printf("2月Sun Mon Tue Wed Thu Fri Sat\n");printf(" ");if(n<2000) //计算小于两千的2.1星期{y2=(n-1)%100; //y2w=(int)(y2+(y2/4)+(19/4)-38+(26*1.5));week=w%7;}if(n>=2000) //计算大于两千的2.1星期{ y2=(n-1)%100;w=(int)(y2+(y2/4)+(20/4)-40+(26*1.5));week=w%7;}for(i=0;i<week;i++){printf(" ");}bz1=1;for(i=0;i<(7-week);i++) //第一行的2月份{if(bz1<10){printf(" %d ",bz1);}bz1=bz1+1;}printf("\n");printf(" "); //第二行的2月份for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf("\n");printf(" "); //第三行的2月份for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf("\n");printf(" "); //第四行的2月份for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf("\n");printf(" "); //第五行的2月份for(i=0;i<7;i++){if(bz1<=yue2){printf(" %d ",bz1);}if(bz1>yue2){printf(" ");}bz1=bz1+1;}printf("\n");printf(" "); //第六行的2月份for(i=0;i<7;i++){if(bz1<=yue2){printf(" %d ",bz1);}if(bz1=yue2){printf(" ");}bz1=bz1+1;}printf("\n");}//2月情况判断完毕if((y==3)||(y==5)||(y==7)||(y==8)||(y==10)||(y==12)) //31天的情况(3、5、7、8、10、12月){printf("%d月Sun Mon Tue Wed Thu Fri Sat\n",y);printf(" ");week=weak(n,y);for(i=0;i<week;i++) //第一行{printf(" ");}bz1=1;for(i=0;i<(7-week);i++){if(bz1<10){printf(" %d ",bz1);}bz1=bz1+1;}printf("\n");printf(" "); //第二行for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf("\n");printf(" "); //第三行for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf("\n");printf(" "); //第四行for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf("\n");printf(" "); //第五行for(i=0;i<7;i++){if(bz1<=31){printf(" %d ",bz1);}if(bz1>31){printf(" ");}bz1=bz1+1;}printf("\n");printf(" "); //第六行for(i=0;i<7;i++){if(bz1<=31){printf(" %d ",bz1);}if(bz1>31){printf(" ");}bz1=bz1+1;}printf("\n");}if((y==4)||(y==6)||(y==9)||(y==11)) //30天的情况(4、6、9、11月){printf("%d月Sun Mon Tue Wed Thu Fri Sat\n",y);printf(" ");week=weak(n,y);for(i=0;i<week;i++) //第一行{printf(" ");}bz1=1;for(i=0;i<(7-week);i++){if(bz1<10){printf(" %d ",bz1);}bz1=bz1+1;}printf("\n");printf(" "); //第二行for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf("\n");printf(" "); //第三行for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf("\n");printf(" "); //第四行for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf("\n");printf(" "); //第五行for(i=0;i<7;i++){if(bz1<=30){printf(" %d ",bz1);}if(bz1>30){printf(" ");}bz1=bz1+1;}printf("\n");printf(" "); //第六行for(i=0;i<7;i++){if(bz1<=30){printf(" %d ",bz1);}if(bz1>30){printf(" ");}bz1=bz1+1;}printf("\n");}return 0;}int day(int x){int n,y,y1,t,week; //n为年,y为yue,y1位计算y的临时变量,t为天,week为周,p为距离今天天数n=x/10000;y1=x%10000;y=y1/100;t=x%100;printf("\n");printf("您查询的是:%d年%d月%d日",n,y,t);week=weak2(n,y,t);switch(week) //根据返回数值判断星期{case 0:printf("星期日");break;case 1:printf("星期一");break;case 2:printf("星期二");break;case 3:printf("星期三");break;case 4:printf("星期四");break;case 5:printf("星期五");break;case 6:printf("星期六");break;}if(y==1&&t==1) printf("这天是元旦"); //查询节日if(y==2&&t==2) printf("这天是世界湿地日");if(y==2&&t==14) printf("这天是情人节");if(y==3&&t==3) printf("这天是全国爱耳日");if(y==3&&t==5) printf("这天是青年志愿者服务日");if(y==3&&t==8) printf("这天是国际妇女节");if(y==3&&t==9) printf("这天是保护母亲河日");if(y==3&&t==12) printf("这天是中国植树节");if(y==3&&t==14) printf("这天是白色情人节\n");if(y==3&&t==14) printf("这天是国际警察日");if(y==3&&t==15) printf("这天是世界消费者权益日");if(y==3&&t==21) printf("这天是世界森林日\n");if(y==3&&t==21) printf("这天是世界睡眠日");if(y==3&&t==22) printf("这天是世界水日");if(y==3&&t==23) printf("这天是世界气象日");if(y==3&&t==24) printf("这天是世界防治结核病日");if(y==4&&t==1) printf("这天是愚人节");if(y==4&&t==5) printf("这天是清明节");if(y==4&&t==7) printf("这天是世界卫生日");if(y==4&&t==22) printf("这天是世界地球日");if(y==4&&t==26) printf("这天是世界知识产权日");if(y==5&&t==1) printf("这天是国际劳动节");if(y==5&&t==3) printf("这天是世界哮喘日");if(y==5&&t==4) printf("这天是中国青年节");if(y==5&&t==8) printf("这天是世界红十字日");if(y==5&&t==12) printf("这天是国际护士节");if(y==5&&t==15) printf("这天是国际家庭日");if(y==5&&t==17) printf("这天是世界电信日");if(y==5&&t==20) printf("这天是全国学生营养日");if(y==5&&t==23) printf("这天是国际牛奶日");if(y==5&&t==31) printf("这天是世界无烟日");if(y==6&&t==1) printf("这天是国际儿童节");if(y==6&&t==5) printf("这天是世界环境日");if(y==6&&t==6) printf("这天是全国爱眼日");if(y==6&&t==17) printf("这天是世界防治荒漠化和干旱日"); if(y==6&&t==23) printf("这天是国际奥林匹克日");if(y==6&&t==25) printf("这天是全国土地日");if(y==6&&t==26) printf("这天是国际禁毒日");if(y==7&&t==1) printf("这天是中国共产党诞生日\n");if(y==7&&t==1) printf("这天是国际建筑日");if(y==7&&t==7) printf("这天是中国人民抗日战争纪念日"); if(y==7&&t==11) printf("这天是世界人口日");if(y==8&&t==1) printf("这天是中国人民解放军建军节");if(y==8&&t==12) printf("这天是国际青年节");if(y==9&&t==8) printf("这天是国际扫盲日");if(y==9&&t==10) printf("这天是中国教师节");if(y==9&&t==16) printf("这天是中国脑健康日\n");if(y==9&&t==16) printf("这天是国际臭氧层保护日");if(y==9&&t==20) printf("这天是全国爱牙日");if(y==9&&t==21) printf("这天是世界停火日");if(y==9&&t==27) printf("这天是世界旅游日");if(y==10&&t==1) printf("这天是中华人民共和国国庆节\n");if(y==10&&t==1) printf("这天是国际音乐日\n");if(y==10&&t==1) printf("这天是国际老年人日");if(y==10&&t==4) printf("这天是世界动物日");if(y==10&&t==5) printf("这天是世界教师日");if(y==10&&t==8) printf("这天是全国高血压日");if(y==10&&t==9) printf("这天是世界邮政日");if(y==10&&t==10) printf("这天是世界精神卫生日");if(y==10&&t==14) printf("这天是世界标准日");if(y==10&&t==15) printf("这天是国际盲人节\n");if(y==10&&t==15) printf("这天是世界农村妇女日");if(y==10&&t==16) printf("这天是世界粮食日");if(y==10&&t==17) printf("这天是国际消除贫困日");if(y==10&&t==24) printf("这天是联合国日\n");if(y==10&&t==24) printf("这天是世界发展新闻日");if(y==10&&t==28) printf("这天是中国男性健康日");if(y==10&&t==29) printf("这天是国际生物多样性日");if(y==10&&t==31) printf("这天是万圣节");if(y==11&&t==8) printf("这天是中国记者节");if(y==11&&t==9) printf("这天是消防宣传日");if(y==11&&t==14) printf("这天是世界糖尿病日");if(y==11&&t==17) printf("这天是国际大学生节");if(y==11&&t==25) printf("这天是国际消除对妇女的暴力日");if(y==12&&t==1) printf("这天是世界爱滋病日");if(y==12&&t==3) printf("这天是世界残疾人日");if(y==12&&t==4) printf("这天是全国法制宣传日");if(y==12&&t==9) printf("这天是世界足球日");if(y==12&&t==25) printf("这天是圣诞节");if(y==12&&t==29) printf("这天是国际生物多样性日");printf("\n");distance(n,y,t);return 0;}//计算今天日期的函数结尾void part1(int x) //第一部分{int i,week,week2,y,w,b1,bz1,bz2;//week,week2用于计算1.1的星期,bz1和bz2为日期的递增b1=7;printf("1月Sun Mon Tue Wed Thu Fri Sat");printf(" ");printf("7月Sun Mon Tue Wed Thu Fri Sat\n");printf(" ");if(x<2000) //计算小于两千的1.1星期{ y=(x-1)%100;w=(int)(y+(y/4)+(19/4)-38+(26*1.4));week=w%7;}if(x>=2000) //计算大于两千的1.1星期{ y=(x-1)%100;w=(int)(y+(y/4)+(20/4)-40+(26*1.4));week=w%7;}week2=weak(x,b1); //调用计算星期的函数(7.1) for(i=0;i<week;i++){printf(" ");}bz1=1,bz2=1;for(i=0;i<(7-week);i++){if(bz1<10){printf(" %d ",bz1);}bz1=bz1+1;}printf(" "); //从这里开始打印7月的for(i=0;i<=week2;i++){printf(" ");}for(i=0;i<(7-week2);i++){if(bz2<10){printf(" %d ",bz2);}bz2=bz2+1;}printf("\n"); //第一行打印完毕printf(" "); //第二行的1月份for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf(" "); //从这里开始打印7月的第二行for(i=0;i<7;i++){if(bz2<10){printf(" %d ",bz2);}if(bz2>=10){printf(" %d ",bz2);}bz2=bz2+1;}printf("\n"); //第二行打印结束printf(" "); //第三行的1月份for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf(" "); //从这里开始打印7月的第三行for(i=0;i<7;i++){ if(bz2<10){printf(" %d ",bz2);}if(bz2>=10){printf(" %d ",bz2);}bz2=bz2+1;}printf("\n"); //第三行打印结束printf(" "); //第四行的1月份for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf(" "); //从这里开始打印7月的第四行for(i=0;i<7;i++){if(bz2<10){printf(" %d ",bz2);}if(bz2>=10){printf(" %d ",bz2);}bz2=bz2+1;}printf("\n"); //第四行打印结束printf(" "); //第五行的1月份for(i=0;i<7;i++){if(bz1<=31){printf(" %d ",bz1);}if(bz1>31){printf(" ");}bz1=bz1+1;}printf(" "); //从这里开始打印7月的第五行for(i=0;i<7;i++){if(bz2<=31){printf(" %d ",bz2);}if(bz2>31){printf(" ");}bz2=bz2+1;}printf("\n"); //第五行打印结束printf(" "); //第六行的1月份for(i=0;i<7;i++){if(bz1<=31){printf(" %d ",bz1);}if(bz1>31){printf(" ");}bz1=bz1+1;}printf(" "); //从这里开始打印7月的第六行for(i=0;i<7;i++){if(bz2<=31){printf(" %d ",bz2);}if(bz2>31){printf(" ");}bz2=bz2+1;}printf("\n"); //第六行打印结束} //第一部分1月、7月打印完毕!void part2(int x) //第二部分2月、8月开始打印!//第二部分{int i,week,week2,y,w,b1,bz1,bz2,yue2;//week,week2用于计算2.1的星期,bz1和bz2为日期的递增b1=8; //表示当前部分的月份printf("2月Sun Mon Tue Wed Thu Fri Sat");printf(" ");printf("8月Sun Mon Tue Wed Thu Fri Sat\n");printf(" ");if(x%4==0){if(x%100!=0)yue2=29;else if(x%100==0&&x%400==0)yue2=29;elseyue2=28;}else{yue2=28;}if(x<2000) //计算小于两千的1.1星期{ y=(x-1)%100;w=(int)(y+(y/4)+(19/4)-38+(26*1.5));week=w%7;}if(x>=2000) //计算大于两千的1.1星期{ y=(x-1)%100;w=(int)(y+(y/4)+(20/4)-40+(26*1.5));week=w%7;}week2=weak(x,b1); //调用计算星期的函数(7.1) for(i=0;i<week;i++){printf(" ");}bz1=1,bz2=1;for(i=0;i<(7-week);i++){if(bz1<10){printf(" %d ",bz1);}bz1=bz1+1;}printf(" "); //从这里开始打印8月的第一行for(i=0;i<=week2;i++){printf(" ");}for(i=0;i<(7-week2);i++){if(bz2<10){printf(" %d ",bz2);}bz2=bz2+1;}printf("\n"); //第一行打印完毕printf(" "); //2月份的第二行for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf(" "); //从这里开始打印8月的第二行for(i=0;i<7;i++){if(bz2<10){printf(" %d ",bz2);}if(bz2>=10){printf(" %d ",bz2);}bz2=bz2+1;}printf("\n"); //第二行打印结束printf(" "); //第三行的2月份for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf(" "); //从这里开始打印8月的第三行for(i=0;i<7;i++){ if(bz2<10){printf(" %d ",bz2);}if(bz2>=10){printf(" %d ",bz2);}bz2=bz2+1;}printf("\n"); //第三行打印结束printf(" "); //第四行的2月份for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf(" "); //从这里开始打印8月的第四行for(i=0;i<7;i++){if(bz2<10){printf(" %d ",bz2);}if(bz2>=10){printf(" %d ",bz2);}bz2=bz2+1;}printf("\n"); //第四行打印结束printf(" "); //第五行的2月份for(i=0;i<7;i++){if(bz1<=yue2){printf(" %d ",bz1);}if(bz1>yue2){printf(" ");}bz1=bz1+1;}printf(" "); //从这里开始打印8月的第五行for(i=0;i<7;i++){if(bz2<=31){printf(" %d ",bz2);}if(bz2>31){printf(" ");}bz2=bz2+1;}printf("\n"); //第五行打印结束printf(" "); //第六行的2月份for(i=0;i<7;i++){if(bz1<=yue2){printf(" %d ",bz1);}if(bz1>yue2){printf(" ");}bz1=bz1+1;}printf(" "); //从这里开始打印8月的第六行for(i=0;i<7;i++){if(bz2<=31){printf(" %d ",bz2);}if(bz2>31){printf(" ");}bz2=bz2+1;}printf("\n"); //第六行打印结束}void part3(int x) //第三部分{int i,week,week2,a1,b1,bz1,bz2;//week,week2用于计算1.1的星期,bz1和bz2为日期的递增a1=3,b1=9; //表示当前不封的月份printf("3月Sun Mon Tue Wed Thu Fri Sat");printf(" ");printf("9月Sun Mon Tue Wed Thu Fri Sat\n");printf(" ");week=weak(x,a1); //调用计算星期的函数(3.1)week2=weak(x,b1); //调用计算星期的函数(8.1)for(i=0;i<week;i++){printf(" ");}bz1=1,bz2=1;for(i=0;i<(7-week);i++){if(bz1<10){printf(" %d ",bz1);}bz1=bz1+1;}printf(" "); //从这里开始打印9月的for(i=0;i<=week2;i++){printf(" ");}for(i=0;i<(7-week2);i++){if(bz2<10){printf(" %d ",bz2);}bz2=bz2+1;}printf("\n"); //第一行打印完毕printf(" "); //第二行的3月份for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf(" "); //从这里开始打印9月的第二行for(i=0;i<7;i++){if(bz2<10){printf(" %d ",bz2);}if(bz2>=10){printf(" %d ",bz2);}bz2=bz2+1;}printf("\n"); //第二行打印结束printf(" "); //第三行的3月份for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf(" "); //从这里开始打印9月的第三行for(i=0;i<7;i++){ if(bz2<10){printf(" %d ",bz2);}if(bz2>=10){printf(" %d ",bz2);}bz2=bz2+1;}printf("\n"); //第三行打印结束printf(" "); //第四行的3月份for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf(" "); //从这里开始打印9月的第四行for(i=0;i<7;i++){if(bz2<10){printf(" %d ",bz2);}if(bz2>=10){printf(" %d ",bz2);}bz2=bz2+1;}printf("\n"); //第四行打印结束printf(" "); //第五行的3月份for(i=0;i<7;i++){if(bz1<=31){printf(" %d ",bz1);}if(bz1>31){printf(" ");}bz1=bz1+1;}printf(" "); //从这里开始打印9月的第五行for(i=0;i<7;i++){if(bz2<=30){printf(" %d ",bz2);}if(bz2>30){printf(" ");}bz2=bz2+1;}printf("\n"); //第五行打印结束printf(" "); //第六行的3月份for(i=0;i<7;i++){if(bz1<=31){printf(" %d ",bz1);}if(bz1>31){printf(" ");}bz1=bz1+1;}printf(" "); //从这里开始打印9月的第六行for(i=0;i<7;i++){if(bz2<=30){printf(" %d ",bz2);}if(bz2>30){printf(" ");}bz2=bz2+1;}printf("\n"); //第六行打印结束}void part4(int x) //第四部分{int i,week,week2,a1,b1,bz1,bz2;//week,week2用于计算1.1的星期,bz1和bz2为日期的递增a1=4,b1=10; //表示当前不封的月份printf("4月Sun Mon Tue Wed Thu Fri Sat");printf(" ");printf("10月Sun Mon Tue Wed Thu Fri Sat\n");printf(" ");week=weak(x,a1); //调用计算星期的函数(4.1)week2=weak(x,b1); //调用计算星期的函数(10.1)for(i=0;i<week;i++){printf(" ");}bz1=1,bz2=1;for(i=0;i<(7-week);i++){if(bz1<10){printf(" %d ",bz1);}bz1=bz1+1;}printf(" "); //从这里开始打印4月的for(i=0;i<=week2;i++){printf(" ");}for(i=0;i<(7-week2);i++){if(bz2<10){printf(" %d ",bz2);}bz2=bz2+1;}printf("\n"); //第一行打印完毕printf(" "); //第二行的4月份for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf(" "); //从这里开始打印10月的第二行for(i=0;i<7;i++){if(bz2<10){printf(" %d ",bz2);}if(bz2>=10){printf(" %d ",bz2);}bz2=bz2+1;}printf("\n"); //第二行打印结束printf(" "); //第三行的4月份for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf(" "); //从这里开始打印10月的第三行for(i=0;i<7;i++){ if(bz2<10){printf(" %d ",bz2);}if(bz2>=10){printf(" %d ",bz2);}bz2=bz2+1;}printf("\n"); //第三行打印结束printf(" "); //第四行的4月份for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf(" "); //从这里开始打印10月的第四行for(i=0;i<7;i++){if(bz2<10){printf(" %d ",bz2);}if(bz2>=10){printf(" %d ",bz2);}bz2=bz2+1;}printf("\n"); //第四行打印结束printf(" "); //第五行的10月份for(i=0;i<7;i++){if(bz1<=30){printf(" %d ",bz1);}if(bz1>30){printf(" ");}bz1=bz1+1;}printf(" "); //从这里开始打印10月的第五行for(i=0;i<7;i++){if(bz2<=31){printf(" %d ",bz2);}if(bz2>31){printf(" ");}bz2=bz2+1;}printf("\n"); //第五行打印结束printf(" "); //第六行的4月份for(i=0;i<7;i++){if(bz1<=30){printf(" %d ",bz1);}if(bz1>30){printf(" ");}bz1=bz1+1;}printf(" "); //从这里开始打印10月的第六行for(i=0;i<7;i++){if(bz2<=31){printf(" %d ",bz2);}if(bz2>31){printf(" ");}bz2=bz2+1;}printf("\n"); //第六行打印结束}void part5(int x) //第五部分{int i,week,week2,a1,b1,bz1,bz2;//week,week2用于计算1.1的星期,bz1和bz2为日期的递增a1=5,b1=11; //表示当前不封的月份printf("5月Sun Mon Tue Wed Thu Fri Sat");printf(" ");printf("11月Sun Mon Tue Wed Thu Fri Sat\n");printf(" ");week=weak(x,a1);week2=weak(x,b1); //调用计算星期的函数(11.1)for(i=0;i<week;i++){printf(" ");}bz1=1,bz2=1;for(i=0;i<(7-week);i++){if(bz1<10){printf(" %d ",bz1);}bz1=bz1+1;}printf(" "); //从这里开始打印11月的for(i=0;i<=week2;i++){printf(" ");}for(i=0;i<(7-week2);i++){if(bz2<10){printf(" %d ",bz2);}bz2=bz2+1;}printf("\n"); //第一行打印完毕printf(" "); //第二行的5月份for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf(" "); //从这里开始打印11月的第二行for(i=0;i<7;i++){if(bz2<10){printf(" %d ",bz2);}if(bz2>=10)bz2=bz2+1;}printf("\n"); //第二行打印结束printf(" "); //第三行的5月份for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf(" "); //从这里开始打印11月的第三行for(i=0;i<7;i++){ if(bz2<10){printf(" %d ",bz2);}if(bz2>=10){printf(" %d ",bz2);}bz2=bz2+1;}printf("\n"); //第三行打印结束printf(" "); //第四行的5月份for(i=0;i<7;i++){ if(bz1<10){printf(" %d ",bz1);}if(bz1>=10){printf(" %d ",bz1);}bz1=bz1+1;}printf(" "); //从这里开始打印11月的第四行for(i=0;i<7;i++){if(bz2<10){printf(" %d ",bz2);}if(bz2>=10){printf(" %d ",bz2);}bz2=bz2+1;}printf("\n"); //第四行打印结束printf(" "); //第五行的5月份for(i=0;i<7;i++){if(bz1<=31){printf(" %d ",bz1);}if(bz1>31)bz1=bz1+1;}printf(" "); //从这里开始打印11月的第五行for(i=0;i<7;i++){if(bz2<=30){printf(" %d ",bz2);}if(bz2>30){printf(" ");}bz2=bz2+1;}printf("\n"); //第五行打印结束printf(" "); //第六行的5月份for(i=0;i<7;i++){if(bz1<=31){printf(" %d ",bz1);}if(bz1>31){printf(" ");}bz1=bz1+1;}printf(" "); //从这里开始打印11月的第六行for(i=0;i<7;i++){if(bz2<=30){printf(" %d ",bz2);}if(bz2>30){printf(" ");}bz2=bz2+1;}printf("\n"); //第六行打印结束}void part6(int x) //第六部分{int i,week,week2,a1,b1,bz1,bz2;//week,week2用于计算1.1的星期,bz1和bz2为日期的递增a1=6,b1=12; //表示当前不封的月份printf("6月Sun Mon Tue Wed Thu Fri Sat");printf(" ");printf("12月Sun Mon Tue Wed Thu Fri Sat\n");printf(" ");week=weak(x,a1);week2=weak(x,b1); //调用计算星期的函数(12.1)for(i=0;i<week;i++){printf(" ");}。
c语言万年历程序
#include <stdio.h>#include <stdlib.h>#include <ctype.h>int leap (int year) ;//判断是否为闰年int days_month (int month,int year) ;//判断这个月的天数int menu_select();/*void f(){int day,month,year,sum,leap,S;printf("\n请输入年月日\n");scanf("%d%d%d",&year,&month,&day);switch(month){case 1:sum=0;break;case 2:sum=31;break;case 3:sum=59;break;case 4:sum=90;break;case 5:sum=120;break;case 6:sum=151;break;case 7:sum=181;break;case 8:sum=212;break;case 9:sum=243;break;case 10:sum=273;break;case 11:sum=304;break;case 12:sum=334;break;default:printf("data error");break;}sum=sum+day;if(year%400==0||(year%4==0&&year%100!=0))leap=1;else leap=0;if(leap==1&&month>2)sum++;S=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+sum)%7; //X表示年份,C是该年份元旦开始到这一日的天数//S/7的系数就是星期数//01printf("%d",S);switch(S){case 1:printf("星期一\n");break;case 2:printf("星期二\n");break;case 3:printf("星期三\n");break;case 4:printf("星期四\n");break;case 5:printf("星期五\n");break;case 6:printf("星期六\n");break;case 0:printf("星期日\n");break;}}*/int Leap(int year){ int leap;if(year%400==0||(year%4==0&&year%100!=0))leap=1;else leap=0;return leap;}int SU(int sum,int year){int S;S=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+sum)%7;return S;}int Sum(int year,int month,int day=1){int sum,leap;switch(month){case 1:sum=0;break;case 2:sum=31;break;case 3:sum=59;break;case 4:sum=90;break;case 5:sum=120;break;case 6:sum=151;break;case 7:sum=181;break;case 8:sum=212;break;case 9:sum=243;break;case 10:sum=273;break;case 11:sum=304;break;case 12:sum=334;break;default:printf("data error");break;}sum=sum+day;leap=Leap(year);if(leap==1&&month>2)sum++;return sum;}void Print(int S){switch(S){case 1:printf("星期一\n");break;case 2:printf("星期二\n");break;case 3:printf("星期三\n");break;case 4:printf("星期四\n");break;case 5:printf("星期五\n");break;case 6:printf("星期六\n");break;case 0:printf("星期日\n");break;}}void Fun1(){int day,month,year,sum,S;printf("\n请输入年月日\n");scanf("%d%d%d",&year,&month,&day);sum=Sum(year,month,day);S=SU(sum,year);Print(S);}void Fun2(){int i,j=1,k=1,a,b,month,year,sum;printf("\n 输入年月:\n");scanf("%d%d",&year,&month);b=days_month(month,year);sum=Sum(year,month);a=SU(sum,year);printf("*************************************\n");printf(" Sun Mon Tue Wed Thu Fri Sat \n");if(a==7){for(i=1;i<=b;i++){printf("%4d",i);if(i%7==0){printf("\n");}}}if(a!=7){while (j<=4*a){printf(" ");j++;}for(i=1;i<=b;i++){printf("%4d",i);if(i==7*k-a){printf("\n");k++;}}}printf("\n*************************************\n");printf("\n");}int days_month (int month,int year){if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) return 31;if(month==4||month==6||month==9||month==11)return 30;if(month==2&&Leap(year)==1) return 29;else return 28;}void main(){for(;;){switch(menu_select()){case 1:printf("输入年月日计算该月第一天是星期几\n");Fun1();break;case 2:printf("打印任意日历\n");Fun2();break;case 3:printf("谢谢使用!\n");exit(0);}}}int menu_select(){ system("cls");char s;int cn;printf("1. 输入年月日计算该月第一天是星期几\n");printf("2. 打印任意日历\n");printf("3.谢谢使用! \n");printf("input 1-3:");do {s=getchar();cn=(int)s-48;}while(cn<0||cn>6);return cn;}。
c++万年历程序代码
// 万年历.cpp : Defines the entry point for the console application.// 显示1900年以后任何年份的日历,日历以月份顺序排列,每月以星期顺序排列。
//采用一般日历计算方法,先给出一般年份的每月天数,如果是闰年,第二个月天数为29,再计算出制定年份的1月1日是星期几,然后根据这些数据//计算出全年日历,边计算边显示。
//函数leap()判定是否闰年//函数week()计算year年份的1月1日是星期几。
计算方法是,已知1900年1月1日是星期一,先计算从1900年到year年份的前一年一共有多少(s)天,//则(s+1)%7为年份year的1月1日的星期号。
#include <stdafx.h>#include <iostream>#include <iomanip>#include <string>using namespace std;static char *week0=" SUN MON TUE WED SUR FRI SAT"; //指针形式定义一个字符串,或者是week0[36]int leap(int year){if((year%4==0 && year%100!=0)|| year%400==0)return 1;else return 0;}int week(int year){int i,w;int s=0;for(i=1900;i<year;i++){if(leap(i))s+=366;else s+=365; //计算从1900年到year年的天数}w=(s+1)%7;return w;}void main(){int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};int i,j,k;int year;int w;do{cout<<"输入年份:";cin>>year;}while(year<=1900);w=week(year);if(leap(year))month[1]=29;for(i=0;i<12;i++){for(k=0;k<35;k++)cout<<"_"; //输出一条横线cout<<endl;cout<<setw(20)<<i+1<<"月"<<endl;cout<<endl;cout<<week0<<endl;for(k=0;k<w;k++)cout<<" "; //输出若干空格for(j=1;j<=month[i];j++){if((j+w)%7==1) //遇到星期日时,换一行输出cout<<endl;cout<<setw(5)<<j;}cout<<endl;for(k=0;k<35;k++)cout<<"_"; //输出一条横线cout<<endl;w=(w+month[i])%7; //计算下个月1号是星期几}cout<<endl;system("pause");}。
用C语言编写万年历,详细代码
fflush(stdin);
scanf("%c",&ch);
if(ch=='N'||ch=='n')
break;
}
break;
case 4:
fflush(stdin);
printf("Are you sure?(Y/N)");
char* week[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
int leap (int year)//判断闰年
{
if(year%4==0&&year%100!=0||year%400==0)
printf(" Sun Mon Tue Wed Thu Fri Sat \n**************");
if(a==7)
{
for(i=1;i<=b;i++)
{
printf("%4d",i);
if(i%7==0)
{
printf("**************\n**************");
}
for(i=1;i<=b;i++)
{
printf("%4d",i);
if(i==7*k-a)
C语言程序修改万年历代码保存注释版本
printmonth(); break; case '3': printyear(); break; case'4': printdate(); break; case '5': doexit=toexit(); break; default: break; } } while (!doexit); return 0; }
/*
判断两个日期之间的天数.
日期一:年 y1,月 m1,日 d1;
日期一:年 y2,月 m2,日 d2;
*/
int DiffDays(int y1,int m1,int d1,int y2,int m2,ቤተ መጻሕፍቲ ባይዱnt d2)
{
int s1,s2; /* 计算两个日期从年初到该日期的天数 */
int count; /* 计算两个年份之间的差值 */
} else { count = y2 - y1 ; if(count == 1) {
t2 = Days(y2,m2,d2); t1 = Days(y1,12,31) - Days(y1,m1,d1); return (t1+t2+count); } else { for(t = y1+1;t<y2;t++)
万年历程序设计c语言代码
这是当时我做的一个小小的课题,希望对你有所帮助#include "stdio.h" /* Required for MS-DOS use */#define ENTER 0x1C0D /* Enter key */int year, month, day;static char *days[8] = {" ","Sunday ","Monday ","Tuesday ","Wednesday","Thursday ","Friday ","Saturday "}; struct TIMEDATE {int year; /* year 1980..2099 */int month; /* month 1=Jan 2=Feb, etc. */int day; /* day of month 0..31 */int hours; /* hour 0..23 */int minutes; /* minute 0..59 */int seconds; /* second 0..59 */int hsecs; /* 1/100ths of second 0..99 */char dateline[47]; /* date & time together */};static struct TIMEDATE today;main(){char cmonth[3];char cday[3];char cyear[5];double getdays();double daynumb, numbnow;int weekday, retcode, dayer, i;dayer = datetime(&today);clrscn();for (i=0;i<3;++i)cmonth[i]='\0';for (i=0;i<3;++i)cday[i]='\0';for (i=0;i<5;++i)cyear[i]='\0';putstr(5,8,14,"Enter date in MM DD YYYY format:");while (retcode != ENTER){retcode = bufinp(5,41,13,2,cmonth);if (retcode != ENTER) retcode = bufinp(5,44,13,2,cday);if (retcode != ENTER) retcode = bufinp(5,47,13,4,cyear);}year = atoi(&cyear);month = atoi(&cmonth);day = atoi(&cday);daynumb = getdays(year, month, day);numbnow = getdays(today.year, today.month, today.day); weekday = weekdays(daynumb);if (numbnow - daynumb == 0)printf("\n\n%02d-%02d-%d is",month, day, year);if (numbnow - daynumb > 0)printf("\n\n%02d-%02d-%d was",month, day, year);if (numbnow - daynumb < 0)printf("\n\n%02d-%02d-%d will be",month, day, year);printf(" a %s\n",days[weekday]);} /* end MAIN *//************************************************************* GETDAYS - From integer values of year (YYYY), month * * (MM) and day (DD) this subroutine returns a ** double float number which represents the * * number of days since Jan 1, 1980 (day 1). * * This routine is the opposite of GETDATE. * ************************************************************/double getdays(year, month, day)int year, month, day;{int y,m;double a,b,d, daynumb;double floor(),intg();/************************************ make correction for no year 0 ************************************/if (year < 0) y = year + 1;else y = year;/*********************************************************** Jan and Feb are months 13 and 14 in this calculation ***********************************************************/m = month;if (month < 3){m = m + 12;y = y - 1;}/**************************** calculate Julian days ****************************/d = floor(365.25 * y) + intg(30.6001 * (m + 1)) + day - 723244.0;/************************************************ use Julian calendar if before Oct 5, 1582 ************************************************/if (d < -145068.0) daynumb = d;/*************************************** otherwise use Gregorian calendar ***************************************/else{a = floor(y / 100.0);b = 2 - a + floor(a / 4.0);daynumb = d + b;}return(daynumb);} /* end GETDAYS *//********************************************************* GETDATE - This routine takes a double float number * * representing the number of days since Jan 1,* * 1980 (day 1) and returns the year month and * * day as pointer integers * * This routine is the opposite of GETDAYS * ********************************************************/getdate(numb)double numb;{double a,aa,b,c,d,e,z;double date;date = numb;z = intg(date + 2444239.0);if (date < -145078.0) a = z;else{aa = floor((z - 1867216.25) / 36524.25);a = z + 1 + aa - floor(aa/4.0);}b = a + 1524.0;c = intg((b - 122.1) / 365.25);d = intg(365.25 * c);e = intg((b - d) / 30.6001);day = b - d - intg(30.6001 * e);if (e > 13.5) month = e - 13.0;else month = e - 1.0;if (month > 2) year = c - 4716.0;else year = c - 4715.0;if (year < 1) --year;return;} /* end GETDATE *//********************************************************* WEEKDAYS - This routine takes a double float number * * representing the number of days since Jan 1,** 1980 (day 1) and returns the day of the week** where 1 = Sunday, 2 = Tuesday, etc. * ********************************************************/int weekdays(numb)double numb;{double dd;int day;dd = numb;while (dd > 28000.0) dd = dd - 28000.0;while (dd < 0) dd = dd + 28000.0;day = dd;day = ((day + 1) % 7) + 1;return(day);}/********************************************************* FRACT - This routine takes a double float number ** and returns the fractional part as a double ** float number * ********************************************************/double fract(numb)double numb;{int inumb;double fnumb;while (numb < -32767) numb += 32767;while (numb > 32767) numb -= 32767;inumb = numb;fnumb = inumb;return(numb-fnumb);} /* end FRACT *//********************************************************* FLOOR - This routine takes a double float number ** and returns the next smallest integer *********************************************************/double floor(numb)double numb;{double fract(), intg();double out;out = intg(numb);if (numb < 0 && fract(numb) != 0) out -= 1.0;return(out);} /* end FLOOR *//********************************************************* INTG - This routine takes a double float number ** and returns the integer part as a double ** float number * ********************************************************/double intg(numb)double numb;{double fract();return(numb - fract(numb));} /* end INTG */。
万年历c语言代码讲解
万年历c语言代码讲解万年历是一种常见的日历形式,可以显示一年中每一天的日期和星期几。
在计算机编程中,我们可以使用C语言编写一个万年历的程序来实现这个功能。
我们需要了解一个概念:闰年。
闰年是指能被4整除但不能被100整除的年份,或者能被400整除的年份。
闰年的2月份有29天,而普通年份的2月份只有28天。
接下来,我们可以开始编写程序了。
首先,我们需要定义一个结构体来表示日期,结构体中包含年、月和日三个成员变量。
然后,我们可以编写一个函数来判断某一年份是否是闰年。
根据闰年的定义,我们可以使用取余运算符(%)来判断。
接下来,我们需要编写一个函数来计算某一年月的某一天是星期几。
这个函数的核心思想是根据已知的某一天是星期几,然后通过计算得出某一天之后或之前的日期是星期几。
我们可以使用一个数组来保存每个月份的天数,并根据年份是否是闰年来调整2月份的天数。
在计算星期几的过程中,我们可以使用蔡勒公式。
蔡勒公式是一种计算星期几的方法,根据蔡勒公式,我们可以得出某一天是星期几。
具体的计算公式可以在代码中实现,但是根据要求,我们不能输出公式,所以在这里就不展开讲解了。
接下来,我们可以编写一个主函数来调用上述的函数,并输出结果。
在主函数中,我们可以通过用户输入来获取需要查询的年月信息,然后调用函数来计算星期几,并输出结果。
为了使输出结果更加美观,我们可以使用制表符来对齐输出的结果。
在编写主函数的过程中,我们还可以加入一些错误处理的代码,例如判断用户输入的年月是否合法,以及判断计算结果是否正确。
这样可以增加程序的健壮性和用户体验。
我们还可以考虑加入一些额外的功能,例如输出某个月份的日历表格或者某一天所在的周的日期范围等。
这样可以提升程序的实用性和功能性。
通过以上的步骤,我们就可以完成一个简单的万年历程序的编写。
这个程序可以根据用户的输入来计算某一年月的某一天是星期几,并输出结果。
通过这个程序,我们可以更方便地查询任意日期的星期几,从而更好地了解和利用时间。
C语言万年历(代码+说明)
/*本程序在Microsoft Visual Studio 2010 旗舰版中测试通过*/ #include "stdio.h"#include "stdlib.h"#include "time.h"#include "conio.h"#define KEYUP 72//宏定义键盘的键值(↑)#define KEYDOWN 80//宏定义键盘的键值(↓)#define KEYLEFT 75//宏定义键盘的键值(←)#define KEYRIGHT 77//宏定义键盘的键值(→)//函数声明部分const int isLeap(int year);const int getMonthDays(int year,int month);const int yearDays(int year);void printCalendar(int year,int month);void main(){int year,month;int action = 0;//获取本地当前的年份和月份time_t timep;struct tm *p;time(&timep);p = localtime(&timep);year = p->tm_year+1900;//获取本地当前的年份month = p->tm_mon + 1;//获取本地当前的月份while(1){printf("\t\t %d 年%d 月\n",year,month);printCalendar(year,month);action = getch();system("cls");switch(action){case KEYUP:year++;break;case KEYDOWN:year--;break;case KEYLEFT:month--;if(month < 1){month = 12;}break;case KEYRIGHT:month++;if(month > 12){month = 1;}break;}}}//判断year 是否是润年返回1 为闰年const int isLeap(int year){if(year%4==0&&year%100!=0||year%400==0){ return 1;}else{return 0;}}/*计算year 年的month 月是多少天*返回值:整型,天数*/const int getMonthDays(int year,int month){ switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:return 31;break;case 4:case 6:case 9:case 11:return 30;break;case 2:if(isLeap(year)){return 29;}else{return 28;}break;default:return 0;break;}}//计算year 年的天数const int yearDays(int year){if(isLeap(year)){return 366;}else{return 365;}}/*判断year 年month 月day 天时星期几*返回值:0,1,2,3,4,5,6*/const int isWeek(int year,int month,int day){ int days = 0;int i;//计算前year 年有多少天for(i=1;i<year;i++){days = days + yearDays(i);}//计算year 年的前month 个月有多少天for(i=1;i<month;i++){days = days + getMonthDays(year,i);}//从公元1 年days = days + day;return days%7;}//按日历的格式打印year 年month 月的日历void printCalendar(int year,int month){const char *week[]= {"日","一","二","三","四","五","六"};int i;int row = 0;for(i=0;i<7;i++){printf("%s\t",week[i]);}printf("\n");//判断year 年month 月1 日时星期几for(i=0;i<isWeek(year,month,1);i++){printf("\t");}for(i=0;i<getMonthDays(year,month);i++){ printf("%d\t",i+1);//如果是星期六就换行打印日期if(isWeek(year,month,i+1) == 6){row ++;if(row == 2){printf(" ↑");}if(row == 3){printf("←→");}if(row == 4){printf(" ↓");}printf("\n\n");}}printf("\n");}CreateDBW制作2012年12月7日。
c语言基础代码编写的简单的万年历程序
#include<stdio.h>void print(int x,int y); //打印程序x表示这个月的总天数y表示这个月的1号的星期int month_day(int x,int y); //计算该月的天数x表示年份y表示月份int run(int y); //判断闰年y表示年份int month_cha(int x,int y); //每月一号的星期x表示年份y表示月份int year_cha(int x); //每年的一月一号的星期x表示年份void main(){int year,month,day,cha;char key='y';while(key=='y'){printf("请输入年月:");scanf("%d%d",&year,&month);day=month_day(year,month);cha=month_cha(year,month);print(day,cha);printf("是否继续输入(y/n):");scanf("%c",&key);scanf("%c",&key);}}void print(int x,int y){int i,j;printf("Sun Mon Tue Wed Thu Fri Sat\n");for(i=0;i<y;i++) //打印空缺部分printf("\t");for(j=1;j<=x;j++,i++){printf("%d\t",j);if(i%7==6){printf("\n");}}printf("\n");}int run(int y){int r;if(y%4!=0)r=0;else if((y%100==0)&&(y%400)!=0)r=0;elser=1;return r;}int month_day(int x,int y){int day;switch(y){case 1: day=31; break;case 2: day=28+run(x); break;case 3: day=31; break;case 4: day=30; break;case 5: day=31; break;case 6: day=30; break;case 7: day=31; break;case 8: day=31; break;case 9: day=30; break;case 10: day=31; break;case 11: day=30; break;case 12: day=31; break;}return day;}int month_cha(int x,int y){int day;switch(y){case 1: day=0; break;case 2: day=3; break;case 3: day=3+run(x); break;case 4: day=6+run(x); break;case 5: day=1+run(x); break;case 6: day=4+run(x); break;case 7: day=6+run(x); break;case 8: day=2+run(x); break;case 9: day=5+run(x); break;case 10: day=0+run(x); break;case 11: day=3+run(x); break;case 12: day=5+run(x); break;}day+=year_cha(x);if(day<0){day=7-(-day)%7;}if(day>6){day=day%7;}return day;}int year_cha(int x){int i,day=0;if(x>2012)for(i=2012;i<x;i++){day+=run(i);day++;}else if(x<2012)for(i=x;i<2012;i++){day=day-run(i);day--;}else day=0;printf("day=%d\n",day);return day;}}。
万年历C代码
2012-1-1
2009-6-7(今天)
按space
按esc,出现 “Do you really want to quit?(y/n)”, 按Y则退出, 按N则返回程 序
本程序分为四个模块
一、功能控制模块:该模块用于实现日期有效 性检查,判断是否是闰年和返回值对应的星期 二、打印输出模块:该模块主要是进行输出显 示,包括打印制定个数的空格、分隔线、打印 用户使用手册、打印当前日期对应的星期以及 打印给定的星期 三、日历显示模块:该模块是程序的核心模块, 是用来显示指定的日期所在日月历 四、键值获取模块:该模块接收键盘操作,获 取键值,来进行日期调整,并调整显示模块中 的函数来显示调整后的日历。
+ Strcut date sysTime:系统结构体,用于存储 系统日期
+ Int currentYear:表示当前的年份 + Int currentMonth:表示当前的月份 + Int currentday:表示当前的日期 + Int n_currentMon:表示当前月的天数 + Int n_lastMon:表示上一月的天数
选择上一天和下一天
选择上一天——按
PAGEUP
选择下一天——按
PAGEDOWN
选择上一月和下一月
选择下一月按——向右键 选择上一月按——向左键
选择上一年按——向上键
选择下一年按——向下键
选择上一年和下一年
选择日期
按Q就会显示今天 的日期,同时会提 示要求输入想选择 的日期,依次输入 要选择的日期的年 月日,中间用“-” 连接,然后按enter 则出现输入的日期。 例如2012-1-1
万年历c语言代码讲解
万年历c语言代码讲解摘要:一、万年历C语言代码讲解简介1.万年历的概念及用途2.C语言代码讲解的重要性二、C语言代码基础1.C语言简介2.C语言基本语法3.C语言的数据类型与变量三、万年历C语言代码实现1.计算闰年2.计算月份的天数3.计算日期的星期4.输出万年历四、万年历C语言代码的优化与拓展1.代码性能优化2.功能的拓展与实现五、总结1.万年历C语言代码讲解的意义2.对编程能力的提升正文:一、万年历C语言代码讲解简介万年历是一种记录了公历日期的工具,它可以帮助我们快速查询公历日期对应的农历、节日、提醒等信息。
C语言是一种广泛应用于计算机领域的编程语言,掌握C语言编程对于学习其他编程语言有很大的帮助。
本文将详细讲解万年历C语言代码的实现过程,帮助读者更好地理解C语言编程。
二、C语言代码基础1.C语言简介C语言是一种高级编程语言,由丹尼斯·里奇(Dennis Ritchie)于20世纪70年代在贝尔实验室开发。
C语言具有良好的性能和可移植性,被广泛应用于操作系统、嵌入式系统、硬件驱动等领域。
2.C语言基本语法C语言的基本语法包括变量声明、数据类型、运算符、控制结构、函数等。
了解这些基本语法对于编写C语言代码至关重要。
3.C语言的数据类型与变量C语言的数据类型包括整型、浮点型、字符型等。
变量是存储数据的容器,通过变量名来表示。
声明变量时需要指定变量的数据类型和存储空间。
三、万年历C语言代码实现1.计算闰年闰年是指公历年份可以被4整除但不能被100整除的年份,或者是可以被400整除的年份。
通过编写一个函数,我们可以判断一个年份是否为闰年。
2.计算月份的天数根据公历规定,每个月的天数不同。
通过编写一个函数,我们可以计算指定月份的天数。
3.计算日期的星期通过编写一个函数,我们可以根据公历日期计算对应的星期。
4.输出万年历根据用户输入的日期范围,输出对应的万年历信息。
四、万年历C语言代码的优化与拓展1.代码性能优化在实现万年历C语言代码的过程中,可以通过优化算法、使用更高效的函数等方式提高代码性能。
万年历的程序代码
万年历的程序代码一年没碰Pascal了,写起来还有点吃力,希望对99级的同学有点帮助. : 程序已编译通过;附2000年年历;: 不足之处请大家批评指出.: 只限参考,不可抄袭.: Program wnl(input,output);: label: again;: var: a:char;: i:integer;: ran,year,all_days,all_years:integer;: days_month,first_month:array[1..12]of integer;: procedure display;: var: i,j,k,l,m,n,c,d,mm,nn:integer;: begin: for j:=0 to 5 do: begin: mm:=1;: nn:=1;: k:=j*2+1;: l:=j*2+2;: m:=first_month[k];: n:=first_month[l];: if m=0 then m:=7;: if n=0 then n:=7;: for i:=1 to 21 do write( );: write(No.,k:2);: for i:=1 to 32 do write( );: writeln(No.,l:2);: for i:=1 to 8 do write( );: writeln(||mon|tur|wed|thr|fri|sat|sun|| ||mon|tur|wed|thr|: fri|sat|sun||);: write( ||);: for c:=1 to 7 do if c$#@60;m then write( |) else: begin: write(mm:3,|);: mm:=mm+1;: end;: write(| ||);: for c:=1 to 7 do if c$#@60;n then write( |) else: begin: write(nn:3,|);: nn:=nn+1;: end;: writeln(|);{the first line.}: for d:=1 to 5 do: begin: write( ||);: for c:=1 to 7 do if mm>days_month[k] then write( |) else: begin: write(mm:3,|);: mm:=mm+1;: end;: write(| ||);: for c:=1 to 7 do if nn>days_month[l] then write( |) else: begin: write(nn:3,|);: nn:=nn+1;: end;: writeln(|);: end;: readln;: end;: end;: begin{main}: days_month[1]:=31;: days_month[2]:=28;: days_month[3]:=31;: days_month[4]:=30;: days_month[5]:=31;: days_month[6]:=30;: days_month[7]:=31;: days_month[8 31;: days_month[9]:=30;: days_month[10]:=31;: days_month[11]:=30;: days_month[12]:=31;: writeln(This program may help you to make a calender of the year yo: u input.);: again: year:=0;: ran:=0;: for i:=1 to 12 do first_month[i]:=0;: writeln(Please input the year number:);: readln(year);: if (year mod 400 =0) or ((year mod 100 $#@60;>0) and (year mod 4=0)) then: ran:=1;: days_month[2]:=days_month[2]+ran;: all_years:=year-1;: all_days:=all_years+(all_years div 4)-(all_years div 100)+(all_years : div 400);: first_month[1]:=(all_days+1) mod 7;: for i:=2 to 12 do first_month[i]:=(first_month[i-1]+days_month[i-1]) : mod 7;: display;: writeln(Press enter to continute,Ctrl+C to quit.);: readln;: goto again;: end.{main}: 2000年年历:: This program may help you to make a calender of the year you input. : Please input the year number:2000: No. 1 No. 2: ||mon|tur|wed|thr|fri|sat|sun|| ||mon|tur|wed|thr|fri|sat|sun||: || | | | | | 1| 2|| || | 1| 2| 3| 4| 5| 6||: || 3| 4| 5| 6| 7| 8| 9|| || 7| 8| 9| 10| 11| 12| 13||: || 10| 11| 12| 13| 14| 15| 16|| || 14| 15| 16| 17| 18| 19| 20||: || 17| 18| 19| 20| 21| 22| 23|| || 21| 22| 23| 24| 25| 26| 27||: || 24| 25| 26| 27| 28| 29| 30|| || 28| 29| | | | | ||: || 31| | | | | | || || | | | | | | ||: No. 3 No. 4: ||mon|tur|wed|thr|fri|sat|sun|| ||mon|tur|wed|thr|fri|sat|sun||: || | | 1| 2| 3| 4| 5|| || | | | | | 1| 2||: || 6| 7| 8| 9| 10| 11| 12|| || 3| 4| 5| 6| 7| 8| 9||: || 13| 14| 15| 16| 17| 18| 19|| || 10| 11| 12| 13| 14| 15| 16||: || 20| 21| 22| 23| 24| 25| 26|| || 17| 18| 19| 20| 21| 22| 23||: || 27| 28| 29| 30| 31| | || || 24| 25| 26| 27| 28| 29| 30||: || | | | | | | || || | | | | | | ||: No. 5 No. 6: ||mon|tur|wed|thr|fri|sat|sun|| ||mon|tur|wed|thr|fri|sat|sun||: || 1| 2| 3| 4| 5| 6| 7|| || | | | 1| 2| 3| 4||: || 8| 9| 10| 11| 12| 13| 14|| || 5| 6| 7| 8| 9| 10| 11||: || 15| 16| 17| 18| 19| 20| 21|| || 12| 13| 14| 15| 16| 17| 18||: || 22| 23| 24| 25| 26| 27| 28|| || 19| 20| 21| 22| 23| 24| 25||: || 29| 30| 31| | | | || || 26| 27| 28| 29| 30| | ||: || | | | | | | || || | | | | | | ||: No. 7 No. 8: ||mon|tur|wed|thr|fri|sat|sun|| ||mon|tur|wed|thr|fri|sat|sun||: || | | | | | 1| 2|| || | 1| 2| 3| 4| 5| 6||: || 3| 4| 5| 6| 7| 8| 9|| || 7| 8| 9| 10| 11| 12| 13||: || 10| 11| 12| 13| 14| 15| 16|| || 14| 15| 16| 17| 18| 19| 20|| : || 17| 18| 19| 20| 21| 22| 23|| || 21| 22| 23| 24| 25| 26| 27|| : || 24| 25| 26| 27| 28| 29| 30|| || 28| 29| 30| 31| | | ||: || 31| | | | | | || || | | | | | | ||: No. 9 No.10: ||mon|tur|wed|thr|fri|sat|sun|| ||mon|tur|wed|thr|fri|sat|sun|| : || | | | | 1| 2| 3|| || | | | | | | 1||: || 4| 5| 6| 7| 8| 9| 10|| || 2| 3| 4| 5| 6| 7| 8||: || 11| 12| 13| 14| 15| 16| 17|| || 9| 10| 11| 12| 13| 14| 15||: || 18| 19| 20| 21| 22| 23| 24|| || 16| 17| 18| 19| 20| 21| 22|| : || 25| 26| 27| 28| 29| 30| || || 23| 24| 25| 26| 27| 28| 29||: || | | | | | | || || 30| 31| | | | | ||: No.11 No.12: ||mon|tur|wed|thr|fri|sat|sun|| ||mon|tur|wed|thr|fri|sat|sun|| : || | | 1| 2| 3| 4| 5|| || | | | | 1| 2| 3||: || 6| 7| 8| 9| 10| 11| 12|| || 4| 5| 6| 7| 8| 9| 10||: || 13| 14| 15| 16| 17| 18| 19|| || 11| 12| 13| 14| 15| 16| 17|| : || 20| 21| 22| 23| 24| 25| 26|| || 18| 19| 20| 21| 22| 23| 24|| : || 27| 28| 29| 30| | | || || 25| 26| 27| 28| 29| 30| 31||: || | | | | | | || || | | | | | | ||: Press enter to continute,Ctrl+C to quit.--。
万年历代码
monWeeks[January] = yDay;
monWeeks[February] = ((monWeeks[January] +monLen[January] )%7);
monWeeks[Match] = ((monWeeks[February] +monLen[February] )%7);
printf("\n****************************************************\n");
printf(" 星期日 星期一 星期二 星期三 星期四 星期五 星期六\n");
//打印星期表头
for(i=0;i<FirstDay_Month;i++)
scanf("%d",&Year); //把输入的年份赋值给变量Year
printf("请输入月份<0~12>: "); //提示输入月份(1~12)
scanf("%d",&Month); //把输入的月份赋值给变量Month
y=Year;
FirstDay_Year=5*(y/4)+(y%4)-(y/100)+(y/400);//蔡勒公式(计算某年的第一天是星期几)
}
printf("\n-------------------------------------------------\n");
printf(" %d, %d \n",y,i);
printf("-------------------------------------------------\n");
python万年历实现代码含运行结果
print ''
运行效果:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
year=input("输入年份:") month = input("请输入月:") iCount = 0 print "日\t一\t二\t三\t四\t五\t六" i=1 for i in range((getTotalDays(yeHale Waihona Puke r,month)%7)+1):
print '\t', iCount+=1 for i in range(1,getMonthDays(year,month)+1): print i,'\t', iCount +=1 if iCount%7 == 0 :
本文实例为大家分享了python实现万年历的具体代码,供大家参考,具体内容如下
#coding:utf-8 def leap_year(year):#判断平瑞年
if year%4==0 and year%100!=0 or year%400==0: return True
else: return False
def getTotalDays(year,month):#计算星期 totalDays=0 for i in range(1,year): if leap_year(i): totalDays += 366 else: totalDays += 365 for i in range(1,month): totalDays +=getMonthDays(year,i) return totalDays
万年历程序代码
/*****************************************************4字LED点阵屏+DS1302万年历电子钟C 程序*******************************************************DS1302 接线图Vcc2 CLK I/O /RST| | | |-------------------| 8 7 6 5 || DS1302 || || 1 2 3 4 |-------------------| | | |VCC1 GND1 脚接+5V 2,3脚32768HZ晶振4脚接地5脚接S51的P02 6脚接S51的P01 7接S51的P008脚接后备电源,可以接老计算机主板上的3.6V电池,也可以通过二级管隔离接一个大容量电解电容电压在2.5V以上即可维持595连级输出数据,138行驱动。
*///(本程序引用网上程序,有点BUG经过修改后可以使用,经过修改调整加上了温度显示功能,节日提醒功能和家人生日提醒功能。
//程序没有有效简化)07电气工程,付春平!//手动添加定时器2寄存器定义sfr T2CON = 0xC8;(special function register)sfr TL2 = 0xCC;sfr TH2 = 0xCD;sfr RCAP2L = 0xCA;sfr RCAP2H = 0xCB;sbit TF2 = T2CON^7;sbit EXF2 = T2CON^6;sbit RCLK = T2CON^5;sbit TCLK = T2CON^4;sbit EXEN2 = T2CON^3;sbit TR2 = T2CON^2;sbit C_T2 = T2CON^1;sbit CP_RL2= T2CON^0;//sbit ET2 =0xAD;#include<A T89x51.H>#include <intrins.h>#define uchar unsigned char#define uint unsigned intunsigned char irtime;//红外用全局变量bit irokk;unsigned char IRcord[2];unsigned char irdata[17];unsigned char data temp_data[2] = {0x00,0x00} ;void Ircordpro(void);uchar code hanzi[]; //汉字字模uchar code hanzi1[]; //汉字字模uchar code timer[18][16]; //0~9数字uchar code sw[]; //138驱动数据void Show_word(); //待机显示按三秒间隔分别显示年、月日、星期、时分秒。
单片机万年历程序代码
单片机万年历程序代码以下是一个示例单片机万年历的程序代码:```c#include <reg51.h>typedef unsigned char uchar;typedef unsigned int uint;sbit K1 = P2^0; // 显示年份sbit K2 = P2^1; // 显示月份sbit K3 = P2^2; // 显示日期uchar code year_tab[] = {31,28,31,30,31,30,31,31,30,31,30,31}; uchar code week_tab[] = {0x06,0x07,0x01,0x02,0x03,0x04,0x05}; uchar year, month, day, week;void delay(uint ms){uint i, j;for(i=ms;i>0;i--)for(j=110;j>0;j--);}uchar getKey(){if(K1==0) {delay(5);if(K1==0)return 1;while(!K1);}if(K2==0) {delay(5);if(K2==0)return 2;while(!K2);}if(K3==0) {delay(5);if(K3==0)return 3;while(!K3);}return 0;}void display(uchar num) {P0 = num;delay(1);P0 = 0x00;}void init(){TMOD=0x01;TH0=0xFC;TL0=0x67;EA=1;ET0=1;TR0=1;}void main(){init();while(1) {uchar key = getKey();if(key == 1) {year++;if(year == 100)year = 0;}else if(key == 2) {month++;if(month == 13)month = 1;}else if(key == 3) {day++;if(day > year_tab[month-1]) { day = 1;}}display(year / 10);display(year % 10);display(month / 10);display(month % 10);display(day / 10);display(day % 10);display(week);}}void timer0() interrupt 1{TH0=0xFC;TL0=0x67;week++;if(week == 7)week = 0;}```该代码的主要思路是通过外部三个按键模拟年、月和日的调节,通过一个定时器不断更新星期的计数,然后将年、月、日和星期分别在数码管上显示出来。
java万年历程序代码
package pack;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Calendar;import java.util.Date;public class rili extends JFrame implements ActionListener { JButton b_today, b_query;JLabel lb_Year, lb_Month;JButton b_week[] = new JButton[7];JButton b_day[][] = new JButton[6][7];Container thisContainer;JPanel pUp;JPanel pCenter;JPanel pCenter_week, pCenter_day;JComboBox year, month;public void init() {b_today = new JButton("Today");b_query = new JButton("Query");setTitle("日历");lb_Year = new JLabel("Year");lb_Month = new JLabel("Month");year = new JComboBox();month = new JComboBox();setDate();pUp = new JPanel();pUp.add(lb_Year);pUp.add(year);pUp.add(lb_Month);pUp.add(month);pUp.add(b_today);pUp.add(b_query);b_today.addActionListener(this);b_query.addActionListener(this);pCenter = new JPanel();pCenter_week = new JPanel();b_week[0] = new JButton("星期日");b_week[1] = new JButton("星期一");b_week[2] = new JButton("星期二");b_week[3] = new JButton("星期三");b_week[4] = new JButton("星期四");b_week[5] = new JButton("星期五");b_week[6] = new JButton("星期六");b_week[0].setSize(400, 200);b_week[1].setSize(400, 200);b_week[2].setSize(400, 200);b_week[3].setSize(400, 200);b_week[4].setSize(400, 200);b_week[5].setSize(400, 200);b_week[6].setSize(400, 200);for (int i = 0; i < 7; i++) {b_week[i].setEnabled(false);pCenter_week.add(b_week[i]);}pCenter_day = new JPanel();for (int cols = 0; cols < 6; cols++) {for (int rows = 0; rows < 7; rows++) {b_day[cols][rows] = new JButton("");b_day[cols][rows].setSize(400, 200);this.pCenter_day.add(b_day[cols][rows]);}}pCenter_day.setLayout(new GridLayout(6, 7));setDay(Integer.parseInt(this.year.getSelectedItem().toString()),Integer.parseInt(this.month.getSelectedItem().toString()));// setDay(2011,2);pCenter.setLayout(new BorderLayout());pCenter.add(pCenter_week, "North");pCenter.add(pCenter_day, "Center");thisContainer = this.getContentPane();thisContainer.setLayout(new BorderLayout());thisContainer.add(pUp, "North");thisContainer.add(pCenter, "Center");this.setVisible(true);this.setResizable(false);this.pack();}public void setDate() {int year, month, day, week;Calendar cal = Calendar.getInstance();year = cal.get(Calendar.YEAR);month = cal.get(Calendar.MONTH);day = cal.get(Calendar.DA TE);week = cal.get(Calendar.WEEK_OF_YEAR);int year_temp = year - 4;for (int i = 0; i < 10; i++) {this.year.addItem(year_temp);year_temp += 1;}this.year.setSelectedIndex(4);for (int n = 0; n < 12; n++) {this.month.addItem(n + 1);}this.month.setSelectedIndex(month);}public void setDay(int Year, int Month) {int count;Calendar c = Calendar.getInstance();c.clear();c.set(Year, Month-1, 1);count = c.getActualMaximum(Calendar.DAY_OF_MONTH); // 总天数System.out.print(count);int day = c.get(Calendar.DAY_OF_WEEK) - 1; // 0为星期天,6为星期六System.out.print(day);int i = 1 - day;for (int cols = 0; cols < 6; cols++) {for (int rows = 0; rows < 7; rows++) {String st = String.valueOf(i);b_day[cols][rows].setText(st);b_day[cols][rows].setEnabled(false);if (i > 0 && i <= count)b_day[cols][rows].setVisible(true);elseb_day[cols][rows].setVisible(false);i++;}}}public void actionPerformed(ActionEvent e) {if (e.getSource() == b_query) {this.setDay(Integer.parseInt(this.year.getSelectedItem().toString()), Integer.parseInt(this.month.getSelectedItem().toString()));}if (e.getSource() == b_today) {int year, month;Calendar cal = Calendar.getInstance();year = cal.get(Calendar.YEAR);month = cal.get(Calendar.MONTH)+1;this.setDay(year,month);}}public static void main(String[] args) {rili rl = new rili();rl.init();}}。
万年历代码c语言
万年历代码c语言万年历是一种实用的日历工具,它可以根据年、月、日来显示当天的日期信息,并可以切换到其他日期来查询对应的日期信息。
在编写万年历的代码时,我们需要考虑输入的年份是否为闰年、每个月的天数、以及每个月第一天是星期几等等。
以下是一份使用C语言编写万年历的参考代码:```c#include <stdio.h>// 判断是否为闰年int isLeapYear(int year) {return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); }// 获取某年某月的天数int getMonthDays(int year, int month) {int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};if (month == 2 && isLeapYear(year)) {return 29;}return days[month - 1];}// 获取某年某月第一天是星期几int getFirstDayOfWeek(int year, int month) {int day = 1;for (int i = 1800; i < year; i++) {if (isLeapYear(i)) {day = (day + 366) % 7;} else {day = (day + 365) % 7;}}for (int i = 1; i < month; i++) {day = (day + getMonthDays(year, i)) % 7;}return day;}int main() {int year, month;printf("请输入年份:");scanf("%d", &year);printf("请输入月份:");scanf("%d", &month);// 判断输入是否合法if (year < 1800 || month < 1 || month > 12) {printf("输入的年份或月份不合法!\n");return 0;}// 获取某年某月的天数和第一天是星期几int days = getMonthDays(year, month);int firstDayOfWeek = getFirstDayOfWeek(year, month); // 打印万年历printf("日一二三四五六\n");for (int i = 0; i < firstDayOfWeek; i++) {printf(" ");}for (int i = 1; i <= days; i++) {printf("%2d ", i);if ((firstDayOfWeek + i) % 7 == 0) {printf("\n");}}printf("\n");return 0;}```以上代码实现了一个简单的万年历功能,在控制台输出给定年份和月份的月历。
万年历代码
万年历代码
•
#include <stdio.h> main() { void print_head(int x,int y); /*打印头文件*/ void print_month(int x,int y); /*打印月历*/ int days_of_month(int x,int y); /*计算指定年月的天数*/ int leap(int x,int y); /*计算指定年月1号是星期几*/ int i,days,year,month,firstday; char choose; do {printf ("\n\nplease input the year(0000~9999):\n\n"); scanf ("%d",&year); if (year<0||year>9999) printf ("WANNING:ERROR,please input again!");} while (year<0||year>9999); printf ("\n\n"); do {printf ("please input the month(0~12)\n\n\n"); scanf ("%d",&month); if (month<=0||month>12) printf ("WANNING:ERROR,please input again!");} while (month<=0||month>12); printf ("\n\n"); days=days_of_month(year,month); /*调用函数*/ firstday=leap(year,month); print_head(year,month); print_month(firstday,days); choose=getchar(); printf ("\n\n\n"); printf("would you like to continue(y/n):\n\n"); scanf("%c",&choose); if (choose=='y'||choose=='Y') main(); }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int Get_month(){return month;} //申明获取月份成员函数
int Get_day(){return day;} //申明获取日期成员函数
}
else
{cout<<"\n\n"<<dat.Get_year()<<"年为平年\n";
/***************以下对分别输入的年、月、日进行判断打印*********************/
for(;;)
{
for(;;)
{
cin.clear(ios::goodbit);
cin.sync();
cout<<"请输入年(0~3000以内数字年份):\n";
bool judgelegal(); //申明所输入日期合法性成员函数
void setdate(int y,int m,int d) //定义设置时间的成员函数
{year=y;month=m;day=d;}
else {f1=1;break;}
}
if(f1==1)
{
for(;;)
{
cin.clear(ios::goodbit);
cin.sync();
cout<<"请输入日:\n";
cin>>day;
cin.sync();
Date(int y,int m,int d):year(y),month(m),day(d){} //有参构造函数,实例化函数列表
bool isleapyear() //定义瑞年判断成员函数
{return (year%4==0&&year%100!=0||year%400==0);}
case 4:
case 6:
case 9:
case 11: if(day>0&&day<=30&&cin.good()) {flg=1;f2=1;break;}
else {cout<<"所输入日期超出本月天数!!!\n";continue;}
using namespace std;
class Date //定义万年历 时间类Date
{
public:
Date() {year=1989;month=03;day=28;} //无参构造函数,默认生成数据成员值
{if(year<0||year>3000||month<0||month>12||day<0||day>31||cin.bad())
return false;
else return true;
}
int main() //万年历程序 运行入口函数
}
if(month>12)
{month=1;
year++;
}
return *this;//内指针
}
/*Date Date::operator ++(int) //定义后置++成员函数 dat++
{Date t;
days[1]=isleapyear()?29:28;
day++;
if(day>days[month-1])
{day=1;
month++;
}
if(month>12)
{month=1;
year++;
}
return t;
}*/
bool Date::judgelegal() //定义所输入日期合法性的Date类成员函数
case 5:
case 7:
case 8:
case 10:
case 12: if(day>0&&day<=31&&cin.good()) {flg=1;f2=1;break;}
else {cout<<"所输入日期超出本月天数!!!\n";continue;}
{int year,month,day,week;
int flag=1,flg=0;
int f0=0,f1=0,f2=0;
Date dat;
while(flag==1) //flag用于手动输入功能选择标识,当输入值flag为1时表示继续生成万年历,否则退出整个程序wode
private:
static int days[12]; //申明静态数据成员:一年十二月每月天数
int year;
int month;
int day;
};
int Date::days[12]={31,28,31,30,31,30,31,31,30,31,30,31}; //定义静态成员
Date Date::operator ++() //定义前置++成员函数 ++dat
{days[1]=isleapyear()?29:28;
day++;
if(day>days[month-1])
{day=1;
month++;
case 2: if(year%4==0&&year%100!=0||year%400==0)
{
if(day>0&&day<=29&&cin.good()) {flg=1;f2=1;break;}
else {cout<<"所输入日期超出本月天数("<<year<<"年为瑞年 二月总天数为29天)!!!\n";continue;}
cin.sync_with_stdio();
switch(month) //对所输入的月份进行归类判断,从而进一步判断所输入打印日期的合法性,配合正确打印万年历
{
case 1:
case 3:
}
else
{
if(day>0&&day<=28&&cin.good()) {flg=1;f2=1;break;}
else {cout<<"所输入日期超出本月天数("<<year<<"年为平年 二月总天数为28天)!!!\n";continue;}
{
cin.clear(ios::goodbit); //清除cin流,并设置goodbit状态位,将一个出错的流的状态恢复为“好”。
fflush(stdin); //用来清空输入缓存,以便不影响后面输入的东西
cin.sync(); //清空输入缓冲区
cout<<"请输入月(1~12以内数字月份):\n";
cin>>month;
cin.sync();
cin.sync_with_stdio();
if(month<0||month>12||cin.fail()) cout<<"月份不合法!重新输入……\n";
}
int Get_week(){return GetTotaldays()%7;} //定义获取所输入当天在一周内的星期数的成员函数
Date operator ++(); //前置++
Date operator ++(int); //后置++
days[1]=isleapyear()?29:28;
for(int i=1;i<month;i++)
n+=days[i-1];
n+=day;
return n; //为生成万年历做准备
#include <iostream>
#include <stdio.h>
#include <wind数库,如fflush(stdin)、cin.clear()等
#include <iomanip> //cin与cout的操纵运算子
}
default : cout<<"所输入月份不合法,超出1~12范围!!!\n";break;
}
if(f2==1) break;
}
}
}
break;
}//第一个for语句end
if(flg==1&&month>0&&month<=12) //若判断OK,则设置年月日并统计日期,同时打印万年历
sum+=days[i];
sum+=day;
return sum;
}
int GetTotaldays() //定义获取所输入日期离公元零年的总天数的成员函数
{int y=year-1,n;
n=y*365+y/4-y/100+y/400;
cin>>year;
if(year<0||year>=3000||cin.fail()) cout<<"年份不合法!重新输入……\n";