万年历系统源代码
- 格式:doc
- 大小:6.08 KB
- 文档页数:6
java万年历源代码第一个类:chaxun.javapackage wannianli;import java.util.*;public class chaxun {public static void main(String[] args) {Scanner input =new Scanner(System.in);String answer="y";for(;answer.equals("y");){week cn=new week();cn.weekDay();//调用方法System.out.print("\是否继续?");answer=input.next();}}}第二个类:tianshu.javapackage wannianli;import java.util.*;public class tianshu {int totalDay;//总共的天数int yueTian;//每月的天数public void jsts(){int days=0;//输入月份到当年的天数System.out.println("*************************************欢迎使用万年历*************************************");Scanner input=new Scanner(System.in);System.out.print("请输入年份:");//从键盘输入年份int year=input.nextInt();System.out.print("请输入月份:");//从键盘输入月份int yue=input.nextInt();/**判断每月的天数*/for(int index=1;index<=yue;index++){if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==1 2){//满足闰年的条件yueTian=31;}elseif(yue==2&&((year%4==0)&&(!(year%100==0))||(year%400== 0))){yueTian=29;}elseif(yue==2&&(!((year%4==0)&&(!(year%100==0))||(year%400= =0)))){yueTian=28;}else if(yue==4||yue==6||yue==9||yue==11){yueTian=30;}else{System.out.print("输入的月份不正确");}if(index<=yue){days=days+yueTian;}}/**判断是否是闰年*/for(int i=100;i<year;i++){< bdsfid="116" p=""></year;i++){<>if ((year%4==0)&&(!(year%100==0))||(year%400==0)){//满足闰年的条件totalDay=totalDay+366;}else{totalDay=totalDay+365;}}totalDay=totalDay+days;//System.out.println(totalDay+"天");//return totalDay+yueTian;}}第三个类:week.jvapackage wannianli;public class week {public void weekDay() {int monDay;//星期几tianshu cn=new tianshu();cn.jsts();int week=1+cn.totalDay%7;//System.out.println(""+week);if (week==7){// 求当月第一天monDay=0;// 周日}else{monDay=week;}/* 输出日历*/System.out.println("星期日\星期一\星期二\星期三\星期四\星期五\星期六");for(int nullNo=0;nullNo<monday;nullno++){< bdsfid="145"p=""></monday;nullno++){<>System.out.print("\");// 输出空格}for(int i=1;i<=cn.yueTian;i++){System.out.print(i+"\");//输出每月的号数if((cn.totalDay + i - 1) % 7 == 5){// 如果当天为周六,输出换行System.out.println();}}} }。
万年历的C语言编程实现源程序:#include<stdio.h>#include<stdlib.h>int Isleapyear(int y)/*判断是否是闰年*/{if((y%4==0&&y%100!=0)||(y%400==0))return 1;elsereturn 0;}int Getdaysofmonth(int y,int m)/*确定某个月的天数*/{int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};if(Isleapyear(y))/*如果是闰年则2月份的天数改变为29*/ months[2]=29;return months[m];}int Gettotaldays(int y,int m)/*计算从1901年1月开始到给定年月的天数*/{intmonths[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};int days=0;int i,j;if((Isleapyear(y)))months[2]=29;for(i=1901;i<y;i++)/*从1901年1月开始计算,累加y年之前的天数*/{if(Isleapyear(i))days+=366;elsedays+=365;}for(j=1;j<m;j++)/*累加m月之后的天数*/days+=months[j];return days;}int Getfirstdayintable(int y,int m)/*计算给定年月的第一天在日历表中的位置*/{int d;d=Gettotaldays(y,m);d=d+3;/*1901年1月1日是星期二,在日历中星期二是第三个位置*/d=d%7;return d;}void Showdate(int y,int m)/*显示日历*/{int first;int d;int i,k;first=Getfirstdayintable(y,m);/*得到第一天在日历中的第一个位置*/d=Getdaysofmonth(y,m);/*得到这个月的天数*/k=0;printf("-------------------------------------\n");printf(" SUN MON TUE WEN THU FRI STA\n");for(i=1;i<first;i++)/*打印第一天之前的空格*/{printf(" ");k++;/*k用于确定日历中是否回车*/}for(i=1;i<=d;i++){printf("%5d",i);/*每个具体的日期占5个字符的宽度*/k++;if(k==7)/*每行打印7个日期数字后回车*/{printf("\n");k=0;}}printf("\n-------------------------------------\n"); }int main(){int y,m;printf("Input year:");scanf("%d",&y);printf("Input month:");scanf("%d",&m);Showdate(y,m);return 0;}欢迎您的下载,资料仅供参考!致力为企业和个人提供合同协议,策划案计划书,学习资料等等打造全网一站式需求。
#include<iostream>#include<iomanip>#include <ctime>using namespace std;int dayofmonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int dd[12]={ 31,28,31,30,31,30,31,31,30,31,30,31 };class datee{private:int d,m,y;public:int isLeap( int y );int getDayPerMonth( int y , int m );int getNumDay( datee D );bool legalDate( datee D );void count();};/*ÅжÏÊÇ·ñÊÇÈòÄê*/int datee::isLeap( int y ){if( !(y%4)&&y%100 || !(y%400) )return 1;return 0;}/*¼ÆË㲻ͬÇé¿ö¶þÔ·ݵÄÌìÊý*/int datee::getDayPerMonth( int y , int m ){if( m==2 )return dd[1]+isLeap( y );return dd[m-1];}/*¼ÆËãʱ¼ä²î*/int datee::getNumDay( datee D ){int ret=0;int i;for( i=1 ; i<=D.y ; i++ )ret+=365+isLeap( D.y );for( i=1 ; i<D.m ; i++ )ret+=getDayPerMonth( D.y , i );ret+=D.d;return ret;}/*ÔËÓò¼¶ûÐͺ¯ÊýÅжÏÊäÈëÊý¾ÝµÄÕýÎó*/bool datee::legalDate( datee D ){if( D.y<0||D.y>9999 )return false;if( D.m<1||D.m>12 )return false;if( D.d<1||D.d>getDayPerMonth( D.y , D.m ) )return false;return true;}void datee::count(){long day;datee sysDate,date;cout<<"please input what date you want to compared:"<<endl; cout<<"year month day"<<endl;cout<<"the one:";cin>>date.y>>date.m>>date.d;while( !legalDate(date) ){cout<<"illegal date,input again: "<<endl;cin>>date.y>>date.m>>date.d;}cout<<"the tow:";cin>>sysDate.y>>sysDate.m>>sysDate.d;while( !legalDate(sysDate) ){cout<<"illegal system date,input again: "<<endl;cin>>sysDate.y>>sysDate.m>>sysDate.d;}day=getNumDay(date)-getNumDay(sysDate);if(day<0)day=-day;cout<<"the time difference is :"<<endl<<day<<endl;}class Date{private:int year;int month;int day;public:void SetDate();int IsLeap(int year);void ShowDate();int getdays(int year,int month,int day);void showweek();void printmonth();void printyear();void input(){cin>>year>>month;while(month<1||month>12){cout<<"illegal month,please input again:"<<endl;cin>>year>>month;panduan();}}void panduan(){if(month<1||month>12){cout<<"illegal month,please input again:"<<endl;cin>>year>>month;}}};void Date::SetDate(){int yy,mm,dd;cout<<"please input the date:"<<endl<<"year month date"<<endl;cin>>yy>>mm>>dd;if(yy<=0){ cout<<"Year value error!"<<endl;}if(mm<=0&&mm>12){cout<<"Month value error!"<<endl;exit(1);}year=yy;month=mm;switch(month){case 4:case 6:case 9:case 11:{if(dd>=1&&dd<=30)day=dd;else{cout<<"Day value error!"<<endl;cout<<"please input again:"<<endl;cout<<"year month date"<<endl;cin>>yy>>mm>>dd;day=dd;}} break;case 2:{if(IsLeap(year)){if(dd>=1&&dd<=29)day=dd;else{cout<<"Day value error!"<<endl;cout<<"please input again:"<<endl;cout<<"year month date"<<endl;cin>>yy>>mm>>dd;day=dd;}}else{if(dd>=1&&dd<=28)day=dd;else{cout<<"Day value error!"<<endl;cout<<"please input again:"<<endl;cout<<"year month date"<<endl;cin>>yy>>mm>>dd;day=dd;}}}break;default:{if(dd>=1&&dd<=31)day=dd;else{cout<<"Day value error!"<<endl;cout<<"please input again:"<<endl;cout<<"year month date"<<endl;cin>>yy>>mm>>dd;day=dd;}}}}int Date::IsLeap(int year){if(year%400==0||(year%100!=0&&year%4==0))return 1;elsereturn 0;}void Date::ShowDate(){cout<<year<<"-"<<month<<"-"<<day<<" ";}int Date::getdays(int year,int month,int day){int i,sum=0;for(i=1;i<year;i++){if(IsLeap(i))sum+=366;elsesum+=365;}if(IsLeap(year))dayofmonth[2]=29;for(i=1;i<month;i++)sum+=dayofmonth[i];sum+=day;return sum;}void Date::showweek(){int s;s=getdays(year,month,day)%7;switch(s){case 0:cout<<"Sunday"<<endl;break;case 1:cout<<"Monday"<<endl;break;case 2:cout<<"Tuesday"<<endl;break;case 3:cout<<"Wednesday"<<endl;break;case 4:cout<<"Thursday"<<endl;break;case 5:cout<<"Friday"<<endl;break;case 6:cout<<"Saturday"<<endl;break;}}void Date::printmonth(){if(year%4==0)cout<<" "<<year<<" "<<month<<" "<<"(ÈòÄê)"<<endl;elsecout<<" "<<year<<" "<<month<<" ¡¡"<<"(·ÇÈòÄê)"<<endl; cout<<"ÈÕ "<<"Ò» "<<"¶þ "<<"Èý"<<" ËÄ "<<"Îå "<<"Áù "<<endl;cout<<"Su "<<"Mo "<<"Tu "<<"We "<<"Th "<<"Fr "<<"Sa "<<endl;int s=getdays(year,month,1);s=s%7;for(int m=0;m<s;m++)cout<<" ";cout<<setw(2)<<setfill(' ')<<"1"<<" ";if(IsLeap(year)) dayofmonth[2]=29;int yue=dayofmonth[month];for(int i=2;i<8-s;i++)cout<<setw(2)<<setfill(' ')<<i<<' ';cout<<endl;int j;for(i=8-s,j=1;i<=yue;i++,j++){cout<<setw(2)<<setfill(' ')<<i<<' ';if(j%7==0)cout<<endl;}cout<<endl;}void Date::printyear(){int y,m;cin>>y;year=y;if(year%4==0)cout<<"------the year is "<<year<<"£¨ÈòÄ꣩"<<"----------"<<endl;elsecout<<"------the year is "<<year<<"£¨·ÇÈòÄ꣩"<<"---------"<<endl;for( m=1;m<13;m++) //×ܹ²12¸öÔ·Ý{cout<<" ***********************"<<endl;cout<<endl<<setw(5)<<m<<""<<year<<"Äê"<<setw(5)<<m<<"Ô·Ý"<<endl;cout<<" "<<"ÈÕ "<<"Ò» "<<"¶þ "<<"Èý"<<" ËÄ "<<"Îå "<<"Áù "<<endl;cout<<" "<<"Su "<<"Mo "<<"Tu "<<"We "<<"Th "<<"Fr "<<"Sa "<<endl;month=m;int s=getdays(year,month,1);s=s%7;for(int m=0;m<s;m++)cout<<" ";cout<<" "<<setw(2)<<setfill(' ')<<"1"<<" ";if(IsLeap(year)) dayofmonth[2]=29;int yue=dayofmonth[month];for(int i=2;i<8-s;i++)cout<<setw(2)<<setfill(' ')<<i<<' ';cout<<endl<<" ";int j;for(i=8-s,j=1;i<=yue;i++,j++){cout<<setw(2)<<setfill(' ')<<i<<' ';if(j%7==0)cout<<endl<<" ";}cout<<endl<<" ***********************"<<endl;}}class m{private:int a,b,number;public:void months(){if (b==1||b==3||b==5||b==7||b==8||b==10||b==12){number=31;}elseif(b==4||b==6||b==9||b==11){number=30;}elseif(b==2){if(a%4==0){number=29;}else{number=28;}}cout<<number<<endl;}void month(){cin>>a>>b;if(b>0&&b<13)months();else{cout<<"error!"<<endl;cout<<"please input again:"<<endl;cin>>a>>b;months();}}};int main(){int choose;char ch;Date mydate;system("title »¶Ó-ʹÓÃÍòÄêÀú!");while(choose!=0){cout<<"************************************************************"<<endl;cout<<" »¶Ó-ʹÓÃÍòÄêÀú! Ô¸ÄúʹÓõÄ˳ÐÄ£¬¿ªÐÄ!"<<endl;/*»ñȡϵͳʱ¼ä*/time_t timen;time(&timen);tm* t_tm = localtime(&timen);cout<<" ϵͳµ±Ç°Ê±¼äΪ: "<<t_tm->tm_year+1900<<"Äê"<<t_tm->tm_mon+1<<"ÔÂ"<<t_tm->tm_mday<<"ÈÕ"<<endl;cout<<"ÇëÑ¡Ôñ¡°0¡«5¡±"<<endl;cout<<"1£º¼ÆËãʱ¼ä²î 2£º²éѯijÔÂÌìÊý"<<endl;cout<<"3£º²éѯijÈÕÐÇÆÚ 4£ºÏÔʾijÄêÈÕÀú"<<endl;cout<<"5£º²éѯijÄêijÔÂÔÂÀú"<<endl;cout<<"0£ºÍ˳ö"<<endl;cout<<"******************************************************** ****"<<endl;cin>>choose;switch(choose) //¹¦ÄÜÑ¡Ôñ{case 1:datee myday;myday.count();/*ÅжÏÊÇ·ñÇåÆÁ²¢ÏÔʾÖ÷²Ëµ¥*/cout<<"please choose whether or not return the menu 'y'or other keys"<<endl;cin>>ch;if(ch=='y'){system("cls");//ÇåÆÁ£¬²¢·µ»ØÖ÷²Ëµ¥system("COLOR a1");break;}elsebreak; //ÏÔʾÖ÷²Ëµ¥case 2:cout<<"please input what you wangt to know the year,month:";m a;a.month();cout<<"please choose whether or not return the menu 'y'or other keys"<<endl;cin>>ch;if(ch=='y'){system("cls");system("COLOR 1b");break;}elsebreak;case 3:mydate.SetDate();mydate.ShowDate();mydate.showweek();mydate.printmonth();cout<<"please choose whether or not return the menu 'y'or other keys"<<endl;cin>>ch;if(ch=='y'){system("cls");system("COLOR 6e");break;}elsebreak;case 4:cout<<"please input what years you want to know£º";cout<<endl;mydate.printyear();cout<<"please choose whether or not return the menu 'y'or other keys"<<endl;cin>>ch;if(ch=='y'){system("cls");system("COLOR 3d");break;}elsebreak;case 5:cout<<"please input the year,month what you want to know."<<endl;mydate.input();mydate.printmonth();cout<<"please choose whether or not return the menu 'y' or other keys"<<endl;cin>>ch;if(ch=='y'){system("cls");system("COLOR 55");break;}elsebreak;case 0:cout<<"ллʹÓÃÍòÄêÀúϵͳ£¬Çë¹Ø±Õ!!!!!"<<endl;exit(0);break;default:cout<<"ÄúÊäÈëÓÐÎó£¬ÇëÖØÐÂÊäÈë"<<endl;}}return 0;}。
C++实现万年历源代码本⽂实例为⼤家分享了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);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;elsep++;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;elsep--;if(p<0)for(int h=1;h<12;h=h+2){Printtitle(h);if(((m%4==0)&&(m%100!=0))||(m%400==0))a[1]=29;elsea[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;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]<<" ";}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)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;}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
#include<stdio.h>#include<time.h>#include<math.h>#include<windows.h>#include<conio.h>#define KEYNUMUp 0x48#define KEYNUMDown 0x50#define KEYNUMLeft 0x4b#define KEYNUMRight 0x4d#define KEYNUMPageUp 0x49#define KEYNUMPageDown 0x51int year,month,day; //全局变量记录时间intdaysOfMonth[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31, 31,30,31, 30,31}};int runYear(int year) //判断是否是闰年{int flag=0;if(year%400==0||(year%4==0&&year%100!=0))flag=1;return flag;}struct tm* getDay()//从系统取得当前时间{time_t timer;struct tm* gmt;time(&timer);gmt=localtime(&timer);return gmt;}int dayExame(int year,int month,int day)//检查日期是否正确{if(year<0||month<1||month>12||day<1||day>31)return 0;switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:if(day>31)return 0;break;case 4:case 6:case 9:case 11:if(day>30)return 0;break;default:if(runYear(year)&&day>29)return 0;else if(runYear(year)==0&&day>28)return 0;}return 1;}int getwDay(int year,int month,int day)//取得星期{int nday=0,nDay,i,w;for(i=0;i<month-1;i++)nday+=daysOfMonth[runYear(year)][i];nday+=day;nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday;w=nDay%7;return w;}void printCalender(int year,int month,int day);void setDay(int &year,int &month,int &day)//调节日期{printf("%c:上一年 %c:下一年\n",24,25);printf("%c:上个月 %c:下个月\n",27,26);printf("PageUp:昨天 PageDown:明天\n");printf("其他:返回主菜单\n");char k;getch();k=getch();switch(k) //通过方向键和PageUp、PageDown键来调整日期{case KEYNUMUp: year--;if(dayExame(year,month,day)==0){year++; printf("%c",7);} //检查日期的合法性,//若错误,保持日期不变,并警告system("cls");printCalender(year,month,day);setDay(year,month,day);break;case KEYNUMDown: year++;if(dayExame(year,month,day)==0){year--;printf("%c",7);}system("cls");printCalender(year,month,day);setDay(year,month,day);break;case KEYNUMLeft: month--;if(dayExame(year,month,day)==0){month++;printf("%c",7);}system("cls");printCalender(year,month,day);setDay(year,month,day);break;case KEYNUMRight: month++;if(dayExame(year,month,day)==0){month--;printf("%c",7);}system("cls");printCalender(year,month,day);setDay(year,month,day);break;case KEYNUMPageUp: day--;if(dayExame(year,month,day)==0){day++;printf("%c",7);}system("cls");printCalender(year,month,day);setDay(year,month,day);break;case KEYNUMPageDown: day++;if(dayExame(year,month,day)==0){day--;printf("%c",7);}system("cls");printCalender(year,month,day);setDay(year,month,day);break;default: ;}}void printCalender(int year,int month,int day)//打印月历{int i;char wday[7][4]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};printf(" %d年%d月%d日\n",year,month,day);printf("***********************************\n");for(i=0;i<7;i++)printf("%5s",wday[i]);printf("\n");int w;int nowDay=1;w=getwDay(year,month,nowDay);//找到第一天的星期int n;n=daysOfMonth[runYear(year)][month-1];switch(w) //放置第一天{case 0:printf("%5d",nowDay);break;case 1:printf("%10d",nowDay);break;case 2:printf("%15d",nowDay);break;case 3:printf("%20d",nowDay);break;case 4:printf("%25d",nowDay);break;case 5:printf("%30d",nowDay);break;default:printf("%35d\n",nowDay);}nowDay++;for(i=1;i<n;i++){w=getwDay(year,month,nowDay);printf("%5d",nowDay);if(w==6) //如果是星期六则换行打印puts("\n");nowDay++;}printf("\n***********************************\n\n");}void checkCalender()//查询日历{system("cls");int year,month,day;printf("请输入你要查询的日期(格式为年月日,如2011 12 22):");scanf("%d%d%d",&year,&month,&day);while(!dayExame(year,month,day)) //如果日期输入不正确,则重新输入{printf("%c你输入的日期错误,请重新输入:",7);scanf("%d%d%d",&year,&month,&day);}system("cls");if(runYear(year))printf("\n 闰年\n\n");else printf("\n 平年\n\n");printCalender(year,month,day);}void inline backMenu(){printf("请按任意字符键返回主菜单:");getch();system("cls");}void mainMenu(int &year,int &month,int &day)//主菜单{printf(" ************主菜单************\n");printf(" * 1、日历显示 *\n");printf(" * 2、日历查询 *\n");printf(" * 3、修改日期 *\n");printf(" * 4、帮助 *\n");printf(" * 5、退出 *\n");printf(" ******************************\n");char menu[100];int flag=0;do{int f=0;do{f=0;printf("\n 请输入相应数字:");scanf("%s",menu);if(strlen(menu)>2)f=1;}while(f==1);switch(*menu){case '1':system("cls"); //清屏printCalender(year,month,day);backMenu(); //实现任意键返回主菜单mainMenu(year,month,day);break;case '2':system("cls");checkCalender();backMenu();mainMenu(year,month,day);break;case '3':system("cls");printCalender(year,month,day);setDay(year,month,day);printf("请按任意字符键返回主菜单:");getch();system("cls");mainMenu(year,month,day);break;case '4':system("cls");printf("在主菜单中输入相应的数字就可以完成以下功能:\n\n");printf("* 1、显示今天所在月的月份\n\n");printf("* 2、输入日期,判断该年是否是闰年,并显示所在月份的月历\n\n");printf("* 3、用%c %c %c %c PageUp PageDown 进行日期的调整\n\n",24,25,27,26);printf("* 4、显示功能及操作方法\n\n");printf("* 5、退出程序\n\n");backMenu();mainMenu(year,month,day);break;case '5':system("cls");printf("程序已退出!\n");exit(0);default:printf("%c 输入错误!\n",7);flag=1;}}while(flag);}void main(){struct tm *gmt=getDay();year=gmt->tm_year+1900;month=gmt->tm_mon+1;day=gmt->tm_mday;printCalender(year,month,day);//用系统时间进行初始化,打印当前月历backMenu();mainMenu(year,month,day);}。