版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 超級萬年歷</b></p><p><b> 1.課程設計的目的</b></p><p> 《JAVA程序設計》是計算機相關專業(yè)的必修專業(yè)基礎課程,其實踐性、應用性很強。實踐教學環(huán)節(jié)是必不可少的一個重要環(huán)節(jié)。本課程的程序設計專題實際是計算機相關專業(yè)學生學習完《JAVA程序設計》課程后,進行的一次全面的綜合訓練,J
2、AVA程序設計的設計目的是加深對理論教學內容的理解和掌握,使學生較系統(tǒng)地掌握程序設計及其在網絡開發(fā)中的廣泛應用,基本方法及技巧,為學生綜合運用所學知識,利用軟件工程為基礎進行軟件開發(fā)、并在實踐應用方面打下一定基礎。編寫一個萬年歷理解圖像界面的基本組織窗口,以及類、方法的調用,以及添加控件、并在窗口中顯示,可以對年份、月份、當前的時間進行查詢方便用戶的使用。</p><p><b> 2.設計方案論證&
3、lt;/b></p><p><b> 2.1需求分析</b></p><p> 本次課程設計是編寫一個萬年歷程序,主要目的是加強對Java的實際運用,了解圖形用戶界面的基本組件窗口、按紐(JButton)、標簽(JLabel)、下拉表組件(JComboBox)、文本框(TextBox)、選擇框、查詢事件的處理,菜單的設計還有日期的計算等的使用方法,了解如何
4、使用布局管理器對組件進行管理,以及如何使用Java的事件處理機制。</p><p> 萬年歷是一個強大的日歷系統(tǒng),通過它可以實現(xiàn)對過去,現(xiàn)在以及將來日期的查找,通過在年份對應的下拉菜單中選擇要查詢的年份,再相應的在月份對應的下拉菜單選擇要查詢的月份,則可得到相應的日歷。此外,還可以顯示出數(shù)字時間,很方便用戶的查詢。</p><p> 本實驗是對圖形用戶界面,布局管理器的綜合運用,理解J
5、AVA的時間處理機制,編寫獨立運行的窗口。</p><p><b> 2.2概要設計</b></p><p> 本程序涉及三個類,MainFrame為顯示日期部分的類,是程序中的主類,ClockAction</p><p> 是對所要查詢的年份及其月份進行選擇的類,Clock是對當前時間進行顯示的類,位與整個界面的底部,程序運行時,只要運
6、行MainFrame即可顯示出日期以及時間的詳細信息。以下是對這三個類的具體說明。</p><p> 2.2.1自定義類說明</p><p> (1) ClockAction類</p><p> 作用:獲取當前下拉列表中所選擇的信息</p><p> 實現(xiàn)的接口:ActionListener</p><p>
7、 ActionListener用于接收操作事件的偵聽器接口。使用該類創(chuàng)建的對象可使用組件的 addActionListener 方法向該組件注冊。在發(fā)生操作事件時,調用該對象的 actionPerformed 方法。ActionEvent指示發(fā)生了組件定義的動作的語義事件。當特定于組件的動作(比如被按下)發(fā)生時,由組件生成此高級別事件。事件被傳遞給每一個 ActionListener 對象,這些對象是使用組件的 addActionLis
8、tener 方法注冊的,用以接收這類事件。</p><p> ClockAction類的具體實現(xiàn)如下:</p><p> //對當前所選年份、月份的查詢</p><p> class ClockAction implements ActionListener </p><p> { public void actionPerform
9、ed(ActionEvent arg0) </p><p> { int c_year, c_month, c_week; </p><p> // 得到當前所選年份 </p><p> c_year = Integer.parseInt(com1.getSelectedItem().toString());</p><p> //
10、 得到當前月份,并減1,計算機中的月為0-11</p><p> c_month = Integer.parseInt(com2.getSelectedItem().toString())-1; </p><p> // 調用函數(shù)use,得到星期幾</p><p> c_week = use(c_year, c_month); </p><
11、p> // 調用函數(shù)Resetday</p><p> Resetday(c_week, c_year, c_month); } </p><p><b> } </b></p><p> (2) MainFrame類</p><p><b> 作用:主類</b></p>
12、<p> 繼承的父類:JFrame</p><p><b> 實現(xiàn)的接口:沒有</b></p><p> JFrame是MainFrame的父類,當用戶試圖關閉窗口時,JFrame 知道如何進行響應。用戶關閉窗口時,默認的行為只是簡單地隱藏 JFrame。在多屏幕環(huán)境中,可以在不同的屏幕設備上創(chuàng)建一個 JFrame。</p><
13、p><b> 主要方法說明:</b></p><p> public static void main(String[] args) { </p><p> JFrame.setDefaultLookAndFeelDecorated(true); </p><p> new MainFrame();</p><
14、p><b> }</b></p><p> (3) Clock類</p><p><b> 作用:顯示時間的類</b></p><p> 繼承的父類:Canvas</p><p> 實現(xiàn)的接口:Runnable</p><p> Canvas是Clock的父
15、類,它表示屏幕上一個空白矩形區(qū)域,應用程序可以在該區(qū)域內繪圖,或者可以從該區(qū)域捕獲用戶的輸入事件。Runnable接口由Clock類來實現(xiàn),設計該接口的目的是為希望在活動時執(zhí)行代碼的對象提供一個公共協(xié)議。</p><p><b> 主要方法說明:</b></p><p> //用來顯示時間的方法</p><p> public void
16、paint(Graphics g){ </p><p> Font f=new Font("宋體",Font.BOLD,16); </p><p> //格式化時間顯示類型</p><p> SimpleDateFormat SDF=new SimpleDateFormat("yyyy'年'MM'月'
17、;dd'日'HH:mm:ss"); </p><p> Calendar now=Calendar.getInstance();</p><p> //得到當前日期和時間</p><p> time=SDF.format(now.getTime()); </p><p> g.setFont(f); <
18、/p><p> g.setColor(Color.orange); </p><p> g.drawString(time,45,25); </p><p><b> } </b></p><p><b> }</b></p><p><b> 2.3系統(tǒng)總體
19、設計</b></p><p> 本程序包括兩部分:一部分是MainFrame.java用來顯示日期,另一部分是Clock.java,用來顯示時間。編寫程序時,首先創(chuàng)建MainFrame類,在MainFrame類中編寫顯示日期的代碼,再創(chuàng)建Clock類,再向Clock類中編寫顯示時間的代碼,把MainFrame類和Clock類放在同一個項目中,運行程序時,只需運行MainFrame即可顯示出所有信息,
20、此時,在界面上會顯示出相應的日期,同時,在界面的底部會顯示出當前的時間。</p><p> 以下是程序的第一部分,也是程序的主體部分。運行時,只要運行MainFrame.java即可實現(xiàn)日期的顯示。</p><p> 根據(jù)上面功能描述的介紹,對基于JAVA的超級萬年歷進行總體功能模塊劃分,如圖1所示。</p><p><b> 圖1功能模塊示意圖&l
21、t;/b></p><p><b> 2.4系統(tǒng)詳細設計</b></p><p> 本系統(tǒng)共包括2個java源文件,類之間的關系如圖2所示,JAVA源文件及其功能如表所示。</p><p><b> 圖2 類關系圖</b></p><p> 本程序中有3個源文件分別是MainFrame
22、、Clock、ClockAction,MainFrame是本程序的主程序,為顯示日期部分的類。Clock實現(xiàn)使用線程進行休眠的功能,用來顯示當期的時間。ClockAction對當前所選年份、月份的查詢。如表1所示。</p><p> 表1 JAVA源文件</p><p> 在主類MainFrame中包括的成員變量有面板、文本框、命令按鈕,實現(xiàn)向窗口中添加控件的功能,如表2所示。<
23、/p><p><b> 表2成員變量</b></p><p> 在主類MainFrame中包括的方法有MaunFrame(),實現(xiàn)初始化界面居中,如表3所示。</p><p><b> 表3方法</b></p><p> 在Clock類中包括的成員變量有類聲明、字符串,如表4所示</p&g
24、t;<p><b> 表4成員變量</b></p><p> 在Clock類中有4個方法,分別是方法actionPerformed()實現(xiàn)監(jiān)聽獲取當前時間的功能、Init()實現(xiàn)界面初始化、ClockAction()實現(xiàn)設置查看的時間、ResetDay()實現(xiàn)使查看的時間正確。如表5所示。</p><p><b> 表5方法</b&
25、gt;</p><p> 在ClockAction類中包括的成員變量有,年、月、周,獲取當前下拉列表中所選擇的信息,如表6所示。</p><p><b> 表6成員變量</b></p><p> ClockAction類中有三個方法,分別是Clock(),該方法實現(xiàn)初始化線程。Run()方法實現(xiàn)運行休眠。Paint()方法實現(xiàn)格式化時間顯
26、示。如表7所示。</p><p><b> 表7方法</b></p><p><b> 3.設計結果與分析</b></p><p> 程序正常運行時,顯示當前的年份,月份,日期以及數(shù)字時間。如果想要實現(xiàn)對指定日期的查詢,可在“年份”對應的下拉框中選擇所要查詢的年,在“月份”對應的下拉框中選擇所要查詢的月即可。例如:查
27、詢2008年5月30日是星期幾。即在“年份”對應的下拉列表中選擇2008,在“月份”對應的下拉列表中選擇5,通過選擇,即可實現(xiàn)對日期的查詢,查詢后的結果,通過此程序,還可對其他時間查詢,按照查詢要求進行選擇。如圖3所示。</p><p> 圖3 選擇年份、月份</p><p> 按照要求輸入相應的查詢條件后,界面上即可顯示所要查詢的日期以及對應顯示當前的詳細時間。這樣,便可以對任何日期
28、進行查詢了,為使用者提供了很大的幫助。如圖4所示。</p><p><b> 圖4顯示所選日期</b></p><p><b> 4.設計體會</b></p><p> Java 語言是解釋執(zhí)行的高級編程語言,是面向對象的程序設計語言,功能強大,它是解釋執(zhí)行的,能跨平臺使用。具有較高的性能和高度的安全性,Java程序
29、的三級代碼安全檢查機制可以有效的防止非法代碼的入侵,阻止對內存的越權訪問,能夠避免病毒的侵害,成為Internet上最安全的技術之一。并且支技多線程,可使用戶程序并行執(zhí)行,即有內存垃圾自動收集機制。Java語言是一種“直譯”式語言,即用Java編寫的程序首先被編譯成字節(jié)碼,再通過JVM解釋成機器碼,字節(jié)碼是Java 專有的一種中間碼,必須通過JVM來解釋才能運行。在不同的平臺上,Java有不同的JVM,使用Java 字節(jié)碼可以跨越平臺的
30、限制,在不同的平臺上運行。經過了一個學期對《Java程序設計》的學習,我們學習了理論知識,了解了Java語言程序設計的思想,這些知識都為我們的下一步學習打下了堅實的基礎。</p><p> 經過這次課程設計使我對JAVA圖形用戶界面的有關知識有了更深入了解,如幾種布局管理器的使用方法,事件的處理機制,SWING的基本體系結構,SWING組件的使用方法,多媒體的實現(xiàn)手段等知識。完成了簡單的萬年歷功能,本次課程設計
31、的主要內容就是設計一個可以查詢日期的程序,通過選擇下拉列表中的年份以及月份來實現(xiàn)日期的查詢,通過它可以查詢到日期的一些具體信息,可以查詢所選日期是星期幾,還對星期六與星期日有特殊顏色的標記,方便查看。此外,還可以實現(xiàn)顯示數(shù)字時間的功能,簡單實用。通過課程設計,能夠達到全面、深入理解和掌握所學內容,能夠進行簡單的分析和判斷。這次課程設計,雖說在設計過程中遇到了很多的困難,但是在老師的細心指導下,很多不會的問題都迎刃而解了。此次課程設計一方
32、面是為了檢查我們一個學期來我們學習的成果,另一方面也是為了讓我們進一步的掌握和運用它,同時也讓我們認清自己的不足之處和薄弱環(huán)節(jié),加以彌補和加強。是對自己學習的一次很好的檢驗。能完成這次的課程設計,和身邊的同學和老師的幫助分不開的。在此對指導老師表示感謝,還有幫助過我的一些同學,在此也表示謝意。</p><p><b> 5.參考文獻</b></p><p> [1
33、]王銳. 基于單片機的萬年歷設計[J]. 河北:信息技術,2014,09:213-216.</p><p> [2]饒敏,邱德慧,劉雅斌. 基于NIOSⅡ的萬年歷設計[J]. 北京:微計算機信息,2009:45-100</p><p> [3]陳佳,高維松. 基于桌面的多功能萬年歷設計與開發(fā)[J]. 河北:軟件刊,2013,02:72-74.</p><p>
34、 [4]查榮. 基于單片機的多功能萬年歷設計[J]. 北京:機械制造與自化,2012,03:137-139.</p><p> [5] 吳其慶. Java程序設計實例教程[M]. 北京:冶金工業(yè)出版社,2009:120-230.</p><p> [6] 陳佳,高維松. 基于桌面的多功能萬年歷設計與開發(fā)[J]. 軟件導刊,2013.02:72-74.</p><p&
35、gt; [7] 柳西玲,許斌. Java語言應用開發(fā)基礎[M] .北京:清華大學出版社,2011.2:100-200</p><p> [8] 施霞萍. Java程序設計教程[M].北京:機械工業(yè)出版社, 2008.6:111-121</p><p> [9] 宛延闿.實用Java程序設計教程[M].北京:機械工業(yè)出版社, 2010.1:67-100</p><p
36、><b> 附錄</b></p><p> MainFrame源文件中的代碼如下:</p><p> import java.awt.BorderLayout; </p><p> import java.awt.Color; </p><p> import java.awt.GridLayout; &
37、lt;/p><p> import java.awt.Toolkit; </p><p> import java.awt.event.ActionEvent; </p><p> import java.awt.event.ActionListener;</p><p> import java.sql.Date; </p>
38、<p> import java.util.Calendar; </p><p> import javax.swing.JComboBox; </p><p> import javax.swing.JFrame; </p><p> import javax.swing.JLabel;</p><p> impor
39、t javax.swing.JPanel;</p><p> public class MainFrame extends JFrame { </p><p> private static final long serialVersionUID = 1L; </p><p> JPanel panel = new JPanel(new BorderLayou
40、t());</p><p> JPanel panel1 = new JPanel();</p><p> JPanel panel2 = new JPanel(new GridLayout(7, 7)); </p><p> JPanel panel3 = new JPanel();</p><p> JLabel[] label
41、= new JLabel[49]; </p><p> JLabel y_label = new JLabel("年份"); </p><p> JLabel m_label = new JLabel("月份"); </p><p> JComboBox com1 = new JComboBox();</p>
42、<p> JComboBox com2 = new JComboBox();</p><p> int re_year, re_month; </p><p> int x_size, y_size; </p><p> String year_num; </p><p> Calendar now = Calenda
43、r.getInstance(); // 實例化Calendar </p><p> MainFrame() { </p><p> super("萬年歷"); </p><p> setSize(300, 350); </p><p> x_size = (int) (Toolkit.getDefaultToolk
44、it().getScreenSize().getWidth());</p><p> y_size = (int) (Toolkit.getDefaultToolkit().getScreenSize().getHeight());</p><p> setLocation((x_size - 300) / 2, (y_size - 350) / 2); </p><
45、;p> setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); </p><p> panel1.add(y_label);</p><p> panel1.add(com1); </p><p> panel1.add(m_label); </p><p> panel1.add(co
46、m2); </p><p> for (int i = 0; i < 49; i++) { </p><p> label[i] = new JLabel("", JLabel.CENTER);// 將顯示的字符設置為居中 </p><p> panel2.add(label[i]); </p><p><
47、;b> } </b></p><p> panel3.add(new Clock(this)); </p><p> panel.add(panel1, BorderLayout.NORTH); </p><p> panel.add(panel2, BorderLayout.CENTER); </p><p>
48、panel.add(panel3, BorderLayout.SOUTH); </p><p> panel.setBackground(Color.white); </p><p> panel1.setBackground(Color.white); </p><p> panel2.setBackground(Color.white); </p&g
49、t;<p> panel3.setBackground(Color.white); </p><p><b> Init();</b></p><p> com1.addActionListener(new ClockAction());</p><p> com2.addActionListener(new ClockA
50、ction());</p><p> setContentPane(panel);</p><p> setVisible(true); </p><p> setResizable(false); </p><p><b> } </b></p><p> class ClockAct
51、ion implements ActionListener { </p><p> public void actionPerformed(ActionEvent arg0) { </p><p> int c_year, c_month, c_week; </p><p> c_year = Integer.parseInt(com1.getSelected
52、Item().toString()); // 得到當前所選年份 </p><p> c_month = Integer.parseInt(com2.getSelectedItem().toString()) - 1; // 得到當前月份,并減1,計算機中的月為0-11 </p><p> c_week = use(c_year, c_month); // 調用函數(shù)use,得到星期幾 &
53、lt;/p><p> Resetday(c_week, c_year, c_month); // 調用函數(shù)Resetday </p><p><b> } </b></p><p><b> } </b></p><p> public void Init() { </p><
54、;p> int year, month_num, first_day_num; </p><p> String log[] = { "日", "一", "二", "三", "四", "五", "六" }; </p><p> for (i
55、nt i = 0; i < 7; i++) { </p><p> label[i].setText(log[i]); </p><p><b> } </b></p><p> for (int i = 0; i < 49; i = i + 7) { </p><p> label[i].setFo
56、reground(Color.red); // 將星期日的日期設置為紅色 } </p><p> for (int i = 6; i < 49; i = i + 7) { </p><p> label[i].setForeground(Color.green);// 將星期六的日期設置為綠色 } </p><p> for (int i = 1;
57、i < 10000; i++) { </p><p> com1.addItem("" + i); </p><p><b> } </b></p><p> for (int i = 1; i < 13; i++) { </p><p> com2.addItem("&
58、quot; + i); </p><p><b> } </b></p><p> month_num = (int) (now.get(Calendar.MONTH)); // 得到當前時間的月份 </p><p> year = (int) (now.get(Calendar.YEAR)); // 得到當前時間的年份 </p&g
59、t;<p> com1.setSelectedIndex(year - 1); // 設置下拉列表顯示為當前年 </p><p> com2.setSelectedIndex(month_num); // 設置下拉列表顯示為當前月 </p><p> first_day_num = use(year, month_num);</p><p>
60、Resetday(first_day_num, year, month_num); </p><p><b> } </b></p><p> public int use(int reyear, int remonth) { </p><p> int week_num; </p><p> now.set(r
61、eyear, remonth, 1); // 設置時間為所要查詢的年月的第一天 </p><p> week_num = (int) (now.get(Calendar.DAY_OF_WEEK));// 得到第一天的星期 </p><p> return week_num; </p><p><b> } </b></p>
62、<p> @SuppressWarnings("deprecation") </p><p> public void Resetday(int week_log, int year_log, int month_log) { </p><p> int month_day_score; // 存儲月份的天數(shù) </p><p>
63、 int count; </p><p> month_day_score = 0; </p><p> count = 1;</p><p> Date date = new Date(year_log, month_log + 1, 1); // now </p><p> Calendar cal = Calendar.getI
64、nstance();</p><p> cal.setTime(date); </p><p> cal.add(Calendar.MONTH, -1); // 前個月 </p><p> month_day_score = cal.getActualMaximum(Calendar.DAY_OF_MONTH);// 最后一天 </p><
65、p> for (int i = 7; i < 49; i++) { // 初始化標簽 </p><p> label[i].setText("");</p><p><b> } </b></p><p> week_log = week_log + 6; // 將星期數(shù)加6,使顯示正確 </p&g
66、t;<p> month_day_score = month_day_score + week_log; </p><p> for (int i = week_log; i < month_day_score; i++, count++) { </p><p> label[i].setText(count + ""); </p>
67、<p><b> } </b></p><p><b> } </b></p><p> public static void main(String[] args) { </p><p> JFrame.setDefaultLookAndFeelDecorated(true); </p>
68、<p> new MainFrame();</p><p><b> }</b></p><p><b> } </b></p><p> Clock源文件中的代碼如下:</p><p> import java.awt.BorderLayout; </p>&
69、lt;p> import java.awt.Color; </p><p> import java.awt.GridLayout; </p><p> import java.awt.Toolkit; </p><p> import java.awt.event.ActionEvent; </p><p> import
70、java.awt.event.ActionListener; </p><p> import java.sql.Date; </p><p> import java.util.Calendar; </p><p> import javax.swing.JComboBox; </p><p> import javax.swing
71、.JFrame; </p><p> import javax.swing.JLabel; </p><p> import javax.swing.JPanel; </p><p> import java.awt.Canvas; </p><p> import java.awt.Color;</p><p&g
72、t; import java.awt.Font; </p><p> import java.awt.Graphics; </p><p> import java.text.SimpleDateFormat;</p><p> import java.util.Calendar; </p><p> class Clock ext
73、ends Canvas implements Runnable{ </p><p> private static final long serialVersionUID = 3660124045489727166L; </p><p> MainFrame mf; </p><p> Thread t; </p><p> Stri
74、ng time; </p><p> public Clock(MainFrame mf){ </p><p> this.mf=mf; </p><p> setSize(280,40);</p><p> setBackground(Color.white); </p><p> t=new Thread
75、(this); //實例化線程 </p><p> t.start(); //調用線程 </p><p><b> } </b></p><p> public void run(){</p><p> while(true){ </p><p><b> try{ </
76、b></p><p> Thread.sleep(1000); //休眠1秒鐘 </p><p> }catch(InterruptedException e){ </p><p> System.out.println("異常");</p><p><b> } </b></p&
77、gt;<p> this.repaint(100); </p><p><b> } </b></p><p><b> } </b></p><p> public void paint(Graphics g){ </p><p> Font f=new Font(&quo
78、t;宋體",Font.BOLD,16); </p><p> SimpleDateFormat SDF=new SimpleDateFormat("yyyy'年'MM'月'dd'日'HH:mm:ss");</p><p> //格式化時間顯示類型 </p><p> Calendar
79、 now=Calendar.getInstance();</p><p> time=SDF.format(now.getTime()); //得到當前日期和時間 </p><p> g.setFont(f); </p><p> g.setColor(Color.orange); </p><p> g.drawString(tim
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論