Java超級(jí)萬(wàn)年歷課程設(shè)計(jì)_第1頁(yè)
Java超級(jí)萬(wàn)年歷課程設(shè)計(jì)_第2頁(yè)
Java超級(jí)萬(wàn)年歷課程設(shè)計(jì)_第3頁(yè)
Java超級(jí)萬(wàn)年歷課程設(shè)計(jì)_第4頁(yè)
Java超級(jí)萬(wàn)年歷課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、課程設(shè)計(jì)說(shuō)明書 NO. 16超級(jí)萬(wàn)年歷1課程設(shè)計(jì)的目的JAVA程序設(shè)計(jì)是計(jì)算機(jī)相關(guān)專業(yè)的必修專業(yè)基礎(chǔ)課程,其實(shí)踐性、應(yīng)用性很強(qiáng)。實(shí)踐教學(xué)環(huán)節(jié)是必不可少的一個(gè)重要環(huán)節(jié)。本課程的程序設(shè)計(jì)專題實(shí)際是計(jì)算機(jī)相關(guān)專業(yè)學(xué)生學(xué)習(xí)完JAVA程序設(shè)計(jì)課程后,進(jìn)行的一次全面的綜合訓(xùn)練,JAVA程序設(shè)計(jì)的設(shè)計(jì)目的是加深對(duì)理論教學(xué)內(nèi)容的理解和掌握,使學(xué)生較系統(tǒng)地掌握程序設(shè)計(jì)及其在網(wǎng)絡(luò)開發(fā)中的廣泛應(yīng)用,基本方法及技巧,為學(xué)生綜合運(yùn)用所學(xué)知識(shí),利用軟件工程為基礎(chǔ)進(jìn)行軟件開發(fā)、并在實(shí)踐應(yīng)用方面打下一定基礎(chǔ)。編寫一個(gè)萬(wàn)年歷理解圖像界面的基本組織窗口,以及類、方法的調(diào)用,以及添加控件、并在窗口中顯示,可以對(duì)年份、月份、當(dāng)前的時(shí)

2、間進(jìn)行查詢方便用戶的使用。2設(shè)計(jì)方案論證2.1需求分析本次課程設(shè)計(jì)是編寫一個(gè)萬(wàn)年歷程序,主要目的是加強(qiáng)對(duì)Java的實(shí)際運(yùn)用,了解圖形用戶界面的基本組件窗口、按紐(JButton)、標(biāo)簽(JLabel)、下拉表組件(JComboBox)、文本框(TextBox)、選擇框、查詢事件的處理,菜單的設(shè)計(jì)還有日期的計(jì)算等的使用方法,了解如何使用布局管理器對(duì)組件進(jìn)行管理,以及如何使用Java的事件處理機(jī)制。萬(wàn)年歷是一個(gè)強(qiáng)大的日歷系統(tǒng),通過(guò)它可以實(shí)現(xiàn)對(duì)過(guò)去,現(xiàn)在以及將來(lái)日期的查找,通過(guò)在年份對(duì)應(yīng)的下拉菜單中選擇要查詢的年份,再相應(yīng)的在月份對(duì)應(yīng)的下拉菜單選擇要查詢的月份,則可得到相應(yīng)的日歷。此外,還可以顯示出

3、數(shù)字時(shí)間,很方便用戶的查詢。本實(shí)驗(yàn)是對(duì)圖形用戶界面,布局管理器的綜合運(yùn)用,理解JAVA的時(shí)間處理機(jī)制,編寫?yīng)毩⑦\(yùn)行的窗口。2.2概要設(shè)計(jì)本程序涉及三個(gè)類,MainFrame為顯示日期部分的類,是程序中的主類,ClockAction是對(duì)所要查詢的年份及其月份進(jìn)行選擇的類,Clock是對(duì)當(dāng)前時(shí)間進(jìn)行顯示的類,位與整個(gè)界面的底部,程序運(yùn)行時(shí),只要運(yùn)行MainFrame即可顯示出日期以及時(shí)間的詳細(xì)信息。以下是對(duì)這三個(gè)類的具體說(shuō)明。2.2.1自定義類說(shuō)明(1) ClockAction類作用:獲取當(dāng)前下拉列表中所選擇的信息實(shí)現(xiàn)的接口:ActionListenerActionListener用于接收操作事件

