1、万年历c+Mian函数#include #include date.husing namespace std;int main() char i=9; int yy,mm,dd;/用来接收日期 Query q; q.showMenu(); calender c;/用来接收日期 coutyymmdd; c.readcalender(yy,mm,dd); couti; system(cls); /清除屏幕 q.showMenu(); q.doMenu(i); q.showTip(); return 0;Date.h#ifndef DATE_H_INCLUDED#define DATE_H_INCL
2、UDED#include#include#include#include #include#include#includeusing namespace std;class calenderprivate: int day; int month; int year;public: calender(); calender(int d,int m,int y):day(d),month(m),year(y) int dayInMnoth();/返回该月的天数,如闰年二月的天数,29 int getMonth();/返回当前日期的月份 int getYear(); int getDay(); bo
3、ol isLeapYear();/判断闰年 int numeberOfdays();/返回一月份以来的天数 void setMonth(int mm);/更新当前日期的月份 void setYear(int yy); void setDay(int dd); int differDays();/距离1990.1.1相差多少天 int differDays(calender &d1);/相差多少天 int firstDay();/当月的第一天是星期几 void displayTitle();/输出月份和年份以及后面的星期几的名称 void displayDates();/输出星期几下面的日期 v
4、oid readcalender(int yy,int mm,int dd);/读入日期 void weekDay();class Querypublic: calender c; Query(); void QueryYear();/查询一年的日历 void QueryMonth();/查询某年某月的日历表 void QueryDay();/查询某年某月的某天 void QuerydifferDays();/计时倒数天数 void showMenu();/显示菜单 void showTip();/显示操作提示 void doMenu(char n);#endif / DATE_H_INCLU
5、DED实现文件Date.cpp#includedate.hcalender:calender() year=0; month=0; day=0;int calender:getMonth()/返回当前日期的月份 return month;int calender:getYear() return year;int calender:getDay() return day;int calender:dayInMnoth()/返回当月的天数 switch(getMonth() case 1: return 31; break; case 2: return 28+isLeapYear(); bre
6、ak; case 3: return 31; break; case 4: return 30; break; case 5: return 31; break; case 6: return 30; break; case 7: return 31; break; case 8: return 31; break; case 9: return 30; break; case 10: return 31; break; case 11: return 30; break; case 12: return 31; break; return 0;bool calender:isLeapYear
7、()/闰年的判断,返回true为闰年 int n=getYear(); if(n%4) if(n%100=0) if(n%400=0) return true; else return false; else return true; else return false;int calender:numeberOfdays()/返回一月份以来的天数 int n=getDay(); switch(getMonth()-1) case 0: return n; break; case 1: return n+31; break; case 2: return n+31+28+isLeapYear(
8、); break; case 3: return n+31+28+isLeapYear()+31; break; case 4: return n+31+28+isLeapYear()+31+30; break; case 5: return n+31+28+isLeapYear()+31+30+31; break; case 6: return n+31+28+isLeapYear()+31+30+31+30; break; case 7: return n+31+28+isLeapYear()+31+30+31+30+31; break; case 8: return n+31+28+is
9、LeapYear()+31+30+31+30+31+31; break; case 9: return n+31+28+isLeapYear()+31+30+31+30+31+31+30; break; case 10: return n+31+28+isLeapYear()+31+30+31+30+31+31+30+31; break; case 11: return n+31+28+isLeapYear()+31+30+31+30+31+31+30+31+30; break; return 0;int calender:differDays()/距离1900.1.1相差多少天 int n;
10、 calender d0(1,1,1900); /以1900年一月一日为起点,当天为星期一 if(getYear()-d0.getYear()%400!=100) n=(getYear()-d0.getYear()/4*1461+(getYear()-d0.getYear()%4)*365+numeberOfdays(); else n=(getYear()-d0.getYear()/4*1461+(getYear()-d0.getYear()%4)*365+1+numeberOfdays(); return n;int calender:differDays(calender &d1)/与某
11、个日期(d1)相差多少天 int n; if(abs(getYear()-d1.getYear()%400!=100) n=abs(getYear()-d1.getYear()/4*1461+(getYear()-d1.getYear()%4)*365+numeberOfdays(); else n=abs(getYear()-d1.getYear()/4*1461+abs(getYear()-d1.getYear()%4)*365+1+numeberOfdays(); return n;int calender:firstDay()/当月第一天是星期几 int l=differDays()-
12、getDay()+1;/当月第一天与1900年一月一日相差多少天 switch(l%7) case 0: return 0; break; case 1: return 1; break; case 2: return 2; break; case 3: return 3; break; case 4: return 4; break; case 5: return 5; break; case 6: return 6; break; return 0;void calender:setYear(int yy)/更新年份 if(yy1990) cout无法更新月份12|mm1) cout无法更
13、新月份31|dd1) cout无法更新天数endl; day=dd;void calender:displayDates()/打印日期 int monthLength=dayInMnoth(); int dayValue=1; int day=0,first=firstDay(); while(dayfirst) coutsetw(7) ; day+; while(dayValue=monthLength) coutsetw(7)dayValue; dayValue+; if(day=6) coutendl; day=(day+1)%7; if(day!=0) coutendl;void ca
14、lender:displayTitle()/打印月份与年份 switch(getMonth() case 1: cout一月 getYear()endl; break; case 2: cout二月 getYear()endl; break; case 3: cout三月 getYear()endl; break; case 4: cout四月 getYear()endl; break; case 5: cout五月 getYear()endl; break; case 6: cout六月 getYear()endl; break; case 7: cout七月 getYear()endl;
15、break; case 8: cout八月 getYear()endl; break; case 9: cout九月 getYear()endl; break; case 10: cout十月 getYear()endl; break; case 11: cout十一月 getYear()endl; break; case 12: cout十二月 getYear()endl; break; default: cout错误!endl; break; cout星期一 星期二 星期三 星期四 星期五 星期六 星期日 0) setDay(dd); else setDay(0); if(mm0) set
16、Month(mm); else setMonth(0); setYear(yy);void calender:weekDay()/确认某天是星期几 switch(differDays()%7) case 0: cout星期日 ; break; case 1: cout星期一 ; break; case 2: cout星期二 ; break; case 3: cout星期三 ; break; case 4: cout星期四 ; break; case 5: cout星期五 ; break; case 6: cout星期六 ; break; Query:Query() c.setDay(0); c
17、.setMonth(0); c.setYear(0);void Query:QueryYear()/查询一年的日历 int mm; for(c.setMonth(mm=0); mm12; +mm) c.displayTitle(); c.displayDates(); void Query:QueryMonth()/查询某年某月的日历表 c.displayTitle(); c.displayDates();void Query:QueryDay()/查询某年某月的某天是星期几 c.weekDay();void Query:QuerydifferDays()/计时倒数天数 c.differDay
18、s(); calender d; int yy,mm,dd; coutyymmdd; d.readcalender(yy,mm,dd); cout距离d.getYear()年d.getMonth()月d.getDay()日还有d.differDays()-c.differDays()天;void Query:showMenu()/显示菜单 cout|-|endl; cout| 万 年 历 |endl; cout|-|endl; cout| 1.查询某月的月历 |endl; cout| 2.打印某年的日历 |endl; cout| 3.距离某日倒计时 |endl; cout| 4.某日具体星期几
19、 |endl; cout| 0.安全退出本系统 |endl; cout|-|endlendl;void Query:showTip()/显示操作提示 coutendl; cout-操作完成-endl; cout-选择04继续-endl; cout请选择:;void Query:doMenu(char n)/执行菜单 switch(n) case 1: QueryMonth(); break; case 2: QueryYear(); break; case 3: QuerydifferDays(); break; case 4: QueryDay(); break; case 0: exit(1); break; default: cout输入错误!;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1