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 }

Java实验项目二——打印某年某月日历的更多相关文章

  1. Java实验项目二——小学生考试系统(简单四则运算)

    Program:设计实现一个小学生数学考试系统,完成随机出题(简单的四则运算),学生答题,自动判分的功能. Description:代码如下: 1 /* 2 * Description:面向考试系统建 ...

  2. Java实验项目二——二维数组实现九九乘法表

    Program:打印乘法口诀表 (1)编写一个方法,参数(二维数组),完成将二维数组中的数据按照行列显示的工作. (2)编写一个测试方法,给出99乘法表,放入到二维数组中,调用(1)中的方法,显示乘法 ...

  3. Java实验项目二——猜数游戏

    1 /* 2 * Description:定义比较类,实现两个数的比较 3 * 4 * */ 5 6 7 package compare; 8 9 import dao.Operate; 10 11 ...

  4. Java实验报告二:Java面向对象程序设计

    Java实验报告二:Java面向对象程序设计                                                                               ...

  5. d017: 打印某年某月有几天

    内容: 打印某年某月有几天 输入说明: 一行两个整数,前面是年份 后面是月份 输出说明: 一个整数 输入样例:   2009 6 输出样例 : 30 #include <stdio.h> ...

  6. 20145203盖泽双:Java实验报告二

    Java实验报告二:Java面向对象程序设计 实验要求: 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验内容 ...

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

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

  8. java实验项目报告

            JAVA课程项目报告   题目:利用java实现一个时钟的小程序 姓名:王国梁 班级:计科13-2 学号:201303011200         利用JAVA实现一个时钟的小程序 1 ...

  9. java实验报告二

    一.实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计模式 二.实验步骤 (一)单元 ...

随机推荐

  1. Centos 6.5 启动报错 "Kernel panic - not syncing: Attempted to kill init"解决办法

    某一天,开发同事突然告诉我服务器上自己的虚拟机连不上了,我登陆到服务器CAS管理界面,重启虚拟机后发现报错了 问题:Kernel panic - not syncing: Attempted to k ...

  2. Redis学习笔记七:主从集群

    单机,单节点,单实例的Redis会有什么问题呢? 容易导致单点故障,那么如何解决呢? 可以通过主备方式 同时可以实现读写分离 这里的每个节点是全量的,镜像的. 单节点的容量有限而且单点的压力比较大,如 ...

  3. GO语言面向对象05---接口的多态

    package main import "fmt" type Fighter interface { Attack() (bloodloss int) Defend() } /*骑 ...

  4. L3级自动驾驶

    L3级自动驾驶 2020年开年 3月9日,工信部在其官网公示了<汽车驾驶自动化分级>推荐性国家标准报批稿,并拟于2021年1月1日开始实施. 按照中国自身标准制定的自动驾驶分级标准,在千呼 ...

  5. TensorFlow神经网络集成方案

    TensorFlow神经网络集成方案 创造张力流create_tensorflow_neuropod 将TensorFlow模型打包为neuropod包. create_tensorflow_neur ...

  6. 机器人路径规划其二 A-Star Algorithm【附动态图源码】

    首先要说明的是,机器人路径规划与轨迹规划属于两个不同的概念,一般而言,轨迹规划针对的对象为机器人末端坐标系或者某个关节的位置速度加速度在时域的规划,常用的方法为多项式样条插值,梯形轨迹等等,而路径规划 ...

  7. css--flex弹性布局详解和使用

    前言 前端开发最基础的能力是根据 ui 设计稿迅速还原页面,拿到设计稿不要急于写代码,首先要对页面进行分析,对页面的整体布局有个大概的了解,然后先实现一个整体的布局,再把布局拆分成逐个小模块,逐个去实 ...

  8. 安卓控件RecycleView的简单使用

    RecycleView的使用 目录 RecycleView的使用 技术概述 技术详述 遇到问题和解决 总结 参考文献 技术概述 RecycleView是谷歌官方对ListView的改进(并不是替代), ...

  9. 小程序动态修改页面标题setNavigationBarTitle

    可以使用setNavigationBarTitle方法动态设置页面标题 wx.setNavigationBarTitle({ title: options.name, })

  10. WEB安全新玩法 [5] 防范水平越权之查看他人订单信息

    水平越权是指系统中的用户在未经授权的情况下,查看到另一个同级别用户所拥有的资源.水平越权会导致信息泄露,其产生原因是软件业务设计或编码上的缺陷.iFlow 业务安全加固平台可以缓解部分场景下的水平越权 ...