简单日历
分析:
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;
}
//判断是否为闰年
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++;
}
}
}