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( "日\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 }
时间: 2024-10-14 11:03:54

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

Java实验项目二打印万年历

package _____;import java.util.Scanner;public class wnl//万年历主类{    public static void main(String[] args)    {                menu();        Scanner sc=new Scanner(System.in);        int menu=sc.nextInt();        if(menu==1)        {            Syste

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

Program:打印乘法口诀表 (1)编写一个方法,参数(二维数组),完成将二维数组中的数据按照行列显示的工作. (2)编写一个测试方法,给出99乘法表,放入到二维数组中,调用(1)中的方法,显示乘法口诀表. Description:main方法所在类在最后给出,代码如下: 1 /* 2 *Description:定义工具类,负责初始化二维数组和打印二维数组 3 * 4 * */ 5 6 package tools; 7 8 9 public class Operate { 10 11 //初始

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

Program:设计实现一个小学生数学考试系统,完成随机出题(简单的四则运算),学生答题,自动判分的功能. Description:代码如下: 1 /* 2 * Description:面向考试系统建立类TestSystem 3 * 4 * */ 5 6 package entity; 7 8 public class TestSystem { 9 10 private int num1; //声明两个操作数 11 private int num2; 12 private String oper

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

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

(c语法百题17)打印某年某月有几天

知识点: 逻辑表达式的灵活运用 法1: switch()的用法,注意字符用  case 'a': ……;break;  数字用 case 6:……;break; 不要忘了break: 法2: if……else 的用法 注意是否是闰年的算法 内容: 打印某年某月有几天 输入说明: 一行两个整数,前面是年份 后面是月份 输出说明: 一个整数 输入样例: 2009 6 输出样例 : 30 法1: #include <stdio.h> int main() { int y,m; scanf("

Java实验报告二

北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计实验   班级:1353  姓名:符运锦  学号:20135323 成绩:                           指导教师:娄嘉鹏      实验日期:2015.5.8 实验密级:无            预习程度:                   实验时间:15:30~18:00 仪器组次:  23                    必修/选修: 选修              

java实验项目报告

        JAVA课程项目报告   题目:利用java实现一个时钟的小程序 姓名:王国梁 班级:计科13-2 学号:201303011200         利用JAVA实现一个时钟的小程序 1. 软件开发的需求分析 在当今的信息时代,时钟已经成为人们生活中必不可少的应用工具 ,Java语言是当今流行的网络编程语言,它具有面向对象.与平台无关.安全.多线程 等特点.使用Java语言不仅可以实现大型企业级的分布式应用系统,还能够为小型的.嵌入 式设备进行应用程序的开发.面向对象的开发方法是当

20135337朱荟潼Java实验报告二

实验二 Java面向对象程序设计 一.实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计模式 二.实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2.完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办法(空洞的方法

【温故知新】从零开始搭建 java web项目(二)

系列一介绍了新建一个 web 项目的基本步骤,系列二就准备介绍下基本的 jsp 和  servlet 使用. (关于jsp的编译指令.动作指令.内置对象不在本文讨论范围之内) 1. 首先,在 pom.xml 文件中添加 jsp 和 servlet 的支持包. <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</