java万年历课程设计实训报告

时间:2024.4.7

成绩:  

本科专业实训报告

课题名称:java万年历设计                

院系专业:信息工程学院通信工程专业                

学号姓名:0967119104   李少华                     

指导教师:赵建峰               

完成日期:20126 28 日星期


报告正文

一、简介

   (1)选题依据:本次课程设计为自选题。思考一段时间后,我决定做一个万年历的设计。主要考虑到自己JAVA课程基础内容掌握并不是很扎实。而而对于设计一个万年历程序,由于其功能简单设计也相对较易,并且通过设计这样的一个日历小组件,也能使自己对JAVA的一些基础知识掌握的更加牢固。

 (2)课题基本内容:这个项目是一个简单的Java万年历,可以实现年份为四位数的公历日期的查询,并且在相应的日期做备忘录,以及可以显示当前的系统日期以及时间。

二、主要问题

   (1)各个Jpanel的布局问题。本程序中有五个Jpanel。如何使各个容器的布局合理是首要关心的问题;

   (2)所选月份天数的算法;

   (3)所选月份第一天为星期几的算法;

   (4)输出所选月份该月日历的算法;

   (5)在选择项中加入showMessageDialog的问题。

三、研究方法

   (1)各个Jpanel的布局问题:针对这个问题,使用BorderLayout类。这是一个布置容器的边框布局,它可以对容器组件进行安排,并调整其大小,使其符合下列五个区域:北、南、东、西、中。每个区域最多只能包含一个组件,并通过相应的常量进行标识:NORTH、SOUTH、EAST、WEST、CENTER。当使用边框布局将一个组件添加到容器中时,要使用这五个常量之一。

   (2)所选月份天数的算法:用if语句实现。一三五七八十二月份为31天,四六九十一月份为30天,对于二月份进行闰年与非闰年的讨论。
  (3)所选月份第一天为星期几的算法:使用get(Calendar.DAY_OF_WEEK)函数实现。

   (4)输出所选月份该月日历的算法:算出所选月份第一天为星期几后,把该日期以前的位置用空格补上,并从该日起一次输出天数直到月底。从前面的空格开始算起,把第一天的星期数字减去1后即为此天在该序列中的序号,从此天开始算,利用该序列的序号对6取余得0换行,即可完整的输出该月的日历。

   (5)在选择项中加入showMessageDialog的问题:在本程序中,首先定义了关于“版本说明”的适配器,在这个类中定义了这个选择项的actionPerformed 方法。其次,在主程序中为“版本说明”选择项加一个监听器,监听器中调用了刚才定义的适配器。最后,同样在主程序中详细说明actionPerformed 方法。

四、数据分析

    package wannianli;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.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.io.OutputStreamWriter;

//import java.sql.Date;

import java.text.DateFormat;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import  java.util.Date;

import javax.swing.Icon;

import javax.swing.JButton;

import javax.swing.JDialog;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JOptionPane;

