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( "日\t一\t二\t三\t四\t五\t六" );
133         for( int i = 0; i < days.length; i++ ) {
134
135             System.out.print(days[i] + "\t");
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 }

转载于:https://www.cnblogs.com/caizhen/p/7592584.html

Java实验项目二——打印某年某月日历相关推荐

  1. Java实验项目二打印万年历

    package _____; import java.util.Scanner; public class wnl//万年历主类 {     public static void main(Strin ...

  2. java日历打印出的格式不对_Java打印某年某月的日历 没有错误但是运行出的月份与实际不符 求大神指导...

    Java打印某年某月的日历 没有错误但是运行出的月份与实际不符 求大神指导 我看了一下日历,发现你打出来的其实是九月份而不是八月份,那么我猜在showPrint这里的第二个参数是从0开始的,即0~11 ...

  3. java实验报告二_Java实验报告(实验二)

    (1)伪代码  (2)产品代码  (3)测试代码 a.首先在虚拟机中建立一个以自己学号命名的文件夹,以存放自己实验中的代码.运行结果以及截图 2.按照实验说明里的要求,将代码输入,并运行出结果: 做以 ...

  4. c++第二次上机实验项目二

    /* * 文件名称: c++第二次上机实验项目2 * 作 者: 谢文锐* 完成日期: 2016 年 3 月 24 日 * 版 本 号:v1.0 * 对任务及求解方法的描述部分:* 输入描述: 输入一个 ...

  5. Java实验项目三——平面图形和立体图形抽象类

    Program:按照下面要求完成类的设计 (1)设计一个平面图形抽象类和一个立体图形抽象类,提供该类对象公共的方法和属性. (2)修改项目三中第2题中所设计的球类.圆柱类,圆锥类.矩形类.三角形类.圆 ...

  6. python怎么调出某年某月日历_Python 写的计算指定年指定月日历的脚本

    今天初学Python写了一个用于计算指定年指定月日历的脚本 我的Python版本:Python 3.4.2 输入:脚本名 年(4位数字,1900-2100) 月(1-2位数字,1-12) 输出:打印的 ...

  7. 实验项目二 贪吃蛇游戏开发

    一.实验要求 1.实现贪吃蛇游戏基本功能,屏幕上随机出现一个"食物",称为豆子, 2.上下左右控制"蛇"的移动,吃到"豆子"以后" ...

  8. C语言实现打印某年某月的日历

    在做学校作业发现的一道不错的练手题目,记录下来方便复习 大致思路: ① 判断输入的年份是否闰年: ② 计算输入月份的第一天是该年的第几天: ③ 计算输入月份的第一天是星期几: ④ 输出. 结合代码食用 ...

  9. java实验项目代码_java web 期末项目实验源码20套,自用学习非常不错!

    分享java web 期末项目实验源码20套,自用学习非常不错! 我自己也从里面学习到了很多东西! 1.BBS论坛系统(jsp+sql) 2.ERP管理系统(jsp+servlet) 3.OA办公自动 ...

最新文章

  1. LeetCode简单题之判断矩阵经轮转后是否一致
  2. Swift学习——Swift解释特定的基础(七)
  3. Qt下使用Shader绘制三角形
  4. Linux运维:常用的压缩解压缩命令(zip、tar)
  5. native react 图片多选_开源一个图片组件 react-native-border-radius-image
  6. 机器人局部避障的动态窗口法(dynamic window approach) (转)
  7. 在Java中获取素数的无限列表
  8. js使用工具将表单封装成json字符串传到后台,js截取字符串(学生笔记)
  9. HTML粘性滑块导航源码-可用来做首页
  10. 常用adb shell 命令
  11. 抢购活动的粗略设计和实现
  12. 26秒!全球销量第一的AI音箱就被腾讯黑掉了,然后变身窃听器
  13. 卖地方特色才产品,类似湖南味道那样的网上专卖店
  14. VB.net调用蒙恬Write2Go笔迹手写板进行电子签名
  15. 用selenium模拟QQ空间登录
  16. STM32精确延迟1us和1ms的函数
  17. android文件管理器——文件检索
  18. 【CANopen】CAN总线的高级协议详解
  19. cps1 cps2 android,CPS1和CPS2模拟器详细图文教程
  20. 学生端android版二1班,一起作业学生端安卓版

热门文章

  1. FFmpeg 音频解码(秒懂)
  2. “中软综合项目实训”——把学生当员工培养
  3. 正方形和三角形面积C语言,探讨正方形中的三角形动态面积
  4. 深入理解Linux虚拟内存管理(一)
  5. 广联达GTJ2018实战精准快速算量课程
  6. 王者五一节系统服务器,王者荣耀2017年五一活动
  7. openssh移植 for pycharm 远程调试 sftp
  8. 环信通信(即时通信)
  9. 深入浅出TCP/UDP 原理-UDP篇(2)及完整MATLAB实现UDP通信
  10. 毕设IDEA2019之ssm多表分页模糊查询(PageHelper插件)