實現c++的萬年曆類
一直想做這個東西,從vc知識庫搜尋到乙個,可是**演算法有問題,許多的結果都是錯的。其他的**都是js的,沒辦法,自己動手。**雖短,心意一片。
從此後你想為自己的軟體增添點特色,放心的用吧,可以任意修改,傳播。
#ifndef _calendar_h
#define _calendar_h
#include
struct mydate;
class calendar;
~calendar(){};
long ldaysfrom1900(mydate date);//date與2023年相差的天數
uint lyeardays(uint y);//農曆y年的總天數
uint leapdays(uint y);//傳回農曆 y年閏月的天數
uint leapmonth(uint 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_slunar[100];//用於儲存農曆資訊
static dword lunarinfo;//
static uint solarmonth;
static char ssolarterm;
static dword dterminfo;
static char sftv;
};#endif
#include "calendar.h"
#include
dword calendar::lunarinfo=;
uint calendar::solarmonth=;
uint calendar::lyeardays(uint y)
return(sum+leapdays(y));
}uint calendar::leapdays(uint y)
else
}uint calendar::leapmonth(uint y)
uint calendar::monthdays(uint y,uint m)
long calendar::ldaysfrom1900(mydate date)
}return days;
}mydate calendar::lunar(mydate date)
if(offset<0)
retdate.year = i;
leap = leapmonth(i);
bool isleap = false;
for(i=1; i<13 && offset>0; i++)
else
if(isleap==true && i==(leap+1))
offset -= temp;
}if(offset==0 && leap>0 && i==leap+1)
else
}if(offset<=0)
retdate.month = i;
retdate.day = offset ;
retdate.isrunyue=isleap;
return retdate;
}char* calendar::getlunarstring (mydate date)
; /*天乾名稱*/
const char *cdizhi = ; /*地支名稱*/
const char *cshuxiang = ; /*屬相名稱*/
const char *cdayname = ;
const char *cmonname = ;
/*--生成農曆天乾、地支、屬相 ==> wnongli--*/
int nshuxiang = ((date.year - 4) % 60) % 12;
if ( nshuxiang < 0 || nshuxiang >= sizeof(cshuxiang)/sizeof(cshuxiang[0]) )
wsprintf(szshuxiang,"%s",cshuxiang[nshuxiang]);
int ntiangan = ((date.year - 4) % 60) % 10;
if ( ntiangan < 0 || ntiangan >= sizeof(ctiangan)/sizeof(ctiangan[0]) )
int ndizhi = ((date.year - 4) % 60) % 12;
if ( ndizhi < 0 || ndizhi >= sizeof(cdizhi)/sizeof(cdizhi[0]) )
wsprintf(sznongli,"%s(%s%s)年",szshuxiang,ctiangan[ntiangan],cdizhi[ndizhi]);
/*--生成農曆月、日 ==> wnongliday--*/
if ( date.month < 0 || date.month >= sizeof(cmonname)/sizeof(cmonname[0]) )
if (date.isrunyue)
else
strcat(sznongliday,"月");
if ( date.day < 0 || date.day >= sizeof(cdayname)/sizeof(cdayname[0]) )
strcat(sznongliday,cdayname[date.day]);
strcat(sznongli,sznongliday);
sprintf(m_slunar,sznongli);
return m_slunar;
}char* calendar::dayofweek(mydate date)
;if(date.month==1||date.month==2)
return cweekname[(date.day+1+2*date.month+3*(date.month+1)/5+date.year+date.year/4-date.year/100+date.year/400)%7];
}uint calendar::solardays(uint y,uint m)
else
}最近公司經營,每況日下,同事紛紛離職,感覺心傷,滋味難言。
您認為本文應該得 123
45共有6人參與打分
列印|收藏|討論
C實現萬年曆
要求 輸入年份輸出這一年的日曆 注意 公元1900年一月一日是星期一,這一年是平年 思路 獲取輸入的年份y,首先獲取從公元1900年到 y 1 年 的天數,然後獲得該年份的第一天是星期幾,進行輸出。這次例項,我花費了很長的時間,最後發現錯誤的原因出在在求某一年是閏年還是平年的時候,我沒有田間retu...
C 實現簡易萬年曆
如下 檔名稱 萬年曆.cpp 作 者 chenghan 完成日期 2019 1 10 版 本 號 1.0 問題描述 製作乙個簡單的萬年曆 include include using namespace std 判斷一年是否為閏年,是返回true 否返回false bool isleapyear in...
C 實現萬年曆功能
1.此萬年曆功能 1 日期加減天數 2 日期與日期之間的差值 3 輸入年月顯示當月日曆 2.實現 include include using namespace std class date bool judgerightdate 判斷值是否合法函式 else int judgeyear int y...