4、的偵聽器接口。使用該類創(chuàng)建的對(duì)象可使用組件的 addActionListener 方法向該組件注冊(cè)。在發(fā)生操作事件時(shí),調(diào)用該對(duì)象的 actionPerformed 方法。ActionEvent指示發(fā)生了組件定義的動(dòng)作的語(yǔ)義事件。當(dāng)特定于組件的動(dòng)作(比如被按下)發(fā)生時(shí),由組件生成此高級(jí)別事件。事件被傳遞給每一個(gè) ActionListener 對(duì)象,這些對(duì)象是使用組件的 addActionListener 方法注冊(cè)的,用以接收這類事件。ClockAction類的具體實(shí)現(xiàn)如下:/對(duì)當(dāng)前所選年份、月份的查詢class ClockAction implements ActionListener publ

5、ic void actionPerformed(ActionEvent arg0) int c_year, c_month, c_week; / 得到當(dāng)前所選年份 c_year = Integer.parseInt(com1.getSelectedItem().toString();/ 得到當(dāng)前月份,并減1,計(jì)算機(jī)中的月為011c_month = Integer.parseInt(com2.getSelectedItem().toString()1; / 調(diào)用函數(shù)use,得到星期幾c_week = use(c_year, c_month); / 調(diào)用函數(shù)ResetdayResetday(c_w

6、eek, c_year, c_month); (2) MainFrame類作用:主類繼承的父類:JFrame實(shí)現(xiàn)的接口:沒(méi)有JFrame是MainFrame的父類,當(dāng)用戶試圖關(guān)閉窗口時(shí),JFrame 知道如何進(jìn)行響應(yīng)。用戶關(guān)閉窗口時(shí),默認(rèn)的行為只是簡(jiǎn)單地隱藏 JFrame。在多屏幕環(huán)境中,可以在不同的屏幕設(shè)備上創(chuàng)建一個(gè) JFrame。主要方法說(shuō)明:public static void main(String args) JFrame.setDefaultLookAndFeelDecorated(true); new MainFrame();(3) Clock類作用:顯示時(shí)間的類繼承的父類:Ca

7、nvas實(shí)現(xiàn)的接口:RunnableCanvas是Clock的父類,它表示屏幕上一個(gè)空白矩形區(qū)域,應(yīng)用程序可以在該區(qū)域內(nèi)繪圖,或者可以從該區(qū)域捕獲用戶的輸入事件。Runnable接口由Clock類來(lái)實(shí)現(xiàn),設(shè)計(jì)該接口的目的是為希望在活動(dòng)時(shí)執(zhí)行代碼的對(duì)象提供一個(gè)公共協(xié)議。主要方法說(shuō)明:/用來(lái)顯示時(shí)間的方法public void paint(Graphics g) Font f=new Font("宋體",Font.BOLD,16); /格式化時(shí)間顯示類型SimpleDateFormat SDF=new SimpleDateFormat("yyyy'年'

8、MM'月'dd'日'HH:mm:ss"); Calendar now=Calendar.getInstance();/得到當(dāng)前日期和時(shí)間time=SDF.format(now.getTime(); g.setFont(f); g.setColor(Color.orange); g.drawString(time,45,25); 2.3系統(tǒng)總體設(shè)計(jì)本程序包括兩部分:一部分是MainFrame.java用來(lái)顯示日期,另一部分是Clock.java,用來(lái)顯示時(shí)間。編寫程序時(shí),首先創(chuàng)建MainFrame類,在MainFrame類中編寫顯示日期的代碼,再創(chuàng)建Cl

9、ock類,再向Clock類中編寫顯示時(shí)間的代碼,把MainFrame類和Clock類放在同一個(gè)項(xiàng)目中,運(yùn)行程序時(shí),只需運(yùn)行MainFrame即可顯示出所有信息,此時(shí),在界面上會(huì)顯示出相應(yīng)的日期,同時(shí),在界面的底部會(huì)顯示出當(dāng)前的時(shí)間。以下是程序的第一部分,也是程序的主體部分。運(yùn)行時(shí),只要運(yùn)行MainFrame.java即可實(shí)現(xiàn)日期的顯示。超級(jí)萬(wàn)年歷月份選擇年份選擇 根據(jù)上面功能描述的介紹,對(duì)基于JAVA的超級(jí)萬(wàn)年歷進(jìn)行總體功能模塊劃分,如圖1所示。圖1功能模塊示意圖2.4系統(tǒng)詳細(xì)設(shè)計(jì)本系統(tǒng)共包括2個(gè)java源文件,類之間的關(guān)系如圖2所示,JAVA源文件及其功能如表所示。MainFrameCloc

10、kActionClock圖2 類關(guān)系圖本程序中有3個(gè)源文件分別是MainFrame、Clock、ClockAction,MainFrame是本程序的主程序,為顯示日期部分的類。Clock實(shí)現(xiàn)使用線程進(jìn)行休眠的功能,用來(lái)顯示當(dāng)期的時(shí)間。ClockAction對(duì)當(dāng)前所選年份、月份的查詢。如表1所示。表1 JAVA源文件序號(hào)類名主要功能1MainFrame本程序的主函數(shù)2Clock初始化界面居中3ClockAction監(jiān)聽事件在主類MainFrame中包括的成員變量有面板、文本框、命令按鈕,實(shí)現(xiàn)向窗口中添加控件的功能,如表2所示。表2成員變量成員變量描述變量類型名稱面板JpanelPanelPane

11、l1Panel2Panel3文本框JLabellabely_labelm_label命令按鈕JComboBoxCom1Com2在主類MainFrame中包括的方法有MaunFrame(),實(shí)現(xiàn)初始化界面居中,如表3所示。表3方法方法名功能備注MaunFrame()初始化界面居中在Clock類中包括的成員變量有類聲明、字符串,如表4所示表4成員變量成員變量描述變量類型名稱類聲明mainframemf類聲明threadt字符串stringtime在Clock類中有4個(gè)方法,分別是方法actionPerformed()實(shí)現(xiàn)監(jiān)聽獲取當(dāng)前時(shí)間的功能、Init()實(shí)現(xiàn)界面初始化、ClockAction()

12、實(shí)現(xiàn)設(shè)置查看的時(shí)間、ResetDay()實(shí)現(xiàn)使查看的時(shí)間正確。如表5所示。表5方法方法名功能備注actionPerformed()監(jiān)聽獲取當(dāng)前時(shí)間Init()界面初始化ClockAction()設(shè)置查看的時(shí)間ResetDay()使查看的時(shí)間正確在ClockAction類中包括的成員變量有,年、月、周,獲取當(dāng)前下拉列表中所選擇的信息,如表6所示。表6成員變量成員變量描述變量類型名稱年int c_year 月 int c_month 周intc_weekClockAction類中有三個(gè)方法,分別是Clock(),該方法實(shí)現(xiàn)初始化線程。Run()方法實(shí)現(xiàn)運(yùn)行休眠。Paint()方法實(shí)現(xiàn)格式

13、化時(shí)間顯示。如表7所示。表7方法方法名功能備注Clock()初始化線程Run()運(yùn)行休眠Paint()格式化時(shí)間顯示3設(shè)計(jì)結(jié)果與分析程序正常運(yùn)行時(shí),顯示當(dāng)前的年份,月份,日期以及數(shù)字時(shí)間。如果想要實(shí)現(xiàn)對(duì)指定日期的查詢,可在“年份”對(duì)應(yīng)的下拉框中選擇所要查詢的年,在“月份”對(duì)應(yīng)的下拉框中選擇所要查詢的月即可。例如:查詢2008年5月30日是星期幾。即在“年份”對(duì)應(yīng)的下拉列表中選擇2008,在“月份”對(duì)應(yīng)的下拉列表中選擇5,通過(guò)選擇,即可實(shí)現(xiàn)對(duì)日期的查詢,查詢后的結(jié)果,通過(guò)此程序,還可對(duì)其他時(shí)間查詢,按照查詢要求進(jìn)行選擇。如圖3所示。圖3 選擇年份、月份按照要求輸入相應(yīng)的查詢條件后,界面上即可顯示

14、所要查詢的日期以及對(duì)應(yīng)顯示當(dāng)前的詳細(xì)時(shí)間。這樣,便可以對(duì)任何日期進(jìn)行查詢了,為使用者提供了很大的幫助。如圖4所示。圖4顯示所選日期4設(shè)計(jì)體會(huì)Java 語(yǔ)言是解釋執(zhí)行的高級(jí)編程語(yǔ)言,是面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,功能強(qiáng)大,它是解釋執(zhí)行的,能跨平臺(tái)使用。具有較高的性能和高度的安全性,Java程序的三級(jí)代碼安全檢查機(jī)制可以有效的防止非法代碼的入侵,阻止對(duì)內(nèi)存的越權(quán)訪問(wèn),能夠避免病毒的侵害,成為Internet上最安全的技術(shù)之一。并且支技多線程,可使用戶程序并行執(zhí)行,即有內(nèi)存垃圾自動(dòng)收集機(jī)制。Java語(yǔ)言是一種“直譯”式語(yǔ)言,即用Java編寫的程序首先被編譯成字節(jié)碼,再通過(guò)JVM解釋成機(jī)器碼,字節(jié)碼是Ja

15、va 專有的一種中間碼,必須通過(guò)JVM來(lái)解釋才能運(yùn)行。在不同的平臺(tái)上,Java有不同的JVM,使用Java 字節(jié)碼可以跨越平臺(tái)的限制,在不同的平臺(tái)上運(yùn)行。經(jīng)過(guò)了一個(gè)學(xué)期對(duì)Java程序設(shè)計(jì)的學(xué)習(xí),我們學(xué)習(xí)了理論知識(shí),了解了Java語(yǔ)言程序設(shè)計(jì)的思想,這些知識(shí)都為我們的下一步學(xué)習(xí)打下了堅(jiān)實(shí)的基礎(chǔ)。經(jīng)過(guò)這次課程設(shè)計(jì)使我對(duì)JAVA圖形用戶界面的有關(guān)知識(shí)有了更深入了解,如幾種布局管理器的使用方法,事件的處理機(jī)制,SWING的基本體系結(jié)構(gòu),SWING組件的使用方法,多媒體的實(shí)現(xiàn)手段等知識(shí)。完成了簡(jiǎn)單的萬(wàn)年歷功能,本次課程設(shè)計(jì)的主要內(nèi)容就是設(shè)計(jì)一個(gè)可以查詢?nèi)掌诘某绦颍ㄟ^(guò)選擇下拉列表中的年份以及月份來(lái)實(shí)現(xiàn)日

16、期的查詢,通過(guò)它可以查詢到日期的一些具體信息,可以查詢所選日期是星期幾,還對(duì)星期六與星期日有特殊顏色的標(biāo)記,方便查看。此外,還可以實(shí)現(xiàn)顯示數(shù)字時(shí)間的功能,簡(jiǎn)單實(shí)用。通過(guò)課程設(shè)計(jì),能夠達(dá)到全面、深入理解和掌握所學(xué)內(nèi)容,能夠進(jìn)行簡(jiǎn)單的分析和判斷。這次課程設(shè)計(jì),雖說(shuō)在設(shè)計(jì)過(guò)程中遇到了很多的困難,但是在老師的細(xì)心指導(dǎo)下,很多不會(huì)的問(wèn)題都迎刃而解了。此次課程設(shè)計(jì)一方面是為了檢查我們一個(gè)學(xué)期來(lái)我們學(xué)習(xí)的成果,另一方面也是為了讓我們進(jìn)一步的掌握和運(yùn)用它,同時(shí)也讓我們認(rèn)清自己的不足之處和薄弱環(huán)節(jié),加以彌補(bǔ)和加強(qiáng)。是對(duì)自己學(xué)習(xí)的一次很好的檢驗(yàn)。能完成這次的課程設(shè)計(jì),和身邊的同學(xué)和老師的幫助分不開的。在此對(duì)指導(dǎo)老

17、師表示感謝,還有幫助過(guò)我的一些同學(xué),在此也表示謝意。5參考文獻(xiàn)1王銳. 基于單片機(jī)的萬(wàn)年歷設(shè)計(jì)J. 河北:信息技術(shù),2014,09:213-216.2饒敏,邱德慧,劉雅斌. 基于NIOS的萬(wàn)年歷設(shè)計(jì)J. 北京:微計(jì)算機(jī)信息,2009:45-1003陳佳,高維松. 基于桌面的多功能萬(wàn)年歷設(shè)計(jì)與開發(fā)J. 河北:軟件刊,2013,02:72-74.4查榮. 基于單片機(jī)的多功能萬(wàn)年歷設(shè)計(jì)J. 北京:機(jī)械制造與自化,2012,03:137-139.5 吳其慶. Java程序設(shè)計(jì)實(shí)例教程M. 北京:冶金工業(yè)出版社,2009:120-230.6 陳佳,高維松. 基于桌面的多功能萬(wàn)年歷設(shè)計(jì)與開發(fā)J. 軟件導(dǎo)刊

18、,2013.02:72-74.7 柳西玲,許斌. Java語(yǔ)言應(yīng)用開發(fā)基礎(chǔ)M .北京:清華大學(xué)出版社,2011.2:100-2008 施霞萍. Java程序設(shè)計(jì)教程M.北京:機(jī)械工業(yè)出版社, 2008.6:111-1219 宛延闿.實(shí)用Java程序設(shè)計(jì)教程M.北京:機(jī)械工業(yè)出版社, 2010.1:67-100附錄MainFrame源文件中的代碼如下:import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import java.awt.Toolkit; import java.awt.ev

19、ent.ActionEvent; import java.awt.event.ActionListener;import java.sql.Date; import java.util.Calendar; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel;import javax.swing.JPanel;public class MainFrame extends JFrame private static final long serialVersionUID = 1L; J

20、Panel panel = new JPanel(new BorderLayout();JPanel panel1 = new JPanel();JPanel panel2 = new JPanel(new GridLayout(7, 7); JPanel panel3 = new JPanel();JLabel label = new JLabel49; JLabel y_label = new JLabel("年份"); JLabel m_label = new JLabel("月份"); JComboBox com1 = new JComboBox

21、();JComboBox com2 = new JComboBox();int re_year, re_month; int x_size, y_size; String year_num; Calendar now = Calendar.getInstance(); / 實(shí)例化Calendar MainFrame() super("萬(wàn)年歷"); setSize(300, 350); x_size = (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth();y_size = (int) (Toolkit.g

22、etDefaultToolkit().getScreenSize().getHeight();setLocation(x_size - 300) / 2, (y_size - 350) / 2); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); panel1.add(y_label);panel1.add(com1); panel1.add(m_label); panel1.add(com2); for (int i = 0; i < 49; i+) labeli = new JLabel("", JLabel.CENT

23、ER);/ 將顯示的字符設(shè)置為居中 panel2.add(labeli); panel3.add(new Clock(this); panel.add(panel1, BorderLayout.NORTH); panel.add(panel2, BorderLayout.CENTER); panel.add(panel3, BorderLayout.SOUTH); panel.setBackground(Color.white); panel1.setBackground(Color.white); panel2.setBackground(Color.white); panel3.setBa

24、ckground(Color.white); Init();com1.addActionListener(new ClockAction();com2.addActionListener(new ClockAction();setContentPane(panel);setVisible(true); setResizable(false); class ClockAction implements ActionListener public void actionPerformed(ActionEvent arg0) int c_year, c_month, c_week; c_year =

25、 Integer.parseInt(com1.getSelectedItem().toString(); / 得到當(dāng)前所選年份 c_month = Integer.parseInt(com2.getSelectedItem().toString() - 1; / 得到當(dāng)前月份,并減1,計(jì)算機(jī)中的月為011 c_week = use(c_year, c_month); / 調(diào)用函數(shù)use,得到星期幾 Resetday(c_week, c_year, c_month); / 調(diào)用函數(shù)Resetday public void Init() int year, month_num, first_day

26、_num; String log = "日", "一", "二", "三", "四", "五", "六" ; for (int i = 0; i < 7; i+) labeli.setText(logi); for (int i = 0; i < 49; i = i + 7) labeli.setForeground(Color.red); / 將星期日的日期設(shè)置為紅色 for (int i = 6; i < 49; i = i + 7)

27、 labeli.setForeground(Color.green);/ 將星期六的日期設(shè)置為綠色 for (int i = 1; i < 10000; i+) com1.addItem("" + i); for (int i = 1; i < 13; i+) com2.addItem("" + i); month_num = (int) (now.get(Calendar.MONTH); / 得到當(dāng)前時(shí)間的月份 year = (int) (now.get(Calendar.YEAR); / 得到當(dāng)前時(shí)間的年份 com1.setSelecte

28、dIndex(year - 1); / 設(shè)置下拉列表顯示為當(dāng)前年 com2.setSelectedIndex(month_num); / 設(shè)置下拉列表顯示為當(dāng)前月 first_day_num = use(year, month_num); Resetday(first_day_num, year, month_num); public int use(int reyear, int remonth) int week_num; now.set(reyear, remonth, 1); / 設(shè)置時(shí)間為所要查詢的年月的第一天 week_num = (int) (now.get(Calendar.D

29、AY_OF_WEEK);/ 得到第一天的星期 return week_num; SuppressWarnings("deprecation") public void Resetday(int week_log, int year_log, int month_log) int month_day_score; / 存儲(chǔ)月份的天數(shù) int count; month_day_score = 0; count = 1;Date date = new Date(year_log, month_log + 1, 1); / now Calendar cal = Calendar.g

30、etInstance();cal.setTime(date); cal.add(Calendar.MONTH, -1); / 前個(gè)月 month_day_score = cal.getActualMaximum(Calendar.DAY_OF_MONTH);/ 最后一天 for (int i = 7; i < 49; i+) / 初始化標(biāo)簽 labeli.setText(""); week_log = week_log + 6; / 將星期數(shù)加6,使顯示正確 month_day_score = month_day_score + week_log; for (int

31、i = week_log; i < month_day_score; i+, count+) labeli.setText(count + ""); public static void main(String args) JFrame.setDefaultLookAndFeelDecorated(true); new MainFrame(); Clock源文件中的代碼如下:import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.Date; import java.u

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論