java 面向过程实现万年历

  1 public class Test {
  2 
  3     /**
  4      * @param args
  5      */
  6     public static void main(String[] args) {
  7         // TODO Auto-generated method stub
  8         // 定义变量
  9         int year, mouth;
 10         int day = 0;
 11         String cuowu;
 12         Scanner sc = new Scanner(System.in);
 13         int[] day1 = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
 14         int[] day2 = new int[] { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
 15         int week, dayNum = 0;
 16 
 17         // 输出
 18         System.out.println("*******************欢迎使用万年历****************
");
 19         System.out.print("请选择年份:");
 20         // 判断是否输入我们需要的数据
 21         while (true) {
 22             if (sc.hasNextInt()) {
 23                 year = sc.nextInt();
 24                 if (year >= 1900) {
 25                     break;
 26                 } else {
 27                     System.out.print("输入数据不对请重新输入(1900年以后的年份)");
 28                 }
 29             } else {
 30                 System.out.print("数据类型错误请重新输入");
 31                 cuowu = sc.next();
 32             }
 33         }
 34 
 35         System.out.println();
 36         System.out.print("请选择月份:");
 37         while (true) {
 38             if (sc.hasNextInt()) {
 39                 mouth = sc.nextInt();
 40                 if (mouth > 0 && mouth < 13) {
 41                     break;
 42                 } else {
 43                     System.out.print("输入数据不对请重新输入(1~12)");
 44                 }
 45             } else {
 46                 System.out.print("数据类型错误请重新输入");
 47                 cuowu = sc.next();
 48             }
 49         }
 50         System.out.println();
 51         // 计算该年距离1900年1月1日有几天
 52         for (int i = 1900; i < year; i++) {
 53             if ((i / 400 == 0) || (i / 4 == 0 && i / 100 != 0)) {
 54                 day += 366;
 55             } else {
 56                 day += 365;
 57             }
 58         }
 59         // System.out.println(day);
 60         // 计算选择月份1日距离1900年1月1日有几天
 61         for (int i = 1; i < mouth; i++) {
 62             if ((year % 400 == 0) || ((year % 100 != 0) && (year % 4 == 0))) {
 63                 day += day2[i - 1];
 64             } else {
 65                 day += day1[i - 1];
 66             }
 67         }
 68         // System.out.println(day);
 69         // 计算该月第一天是星期几由于1900年1月1日是星期一,而我们打印从星期天开始,所以day+1
 70         week = (day + 1) % 7;
 71         // System.out.println(week);
 72         // 赋值dayNum该月有几天
 73         switch (mouth) {
 74         case 1:
 75         case 3:
 76         case 5:
 77         case 7:
 78         case 8:
 79         case 10:
 80         case 12:
 81             dayNum = 31;
 82             break;
 83         case 4:
 84         case 6:
 85         case 9:
 86         case 11:
 87             dayNum = 30;
 88             break;
 89         case 2:
 90             if ((year % 400 == 0) || ((year % 100 != 0) && (year % 4 == 0))) {
 91                 dayNum = 29;
 92             } else {
 93                 dayNum = 28;
 94             }
 95             break;
 96         default:
 97             break;
 98         }
 99         // 输出
100         System.out.println("			" + year + "年" + mouth + "月");
101         System.out.println("星期日	星期一	星期二	星期三	星期四	星期五	星期六");
102         for (int i = 0; i < week; i++) {
103             System.out.print("" + "	");
104         }
105         for (int i = 1; i <= dayNum; i++) {
106             System.out.print(i + "	");
107             if ((week + i) % 7 == 0) {
108                 System.out.println();
109             }
110         }
111 
112     }
113 
114 }
原文地址:https://www.cnblogs.com/panxinqi/p/6187277.html