畢業(yè)設(shè)計 基于Java GUI 的萬年歷系統(tǒng)的設(shè)計與實(shí)現(xiàn)_第1頁
畢業(yè)設(shè)計 基于Java GUI 的萬年歷系統(tǒng)的設(shè)計與實(shí)現(xiàn)_第2頁
畢業(yè)設(shè)計 基于Java GUI 的萬年歷系統(tǒng)的設(shè)計與實(shí)現(xiàn)_第3頁
畢業(yè)設(shè)計 基于Java GUI 的萬年歷系統(tǒng)的設(shè)計與實(shí)現(xiàn)_第4頁
畢業(yè)設(shè)計 基于Java GUI 的萬年歷系統(tǒng)的設(shè)計與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、目 錄1 需求分析32 總體設(shè)計42.1 設(shè)計的總體思想與算法描述42.2 模塊結(jié)構(gòu)圖5用戶查詢主界面設(shè)計模塊5用戶輸入查詢?nèi)諝v模塊6農(nóng)歷與公歷日期信息轉(zhuǎn)換模塊6相應(yīng)日期節(jié)日信息顯示模塊7查詢主界面效果更換模塊72.3 各模塊的功能與處理流程描述8用戶查詢主界面設(shè)計模塊功能和處理流程8用戶輸入查詢?nèi)諝v模塊9公歷和農(nóng)歷日期信息轉(zhuǎn)換模塊9相應(yīng)日期節(jié)日信息顯示模塊9查詢主界面效果更換模塊102.4 界面設(shè)計10萬年歷初始化界面10特定的日期查詢界面11特定的日期節(jié)日顯示界面(如春節(jié)、元宵節(jié))12特定的農(nóng)歷和公歷日期信息轉(zhuǎn)換界面13查詢主界面換膚功能展示界面143 各功能模塊程序設(shè)計163.1 查詢主

2、界面布局設(shè)計部分截取代碼163.2 公歷日期求解算法程序截取代碼183.3 農(nóng)歷與公歷轉(zhuǎn)換算法程序截取代碼213.4 節(jié)日求解算法程序?qū)崿F(xiàn)截取代碼264 小 結(jié)285 參考文獻(xiàn)29題目:基于Java GUI 的萬年歷系統(tǒng)的設(shè)計與實(shí)現(xiàn)開發(fā)平臺 :eclipse1 需求分析本系統(tǒng)所描述的萬年歷系統(tǒng)主要是基于Java GUI 來實(shí)現(xiàn)的。其主要功能是致力于為用戶提供方便快捷、準(zhǔn)確的日歷時間信息,以便用戶能夠迅速地查找出自己所需的相關(guān)日歷信息。本萬年歷系統(tǒng)主要的功能和任務(wù)是任意選擇一段時間內(nèi)的某個年份月份進(jìn)行查詢,對相關(guān)的日歷信息進(jìn)行公歷和農(nóng)歷的換算顯示,顯示相應(yīng)日期的節(jié)日信息等。功能描述:(1)日歷查

3、詢實(shí)現(xiàn):主要通過主界面頂端的兩個下拉列表框來選擇相應(yīng)待查詢的年份和月份以實(shí)現(xiàn)具體的月份的日歷查詢。(2)公歷和農(nóng)歷的時間換算:當(dāng)把鼠標(biāo)指針指向日歷表里的某個具體日期數(shù)字上時,會自動顯示相關(guān)的農(nóng)歷年份、月份、和生肖的相關(guān)信息。(3)節(jié)日信息的顯示:當(dāng)某個日期為某個特定的節(jié)日時,相應(yīng)的日期數(shù)字所在表格會顯示該節(jié)日信息,包括了陽歷和農(nóng)歷節(jié)日。(4)界面皮膚更改功能:當(dāng)要更改界面皮膚顏色時,只需要點(diǎn)擊界面右上角的顏色按鈕就可以更改相應(yīng)的顏色,是界面外觀效果得到改善。2 總體設(shè)計依據(jù)需求分析的結(jié)果,萬年歷系統(tǒng)應(yīng)設(shè)計成一個適合于用戶查詢需求的、易于操作的查詢系統(tǒng)軟件,下面從軟件的整體結(jié)構(gòu)設(shè)計、接口設(shè)計等方

