JAVA《萬年歷系統(tǒng)》課程設(shè)計(jì)報(bào)告附源碼要點(diǎn)
《JAVA《萬年歷系統(tǒng)》課程設(shè)計(jì)報(bào)告附源碼要點(diǎn)》由會(huì)員分享,可在線閱讀,更多相關(guān)《JAVA《萬年歷系統(tǒng)》課程設(shè)計(jì)報(bào)告附源碼要點(diǎn)(40頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、學(xué)號(hào) 2013-2014學(xué)年 第二學(xué)期 《面向?qū)ο蟪绦蛟O(shè)計(jì)》 課程設(shè)計(jì)報(bào)告 題目: 萬年歷系統(tǒng) 專業(yè):計(jì)算機(jī)科學(xué)與技術(shù) 班級(jí): 姓名: 學(xué)號(hào): 指導(dǎo)教師: 成績(jī): 計(jì)算機(jī)與信息工程系 2014年6月6日 目錄 1 設(shè)計(jì)內(nèi)容及要求 1 1.1 設(shè)計(jì)內(nèi)容 1 1.2 設(shè)計(jì)任務(wù)及具體要求 1 2概要設(shè)計(jì) 2 2.1 程序設(shè)計(jì)思路 2 2.2 總體程序框圖 3 3設(shè)計(jì)過程或程序代碼 4 3.1 各個(gè)模塊的程序流程圖及運(yùn)行界面 4 3.2 對(duì)關(guān)鍵代碼加以分析說明 7 4設(shè)計(jì)結(jié)果與分析 13 4.1 程序調(diào)試的結(jié)果 13 4.2
2、程序設(shè)計(jì)分析 13 5 小結(jié) 14 致謝 15 參考文獻(xiàn) 16 源程序 17 計(jì)算機(jī)與信息工程系 《面向?qū)ο蟪绦蛟O(shè)計(jì)》課程設(shè)計(jì)報(bào)告 1設(shè)計(jì)內(nèi)容及要求 1.1 設(shè)計(jì)內(nèi)容 萬年歷,實(shí)際上就是記錄一定時(shí)間范圍內(nèi)(比如100年或更多)的具體陽歷 或陰歷的日期的年歷,方便有需要的人查詢使用。在我設(shè)計(jì)的萬年歷中主要有: (1)使用圖形用戶界面來查詢用用戶所需的日期信息,符合日常軟件使用 規(guī)范。 (2)按月份查詢,實(shí)現(xiàn)了顯示查詢 1901~2100年某月所有日期的陰陽歷對(duì) 照。 (3)并且添加了重大節(jié)日與星座等信息,界面采用日常的星期與月份結(jié)合 的格式,方便查看與使用。
3、 (4)編寫萬年歷的課程設(shè)計(jì),是為了使同學(xué)們更加了解高級(jí)程序設(shè)計(jì)語言 的結(jié)構(gòu),掌握基本的程序設(shè)計(jì)過程和技巧,掌握基本的分析問題和利用計(jì)算機(jī)求 解問題的能力,具備初步的高級(jí)語言程序設(shè)計(jì)能力。為后續(xù)各門計(jì)算機(jī)課程的學(xué) 習(xí)和畢業(yè)設(shè)計(jì)打下堅(jiān)實(shí)基礎(chǔ)。 1.2 設(shè)計(jì)任務(wù)及具體要求 利用JAVA語言編寫的萬年歷系統(tǒng)采用了多種 JAVA語句來實(shí)現(xiàn)多種功能。用 戶可以通過本程序的applet運(yùn)行界面來查找一整年某月的農(nóng)歷和陽歷,可以查 找用戶所想了解的某一天具體為星期幾,并且可以看到一些重大節(jié)日的具體時(shí) 問。 要求:滿足設(shè)計(jì)萬年歷系統(tǒng)的目的,即當(dāng)用戶查詢年份與月份時(shí),系統(tǒng)就要 將這一年的某一月份的陰歷與
4、陽歷全部顯示出來,并且附帶這一月份的重大節(jié) 日。當(dāng)用戶隨意改動(dòng)年份或月份時(shí)系統(tǒng)自動(dòng)顯示與星期對(duì)應(yīng)的日期。 用戶點(diǎn)擊日 期時(shí)系統(tǒng)會(huì)顯示具體星座信息。 2 概要設(shè)計(jì) 2.1 程序設(shè)計(jì)思路 (1) 總天數(shù)的算法:首先用if語句判斷定義年到輸入年之間每一年是否為閏 年,是閏年,該年的總天數(shù)為 366,否則,為365。然后判斷輸入的年是否為定 義年,若是,令總天數(shù)S=1,否則,用累加法計(jì)算出定義年到輸入年之間的總大 數(shù),再把輸入年的一月到要輸出的月份之間的天數(shù)累加起來, 若該月是閏年中的 月份并且該月還大于二月,再使總天數(shù)加 1,否則,不加,既算出從定義年一月 一日到輸出年的該月一日的總天數(shù)
5、。 (2)輸出月份第一天為星期幾的算法:使總天數(shù)除以 7取余加2得幾既為星 期幾,若是7,則為星期日。 (3)算出輸出月份第一天為星期幾的算法:算出輸出月份第一天為星期幾后, 把該日期以前的位置用空格補(bǔ)上,并總該日起一次輸出天數(shù)直到月底,該月中的 天數(shù)加上該月一日為星期幾的數(shù)字再除以 7得0換行,即可完整的輸出該月的日 歷。 (4) 如果年份小于1900年則程序不予判斷。 (5)公歷與農(nóng)歷的換算。公歷年對(duì)應(yīng)的農(nóng)歷數(shù)據(jù),每年三字節(jié),格式第一字節(jié) BIT7-4位 表示閏月月份,值為0為無閏月,算法:日期十年份+所過閏年數(shù)十月較 正數(shù)之和除7的余數(shù)就是星期但如果是在閏年又不到 3月份上述之
6、和要減一天 再除7星期數(shù)為0。陰歷月份計(jì)算:4\6\9\11幾個(gè)小月返回29天,2月經(jīng)過判斷是 否為閏年,選擇返回28或29天,其余月份為大月,返回31天。 (6) 系統(tǒng)時(shí)間的設(shè)置。直接從系統(tǒng)得到時(shí)間,設(shè)置字體,背景,顯示框架等 等,繪圖就好了。 38 2.2總體程序框圖 開始 份或選擇月 獲取當(dāng)年系統(tǒng) 時(shí)間和年份 程序初始化 提交年月變更數(shù)據(jù) 計(jì)算與繪制屏幕 結(jié)束 * 圖1總體程序框圖
7、 3 設(shè)計(jì)過程或程序代碼 3.1各個(gè)模塊的程序流程圖及運(yùn)行界面 (1)公歷轉(zhuǎn)農(nóng)歷流程圖與運(yùn)行界面 ①流程圖 ②運(yùn)行界面 星娟 生卜 跚二 星期三 星現(xiàn)四 跚丑 星照六 01 前節(jié) 02 三月廿二 03 三月廿三 04 咻芾 05 三月廿五 06 三月曲 07 三月時(shí)
8、08 三月廿二 09 三月附 10 四月初一 11 陰用二 12 四月初三 13 坦斜 14 四月幗 15 醺初六 16 四月毗 17 四月初1 18 四九 19 四月冊(cè) 20 四月? 21 四月十二 22 甌+三 23 四月十四 24 四月十五 25 甌十六 26 四月+七 27 四月十八 28 四月十九 29 明廿十 30 四月廿一 31 四月廿二 圖3公農(nóng)歷運(yùn)行圖 (2)時(shí)間調(diào)整程序流程圖 ①流程圖 圖4時(shí)間調(diào)整流程圖
9、 ②運(yùn)行界面 圖5萬年歷運(yùn)行圖 3.2對(duì)關(guān)鍵代碼加以分析說明 (1)本次程序設(shè)計(jì)共用了 class MainCal extends JFrame implements,class CurrTimeLabel和class Lunar三個(gè)大類,用于繪制萬年歷,顯示萬年歷的系統(tǒng) 時(shí)間和完成農(nóng)歷與公歷的換算。這些類中又運(yùn)用了許多函數(shù),來完成月份的輸出, 背景的設(shè)置,
10、特定日期的標(biāo)注等等。 引用的類有: import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.swing.border.*; import java.util.*; import java.text.ParseException; import java
11、.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Timer; (2)農(nóng)歷的顯示:要算出某年某月某日的農(nóng)歷日期, 只能采用逐日遞推的方 式,這里以1900年1月31的日期為依據(jù),它的農(nóng)歷日期為一九零零年大年初一, 調(diào)用日歷類可以算出所求日期與 1900年1月
12、31日相差多少大,設(shè)這個(gè)差值為 offset,則用offset與1900~2100的農(nóng)歷年天數(shù)逐個(gè)相減,當(dāng) offset<=0時(shí),可以 確定當(dāng)前農(nóng)歷年份。再用相減后得到的offset與得到的年份的農(nóng)歷月天數(shù)逐個(gè)相 減,同理,當(dāng)offset<=0時(shí)可以確定農(nóng)歷月份。最后,Offset加上當(dāng)前月份的大 數(shù)就可以得到農(nóng)歷日期了,至此,陽歷與農(nóng)歷的轉(zhuǎn)換算法得以實(shí)現(xiàn)。在排列陽歷 日期時(shí),調(diào)用陽歷與農(nóng)歷的轉(zhuǎn)換算法得到相應(yīng)農(nóng)歷日期, 將對(duì)應(yīng)陽歷日期標(biāo)簽下 的內(nèi)容設(shè)為農(nóng)歷日期,主要源代碼如下: public Lunar(Calendar cal) { // cal.add(cal.get(Calenda
13、r.DAY_OF_MONTH),1); int monCyl; 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 = (i
14、nt) ((cal.getTime().getTime() - baseDate.getTime()) / 86400000L); monCyl = 14; //用offset減去每農(nóng)歷年的天數(shù) //計(jì)算當(dāng)天是農(nóng)歷第幾天 // i最終結(jié)果是農(nóng)歷的年份 // offset是當(dāng)年的第幾天 int iYear, daysOfYear = 0; for (iYear = 1900; iYear < 2050 && offset > 0; iYear++) { daysOfYear = yearDays(iYear); offset -= daysOfYear; monCyl +=
15、12; } if (offset < 0) { offset += daysOfYear; iYear--; monCyl -= 12; } //農(nóng)歷年份 year = iYear; leapMonth = leapMonth(iYear);// 閏哪個(gè)月,1-12 leap = false; //用當(dāng)年的天數(shù)offset,逐個(gè)減去每月(農(nóng)歷)的天數(shù),求出當(dāng)天是本月 的第幾天 int iMonth, daysOfMonth = 0; for (iMonth = 1; iMonth < 13 && offset > 0; iMonth++) { //閏月 if (le
16、apMonth > 0 && iMonth == (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時(shí),并且剛才計(jì)算的月份是閏月,要校正
17、if (offset == 0 && leapMonth > 0 && iMonth == leapMonth + 1) { if (leap) { leap = false; } else { leap = true; --iMonth; --monCyl; } } // offset小于0時(shí),也要校正 if (offset < 0) { offset += daysOfMonth; --iMonth; --monCyl; } month = iMonth; day = offset + 1; (3)當(dāng)前系統(tǒng)時(shí)間的顯示:java.swing.Timer這個(gè)類可
18、以方便地實(shí)現(xiàn)對(duì)時(shí)鐘 時(shí)間的操作,Timer類大多用于計(jì)劃功能,這里用于刷新系統(tǒng)時(shí)間的顯示, javax.swing.Timer.Timer(int delay , ActionListene門istener)delay 可以設(shè)置隔多長(zhǎng) 時(shí)間執(zhí)行任務(wù),listener即用于監(jiān)聽的事件,每隔一定時(shí)間執(zhí)行一次,這里 delay 以毫秒為單位,設(shè)為1000,實(shí)際上就是一秒,這樣鬧鐘就能每秒鐘刷新一次, 保證時(shí)間顯示正確。它的部分源代碼如下: public class CurrTimeLabel extends JLabel{ private static final long serialV
19、ersionUID = 1L; /** * Define a second */ private final static int ONE_SECOND=1000; /** * Timer Object,use to refresh labels text */ Timer timer=new Timer(ONE_SECOND,new ActionListener(){ public void actionPerformed(ActionEvent evt){ setCurrTimeToText(); }); /** * Constructor * @param strText
20、 */ public CurrTimeLabel(String strText){ super(strText); timer.start(); } /** * Set current time to labels text * * / private void setCurrTimeToText(){ this.setText(getCurrTime()); this.setFont(new Font(宋體",F(xiàn)ont.BOLD, 18)); /** * Get current time,format is yyyy/MM/dd HH:mm:ss * @retur
21、n current time String * / private String getCurrTime(){ Calendar cal= Calendar.getInstance(); SimpleDateFormat fromatter=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); String strCurrTime=fromatter.format(cal.getTime()); return strCurrTime; } } (4)節(jié)日的顯示:節(jié)日的分布是固定的,較之節(jié)氣來說,更容易操作和實(shí)現(xiàn), 我假設(shè)每個(gè)月份三個(gè)節(jié)日,
22、在排列中,只需取出每個(gè)月的三個(gè)節(jié)日的日期比較一 下,相等就把日歷信息修改一下。部分源代碼如下: if((i-initWeek+1)==sFtvDay){ if(sFtv[month-1][k]!=null){ labelDay[a1+1][a2].setText(sFtv[month-1][k++]); labelDay[a1+1][a2].setFont(new Font("黑體",F(xiàn)ont.BOLD, 8)); } if(k<=2)sFtvDay=sFtvDate[month-1][k]; } 4設(shè)計(jì)結(jié)果與分析 4.1 程序調(diào)試的結(jié)果 本程序經(jīng)過設(shè)計(jì)并成功的調(diào)試了萬年歷
23、系統(tǒng)的程序并且滿足了萬年歷系統(tǒng) 應(yīng)該有的功能,例如:通過本程序的 applet運(yùn)行界面來查找一整年某月的農(nóng)歷 和陽歷,某一年某一月的日歷,并且還是實(shí)現(xiàn)了重大節(jié)日的查詢功能。 這樣一來 能更快的查詢我們所需要的信息,程序調(diào)試結(jié)果如下圖所示。 圖6萬年歷調(diào)試結(jié)果 4.2 程序設(shè)計(jì)分析 在設(shè)計(jì)此程序時(shí),即使會(huì)滿足我們?cè)O(shè)計(jì)的要求但同時(shí)也存在小缺陷: (1)此萬年歷的功能不夠強(qiáng)大,調(diào)試后只能顯示一些重大的節(jié)日而不能所有 的節(jié)日都顯示出來。 (2)設(shè)計(jì)這個(gè)萬年歷系統(tǒng)還有一個(gè)很大的遺憾就是沒能添加二十四節(jié)氣,這 是美中不足的地方。 (3)萬年歷本應(yīng)能查詢一萬年的日歷,但在此程序中只
24、是能查詢一百多年的 日歷 5小結(jié) 在這次課程設(shè)計(jì)中,主要是運(yùn)用 Java語言來編寫,并可運(yùn)用其他的技術(shù)。 在我的系統(tǒng)中,還采用了 Swing控件、輸入輸出流等技術(shù),而這些知識(shí)都是我們 沒有學(xué)過的,這就要求我們?nèi)ゲ殚喯嚓P(guān)書籍。正因?yàn)檫@樣,才鍛煉了我的自學(xué)能 力,為以后的學(xué)習(xí)打下了基礎(chǔ)。此外,我還深刻感受到了面向?qū)ο笳Z言中類庫的 強(qiáng)大功能,掌握了運(yùn)用Java中的類實(shí)現(xiàn)某些基本功能,并學(xué)會(huì)了自己查詢使用 類的方法,為以后的面向?qū)ο笳Z言的自學(xué)奠定了基礎(chǔ)。 萬年歷系統(tǒng)程序的設(shè)計(jì)成功會(huì)讓快節(jié)奏的社會(huì)上的感到方便, 因?yàn)楝F(xiàn)在的社 會(huì)離不開時(shí)間。他們只需要呆在家里就可以清楚的知道某一天的日期。 并且
25、對(duì)人 們的工作也有所幫助,方便他們查詢某年某月的資料以及制作報(bào)表。 因此,我認(rèn) 為萬年歷在今后的發(fā)展空間很大,如果包裝成簡(jiǎn)易軟件會(huì)有很高的利用價(jià)值, 我 們可以隨時(shí)隨地查閱。 致謝 在這次JAVA高級(jí)語言課程設(shè)計(jì)中,我的老師和同學(xué)給了我及大的幫助。特 別是我的指導(dǎo)老師兼授課教師陳磊老師,在此,我對(duì)他們表示感謝。感謝他們?cè)?我面對(duì)困難時(shí)給了我?guī)椭椭С郑?,也感謝那些給我?guī)椭乃型瑢W(xué)。 參考文獻(xiàn) [1]牛曉太.Java程序設(shè)計(jì)教程[M],北京:清華大學(xué)出版社,2013. [2]朱福喜,傅建明.JAVA項(xiàng)目設(shè)計(jì)與開發(fā)范例[M],北京:電子工業(yè)出版社, 2005. [3]劉寶林.JAVA
26、1序設(shè)計(jì)與案例[M].北京:高等教育出版社,2006. [4]劉亞峰,紀(jì)超.JavaSE6.編程指南[M].北京:人民郵電出版社,2007.11 [5] Walter Savitch. Java 完美編程[M].清華大學(xué)出版社.第三版 [6] Philip Heller. 零起點(diǎn)Java應(yīng)用編程[M].電子工業(yè)出版社 [7] Deitlel. Java 大學(xué)英語教程[M].電子工業(yè)出版社 [8] Cay S.Horstmann. Java 核心技術(shù)[M].電子工業(yè)出版社 [9]汪曉平.精通Java網(wǎng)絡(luò)編程[M].清華大學(xué)出版社.2005 [10]孫一平,陳立.Java網(wǎng)絡(luò)編程實(shí)例
27、[M].清華大學(xué)出版社.2004 [11]袁海燕,王文濤.Java實(shí)用程序設(shè)計(jì)[M].人民郵電出版社.2005 [12]鄭阿奇.Java實(shí)用教程[M].電子工業(yè)出版社.2006 [13]羅依.Java Swing[M]. 清華大學(xué)出版社.2006 [14]王濤,劉繼光.Java2 API大全[M].電子工業(yè)出版社 [15] Joseph L.Weber. Using Java2[m]. 電子工業(yè)出版社 附錄1: 源程序 (1) MainCal.java import java.awt.BorderLayout; import java.awt.Color; import
28、java.awt.Dimension; import java.awt.Toolkit; import java.awt.Window; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.swing.border.*; import java.ut
29、il.*; public class MainCal extends JFrame implements ActionListener { private static final long serialVersionUID = -1414990677727455448L; private JLabel datas□口 = new 兒abel[6][7];〃 顯示一月的日期 private JLabel label = null; private JPanel panel_Header, panel_Week, panel_Calendar; private Calendar ca
30、lendar = null; private JComboBox year_box = null; private JComboBox month_box = null; private int today; public MainCal() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } setTitle("萬年歷(邱麗麗JAVA課程設(shè)計(jì)2014-06-10)"); bou
31、ndsWindowOnScreen(this,0.7,0.8); setVisible(true); calendar = Calendar.getInstance(); today = calendar.get(Calendar.DAY_OF_MONTH); panel_Header = initializtion_Header(); panel_Week = initializtion_Week(); panel_Calendar = initializtion_Calendar(); setLayout(new BorderLayout()); add(panel_Hea
32、der,BorderLayout.NORTH); JPanel pan=new JPanel(); add(pan,BorderLayout.CENTER); pan.setLayout(new BorderLayout()); pan.add(panel_Week,BorderLayout.NORTH); pan.add(panel_Calendar,BorderLayout.CENTER); initializtion_Data(calendar); } private JPanel initializtion_Header() {// 顯示表頭的 panel JPane
33、l panel = new JPanel(); panel.setPreferredSize(new Dimension(0, 43)); year_box = new JComboBox(); month_box = new JComboBox(); JPanel panel_l = new JPanel(); JPanel panel_r = new JPanel(); 兒abel label=new JLabel(" 當(dāng)前時(shí)間:"); CurrTimeLabel ct =new CurrTimeLabel("current time"); panel_r.add(labe
34、l); panel_r.add(ct); 〃panel.setBorder(new EtchedBorder(5, Color.red, Color.BLUE)); 兒abel year_l = new 兒abel(情您選擇年份:", JLabel.RIGHT); 兒abel month」=new JLabel("月份:", JLabel.RIGHT); panel.setSize(525, 45); for (int i = 1900; i < 2050; i++) year_box.addItem(i); for (int j = 1; j <= 12; j++) mon
35、th_box.addItem(""+j); year_box.setSelectedIndex(calendar.get(Calendar.YEAR) - 1900); month_box.setSelectedIndex(calendar.get(Calendar.MONTH)); panel_l.add(year_l); panel_l.add(year_box); panel_l.add(month_l); panel_l.add(month_box); panel.add(panel_l,BorderLayout.WEST); panel.add(panel_r,Bor
36、derLayout.EAST); year_box.addActionListener(this); month_box.addActionListener(this); return panel; } private JPanel initializtion_Week() {// 顯示星期的 panel JPanel panel = new JPanel(); panel.setPreferredSize(new Dimension(0, 33)); panel.setLayout(new GridLayout(1,7)); String columnNames口 = {"
37、星期日","星期一","星期二","星期三","星 期四","星期五","星期六"}; JLabel label = null; for (int i = 0; i < 7; i++) { label = new JLabel(columnNames[i],兒abel.CENTER); if (i == 0 || i == 6) label.setForeground(Color.RED); label.setBorder(new LineBorder(new Color(70, 130, 180))); panel.add(label); } return panel;
38、 } private JPanel initializtion_Calendar() {// 顯示日期的 panel JPanel panel = new JPanel(); panel.setLayout(new GridLayout(6, 7)); for (int i = 0; i < 6; i++) { for (int j = 0; j < 7; j++) { label = new JLabel("", JLabel.CENTER); datas皿]=label; label.setBorder(new LineBorder(new Color(70, 130, 1
39、80))); if (j == 0 || j == 6) label.setForeground(Color.RED); datas[i][j].addMouseListener(new List_MouseListener()); panel.add(label); } } return panel; } public void clear_Data() {// 清空內(nèi)容的 for (int i = 0; i < 6; i++) for (int j = 0; j < 7; j++) { datas[i][j].setText(""); if (j == 0 || j
40、== 6) datas[i][j].setForeground(Color.RED); else datas[i][j].setForeground(null); } } public void initializtion_Data(Calendar calendar) {// 初始化函數(shù) 〃////////////////////////////////////////////////// 〃////////////////////////////////////////////////////////// /* *節(jié)日和紀(jì)念日 格式:起始年(yyyy)十月(mm)十日(dd)
41、
*
*
*
* 0000表示起始年不明
7
HashMap
42、Festival.put("0504","青年節(jié)"); sFestival.put("0601","兒童節(jié)"); sFestival.put("0701","建黨節(jié)"); sFestival.put("0801","建軍節(jié)"); sFestival.put("0910","教師節(jié)"); sFestival.put("1001","國(guó)慶節(jié)"); sFestival.put("1031","萬圣節(jié)"); sFestival.put("1112",”孫中山誕辰"); sFestival.put("1225","圣誕節(jié)"); sFestival.put("1226","毛澤東誕辰")
43、;
// };
//某月第幾個(gè)星期幾
//起始年(4位)十月(2位)+第幾個(gè)(1位)+星期幾(1位)
HashMap
44、MapvString, String>(); // String []lFestival={ lFestival.put("0101","春 節(jié)) lFestival.put("0102","大年初二"); lFestival.put("0103","大年初三"); lFestival.put("0115","元宵節(jié)"); lFestival.put("0505","端午節(jié)"); lFestival.put("0707","七夕) lFestival.put("0815","中秋節(jié)"); lFestival.put("0909","重陽節(jié)"); lFestival.put(
45、"1208","臘八節(jié)"); lFestival.put("1299","除 夕) // }; // /////////////////////////////////////////////////////////// 〃////////////////////////////////////////////////// this.calendar = calendar; today = calendar.get(Calendar.DAY_OF_MONTH); int month = calendar.get(Calendar.MONTH); int weekindexDay
46、; int weekindexMonth; calendar.set(Calendar.DATE, 1); while (calendar.get(Calendar.MONTH) == month) { weekindexMonth = calendar.get(Calendar.WEEK_OF_MONTH) - 1; weekindexDay = calendar.get(Calendar.DAY_OF_WEEK) - 1; int day = calendar.get(Calendar.DAY_OF_MONTH); // ///////////////////////////
47、////////////////// String today_, month_; today_ = day < 10 ? "0" + day : "" + day; month_ = month < 10 ? "0" + (month + 1) : "" + (month + 1); Lunar lunar = new Lunar(calendar); String lunar_ = lunar.toString(); // ///////////////////////////////////////// if (null != sFestival.get(month_ +
48、today_)) lunar_ = "" + sFestival.get(month_ + today_); // ///// String wFestival_ = month_ + (weekindexMonth) + (weekindexDay); if (null != wFestival.get(wFestival_)) { lunar_ = "" + wFestival.get(wFestival_); //System.out.println(wFestival_); } if (null != lF
49、estival.get(lunar.numeric_md())) lunar_ = "" + lFestival.get(lunar.numeric_md()); //計(jì)算除夕 Calendar temp_calendar = Calendar.getInstance(); temp_calendar.set(calendar.get(Calendar.YEAR), month, day + 1); 〃 temp_calendar.add(Calendar.DAY_OF_MONTH,1); Lunar temp_lunar = new Lunar(t
50、emp_calendar); String temp_str = temp_lunar.numeric_md(); if (temp_str.equals("0101")) lunar_ = "" + lFestival.get("1299"); ///計(jì)算除夕結(jié)束 〃//////////////////////////////////////// String day_str; if (day < 10) day_str = "
51、tml>
" + lunar_; if (day == today) datas[weekindexMonth][weekindexDay].setForeground(Color.GREEN); datas[weekindexMonth][weekindexDay].setText(day_str); calendar.add(Calendar.DATE, 1); } // ///////////////////////////////////////////////
52、 } public void actionPerformed(ActionEvent e) {// 日期和年份的選擇更新 int year = Integer.parseInt(year_box.getSelectedItem().toString()); int month = Integer.parseInt(month_box.getSelectedItem().toString()) - 1; calendar.set(year, month, today); clear_Data(); Initializtion_Data(calendar); } class Lis
53、t_MouseListener implements MouseListener {// 鼠標(biāo)移入時(shí)顯示的信 JLabe11abe = null; String weeks口 = {"星期日","星期一","星期二","星期三","星期四","星 期五","星期六"}; public String constellation(Calendar cal) { String□□ con = { {"水瓶座", "0122", "0221"}, {"雙魚座", "0222", "0321" }, {"白羊座", "0322", "0420" }, {"金牛座","0421", "0521
54、" }, {"雙子座", "0522", "0621" }, {"巨蟹座", "0621", "0721" }, {"獅子座", "0722", "0821" }, {"處女座", "0822", "0921" }, {"天秤座", "0922", "1021" }, {"大蝸?zhàn)?,"1022", "1121" }, {"射手座","1122", "1221" }, {"摩羯座", "1222", "0121" } }; int month = cal.get(Calendar.MONTH) + 1; int today = cal.get(Calendar.DAY_OF_MONTH)
55、; String month_str = month < 10 ? "0" + month : "" + month; String today_str = today < 10 ? "0" + today : "" + today; String str = month_str + today_str; for (int i = 0; i < con.length - 1; i++) { if (Integer.parselnt(str) >= Integer.parseInt(con[i][1]) && Integer.parselnt(str) <= Integer.pars
56、eInt(con[i][2])) return con[i][0]; } if ((Integer.parselnt(str) >= Integer.parseInt(con[11][1]) && Integer.parselnt(str) < 1232) || Integer.parselnt(str) <= Integer.parseInt(con[11][2])) return con[11][0]; return "error!"; public void mouseClicked(MouseEvent e) {// 鼠標(biāo)按鍵在組件上單擊(按 下并釋放)時(shí)調(diào)用。 } p
57、ublic void mouseEntered(MouseEvent e) {// 鼠標(biāo)進(jìn)入到組件上時(shí)調(diào)用。 labe = (JLabel) e.getSource(); String lab = labe.getText(); if (lab != "") { labe.setBackground(Color.red); String day = lab.substring(lab.indexOf("size=6>") + 7, lab .indexOf("
")+4)
58、; String message = "
59、(day));
Lunar lunar = new Lunar(calendar);
message += "
”
+ weeks[(calendar.get(Calendar.DAY_OF_WEEK) - 1)]; message += " " + constellation(calendar)
+ “
農(nóng)歷";
message += lunar.get_month() + 月"+ lunar.get_Big_Or_Small() + " &n
60、bsp;" + lunar.get_date() + "日 "; ; // message+=lunar.get_JQ(); labe.setToolTipText(message); labe.setBackground(new Color(112, 128, 144)); labe.setOpaque(true); // System.out.println(day+":"+lun); } } public void mouseExited(MouseEvent e) {// 鼠標(biāo)離開組件時(shí)調(diào)用。 labe.setBackground(null); labe.setO
61、paque(true); } public void mousePressed(MouseEvent e) {//鼠標(biāo)按鍵在組件上按下時(shí)調(diào) 用。 } public void mouseReleased(MouseEvent e) {//鼠標(biāo)按鈕在組件上釋放時(shí) 調(diào)用。 } } static public void boundsWindowOnScreen(Window window, double ratioX, double ratioY) { Toolkit tk = window.getToolkit(); Dimension scrn = tk.getScreenSi
62、ze(); int left=(int)(scrn.width/2-scrn.width*ratioX/2); int up=(int)((scrn.height-scrn.height*ratioY)/3); window.setBounds(left, up, (int) (scrn.width * ratioX), (int) (scrn.height * ratioY)); } * @param args */ public static void main(String口 args) { // TODO Auto-generated method stub ne
63、w MainCal(); 〃SwingConsole.run(mc, 0.7, 0.8); 〃boundsWindowOnScreen(new MainCal(),0.7,0.8); } } (2) Lunar.java import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class Lunar { private int year; private int month;
64、private int day; private boolean leap; final static String chineseNumber口 = {"一","二","三","四","五","六","七"," 八","九","十","十一","十二"}; final static String Big_Or_Small[] = {"大","小","大?小","大","小","大","大 7‘小","大","小","大"}; static SimpleDateFormat chineseDateFormat = new SimpleDateFormat( "yyyy 年 MM 月
65、dd 曰"); final static long[] lunarInfo = new long[] { 0x04bd8, 0x04ae0, 0x0a570,0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0
66、x09570, 0x052f2, 0x04970, 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, 0x06ca0, 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,
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 市教育局冬季運(yùn)動(dòng)會(huì)安全工作預(yù)案
- 2024年秋季《思想道德與法治》大作業(yè)及答案3套試卷
- 2024年教師年度考核表個(gè)人工作總結(jié)(可編輯)
- 2024年xx村兩委涉案資金退還保證書
- 2024年憲法宣傳周活動(dòng)總結(jié)+在機(jī)關(guān)“弘揚(yáng)憲法精神推動(dòng)發(fā)改工作高質(zhì)量發(fā)展”專題宣講報(bào)告會(huì)上的講話
- 2024年XX村合作社年報(bào)總結(jié)
- 2024-2025年秋季第一學(xué)期初中歷史上冊(cè)教研組工作總結(jié)
- 2024年小學(xué)高級(jí)教師年終工作總結(jié)匯報(bào)
- 2024-2025年秋季第一學(xué)期初中物理上冊(cè)教研組工作總結(jié)
- 2024年xx鎮(zhèn)交通年度總結(jié)
- 2024-2025年秋季第一學(xué)期小學(xué)語文教師工作總結(jié)
- 2024年XX村陳規(guī)陋習(xí)整治報(bào)告
- 2025年學(xué)校元旦迎新盛典活動(dòng)策劃方案
- 2024年學(xué)校周邊安全隱患自查報(bào)告
- 2024年XX鎮(zhèn)農(nóng)村規(guī)劃管控述職報(bào)告