實現C 的萬年曆類

2021-04-13 00:27:10 字數 3410 閱讀 4044

實現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...