4、面闡述一下系統(tǒng)的總體設(shè)計。2.1 設(shè)計的總體思想與算法描述依據(jù)查詢需求分析,萬年歷系統(tǒng)主要可以分為以下幾個功能模塊:用戶查詢主界面設(shè)計模塊、用戶輸入查詢?nèi)諝v模塊、公歷與農(nóng)歷日期信息轉(zhuǎn)換模塊、相應(yīng)日期節(jié)日信息顯示模塊和查詢主界面效果更換模塊。主要的算法有農(nóng)歷和公歷的換算算法,公歷日期號與星期的求解算法,相應(yīng)節(jié)日信息的生成算法,界面換膚算法,實(shí)時日期顯示算法等。系統(tǒng)總功能模塊如圖2-1所示:萬年歷查詢系統(tǒng)用戶查詢主界面設(shè)計模塊用戶輸入查詢?nèi)諝v模塊農(nóng)歷與公歷日期信息轉(zhuǎn)換模塊相應(yīng)日期節(jié)日信息顯示模塊查詢主界面效果更換模塊圖2-1 系統(tǒng)總功能模塊圖2.2 模塊結(jié)構(gòu)圖2.2.1 用戶查詢主界面設(shè)計模塊 該

5、模塊主要是將用戶查詢主界面按BorderLayout方式分成幾個主要區(qū)域,再對每個區(qū)域的組件進(jìn)行分區(qū)布局。用戶查詢主界面設(shè)計模塊主界面北部模塊設(shè)計主界面中部模塊設(shè)計北中部模塊設(shè)計北南部模塊設(shè)計中北部模塊設(shè)計中南部模塊設(shè)計中中部模塊設(shè)計圖2-2 用戶查詢主界面模塊圖 用戶輸入查詢?nèi)諝v模塊該模塊主要是通過兩個下拉列表框來讓用戶選擇相應(yīng)的要查詢的年份和月份,另外還可以通過“今天”按鈕迅速返回當(dāng)天的日歷信息。用戶輸入查詢?nèi)諝v模塊年份下拉列表框月份下拉列表框當(dāng)天日期返回按鈕圖2-3 用戶輸入查詢?nèi)諝v模塊圖2.2.3 農(nóng)歷與公歷日期信息轉(zhuǎn)換模塊該模塊主要用于對用戶選擇的日歷信息進(jìn)行農(nóng)歷和陽歷之間的轉(zhuǎn)換,當(dāng)

6、用戶把鼠標(biāo)指針指向相應(yīng)的日期時會自動出現(xiàn)顯示相應(yīng)農(nóng)歷信息的消息框。公歷日期信息顯示模塊農(nóng)歷日期信息顯示模塊鼠標(biāo)指向日期圖2-4 農(nóng)歷與公歷日期信息轉(zhuǎn)換示意圖2.2.4 相應(yīng)日期節(jié)日信息顯示模塊該模塊主要用于對某個特定的日期節(jié)日信息進(jìn)行顯示,當(dāng)查詢到某個日歷表時,相應(yīng)日歷月份的節(jié)日信息會自動顯示在日期數(shù)字表格內(nèi)。公歷日期信顯示模塊息公歷與農(nóng)歷節(jié)日顯示模塊圖2-5 相應(yīng)節(jié)日信息顯示模塊示意圖2.2.5 查詢主界面效果更換模塊 該模塊主要用于更改查詢界面的皮膚效果,主要有紅、黃、藍(lán)、綠四個主要界面效果。主界面皮膚效果更換模塊紅色按鈕控件顯示紅色皮膚藍(lán)色按鈕控件顯示藍(lán)色皮膚綠色按鈕控件顯示綠色皮膚默認(rèn)

7、按鈕空間恢復(fù)默認(rèn)皮膚樣式黃色按鈕控件顯示黃色皮膚圖2-6查詢主界面效果更換模塊示意圖2.3 各模塊的功能與處理流程描述 用戶查詢主界面設(shè)計模塊功能和處理流程該模塊主要按照java GUI 程序設(shè)計中的BorderLayout布局方式,首先將主界面分成東、西、南、北、中五個區(qū)域,其中忽略東部和西部兩個區(qū)域的布局,將主界面分成了北部、中部和南部三個區(qū)域。然后就這三個主要區(qū)域進(jìn)行分別地布局管理。北部區(qū)域又按照BorderLayout布局方式將其分為中部區(qū)域和南部區(qū)域。其中的中部區(qū)域添加了三個標(biāo)簽,分別為label1(提示標(biāo)簽)、label2(“年”)和label3(“月”),還有兩個下拉列表框com

