万年历---java版

  程序难点 :

    1. 每年每个月有多少天?

    2. 每个月的1号是星期几?

    3. 每年的2月份是多少天?

 

  难点解析 :

    1. 每年每个月除去1 3 5 7 8 10 12是31天以外, 其他月份(除去2月)都是30天.

    2. 根据java提供的Calendar的DAY_OF_WEEK来获取. c.get(Calendar.DAY_OF_WEEK);

      注意, 在国外每周的第一天是周日,所以它的对应关系为

      1  2  3  4  5  6  7  

      日 一 二 三 四 五 六

    3. 平年28天, 闰年29天.

      注意 : 闰年是可以被4整除或者能被100整除也可被400整除, 平年是能被100整除而不能被400整除.

JAVA 代码 : 

 

  1 /**
  2      * 31天的月份 
  3      */
  4     private static final List<Integer> singleMonList = new ArrayList<Integer>();
  5     
  6     static{
  7         singleMonList.add(0);
  8         singleMonList.add(2);
  9         singleMonList.add(4);
 10         singleMonList.add(6);
 11         singleMonList.add(7);
 12         singleMonList.add(9);
 13         singleMonList.add(11);
 14     }
 15     
 16     public static void calendarYear(int year){
 17             Calendar c = Calendar.getInstance();
 18             c.set(Calendar.YEAR, year);
 19             System.out.println("-----------------------------"+year+"年start------------------------------");
 20             for (int i = 0; i < 12; i++) {
 21                 System.out.println();
 22                 System.out.println(year + "年" + (i + 1) + "月");
 23                 System.out.println();
 24                 System.out.println("日\t" + "一\t" + "二\t" + "三\t" + "四\t"+ "五\t" + "六");
 25                 c.set(Calendar.MONTH, i);
 26                 c.set(Calendar.DATE, 1);
 27                 int week = c.get(Calendar.DAY_OF_WEEK);
 28                 int weekTemp = week - 1;
 29                 int days = getMonthOfDays(year, i); // 获取天数
 30                 // 天数打印
 31                 for (int j = 1; j <= days; j++) {
 32                     if (j == 1){
 33                         getBlank(weekTemp); // 打印空格
 34                     }
 35                     if (weekTemp == 7) {    //换行
 36                         System.out.println();
 37                         if (j < 10) {
 38                             System.out.print(" " + j + "\t");
 39                         } else {
 40                             System.out.print(j + "\t");
 41                         }
 42                         weekTemp = 1;
 43                     } else {
 44                         if (j < 10) {
 45                             System.out.print(" " + j + "\t");
 46                         } else {
 47                             System.out.print(j + "\t");
 48                         }
 49                         weekTemp++;
 50                     }
 51                 }
 52                 System.out.println();
 53                 System.out.println();
 54                 System.out.println();
 55             }
 56             System.out.println("-----------------------------"+year+"年end------------------------------");
 57     }
 58 
 59     private static void getBlank(int blankNum) {
 60         for (int i = 0; i < blankNum; i++) {
 61             System.out.print(" \t");
 62         }
 63     }
 64 
 65     private static int getMonthOfDays(int year, int month) {
 66         int days = 0;
 67         if (singleMonList.contains(month)) {
 68             days = 31;
 69         } else {
 70             if (month == 1) {
 71                 if (((year % 100 != 0) && (year % 4 == 0))
 72                         || ((year % 100 == 0) && (year % 400 == 0))) {
 73                     days = 29;
 74                 } else {
 75                     days = 28;
 76                 }
 77             } else {
 78                 days = 30;
 79             }
 80         }
 81         return days;
 82     }
 83     
 84     private static boolean checkYear(int year){
 85         if(year>Long.MAX_VALUE){
 86             return false;
 87         }
 88         if(year < Long.MIN_VALUE){
 89             return false;
 90         }
 91         return true;
 92     }
 93     
 94     @SuppressWarnings("resource")
 95     public static void main(String[] args) throws Exception {
 96         
 97         while(true){
 98             System.out.print("请输入年份 (1: 退出程序): ");
 99             Scanner sc = new Scanner(System.in);
100             Integer year = sc.nextInt();
101             if(!checkYear(year)) {
102                 continue;
103             }
104             if(year==1) System.exit(0);
105             calendarYear(year);
106         }
107     }

 

  注 : 基本上解决了上述三个难点, 这个程序就可以迎刃而解. 其他的就是一些显示上的排版.   

 

posted @ 2015-12-16 09:59  哎呦喂,我的小祖宗╰つ  阅读(219)  评论(0编辑  收藏  举报