• 第4次作业类测试代码+074+林盼皇


    (友情提示:代码部分较多,为了便于测试,项目码源已上传至链接:http://pan.baidu.com/s/1pLscU3T 密码:ug8i)

     界面:

    1、类图

    2、界面和相应的功能。

    本次实验是在原来的CalDate日期计算类的基础上,添加了两个方法int weekDay(int m,int d,int y)与String lastDate(int m,int d,int y),此外还编写了GUInterface界面。

     a、实现lastDate

     1 public  String lastDate(int year, int month, int day)//lastDate方法
     2     {
     3         String lastDate = null;//用来接收日期
     4         checkLeapYear(year);//如果是闰年则将m[2]置为29
     5         switch(checkInput(year,month,day))//判断输入的的合法性属于哪种类型,如果输入合法再进行相关操作
     6         {        
     7             case 1: return lastDate = "月份超出范围"; 
     8             case 2: return lastDate = "日期超出范围"; 
     9             case 3: return lastDate = "年份超出范围"; 
    10             default:    
    11                 if(month==1 && day==1)//判断是否为每年的第一天,如果 是则年份减一,为12月31日
    12                 {
    13                     year--;
    14                     month = 12;
    15                     day = 31;
    16                 }
    17                 else if(day==1 && month!=1)
    18                 {//如果是非1月的第一天,则为上个月的最后一天
    19                     month = month-1;
    20                     day = m[month];
    21                 }
    22                 else //如果是其它日期
    23                 {
    24                     day--;
    25                 }
    26                 lastDate=year+"年"+month+"月"+day+"日";
    27                 m[2] = 28;//重置二月的天数
    28                 return lastDate;            
    29         }
    30     
    31     }

    b、实现weekDay,利用蔡勒公式

     1 //weekDay方法,根据蔡勒公式得到对应的日期,返回0表示星期日
     2     public  int weekDay(int year, int month, int day){
     3         if(month==1||month==2)//判断month是否为1或2 
     4         {
     5         year--;
     6         month+=12;
     7         }
     8         int c=year/100;
     9         int y=year-c*100;
    10         int week=(c/4)-2*c+(y+y/4)+(13*(month+1)/5)+day-1;
    11         while(week<0){week+=7;}
    12         week%=7;
    13         return week;
    14     }

    3、整个计算日期类CalDate代码

     1 public class CalDate {
     2     static int m[]={0,31,28,31,30,31,30,31,31,30,31,30,31};//静态数据存储月份的天数
     3 
     4     //weekDay方法,根据蔡勒公式得到对应的日期,返回0表示星期日
     5     public  int weekDay(int year, int month, int day){
     6         if(month==1||month==2)//判断month是否为1或2 
     7         {
     8             year--;
     9             month+=12;
    10         }
    11         int c=year/100;
    12         int y=year-c*100;
    13         int week=(c/4)-2*c+(y+y/4)+(13*(month+1)/5)+day-1;
    14         while(week<0){week+=7;}
    15         week%=7;
    16         return week;
    17     }
    18     public  String lastDate(int year, int month, int day)//lastDate方法
    19     {
    20         String lastDate = null;//用来接收日期
    21         checkLeapYear(year);//如果是闰年则将m[2]置为29
    22         switch(checkInput(year,month,day))//判断输入的的合法性属于哪种类型,如果输入合法再进行相关操作
    23         {        
    24             case 1: return lastDate = "月份超出范围"; 
    25             case 2: return lastDate = "日期超出范围"; 
    26             case 3: return lastDate = "年份超出范围"; 
    27             default:    
    28                 if(month==1 && day==1)//判断是否为每年的第一天,如果 是则年份减一,为12月31日
    29                 {
    30                     year--;
    31                     month = 12;
    32                     day = 31;
    33                 }
    34                 else if(day==1 && month!=1)
    35                 {//如果是非1月的第一天,则为上个月的最后一天
    36                     month = month-1;
    37                     day = m[month];
    38                 }
    39                 else //如果是其它日期
    40                 {
    41                     day--;
    42                 }
    43                 lastDate=year+"年"+month+"月"+day+"日";
    44                 m[2] = 28;//重置二月的天数
    45                 return lastDate;            
    46         }
    47     
    48     }
    49     public  String nextDate(int year,int month,int day)//nextDate方法
    50     {
    51         String newDate = null;//用来接收日期
    52         checkLeapYear(year);//如果是闰年则将m[2]置为29
    53         switch(checkInput(year,month,day))//判断输入的的合法性属于哪种类型,如果输入合法再进行相关操作
    54         {        
    55             case 1: return newDate = "月份超出范围"; 
    56             case 2: return newDate = "日期超出范围"; 
    57             case 3: return newDate = "年份超出范围"; 
    58             default:    
    59                 if(month==12 && day==31)//判断是否为最后一个月的最后一天,如果 是则年份加1,为1月1日
    60                 {
    61                     year++;
    62                     month = 1;
    63                     day = 1;
    64                 }
    65                 else if(day < m[month]) day++;//如果日期的天数小于本月天数执行day++;否则表示为当月的最后一天执行month++,day=1;
    66                 else 
    67                 {
    68                     month++;
    69                     day =1;
    70                 }
    71                 newDate=year+"年"+month+"月"+day+"日";
    72                 m[2] = 28;//重置二月的天数
    73                 return newDate;            
    74         }
    75     }
    76     public  void checkLeapYear(int year)//如果是闰年则将m[2]置为29
    77     {
    78         if(year%4 == 0 && year%100 != 0)
    79             m[2] = 29;//闰年2月29天
    80         if(year%400 == 0)
    81             m[2] = 29;
    82     }
    83     public  int checkInput(int year,int month, int day)//判断输入是否合法,并分成不同类型
    84     {
    85         if(month<1 || month>12)
    86             return 1;
    87         if(day<1 || day>m[month])
    88             return 2;
    89         if(year<1992 || year>2050)
    90             return 3;
    91         return 0;
    92     }
    93 }

    4、图形界面的主要是使用CalDate类中的方法

    a、ok按钮的响应事件,调用相应方法将分别将计算结果显示出来

     1 okButton.addActionListener(new ActionListener() {
     2             
     3             @Override
     4             public void actionPerformed(ActionEvent e) {
     5                 if(e.getSource() == okButton){//判断触发源是否是ok按钮
     6                     //获取年月日
     7                     int year = Integer.parseInt( yearText.getText() );
     8                     int month = Integer.parseInt( monthText.getText() );
     9                     int day = Integer.parseInt( dayText.getText() );
    10                     
    11                     //调用日期计算类的weekDay方法,只有合法输入时才调用
    12                     if(calDate.checkInput(year, month, day) == 0)
    13                     {
    14                         String weekDay = null;
    15                         switch(calDate.weekDay(year, month, day)){
    16                             case 0: weekDay = "日"; break;
    17                             case 1: weekDay = "一"; break;
    18                             case 2: weekDay = "二"; break;
    19                             case 3: weekDay = "三"; break;
    20                             case 4: weekDay = "四"; break;
    21                             case 5: weekDay = "五"; break;
    22                             case 6: weekDay = "六"; break;
    23                         }
    24                         weekDayText.setText(weekDay);
    25                     }
    26                     
    27                     //调用日期计算类的lastDate方法
    28                     lastDayText.setText( calDate.lastDate(year, month, day) );
    29                     
    30                     //调用日期计算类的NextDate方法
    31                     nextDayText.setText( calDate.nextDate(year, month, day) );
    32                     
    33                     
    34                 }
    35                 
    36             }
    37         });

    b、cancel按钮的响应事件,将界面的文本框清空

    cancelButton.addActionListener(new ActionListener(){
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    
                    if(e.getSource() == cancelButton){//判断触发是否是cancel按钮,重置文本框
                        
                        yearText.setText("");
                        monthText.setText("");
                        dayText.setText("");
                        weekDayText.setText("");
                        lastDayText.setText("");
                        nextDayText.setText("");
                    }
                }
                
            });

    c、复写窗口关闭程序,退出时出现提示功能

     1 jFrame.addWindowListener(new WindowAdapter() {
     2             //复写窗口关闭程序
     3             public void windowClosing(WindowEvent e){
     4                 int a = JOptionPane.showConfirmDialog(null, "确定关闭吗?", "温馨提示", 
     5                         JOptionPane.YES_NO_OPTION);
     6                     if (a == 0) {  
     7                        System.exit(0);  //关闭
     8                     }
     9             }
    10         });

    5、图形界面类GUInterface完整代码

      1 public class GUInterface {
      2     //声明一个日期计算类对象
      3     private CalDate calDate;
      4     //声明一个窗体对象
      5     private JFrame jFrame = new JFrame("日期计算程序");
      6     //声明按钮对象
      7     private JButton okButton = new JButton("ok");
      8     private JButton cancelButton = new JButton("cancel");
      9     //声明标签
     10     private JLabel yearLabel = new JLabel("年:");
     11     private JLabel monthLabel = new JLabel("月:");
     12     private JLabel dayLabel = new JLabel("日:");
     13     private JLabel weekDayLabel = new JLabel("这天是星期:");
     14     private JLabel lastDayLabel = new JLabel("上一天是:");    
     15     private JLabel nextDayLabel = new JLabel("下一天是:");    
     16     private JLabel infoLabel = new JLabel("请输入需要计算的年月日");    
     17     
     18     //声明文本域
     19     private JTextField yearText = new JTextField();
     20     private JTextField monthText = new JTextField();
     21     private JTextField dayText = new JTextField();
     22     private JTextField weekDayText = new JTextField();
     23     private JTextField lastDayText = new JTextField();
     24     private JTextField nextDayText = new JTextField();
     25     
     26     
     27     public GUInterface(){
     28         
     29         calDate = new CalDate();
     30         okButton.addActionListener(new ActionListener() {
     31             
     32             @Override
     33             public void actionPerformed(ActionEvent e) {
     34                 if(e.getSource() == okButton){//判断触发源是否是ok按钮
     35                     //获取年月日
     36                     int year = Integer.parseInt( yearText.getText() );
     37                     int month = Integer.parseInt( monthText.getText() );
     38                     int day = Integer.parseInt( dayText.getText() );
     39                     
     40                     //调用日期计算类的weekDay方法,只有合法输入时才调用
     41                     if(calDate.checkInput(year, month, day) == 0)
     42                     {
     43                         String weekDay = null;
     44                         switch(calDate.weekDay(year, month, day)){
     45                             case 0: weekDay = "日"; break;
     46                             case 1: weekDay = "一"; break;
     47                             case 2: weekDay = "二"; break;
     48                             case 3: weekDay = "三"; break;
     49                             case 4: weekDay = "四"; break;
     50                             case 5: weekDay = "五"; break;
     51                             case 6: weekDay = "六"; break;
     52                         }
     53                         weekDayText.setText(weekDay);
     54                     }
     55                     
     56                     //调用日期计算类的lastDate方法
     57                     lastDayText.setText( calDate.lastDate(year, month, day) );
     58                     
     59                     //调用日期计算类的NextDate方法
     60                     nextDayText.setText( calDate.nextDate(year, month, day) );
     61                     
     62                     
     63                 }
     64                 
     65             }
     66         });
     67         cancelButton.addActionListener(new ActionListener(){
     68 
     69             @Override
     70             public void actionPerformed(ActionEvent e) {
     71                 
     72                 if(e.getSource() == cancelButton){//判断触发是否是cancel按钮,重置文本框
     73                     
     74                     yearText.setText("");
     75                     monthText.setText("");
     76                     dayText.setText("");
     77                     weekDayText.setText("");
     78                     lastDayText.setText("");
     79                     nextDayText.setText("");
     80                 }
     81             }
     82             
     83         });
     84         jFrame.addWindowListener(new WindowAdapter() {
     85             //复写窗口关闭程序
     86             public void windowClosing(WindowEvent e){
     87                 int a = JOptionPane.showConfirmDialog(null, "确定关闭吗?", "温馨提示", 
     88                         JOptionPane.YES_NO_OPTION);
     89                     if (a == 0) {  
     90                        System.exit(0);  //关闭
     91                     }
     92             }
     93         });
     94         
     95         jFrame.setLayout(null);
     96         infoLabel.setBounds(5,5,220,30);//设置标签的位置与大小
     97         yearLabel.setBounds(5,35,30,30);
     98         yearText.setBounds(25,35,50,30);
     99         monthLabel.setBounds(75,35,30,30);
    100         monthText.setBounds(105,35,30,30);
    101         dayLabel.setBounds(135,35,30,30);
    102         dayText.setBounds(165,35,30,30);
    103         okButton.setBounds(10,70,75,20);//设置按钮的位置与大小
    104         cancelButton.setBounds(120,70,75,20);
    105         weekDayLabel.setBounds(5,95,100,20);
    106         weekDayText.setBounds(110,95,40,20);//设置文本框的位置与大小
    107         lastDayLabel.setBounds(5, 125, 100, 20);
    108         lastDayText.setBounds(110, 125, 100, 20);
    109         nextDayLabel.setBounds(5, 155, 100, 20);
    110         nextDayText.setBounds(110, 155, 100, 20);
    111         jFrame.add(infoLabel);//向窗体加入标签、文本框、按钮
    112         jFrame.add(yearLabel);
    113         jFrame.add(yearText);
    114         jFrame.add(monthLabel);
    115         jFrame.add(monthText);
    116         jFrame.add(dayLabel);
    117         jFrame.add(dayText);
    118         jFrame.add(okButton);
    119         jFrame.add(cancelButton);
    120         jFrame.add(weekDayLabel);
    121         jFrame.add(weekDayText);
    122         jFrame.add(lastDayLabel);
    123         jFrame.add(lastDayText);
    124         jFrame.add(nextDayLabel);
    125         jFrame.add(nextDayText);
    126         
    127         jFrame.setSize(300,250);//设置窗口大小
    128         jFrame.setVisible(true);
    129     }
    130 }

    6、最后运行结果

     

  • 相关阅读:
    mybatis Column 'XXX' in where clause is ambiguous 错误
    IDEA 代码提示不区分大小写
    接口安全问题
    spring 事务问题
    js问题: is not a function
    Uncaught TypeError: form.attr is not a function 解决办法
    springmvc 跳转页面或者返回json
    ajax 跳转页面时添加header
    maven工程 添加本地jar依赖
    mysql 创建备份表
  • 原文地址:https://www.cnblogs.com/linpanhuang/p/6790891.html
Copyright © 2020-2023  润新知