~这些年,我们一起学过的java~11~小学期程序设计之日历问题

      刚刚将C语言版本的日历问题改成了java版,加了GUI界面,赶脚特别开森,希望明天可以再接再厉,艳歌儿加油哟~~~虽然最近身体不太舒服,但是,人还挺有斗志的……真心希望身体能尽快有所好转,先把那道题目贴上来:

 

问题描述

在我们现在使用的日历中, 闰年被定义为能被4整除的年份,但是能被100整除而不能被400整除的年是例外,它们不是闰年。例如:1700, 1800, 1900 和 2100 不是闰年,而 1600, 2000 和 2400是闰年。 给定从公元2000年1月1日开始逝去的天数,你的任务是给出这一天是哪年哪月哪日星期几。

输入数据

输入包含若干行,每行包含一个正整数,表示从2000年1月1日开始逝去的天数。输入最后一行是−1, 不必处理。可以假设结果的年份不会超过9999。

输出要求

对每个测试样例,输出一行,该行包含对应的日期和星期几。格式为“YYYY-MM-DD DayOfWeek”, 其中 “DayOfWeek” 必须是下面中的一个: "Sunday", "Monday","Tuesday", "Wednesday", "Thursday","Friday" and "Saturday“。

输入样例

1730

1740

1750

1751

-1

输出样例

2004-09-26 Sunday

2004-10-06 Wednesday

2004-10-16 Saturday

2004-10-17 Sunday

 

接下来是我的代码运行结果:

下面附上我的代码:

public class Calendar extends JFrame {
	MyListener l;
	public static void main(String[] args) {
		Calendar c=new Calendar();
		c.GUI();
	}
	public void GUI(){
		this.setTitle("日   历   问   题");
		this.setSize(650, 600);
		this.setLocation(300, 20);
		this.setLayout(new BorderLayout());
		
		ImageIcon im=new ImageIcon(this.getClass().getResource("1.jpg"));
		this.setIconImage(im.getImage());
		
		//创建北边区域
		JLabel jln=new JLabel("日     历     问     题",JLabel.CENTER);
		jln.setFont(new Font("楷体", 1, 35));
		jln.setOpaque(true);
		jln.setPreferredSize(new Dimension(650,100));
		jln.setBackground(Color.white);
		this.add(jln,BorderLayout.NORTH);
		
		//创建西边区域

		JPanel jpw=new JPanel();
		jpw.setLayout(null);
		jpw.setPreferredSize(new Dimension(350,300));
		JLabel jlw=new JLabel("请输入自2000年01月01日逝去的天数:",JLabel.CENTER);
		jlw.setBounds(10, 15,340, 40);
		jlw.setFont(new Font("楷体", 2, 18));
		jpw.add(jlw);
		
		JTextField jt1=new JTextField();
		jt1.setPreferredSize(new Dimension(200,20));
		jt1.setBounds(42, 70,250,35);
		
		JTextField jt2=new JTextField();
		jt2.setPreferredSize(new Dimension(200,20));
		jt2.setBounds(42, 125,250,35);
		
		
		JTextField jt3=new JTextField();
		jt3.setPreferredSize(new Dimension(200,20));
		jt3.setBounds(42, 180,250,35);
		
		JTextField jt4=new JTextField();
		jt4.setPreferredSize(new Dimension(200,20));
		jt4.setBounds(42, 235,250,35);

		JTextField jt5=new JTextField();
		jt5.setPreferredSize(new Dimension(200,20));
		jt5.setBounds(42, 290,250,35);
		
		jpw.add(jt1);
		jpw.add(jt2);
		jpw.add(jt3);
		jpw.add(jt4);
		jpw.add(jt5);
		
		
		JButton jbw=new JButton("点击查询");
		jbw.setFont(new Font("楷体", 1, 20));
		jbw.setPreferredSize(new Dimension(130,40));
		jbw.setBounds(140, 360, 130, 40); 
		
		
		jpw.add(jbw);
		this.add(jpw,BorderLayout.WEST);
		//创建东边区域
		JPanel jpe=new JPanel();
		jpe.setLayout(null);
		jpe.setPreferredSize(new Dimension(350,300));
		
		JLabel jle=new JLabel("该天数所对应的日期为:",JLabel.CENTER);
		jle.setBounds(10, 15,340, 40);
		jle.setFont(new Font("楷体", 2, 18));
		jpe.add(jle);
		
		JLabel jb1=new JLabel("");
		jb1.setPreferredSize(new Dimension(200,20));
		jb1.setBounds(90, 70,250,35);
		jb1.setFont(new Font("楷体", 2, 20));
		
		JLabel jb2=new JLabel("");
		jb2.setPreferredSize(new Dimension(200,20));
		jb2.setBounds(90, 125,250,35);
		jb2.setFont(new Font("楷体", 2, 20));
		
		JLabel jb3=new JLabel("");
		jb3.setPreferredSize(new Dimension(200,20));
		jb3.setBounds(90, 180,250,35);
		jb3.setFont(new Font("楷体", 2, 20));
		
		JLabel jb4=new JLabel("");
		jb4.setPreferredSize(new Dimension(200,20));
		jb4.setBounds(90, 235,250,35);
		jb4.setFont(new Font("楷体", 2, 20));


		JLabel jb5=new JLabel("");
		jb5.setPreferredSize(new Dimension(200,20));
		jb5.setBounds(90, 290,250,35);
		jb5.setFont(new Font("楷体", 2, 20));
		
		jpe.add(jb1);
		jpe.add(jb2);
		jpe.add(jb3);
		jpe.add(jb4);
		jpe.add(jb5);
		
		JButton jbe=new JButton("再次输入");
		jbe.setFont(new Font("楷体", 1, 20));
		jbe.setPreferredSize(new Dimension(130,40));
		jbe.setBounds(80, 360, 130, 40); 
		jbe.addActionListener(l);
		jpe.add(jbe);

		this.add(jpe,BorderLayout.EAST);
		
		l=new MyListener(jt1,jt2,jt3,jt4,jt5,jb1,jb2,jb3,jb4,jb5);
		jbw.addActionListener(l);
		jbe.addActionListener(l);
	this.setVisible(true);
	}

}
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JLabel;
import javax.swing.JTextField;

