java课程设计万年历源代码

上传人:guoc****ang 文档编号:53416241 上传时间:2022-02-10 格式:DOC 页数:17 大小:297.50KB
返回 下载 相关 举报
java课程设计万年历源代码_第1页
第1页 / 共17页
java课程设计万年历源代码_第2页
第2页 / 共17页
java课程设计万年历源代码_第3页
第3页 / 共17页
点击查看更多>>
资源描述
华 北 科 技 学 院课程设计报告面向对象程序设计(Java)班级: 电商B09-3 姓名: 周婷玉 设计题目:_万年历_设计时间: 2011-12-28 至 2012-01-06 指导教师:_ 郭慧_ _评 语:_评阅成绩:_评阅教师:_课程设计说明书1、 课程设计的目的a) 掌握面向对象程序设计基本要素(封装、继承、多态)b) 掌握JAVA语言常用类包及其常用方法和JAVA语言基本语法c) 掌握基于AWT的图形用户界面设计i. 常用标准控件的使用,如标签、按钮、菜单、文本框、单选按钮、滚动条等。ii. 事件处理机制d) 掌握布局、对话框的使用e) 掌握发布JAVA应用程序2、 功能模块简介和系统结构图需求分析:本程序的要求为:1. 使用图形用户界面2. 能够实现日期与星期的查询3. 实现当日的时间备忘 功能设计: 1.能以月历形式显示日期与星期 2.支持用户自己输入年份,并提供月份的下拉形式来选择查询 3.添加当日行事历,储存与清除功能3、 主要源程序及代码黄色突出显示今日日期选择一月五日,添加事件:今天我们放假啦!点击存储。查询1991年 选择9月 点击查询代码实现:import java.io.*;/引入相关物件import java.util.*;import java.lang.Thread;import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.BorderFactory;import javax.swing.ComboBoxModel;import javax.swing.DefaultComboBoxModel;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JDesktopPane;import javax.swing.JLabel;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.JScrollPane;import javax.swing.WindowConstants;import javax.swing.border.BevelBorder;import javax.swing.border.LineBorder;import javax.swing.border.SoftBevelBorder; public class NewJFrame extends javax.swing.JFrame /建立一视窗物件 private JDesktopPane jDesktopPane1;/相关物件宣告 private JDesktopPane jDesktopPane2; private JButton jButton1; private JButton jButton2; private JLabel jLabel2; private JLabel jLabel4; private JLabel jLabel3; private JLabel jLabel5; private JLabel jLabel6; private JLabel jLabel7; private JLabel jLabel8; private JComboBox jComboBox1; private JTextField jTextField1; private JButton jButton3; private JTextArea jTextArea1; private JLabel jLabel1; public static void main(String args) throws IOException/主程式开始 NewJFrame inst = new NewJFrame(); inst.setVisible(true); /主程式結束 public NewJFrame()/建立视窗开始 super(); initGUI();/呼叫GUI函數 /建立视窗結束 public int getdate()/取得系统日期函数开始 int date_array = new int3; Calendar ca = new GregorianCalendar(); date_array0 = ca.get(Calendar.YEAR);/年 date_array1 = ca.get(Calendar.MONTH)+1;/月 date_array2 = ca.get(Calendar.DAY_OF_MONTH);/日 return date_array;/回傳自訂日期陣列 /取得系統日期函數結束 public void new_btn()/重新产生日期按钮函数开始 jTextArea1.setText();/清空记事 int year,month; year = Integer.parseInt(jLabel5.getText().substring(0,4);/設定為已選擇的年 month = Integer.parseInt(jLabel5.getText().substring(7,9);/設定為已選擇的月 date_btn_create(year,month);/呼叫產生日期按鈕函數 /重新產生日期按鈕函數結束 public void date_btn_create(int year,int month)/產生日期按鈕 int y=0,x=0,x_add=0,y_add=0,week_add=0,date_acc=0,week_of_day=0; String syear,smonth,sday,filename; syear = String.valueOf(year); smonth = String.valueOf(month); if (smonth.length() = 1)/若小於10月(一位數)就在前面加0 smonth = 0+smonth; jDesktopPane1.remove(jDesktopPane2);/移除桌面2(日期按鈕附著,也就是把日期按鈕移除) jDesktopPane2 = new JDesktopPane();/產生一個新的桌面 jDesktopPane1.add(jDesktopPane2); jDesktopPane2.setBounds(0, 30, 252, 196);/設定大小及位置 jDesktopPane2.setBackground(new java.awt.Color(148,205,176);/設定顏色 switch(month)/設定月份天數 case 1:/大月31天 case 3: case 5: case 7: case 8: case 10: case 12: date_acc = 31; break; case 4:/小月30天 case 6: case 9: case 11: date_acc = 30; break; case 2: if (leap_year(year) date_acc = 29; else date_acc = 28; week_of_day = dow(year,month,1);/呼叫星期函數(取得當月第一天為星期幾) switch(week_of_day)/設定當月1日位置(像素) case 0: week_add = 0; break; case 1: week_add = 34; break; case 2: week_add = 68; break; case 3: week_add = 102; break; case 4: week_add = 136; break; case 5: week_add = 170; break; case 6: week_add = 204; break; JButton btn = new JButtondate_acc;/建立日期按鈕陣列 for (int i=0;i0 & (i+week_of_day)%7=0) | (i+week_of_day)%7=0 & i != 0) /設定當月第一天日期按鈕位置 x=0;/X軸座標 x_add=0;/下一個按鈕座標(X軸)加值 y+;/Y軸座標 y_add+=10;/換行座標(Y軸)加值 week_add=0;/當月第一日按鈕座標加值 /下面設定按鈕大小及加值(X為起始10+第幾個按鈕*橫向寬度25+間隔+當月第一天星期幾加值) btni.setBounds(10+x*25+x_add+week_add, y*20+y_add, 25, 20);/(Y為第幾個按鈕*高度20+換行加值)按鈕寬為25高為20 btni.setFont(new java.awt.Font(Arial,1,12);/設定字體大小及樣式 btni.setBorder(BorderFactory.createTitledBorder();/設定按鈕文字不自動調整大小 int now = new int3; now = getdate();/取得當天日期 if (year = now0 & month = now1 & i+1 = now2) btni.setBackground(new java.awt.Color(233,238,164);/若為當天則設定按鈕為黃色 else btni.setBackground(new java.awt.Color(148,205,176);/若不是當天則設定按鈕為綠色 sday = String.valueOf(i+1); filename = syear+smonth+sday;/記事檔案名稱(年+月+日.txt) File file=new File(filename+.txt);/建立檔案物件 if (file.exists()/若當天有記事檔案則設定按鈕字體顏色為藍色 btni.setForeground(new java.awt.Color(0,0,255); btni.addActionListener(new ActionListener() /設定按鈕監聽(觸發事件函數) public void actionPerformed(ActionEvent evt) btnActionPerformed(evt); ); x+;/下一個按鈕X座標加權 x_add+=9;/下一個按鈕間隔X座標加權 public boolean leap_year(int year)/判斷閏年函數開始 boolean leap_year;/4的倍數,若為100的倍數則必須為4的倍數才是閏年 if (year%4 = 0) if (year%100 = 0) if (year%400 = 0) leap_year = true; else leap_year = false; else leap_year = true; else leap_year = false; return leap_year; /判斷閏年函數結束 public int dow(int y,int m,int d)/判斷星期幾 int ww=6, 2, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4;/天文星體運行值 int w; w=wwm-1+y+(y/4)-(y/100)+(y/400);/閏年設定 if( (y%4)=0) & (m3) )/公式 w-; if(y%100)=0) w+; if(y%400)=0) w-; return (w+d)%7;/回傳星期幾(0為星期日,1為星期一以此類推) private void initGUI()/產生視覺化物件函數(Graph User Interface,圖形化使用者介面) try setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);/設定外框視窗主要功能列為標準(縮到最小,放到最大,關閉) this.setTitle(万年行事历);/設定視窗抬頭 jDesktopPane1 = new JDesktopPane();/建立一桌面 getContentPane().add(jDesktopPane1, BorderLayout.CENTER); jDesktopPane1.setPreferredSize(new java.awt.Dimension(464, 267);/設定桌面大小 jDesktopPane1.setBackground(new java.awt.Color(148,205,176);/設定桌面顏色 /建立桌面2開始(放日期按鈕的桌面) jDesktopPane2 = new JDesktopPane(); jDesktopPane1.add(jDesktopPane2); jDesktopPane2.setBounds(0, 30, 252, 196); jDesktopPane2.setBackground(new java.awt.Color(148,205,176); /建立桌面2結束 /建立星期日標籤開始 jLabel1 = new JLabel(); jDesktopPane1.add(jLabel1); jLabel1.setText(Sun); jLabel1.setBounds(14, 7, 21, 21); jLabel1.setFont(new java.awt.Font(Arial,0,11); jLabel1.setForeground(new java.awt.Color(255,0,0); /建立星期日標籤結束 /建立記事框開始 jTextArea1 = new JTextArea(252, 35); jDesktopPane1.add(jTextArea1); jTextArea1.setText();/預設內容清空 jTextArea1.setBounds(252, 42, 175, 182);/設定大小 jTextArea1.setFont(new java.awt.Font(新細明體,0,11);/設定字體樣式大小 jTextArea1.setLineWrap(true);/文字過長自動換行 jTextArea1.setWrapStyleWord(true);/文字過長自動換行 JScrollPane scrollPane = new JScrollPane(jTextArea1, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); jDesktopPane1.add(scrollPane);/上面為建立scorollpane(視窗旁邊的移動棒);將記事框建立在scrollpane上 scrollPane.setBounds(252, 42, 175, 182);/設定大小及位置 /建立記事框結束 /建立清除按鈕開始 jButton1 = new JButton(); jDesktopPane1.add(jButton1); jButton1.setText(清除); jButton1.setBounds(252, 231, 63, 21); jButton1.setFont(new java.awt.Font(新細明體,0,11); jButton1.setBorder(BorderFactory.createTitledBorder(); jButton1.addActionListener(new ActionListener() /設定清除按鈕監聽函數 public void actionPerformed(ActionEvent evt) jButton1ActionPerformed(evt); ); /建立清除按鈕結束 /建立儲存按鈕開始 jButton2 = new JButton(); jDesktopPane1.add(jButton2); jButton2.setText(储存); jButton2.setBounds(364, 231, 63, 21); jButton2.setFont(new java.awt.Font(新細明體,0,11); jButton2.setBorder(BorderFactory.createTitledBorder(); jButton2.addActionListener(new ActionListener() /設定儲存按鈕監聽函數 public void actionPerformed(ActionEvent evt) jButton2ActionPerformed(evt); ); /建立儲存按鈕結束 /建立星期一星期六標籤開始 jLabel2 = new JLabel(); jDesktopPane1.add(jLabel2); jLabel2.setText(Mon Tue Wed Thu Fri Sat); jLabel2.setBounds(49, 7, 189, 21); jLabel2.setFont(new java.awt.Font(Arial,0,11); /建立星期一星期六標籤結束 /建立查詢年份輸入框開始 jTextField1 = new JTextField(); jDesktopPane1.add(jTextField1); jTextField1.setText(); jTextField1.setBounds(14, 231, 63, 21); jTextField1.setFont(new java.awt.Font(Arial,0,12); /建立查詢年份輸入框結束 /建立狀態標籤開始 jLabel6 = new JLabel(); jDesktopPane1.add(jLabel6); jLabel6.setText(TEST); jLabel6.setBounds(357, 7, 70, 21); jLabel6.setFont(new java.awt.Font(新細明體,0,11); jLabel6.setForeground(new java.awt.Color(0,0,255); /建立狀態標籤開始 /建立隱藏日期按鈕暫存標籤開始 jLabel7 = new JLabel(); jDesktopPane1.add(jLabel7); jLabel7.setText(); jLabel7.setBounds(0, 0, 0, 0);/設定大小為0 /建立隱藏日期按鈕暫存標籤結束 /建立目前選擇日期標籤開始 jLabel8 = new JLabel(); jDesktopPane1.add(jLabel8); jLabel8.setText(目前无选择日期); jLabel8.setBounds(252, 28, 175, 14); jLabel8.setFont(new java.awt.Font(新細明體,0,11); /建立目前選擇日期標籤結束 /建立月份下拉選單開始 ComboBoxModel jComboBox1Model = new DefaultComboBoxModel (new String 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 );/內容設定112 jComboBox1 = new JComboBox(); jDesktopPane1.add(jComboBox1); jComboBox1.setModel(jComboBox1Model); jComboBox1.setBounds(105, 231, 40, 21); jComboBox1.setFont(new java.awt.Font(Arial,0,11); /建立月份下拉選單結束 /建立月標籤開始 jLabel3 = new JLabel(); jDesktopPane1.add(jLabel3); jLabel3.setText(月); jLabel3.setBounds(155, 231, 14, 21); jLabel3.setFont(new java.awt.Font(新細明體,0,12); /建立月標籤結束 /建立年標籤開始 jLabel4 = new JLabel(); jDesktopPane1.add(jLabel4); jLabel4.setText(年); jLabel4.setFont(new java.awt.Font(新細明體, 0, 12); jLabel4.setBounds(84, 231, 14, 21); /建立年標籤結束 /建立查詢按鈕開始 jButton3 = new JButton(); jDesktopPane1.add(jButton3); jButton3.setText(查询); jButton3.setBounds(180, 231, 35, 21); jButton3.setBorder(BorderFactory.createTitledBorder(); jButton3.setFont(new java.awt.Font(新細明體,0,11); jButton3.addActionListener(new ActionListener() /查詢按鈕監聽函數 public void actionPerformed(ActionEvent evt) jButton3ActionPerformed(evt); ); /建立查詢按鈕結束 /建立目前年月位置標籤開始 int now = new int3; now = getdate();/預設為當年當月 String year5,smonth; year5 = String.valueOf(now0); smonth = String.valueOf(now1); if (smonth.length() = 1) smonth = 0+smonth; jLabel5 = new JLabel(); jDesktopPane1.add(jLabel5); jLabel5.setText(year5+ 年 +smonth+ 月); jLabel5.setBounds(252, 7, 120, 21); jLabel5.setForeground(new java.awt.Color(255,255,255);/設定字體為白色 /建立目前年月位置標籤結束 /預設為當年當月日期按鈕產生開始 int now = new int3; now = getdate(); date_btn_create(now0,now1);/產生日期按鈕 /預設為當年當月日期按鈕產生結束 pack(); this.setSize(444, 296); catch (Exception e) /例外處理 e.printStackTrace(); private void jButton1ActionPerformed(ActionEvent evt)/清除按鈕按下觸發事件 jTextArea1.setText();/清除記事內容 String year,month,day,filename,insert_str; year = jLabel5.getText().substring(0,4); month = jLabel5.getText().substring(7,9); day = jLabel7.getText(); filename = year+month+day; File file=new File(filename+.txt);/刪除當日記事檔案 file.delete(); new_btn();/重新產生按鈕 jLabel6.setText(行事曆已清除);/設定相關訊息 jLabel7.setText(); jLabel8.setText(目前無選擇日期); private void jButton2ActionPerformed(ActionEvent evt)/儲存按鈕按下觸發事件開始 String year,month,day,filename,insert_str; year = jLabel5.getText().substring(0,4); month = jLabel5.getText().substring(7,9); day = jLabel7.getText(); filename = year+month+day; insert_str = jTextArea1.getText();/記事內容 if (insert_str.length() != 0 & day.length() != 0)/若記事框內有文字且有選擇日期則儲存記事檔案 try FileWriter fw=new FileWriter(filename+.txt);/啟用檔案寫入 BufferedWriter bfw=new BufferedWriter(fw);/啟用緩衝區寫入 bfw.write(insert_str); /將Textarea內容寫入緩衝區裡 bfw.flush();/將緩衝區資料寫到檔案 fw.close();/關閉檔案 jLabel6.setText(行事历已记录);/設定相關訊息 jLabel7.setText(); jLabel8.setText(目前无选择日期); new_btn(); catch(IOException e) e.printStackTrace(); else/若無記事內容或無選擇日期 if (day.length() = 0) jLabel6.setText(日期未選擇);/設定相關訊息 else jLabel6.setText(行事曆無內容); /儲存按鈕按下觸發事件結束 private void jButton3ActionPerformed(ActionEvent evt)/查詢按鈕按下觸發事件開始 String syear,smonth; try jTextArea1.setText(); jLabel6.setText(查詢日期); syear = jTextField1.getText(); smonth = String.valueOf(jComboBox1.getSelectedIndex() + 1); if (smonth.length() = 1) smonth = 0+smonth; if (syear = | Integer.parseInt(syear)1582)/若未輸入年份就觸發例外(1582年以前曾經改曆過,結果會不準確) int now = new int3; now = getdate(); syear = String.valueOf(now0);/若選擇年份小於1582年則預設為當年 jLabel6.setText(請選1582以上); jLabel5.setText(syear+ 年 +smonth+ 月); date_btn_create(Integer.parseInt(syear),Integer.parseInt(smonth); jLabel7.setText(); jLabel8.setText(目前無選擇日期); catch(NumberFormatException e)/例外處理設定為當年及選擇的月份 int now = new int3; now = getdate(); syear = String.valueOf(now0); smonth = String.valueOf(jComboBox1.getSelectedIndex() + 1); if (smonth.length() = 1) smonth = 0+smonth; jLabel5.setText(syear+ 年 +smonth+ 月); jLabel6.setText(請選1582以上); date_btn_create(Integer.parseInt(syear),Integer.parseInt(smonth); jLabel7.setText(); jLabel8.setText(目前無選擇日期); /查詢按鈕按下觸發事件結束 private void btnActionPerformed(ActionEvent evt)/日期按鈕按下觸發事件開始 jTextArea1.setText(); String year,month,btn_date,filename,read_str; year = jLabel5.getText().substring(0,4);/取得年 month = jLabel5.getText().substring(7,9);/取得月 btn_date = evt.getActionCommand();/取得按下按鈕文字(日) filename = year+month+btn_date; jLabel7.setText(btn_date); try FileReader fr = new FileReader(filename+.txt);/讀取選擇日期記事檔案 BufferedReader bfr = new BufferedReader(fr);/將檔案讀到緩衝區 boolean flag=false;/旗標 while(read_str = bfr.readLine()!=null) / 每次讀取一行,直到檔案結束 if (flag)/從第二行開始每一行第一個位置加入斷行 jTextArea1.append(n); jTextArea1.append(read_str);/加入該行訊息 flag=true; jLabel6.setText(当天记事); jLabel8.setText(已选择+year+年+month+月+btn_date+日); fr.close(); catch(FileNotFoundException e)/如果沒有指定的記事檔案就印出當日無行事曆(例外處理) jLabel6.setText(当日无行事历); jLabel8.setText(已选择+year+年+month+月+btn_date+日); catch(IOException e)/例外處理 e.printStackTrace(); /日期按鈕按下觸發事件結束4、 程序总结该程序能够很好的实现万年历的功能,包括选择年份,月份。而且从外观上看不但简洁实用而且很美观。程序打开的时候,能看到左边显示的是万年历框,右边显示的是记事本框,简洁明了。具有月份下拉功能,需要月份下拉的时候,可以随意调到自己需要的月份进行查看,十分方便。可以任选一个日期,并在此日期中输入日记的信息,点击存储便可保存。点击清除便可删除。5. 心得体会 经过短暂的Java课程设计,是我又学到了很多的知识,尤其是运用Java知识去解决实际问题的能力有得到了很大的提高。尽管所设计的程序比较简单,但是程序中的每个功能的实现都经过了自己的一定认真的思考。当然,仍然有些理论只是在实际运用中了解的不够深刻,所以程序在设计时也就不那么完美。对于本程序的设计,首先考虑其功能有哪些,需要显示什么,如何进行窗体构建布局,需要用到那些知识点,如相关的类和对象等,最后便是考虑用源代码进行实现了。经过了长时间的编写与调试,在课本以及网上查阅了相关资料,终于完成了程序的编写。 通过这次课程设计,我明白了写程序不仅要求对于课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力。还要熟悉常用的编程技巧和编程思想,不能只关心程序的运行结果,更要注重程序代码的结构。17
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 商业管理 > 营销创新


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!