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!
  • 相关阅读:
    记第一场省选
    POJ 2083 Fractal 分形
    CodeForces 605A Sorting Railway Cars 思维
    FZU 1896 神奇的魔法数 dp
    FZU 1893 内存管理 模拟
    FZU 1894 志愿者选拔 单调队列
    FZU 1920 Left Mouse Button 简单搜索
    FZU 2086 餐厅点餐
    poj 2299 Ultra-QuickSort 逆序对模版题
    COMP9313 week4a MapReduce
  • 原文地址:https://www.cnblogs.com/CoffeeMX/p/2610542.html
Copyright © 2011-2022 走看看