制作日历-Java

日历的制作

这是记录我的上机作业的贴,要求如下:

1.编写一个程序,程序提供两种功能:

  1. 根据用户输入的年份输出该年日历。
    
  2. 根据用户输入的日期,输出该天星期。
    

程序应具有良好的人机交互性能,即:程序应向用户提示功能说明,并可根据用户的功能选择,执行对应的功能,并给出带详细描述信息的最终执行结果。

//A HarryChen Code!
//V1.0.2
import java.util.Scanner;

public class Mycalendar {
	public static void main(String[] args){
	class Date
	{
         int day = 1, month = 1, year , mdays;
         boolean leap = true;
         public boolean isLeap()
         {
             if(year%4==0&&year%100!=0||year%400==0) leap = true;
             else leap = false;
             return leap;
         }
         public int ToNewYear()
         {
         	switch (month){
         	case 1: mdays = day;break;
         	case 2: mdays = 31+day;break;
         	case 3: mdays = 31+28+day;break;
         	case 4: mdays = 90+day;break;
         	case 5: mdays = 120+day;break;
         	case 6: mdays = 151+day;break;
         	case 7: mdays = 181+day;break;
         	case 8: mdays = 212+day;break;
         	case 9: mdays = 243+day;break;
         	case 10: mdays = 273+day;break;
         	case 11: mdays = 304+day;break;
         	case 12: mdays = 334+day;break;
         	}
         	mdays--;
         	return mdays;
         }
         public int counts(Date standard)
         {
     		int days=0;
     		Date i=new Date();
     		for(i.year = standard.year;i.year<this.year;i.year++)
     		{
     			if(i.isLeap()) days += 366;
     			else days += 365;
     		}
     		if(this.isLeap()&&this.month>2) days++;
     		return days+this.ToNewYear();
         }
     	 public int goweek(Date standard)
     	 {
     	 	 return this.counts(standard)%7+1; 
     	 }
     }
	Scanner in = new Scanner(System.in);
	Date theday = new Date();
	Date standard = new Date();
	standard.year = 2001;
	standard.month = 1;
	standard.day = 1;
	System.out.println("请选择功能:1:打印日历2:日期计算器");
	int mode = in.nextInt();
	if(mode==2) 
	{
		System.out.print("请依次输入年 月 日!");
		theday.year = in.nextInt();
		theday.month = in.nextInt();
		theday.day = in.nextInt();
		while(theday.year<standard.year) standard.year -= 28; 
		while(theday.year-standard.year>29) standard.year += 28;
		System.out.println
		(theday.year+"年"+theday.month+"月"+theday.day+"日 星期" +theday.goweek(standard));
	}
	if(mode==1)
	{
		System.out.println("请输入年份");
		theday.year = in.nextInt();
		theday.month = theday.day=1;
		int weekday_of_NY = theday.goweek(standard);
		System.out.println(weekday_of_NY);
		System.out.println("  1  2  3  4  5  6  7");
		int sit = 1;
		for(int imonth = 1;imonth <= 12;imonth++)
		{
			System.out.printf("%d月\n",imonth);
			for(int i = 0;i < weekday_of_NY-1;i++,sit++)
				System.out.print("   ");
			for(int iday = 1;iday <= 31;iday++,sit++)
			{
				if(imonth==2&&theday.isLeap()&&iday==30) break;
				if(imonth==2&&!theday.isLeap()&&iday==29) break;
				if((imonth==4||imonth==6||imonth==9||imonth==11)&&iday==31) break;
				System.out.printf("%3d",iday);
				if((iday+weekday_of_NY-1)%7==0)
				{
					System.out.printf("\n");
					sit = 0;
				}
			}
			weekday_of_NY = sit;
			System.out.printf("\n");
		}
	}
	in.close();
	}
}

然后我又上了一节课,对代码进行了小改动。(还是感觉好粗糙的~~~以后再改)

package dateclass;
//A HarryChen Code!
//V1.0.3
import java.util.Scanner;

public class Mycalendar {
	public static void main(String[] args){
	class Date
	{
		 Date(int a, int b,int c){
			 year = a;
			 month = b;
			 day = c;
		 }
         int day, month, year, mdays;
         boolean leap = true;
         public boolean isLeap()
         {
             //此部分未做改动,故省略。
         }
         public int ToNewYear()
         {
			 //此部分未做改动,故省略。
         }
         public int counts(Date standard)
         {
     		int days=0;
     		Date i=new Date(0, 0, 0);
     		for(i.year = standard.year;i.year<this.year;i.year++)
     		{
     			if(i.isLeap()) days += 366;
     			else days += 365;
     		}
     		if(this.isLeap()&&this.month>2) days++;
     		return days+this.ToNewYear();
         }
     	 public int goweek(Date standard)
     	 {
     	 	 //此部分未做改动,故省略。
     	 }
     }
	Scanner in = new Scanner(System.in);
	Date standard = new Date(2001, 1, 1);
	System.out.println("请选择功能:1:打印日历2:日期计算器");
	int mode = in.nextInt();
	if(mode==2) 
	{
		System.out.print("请依次输入年 月 日!");
		int a = in.nextInt();
		int b = in.nextInt();
		int c = in.nextInt();
		Date theday = new Date(a, b, c);
		while(theday.year<standard.year) standard.year -= 28; 
		while(theday.year-standard.year>29) standard.year += 28;
		System.out.println
		(theday.year+"年"+theday.month+"月"+theday.day+"日 星期" +theday.goweek(standard));
	}
	if(mode==1)
	{
		System.out.println("请输入年份");
		int a = in.nextInt();
		Date theday = new Date(a,1,1);
		int weekday_of_NY = theday.goweek(standard);
		System.out.println("  1  2  3  4  5  6  7");
		int sit = 1;
		for(int imonth = 1;imonth <= 12;imonth++)
		{
			//此部分未做改动,故省略。
		}
	}
	in.close();
	}
}
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值