版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年09月江蘇2024年浦發(fā)銀行南京分行秋季校園招考筆試歷年參考題庫附帶答案詳解
- 羽絨制品產(chǎn)業(yè)鏈整合2025年度合同3篇
- 2025年度住宅小區(qū)車位租賃及物業(yè)管理服務(wù)合同4篇
- 2024年08月中國光大銀行淄博分行轄屬網(wǎng)點(diǎn)零售客戶經(jīng)理崗位招聘筆試歷年參考題庫附帶答案詳解
- 2024年05月中信銀行春季校園招考接收畢業(yè)生情況(第三批)筆試歷年參考題庫附帶答案詳解
- 二零二五年度材料運(yùn)輸安全培訓(xùn)與應(yīng)急預(yù)案合同3篇
- 二零二五年度觀光電梯安裝與維護(hù)保養(yǎng)服務(wù)合同2篇
- 2024零星工程勞務(wù)分包合同范本
- 健康飲食的營養(yǎng)搭配
- 心腦血管藥理、食管癌放療增敏研究放療后復(fù)發(fā)食管癌三維適形放射治療的療效分析知識講解
- 稱量與天平培訓(xùn)試題及答案
- 超全的超濾與納濾概述、基本理論和應(yīng)用
- 2020年醫(yī)師定期考核試題與答案(公衛(wèi)專業(yè))
- 2022年中國育齡女性生殖健康研究報告
- 各種靜脈置管固定方法
- 消防報審驗(yàn)收程序及表格
- 教育金規(guī)劃ppt課件
- 呼吸機(jī)波形分析及臨床應(yīng)用
- 常用緊固件選用指南
- 私人借款協(xié)議書新編整理版示范文本
- 自薦書(彩色封面)
評論
0/150
提交評論