java課程設(shè)計(jì)萬年歷程序設(shè)計(jì)報告_第1頁
java課程設(shè)計(jì)萬年歷程序設(shè)計(jì)報告_第2頁
java課程設(shè)計(jì)萬年歷程序設(shè)計(jì)報告_第3頁
java課程設(shè)計(jì)萬年歷程序設(shè)計(jì)報告_第4頁
java課程設(shè)計(jì)萬年歷程序設(shè)計(jì)報告_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、信息科學(xué)與工程學(xué)院山東科技大學(xué)信息學(xué)院JAVA程序設(shè)計(jì) 學(xué) 院 :信息科學(xué)與工程學(xué)院 班 級 :計(jì)算機(jī) 11-3 學(xué) 號 :201101050230 姓 名 : 趙樂 信息科學(xué)與工程學(xué)院目 錄第23頁目 錄1前言11需求分析22.概要設(shè)計(jì)33.各模塊的功能及程序說明54測試分析135源程序清單136課程設(shè)計(jì)體會22前言Java的前身是Oak,它一開始只是被應(yīng)用于消費(fèi)性電子產(chǎn)品中。后來它的開發(fā)者們發(fā)現(xiàn)它還可以被用于更大范圍的Internet上。1995年,Java語言的名字從Oak編程了Java。1997年J2SE1.1發(fā)布。1998年J2SE1.2發(fā)布,標(biāo)志Java2的誕生。十多年來,Java

2、編程語言及平臺成功地運(yùn)用在網(wǎng)絡(luò)計(jì)算及移動等各個領(lǐng)域。Java的體系結(jié)構(gòu)由Java語言、Java class、Java API、Java虛擬機(jī)組成。它具有簡單、面向?qū)ο?、健壯、安全、結(jié)構(gòu)中立、可移植和高效能等眾多優(yōu)點(diǎn)。Java支持多線程編程,Java運(yùn)行時系統(tǒng)在多線程同步方面具有成熟的解決方案。Java的平臺標(biāo)準(zhǔn)有Java ME,Java SE和Java EE。Java發(fā)展到今天,它的卓越成就及在業(yè)界的地位毋庸置疑。目前在眾多的支持Java的開發(fā)工具中主要的7有Java Development Kit,NetBeans,Jcreator,JBuilder,JDeveloper和Eclipse等。

3、其中Java Development Kit 簡稱JDK是大多開發(fā)工具的基礎(chǔ)。以上的每種開發(fā)工具都有優(yōu)缺點(diǎn),對于開發(fā)者來說,重要的是要根據(jù)自己的開發(fā)規(guī)模、開發(fā)內(nèi)容和軟硬件環(huán)境等因素來選擇一種合適的開發(fā)工具。1需求分析1.1需求分析本程序的要求為:1.使用圖形用戶界面;2.本程序能夠?qū)崿F(xiàn)日期與星期的查詢。1.2功能設(shè)計(jì)本程序要構(gòu)建的萬年歷程序,其功能有以下幾個方面:(1)通過網(wǎng)頁形式運(yùn)行,實(shí)現(xiàn)圖形界面。(2)能以月歷形式顯示日期與星期。 (3)支持用戶自己輸入年份,并提供月份的下拉形式菜單來選擇月份。 (4)通過點(diǎn)擊“更新”來刷新日歷。2.概要設(shè)計(jì)2.1程序設(shè)計(jì)思路1. 總天數(shù)的算法:首先用if

4、語句判斷定義年到輸入年之間每一年是否為閏年,是閏年,該年的總天數(shù)為366,否則,為365。然后判斷輸入的年是否為定義年,若是,令總天數(shù)S=1,否則,用累加法計(jì)算出定義年到輸入年之間的總天數(shù),再把輸入年的一月到要輸出的月份之間的天數(shù)累加起來,若該月是閏年中的月份并且該月還大于二月,再使總天數(shù)加1,否則,不加,既算出從定義年一月一日到輸出年的該月一日的總天數(shù)。2. 輸出月份第一天為星期幾的算法:使總天數(shù)除以7取余加2得幾既為星期幾,若是7,則為星期日。3. 算出輸出月份第一天為星期幾的算法:算出輸出月份第一天為星期幾后,把該日期以前的位置用空格補(bǔ)上,并總該日起一次輸出天數(shù)直到月底,該月中的天數(shù)加上