import javax.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();

    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 JButton("下一年");

    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 = 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();               //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;

    JMenuBar jmb = new JMenuBar();

      JMenu  view;

     

     

    public  wannianli()

    {

        super("万年历"); //框架命名

         view = new JMenu("关于");

             JMenuItem banben = new JMenuItem("版本说明");

             banben.addActionListener(new   banben_actionAdapter(this));

             view.add(banben);

             jmb.add(view);

          this.setJMenuBar(jmb);

            

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭函数

        this.getContentPane().setLayout(new BorderLayout(10,0));

       

        jta.setLineWrap(true);//获取文本区的换行策略。如果设置为 true,则当行的长度大于所分配的宽度时,将换行。如果设置为 false,则始终不换行。

        table.setGridColor(Color.BLACK);    //星期之间的网格线是黑色的

        table.setColumnSelectionAllowed(true);

        table.setSelectionBackground(Color.BLACK);//当选定某一天时这一天背景黑色

        table.setSelectionForeground(Color.YELLOW);//选定的日期字体是黄色的

        table.setBackground(new Color(200,255,255));//日期显示表格颜色

        table.setFont(new Font("黑体",Font.BOLD,24));//日期数字字体格式

        table.setRowHeight(30);//表格的高度

        table.addMouseListener(this);             //鼠标监听器

       

        jtfYear.addActionListener(this);//可输入年份的文本框

        //为各个按钮添加监听函数

        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(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, BorderLayout.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(strDate[0]), Integer.parseInt(strDate[1])-1, 0);

        showCalendar(Integer.parseInt(strDate[0]), Integer.parseInt(strDate[1]), cld);

        jtfMonth.setEditable(false);//设置月份的文本框为不可编辑

        jtfYear.setText(strDate[0]);

        jtfMonth.setText(strDate[1]);

        this.showTextArea(strDate[2]);

        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 Object[7];

        lastTime = 0;

        for (int i = cld.get(Calendar.DAY_OF_WEEK)-1; i <= Days; i++)

        {

            ai[i%7] = String.valueOf(i-(cld.get(Calendar.DAY_OF_WEEK)-2));//返回一个表示指定的 int 值的 Integer 实例

            if (i%7 == 6)

            {

                dtm.addRow(ai);

                ai = new Object[7];

                lastTime++;

            }

        }

        dtm.addRow(ai);

    }

   

    public int getDaysOfMonth(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(year%4 == 0 && year%100 != 0 || year%400 == 0)//闰年

        {

            return 29;

        }

        else

        {

            return 28;

        }

    }

   

    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 NumberFormatException();

                }

                y = Integer.parseInt(jtfYear.getText());

                m = Integer.parseInt(jtfMonth.getText());

            }

            catch (NumberFormatException ex)

            {

                JOptionPane.showMessageDialog(this, "请输入4位0-9的数字!", "年份有误", JOptionPane.ERROR_MESSAGE);

                return;

            }

            ld.setText("没有选择日期");

            for (int i = 0; i < lastTime+1; i++){ dtm.removeRow(0);}

            if(e.getSource() == 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() == bNextMonth)

            {

                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().equals("没有选择日期"))

            {

                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() == 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 = 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(MouseEvent e)

    {

    }

   

    private void showTextArea(Object selected)

    {//将所选日期显示出来

        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)));

                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();

            }

        }

    }

   

    public static void main(String[] args)

    {

        JFrame.setDefaultLookAndFeelDecorated(true);

        JDialog.setDefaultLookAndFeelDecorated(true);

        new wannianli();

    }

       void banben_actionPerformed(ActionEvent e) {

             JOptionPane.showMessageDialog(null,"内蒙古科技大学实训课程设计\n课题名称:" +

                           "万年历\n制作人:李少华\n指导教师:赵建峰\n注释:版权所有,翻版必究!!由于本人水平有限,难免有纰漏,敬请谅解!","说明",

                           JOptionPane.INFORMATION_MESSAGE);          

      }

            

      }

class Timer extends Thread//显示系统时间

{

    private JLabel lt;

    private SimpleDateFormat fy = new SimpleDateFormat("G:yyyy.MM.dd  'at' HH:mm:ss:S Z");

    private SimpleDateFormat fn = new SimpleDateFormat("G:yyyy.MM.dd  'at' HH:mm:ss:S 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.setText(fn.format(new Date()));

                }

                b = !b;

                this.sleep(500);

            }

            catch (InterruptedException ex)

            {

                ex.printStackTrace();

            }

        }

    }

}

class banben_actionAdapter extends JFrame implements ActionListener{

      wannianli adaptee;

      banben_actionAdapter(wannianli  adaptee){

             this.adaptee   =   adaptee;

                    }

     

       public   void   actionPerformed(ActionEvent   e)   {  

              adaptee.banben_actionPerformed(e);

             

          }

}

五、结论

对于本程序的设计,首先考虑其功能有哪些,需要显示什么,如何进行窗体构建布局,需要用哪些知识点,如相关的类和对象等。最后,就是根据初步设计的功能和布局构架,考虑用源代码进行实现了。

经过了长时间的反复编写调试,课本和网上查阅相关资料相关文章,终于完成了整个课程设计。在这个过程中,在把书本上的知识给系统的复习了一下的同时,同时也发现了自己的太多不足,对JAVA语言整体知识构架不够熟悉,不能灵活地运用所学的知识点。自己的编程方式也不是太标准,经常出现代码写错而调试很久的低级错误情况出现。

    通过这次课程设计,我明白了编写程序,不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力。还要熟悉常用的编程技巧和编程思想,不能只关心程序的运行结果,更要注重程序代码的结构,编程者更要有严谨地态度。还有通过设计过程中大量地查阅网络文章,对一些关键知识点逐个地了解并解决相关问题。所以网络这个强大的工具,确实是我们学习之中可以借助的一个很好的帮手。网络是我们学习的最好的老师之一。有问题,问网络,是一个很好的习惯。

六、主要参考文献

[1] 吴敏,杨国林.C++面向对象程序设计[M].呼和浩特:内蒙古大学出版社,2006,2-8.

[2] 王羿.基于医学图像的三维可视化研究[D].华中科技大学,2008.

[3] 黄亮.基于皮革胶原显微图像处理与分析的研究与实现[D].陕西科技大学,2006.

[4] 侯俊杰.深入浅出MFC[M].北京:人民邮电出版社,2005,13-16.

[5] 张铮.数字图象处理与机器视觉[M].北京:人民邮电出版社,2010,36-40.

[6] 孟军,赵晶,王凡. C/C++语言程序设计[M].北京:清华大学出版社,2004,25-31.

[7] 霍宏涛.数字图像处理[M].北京:北京理工大学出版社,2002,59-66.

[8] 朱晴婷,黄海鹰,陈莲君. Visual C++程序设计[M].北京:清华大学出版社,2004,40-44.

七、源代码

package wannianli;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.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.io.OutputStreamWriter;

//import java.sql.Date;

import java.text.DateFormat;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import  java.util.Date;

import javax.swing.Icon;

import javax.swing.JButton;

import javax.swing.JDialog;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JOptionPane;

import javax.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();

    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 JButton("下一年");

    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 = 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();               //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;

    JMenuBar jmb = new JMenuBar();

    JMenu  view;

   

   

    public  wannianli()

    {

        super("万年历"); //框架命名

       view = new JMenu("关于");

        JMenuItem banben = new JMenuItem("版本说明");

        banben.addActionListener(new   banben_actionAdapter(this));

        view.add(banben);

        jmb.add(view);

        this.setJMenuBar(jmb);

       

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭函数

        this.getContentPane().setLayout(new BorderLayout(10,0));

       

        jta.setLineWrap(true);//获取文本区的换行策略。如果设置为 true,则当行的长度大于所分配的宽度时,将换行。如果设置为 false,则始终不换行。

        table.setGridColor(Color.BLACK);    //星期之间的网格线是黑色的

        table.setColumnSelectionAllowed(true);

        table.setSelectionBackground(Color.BLACK);//当选定某一天时这一天背景黑色

        table.setSelectionForeground(Color.YELLOW);//选定的日期字体是黄色的

        table.setBackground(new Color(200,255,255));//日期显示表格颜色

        table.setFont(new Font("黑体",Font.BOLD,24));//日期数字字体格式

        table.setRowHeight(30);//表格的高度

        table.addMouseListener(this);             //鼠标监听器

       

        jtfYear.addActionListener(this);//可输入年份的文本框

        //为各个按钮添加监听函数

        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(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, BorderLayout.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(strDate[0]), Integer.parseInt(strDate[1])-1, 0);

        showCalendar(Integer.parseInt(strDate[0]), Integer.parseInt(strDate[1]), cld);

        jtfMonth.setEditable(false);//设置月份的文本框为不可编辑

        jtfYear.setText(strDate[0]);

        jtfMonth.setText(strDate[1]);

        this.showTextArea(strDate[2]);

        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 Object[7];

        lastTime = 0;

        for (int i = cld.get(Calendar.DAY_OF_WEEK)-1; i <= Days; i++)

        {

            ai[i%7] = String.valueOf(i-(cld.get(Calendar.DAY_OF_WEEK)-2));//返回一个表示指定的 int 值的 Integer 实例

            if (i%7 == 6)

            {

                dtm.addRow(ai);

                ai = new Object[7];

                lastTime++;

            }

        }

        dtm.addRow(ai);

    }

   

    public int getDaysOfMonth(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(year%4 == 0 && year%100 != 0 || year%400 == 0)//闰年

        {

            return 29;

        }

        else

        {

            return 28;

        }

    }

   

    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 NumberFormatException();

                }

                y = Integer.parseInt(jtfYear.getText());

                m = Integer.parseInt(jtfMonth.getText());

            }

            catch (NumberFormatException ex)

            {

                JOptionPane.showMessageDialog(this, "请输入4位0-9的数字!", "年份有误", JOptionPane.ERROR_MESSAGE);

                return;

            }

            ld.setText("没有选择日期");

            for (int i = 0; i < lastTime+1; i++){ dtm.removeRow(0);}

            if(e.getSource() == 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() == bNextMonth)

            {

                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().equals("没有选择日期"))

            {

                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() == 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 = 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(MouseEvent e)

    {

    }

   

    private void showTextArea(Object selected)

    {//将所选日期显示出来

        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)));

                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();

            }

        }

    }

   

    public static void main(String[] args)

    {

        JFrame.setDefaultLookAndFeelDecorated(true);

        JDialog.setDefaultLookAndFeelDecorated(true);

        new wannianli();

    }

     void banben_actionPerformed(ActionEvent e) {

        JOptionPane.showMessageDialog(null,"内蒙古科技大学实训课程设计\n课题名称:" +

                "万年历\n制作人:李少华\n指导教师:赵建峰\n注释:版权所有,翻版必究!!由于本人水平有限,难免有纰漏,敬请谅解!","说明",

                JOptionPane.INFORMATION_MESSAGE);     

    }

       

    }

class Timer extends Thread//显示系统时间

{

    private JLabel lt;

    private SimpleDateFormat fy = new SimpleDateFormat("G:yyyy.MM.dd  'at' HH:mm:ss:S Z");

    private SimpleDateFormat fn = new SimpleDateFormat("G:yyyy.MM.dd  'at' HH:mm:ss:S 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.setText(fn.format(new Date()));

                }

                b = !b;

                this.sleep(500);

            }

            catch (InterruptedException ex)

            {

                ex.printStackTrace();

            }

        }

    }

}

class banben_actionAdapter extends JFrame implements ActionListener{

    wannianli adaptee;

    banben_actionAdapter(wannianli  adaptee){

        this.adaptee   =   adaptee;

            }

   

     public   void   actionPerformed(ActionEvent   e)   {  

            adaptee.banben_actionPerformed(e);

           

        }

}

八、指导教师意见

指导教师签字:

年    月    日

更多相关推荐:
java课程设计报告范例

河北科技大学课程设计报告学生姓名祝冬冬学号专业班级计算机科学与技术课程名称学年学期指导教师2011年6月课程设计成绩评定表目录示例一二三1234四五设计题目1设计目的1设计原理及方案1使用的软件工具和环境1需求...

Java课程设计报告模板

Java程序设计课程设计报告20xx20xx年度第1学期Hannio塔专业学生姓名班级学号指导教师完成日期计算机科学技术网络工程马千里B计算机1021010704213徐森20xx年1月8日Hannoi塔目录目...

Java课程设计报告

安阳工学院计算机学院JAVA课程设计报告蜘蛛纸牌游戏专业班级09级网络工程2班学生姓名李瑞琳学生学号20xx03060016小组成员司慧晓郑亚楠司小婷杨达允指导教师姓名宋强目录1选题目的与系统概述32系统可行性...

java课程设计报告

黄淮学院JAVA课程设计报告题目:《日记本的设计与实现》课程设计学院:信息工程学院姓名:学号:专业:软件工程班级:软工1101B班指导教师:二0##年十二月目录1.引言...32.设计目的与任务...43.设计…

java课程设计报告书

java程序设计与应用开发Java课程设计报告书题目学籍管理系统班级数媒学号姓名教师20xx年12月24日1java程序设计与应用开发学籍管理系统一课程设计的目的与要求一课程设计目的与任务随着社会的发展及互联网...

Java课程设计报告【模板】

课程设计报告设计题目专业计算机科学与技术班级101学号20xx16021127学生姓名李贵云指导教师布瑞琴起至时间12161223教师评分20xx年月日目录1概述11目的这学期我们学习了Java语言Java语言...

java课程设计报告 简单绘画板

Java课程设计报告第1页题目班级学号姓名指导老师完成起止日期20xx年12月7日20xx年12月26日目录1题目与要求311题目312参考文献32功能描述43设计思想与系统结构531类设计532结构图64用户...

Java 课程设计报告 扫雷游戏

东华理工大学长江学院课程设计报告封面Java课程设计题目扫雷游戏姓名学号指导老师黄国辉设计时间20xx年4月1东华理工大学长江学院课程设计报告摘要摘要在今天游戏日益快速更新的情况下相信大家对Windows20x...

Java课程设计报告

合肥学院计算机科学与技术系课程设计报告20xx20xx学年第二学期课程Java语言程序设计企业人事管理系统08网络工程1班陈涛金莹郭昌建课程设计名称专姓指导教业班级名师20xx年9月一需求分析系统需求分析考察中...

java课程设计报告

淮海工学院计算机工程学院课程设计报告设计名称面向对象课程设计选题名称图像浏览器的设计与实现姓名学号专业班级网络工程122班系院计算机工程学院设计时间设计地点软件实验室教室面向对象课程设计报告第2页共16页面向对...

java课程设计报告

课程设计说明书课程名称Java程序设计专业班级设计人山东科技大学20xx年1月14日山东科技大学学生课程设计目录1需求分析说明111背景112功能要求113运行环境114功能实现12概要设计说明221模块调用图...

java课程设计万年历程序设计报告

广东商学院华商学院实验报告课程名称Java程序设计课程设计实验项目名称万年历班级与班级代码XX专软件X班实验室名称或课室厚德楼B203专业任课教师刘X璐学号310010114姓名XXX实验日期20xx年12月日...

java课程设计报告(32篇)