已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
北京郵電大學Java程序設計Java程序設計題目:課程作業(yè)三實驗報告 一、 題目要求作業(yè)要求:按如下要求編寫圖形用戶界面程序,最后提交紙質報告報告要求:包括設計思路、關鍵代碼及運行結果題目:在以下題目中任選一題,也可以自由發(fā)揮,要求使用Java事件處理機制。Java簡易計算器Java日歷軟件Java記事本Java學生信息管理系統(tǒng)二、 設計思路1、 設計圖形界面我們期望的圖形界面大概是這個樣子:XXXX年XX月日一二三四五六年份:1234(輸入框)567891011月份:12131415161718(輸入框)19202122232425查詢按鈕2627282930備忘:(輸入框)其中,只要在年份和月份對應的輸入框中,輸入一個年份、月份,按下查詢按鍵,日歷即可顯示,最頂上的標題可以動態(tài)更新。這是各個組件的關系示意圖,其中,圖中的p0、p1、p2為JPanel對象,方便安排我們的格局;label0、label1、label2三個對象,為JLable對象,用于顯示三個標簽,text1、text2、text3三個對象,為JTextField對象,用于輸入年份月份,button1為JButton對象,用于按下以查詢日歷。2、 程序流程圖程序開始顯示2014年12月的日歷,當輸入一個年份和月份時,判斷是否合法,合法則輸出該月的日歷,不合法則輸出一個空日歷。3、 程序邏輯框圖 以上是我們程序的邏輯框圖。首先利用leapYear()判斷這一年是否為閏年;然后利用getMonthDay(),各個月份的日期相加,求出1800年以來,這個月之前共有多少天;然后利用getStartDay(),求出這個月開始的一天為星期幾,再配合getMonthDay(),即可得到該月的日歷。再使用Showcal(),修改內部參數(shù),即可在程序中顯示出來。三、 關鍵代碼分析 構造方法:public cal() super(2012210637鄭晨宇Java作業(yè)日歷軟件); /框架命名 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/窗口關閉函數(shù)this.setBounds(400,150,550,340);/設置窗口的位置和大小Container c=getContentPane(); p1 = new JPanel();/面板對象, p3 = new JPanel(new GridLayout(8,1,3,3);/在面板對象p3里使用網格布局管理器 p2 = new JPanel(new GridLayout(7,7,10,1);/網格布局管理器 label0=new JLabel(年份:);/標簽組件 label1=new JLabel(月份:); label2=new JLabel(備忘錄:); label3=new JLabel(); text1=new JTextField(2014,1);/文本框 text2=new JTextField(12,1); text3=new JTextField(1); button1=new JButton(查看);/按鈕 int i;/中心面板中各個標簽初始化(用顯示日歷7行7列)for(i=0;i7;i+) p2.add(aii=new JLabel(asti);/第一行顯示是周幾(星期日到星期六) for (i= 7; i 49; i+) p2.add(aii=new JLabel();/暫時為空,在showcal中具體定義各月不同的顯示 p3.add(label0); p3.add(text1); p3.add(label1); p3.add(text2); p3.add(button1); p3.add(label2); p3.add(text3); p1.add(label3); setVisible(true); c.add(p1,BorderLayout.NORTH); c.add(p3,BorderLayout.EAST); c.add(p2,BorderLayout.CENTER); button1.addActionListener(this);/注冊年份、月份輸入和ok按鈕監(jiān)聽器 this.setVisible(true);/窗口可見 /main主函數(shù) 這個構造方法首先構造了一個JFrame對象并初始化,然后將各個標簽、輸入框、按鍵賦初值,填入預定的panel中,在將panel填入框架的指定位置,最后設定了按鍵的監(jiān)聽器。由于cal類已經實現(xiàn)了ActionListener接口(實現(xiàn)過程見后),所以使用該對象作為事件處理器即可。 actionPerformed方法public void actionPerformed (ActionEvent e) if(e.getSource() = button1) try/控制輸入的年份正確,異常控制 if (text1.getText().length() != 4) throw new NumberFormatException(); catch (NumberFormatException ex) return; String s1=text1.getText();/得到輸入的年份 year=Integer.parseInt(s1);/將年份轉換為int型,year為靜態(tài)變量 String s2=text2.getText();/月份,同年份處理 month=Integer.parseInt(s2); showcal(year,month);/調用顯示日歷的函數(shù) /showcal:在中間面板中顯示網格布局之后的日歷主界面 當button按下時,產生了一個ActionEvent,被注冊的事件監(jiān)聽器捕捉到。捕捉后,首先將年份和月份轉換為int型,再調用showcal函數(shù)(實現(xiàn)過程見后),顯示這個月的日歷。 showcal方法public void showcal(int year,int month) int monthDay=getMonthDay(year,month);/得到一個月有多少天 int startDay=getStartDay(year,month);/得到每個月開始是周幾 /顯示當前窗口中顯示日歷的年月 String rr=+Integer.toString(year)+年+Integer.toString(month)+月; label3.setText(rr); /控制各月日歷的正確顯示 int i; for (i= 7; i startDay+7; i+) aii.setText(); for (i =startDay+7;istartDay + monthDay + 7;i+) String bb;/存在意義:便于實現(xiàn)setText函數(shù)的帶格式輸入 if(i-startDay-610) bb= +Integer.toString(i-startDay-6);/將int型轉換為String型 else bb= +Integer.toString(i-startDay-6); aii.setText(bb); for(i=startDay + monthDay + 7;i49;i+) aii.setText(); 首先調用getMonthDay 和getStartDay方法(實現(xiàn)方法見后),獲得這個月共有多少天,和這個月開始的一天是星期幾,這樣就得到了本月的日歷。然后將該月的日歷保存到數(shù)組ai中,用來顯示。 leapYear方法public static boolean leapYear(int year) if (year % 400 = 0) | (year % 4 = 0) & (year % 100 != 0) return true; elsereturn false; 這個方法判斷這一年是不是閏年。程序較為簡單,不再贅述。 getMonthDay方法public static int getMonthDay(int year, int month) if (month = 1 | month=3 | month = 5 | month = 7 | month = 8 | month = 10 | month = 12) return 31; if (month = 4 | month = 6 | month = 9 | month = 11) return 30; if(month = 2) if (leapYear(year)/閏年二月29天 return 29; else return 28; return 0; /if month is incorrect./如果月份輸入錯誤返回0. 這個方法用來得到這個月共有多少天。程序較為簡單,不再贅述。 getStartDay方法public static int getStartDay(int year,int month) /從1800年1月1日開始 int startDay1800 = 3; long totalDays = getTotalDays(year, month); return (int)(totalDays + startDay1800) % 7); 這個方法用來得到這個月的第一天是星期幾。程序較為簡單,不再贅述。 getTotalDays方法public static long getTotalDays(int year, int month) long total = 0; for (int i = 1800; i year; i+) if (leapYear(i) total = total + 366; else total = total + 365; for (int i = 1; i month; i+) total = total + getMonthDay(year, i); return total; 這個方法遍歷1800年之后的各年和本年的各月份,獲得在這個月份之前,共有多少天(以1800年1月1日為起點)。四、 程序運行結果1、 進入程序進入程序后,程序顯示2014年12月的日歷,日歷正確。2、 修改日期我們修改日期(2015年1月)以后,點擊查詢鍵,日歷正確顯示了2015年的日歷。點擊右上角紅叉可以退出程序。五、 源程序import java.awt.*; import java.awt.event.*; import javax.swing.*; public class cal extends JFrame implements ActionListener static int year,month; /設置靜態(tài)變量便于計算方法的實現(xiàn) private String ast = 日, 一, 二, 三, 四, 五, 六; private JLabel ai = new JLabel49; private JLabel label0,label1,label2,label3; /標簽 private JTextField text1,text2,text3; /輸入框 private JButton button1; /按鈕 private JPanel p3,p1,p2; /面板 public cal() super(2012210637鄭晨宇Java作業(yè)日歷軟件); /框架命名 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/窗口關閉函數(shù)this.setBounds(400,150,550,340);/設置窗口的位置和大小Container c=getContentPane(); p1 = new JPanel();/面板對象, p3 = new JPanel(new GridLayout(8,1,3,3);/在面板對象p3里使用網格布局管理器 p2 = new JPanel(new GridLayout(7,7,10,1);/網格布局管理器 label0=new JLabel(年份:);/標簽組件 label1=new JLabel(月份:); label2=new JLabel(備忘錄:); label3=new JLabel(); text1=new JTextField(2014,1);/文本框 text2=new JTextField(12,1); text3=new JTextField(1); button1=new JButton(查看);/按鈕 int i;/中心面板中各個標簽初始化(用顯示日歷7行7列)for(i=0;i7;i+) p2.add(aii=new JLabel(asti);/第一行顯示是周幾(星期日到星期六) for (i= 7; i 49; i+) p2.add(aii=new JLabel();/暫時空,在showcal中具體定義各月不同的顯示 p3.add(label0); p3.add(text1); p3.add(label1); p3.add(text2); p3.add(button1); p3.add(label2); p3.add(text3); p1.add(label3); setVisible(true); c.add(p1,BorderLayout.NORTH); c.add(p3,BorderLayout.EAST); c.add(p2,BorderLayout.CENTER); button1.addActionListener(this);/注冊年份、月份輸入和ok按鈕監(jiān)聽器/ text1.addActionListener(this); / text2.addActionListener(this); this.setVisible(true);/窗口可見 /main主函數(shù) public static void main(String args) cal a=new cal(); a.showcal(2014,12);/初始化顯示2013年6月日歷 /事件處理方法 public void actionPerformed (ActionEvent e) /e.getSource() = text1 | e.getSource() = text2 | if(e.getSource() = button1) try/控制輸入的年份正確,異??刂?if (text1.getText().length() != 4) throw new NumberFormatException(); catch (NumberFormatException ex) return; String s1=text1.getText();/得到輸入的年份 year=Integer.parseInt(s1);/將年份轉換為int型,year為靜態(tài)變量 String s2=text2.getText();/月份,同年份處理 month=Integer.parseInt(s2); showcal(year,month);/調用顯示日歷的函數(shù) /showcal:在中間面板中顯示網格布局之后的日歷主界面 public void showcal(int year,int month) int monthDay=getMonthDay(year,month);/得到一個月有多少天 int startDay=getStartDay(year,month);/得到每個月開始是周幾 /顯示當前窗口中顯示日歷的年月 String rr=+Integer.toString(year)+年+Integer.toString(month)+月; label3.setText(rr); /控制各月日歷的正確顯示 int i; for (i= 7; i startDay+7; i+) aii.setText(); for (i =startDay+7;istartDay + monthDay + 7;i+) String bb;/存在意義:便于實現(xiàn)setText函數(shù)的帶格式輸入 if(i-startDay-610) bb= +Integer.toString(i-startDay-6);/int型轉換為String型 else bb= +Integer.toString(i-startDay-6); aii.setText(bb); for(i=startDay + monthDay + 7;i49;i+) aii.setText(); /leapYear:判斷是否為閏年 public static boolean leapYear(int year) if (year % 400 = 0) | (year % 4 = 0) & (year % 100 != 0) return true; elsereturn false; /getMonthDay:每月總天數(shù) public static int
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45120-2024道路車輛48 V供電電壓電氣要求及試驗
- 2024幼兒園保育員幼兒教育理念與實踐合同3篇
- 二零二五年房地產項目海外分銷代理協(xié)議3篇
- 二零二五版國際貿易人才招聘與培訓合同2篇
- 2025年教育設施智能化改造與裝修服務合同范本3篇
- 2025年度環(huán)保設施運營管理合同范本及效益評估3篇
- 專業(yè)車輛運送協(xié)議模板(2024定制版)版B版
- 2024虛擬股投資退出機制合同范本3篇
- 二零二五年度駕校經營管理權定制化服務協(xié)議2篇
- 二零二五年度文化產業(yè)發(fā)展前景調研合同3篇
- 24年追覓在線測評28題及答案
- TGDNAS 043-2024 成人靜脈中等長度導管置管技術
- 《陸上風電場工程概算定額》NBT 31010-2019
- GB/T 29490-2013企業(yè)知識產權管理規(guī)范
- GB/T 14436-1993工業(yè)產品保證文件總則
- 湖南省鄉(xiāng)鎮(zhèn)衛(wèi)生院街道社區(qū)衛(wèi)生服務中心地址醫(yī)療機構名單目錄
- 《中外資產評估準則》課件第6章 英國評估準則
- FZ∕T 63006-2019 松緊帶
- 罐區(qū)自動化系統(tǒng)總體方案(31頁)ppt課件
- BIQS評分表模板
- 工程建設項目內外關系協(xié)調措施
評論
0/150
提交評論