8、boBoxYear和comboBoxMonth分別用來給用戶選擇要查詢的年份和月份。其中的南部區(qū)域則按FlowLayout布局方式添加了五個按鈕,分別為button1、button2、button3、button4和button5,分別通過添加相應(yīng)的ActionEvent事件來實(shí)現(xiàn)對界面膚色的改變功能。中部區(qū)域又按照BorderLayout布局方式將其分為北部區(qū)域、中部區(qū)域和南部區(qū)域。其中的北部區(qū)域用FlowLayout布局方式添加了一個按鈕button6和一個標(biāo)簽label4,按鈕用來返回當(dāng)天的日期信息,標(biāo)簽用來顯示當(dāng)天日期和系統(tǒng)具體時間信息。中部區(qū)域按GridLayout布局方式添加了7*

9、7個標(biāo)簽,分別用來顯示相應(yīng)的星期和每月當(dāng)中具體的每天的號數(shù)和節(jié)日等信息,屬于整個界面中最核心的部位。南部區(qū)域按FlowLayout布局方式添加了一個標(biāo)簽label5用來顯示相應(yīng)的提示和版權(quán)信息。2.3.2 用戶輸入查詢?nèi)諝v模塊該模塊屬于整個萬年歷系統(tǒng)中最為核心的模塊。用戶通過兩個下拉列表框來選擇相應(yīng)要查詢的月份和年份,然后系統(tǒng)會自動把對應(yīng)的年份中的月份所有信息顯示在日歷表格中。通過日歷表格顯示的信息,用戶可以清楚的知道一年中的每個月份、每一天的公歷、農(nóng)歷的信息和相應(yīng)的節(jié)日信息。公歷信息和所有的節(jié)日信息都自動地顯示在了日歷表格中,農(nóng)歷信息則只需要用戶將鼠標(biāo)停留在相應(yīng)的公歷日期號數(shù)上就會自動出現(xiàn)一

10、個信息框來顯示。該模塊當(dāng)屬整個系統(tǒng)中算法最為復(fù)雜的模塊。主要用到了公歷日期求解算法、公歷和農(nóng)歷轉(zhuǎn)換算法、節(jié)日求解和添加算法,具體算法求解程序請參考3部分的各功能模塊程序設(shè)計。2.3.3 公歷和農(nóng)歷日期信息轉(zhuǎn)換模塊該模塊主要通過公歷和農(nóng)歷轉(zhuǎn)換算法來實(shí)現(xiàn)了用戶可以通過公歷日期信息來獲取相應(yīng)的農(nóng)歷日期和節(jié)日信息的功能。具體算法求解程序參見3部分的程序代碼。2.3.4 相應(yīng)日期節(jié)日信息顯示模塊該模塊主要通過節(jié)日求解算法和將節(jié)日信息添加顯示到日期數(shù)字表格中的功能代碼來實(shí)現(xiàn)了顯示公歷和農(nóng)歷節(jié)日信息的功能。具體算法求解程序參見3部分的程序代碼。 查詢主界面效果更換模塊該模塊主要通過給五個按鈕添加相應(yīng)的事件響

11、應(yīng)代碼程序來實(shí)現(xiàn)了給查詢主界面更換膚色效果的功能。具體的算法實(shí)現(xiàn)程序參見3部分的程序代碼。2.4 界面設(shè)計 萬年歷初始化界面圖2-7 萬年歷初始化界面 特定的日期查詢界面圖2-8 特定日期查詢界面(如2020年1月3號) 特定的日期節(jié)日顯示界面(如春節(jié)、元宵節(jié))圖2-9特定的日期節(jié)日顯示界面(如春節(jié)、元宵節(jié)等) 特定的農(nóng)歷和公歷日期信息轉(zhuǎn)換界面圖2-10特定的農(nóng)歷和公歷日期信息轉(zhuǎn)換界面 查詢主界面換膚功能展示界面圖2-11查詢主界面換膚功能展示界面一圖2-12查詢主界面換膚功能展示界面二圖2-13查詢主界面換膚功能展示界面二 3 各功能模塊程序設(shè)計 3.1 查詢主界面布局設(shè)計部分截取代碼pan

