java万年历

import java.util.Date;
import java.util.Scanner;

public class calend{
 //初始化一个年份
 private static int Year;
 //初始化一个月份
 private static int Month;
 //初始化一个天数
 private static int Day;
 //初始化一个标识符
 private static boolean flage = true;
 public static void main(String[] args) {
  System.out.println("**********欢迎使用简易日历*********");
  while(flage){
   //打印菜单
   printMenu();
   //正则验证输入的选项
   String cmd = getString();
   //调用正则的方法,判断是否合法
   int temp = validateSelect(cmd);
   if(temp==-1){
    System.out.println("输入不合法,请从新输入!");
    continue;
   }if(temp==0){
    System.out.println("系统退出!");
    break;
   }
   switch (temp) {
   case 1:
    /**
     * 打印当前的日历,调用一个打印当前日历的方法
     */
    printNow();
    break;
   case 2:
    /**
     * 打印自定义的日历,调用一个自定义的方法
     */
    printDefine();
    break;
   default:
    break;
   }
  }
 }
 //打印当前日历的方法
 @SuppressWarnings("deprecation")
 public static void printNow(){
  int sum1=0;
  Date date=new Date();//日期构造器
  int nowYear=date.getYear()+1900;//当前年份
  int nowMonth=date.getMonth()+1;//当前月份
  int nowDay=date.getDate();//当前天数
  /**
   * 测试打印的日期
   */
  //  System.out.println("当前的年份"+nowYear);
  //  System.out.println("当前的月份"+nowMonth);
  //  System.out.println("当前的天数"+nowDay);
  for (int i = 1900; i <nowYear; i++) {
   if(i%4==0&&i%100!=0||i%400==0){
    sum1+=366;
   }else{
    sum1+=365;
   }
  }
  for (int i = 1; i <nowMonth; i++) {
   if(i==2){
    if(nowYear%4==0&&nowYear%100!=0||nowYear%400==0){
     sum1+=29;
    }else{
     sum1+=28;
    }
   }else if(i==4||i==6||i==9||i==11){
    sum1+=30;
   }else if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){
    sum1+=31;
   }
  }
  sum1++;//计算总的天数
  int weekday=sum1%7;
  System.out.println("日\t一\t二\t三\t四\t五\t六");
  for(int i=0;i<weekday;i++){
   System.out.print("\t");
  }int printday=0;
  if(nowMonth==2){
   if(nowYear%4==0&&nowYear%100!=0||nowYear%400==0){
    printday=29;
   }else{
    printday=28;
   }
  }else if(nowMonth==4||nowMonth==6||nowMonth==9||nowMonth==11){
   printday=30;
  }else if(nowMonth==1||nowMonth==3||nowMonth==5||nowMonth==7||nowMonth==8||nowMonth==10||nowMonth==12){
   printday=31;
  }
  //指定一个标识符
  boolean flag = false;
  for (int i = 1; i <=printday; i++) {
   if(sum1%7==6){
    if(i==nowDay){
     flag = true;
     System.out.print("["+i+"]"+"\n");
    }else{
     System.out.print(i+"\n");
    }
   }else{
    if(i==nowDay){
     flag = true;
     System.out.print("["+i+"]"+"\t");
    }else{
     System.out.print(i+"\t");
    }
   }
   sum1++;
  }
  System.out.println();
  if(!flag){
   System.out.println("当前月没有这一天,无法标记");
  }
  System.out.println("是否继续?(Y/N)");
  if("Y".equalsIgnoreCase(getString())){

  }else{
   flage = false;
   System.out.println("谢谢使用,系统退出");
  }
 }
 //打印自定义日历的方法
 public static void printDefine(){
  //定义一个天数的总数
  int sum = 0;
  /**
   * 年份判断的方法
   */
  while(true){
   System.out.println("请输入年份:");
   String tempYear = getString();
   int year = validateYear(tempYear);
   if(year==-1){
    System.out.println("输入的年份不合法,请从新输入");
    continue;
   }else{
    Year = Integer.parseInt(tempYear);
    break;

   }
  }
  /**
   * 月份判断的方法
   */
  while(true){
   System.out.println("请输入月份:");
   String tempMonth = getString();
   int month = validateMonth(tempMonth);
   if(month==-1){
    System.out.println("输入的月份不合法,请从新输入");
    continue;
   }else{
    Month = Integer.parseInt(tempMonth);
    break;
   }
  }
  /**
   * 天数判断的方法
   */
  while(true){
   System.out.println("请输入天数:");
   String tempDay = getString();
   int day = validateDay(tempDay);
   if(day==-1){
    System.out.println("输入的天数不合法,请从新输入");
    continue;
   }else{
    Day = Integer.parseInt(tempDay);
    break;
   }
  }
  /**
   * for循环计算年份
   */
  for(int i=1900;i<Year;i++){
   if(i%4==0&&i%100!=0||i%400==0){
    sum+=366;
   }else{
    sum+=365;
   }
  }
  /**
   * for循环计算月份
   */
  for(int i=1;i<Month;i++){
   if(i==2){
    if(Year%4==0&&Year%100!=0||Year%400==0){
     sum+=29;
    }else{
     sum+=28;
    }
   }else if(i==4||i==6||i==9||i==11){
    sum+=30;
   }else{
    sum+=31;
   }
  }
  //计算总数,算出这个月的第一天是什么位置
  sum++;
  System.out.println("日\t一\t二\t三\t四\t五\t六");
  int weekDay = sum%7;
  for(int i=0;i<weekDay;i++){
   System.out.print("\t");
  }
  /**
   * 每个月的天数
   *
   */
  int printday=0;
  if(Month==2){
   if(Year%4==0&&Year%100!=0||Year%400==0){
    printday=29;
   }else{
    printday=28;
   }
  }else if(Month==4||Month==6||Month==8||Month==11){
   printday=30;
  }else if(Month==1||Month==3||Month==5||Month==7||Month==8||Month==10||Month==12){
   printday=31;
  }
  /**
   * 开始打印日历
   */
  boolean flag = false;
  for(int i=1;i<=printday;i++){
   if(sum%7==6){
    if(i==Day){
     flag = true;
     System.out.print("["+i+"]"+"\n");
    }else{
     System.out.print(i+"\n");
    }
   }else{
    if(i==Day){
     flag = true;
     System.out.print("["+i+"]"+"\t");
    }else{
     System.out.print(i+"\t");
    }
   }
   sum++;
  }
  System.out.println();
  if(!flag){
   System.out.println("当前月没有这一天,无法标记");
  }
  System.out.println("是否继续?(Y/N)");
  if("Y".equalsIgnoreCase(getString())){

  }else{
   flage = false;
   System.out.println("谢谢使用,系统退出");
  }
 }
 //正则验证输入的天数
 public static int validateDay(String cmd){
  String reg = "^[1-9]|[1][0-9]|[2][0-9]|[3][0-1]$";
  if(cmd.matches(reg)){
   return Integer.parseInt(cmd);
  }
  return -1;
 }
 //正则验证输入的月份
 public static int validateMonth(String cmd){
  String reg = "^[1-9]|[1][0-2]$";
  if(cmd.matches(reg)){
   return Integer.parseInt(cmd);
  }
  return -1;
 }
 //正则验证输入的年份
 public static int validateYear(String cmd){
  String reg = "^[1-9](\\d{2,3})$";
  if(cmd.matches(reg)){
   return Integer.parseInt(cmd);
  }
  return -1;
 }
 //正则验证输入的方法
 public static int validateSelect(String cmd){
  String reg = "[0-2]";
  if(cmd.matches(reg)){
   return Integer.parseInt(cmd);
  }
  return -1;
 }
 //菜单的方法
 public static void printMenu(){
  System.out.println("【1】当前日历【2】自定义日历【0】退出系统");
 }
 //输入数字的方法
 public static int getInt(){
  Scanner sc = new Scanner(System.in);
  return sc.nextInt();
 }
 //输入字符串的方法
 public static String getString(){
  Scanner sc = new Scanner(System.in);
  return sc.next();
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值