




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、東華理工大學信息工程學院JAVA技術(shù)應(yīng)用開發(fā)課程設(shè)計報告日歷記事本姓 名:胡玖龍學 號:201320070142同組成員:無完成日期:2015.7.3目錄1.項目概述22.需求分析23.概要設(shè)計33.1功能結(jié)構(gòu)33.2布局34.詳細設(shè)計及功能實現(xiàn)44.1結(jié)構(gòu)44.2主界面54.3日歷模塊84.4記事本模塊94.5記事列表模塊124.6提醒功能135.運行測試156.總結(jié)191.項目概述日歷記事本是將日歷和記事本結(jié)合在一起,用戶可以任意選擇某一天,保存這一天需要記錄的記事,或者任意查看某一天已經(jīng)記錄的記事。同時還應(yīng)具備提醒功能,當?shù)竭_提醒時間時會自動彈出提醒。2.需求分析日歷記事本大致分為日歷和
2、記事兩個部分。 日歷部分首先,需要選擇日期,用戶可以通過點擊按鈕選擇前一年或后一年,同樣也可以選擇前一個月或后一個月,當月份為1月時,用戶點擊前一個月,會自動跳轉(zhuǎn)到前一年的12月,同理,在12月時點擊后一個月,會自動跳轉(zhuǎn)到下一年的1月。另外,當選擇跨度比較大時,需要多次點擊按鈕,很不方便,所以需要一個下拉框,可以直接選擇某一年或某一個月。當用戶改變選擇日期時,日歷會自動顯示出這一個月的日歷,并且可以通過點擊某一天,來進行添加記事的操作,鼠標經(jīng)過日歷或點擊日歷時,會有不同的效果以提示用戶這是可以點擊的。 記事部分首先,需要一個文本域給用戶編輯記事內(nèi)容,記事和日歷部分所選擇的日期是相關(guān)的,當用戶點
3、擊日歷選擇某一天,則記事本上端會顯示出選擇的日期信息。同時,記事應(yīng)該還具有設(shè)置提醒的功能,用戶點擊設(shè)置提醒按鈕后,會彈出一個新的對話框,用來選擇提醒時間。為保存記事,應(yīng)將記事以文件的形式存儲在計算機上。另外,當用戶想查看所有記事,或者想搜索某一則記事時,可以將日歷部分換成一個表格,列出所有的記事,或者符合搜索結(jié)果的記事。3.概要設(shè)計3.1功能結(jié)構(gòu)日歷記事本以功能劃分,大致分為日歷、記事列表及記事本三個部分:3.2布局軟件界面的大致布局如下圖,可以通過點擊按鈕將日歷切換為記事列表 日期選擇及其他操作 日歷/記事列表 記事本4.詳細設(shè)計及功能實現(xiàn)4.1結(jié)構(gòu)類結(jié)構(gòu)類名父類說明CalendarNote
4、padJFrame創(chuàng)建程序的總體界面,本身只有日期選擇和顯示當前日期等功能,以下3個類將作為JPanel在此類中實例化。包含main方法,是程序執(zhí)行的入口。MyCalendarJPanel實現(xiàn)日歷,可以根據(jù)選擇的年份和月份顯示出此月的日歷,并能用鼠標點擊選擇對哪一天進行操作。NotepadJPanel實現(xiàn)記事本,可以編輯和保存當天的記事,同時可以設(shè)置提醒時間。NoteListJPanel實現(xiàn)記事列表,可以查看某一個月的記事或所有記事,也可以搜索記事。 文件存儲結(jié)構(gòu)程序第一次運行時,會在設(shè)定的位置自動創(chuàng)建路徑:“./日歷記事本/data/” 。例如默認會創(chuàng)建:“E:/日歷記事本/data”。每一
5、則記事都會以txt文件的形式保存在data文件夾下,txt的文件名為記事的日期,例如“20150702.txt”保存的是2015年7月2日的記事資料,txt文件第一行記錄是否有提醒時間,第二行為提醒時間(若無提醒則為空),第三行及以后為記事內(nèi)容,具體保存格式見4.4記事本模塊。4.2主界面 主要組件:類型名稱說明JComboBox<String>yearComboBox通過下拉列表選擇年份JComboBox<String>monthComboBox通過下拉列表選擇月份JButtonpreviousYear選擇前一年JButtonnextYear選擇后一年JButtonp
6、reviousMonth選擇前一月JButtonnextMonth選擇后一月JButtoncurrentBtn返回當前日期JButtonallNoteBtn切換為顯示記事列表或切換回日歷JLabelcurrentTime顯示當前日期和時間MyCalendarleftPane日歷NotepadrightPane記事本NoteListnotePane記事列表 主要方法:方法返回類型說明getTime()void獲取和顯示當前時間,并和提醒時間比較noteMark(int year,int month)void檢查本月中的每一天是否有記事,若有,則用不同顏色標記setFilePath(String
7、path)void設(shè)置記事文件的保存路徑makeDir(File dir)void創(chuàng)建文件路徑getAlarmList()void獲取需要提醒的記事的提醒時間表actionPerformed(ActionEvent e)void實現(xiàn)各種按鈕功能main(String args)void主函數(shù) 一些重要方法的實現(xiàn):makeDir(File dir)這個方法的功能是當路徑不存在時創(chuàng)建文件路徑,例如設(shè)置記事存儲在E:/日歷記事本/data下,則掉用該方法后,會在E盤創(chuàng)建“日歷記事本”文件夾,并在其中再創(chuàng)建“data”文件夾。實現(xiàn)方法:先獲取父文件夾,若父文件夾不存在,則遞歸調(diào)用自身,獲取父文件夾的父
8、文件夾,直到父文件夾存在(根目錄一般必定存在),若父路徑存在,則在父路徑下創(chuàng)建此文件夾。流程圖如下:getAlarmList()這個方法的功能是讀取所有需要提醒的時間,將這些提醒時間按先后順序存儲在鏈表中。實現(xiàn)方法:先讀取data中所有的txt文件的文件名以獲取每一則記事的日期(txt文件的文件名就是日期信息),然后將日期作為參數(shù),調(diào)用getAlarm()方法(在NoteList類中,下文4.5記事列表模塊中會說明)獲取提醒時間,然后再將日期和提醒時間一起存儲在鏈表中,如2015年7月2日的記事的提醒時間為16:30:00,則該方法會將這些信息在鏈表中保存為“20150702163000”,這
9、樣做的原因以及提醒功能的具體運行方式見下文4.6提醒功能。主界面完成后如下圖:(日歷和記事本及記事列表是通過其他類實現(xiàn)的)點擊記事列表按鈕后界面如下圖:4.3日歷模塊主要組件:類型名稱說明JLabelweeksJLabel類數(shù)組,用來顯示星期,一個7個JLabeldaysJLabel類數(shù)組,用來顯示日歷,一個42個主要方法:方法返回類型說明howManyDays(int year,int month)int返回此月有多少天getWeek(int year,int month,int day)int返回這個日期是星期幾getDays(int year,int month)String返回此月天數(shù)
10、的數(shù)組一些重要方法的實現(xiàn):howManyDays(int year,int month)這個方法是通過參數(shù)獲取這個月有多少天,實現(xiàn)方法很簡單,除了二月份,每個月的天數(shù)都是固定的,只要檢查參數(shù)的年份是否是閏年,就可知道二月份的天數(shù)。getWeek(int year,int month,int day)這個方法的作用是得到參數(shù)所寫的日期是星期幾,在程序中,最后一個參數(shù)一般都是1,因為這個方法主要用來獲取某個月的第一天是星期幾。實現(xiàn)方法:JAVA本身提供Calendar類,可以通過這個類自帶的方法來獲取某一天是星期幾,但需要注意的是,得到的結(jié)果1-7表示星期天-星期一,也就是Calendar類默認一
11、個星期是從星期天開始的。為使程序符合中國人習慣,要先將結(jié)果轉(zhuǎn)換為從星期一開始,例如用int week保存結(jié)果,則只需要加一條語句:week=week-1=0?7:week;就可以將結(jié)果轉(zhuǎn)換為從星期一開始。howManyDays(int year,int month)從上面的組件表可知,不管這個月有多少天,都是先創(chuàng)建42個Jlabel,然后將日期填入其中,沒有這一天則為空白,這個方法返回的String中的某項若為null,則沒有這一天。例如2015年7月,這個月的第一天是星期三,則第一天的前兩個Jlabel內(nèi)容為空。這個方法返回的String長度為42不變,這樣就可以很方便的將返回值依次填入42
12、個Jlabel。實現(xiàn)方法:通過getWeek()方法獲取這個月的第一天是星期幾,然后再通過howManyDays()獲取這個月有多少天,最后根據(jù)這兩個數(shù)據(jù)在String中填入值并返回。例如2015年7月,通過上面兩個方法可知此月第一天是星期三,一共有31天,則返回值String dayNums為:dayNums = null,null,”1”,”2”,”3”.”31”,null,.,null;完成后如下圖(不能單獨存在,這是顯示在主界面中的一部分):4.4記事本模塊主要組件:類型名稱說明JButtonsave保存記事JButtondelete刪除記事JButtonalarm設(shè)置提醒JTextA
13、reanote記事內(nèi)容編輯區(qū)域JLabelnoteDate顯示記事的日期JLabelnoteWeek顯示記事的星期AlarmDialogalarmDialog設(shè)置提醒時間,點擊alarm按鈕后彈出主要方法:方法返回類型說明saveNote(int year,int month,int day)void保存記事及提醒deleteNote(int year,int month,int day)void刪除記事及提醒actionPerformed(ActionEvent e)void實現(xiàn)按鈕功能一些重要方法的實現(xiàn):saveNote(int year,int month,int day)這個方法的功能
14、是保存記事及提醒時間(如果有提醒的話),不僅要將記事內(nèi)容和提醒以txt文件形式保存,同時還要將提醒時間放在提醒時間鏈表的合適位置,此過程見4.6提醒功能。實現(xiàn)方法:先通過參數(shù)獲得日期信息,因為參數(shù)為int型,而最后保存的txt文件名長度是固定的,所以當月和天小于10時,要在前面加0。例如,2015年7月2日,應(yīng)轉(zhuǎn)換成20150702,再將文件內(nèi)容保存為20150702.txt。通過這條語句就可以完成:String fName = ""+year+(month<10?"0"+month:month)+(day<10?"0"+
15、day:day)+ ".txt"另外,文件的內(nèi)容不只包括記事內(nèi)容,還有提醒時間,為了便于讀取,都要按照同樣的格式存儲,例如2015年7月2日有一條記事,內(nèi)容為“英語考試,記得帶鉛筆”,提醒時間為08:00:00。則會按如下方式保存:文件名: 20150702.txt位置: E:/日歷記事本/data/20150702.txt內(nèi)容:Y08:00:00英語考試,記得帶鉛筆文件的第一行為是否有提醒的標記,若有提醒則為“Y”,沒有提醒則為“N”。第二行為提醒時間,若沒有提醒,則為空。第三行及以后用來記錄記事內(nèi)容。完成后如下圖:(不能單獨存在,這是顯示在主界面中的一部分) 左圖為已存
16、在記事時,右圖為不存在記事時,下方按鈕狀態(tài)不同點擊設(shè)置提醒后,會彈出如下對話框:設(shè)置提醒時間后,要點擊右邊的啟用提醒后才能啟用。想取消提醒,只需要取消選擇右邊的啟用提醒4.5記事列表模塊主要組件:類型名稱說明JTablenoteTable記事表格,以列表形式顯示多則記事的日期、提醒和摘要JLabelnoteListInfo顯示記事列表的信息JTextFieldsearchField搜索框,可以填入搜索詞JButtonsearch根據(jù)搜索詞搜索記事JButtonallNote切換查看所有記事,或切換回查看本月記事主要方法:方法返回類型說明getNoteInfo(int year,int mont
17、h,boolean getAll)void顯示某月記事的列表,或顯示全部記事的列表getAlarm(int year,int month,int day)String獲取提醒getSummary(int year,int month,int day)String獲取摘要searchNote(String str)void搜索記事actionPerformed(ActionEvent e)void實現(xiàn)按鈕功能 一些重要方法的實現(xiàn):getNoteInfo(int year,int month,boolean getAll)這個方法的左右是獲取記事列表,然后顯示在Jtable中。方法的最后一個參數(shù)若
18、為true,則獲取所有記事,若為false,則只獲取參數(shù)所指月份的記事。實現(xiàn)方法,先根據(jù)參數(shù),讀取此月下的所有記事文件,然后將記事文件的文件名轉(zhuǎn)換成“年-月-日”的形式填入列表中的日期列,再通過getAlarm()方法獲取提醒,將提醒填入列表中的提醒列,再通過getSummary()方法獲取摘要,將摘要填入列表中的摘要列。例如例如2015年7月2日只有一條記事,內(nèi)容為“英語考試,記得帶鉛筆”,提醒時間為08:00:00,則調(diào)用方法getNoteInfo(2015,7,false)后,記事列表會如圖顯示:若調(diào)用getNoteInfo(2015,7,true),則會如圖顯示:即使是顯示全部記事,前
19、兩個日期參數(shù)也不能亂填,因為點擊“查看本月”按鈕后會返回顯示參數(shù)所指月份的記事。getAlarm(int year,int month,int day)這個方法的作用是獲取提醒時間,若有提醒則返回提醒時間,若無提醒則返回“無”。實現(xiàn)方法:根據(jù)參數(shù)讀取記事文件,然后讀取文件的第一行,若第一行內(nèi)容為“N”,則直接返回“無”,若第一行內(nèi)容為“Y”,則返回文件第二行內(nèi)容(即提醒時間)。getSummary(int year,int month,int day)這個方法的作用是獲取記事摘要。實現(xiàn)方法:根據(jù)參數(shù)讀取記事文件,然后跳過文件前兩行,直接從第三行開始讀取文件內(nèi)容,不論記事內(nèi)容多長,都只讀取30個
20、字節(jié),然后將讀取內(nèi)容返回。searchNote(String str)這個方法的作用是通過參數(shù)獲取搜索關(guān)鍵字段,搜索內(nèi)容包含關(guān)鍵字段的記事。實現(xiàn)方法:先讀取data文件夾下的所有記事文件的文件名,將文件名轉(zhuǎn)換成int型的年、月、日,然后將其作為參數(shù),調(diào)用getSummary()方法,通過String類自帶的contains()方法判斷getSummary()的返回的字符串是否包含關(guān)鍵字段,若包含,則將該記事的信息顯示在記事列表中,并繼續(xù)讀取下一個記事文件。4.6提醒功能每一則記事都可以有提醒,而且提醒時間不僅包括時、分、秒這些時間信息,同時也包括日期信息。提醒功能要做的就是,當提醒時間與計算機
21、系統(tǒng)時間重合時,軟件會自動彈出提醒信息。而為了實時獲取計算機系統(tǒng)的時間,至少每秒鐘就要獲取一次系統(tǒng)時間,而若每秒都將系統(tǒng)時間與所有提醒時間一一比較的話,將會耗費大量資源,軟件將會變得沒有效率。為了解決這個問題,必須先將所有提醒時間按發(fā)生先后進行排序,這樣就只需要與最先發(fā)生的提醒進行比較,當提醒已經(jīng)發(fā)生時,則移除此提醒,后一個提醒將變?yōu)榈谝粋€,同時考慮到新增記事時,新的提醒時間要插入到合適位置,會將很多提醒移動,所以最好采用鏈表來存儲提醒信息,這樣可以方便的獲取首元素,也可以方便的新增和刪除元素。具體實現(xiàn):為了方便排序和比較,設(shè)置鏈表元素類型為long型(若為Sting類型,則不能方便的進行大小
22、比較),則鏈表定義如下:LinkedList<Long> alarmLink = new LinkedList<Long>();而元素值為“年月日時分秒”的形式,例如2015年7月2日8:30:00有一則提醒,則該提醒元素值為“20150702083000”,這樣做的好處是,元素值的大小就代表了發(fā)生的先后,值越小,則越先發(fā)生。例如20150702083000小于20150703070000,則2015年7月2日8:30:00的提醒要早于2015年7月3日7:00:00的提醒。另外,并不是所有提醒時間都會加入鏈表中,若當前時間為7月2日,則7月1日的提醒是不會加入到鏈表中的。執(zhí)行流程:先調(diào)用getAlarmList()方法讀取所有已存在的提醒,并將其中晚于當前時間的提醒按先后順序填入alarmLink中;若新增記
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 北京鏈家購房合同范本
- 產(chǎn)品攝影廣告合同范例
- 劇目買斷合同范本
- 融資收費合同范本
- 勞動合同范本解除
- 單位車輛外包服務(wù)合同范本
- 分期出租房合同范本
- 醫(yī)療服務(wù)協(xié)議合同范本
- 單位招聘保安合同范本
- 分項付款合同范本
- PySide學習教程
- 數(shù)據(jù)結(jié)構(gòu)英文教學課件:chapter1 Introduction
- 人教三年級數(shù)學下冊表格式全冊
- 事業(yè)單位綜合基礎(chǔ)知識考試題庫 綜合基礎(chǔ)知識考試題庫.doc
- 優(yōu)秀教研組評比制度及實施細則
- 譯林初中英語教材目錄
- 物業(yè)交付后工程維修工作機制
- 農(nóng)作物病蟲害專業(yè)化統(tǒng)防統(tǒng)治管理辦法
- JJF 1752-2019全自動封閉型發(fā)光免疫分析儀校準規(guī)范(高清版)
- GB 1886.300-2018 食品安全國家標準 食品添加劑 離子交換樹脂(高清版)
- 食品經(jīng)營單位經(jīng)營場所和設(shè)備布局、操作流程示意圖模板
評論
0/150
提交評論