public class MyListener implements ActionListener,KeyListener{
	int flag=0;
	JTextField jt1,jt2,jt3,jt4,jt5;
	JLabel[] jbArr;
	JTextField[] jtArr;
	public MyListener(JTextField jt1,JTextField jt2,JTextField jt3,JTextField jt4,JTextField jt5,JLabel jb1,JLabel jb2,JLabel jb3,JLabel jb4,JLabel jb5){
		
		jtArr = new JTextField[]{jt1,jt2,jt3,jt4,jt5};
		jbArr=new JLabel[]{jb1,jb2,jb3,jb4,jb5};
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		int k;
		if(e.getActionCommand().equals("点击查询")||flag==1){
			for(int i=0;i<5;i++){
				if(jtArr[i].getText()==""){
					jbArr[i].setText("");
				}
				if(jtArr[i].getText()!=""){
					k=Integer.parseInt(jtArr[i].getText());
					jbArr[i].setText(caculate(k));
				}
				
			}
		}
		if(e.getActionCommand().equals("再次输入")){
			for(int i=0;i<5;i++){
				jbArr[i].setText("");
				jtArr[i].setText("");
			}
		}
	}
	public String caculate(int days){
		 int year=2000,month=1,day=1,l=6;
	     String week[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
	     for(int i=1;i<=days;i++)
	     {
	          if((year%100!=0&&year%4==0)||year%400==0){//判断是否是闰年 
	               if(i%366==0){
	               year++;
	               month=1;
	               day=0;
	               i=i-366;
	               days=days-366;
	               }//若刚好是整整的那闰年,就扣366天 
	          }else if(i%365==0){
	                year++;
	                month=1;
	                day=1;
	                i=i-365;
	                days=days-365;
	                } //若是平年,就扣去365天 
	          if((year%100!=0&&year%4==0)||year%400==0){
	               if(i==31){
	                    month++;
	                    day=0;
	                    }
	               if(i==60){
					month++;
					day=0;
			    	}
			     	if(i==91){
					month++;
					day=0;
				    }
	    			if(i==121){
					month++;
					day=0;
	    			}
				  if(i==152){
			 		month++;
					day=0;
			    	}
				  if(i==182){
			 		month++;
					day=0;
			  	 }
				 if(i==213){
					month++;
					day=0;
				 }
				 if(i==244){
					month++;
					day=0;
				 }
				 if(i==274){
					month++;
					day=0;
				 }
				 if(i==305){
					month++;
					day=0;
				 }
				 if(i==335){
					month++;
					day=0;
				 }
	          }else{
	                if(i==31){
					month++;
					day=0;
				}
				if(i==59){
					month++;
					day=0;
				}
				if(i==90){
					month++;
					day=0;
				}
				if(i==120){
					month++;
					day=1;
				}
				if(i==151){
					month++;
					day=0;
				}
				if(i==181){
					month++;
					day=0;
				}
				if(i==212){
					month++;
					day=0;
				}
				if(i==243){
					month++;
					day=0;
				}
				if(i==273){
					month++;
					day=0;
				}
				if(i==304){
					month++;
			    	day=0;
				}
				if(i==334){
					month++;
					day=0;
				}
	         }
	         day++;
	         l++;
	         if(l==7){
	              l=0;
	              }
	     }
	     if(month<10&&day<10){
			System.out.println(year+"-0"+month+"-0"+day+" "+week[l]);
			return year+"-0"+month+"-0"+day+" "+week[l];
		}
		else if(month<10){
			System.out.println(year+"-0"+month+day+" "+week[l]);
			return year+"-0"+month+"-"+day+" "+week[l];
		}
		else if(day<10){
			System.out.println(year+month+"-0"+day+" "+week[l]);
			return year+"-"+month+"-0"+day+" "+week[l];
		}else{
			System.out.println(year+month+day+" "+week[l]);
			return year+"-"+month+"-"+day+" "+week[l];
		}
	}
}


      恩恩,因为本身没有什么太难的地方,就不做详细的解释说明啦……

      很晚啦,早点休息咯,明天加油哈……

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值