一、类图
二、代码
Date类:
package examOne; import java.util.Scanner; import snippet.Snippet; public class Date { String ia, ib, ic; int y, m, d; private boolean Read(){ Scanner sc = new Scanner(System.in); System.out.println("请输入年份"); ia = sc.nextLine(); if( "-1".equals(ia) ){ sc.close(); return false; } System.out.println("请输入月份"); ib = sc.nextLine(); System.out.println("请输入日期"); ic = sc.nextLine(); return true; } public void getInputString( String a, String b, String c ){ ia = a ; ib = b ; ic = c ; } public boolean isLeagal(){ if( isInputInteger() && isInRange() ){ return true; } return false; } private boolean isInputInteger(){ try{ y = Integer.valueOf(ia).intValue(); m = Integer.valueOf(ib).intValue(); d = Integer.valueOf(ic).intValue(); return true; } catch( Exception e){ return false; } } private boolean isInRange(){ if( m < 1 || m > 12 ){ //System.out.println("月份超出范围"); return false; } if( d < 1 || d > 31 ){ //System.out.println("日期超出范围"); return false; } if( y < 1912 || y > 2050 ){ //System.out.println("年份超出范围"); return false; } return true; } private int isLeapYear(){ if( ( y % 4 == 0 && y % 100 != 0 ) || ( y % 400 == 0 ) ){ return 1; } return 0; } private boolean EndOfMouth( int flg ){ if( ( m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12 ) && d == 31 ){ return true; } if( m == 2 && d == (28 + flg) ){ return true; } if( ( m == 4 || m == 6 || m == 9 || m == 11 ) && d == 30 ){ return true; } return false; } private int getMouthDay( int x ){ if( ( x == 1 || x == 3 || x == 5 || x == 7 || x == 8 || x == 10 || x == 12 ) ){ return 31 ; } else if(( x == 4 || x == 6 || x == 9 || x == 11 )){ return 30 ; } else if( x == 2 && isLeapYear() == 1 ){ return 29 ; } else{ return 28 ; } } private String NextDate(){ int ny, nm, nd ; ny = y; nm = m; nd = d; int tag = 0; if( EndOfMouth( isLeapYear() ) ){ tag = 1; } if( nm == 12 && tag == 1 ){ ny++; nm = 1; nd = 1; } else if( tag == 1 ){ nm++; nd = 1; } else{ nd++; } String ret = ny + "年" + nm + "月" + nd + "日"; return ret; } private String PreDate(){ int ny, nm, nd ; ny = y; nm = m; nd = d; int tag = 0 ; if( nd == 1 ){ tag = 1 ; } if( tag == 1 && nm == 1 ){ ny-- ; nm = 12 ; nd = 31 ; } else if( tag == 1 ){ nm--; nd = getMouthDay( nm ); } else { --nd ; } String ret = ny + "年" + nm + "月" + nd + "日"; return ret; } private String Week(){ if( m == 1 || m == 2 ){ m += 12 ; y--; } int ans = ( d + 2*m + 3*( m + 1 )/5 + y + y/4 - y/100 + y/400 ) % 7; ans++ ; if( ans == 1 ){ return "一"; } else if( ans == 2 ){ return "二" ; } else if( ans == 3 ){ return "三"; } else if( ans == 4 ){ return "四"; } else if( ans == 5 ){ return "五"; } else if( ans == 6 ){ return "六"; } else{ return "七"; } } public String GetNextDate(){ return NextDate(); } public String GetPreDate(){ return PreDate(); } public String GetWeek(){ return Week() ; } public static void main( String args[]){ Snippet snt = new Snippet(); snt.drawPicture(); } }
图形类:
package snippet; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; import examOne.Date; public class Snippet { private JFrame frame = new JFrame("日期计算程序"); private JLabel title = new JLabel("请输入需要计算的年月日(1912-2050之间)"); private JLabel year = new JLabel("年:"); private JLabel month = new JLabel("月:"); private JLabel day = new JLabel("日:"); private JLabel thisWeek = new JLabel("这一天是星期"); private JLabel nextDay = new JLabel("下一天是:"); private JLabel prevDay = new JLabel("上一天是:"); private JTextField t_year = new JTextField(); private JTextField t_month = new JTextField(); private JTextField t_day = new JTextField(); private JTextField t_thisWeek = new JTextField(); private JTextField t_nextDay = new JTextField(); private JTextField t_prevDay = new JTextField(); private JButton submit = new JButton("确定"); private JButton cancel = new JButton("清空"); private Date date = new Date(); public void drawPicture() { frame.setLayout(null); submit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(e.getSource() == submit) { String y = t_year.getText(); String m = t_month.getText(); String d = t_day.getText(); date.getInputString( y,m,d ); if( date.isLeagal() ){ t_nextDay.setText(date.GetNextDate()); t_prevDay.setText(date.GetPreDate()); t_thisWeek.setText(date.GetWeek()); } else{ t_nextDay.setText("输入非法!"); t_prevDay.setText(""); t_thisWeek.setText(""); } } } }); //使用匿名匿名内部类为cancel按钮添加监听事件 cancel.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //清空输入的数据 if(e.getSource() == cancel) { t_year.setText(""); t_month.setText(""); t_day.setText(""); t_nextDay.setText(""); t_prevDay.setText(""); t_thisWeek.setText(""); } } }); /*设置标签位置及大小*/ Font ft = new Font("黑体",Font.BOLD,24);//设置显示字体 title.setFont(ft); title.setBounds(62, 62, 500, 25); year.setFont(ft); year.setBounds(80, 124, 50, 25); month.setFont(ft); month.setBounds(230, 124, 50, 25); day.setFont(ft); day.setBounds(380, 124, 50, 25); thisWeek.setFont(ft); thisWeek.setBounds(62, 248, 200, 25); prevDay.setFont(ft); prevDay.setBounds(62, 372, 150, 25); nextDay.setFont(ft); nextDay.setBounds(62, 310, 150, 25); /*设置文字位置及大小*/ t_year.setBounds(130, 124, 50, 25); t_month.setBounds(280, 124, 50, 25); t_day.setBounds(430, 124, 50, 25); t_thisWeek.setBounds(230, 248, 50, 25); t_thisWeek.setFont(ft); t_thisWeek.setEnabled(false);//设置为无法输入 t_nextDay.setBounds(180, 310, 200, 25); t_nextDay.setFont(ft); t_nextDay.setEnabled(false);//设置为无法输入 t_prevDay.setBounds(180, 372, 200, 25); t_prevDay.setFont(ft); t_prevDay.setEnabled(false);//设置为无法输入 /*设置按钮位置及大小*/ submit.setBounds(180, 187, 62, 31); cancel.setBounds(320, 187, 62, 31); //把所有组件添加到frame中 frame.add(title);frame.add(year);frame.add(month);frame.add(day); frame.add(thisWeek);frame.add(nextDay);frame.add(prevDay); frame.add(t_year);frame.add(t_month);frame.add(t_day); frame.add(t_thisWeek);frame.add(t_nextDay);frame.add(t_prevDay); frame.add(submit);frame.add(cancel); /*设置显示画布大小及显示的位置*/ frame.setSize(600, 490); frame.setLocation(300,300); frame.setVisible(true); } }
三、结果
时间: 2024-10-18 07:29:44