时间:2021-05-20
本文实例为大家分享了C++实现万年历的具体代码,供大家参考,具体内容如下
#include<iostream>#include<string>#include<fstream>#include<iomanip>using namespace std;#include<time.h>ofstream fout("日历.txt");void Printtitle(int n);int OrEndl(int n);string Choose(); //选择功能int Calculate(int mon,int day);void Printday(int a);void FirstDay(int wday);void SomeYear(int p);void ThisMonth(); //打印当月日历的主函数void PrintFirstNum(int mon);void Printyear(int year);void ThisYear(int p); //打印当年日历的主函数void Month(int n);void Printnum(int q,int mon);int Firstwday[12]; //储存每个月1号的星期数 struct tm *local;string ch; int a[12]={31,28,31,30,31,30,31,31,30,31,30,31}; //储存每月的天数int main(void){ long t; time(&t); local=localtime(&t); local->tm_year=local->tm_year+1900; local->tm_mon++; cout<<"今天是:"<<local->tm_year<<"年"<<local->tm_mon <<"月"<<local->tm_mday<<"日,"; fout<<"今天是:"<<local->tm_year<<"年"<<local->tm_mon <<"月"<<local->tm_mday<<"日,"; Month(local->tm_wday); cout<<endl; fout<<endl; cout<<"当前时间是:"<<local->tm_hour<<"时"<<local->tm_min<<"分"<<local->tm_sec <<"秒"<<local->tm_wday<<endl; fout<<"当前时间是:"<<local->tm_hour<<"时"<<local->tm_min<<"分"<<local->tm_sec <<"秒"<<local->tm_wday<<endl; string flag; int sum; if(((local->tm_year%4==0)&&(local->tm_year%100!=0))||(local->tm_year%400==0)) a[1]=29; sum=Calculate(local->tm_mon,local->tm_mday); int p=sum-(local->tm_wday+1)-(sum/7)*7; do{ flag=Choose(); if(flag=="1") //根据选择的数字确定调用哪个函数 ThisMonth(); else if(flag=="2") ThisYear(p); else if(flag=="3") SomeYear(p); else if(flag=="4") break; else { cout<<"输入错误"<<endl; fout<<"输入错误"<<endl; continue; } }while(1); return 0;}string Choose() { cout<<"请选择"<<"1、当月日历"<<endl<<" 2、当年日历"<<endl <<" 3、万年历"<<endl<<" 4、退出"<<endl; fout<<"请选择"<<"1、当月日历"<<endl<<" 2、当年日历"<<endl <<" 3、万年历"<<endl<<" 4、退出"<<endl; cin>>ch; fout<<ch; cout<<endl; fout<<endl; return ch; }void ThisMonth() { int m=local->tm_mon%12; Printtitle(m); int p=local->tm_mday-(local->tm_wday+1)-(local->tm_mday/7)*7; Printnum(p,local->tm_mon);}void ThisYear(int p) { FirstDay(p); Printyear(local->tm_year); for(int a=1;a<12;a=a+2) { Printtitle(a); PrintFirstNum(a); }}void SomeYear(int p) //打印万年历的主函数{ int m; cout<<"Please enter a year number"<<endl; fout<<"Please enter a year number"<<endl; while(1) { scanf("%d",&m); if( m<0 ) { printf("\nInput error,Please enter a year number again:\n"); fflush(stdin); //没加这句话会死循环,加了就ok } else break; } fout<<m; cout<<endl; fout<<endl; Printyear(m); int n=m; if(n<local->tm_year) //计算所输年份的1月1日星期几 { for(;n<local->tm_year;n++) { if(((n%4==0)&&(n%100!=0))||(n%400==0)) p=p+2; else p++; if(p>=7) p=p-7; } } else { for(;n>local->tm_year;n--) { if(((n%4==0)&&(n%100!=0))||(n%400==0)) p=p-2; else p--; if(p<0) p=p+7; } }FirstDay(p); for(int h=1;h<12;h=h+2) { Printtitle(h); if(((m%4==0)&&(m%100!=0))||(m%400==0)) a[1]=29; else a[1]=28; PrintFirstNum(h); }}void Printtitle(int n) //打印标题{ do{ cout<<" "; fout<<" "; char str[12][10]={"January","February","March","April","May","June","July","August","September","October","November","December"}; for(int h=0;h<10;h++) { cout<<str[n-1][h]; fout<<str[n-1][h]; } cout<<" "; fout<<" "; if(OrEndl(n)) break;n++; }while(!(n%2)); do{ cout<<"____________________________"; fout<<"____________________________";if(OrEndl(n)) break;n++;}while(!(n%2)); do{cout<<" Sun Mon Tue Wed Thu Fri Sat ";fout<<" Sun Mon Tue Wed Thu Fri Sat ";if(OrEndl(n)) break;n++; }while(!(n%2));}int Calculate(int mon,int day) //计算当天到当年1月1日的天数{ int sum=day;for(mon--;mon!=0;mon--) sum=sum+a[mon-1]; return sum;}void FirstDay(int wday) //推算每个月1号的星期数{ if(wday<=0) wday=wday+7; Firstwday[0]=7-wday; for(int n=0;n<11;n++) { Firstwday[n+1]= Firstwday[n]+a[n]%7; if(Firstwday[n+1]>6) Firstwday[n+1]=Firstwday[n+1]-7; }}int OrEndl(int n){ if(ch=="1") //如果是打出当月日历就直接跳出循环{ cout<<endl; fout<<endl; return 1;} if(n%2) //判断单月输空格,双月回车 { cout<<" "; fout<<" "; }else { cout<<endl; fout<<endl;}return 0;}void Printyear(int year) //打印年份{ int m=year/1000; int n=(year/100)%10; int p=(year/10)%10; int q=year%10; int num[4]={m,n,p,q}; char str[5][10][7]={"***** "," * ","***** ","***** ","* * ","***** ","***** ","***** ","***** ","***** ", "* * "," * "," * "," * ","* * ","* ","* "," * ","* * ","* * ", "* * "," * ","***** ","***** ","***** ","***** ","***** "," * ","***** ","***** ", "* * "," * ","* "," * "," * "," * ","* * "," * ","* * "," * ", "***** "," * ","***** ","***** "," * ","***** ","***** "," * ","***** ","***** ",}; for(int g=0;g<5;g++) { cout<<" "; fout<<" "; for(int i=0;i<4;i++) for(int h=0;h<7;h++) { cout<<str[g][num[i]][h]; fout<<str[g][num[i]][h]; } cout<<endl; fout<<endl; }}void PrintFirstNum(int mon) //打印每两个月的日历{ int mday[2]; //储存每两个月当前打印的日期 do{ int k=0; for(;k<Firstwday[mon-1];k++) { cout<<" "; fout<<" "; } k++; for(int d=1;k<8;d++,k++) //输入每个月的第一行 { cout<<" "<<d<<" "; fout<<" "<<d<<" "; } if(mon%2) //判断单月输空格,双月回车 { cout<<" "; fout<<" "; mday[mon%2-1]=d; } else { cout<<endl; fout<<endl; mday[mon%2+1]=d-1; } mon++; }while(!(mon%2)); mon=mon-2; int i=0,k=1,m=mon-1; for(;mday[i]<a[m]+1;mday[i]++,k++) { if(mday[i]<10) { cout<<" "<<mday[i]<<" "; fout<<" "<<mday[i]<<" "; } else { cout<<" "<<mday[i]<<" "; fout<<" "<<mday[i]<<" "; } if(k==7) { if(!i) { cout<<" "; fout<<" "; i=1; m++; } else { cout<<endl; fout<<endl; i=0; m--; } k=0; } } m=mon-1; if(mday[0]==a[m]+1&&mday[1]<a[m+1]+1) //当双月未结束,单月输入结束跳出时最后一行的输出情况 { for(;k<8;k++) { cout<<" "; fout<<" "; } cout<<" "; fout<<" "; k=1; for(mday[1]++;mday[1]<a[m+1]+1;mday[1]++,k++) { cout<<" "<<mday[1]<<" "; fout<<" "<<mday[1]<<" "; if(k==7) { cout<<endl; fout<<endl; cout<<" "; fout<<" "; } } cout<<endl; fout<<endl; } if(mday[0]<a[m]+1&&mday[1]==a[m+1]+1) //当单月未结束,双月输入结束跳出时最后一行的输出情况 { cout<<endl; fout<<endl; k=1; for(mday[0]++;mday[0]<a[m]+1;mday[0]++,k++) { cout<<" "<<mday[0]<<" "; fout<<" "<<mday[0]<<" "; if(k==7) { cout<<endl; fout<<endl; cout<<" "; fout<<" "; } } cout<<endl; fout<<endl; }}void Month(int n) { char str[7][7]={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"}; for(int h=0;h<7;h++) { cout<<str[n][h]; fout<<str[n][h]; }}void Printnum(int q,int mon) //打印当月日历{ if(q<0) q=q+7;int k=0; if(q!=7&&q) { for(;k<7-q;k++) { cout<<" "; fout<<" "; } } k++; for(int d=1;d<a[mon-1]+1;d++,k++) { cout<<setw(4)<<d; if(k==7) { cout<<endl; fout<<endl; k=0; } } cout<<endl; fout<<endl;}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例为大家分享了C++实现万年历的具体代码,供大家参考,具体内容如下用C++写了个简易的万年历。具体功能如下:1.打印指定年(用户输入)所有月份的年历2.打
本文实例为大家分享了C++实现简易的万年历,供大家参考,具体内容如下代码如下:/**文件名称:万年历.cpp*作者:chenghan*完成日期:2019/1/1
本文实例为大家分享了C++实现万年历的具体代码,供大家参考,具体内容如下1.此万年历功能1>日期加减天数2>日期与日期之间的差值3>输入年月显示当月日历2.代码
一般的电子万年历表都是挂在墙上的,如果环境潮湿的话,很可能会造成电子万年历的电路板轻微漏电,漏电以后电子万年历虽然可以走时,但是却失去了准确性。最简单的方法就是
一,Java实现万年历的代码:packagecalendar;importjava.util.Scanner;//日历项目publicclassRiLi{pub