| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1383 人关注过本帖
标题:[求助]续:一段关于万年历的代码,如何精简?
取消只看楼主 加入收藏
南方闲人
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-7-17
收藏
 问题点数:0 回复次数:3 
[求助]续:一段关于万年历的代码,如何精简?


接前面发出的贴子,代码也接前。
FUNC DaysPerLunarMonth(lyear,lmonth)
ProcessMagicStr(lyear)
IF lmonth < 0
RETURN interdays
ELSE
RETURN LMDAY[LMonth]
ENDIF

**************************************
FUNC solar2lunar(syear,smonth,sday)
STORE 0 to I, nDay
nDay= 0
IF IsLeapYear(syear)
SMDay[2] = 29
ELSE
* SMDay[2] = 28
ENDIF
ProcessMagicStr(syear)
IF (smonth == 1)
nDay = sday
ELSE
FOR I=1 to smonth-1 step 1
nDay = nDay + SMDay[i]
ENDFOR
nDay = nDay + sday
ENDIF
IF nDay <= SLRangeDay
nDay = nDay - SLRangeDay
ProcessMagicStr(syear-1)
FOR I=12 to 1 step -1
nDay = nDay + LMDAY[i]
IF nDay > 0
EXIT
ENDIF
ENDFOR
lyear = syear - 1
lmonth= I
lday = nDay
ELSE
nDay = nDay - SLRangeDay
FOR I=1 to InterMonth-1 step 1
nDay = nDay - LMDAY[i]
IF nDay <= 0
EXIT
ENDIF
ENDFOR
IF nDay <= 0
lyear = syear
lmonth = I
lday = nDay + LMDAY[i]
ELSE
nDay = nDay - LMDAY[InterMonth]
IF nDay <= 0
lyear = syear
lmonth = InterMonth
lday = nDay + LMDAY[InterMonth]
ELSE
LMDAY[InterMonth] = interdays
FOR I=InterMonth to 12 step 1
nDay = nDay - LMDAY[i]
IF nDay <= 0
EXIT
ENDIF
ENDFOR

IF I= InterMonth
lmonth= 0 - InterMonth
lyear = syear
lday = nDay + LMDAY[i]
ELSE
lmonth =I
lyear = syear
lday = nDay + LMDAY[i]
ENDIF
* LYear = SYear
* LDay = nDay + ThisForm.LMDay[i]
ENDIF
ENDIF
ENDIF

nlYear=lyear
NlMonth=lmonth
NlDay=lday
IF lmonth<0
lmonth=-lmonth
RETURN "闰"+HZMonth[LMonth]+HZday[LDay]
ELSE
RETURN HZMonth[LMonth]+HZday[LDay]
ENDIF
********************************************************
FUNC lSolarTerm(date)
LOCAL baseDateAndTime
LOCAL newDate
LOCAL num
LOCAL tempStr
LOCAL y
LOCAL AAA1
LOCAL AAA2   
Y=year(date)
baseDateAndTime=ctod("1900/01/06")
tempStr=""
FOR I=1 To 24
num=365.24219444444444*(y-1900)+(sTermInfo[i]/60/24)
xiaoshi=num-int(num)
IF xiaoshi>=0.91319444444444
num=int(num+1)
ELSE
num=int(num)
ENDIF
newDate=baseDateAndTime+num
AAA1=dtoc(date)
AAA2=ctod(AAA1)
IF newDate=AAA2
tempStr=SolarTerm[i]
EXIT
ENDIF
ENDFOR
RETU tempStr
*********************************************
FUNCTION NMONTH(date)
LOCAL baseDateAndTime2
LOCAL newDate2
LOCAL num2
LOCAL tempStr2
LOCAL y2
Y2=year(date)
baseDateAndTime2=ctod("1900/02/04")
tempStr2 = ""
FOR x= 1 To 12
num2 = 365.24219444444444*(y2-1900)+(sTermInfo1[x]/60/24)
xiaoshi2=num2-int(num2)
IF xiaoshi2>= 0.91319444444444
num2=int(num2+1)
ELSE
num2=int(num2)
ENDIF
newDate2=baseDateAndTime2+num2
IF newDate2>=date

EXIT
ENDIF
ENDFOR
RETURN x
*********************************************

CANCEL

搜索更多相关主题的帖子: 万年历 代码 syear nDay 精简 
2007-07-20 22:15
南方闲人
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-7-17
收藏
得分:0 
在下经数日动脑,已经将其中一个问题解决,即如何将结果输出到TEXT1之中?方法是:将NONGLI()赋给一个变量,再将其在TETURN中返回即可。程序中虽然有10多个NONGLI(),可以用“+”连接即可以了。不知是否还有更佳的解法?盼望指正。
2007-07-24 22:53
南方闲人
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-7-17
收藏
得分:0 
在下是从网上一个将公历简单地转为农历的代码改编而成,原代码不涉及到农历中的天干与地支计算,在下全部重新配置了一下,但尚不完善,盼望能得到各位朋友指点,下一步,在下想以此为基础,编一个有关玄学的小软件,不知最终能如愿否?
2007-07-25 20:40
南方闲人
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-7-17
收藏
得分:0 

谢谢楼上的Tigre5392朋友!

2007-07-29 20:09
快速回复:[求助]续:一段关于万年历的代码,如何精简?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.048137 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved