码迷,mamicode.com
首页 > 其他好文 > 详细

结对编程

时间:2015-09-18 23:15:46      阅读:436      评论:0      收藏:0      [点我收藏+]

标签:

一 要求:带有日程提醒功能的日历。

    1、显示信息:用户可以向前翻页查询前一个月的日期,也可以向后翻页查询下一个月的日期。

    2、定时提醒:用户可以针对某一天来添加,删除和编辑这一天的日程提醒信息,当系统时间和提醒时间相吻合时,给出具有提示信息的对话框。

    3、查询信息:用户可以查询到某个月的所有的提示信息。

二、核心算法详细设计   

通过点击save,来存储保留在当天的信息,同样的可以通过delete来删除。通过输入日期在点击Query查询某天或某月当天的信息及其记录信息。

三、完整源码

       完整源码:给出完整的源代码。

文件:Rljsb.java

带有日程提醒功能的日历。

package wenmiao;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.event.*;

import javax.swing.border.*;

import java.util.Calendar;

import java.util.*;

import java.io.*;

import java.io.IOException;

public class Rljsb extends JFrame implements ActionListener,MouseListener {

     int year,month,day;

     int yearafterquery,monthafterquery;

     int startday;

     String SwitchMonth;

     String key;

     int changeyearmessage;

     int changemonthmessage;

     int priormonth;

     int prioryear;

     boolean ischange=false;

     boolean ischange_priornext=false;

     private JPanel LeftPane,RightPane;

     //Left sub

     private JLabel YearLabel;

     private JLabel MonthLabel;

     private JComboBox MonthCombobox;

     private JTextField ShowDays[]= new JTextField[42];

     private JTextField YearText;

     private JLabel Ask;

     private JLabel ShowDate;

     private JLabel Blank;

     private JLabel TopBarTitle[]=new JLabel[7];

     private JButton ToToday;

     private JButton Query;

     private String week[]={"SUN","MON","TUE","WED","THU","FRI","SAT"};

     //right sub

     private JLabel NorthMonthDayYear;

     private JTextArea CenterText;

     private JButton SouthSave,SouthDelete; 

     private JButton PriorMonth;

     private JButton NextMonth;

     public Rljsb(int year,int month,int day)

     {

         setTitle("My Calendar&Textbook");

         //the layout about left of jpane

         LeftPane = new JPanel();

         JPanel LeftCenter = new JPanel();

         JPanel LeftNorth = new JPanel();

         //JPanel LeftSouth = new JPanel();

         LeftPane.setLayout(new BorderLayout());

         LeftPane.add(LeftNorth,BorderLayout.NORTH);

         LeftPane.add(LeftCenter,BorderLayout.CENTER);

         LeftPane.add(ToToday = new JButton("Go to today",new ImageIcon("../images/Handle.gif")),BorderLayout.SOUTH);

         ToToday.setBackground(Color.cyan);

         ToToday.addActionListener(this);

         LeftPane.validate();

         //the layout of LeftPane

         //LeftPane_North

         LeftNorth.setLayout(new GridLayout(3,1,0,-2));

         LeftNorth.add(Ask = new JLabel("  Plese input the informations which you want query:"));

         JPanel North = new JPanel(new FlowLayout(0,8,0));

         LeftNorth.add(North);

         North.add(YearLabel=new JLabel("Year:"));

         North.add(YearText = new JTextField(4));

         YearText.setBackground(Color.getHSBColor(30,20,50));

         YearText.setForeground(Color.blue);

         YearText.setFont(new Font("TimesRoman",Font.BOLD,17));

         YearText.addActionListener(this);

         YearText.setFocusable(true);

         North.add(Blank=new JLabel(" "));

         North.add(MonthLabel = new JLabel("Month:"));

         North.add(MonthCombobox = new JComboBox());

         //add month to monthcombobox

         for(int i=1;i<=12;i++)

         {

             MonthCombobox.addItem(new Integer(i));

         }

         //Switch the month

         MonthCombobox.setForeground(Color.blue);

         MonthCombobox.setFont(new Font("TimesRoman",Font.BOLD,12));

         North.add(Blank=new JLabel(" "));

         North.add(Query=new JButton("Query"));

         Query.setForeground(Color.blue);

         Query.addActionListener(this);

         JPanel North2=new JPanel(new FlowLayout());

         LeftNorth.add(North2);

         North2.add(PriorMonth=new JButton(new ImageIcon("../images/prior.gif")));

         PriorMonth.addActionListener(this);

         PriorMonth.setActionCommand("prior");

         priormonth=month;

         prioryear=year;

         SwitchMonth(month);

         North2.add(ShowDate = new JLabel(SwitchMonth+" "+","+" "+String.valueOf(year),SwingConstants.CENTER));

         ShowDate.setForeground(Color.blue);

         ShowDate.setFont(new Font("TimesRoman",Font.BOLD,14));

         North2.add(NextMonth=new JButton(new ImageIcon("../images/next.gif")));

         NextMonth.addActionListener(this);

         NextMonth.setActionCommand("next");

         //LeftPane_Center

         LeftCenter.setLayout(new GridLayout(7,7));

         //print title

         for(int i=0;i<7;i++)

         {

             TopBarTitle[i]=new JLabel();

             TopBarTitle[i].setText(week[i]);

             TopBarTitle[i].setForeground(Color.darkGray);

             TopBarTitle[i].setHorizontalAlignment(0);

             TopBarTitle[i].setBackground(Color.MAGENTA );

             TopBarTitle[i].setBorder(BorderFactory.createRaisedBevelBorder());

             LeftCenter.add(TopBarTitle[i]);

         }

         //print screen and add listene

         for(int i=0;i<42;i++)

         {

             ShowDays[i]=new JTextField();

             ShowDays[i].addMouseListener(this);

             ShowDays[i].setEditable(false);

             LeftCenter.add(ShowDays[i]);

         }

         //print the body of month

         PrintMonth(year,month,day);

         //the layout about right of jpane

         RightPane = new JPanel(new BorderLayout());

         JPanel RightCenter = new JPanel();

         JPanel RightNorth = new JPanel();

         JPanel RightSouth = new JPanel(new FlowLayout());

         RightPane.add(RightNorth,BorderLayout.NORTH);

         RightPane.add(RightCenter,BorderLayout.CENTER);

         RightPane.add(RightSouth,BorderLayout.SOUTH);

         RightNorth.add(NorthMonthDayYear=new JLabel(">>"+year+","+SwitchMonth+","+day+"<<"));

         key=year+"_"+SwitchMonth+"_"+day;

         NorthMonthDayYear.setForeground(Color.blue);

         NorthMonthDayYear.setFont(new Font("TimesRoman",Font.BOLD,17));

         RightCenter.add(CenterText=new JTextArea("please write today‘s things."));

         CenterText.setLineWrap(true);

         CenterText.setSelectedTextColor(Color.blue);

         //CenterText.addActionListener(this);

         RightSouth.add(SouthSave=new JButton("        Save        "));

         SouthSave.setBackground(Color.cyan);

         SouthSave.addActionListener(this);

         SouthSave.setActionCommand("Save");

         RightSouth.add(SouthDelete=new JButton("      Delete      "));

         SouthDelete.setBackground(Color.cyan);

         SouthDelete.addActionListener(this);

         SouthDelete.setActionCommand("Delete");

         this.year = year;

         this.month = month;

         this.day = day;

         ///add container to put LeftPane and RightPane

         Container con=getContentPane();

         JSplitPane split=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,RightPane,LeftPane);//gai bian

         con.add(split,BorderLayout.CENTER);

         con.validate();

         //add CenterPane to notepad

         //CenterPane initialize

         setFont(new Font("Times New Roman",Font.PLAIN,12));

         JScrollPane scrollpane = new JScrollPane(CenterText);

         scrollpane.setPreferredSize(new Dimension(220,250));

         RightCenter.add(scrollpane);

         //init randomaccessfile

    }

     //switch the month in english

     public void SwitchMonth(int month)

     {

         switch(month)

         {

         case 1:

             SwitchMonth="Jan";break;

         case 2:

             SwitchMonth="Feb";break;

        case 3:

            SwitchMonth="Mar";break;

        case 4:

            SwitchMonth="Apr";break;

        case 5:

            SwitchMonth="May";break;

        case 6:

            SwitchMonth="Jun";break;

        case 7:

            SwitchMonth="Jul";break;

        case 8:

            SwitchMonth="Aug";break;

        case 9:

            SwitchMonth="Sep";break;

        case 10:

            SwitchMonth="Qct";break;

        case 11:

            SwitchMonth="Nov";break;

        case 12:

            SwitchMonth="Dec";break;

        }

    }

     //print the body of the month

     public void PrintMonth(int year,int month,int day)

     {

         //Get start day of the week for the first date in the month

         int startday = GetStartDay(year,month);

         //Get number of days in the month

         int dayinmonth = GetNumOfDaysInMonth(year,month);

         //Print header

         //PrintTitleAndScreen();

         //Print body

         PrintMonthBody(startday,dayinmonth);

     }

    //PrintMonth(int year,int month,int day)‘s burden

    public void PrintMonth(int year,int month)

    {

    //Get start day of the week for the first date in the month

    int startday = GetStartDay(year,month);

    //Get number of days in the month

    int dayinmonth = GetNumOfDaysInMonth(year,month);

    //Print header

    //Print body

    PrintMonthBody(startday,dayinmonth);

     }

    //PrintMonthBody(int startday,int dayinmonth,int day)‘s burden

    public void PrintMonthBody(int startday,int dayinmonth)

    {

    for(int i=startday,n=1;i<startday+dayinmonth;i++)

    {

         ShowDays[i].setText(""+n);

         ShowDays[i].setHorizontalAlignment(0);//let center

         if(n==day)

         {

             ShowDays[i].setForeground(Color.green);

             ShowDays[i].setFont(new Font("TimesRoman",Font.BOLD,20));

             ShowDays[i].setBackground(Color.DARK_GRAY);

         }

         else

         {

             ShowDays[i].setFont(new Font("TimesRoman",Font.BOLD,12));

             ShowDays[i].setForeground(Color.white);

             ShowDays[i].setBackground(Color.DARK_GRAY);

         }

         n++;

    }

    for(int i=0;i<startday;i++)

    {

         ShowDays[i].setText("");

         ShowDays[i].setBackground(Color.DARK_GRAY);

    }

    for(int i=startday+dayinmonth;i<42;i++)

    {

         ShowDays[i].setText("");

         ShowDays[i].setBackground(Color.DARK_GRAY);

    }

     }

     //judge leapyear is or not

     public boolean IsLeapYear(int year)

     {

         if((year%400==0)||(year%4==0&&year%100!=0))

             return true;

         else

             return false;

     }

     //judge the start day of a month

     public int GetStartDay(int year,int month)

     {

         //get total number of day since1/1/0000

         int startday0001=-32768;

         long totalnumofdays=GetTotalNumOfDays(year,month);

         //return the start day

         return (int)((totalnumofdays+startday0001)%7);

     }

     //judge the days of a year

     public  long GetTotalNumOfDays(int year,int month)

     {

         long total=0;

         //get the total days from -32767 to year

         for(int i=-32767;i<year;i++)

         {

             if(IsLeapYear(i))

                 total=total+366;

             else

                 total=total+365;

        }

     //Add days from jan to the month prior to the calendar month

     for(int i=1;i<month;i++)

     total=total+GetNumOfDaysInMonth(year,i);

     return total;

     }

     //judge the days of a month

     public int GetNumOfDaysInMonth(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(IsLeapYear(year))

                 return 29;

             else

                 return 28;

         }

         return 0;

     }

     public void WriteRecord()

     {

         String content;

         content=CenterText.getText(); 

         int n=content.length();

         char[] contentarr=new char[n];

         try

         {

             int i=0;

             for(i=0;i<n;i++)

             {

                 contentarr[i]=content.charAt(i);

             }

             File Diary = new File("Diary");

             Diary.mkdir();

             File myfile=new File("Diary\\"+key+".txt");

             FileWriter Record=new FileWriter(myfile);

             for(i=0;i<contentarr.length;i++)

             {

                 Record.write(contentarr[i]);

            }

             Record.close();

             JOptionPane.showMessageDialog(this,"Save success!");

             }

         catch(IOException ex){}

    }

     public void ReadRecord()

      {

      try

      {

      String content="";

      File myfile=new File("Diary\\"+key+".txt");

      FileReader Record=new FileReader(myfile);

      if(myfile.exists())

      {

      long b=myfile.length();

      //char[] contentarr=new char[b];

      int n=JOptionPane.showConfirmDialog(this,"Today has logs,are you read?","Confirm",JOptionPane.YES_NO_CANCEL_OPTION);

      if(n==JOptionPane.YES_OPTION)

      {

      while((b=Record.read())!=-1)

      {

      content=content+(char)b;

      }

      CenterText.setText(content);

      }

      }

      Record.close();

      }

      catch(IOException ex)

     {

     CenterText.setText("Today has not logs.");

     }

      }

     public void DeleteFile()

      {

          String filepath="Diary\\"+key+".txt";

          File myfile=new File(filepath);

          int n=JOptionPane.showConfirmDialog(this,"Are you sure delete the file?","Confirm",JOptionPane.YES_NO_CANCEL_OPTION);

          if(n==JOptionPane.YES_OPTION)

          {

              if(myfile.exists())

              {

                  Runtime rt = Runtime.getRuntime();

                  try

                  {

                      rt.exec("cmd /c del "+filepath);

                  }

                  catch (IOException e)

                  {

                      e.printStackTrace();

                  }

                  JOptionPane.showMessageDialog(this,"Delete successed!");

                  CenterText.setText("Today has not logs.");

              }

              else

              {

                  JOptionPane.showMessageDialog(this,"The file doesn‘t exist,delete failured!");

              }

          }

      }

     public void AboutActionListenerWay()

          {

         try

          {

          prioryear=Integer.parseInt(YearText.getText());

          priormonth=MonthCombobox.getSelectedIndex()+1;

          String StrYearText=YearText.getText();

          changeyearmessage=Integer.parseInt(StrYearText);

          changemonthmessage=MonthCombobox.getSelectedIndex()+1;

          monthafterquery=changemonthmessage;

          yearafterquery=changeyearmessage;

          SwitchMonth(changemonthmessage);

         ShowDate.setText(SwitchMonth+" "+","+" "+String.valueOf(changeyearmessage));

          PrintMonth(changeyearmessage,changemonthmessage);

          ischange=true;   

         }

          catch(Exception ee)

         {

          JOptionPane.showMessageDialog(this,"The input format doesn‘t match","Error",JOptionPane.ERROR_MESSAGE);

         }

          }

          //do actonlistener things

     public void actionPerformed(ActionEvent eAction)

     {

          String ActionCommand=eAction.getActionCommand();

          //Handle button events

          if(eAction.getSource() instanceof JButton)

          {

          //Handle the query

              if("Query".equals(ActionCommand))

              {

                  try

                  {

                      AboutActionListenerWay();

              }

                  catch(Exception ee)

                  {

                      JOptionPane.showMessageDialog(this,"The input format doesn‘t match","Error",JOptionPane.ERROR_MESSAGE);

                  }

          }

              //Handle prior month

              if("prior".equals(ActionCommand))

              {

                  if(priormonth>1)

                  {

                      priormonth=priormonth-1;

                  }

                  else

                  {

                      priormonth=12;

                      prioryear=prioryear-1;

                  }

                  PrintMonth(prioryear,priormonth,day);

                  SwitchMonth(priormonth);

                  ShowDate.setText(SwitchMonth+" , "+prioryear);

                  NorthMonthDayYear.setText(">>"+SwitchMonth+","+day+","+prioryear+"<<");

                  key=prioryear+"_"+SwitchMonth+"_"+day;

                  ischange_priornext=true;

              }

              //Handle next month

              if("next".equals(ActionCommand))

              {

                  if(priormonth<12)

                  {

                      priormonth=priormonth+1;

                  }

                  else

                  {

                      priormonth=1;

                      prioryear=prioryear+1;

                  }

                  PrintMonth(prioryear,priormonth,day);

                  SwitchMonth(priormonth);

                  ShowDate.setText(SwitchMonth+" , "+prioryear);

                  NorthMonthDayYear.setText(">>"+SwitchMonth+","+day+","+prioryear+"<<");

                  key=prioryear+"_"+SwitchMonth+"_"+day;

                  ischange_priornext=true;

              }

              //Handle the "Go to today"

              if("Go to today".equals(ActionCommand))

              {

                  PrintMonth(year,month,day);

                  YearText.setText("");

                  MonthCombobox.setSelectedIndex(0);

                  SwitchMonth(month);

                  ShowDate.setText(SwitchMonth+" "+","+" "+String.valueOf(year));

                  NorthMonthDayYear.setText(">>"+year+SwitchMonth+","+day+","+"<<");

                  key=year+"_"+SwitchMonth+"_"+day;

                  priormonth=month;

                  prioryear=year;

                  ischange=false;

              }

              //Handle the "Save"

              if("Save".equals(ActionCommand))

              {

                  WriteRecord();

              }

              if("Delete".equals(ActionCommand))

              {

                  DeleteFile();

              }

          }

          //Handle JTextField events

          if(eAction.getSource() instanceof JTextField)

          {

              //Handle the query

              AboutActionListenerWay();

          }

    }

     public void mousePressed(MouseEvent eMouse)

     {

         int day;

         try

         {

             JTextField source=(JTextField)eMouse.getSource();

             day=Integer.parseInt(source.getText());

             if(ischange==false)

             {

               

                 if(ischange_priornext==false)

                 {

                     NorthMonthDayYear.setText(">>"+SwitchMonth+","+day+","+year+"<<");

                     key=year+"_"+SwitchMonth+"_"+day;

                 }

                 else

                 {

                     NorthMonthDayYear.setText(">>"+SwitchMonth+","+day+","+prioryear+"<<");

                     key=prioryear+"_"+SwitchMonth+"_"+day;

                 }

             }

             else

                 // JTextField source=(JTextField)eMouse.getSource();

                 //day=Integer.parseInt(source.getText());

                 if(ischange_priornext==false)

                 {

                     SwitchMonth(changemonthmessage);

                     NorthMonthDayYear.setText(">>"+SwitchMonth+","+day+","+changeyearmessage+"<<");

                     key=changeyearmessage+"_"+SwitchMonth+"_"+day;

                 }

                 else

                 {

                     SwitchMonth(priormonth);

                     NorthMonthDayYear.setText(">>"+SwitchMonth+","+day+","+prioryear+"<<");

                     key=prioryear+"_"+SwitchMonth+"_"+day;

                 }

             ReadRecord();

         }

         catch(Exception ee)

         {

                     }

     }

     public void mouseClicked(MouseEvent e){}

     public void mouseReleased(MouseEvent e){}

     public void mouseEntered(MouseEvent e){}

     public void mouseExited(MouseEvent e){}

     public void SaveLog(int year,int month,int day){}

     public static void main(String[] args) throws Exception

     {

         Calendar calendar=Calendar.getInstance();   

         int y=calendar.get(Calendar.YEAR);          

         int m=calendar.get(Calendar.MONTH)+1;       

         int d=calendar.get(Calendar.DAY_OF_MONTH); 

         Wannianli frame = new Wannianli(y, m, d);

         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

         frame.setSize(560,300);

         frame.setLocation(100,100);

         frame.setVisible(true);

         frame.setResizable(false);

         frame.ReadRecord();

     }

}

四、使用说明与运行结果截图

运行结果截图:

 

 技术分享

 

 技术分享

 

五、实践总结

     经过这次实验,我发现在操作的过程中我都遇到了很多的困难,同时我也得到了很多的收获的。

     在本次试验中,给我印象最为深刻的是程序的编译过程中,从中我学到了许多以前学有学会和没有学到的函数。除此之个还不其它一些函数也得到了巩固。以前总是模模糊糊的,现在心里十分清楚了。对一些类及方法的运用显得只能再课本上看,这次的学习让我从纸上谈兵逐渐的过渡到实践出真知。通过这次课程设计,我进一步加深对基础理论的理解,扩大专业知识面,对收集资料、查阅文献、方案制定等实践方面得到了很好的锻练,促进对所学知识应用能力的提高。同时我渐渐的复习了Java使用方法和编程语法,之后的编程过程也相对得心应手,基本完成了预期计划的要求。

结对编程

标签:

原文地址:http://www.cnblogs.com/i-love-ww520/p/4820436.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!