1、C+万年历课程设计报告#ifndef _CALENDAR_H#define _CALENDAR_H #include struct myDATE int year; int month; int day; bool isRunYue; class calendarpublic: calendar(); calendar(); LONG lDaysFrom1900(myDATE date);/date与1900年相差的天数 UINT lYearDays(UINT y);/农历y年的总天数 UINT leapDays(UINT y);/传回农历 y年闰月的天数 UINT leapMonth(UIN
2、T y);/ 传回农历 y年闰哪个月 1-12 , 没闰传回 0 UINT monthDays(UINT y,UINT m);/传回农历 y年m月的总天数 myDATE Lunar(myDATE date);/输入阳历日期,返回阴历日期 char* dayOfWeek(myDATE date);/输入阳历日期,返回星期几 char* getLunarString (myDATE date );/ 输入阴历日期,得到表示农历的字串 UINT solarDays(UINT y,UINT m);/传回国历 y年某m+1月的天数 private: char m_slunar100;/用于存储农历信息
3、static DWORD lunarInfo;/ static UINT solarmonth; static char sSolarTerm; static DWORD dTermInfo; static char sFtv; ;#endif /#include calendar.h#include DWORD calendar:lunarInfo= 0x04bd8,0x04ae0,0x0a570,0x054d5,0x0d260,0x0d950,0x16554,0x056a0,0x09ad0,0x055d2, 0x04ae0,0x0a5b6,0x0a4d0,0x0d250,0x1d255,0
4、x0b540,0x0d6a0,0x0ada2,0x095b0,0x14977, 0x04970,0x0a4b0,0x0b4b5,0x06a50,0x06d40,0x1ab54,0x02b60,0x09570,0x052f2,0x04970, 0x06566,0x0d4a0,0x0ea50,0x06e95,0x05ad0,0x02b60,0x186e3,0x092e0,0x1c8d7,0x0c950, 0x0d4a0,0x1d8a6,0x0b550,0x056a0,0x1a5b4,0x025d0,0x092d0,0x0d2b2,0x0a950,0x0b557, 0x06ca0,0x0b550,0
5、x15355,0x04da0,0x0a5d0,0x14573,0x052d0,0x0a9a8,0x0e950,0x06aa0, 0x0aea6,0x0ab50,0x04b60,0x0aae4,0x0a570,0x05260,0x0f263,0x0d950,0x05b57,0x056a0, 0x096d0,0x04dd5,0x04ad0,0x0a4d0,0x0d4d4,0x0d250,0x0d558,0x0b540,0x0b5a0,0x195a6, 0x095b0,0x049b0,0x0a974,0x0a4b0,0x0b27a,0x06a50,0x06d40,0x0af46,0x0ab60,0x
6、09570, 0x04af5,0x04970,0x064b0,0x074a3,0x0ea50,0x06b58,0x055c0,0x0ab60,0x096d5,0x092e0, 0x0c960,0x0d954,0x0d4a0,0x0da50,0x07552,0x056a0,0x0abb7,0x025d0,0x092d0,0x0cab5, 0x0a950,0x0b4a0,0x0baa4,0x0ad50,0x055d9,0x04ba0,0x0a5b0,0x15176,0x052b0,0x0a930, 0x07954,0x06aa0,0x0ad50,0x05b52,0x04b60,0x0a6e6,0x
7、0a4e0,0x0d260,0x0ea65,0x0d530, 0x05aa0,0x076a3,0x096d0,0x04bd7,0x04ad0,0x0a4d0,0x1d0b6,0x0d250,0x0d520,0x0dd45, 0x0b5a0,0x056d0,0x055b2,0x049b0,0x0a577,0x0a4b0,0x0aa50,0x1b255,0x06d20,0x0ada0;UINT calendar:solarmonth=31,28,31,30,31,30,31,31,30,31,30,31;UINT calendar:lYearDays(UINT y) UINT i, sum = 3
8、48; for(i=0x8000; i0x8; i=1) sum += (lunarInfoy-1900 & i)? 1: 0; return(sum+leapDays(y); UINT calendar:leapDays(UINT y) if(leapMonth(y) return (lunarInfoy-1900 & 0x10000)? 30: 29; else return 0; UINT calendar:leapMonth(UINT y) return lunarInfoy-1900 & 0xf; UINT calendar:monthDays(UINT y,UINT m) retu
9、rn (lunarInfoy-1900 & (0x10000m)? 30: 29;LONG calendar:lDaysFrom1900(myDATE date) LONG days; days=365*date.year+(date.year-1)/4-(date.year-1)/100+(date.year-1)/400- (365*1900+(1900-1)/4-(1900-1)/100+(1900-1)/400); for(int i=0;i2) days+; return days; myDATE calendar:Lunar(myDATE date) LONG offset; in
10、t i, leap=0, temp=0; myDATE retdate; offset=lDaysFrom1900(date)-30; for(i=1900; i0; i+) temp = lYearDays(i); offset -= temp; if(offset0) offset += temp; i-; retdate.year = i; leap = leapMonth(i); bool isLeap = false; for(i=1; i0; i+) if(leap0 & i=(leap+1) & isLeap=false) -i; isLeap = true; temp = le
11、apDays(retdate.year); else temp = monthDays(retdate.year, i); if(isLeap=true & i=(leap+1) isLeap = false; offset -= temp; if(offset=0 & leap0 & i=leap+1) if(isLeap) isLeap = false; else isLeap = true; -i; if(offset wNongli-*/ int nShuXiang = (date.year - 4) % 60) % 12; if ( nShuXiang = sizeof(cShuXiang)/sizeof(cShuXiang0) ) return NULL ; wsprintf(szShuXiang,%s,cShuXiangnShuXiang); int nTianGan = (date.year - 4) % 60) % 10; if ( nTianGan 0 | n
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1