问题:从2010年1月1日起,渔夫开始三天打鱼,两天晒网工作,求实现每日工作查询
JAVA代码:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.*;
public class work extends JFrame implements ActionListener{
JLabel jl1=new JLabel("输入日期:"); //使用文本创建一个标签对象
JTextField jtf1=new JTextField(); //创建文本框对象
JLabel jl2=new JLabel("年"); //使用文本创建一个标签对象
JTextField jtf2=new JTextField();
JLabel jl3=new JLabel("月"); //使用文本创建一个标签对象
JTextField jtf3=new JTextField();
JLabel jl4=new JLabel("日"); //使用文本创建一个标签对象
JButton jb=new JButton("查询"); //创建按钮对象
JButton jb2=new JButton("重置"); //创建按钮对象
JLabel jl5=new JLabel("查询结果为:"); //使用文本创建一个标签对象
JTextField jtf4=new JTextField(); //创建文本框对象
public work(){
this.setTitle("打渔人工作查询"); //文本标题
this.setLayout(null);//界面布局为空
jl1.setBounds(100, 40, 100, 20);//标签1位置大小
jl2.setBounds(280, 40, 20, 20);//标签2位置大小
jl3.setBounds(330, 40, 20, 20);//标签3位置大小
jl4.setBounds(380, 40, 20, 20);//标签4位置大小
jl5.setBounds(100, 240, 100, 20);//标签5位置大小
jb.setBounds(150, 140, 80, 40);//按钮1位置大小
jb2.setBounds(240, 140, 80, 40);//按钮2位置大小
jtf1.setBounds(250, 40, 30, 30);//文本框1位置大小
jtf2.setBounds(300, 40, 30, 30);//文本框2位置大小
jtf3.setBounds(350, 40, 30, 30);//文本框3位置大小
jtf4.setBounds(250, 240, 100, 30);//文本框4位置大小
this.add(jl1);//将标签1添加入容器
this.add(jl2);//将标签2添加入容器
this.add(jl3);//将标签3添加入容器
this.add(jl4);//将标签4添加入容器
this.add(jl5);//将标签5添加入容器
this.add(jb); //将按钮1添加入容器
this.add(jb2);//将按钮2添加入容器
this.add(jtf1);//将文本框1添加入容器
this.add(jtf2);//将文本框2添加入容器
this.add(jtf3);//将文本框3添加入容器
this.add(jtf4);//将文本框4添加入容器
this.setBounds(0, 0,500, 400);//容器大小位置
jb.addActionListener(this);//按钮1添加事件监听器
jb2.addActionListener(this);//按钮2添加事件监听器
this.setVisible(true);//该容器可见
addWindowListener(new WindowAdapter()//添加窗口监听器
{
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
new work();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
String i=jtf1.getText();//将文本框内输入内容给i
int year=Integer.parseInt(i);//将i转化为int类型
String p=jtf2.getText();//将文本框内输入内容给p
int month=Integer.parseInt(p);//将p转化为int类型
String q=jtf3.getText();//将文本框内输入内容给q
int day=Integer.parseInt(q);//将q转化为int类型
if(e.getSource()==jb){//点击事件
int m,n=0,Jan=31,Feb,Mat=31,Apr=30,May=31,Jun=30,//每月的天数
July=31,Aug=31,Sept=30,Oct=31,Nov=30;
if((year%4==0&&year%100!=0)||year%400==0) Feb=29;//Fed的天数判断
else Feb=28;
if(year<2010||month>12){//对工作日期范围的判断
JOptionPane.showMessageDialog(this, "工作是从2010年1月1日开始,输入错误,请重试!",
"错误",JOptionPane.ERROR_MESSAGE);
return;
}
if(month==1&&day>31){//对1月天数的判断
JOptionPane.showMessageDialog(this, "1月只有31天,输入错误,请重试!",
"错误",JOptionPane.ERROR_MESSAGE);
return;
}else if(month==2&&day>29){//对2月天数的判断
JOptionPane.showMessageDialog(this, "2月只有28或29天,输入错误,请重试!",
"错误",JOptionPane.ERROR_MESSAGE);
return;
}else if(month==3&&day>31){//对3月天数的判断
JOptionPane.showMessageDialog(this, "3月只有31天,输入错误,请重试!",
"错误",JOptionPane.ERROR_MESSAGE);
return;
}else if(month==4&&day>30){//对4月天数的判断
JOptionPane.showMessageDialog(this, "4月只有30天,输入错误,请重试!",
"错误",JOptionPane.ERROR_MESSAGE);
return;
}else if(month==5&&day>31){//对5月天数的判断
JOptionPane.showMessageDialog(this, "5月只有31天,输入错误,请重试!",
"错误",JOptionPane.ERROR_MESSAGE);
return;
}else if(month==6&&day>30){//对6月天数的判断
JOptionPane.showMessageDialog(this, "6月只有30天,输入错误,请重试!",
"错误",JOptionPane.ERROR_MESSAGE);
return;
}else if(month==7&&day>31){//对7月天数的判断
JOptionPane.showMessageDialog(this, "7月只有31天,输入错误,请重试!",
"错误",JOptionPane.ERROR_MESSAGE);
return;
}else if(month==8&&day>31){//对8月天数的判断
JOptionPane.showMessageDialog(this, "8月只有31天,输入错误,请重试!",
"错误",JOptionPane.ERROR_MESSAGE);
return;
}else if(month==9&&day>30){//对9月天数的判断
JOptionPane.showMessageDialog(this, "9月只有30天,输入错误,请重试!",
"错误",JOptionPane.ERROR_MESSAGE);
return;
}else if(month==10&&day>31){//对10月天数的判断
JOptionPane.showMessageDialog(this, "10月只有31天,输入错误,请重试!",
"错误",JOptionPane.ERROR_MESSAGE);
return;
}else if(month==11&&day>30){//对11月天数的判断
JOptionPane.showMessageDialog(this, "11月只有30天,输入错误,请重试!",
"错误",JOptionPane.ERROR_MESSAGE);
return;
}else if(month==12&&day>31){//对12月天数的判断
JOptionPane.showMessageDialog(this, "12月只有31天,输入错误,请重试!",
"错误",JOptionPane.ERROR_MESSAGE);
return;
}
if(month==2&&day==29){//对闰年与非闰年2月天数的判断
if(!((year%4==0&&year%100!=0)||year%400==0))
JOptionPane.showMessageDialog(this, "非闰年无2月29日,输入错误,请重试!",
"错误",JOptionPane.ERROR_MESSAGE);
return;
}
int i1=0;
while(((year-1)%4==0&&(year-1)%100!=0)||(year-1)%400==0) {i1++;year--;}//设置计数器i来计算闰年的个数
n=i1*366+(year-1-2010-i1)*365;//计算年份的天数
switch(month){//对mouth的取值天数计算
case 1: n+=day;break;
case 2: n+=Jan+day;break;
case 3: n+=Jan+Feb+day;break;
case 4: n+=Jan+Feb+Mat+day;break;
case 5: n+=Jan+Feb+Mat+Apr+day;break;
case 6: n+=Jan+Feb+Mat+Apr+May+day;break;
case 7: n+=Jan+Feb+Mat+Apr+May+Jun+day;break;
case 8: n+=Jan+Feb+Mat+Apr+May+Jun+July+day;break;
case 9: n+=Jan+Feb+Mat+Apr+May+Jun+July+Aug+day;break;
case 10: n+=Jan+Feb+Mat+Apr+May+Jun+July+Aug+Sept+day;break;
case 11: n+=Jan+Feb+Mat+Apr+May+Jun+July+Aug+Sept+Oct+day;break;
case 12: n+=Jan+Feb+Mat+Apr+May+Jun+July+Aug+Sept+Oct+Nov+day;break;
}
m=n%5;
if(m==1||m==2||m==3) jtf4.setText("渔夫在打鱼!");//判断工作
else if(m==0||m==4) jtf4.setText("渔夫在晒网!");
}
if(e.getSource()==jb2){//重置按钮的功能
jtf1.setText(null);
jtf2.setText(null);
jtf3.setText(null);
jtf4.setText(null);
}
}
}
总结:未实现文件读取来查询,并且代码算法过于繁琐,但很适合新手设计算法,一看就懂,没有什么难点,日后应当改进