zoukankan      html  css  js  c++  java
  • Java实验项目二——打印某年某月日历

    Program:打印万年历(输入年份,月份,输出该月的日历,已知1900年1月1日是星期一),

    要  求:

             (1)编写一个方法判断闰年;

        (2)编写一个方法判断某年某月有多少天;

        (3)编写一个方法计算某年某月前距离1900年1月1日的总天数;(4)编写一个输出某年某月日历的方法;

        (5)编写一个测试方法。

    Description:该项目由多个类实现,最后类为main方法的调用。代码如下:

      1 /*
      2  *Description:定义工具类
      3  *
      4  * */
      5 
      6 package tools;
      7 
      8 import java.util.Scanner;
      9 
     10 public class Operate {
     11     
     12     //定义方法,判断一个年是否是闰年
     13     public static boolean ifLeapyear(int year) {            
     14         
     15         if( year % 400 == 0 ) {            //能被400整除
     16             
     17             return true;
     18         }else if( year % 100 != 0 && year % 4 == 0 ) {        //不是100倍数,但是能被4整除
     19             
     20             return true;
     21         }else {
     22             
     23             return false;
     24         }
     25     }
     26     
     27     //判断某年某月有多少天
     28     public static int getDays(String yearMonth) {            
     29         
     30         String array[] = yearMonth.split("-");
     31         int year = Integer.parseInt( array[0] );
     32         int month = Integer.parseInt( array[1] );
     33         int monthOne[] = {31,29,31,30,31,30,31,31,30,31,30,31};
     34         int monthTwo[] = {31,28,31,30,31,30,31,31,30,31,30,31};
     35         
     36         if( Operate.ifLeapyear(year) ) {
     37             return monthOne[month-1];
     38         }
     39         return monthTwo[month-1];
     40     }
     41     
     42     //接收用户的输入
     43     public static String getInput() {
     44         
     45         Scanner scan = new Scanner(System.in);
     46         String yearMonth = "";
     47         System.out.println( "请输入年月,中间用'-'分开:" );
     48         yearMonth = scan.next();
     49         
     50         return yearMonth;
     51     }
     52     
     53     //验证用户输入数据的合法性
     54     public static boolean validate(String yearMonth) {
     55         
     56         if( yearMonth.matches( "\d{4}\W\d{1,2}" ) ) {    //进行正则匹配
     57             
     58             String str[] = yearMonth.split("-");
     59             
     60             if( Integer.parseInt( str[0] ) < 1900 ) {    //年份小于1990
     61                 return true;
     62             }
     63             
     64             //月份不在1-12月之间
     65             if( Integer.parseInt(str[1]) < 1 || Integer.parseInt( str[1] ) > 12 ) {
     66                 
     67                 return true;
     68             }
     69             
     70             return false;
     71                     
     72         }else {
     73             return true;
     74         }
     75     }
     76     
     77     //计算某年某月距离1990年有多少天
     78     public static int getAllDays(int year,int month,int[] monthOne,int[] monthTwo) {
     79         int count = 0;
     80         for( int i = 1900;i < year; i++ ) {
     81             
     82             if( Operate.ifLeapyear(i) ) {
     83                 count += 366;
     84             }else {
     85                 
     86                 count += 365;
     87             }
     88         }
     89         
     90         for( int i = 0; i < month - 1; i++ ) {
     91             
     92             if( Operate.ifLeapyear(year) ) {
     93                 
     94                 count += monthOne[i];
     95             }else {
     96                 
     97                 count += monthTwo[i];
     98             }
     99         }
    100         return count;
    101     }
    102     
    103     
    104     //打印日历
    105     public static void printDate(String yearMonth) {
    106         String array[] = yearMonth.split("-");
    107         int year = Integer.parseInt( array[0] );    
    108         int month = Integer.parseInt( array[1] );    
    109         int monthOne[] = {31,29,31,30,31,30,31,31,30,31,30,31};        //闰年每个月的天数
    110         int monthTwo[] = {31,28,31,30,31,30,31,31,30,31,30,31};        //平年每个月的天数
    111         int count = 0;
    112         
    113         count = Operate.getAllDays(year, month, monthOne, monthTwo);    //得到天数
    114         
    115         int remainDays = count % 7;            //除以7。看看剩余的天数
    116         int monthDays = Operate.getDays(yearMonth);        //得到目标月份的天数
    117         String[] days = new String[remainDays + monthDays + 2];        //开辟一个String数组,存放打印的内容
    118         
    119         int k = 1;
    120         for(int i = 0; i < days.length; i++) {            //为数组赋值
    121             
    122             if( i < remainDays + 1 ) {
    123                 days[i] = " ";
    124             }else {
    125                 days[i] = k + "";
    126                 k++;
    127             }
    128         }
    129 
    130         //打印出rili
    131         System.out.println( "---------------------" + year + "年" + month + "月" +  "---------------------" );
    132         System.out.println( "日	一	二	三	四	五	六" );
    133         for( int i = 0; i < days.length; i++ ) {
    134             
    135             System.out.print(days[i] + "	");
    136             if( (i + 1) % 7 == 0 ) {            //每七天换行
    137                 System.out.println();
    138             }
    139         }
    140     }
    141     
    142 }
     1 /*
     2  * Description:打印某年某月的日历
     3  * 
     4  * Written By:Cai
     5  * 
     6  * Date Written:2017-09-24
     7  * 
     8  * */
     9 
    10 package main;
    11 import tools.Operate;
    12 
    13 
    14 public class DemoTwo2 {
    15 
    16     public static void main(String args[]) {
    17         
    18         String input = "";        //接收用户输入的值
    19         boolean flag = true;
    20         while( flag ) {            //判断用户输入的日期是否合法
    21             input = Operate.getInput();
    22             if( Operate.validate(input) ) {            //调用方法检测
    23                 
    24                 System.out.println( "输入日期格式错误,请重新输入:" );
    25             }else {
    26                 
    27                 flag = false;
    28             }    
    29         }
    30         
    31         Operate.printDate(input);            //打印rili
    32     }
    33 }
    初学小白,请多指教!
  • 相关阅读:
    CXF调用webservice客户端
    CXF 需要的jar包下载
    跨域解决
    eclipce集成activiti
    MyEclipse 2017 CI 7安装使用
    BaiduPCS-Go的安装及使用
    织梦后台添加友链,前台不显示|修改友情链接的显示行数
    3种方法判断手机浏览器跳转WAP手机网站
    织梦DEDE后台定时分时段自动更新发布文章插件
    织梦DedeCMS信息发布员发布文章默认自动审核更新并生成HTML页面
  • 原文地址:https://www.cnblogs.com/caizhen/p/7592584.html
Copyright © 2011-2022 走看看