zoukankan      html  css  js  c++  java
  • Java制作万年历

      1 import java.util.*;
      2 
      3  
      4 
      5 public class CalcDate {
      6      int year;
      7      int month;
      8      int day;
      9  
     10 public void Input(){//输入方法
     11 
     12     Scanner input = new Scanner(System.in);
     13     boolean flag = true;//控制检查日期格式输入是否正确的循环
     14     String date = "";//日期
     15 
     16     while(flag){
     17        System.out.print("请输入年,月,日(yyyy-mm-dd):");
     18        date = input.next();
     19        if(date.indexOf('-') != 4 && date.lastIndexOf('-') != 7){//判断日期格式
     20         System.out.println("日期格式输入错误!");
     21        }else{
     22         flag = false;
     23        }
     24     }
     25       String[] dateArr = date.split("-");//将日期字符串分割成年月日
     26       year = Integer.parseInt(dateArr[0]);
     27       month = Integer.parseInt(dateArr[1]);
     28       day = Integer.parseInt(dateArr[2]);
     29       
     30       int result = Calc(year,month,day);//计算
     31       switch(result){
     32       case 0:
     33        System.out.println("此日期是星期日");
     34        break;
     35       case 1:
     36        System.out.println("此日期是星期一");
     37            break;
     38       case 2:
     39        System.out.println("此日期是星期二");
     40        break;
     41       case 3:
     42        System.out.println("此日期是星期三");
     43        break;
     44       case 4:
     45        System.out.println("此日期是星期四");
     46        break;
     47       case 5:
     48        System.out.println("此日期是星期五");
     49        break;
     50       case 6:
     51        System.out.println("此日期是星期六");
     52        break;
     53       default://异常
     54        System.out.println("未知错误,程序中断!");
     55        break;
     56       }
     57 
     58 }
     59  
     60  public void ShowCalendar(){
     61   int days = 30;
     62   switch(month){//本月天数
     63   case 1:
     64    days = 31;
     65    break;
     66   case 2:
     67    if(IsLeapYear(year)){//闰年
     68     days = 29;
     69    }else{
     70     days = 28;
     71    }
     72    break;
     73   case 3:
     74    days = 31;
     75    break;
     76   case 4:
     77    days = 30;
     78    break;
     79   case 5:
     80    days = 31;
     81    break;
     82   case 6:
     83    days = 30;
     84    break;
     85   case 7:
     86    days = 31;
     87    break;
     88   case 8:
     89    days = 31;
     90    break;
     91   case 9:
     92    days = 30;
     93    break;
     94   case 10:
     95    days = 31;
     96    break;
     97   case 11:
     98    days = 30;
     99    break;
    100   case 12:
    101    days = 31;
    102    break;
    103   default://异常
    104    System.out.println("未知错误");
    105    break;
    106   }
    107   System.out.println("本月日历为\n日\t一\t二\t三\t四\t五\t六");//显示日历
    108   int first = Calc(year,month,1);//获取本月一号是星期几
    109   for(int i = 0;i < first;i++){//控制本月一号之前的空格数
    110    System.out.print("  \t");
    111   }
    112   int j = 1;//本月一号
    113   for(j = 1;j <= 7-first;j++){//第一行
    114    System.out.print(j+"\t");
    115   }
    116   System.out.println();
    117   while(j<days){//余下几行
    118    int times = j+7;
    119    for(;j<times;j++){
    120     if(j>days){
    121      break;
    122     }
    123     System.out.print(j+"\t");
    124    }
    125    System.out.println();
    126   }
    127  }
    128  
    129  public int Calc(int y,int m,int d){//计算方法
    130   if(m == 1 || m == 2){//如果月份为一月或2月,则看成上一年的十三月和十四月
    131    m += 12;
    132    y--;
    133   }
    134   return (int)((d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)+1)%7;//代入基尔拉姆森公式
    135  }
    136  
    137  public boolean IsLeapYear(int y){//判断是否为闰年
    138   if((y % 400 == 0) ||(y % 100 != 0)&&(y % 4 ==0)){
    139    return true;
    140   }else{
    141    return false;
    142   }
    143  }
    144  
    145  public static void main(String[] args) {
    146   CalcDate t = newCalcDate();
    147   Scanner input = new Scanner(System.in);
    148   String con = "";
    149   while(true){
    150    t.Input();
    151    t.ShowCalendar();
    152    System.out.print("继续吗?(Y/N)");
    153    con = input.next();
    154    if(con.equalsIgnoreCase("Y")){
    155     continue;
    156    }
    157    break;
    158   }
    159   System.out.println("程序结束,谢谢使用!");
    160  }
    161 }

     //欢迎转载,请注明原创,感谢

    Never give up!
  • 相关阅读:
    vue 跳转路由传参数用法
    百度地图放大之后,多边形,矩形覆盖物消失
    百度地图画多边形,画圆, 监听事件不触发原因
    兄弟组件之间如何通信
    vue如何触发某个元素的单击事件?
    input 清空值。(转载)
    inline-block元素水平居中问题
    android 浏览器对图片加载高度渲染问题
    IE下png图片黑边问题
    IE css hack整理
  • 原文地址:https://www.cnblogs.com/CoffeeMX/p/2610542.html
Copyright © 2011-2022 走看看