~這些年,我們一起學過的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];
		}
	}
}


      恩恩,因爲本身沒有什麼太難的地方,就不做詳細的解釋說明啦……

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章