Java实现的万年历

时间:2022-05-30 11:08:08

其实,万年历的实现并不难,只需要计算从1900年至所查询的那个月总共经过了多少,年,月,然后将本月的日子以日历的形式打印出来即可,先看一张效果图Java实现的万年历

从该图上可以看出来即从1900/1/1——2017/8总共经历了多少天,求出总天数然后:总天数%7+1 即为当前月的第一天是星期几

分析的差不多了,大家来看下代码:

main方法中只需要一个功能选择的代码就行了,然后不同的功能号码调用不同的方法,

class RiLi 
{
	static Scanner sc = new Scanner(System.in);
	//m:月数,y:年数,allDays:总天数,days:每月的天数
	static int m,y,allDays,days;
	public static void main(String[] args) 
	{
		System.out.print("请输入你要使用的模式***日历***\t***查询***\n");
		int ms = sc.nextInt();
		switch (ms)
		{
		case 1:shuRu();break;
		case 2:chaXun();break;
		default:System.out.print("输入有错");
		}
	}
下边我们看看所封装的四个方法:

1、shuChu( ):为了方便,我将键盘输入也封装成了一个方法,这样当年份或月份输入有误的时候,只需要再次调用方法就行了

public static void shuRu(){
		System.out.print("请输入年份:");
		y = sc.nextInt();
		System.out.print("请输入月份:");
		m = sc.nextInt();
		if(y<1900||m>12){
			System.out.println("输入有误,请输入正确的年份和月份:");
			shuRu();
		}
		else{
			mycalendar();
			shuChu();
		}
	}
2、实现万年历的主要方法mycalender( );

计算年份是不是闰年,闰年加上366,否则加上365,该月份属于该年的第几月,计算月份天数,用switch语句,加上该年每个月的天数,最后计算出allDays的总天数

public static void mycalendar(){
		boolean r = false;
		if((y%4==0&&y%100!=0)||(y%400==0)){
			r = true;
		}
		if(y>=1900&&m<=12){
		for (int a = 1900;a<y ;a++){
			if((a%4==0&&a%100!=0)||(a%400==0))
			{
				allDays +=366;
			}
			else{
				allDays +=365;
			}
		}}
		int mDays = 0;//到当前月天数
		if(y>=1900&&m<=12){
		for(int j =1;j<=m;j++){
			switch (j)
			{
			case 1:
			case 3:
			case 5:
			case 7:
			case 8:
			case 10:
			case 12:
				days = 31;break;
			case 4:
			case 6:
			case 9:
			case 11:
				days = 30;break;
			case 2:
				if(r == true){
					days = 29;
				}
				else{
				days = 28;
				}
				break;
			default:days = 0;
			}
			if(j<m){
				mDays  += days;
			}
		}}
		allDays += mDays;
	}
3、打印方法

shuChu( ):即打印万年历的方法

weekday求出来的是每次打印第一天的是星期几,前边需要打印几个空格

public static void shuChu(){
		int fristDay = 0;
		int weekday =1+ allDays%7;
		if(weekday == 7){
			fristDay = 0;//周日
		}
		else{
			fristDay = weekday;//周一到周六
		}
			System.out.println("日"+"\t"+"一"+"\t"+"二"+"\t"+"三"+"\t"+"四"+"\t"+"五"+"\t"+"六");
			for (int k = 0;k<fristDay ; k++){
				System.out.print("\t");
			}
			for (int f = 1;f<=days ; f++){
				System.out.print(f+"\t");
				if((allDays+f)%7==6){
					System.out.print("\n");
				}
			}	
	}

4、查询该天是星期几的方法

这样就体现出来封装的好处了,计算天数,只需要调用myclaendar( )方法既可,然后(总天数+今天是第几天)%7即为今天是星期几

public static void chaXun(){
		System.out.print("请输入年份:");
		y = sc.nextInt();
		System.out.print("请输入月份:");
		m = sc.nextInt();
		System.out.print("请输入号数:");
		int h = sc.nextInt();
		mycalendar();
		int fristDay = 0;
		int weekday =(allDays+h)%7;
		if (y<1900||m>12||h>31){
		System.out.print("输入有误");}
		else {
			switch (weekday)
			{
			case 1:System.out.println("星期一");break;
			case 2:System.out.println("星期二");break;
			case 3:System.out.println("星期三");break;
			case 4:System.out.println("星期四");break;
			case 5:System.out.println("星期五");break;
			case 6:System.out.println("星期六");break;
			case 0:System.out.println("星期日");break;
			default:System.out.println("***输入有误***");}
		}
	}

上边就是万年历的实现方法,其实不难,但是要掌握万年历的基本思想,快去试一试吧