现在的位置: 首页 > 综合 > 正文

JAVA万年历

2013年10月01日 ⁄ 综合 ⁄ 共 3156字 ⁄ 字号 评论关闭

以此篇文章开始的连续两片文章将介绍利用JAVA基础知识制作一个万年历控制台程序。

先来看一下效果图

我们来分析一下万年历的业务:

1.用户输入信息-->进行信息判断(是否符合要求)

2.以1900年1月1日(星期一)为基准,计算1900年1月1日至当日的总天数

   (1)先计算1900年至(用户输入的年 - 1)的总天数   -->注意平闰年之分

   (2)计算用户输入年份的1月至(用户输入月份 - 1)的天数

 3.计算输入月份的第一天是星期几

4.格式化输出

以下我们按照步骤一步一步进行代码解析

一、利用do-while循环接受用户输入信息,并利用if-else语句进行判断

Code:
  1. int year;   
  2. int month;   
  3. boolean xn = false;   
  4. do  
  5. {   
  6.            System.out.println("请输入年份:");   
  7.            year = input.nextInt();   
  8.            System.out.println("请输入月份:");   
  9.            month = input.nextInt();   
  10.            //利用boolean类型的表达式进行输入信息的判断   
  11.            xn = (month < 1) || (month > 12) ||(year < 1);   
  12.            if(xn)   
  13.           {   
  14.                  System.out.println("输入信息错误,请重新输入!");   
  15.           }   
  16. }while(xn);  

二、判断平闰年,并计算1900年至(用户输入年 - 1)的总天数

Code:
  1. int everyYearDay = 0//每年的天数   
  2. int totalYearsDays = 0//计算年的天数   
  3. int inputYearDay = 0    //记录用户输入年的天数   
  4. boolean yn = false;   //标识平闰年   
  5.   
  6. //利用for循环计算天数   
  7. for(int i = 1900;i < =year;i ++)   
  8. {   
  9.       if(((i % 4 == 0)&&(i % 100 != 0))||(i % 400 == 0))  //闰年的判断条件   
  10.      {   
  11.                    yn = true;   
  12.                    everyYearDay = 366;   
  13.      }   
  14.      else  
  15.     {   
  16.                     yn = false;   
  17.                     everyYearDay = 365;   
  18.     }   
  19.     //如果循环中的年份小于用户输入的年份,则累积天数   
  20.   if(i < year)   
  21.       {   
  22.              totalYearsDays = totalYearsDays + everyYearDay;   
  23.       }   
  24.       else  
  25.       {   
  26.               inputYearDay = everyYearDay;   
  27.               System.out.println(year + "年共有:" + inputYearDay + "天");   
  28.       }   
  29. }  

三、判断月份的天数,并计算当年1月至(用户输入月份 -1)的天数

Code:
  1. int everyMonthDay = 0;    //记录每月的天数   
  2. int totalMonthsDays = 0//总天数   
  3. int inputMonthDay = 0;    //记录用户输入的月份在用户输入年份的天数   
  4.   
  5. //利用for循环计算天数   
  6. for(int i = 1;i <= month;i ++)   
  7. {   
  8.       switch(i)   
  9.      {   
  10.              case 4:   
  11.              case 6:   
  12.              case 9:   
  13.              case 11:   
  14.                         everyMonthDay = 30;   
  15.                         break;   
  16.              case 2:   
  17.                         if(xn)   //xn是用来记录平闰年的boolean类型的变量   
  18.                        {   
  19.                              everyMonthDay = 29;   
  20.                        }   
  21.                        else  
  22.                       {   
  23.                               everyMonthDay = 28;   
  24.                       }   
  25.                       break;   
  26.               default:   
  27.                                 everyMonthDay = 31;   
  28.                                 break;   
  29.      }   
  30.      if(i < month)   
  31.     {   
  32.               totalMonthsDays = totalMonthsDays + everyMonthDay;   
  33.     }   
  34.     else  
  35.    {   
  36.                inputMonthDay = everyMonthDay;   
  37.                System.out.println(month + "月共有:" + inputMonthDay + "天");   
  38.    }   
  39. }  

四、计算总天数,并计算出用户输入的月份的第一天星期几

Code:
  1. int total = totalMonthsDays + totalYearsDays; //计算总天数   
  2.   
  3. int temp = (total + 1) % 7//判断输入月份的第一天星期几  

五、格式化输出

Code:
  1. //因为我们的输入格式是   
  2. //星期日 星期一 星期二 星期三 星期四 星期五 星期六   
  3. //当星期日时的时候,我们直接输出就好了,但是当   
  4. //第一天是星期一的时候,我们就必须首先打印出空格   
  5. //然后再输出日期,才能让号码和星期想对应   
  6. //打印空格   
  7. for(int spaceno = 0;spaceno < temp;spaceno ++)   
  8. {   
  9.       System.out.print("/t");   
  10. }   
  11.   
  12. //按照顺序打印号码   
  13. for(int i = 1;i <= inputMonthDay;i ++)   
  14. {   
  15.       if((total + i ) % 7)     //判断是否该换行了   
  16.      {   
  17.                System.out.println(i );   
  18.      }   
  19.      else  
  20.     {   
  21.                  System.out.print(i + "/t");   
  22.     }   
  23. }  

 

抱歉!评论已关闭.