




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、課程設計說明書 NO. 16超級萬年歷1課程設計的目的JAVA程序設計是計算機相關(guān)專業(yè)的必修專業(yè)基礎課程,其實踐性、應用性很強。實踐教學環(huán)節(jié)是必不可少的一個重要環(huán)節(jié)。本課程的程序設計專題實際是計算機相關(guān)專業(yè)學生學習完JAVA程序設計課程后,進行的一次全面的綜合訓練,JAVA程序設計的設計目的是加深對理論教學內(nèi)容的理解和掌握,使學生較系統(tǒng)地掌握程序設計及其在網(wǎng)絡開發(fā)中的廣泛應用,基本方法及技巧,為學生綜合運用所學知識,利用軟件工程為基礎進行軟件開發(fā)、并在實踐應用方面打下一定基礎。編寫一個萬年歷理解圖像界面的基本組織窗口,以及類、方法的調(diào)用,以及添加控件、并在窗口中顯示,可以對年份、月份、當前的時
2、間進行查詢方便用戶的使用。2設計方案論證2.1需求分析本次課程設計是編寫一個萬年歷程序,主要目的是加強對Java的實際運用,了解圖形用戶界面的基本組件窗口、按紐(JButton)、標簽(JLabel)、下拉表組件(JComboBox)、文本框(TextBox)、選擇框、查詢事件的處理,菜單的設計還有日期的計算等的使用方法,了解如何使用布局管理器對組件進行管理,以及如何使用Java的事件處理機制。萬年歷是一個強大的日歷系統(tǒng),通過它可以實現(xiàn)對過去,現(xiàn)在以及將來日期的查找,通過在年份對應的下拉菜單中選擇要查詢的年份,再相應的在月份對應的下拉菜單選擇要查詢的月份,則可得到相應的日歷。此外,還可以顯示出
3、數(shù)字時間,很方便用戶的查詢。本實驗是對圖形用戶界面,布局管理器的綜合運用,理解JAVA的時間處理機制,編寫獨立運行的窗口。2.2概要設計本程序涉及三個類,MainFrame為顯示日期部分的類,是程序中的主類,ClockAction是對所要查詢的年份及其月份進行選擇的類,Clock是對當前時間進行顯示的類,位與整個界面的底部,程序運行時,只要運行MainFrame即可顯示出日期以及時間的詳細信息。以下是對這三個類的具體說明。2.2.1自定義類說明(1) ClockAction類作用:獲取當前下拉列表中所選擇的信息實現(xiàn)的接口:ActionListenerActionListener用于接收操作事件
4、的偵聽器接口。使用該類創(chuàng)建的對象可使用組件的 addActionListener 方法向該組件注冊。在發(fā)生操作事件時,調(diào)用該對象的 actionPerformed 方法。ActionEvent指示發(fā)生了組件定義的動作的語義事件。當特定于組件的動作(比如被按下)發(fā)生時,由組件生成此高級別事件。事件被傳遞給每一個 ActionListener 對象,這些對象是使用組件的 addActionListener 方法注冊的,用以接收這類事件。ClockAction類的具體實現(xiàn)如下:/對當前所選年份、月份的查詢class ClockAction implements ActionListener publ
5、ic void actionPerformed(ActionEvent arg0) int c_year, c_month, c_week; / 得到當前所選年份 c_year = Integer.parseInt(com1.getSelectedItem().toString();/ 得到當前月份,并減1,計算機中的月為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實現(xiàn)的接口:沒有JFrame是MainFrame的父類,當用戶試圖關(guān)閉窗口時,JFrame 知道如何進行響應。用戶關(guān)閉窗口時,默認的行為只是簡單地隱藏 JFrame。在多屏幕環(huán)境中,可以在不同的屏幕設備上創(chuàng)建一個 JFrame。主要方法說明:public static void main(String args) JFrame.setDefaultLookAndFeelDecorated(true); new MainFrame();(3) Clock類作用:顯示時間的類繼承的父類:Ca
7、nvas實現(xiàn)的接口:RunnableCanvas是Clock的父類,它表示屏幕上一個空白矩形區(qū)域,應用程序可以在該區(qū)域內(nèi)繪圖,或者可以從該區(qū)域捕獲用戶的輸入事件。Runnable接口由Clock類來實現(xiàn),設計該接口的目的是為希望在活動時執(zhí)行代碼的對象提供一個公共協(xié)議。主要方法說明:/用來顯示時間的方法public void paint(Graphics g) Font f=new Font("宋體",Font.BOLD,16); /格式化時間顯示類型SimpleDateFormat SDF=new SimpleDateFormat("yyyy'年'
8、MM'月'dd'日'HH:mm:ss"); Calendar now=Calendar.getInstance();/得到當前日期和時間time=SDF.format(now.getTime(); g.setFont(f); g.setColor(Color.orange); g.drawString(time,45,25); 2.3系統(tǒng)總體設計本程序包括兩部分:一部分是MainFrame.java用來顯示日期,另一部分是Clock.java,用來顯示時間。編寫程序時,首先創(chuàng)建MainFrame類,在MainFrame類中編寫顯示日期的代碼,再創(chuàng)建Cl
9、ock類,再向Clock類中編寫顯示時間的代碼,把MainFrame類和Clock類放在同一個項目中,運行程序時,只需運行MainFrame即可顯示出所有信息,此時,在界面上會顯示出相應的日期,同時,在界面的底部會顯示出當前的時間。以下是程序的第一部分,也是程序的主體部分。運行時,只要運行MainFrame.java即可實現(xiàn)日期的顯示。超級萬年歷月份選擇年份選擇 根據(jù)上面功能描述的介紹,對基于JAVA的超級萬年歷進行總體功能模塊劃分,如圖1所示。圖1功能模塊示意圖2.4系統(tǒng)詳細設計本系統(tǒng)共包括2個java源文件,類之間的關(guān)系如圖2所示,JAVA源文件及其功能如表所示。MainFrameCloc
10、kActionClock圖2 類關(guān)系圖本程序中有3個源文件分別是MainFrame、Clock、ClockAction,MainFrame是本程序的主程序,為顯示日期部分的類。Clock實現(xiàn)使用線程進行休眠的功能,用來顯示當期的時間。ClockAction對當前所選年份、月份的查詢。如表1所示。表1 JAVA源文件序號類名主要功能1MainFrame本程序的主函數(shù)2Clock初始化界面居中3ClockAction監(jiān)聽事件在主類MainFrame中包括的成員變量有面板、文本框、命令按鈕,實現(xiàn)向窗口中添加控件的功能,如表2所示。表2成員變量成員變量描述變量類型名稱面板JpanelPanelPane
11、l1Panel2Panel3文本框JLabellabely_labelm_label命令按鈕JComboBoxCom1Com2在主類MainFrame中包括的方法有MaunFrame(),實現(xiàn)初始化界面居中,如表3所示。表3方法方法名功能備注MaunFrame()初始化界面居中在Clock類中包括的成員變量有類聲明、字符串,如表4所示表4成員變量成員變量描述變量類型名稱類聲明mainframemf類聲明threadt字符串stringtime在Clock類中有4個方法,分別是方法actionPerformed()實現(xiàn)監(jiān)聽獲取當前時間的功能、Init()實現(xiàn)界面初始化、ClockAction()
12、實現(xiàn)設置查看的時間、ResetDay()實現(xiàn)使查看的時間正確。如表5所示。表5方法方法名功能備注actionPerformed()監(jiān)聽獲取當前時間Init()界面初始化ClockAction()設置查看的時間ResetDay()使查看的時間正確在ClockAction類中包括的成員變量有,年、月、周,獲取當前下拉列表中所選擇的信息,如表6所示。表6成員變量成員變量描述變量類型名稱年int c_year 月 int c_month 周intc_weekClockAction類中有三個方法,分別是Clock(),該方法實現(xiàn)初始化線程。Run()方法實現(xiàn)運行休眠。Paint()方法實現(xiàn)格式
13、化時間顯示。如表7所示。表7方法方法名功能備注Clock()初始化線程Run()運行休眠Paint()格式化時間顯示3設計結(jié)果與分析程序正常運行時,顯示當前的年份,月份,日期以及數(shù)字時間。如果想要實現(xiàn)對指定日期的查詢,可在“年份”對應的下拉框中選擇所要查詢的年,在“月份”對應的下拉框中選擇所要查詢的月即可。例如:查詢2008年5月30日是星期幾。即在“年份”對應的下拉列表中選擇2008,在“月份”對應的下拉列表中選擇5,通過選擇,即可實現(xiàn)對日期的查詢,查詢后的結(jié)果,通過此程序,還可對其他時間查詢,按照查詢要求進行選擇。如圖3所示。圖3 選擇年份、月份按照要求輸入相應的查詢條件后,界面上即可顯示
14、所要查詢的日期以及對應顯示當前的詳細時間。這樣,便可以對任何日期進行查詢了,為使用者提供了很大的幫助。如圖4所示。圖4顯示所選日期4設計體會Java 語言是解釋執(zhí)行的高級編程語言,是面向?qū)ο蟮某绦蛟O計語言,功能強大,它是解釋執(zhí)行的,能跨平臺使用。具有較高的性能和高度的安全性,Java程序的三級代碼安全檢查機制可以有效的防止非法代碼的入侵,阻止對內(nèi)存的越權(quán)訪問,能夠避免病毒的侵害,成為Internet上最安全的技術(shù)之一。并且支技多線程,可使用戶程序并行執(zhí)行,即有內(nèi)存垃圾自動收集機制。Java語言是一種“直譯”式語言,即用Java編寫的程序首先被編譯成字節(jié)碼,再通過JVM解釋成機器碼,字節(jié)碼是Ja
15、va 專有的一種中間碼,必須通過JVM來解釋才能運行。在不同的平臺上,Java有不同的JVM,使用Java 字節(jié)碼可以跨越平臺的限制,在不同的平臺上運行。經(jīng)過了一個學期對Java程序設計的學習,我們學習了理論知識,了解了Java語言程序設計的思想,這些知識都為我們的下一步學習打下了堅實的基礎。經(jīng)過這次課程設計使我對JAVA圖形用戶界面的有關(guān)知識有了更深入了解,如幾種布局管理器的使用方法,事件的處理機制,SWING的基本體系結(jié)構(gòu),SWING組件的使用方法,多媒體的實現(xiàn)手段等知識。完成了簡單的萬年歷功能,本次課程設計的主要內(nèi)容就是設計一個可以查詢?nèi)掌诘某绦?,通過選擇下拉列表中的年份以及月份來實現(xiàn)日
16、期的查詢,通過它可以查詢到日期的一些具體信息,可以查詢所選日期是星期幾,還對星期六與星期日有特殊顏色的標記,方便查看。此外,還可以實現(xiàn)顯示數(shù)字時間的功能,簡單實用。通過課程設計,能夠達到全面、深入理解和掌握所學內(nèi)容,能夠進行簡單的分析和判斷。這次課程設計,雖說在設計過程中遇到了很多的困難,但是在老師的細心指導下,很多不會的問題都迎刃而解了。此次課程設計一方面是為了檢查我們一個學期來我們學習的成果,另一方面也是為了讓我們進一步的掌握和運用它,同時也讓我們認清自己的不足之處和薄弱環(huán)節(jié),加以彌補和加強。是對自己學習的一次很好的檢驗。能完成這次的課程設計,和身邊的同學和老師的幫助分不開的。在此對指導老
17、師表示感謝,還有幫助過我的一些同學,在此也表示謝意。5參考文獻1王銳. 基于單片機的萬年歷設計J. 河北:信息技術(shù),2014,09:213-216.2饒敏,邱德慧,劉雅斌. 基于NIOS的萬年歷設計J. 北京:微計算機信息,2009:45-1003陳佳,高維松. 基于桌面的多功能萬年歷設計與開發(fā)J. 河北:軟件刊,2013,02:72-74.4查榮. 基于單片機的多功能萬年歷設計J. 北京:機械制造與自化,2012,03:137-139.5 吳其慶. Java程序設計實例教程M. 北京:冶金工業(yè)出版社,2009:120-230.6 陳佳,高維松. 基于桌面的多功能萬年歷設計與開發(fā)J. 軟件導刊
18、,2013.02:72-74.7 柳西玲,許斌. Java語言應用開發(fā)基礎M .北京:清華大學出版社,2011.2:100-2008 施霞萍. Java程序設計教程M.北京:機械工業(yè)出版社, 2008.6:111-1219 宛延闿.實用Java程序設計教程M.北京:機械工業(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(); / 實例化Calendar MainFrame() super("萬年歷"); 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);/ 將顯示的字符設置為居中 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(); / 得到當前所選年份 c_month = Integer.parseInt(com2.getSelectedItem().toString() - 1; / 得到當前月份,并減1,計算機中的月為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); / 將星期日的日期設置為紅色 for (int i = 6; i < 49; i = i + 7)
27、 labeli.setForeground(Color.green);/ 將星期六的日期設置為綠色 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); / 得到當前時間的月份 year = (int) (now.get(Calendar.YEAR); / 得到當前時間的年份 com1.setSelecte
28、dIndex(year - 1); / 設置下拉列表顯示為當前年 com2.setSelectedIndex(month_num); / 設置下拉列表顯示為當前月 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); / 設置時間為所要查詢的年月的第一天 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; / 存儲月份的天數(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); / 前個月 month_day_score = cal.getActualMaximum(Calendar.DAY_OF_MONTH);/ 最后一天 for (int i = 7; i < 49; i+) / 初始化標簽 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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智慧農(nóng)業(yè)技術(shù)推廣實戰(zhàn)手冊
- 浙江廣告字施工方案
- 2025年人力資源制度:人事勞動合同管理程序
- 定向井技術(shù)服務合同
- 設計和施工方案資質(zhì)
- 防彈玻璃施工方案
- 戶內(nèi)沉箱滲水施工方案
- TACCEM 129-2024 糧食環(huán)鏈刮板輸送機
- 鐵路伸縮縫圖片施工方案
- 威海鋁鎂錳屋面施工方案
- 2025年渭南職業(yè)技術(shù)學院單招職業(yè)技能測試題庫及答案一套
- 2025年貴州貴安新區(qū)產(chǎn)業(yè)發(fā)展控股集團有限公司招聘筆試參考題庫附帶答案詳解
- 機械制造技術(shù)基礎(課程課件完整版)
- 煤礦崗位標準化作業(yè)流程
- 電子病歷及病歷信息標準化(第五講)
- 鐵路建設項目工程試驗室管理標準TB104422009
- SPSS術(shù)語中英文對照詳解
- 第六章、光致抗蝕劑PPT課件
- 正泰電器低壓電器選型手冊
- 室內(nèi)電氣施工設計說明
- 各種中西藥特效外敷方藥
評論
0/150
提交評論