5、該月一日為星期幾的數(shù)字再除以7得0換行,即可完整的輸出該月的日歷。4. 如果年份小于1582年則程序不予判斷。2.2程序運(yùn)行界面圖2-1 程序運(yùn)行界面2.3流程圖開始初始化程序,獲取當(dāng)前日期調(diào)取當(dāng)前日期下日志文件繪制界面判斷日期是否更新結(jié)束3.各模塊的功能及程序說明3.1.初始化組件import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;

6、import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;/import java.sql.Date;impo

7、rt java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;

8、import javax.swing.JTable;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.table.DefaultTableModel;3.2.初始化數(shù)據(jù)private Calendar cld = Calendar.getInstance();private String astr = 星期一, 星期二, 星期三, 星期四, 星期五, 星期六, 星期日;private DefaultTableModel dtm = new DefaultTableModel(null,as

9、tr);private JTable table = new JTable(dtm); /裝日期的表格private JScrollPane sp = new JScrollPane(table);private JButton bLastYear = new JButton(上一年);private JButton bNextYear = new JButton(下一年);private JButbNextMonth = new JButton(下月);private JTextField jtfYear = new JTextField(5);/jtfYear年份顯示和輸入文本框priva

10、te JTextField jtfMonth = new JTextField(2);/jtfMonth月份顯示文本框private JPanel p1 = new JPanel(); /裝入控制日期按鈕的模塊private JPanel p2 = new JPanel();private JPanel p3 = new JPanel(new BorderLayout();private JPanel p4 = new JPanel(new GridLayout(2,1);private JPanel p5 = new JPanel(new BorderLayout();private JBu

11、tton bAdd = new JButton(保存日志);private JButton bDel = new JButton(刪除日志);private JTextArea jta = new JTextArea(); /jta-JTextAreaprivate JScrollPane jsp = new JScrollPane(jta);private JLabel l = new JLabel(年份文本框中可直接鍵入要查找的年份,以提高查詢效率);private JLabel lt = new JLabel();private JLabel ld = new JLabel();priv

12、ate int lastTime;3.3.繪制程序界面 public wannianli() super(萬年歷); /框架命名 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/窗口關(guān)閉函數(shù) this.getContentPane().setLayout(new BorderLayout(10, 0); jta.setLineWrap(true); table.setGridColor(Color.GRAY); /星期之間的網(wǎng)格線是灰色的 table.setColumnSelectionAllowed(true); table.setS

13、electionBackground(Color.BLACK);/當(dāng)選定某一天時這一天背景黑色 table.setSelectionForeground(Color.GREEN);/選定的日期字體是綠色的 table.setBackground(new Color(184,207,229);/日期顯示表格顏色淺藍(lán)色 table.setFont(new Font(黑體,Font.BOLD,24);/日期數(shù)字字體格式 table.setRowHeight(30);/表格的高度 table.addMouseListener(this); /鼠標(biāo)監(jiān)聽器 jtfYear.addActionListene

14、r(this);/可輸入年份的文本框 /為各個按鈕添加監(jiān)聽函數(shù) bAdd.addActionListener(this); bDel.addActionListener(this); bLastYear.addActionListener(this); bNextYear.addActionListener(this); bLastMonth.addActionListener(this); bNextMonth.addActionListener(this); /將按鈕添加到Jpanel上 p1.add(bLastYear); p1.add(jtfYear);/年份輸入文本框 p1.add(

15、bNextYear); p1.add(bLastMonth); p1.add(jtfMonth); p1.add(bNextMonth); p2.add(bAdd); p2.add(bDel); p3.add(jsp, BorderLayout.CENTER); p3.add(p2, BorderLayout.SOUTH); p3.add(ld, BorderLayout.NORTH); p4.add(l); p4.add(lt); p5.add(p4, BorderLayout.SOUTH); p5.add(sp, BorderLayout.CENTER); p5.add(p1, Borde

16、rLayout.NORTH); this.getContentPane().add(p5, BorderLayout.CENTER); this.getContentPane().add(p3, BorderLayout.EAST); String strDate = DateFormat.getDateInstance().format(new Date().split(-);/獲得日期 cld.set(Integer.parseInt(strDate0), Integer.parseInt(strDate1)-1, 0); showCalendar(Integer.parseInt(str

17、Date0), Integer.parseInt(strDate1), cld); jtfMonth.setEditable(false);/設(shè)置月份的文本框?yàn)椴豢删庉?jtfYear.setText(strDate0); jtfMonth.setText(strDate1); this.showTextArea(strDate2); ld.setFont(new Font(新宋體,Font.BOLD,24); new Timer(lt).start(); this.setBounds(200,200,600,320); this.setResizable(false); this.setVi

18、sible(true);3.4 觸發(fā)器 public void actionPerformed(ActionEvent e) if(e.getSource() = jtfYear | e.getSource() = bLastYear | e.getSource() = bNextYear | e.getSource() = bLastMonth | e.getSource() = bNextMonth) int m, y; try/控制輸入的年份正確,異??刂?if (jtfYear.getText().length() != 4) throw new NumberFormatExcepti

19、on(); y = Integer.parseInt(jtfYear.getText(); m = Integer.parseInt(jtfMonth.getText(); catch (NumberFormatException ex) JOptionPane.showMessageDialog(this, 請輸入4位0-9的數(shù)字!, 年份有誤, JOptionPane.ERROR_MESSAGE); return; ld.setText(沒有選擇日期); for (int i = 0; i lastTime+1; i+) dtm.removeRow(0); if(e.getSource()

20、 = bLastYear) jtfYear.setText(String.valueOf(-y); if(e.getSource() = bNextYear)jtfYear.setText(String.valueOf(+y); if(e.getSource() = bLastMonth) if(m = 1) jtfYear.setText(String.valueOf(-y); m = 12; jtfMonth.setText(String.valueOf(m); else jtfMonth.setText(String.valueOf(-m); if(e.getSource() = bNe

21、xtMonth) if(m = 12) jtfYear.setText(String.valueOf(+y); m = 1; jtfMonth.setText(String.valueOf(m); else jtfMonth.setText(String.valueOf(+m); cld.set(y, m-1, 0); showCalendar(y, m, cld); if(e.getSource() = bAdd) int r = table.getSelectedRow(); int c = table.getSelectedColumn(); if(!ld.getText().equal

22、s(沒有選擇日期) try File file = new File(ld.getText() + .txt); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file); bw.write(jta.getText(); bw.close(); catch (FileNotFoundException ex) ex.printStackTrace(); catch (IOException ex) ex.printStackTrace(); if(e.getSource() =

23、bDel) int r = table.getSelectedRow(); int c = table.getSelectedColumn(); File filedel = new File(ld.getText() + .txt); if(filedel.exists() if(filedel.delete() jta.setText(日志刪除成功); else jta.setText(日志刪除失敗); else jta.setText(沒有找到日志文件); public void mouseClicked(MouseEvent e) jta.setText(null); int r =

24、table.getSelectedRow(); int c = table.getSelectedColumn(); if (table.getValueAt(r,c) = null) ld.setText(沒有選擇日期); else this.showTextArea(table.getValueAt(r,c); public void mousePressed(MouseEvent e) public void mouseReleased(MouseEvent e) public void mouseEntered(MouseEvent e) public void mouseExited

25、(MouseEvent e) private void showTextArea(Object selected) /將所選日期顯示出來,能不能弄成農(nóng)歷顯示 ld.setText(jtfYear.getText()+年+jtfMonth.getText()+月+selected+日); File filein = new File(ld.getText() + .txt); if(filein.exists() try BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filein)

26、; String strRead = br.readLine(); jta.setText(null); while(strRead != null) jta.append(strRead); strRead = br.readLine(); br.close(); catch (FileNotFoundException ex) ex.printStackTrace(); catch (IOException ex) ex.printStackTrace(); 3.5時間獲取class Timer extends Thread/顯示系統(tǒng)時間 private JLabel lt; privat

27、e SimpleDateFormat fy = new SimpleDateFormat(yyyy.MM.dd G at HH:mm:ss z); private SimpleDateFormat fn = new SimpleDateFormat(yyyy.MM.dd G at HH mm ss z); private boolean b = true; public Timer(JLabel lt) this.lt = lt; public void run() while (true) try if (b) lt.setText(fy.format(new Date(); else lt

28、.setText(fn.format(new Date(); b = !b; this.sleep(500); catch (InterruptedException ex) ex.printStackTrace(); 4測試分析 圖4-1 圖4-2 圖4-3 圖4-4 對程序進(jìn)行正常使用,測試各項(xiàng)功能的實(shí)現(xiàn)過程是否存在bug,經(jīng)測試,軟件正常使用,無任何Bug。5源程序清單import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.

29、MouseEvent;import java.awt.event.MouseListener;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.i

30、o.OutputStreamWriter;/import java.sql.Date;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import jav

31、ax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.table.DefaultTableModel;public class wannianli extends JFrame implements ActionListener, MouseListener private Calendar cld = Calendar.getInstance();

32、 private String astr = 星期一, 星期二, 星期三, 星期四, 星期五, 星期六, 星期日; private DefaultTableModel dtm = new DefaultTableModel(null,astr); private JTable table = new JTable(dtm); /裝日期的表格 private JScrollPane sp = new JScrollPane(table); private JButton bLastYear = new JButton(上一年); private JButton bNextYear = new J

33、Button(下一年); private JButton bLastMonth = new JButton(上月); private JButton bNextMonth = new JButton(下月); private JTextField jtfYear = new JTextField(5);/jtfYear年份顯示和輸入文本框 private JTextField jtfMonth = new JTextField(2);/jtfMonth月份顯示文本框 private JPanel p1 = new JPanel(); /裝入控制日期按鈕的模塊 private JPanel p2

34、 = new JPanel(); private JPanel p3 = new JPanel(new BorderLayout(); private JPanel p4 = new JPanel(new GridLayout(2,1); private JPanel p5 = new JPanel(new BorderLayout(); private JButton bAdd = new JButton(保存日志); private JButton bDel = new JButton(刪除日志); private JTextArea jta = new JTextArea(); /jta

35、-JTextArea private JScrollPane jsp = new JScrollPane(jta); private JLabel l = new JLabel(年份文本框中可直接鍵入要查找的年份,以提高查詢效率); private JLabel lt = new JLabel(); private JLabel ld = new JLabel(); private int lastTime; public wannianli() super(萬年歷); /框架命名 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/窗口關(guān)

36、閉函數(shù) this.getContentPane().setLayout(new BorderLayout(10, 0); jta.setLineWrap(true); table.setGridColor(Color.GRAY); /星期之間的網(wǎng)格線是灰色的 table.setColumnSelectionAllowed(true); table.setSelectionBackground(Color.BLACK);/當(dāng)選定某一天時這一天背景黑色 table.setSelectionForeground(Color.GREEN);/選定的日期字體是綠色的 table.setBackgroun

37、d(new Color(184,207,229);/日期顯示表格顏色淺藍(lán)色 table.setFont(new Font(黑體,Font.BOLD,24);/日期數(shù)字字體格式 table.setRowHeight(30);/表格的高度 table.addMouseListener(this); /鼠標(biāo)監(jiān)聽器 jtfYear.addActionListener(this);/可輸入年份的文本框 /為各個按鈕添加監(jiān)聽函數(shù) bAdd.addActionListener(this); bDel.addActionListener(this); bLastYear.addActionListener(t

38、his); bNextYear.addActionListener(this); bLastMonth.addActionListener(this); bNextMonth.addActionListener(this); /將按鈕添加到Jpanel上 p1.add(bLastYear); p1.add(jtfYear);/年份輸入文本框 p1.add(bNextYear); p1.add(bLastMonth); p1.add(jtfMonth); p1.add(bNextMonth); p2.add(bAdd); p2.add(bDel); p3.add(jsp, BorderLayou

39、t.CENTER); p3.add(p2, BorderLayout.SOUTH); p3.add(ld, BorderLayout.NORTH); p4.add(l); p4.add(lt); p5.add(p4, BorderLayout.SOUTH); p5.add(sp, BorderLayout.CENTER); p5.add(p1, BorderLayout.NORTH); this.getContentPane().add(p5, BorderLayout.CENTER); this.getContentPane().add(p3, BorderLayout.EAST); Str

40、ing strDate = DateFormat.getDateInstance().format(new Date().split(-);/獲得日期 cld.set(Integer.parseInt(strDate0), Integer.parseInt(strDate1)-1, 0); showCalendar(Integer.parseInt(strDate0), Integer.parseInt(strDate1), cld); jtfMonth.setEditable(false);/設(shè)置月份的文本框?yàn)椴豢删庉?jtfYear.setText(strDate0); jtfMonth.

41、setText(strDate1); this.showTextArea(strDate2); ld.setFont(new Font(新宋體,Font.BOLD,24); new Timer(lt).start(); this.setBounds(200,200,600,320); this.setResizable(false); this.setVisible(true); public void showCalendar(int localYear, int localMonth, Calendar cld) int Days = getDaysOfMonth(localYear, localMonth) + cld.get(Calendar.DAY_OF_WEEK) - 2; Object ai = new Object7; lastTime = 0; for (int i = cld.get(Calendar.DAY_OF_WEEK)-1; i = Days; i+)

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論