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. 西门子S7系列以太网通讯处理器功能介绍

    北京华科远创科技有限研发的远创智控型号ETH-YC模块适用于西门子S7-200/S7-300/S7-400.SMART S7-200.西门子数控840D.840DSL.合信.亿维PLC的PPI/MPI ...

  2. DLPack构建跨框架的深度学习编译器

    DLPack构建跨框架的深度学习编译器 Tensorflow,PyTorch和ApacheMxNet等深度学习框架提供了一个功能强大的工具包,可用于快速进行原型设计和部署深度学习模型.易用性通常是以碎 ...

  3. 语义分割:基于openCV和深度学习(一)

    语义分割:基于openCV和深度学习(一) Semantic segmentation with OpenCV and deep learning 介绍如何使用OpenCV.深度学习和ENet架构执行 ...

  4. 摄像头ISP系统原理(中)

    摄像头ISP系统原理(中) AF(FOCUS)----自动对焦 根据光学知识,景物在传感器上成像最清晰时处于合焦平面上.通过更改 LENS 的位置,使得景物在传感器上清晰的成像,是 ISP FOCUS ...

  5. CVPR2020:点云弱监督三维语义分割的多路径区域挖掘

    CVPR2020:点云弱监督三维语义分割的多路径区域挖掘 Multi-Path Region Mining for Weakly Supervised 3D Semantic Segmentation ...

  6. ASIC设计-终极指南

    ASIC设计-终极指南 ASIC Design – The Ultimate Guide ASIC设计-终极指南 ASICs代表特定于应用的集成电路,指的是针对特定应用而设计的半导体解决方案,与其他解 ...

  7. Linux学习笔记:用户与用户组

    基本概念 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统. 用户 也就是说任何需要使用操作系统的用户,都 ...

  8. 【VBA】单元格插入图片,单元格删除图片

    封装函数: Sub 插入产品形象(strRange As String, datebaseTu As String) Dim strJpg As String strJpg = datebaseTu ...

  9. 【MySQL】常用的命令

    连接数据库 mysql -u root -pmysql -u root -h 192.168.16.140 -p 创建数据库 create database dbstudents; 查看所有数据库 s ...

  10. 腾讯TencentOS 十年云原生的迭代演进之路

    导语 TencentOS Server (又名 Tencent Linux 简称 Tlinux) 是腾讯针对云的场景研发的 Linux 操作系统,提供了专门的功能特性和性能优化,为云服务器实例中的应用 ...