简单日历打印

简单日历

分析:

    a:先输出提示语句,并接受用户输入的年、月。
    b:根据用户输入的年,先判断是否是闰年。(闰年2月有29天,平年2月有28天);
    C:根据用户输入的月来判断月的天数。
    D:用循环计算用户输入的年份距1900年1月1日(星期一)的总天数。*
    E:用循环计算用户输入的月份距输入的年份的1月1日共有多少天。*
    F:相加D与E的天数,得到总天数。
    G:用总天数来计算输入月的第一天的星期数。
    H:根据G的值,格式化输出这个月的日历!*
  H提示:
     1.如果当月1日如果不是周日先打印第一行,再打印后面的
       (1)startDay=0~5,先打印若干个空格,startDay==0时,是星期一,应该在星期日处打印一个空格,以此类推[0~startDay+1)
       (2)再打印第一行的日期[1,7-startDay)
       (3)打印换行
       (4)第一行打印的天数为:1~(6-startDay),所以第二行从7-startDay开始打印,打印到当月总天数为止,每7个换行
    2.如果startDay是6(周日),直接从1日开始打印到最后一天,每7个换行

代码示例:


1.主函数

        public static void main(String[] args) 
	{
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入年月");
		int year = sc.nextInt();
		int month = sc.nextInt();
		if(isCheck(year,month))
		{
			int sumDays = sumDays(year,month);
			int lenDay = monthDays(month,year);
			int head = (sumDays+1)%7;//获取当前月初始的星期数
			System.out.println("本月有"+ lenDay+"天");
			System.out.println("本月第一天为星期"+ head);
			System.out.println();
			System.out.print("一"+"\t"+"二"+"\t"+"三"+"\t"+"四"+"\t"+"五"+"\t"+"六"+"\t"+"日");
			System.out.println();
			printCal(head,lenDay);	
		}else{
			System.out.println("输入错误");
		}
	}

2. 判断年月是否在范围内

	//判断输入正误
	public static boolean isCheck(int year,int month)
	{
		if(year<1900||month>12||month<1)
			return false;
		return true;
	}


3. 判断年份

	//判断是否为闰年
	public static boolean isLeapYear(int year)
	{
		if((year%4==0 && year%100!=0)||(year%400==0))
		{
			return true;//为闰年
		}
		return false;//为平年
	}		


4. 求取基本天数 (从1900年到输入年份的天数)

	//求取基本天数
    public static int basicDays(int year,int month)
	{
		int basicDay = 0;
		for(int i = 1900;i<year;i++)
		{
			//判断从1900到输入年份中间的年份是否为闰年
		    boolean isLeap = isLeapYear(i);
			if(isLeap)
			{
				basicDay+=366;//闰年月份为366天
			}else{
				basicDay+=365;//平年月份为365天
			}
		}
		return basicDay;
	}


5. 求取每月天数

	//获取当前月天数
	public static int monthDays(int month,int year)
	{
		//判断是否为闰年
		boolean isLeap = isLeapYear(year);
		//如果是大月份就返回31天
		if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
		{
			return 31;
		}else if(month==2)//分平年还是闰年返回2月的天数
		{
			if(isLeap)
			{
				return 29;
			}else{
				return 28;
			}
		}else{
			return 30;//其余输入月份为小月份
		}
	}

6. 求取总的天数(从输入年份到输入月份,在本年的输入月份之前的天数求和)

//求取当前年到当前月之前的总天数
	public static int sumDays(int year,int month)
	{
		//获取从1900年到当前年的天数  作为起始天数值
		int basicDay = basicDays(year,month);
		for(int j = 1;j<month;j++)
		{
			//调用获取每月天数函数,对返回值相加
			basicDay+=monthDays(j,year);
		}
		return basicDay;
	}

7. 按规则打印日历

//打印当前月
	public static void printCal(int head,int lenDay)
	{
		int count = 0;//声明一个计数值
		for(int j = 0;j<7;j++)
		{
			if(head==(j+1))
			{
				for(int k = 1;k<=lenDay;k++)
				{
					System.out.print(k+"\t");
					count++;
					if(count%7==0)//当计数到7换行
					{
						System.out.println();
						count = 0;//计数值重置
					}
				}
			    break;
			}else{
				System.out.print(" "+"\t");
				count++;
			}
		}
	}



  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值