12、elCenter = new JPanel(new BorderLayout();panelCenterNorth = new JPanel(new FlowLayout(FlowLayout.CENTER);panelCenterNorth.setBorder(BorderFactory.createEtchedBorder();final JButton button6 = new JButton("今天");button6.addActionListener(new ActionListener()public void actionPerformed(ActionE

13、vent e)if(e.getSource()=button6)try updateMonthDays(y, m); catch (ParseException e1) / TODO Auto-generated catch blocke1.printStackTrace(); comboBoxMonth.setSelectedIndex(m-1); comboBoxYear.setSelectedIndex(y-1901););panelCenterNorth.add(button6);label4 = new JLabel("",JLabel.CENTER);label

14、4.setText("北京時間:"+str);label4.add(new Clock(this);panelCenterNorth.add(label4);panelCenter.add(panelCenterNorth,BorderLayout.NORTH);panelCenters = new JPanel(new GridLayout(7,7,3,3);panelCenters.setBorder(BorderFactory.createEtchedBorder(); for(int i=0;i<7;i+) labeli=new JLabel(weekdays

15、i,JLabel.CENTER); labeli.setFont(font2); labeli.setForeground(Color.blue); labeli.setBorder(BorderFactory.createEtchedBorder(); panelCenters.add(labeli); for(int i=7;i<49;i+) labeli=new JLabel("",JLabel.CENTER); labeli.setFont(font1); labeli.setForeground(Color.blue); labeli.setBorder(B

16、orderFactory.createEtchedBorder(); panelCenters.add(labeli); panelCenter.add(panelCenters,BorderLayout.CENTER);panelCenterSouth = new JPanel();panelCenterSouth.setBorder(BorderFactory.createEtchedBorder();JLabel label5 = new JLabel("<html><body><p align=center>提示:將鼠標(biāo)停留在日歷表的日期數(shù)

17、字上會有相應(yīng)的農(nóng)歷信息顯示。</p><p align=center>版權(quán)所有:08信管 王涵</p></body></html>",JLabel.CENTER);label5.setFont(font4);panelCenterSouth.add(label5);panelCenter.add(panelCenterSouth,BorderLayout.SOUTH);contentPane.add(panelCenter,BorderLayout.CENTER);/*/南部panelSouth = new JPanel();

18、contentPane.add(panelSouth,BorderLayout.SOUTH);/西部panelWest = new JPanel();contentPane.add(panelWest,BorderLayout.WEST);/東部panelEast = new JPanel();contentPane.add(panelEast,BorderLayout.EAST);*/this.updateMonthDays(y, m); /初始化月份顯示為當(dāng)前月份comboBoxMonth.setSelectedIndex(m-1); / 設(shè)置下拉列表顯示為當(dāng)前月comboBoxYear.

19、setSelectedIndex(y-1901); / 設(shè)置下拉列表顯示為當(dāng)前年 3.2 公歷日期求解算法程序截取代碼public int allDays(int year,int month)int daysA = 0,daysB = 0,allDays; /daysA表示輸入年份到1900年經(jīng)過的天數(shù);daysB表示當(dāng)年一月一號到輸入月份的天數(shù)(不包括當(dāng)月) for (int n=1900;n<year;n+) /輸入年份到1900年經(jīng)過的天數(shù)和計算開始 if(n%4 = 0 && n%100 != 0) |n%400 = 0) daysA = daysA + 366

20、; else daysA = daysA + 365; /輸入年份到1900年經(jīng)過的天數(shù)和計算結(jié)束 for (int y=1;y<month;y+) /當(dāng)年1月1號到輸入月份經(jīng)過的天數(shù)(不包含當(dāng)月)和計算開始 switch(y) case 1: daysB = daysB +31; break; case 3: daysB = daysB +31; break; case 5: daysB = daysB +31; break; case 7: daysB = daysB +31; break; case 8: daysB = daysB +31; break; case 10: day

21、sB = daysB +31; break; case 12: daysB = daysB +31; break; case 4: daysB = daysB +30; break; case 6: daysB = daysB +30; break; case 9: daysB = daysB +30; break; case 11: daysB = daysB +30; break; case 2: if(year%4 = 0 && year%100 != 0) |year%400 = 0) daysB = daysB + 29; else daysB = daysB + 2

22、8; break; /當(dāng)年1月1號到輸入月份經(jīng)過的天數(shù)(不包含當(dāng)月)和計算結(jié)束 allDays =daysA + daysB; /輸入年份和月份到1900年1月1號經(jīng)過的天數(shù)(不包含當(dāng)月)和計算 return allDays;public void updateMonthDays(int year,int month) throws ParseExceptionint allDays = this.allDays(year, month);int theFirstDayOfMonth = 1+allDays%7; /判斷輸入的當(dāng)月的一號是星期幾 if(month=1|month=3|month

23、=5|month=7|month=8|month=10|month=12) /判斷輸入的月份是不是大月 for(int i = 0;i < theFirstDayOfMonth;i+) /判斷并在當(dāng)月1號前標(biāo)簽里輸出為空 if(theFirstDayOfMonth!=7) /如果當(dāng)月1號是星期天就不在前面標(biāo)簽里輸出空 labeli+7.setText(null); else theFirstDayOfMonth=0; break; for(int j=1;j<=31;j+) if(Holiday.holiday(year, month, j).equals("0"

24、;) labelj+6+theFirstDayOfMonth.setText(Integer.toString(j); try labelj+6+theFirstDayOfMonth.setToolTipText(LunarString.lunarString(year+"年"+month+"月"+j+"日"); catch (ParseException e) e.printStackTrace(); if(allDays+j)%7=0|(allDays+j)%7=6) labelj+6+theFirstDayOfMonth.set

25、Foreground(Color.red); if(year=y&&month=m&&j=d) labelj+6+theFirstDayOfMonth.setForeground(Color.GREEN); labelj+6+theFirstDayOfMonth.setBackground(Color.GREEN); labelj+6+theFirstDayOfMonth.setFont(new Font("楷體-GB2312",Font.ITALIC+Font.BOLD,20); else labelj+6+theFirstDayOfMon

26、th.setText("<html><body>"+Integer.toString(j)+Holiday.holiday(year, month, j)+"</body></html>"); labelj+6+theFirstDayOfMonth.setForeground(new Color(255,51,255); labelj+6+theFirstDayOfMonth.setFont(font3); try labelj+6+theFirstDayOfMonth.setToolTipText(Lun

27、arString.lunarString(year+"年"+month+"月"+j+"日"); catch (ParseException e) e.printStackTrace(); if(year=y&&month=m&&j=d) labelj+6+theFirstDayOfMonth.setForeground(Color.GREEN); labelj+6+theFirstDayOfMonth.setBackground(Color.GREEN); labelj+6+theFirstDayOfM

28、onth.setFont(new Font("楷體-GB2312",Font.ITALIC+Font.BOLD,12); 3.3 農(nóng)歷與公歷轉(zhuǎn)換算法程序截取代碼class Lunar private int year; private int month; private int day; private boolean leap; final static String chineseNumber = "正", "二", "三", "四", "五", "六&quo

29、t;, "七", "八", "九", "十", "十一", "臘" final static String chineseNumber1 = "一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", &qu

30、ot;十二" static SimpleDateFormat chineseDateFormat = new SimpleDateFormat("yyyy年MM月dd日"); final static long lunarInfo = new long 0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ad

31、a2, 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,

32、 0x0b550, 0x15355, 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, 0x

33、0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, 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, 0x151

34、76, 0x052b0, 0x0a930, 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0; /= 傳回農(nóng)歷

35、y年的總天數(shù) final private static int yearDays(int y) int i, sum = 348; for (i = 0x8000; i > 0x8; i >>= 1) if (lunarInfoy - 1900 & i) != 0) sum += 1; return (sum + leapDays(y); /= 傳回農(nóng)歷 y年閏月的天數(shù) final private static int leapDays(int y) if (leapMonth(y) != 0) if (lunarInfoy - 1900 & 0x10000)

36、 != 0) return 30; else return 29; else return 0; /= 傳回農(nóng)歷 y年閏哪個月 1-12 , 沒閏傳回 0 final private static int leapMonth(int y) return (int) (lunarInfoy - 1900 & 0xf); /= 傳回農(nóng)歷 y年m月的總天數(shù) final static int monthDays(int y, int m) if (lunarInfoy - 1900 & (0x10000 >> m) = 0) return 29; else return 3

37、0; /= 傳回農(nóng)歷 y年的生肖 final public String animalsYear() final String Animals = new String"鼠", "牛", "虎", "兔", "龍", "蛇", "馬", "羊", "猴", "雞", "狗", "豬" return Animals(year - 4) % 12; /= 傳入

38、月日的offset 傳回干支, 0=甲子 final private static String cyclicalm(int num) final String Gan = new String"甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸" final String Zhi = new String"子", "丑&qu

39、ot;, "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥" return (Gannum % 10 + Zhinum % 12); /= 傳入 offset 傳回干支, 0=甲子 final public String cyclical() int num = year - 1900 + 36; return (cyclicalm(num); pub

40、lic Lunar(Calendar cal) int yearCyl, monCyl, dayCyl; int leapMonth = 0; Date baseDate = null; try baseDate = chineseDateFormat.parse("1900年1月31日"); catch (ParseException e) e.printStackTrace(); /To change body of catch statement use Options | File Templates. /求出和1900年1月31日相差的天數(shù) int offset

41、= (int) (cal.getTime().getTime() - baseDate.getTime() / 86400000L); dayCyl = offset + 40; monCyl = 14; int iYear, daysOfYear = 0; for (iYear = 1900; iYear < 2050 && offset > 0; iYear+) daysOfYear = yearDays(iYear); offset -= daysOfYear; monCyl += 12; if (offset < 0) offset += daysOf

42、Year; iYear-; monCyl -= 12; /農(nóng)歷年份 year = iYear; yearCyl = iYear - 1864; leapMonth = leapMonth(iYear); /閏哪個月,1-12 leap = false; /用當(dāng)年的天數(shù)offset,逐個減去每月(農(nóng)歷)的天數(shù),求出當(dāng)天是本月的第幾天 int iMonth, daysOfMonth = 0; for (iMonth = 1; iMonth < 13 && offset > 0; iMonth+) /閏月 if (leapMonth > 0 && i

43、Month = (leapMonth + 1) && !leap) -iMonth; leap = true; daysOfMonth = leapDays(year); else daysOfMonth = monthDays(year, iMonth); offset -= daysOfMonth; /解除閏月 if (leap && iMonth = (leapMonth + 1) leap = false; if (!leap) monCyl+; /offset為0時,并且剛才計算的月份是閏月,要校正 if (offset = 0 &&

44、leapMonth > 0 && iMonth = leapMonth + 1) if (leap) leap = false; else leap = true; -iMonth; -monCyl; /offset小于0時,也要校正 if (offset < 0) offset += daysOfMonth; -iMonth; -monCyl; month = iMonth; day = offset + 1; public static String getChinaDayString(int day) String chineseTen = "初&q

45、uot;, "十", "廿", "卅" int n = day % 10 = 0 ? 9 : day % 10 - 1; if (day > 30) return "" if (day = 10) return "初十" else return chineseTenday / 10 + chineseNumber1n; public String toString() return (leap ? "閏" : "") + chineseNumberm

46、onth - 1 + "月" + getChinaDayString(day); public String getChinaWeekdayString(String weekday) if(weekday.equals("Mon") return "一" if(weekday.equals("Tue") return "二" if(weekday.equals("Wed") return "三" if(weekday.equals("Thu&q

47、uot;) return "四" if(weekday.equals("Fri") return "五" if(weekday.equals("Sat") return "六" if(weekday.equals("Sun") return "日" else return "" 3.4 節(jié)日求解算法程序?qū)崿F(xiàn)截取代碼class Holiday private static String strHoliday; private static

48、 String strLunarHoliday; private static String strNoLunarHoliday; static String holiday(int year,int month,int day) throws ParseExceptionif(month=1|month=3|month=5|month=7|month=8|month=10|month=12)if(month=1&&day=1)strNoLunarHoliday ="元旦節(jié)"else if(month=3&&day=8)strNoLunarH

49、oliday ="婦女節(jié)"else if(month=5&&day=1)strNoLunarHoliday ="勞動節(jié)"else if(month=7&&day=1)strNoLunarHoliday ="黨生日"else if(month=8&&day=1)strNoLunarHoliday ="建軍節(jié)"else if(month=10&&day=1)strNoLunarHoliday ="國慶節(jié)"else if(month=12

50、&&day=24)strNoLunarHoliday ="平安夜"else if(month=12&&day=25)strNoLunarHoliday ="圣誕節(jié)"elsestrNoLunarHoliday ="0"else if(month=2&&day=14)strNoLunarHoliday ="情人節(jié)"else if(month=4&&day=5)strNoLunarHoliday ="清明節(jié)" else if(month=6&&day=1) strNoLunarHoliday ="兒童節(jié)"else if(month=9&&day=10)strNoLunarHoliday ="教師節(jié)"elsestrNoLunarHoliday ="0" if("正月初一".equals(LunarString.lunarHolidayString(year, month, day) strLunarHoliday="春節(jié)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論