java 万年历

来源:互联网 发布:重庆网络审批平台 编辑:程序博客网 时间:2024/05/21 05:23

需求分析

寻求:输入一个年份,再输入一个月份,把那个月的日历打印出来,(1900年1月1日是星期一)。“`

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

运算结果

这里写图片描述

代码

/*Calendar.java功能:输入一个年份,再输入一个月份,把那个月的日历打印出来,(1900年1月1日是星期一)。version   author   UpdateTime   Change point----------------------------------------v1.0      bobby    2017.11.17    初稿v1.1      bobby    2017.11.18    修改计算周末空格错误问题*/import java.util.Scanner;public class Calendar{    public static void main(String[] args){        Scanner sc = new Scanner(System.in);        int yearDay = 0;                int monDay = 0;         //到1月1 总天数        int monCurrentDay = 0; //月份天数        int allDay = 0;        int week = 0;        while(true){            System.out.println("请输入年份");            int year = sc.nextInt();            System.out.println("请输入月份");            int month = sc.nextInt();            if(year < 1900 && month < 1 && month >12){                System.out.println("输入错误");                continue;             }            Title(year,month);            yearDay = calculateYear(year);            monDay =  calculateMonth(year,month);            //System.out.println("年天数:"+yearDay+"月天年"+monDay);            allDay = yearDay + monDay;            week = calculateWeek(allDay);            monCurrentDay = calculateCurrentMonth(year,month);            calendarPrint(week,monCurrentDay);            break;        }    }    //打印日历的头部    public static void Title(int year,int mom){        System.out.println("             "+year+"年"+mom+"月");        System.out.println("----------------------------------------------------------");        System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");    }    //打印日历    public static void calendarPrint(int week,int monthday){        //打印前面空格         for(int i=0;i<week;i++){            System.out.print("   "+"\t");           }        //打印数字        for(int j=1;j<= monthday;j++){            System.out.print(" "+j+" "+"\t");            if((week+j)%7 == 0)                System.out.println();        }    }        //计算是否是闰年    public static boolean leapyear(int year){        if((year%4 == 0 && year%100 != 0) || year%400 == 0){          return true;                  }          return false;    }    //计算年的天数(距离1900年)    public static int calculateYear(int year){        int sumDays = 0;        for(int i=1900;i<year;i++){            //判断是否为闰年            if(leapyear(i)){                sumDays += 366;            }else{                sumDays += 365;             }        }           return sumDays;    }    //计算当前的月的天数    public static int calculateCurrentMonth(int year,int month){        int day = 0;        //判断是否为闰年        switch(month){                case 1:                case 3:                case 5:                case 7:                case 8:                case 10:                case 12:                        day = 31;                        break;                case 4:                case 6:                case 9:                case 11:                        day = 30;                        break;                case 2:                        if(leapyear(year)){                            day = 29;                        }else{                            day = 28;                        }                        break;        }        return day;    }    //计算这个月到1月1号多少天    public static int calculateMonth(int year,int month){        int day = 0;        for(int i=1;i<month;i++){            day += calculateCurrentMonth(year,i);        }        return day;    }    //判断是星期几    public static int calculateWeek(int days){        int day = 0;        day = (days+1)%7 ;         return day;     }   }
原创粉丝点击