java用类封装的方式写简单的日历
来源:互联网 发布:云计算优缺点 编辑:程序博客网 时间:2024/04/28 05:49
/*程序 1 给定某一年某一天如(1900年一月一日)
* 2计算输入的改天离1900年一月一日相差多少天;
* ①计算输入的那一年到1900有天 润年366 平年365;
* ②计算输入的那一个月到输入的那一年有几天 分四种情况 一个月的天数有31 31 28 29 这四种情况
* ③再加上输入的那一日减去1就是离1900年一月一日
* 3计算那天是周几 对7取模除尽为星期一(如果加1 在对7取模是算的是第1900年1月1号前一天也就是星期日取模)
*
* */
public class Calender {
//起始年份,一月一号是星期几
static int originYear = 1900;
static int firstInWeek = 1;
//一 二 三 四 五 六 七 八 九 十 十一 十二
static int[] daysOfMonthArr ={31,28,31,30,31,30,31,31,30,31,30,31};
//某一年的天数static int daysOfYear(int pyear){ //可以被四整除的非整百年份 可以被400整除的年份 if ((pyear % 4== 0 && pyear%100 !=0) || pyear % 400 == 0) { return 366; }else { return 365; }}//某一个月的天数 参数为我们想求的哪一个月static int daysOfMonth(int pmonth,int pyear){ //判断该年是否为润年 润年额二月为29天 平年28 if (daysOfYear(pyear) ==366) { daysOfMonthArr[1] = 29; }else{ daysOfMonthArr[1] = 28; } //返回用户需要查询的月份(参数传递进来的pmonth) return daysOfMonthArr[pmonth-1];}//画出日历 不需要返回值static void drawCalander(int pfirstInWeek ,int pdayOfmonth){ String[] arr = new String[42]; System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六"); //将数组初始化为空 for (int i = 0; i < arr.length; i++) { arr[i] = ""; } //根据一号是星期几 从一号开始填充直到这个月的天数 for (int j = 0; j < pdayOfmonth; j++) { //字符串拼接成为字符串 arr[pfirstInWeek +j] = j + 1+""; } //画日历 for (int i = 0; i < arr.length; i++) { //七天换一行 if(i % 7 ==0 && i !=0){ System.out.println(); } //从日历第一个格开始画,直到42,画满整个日历 System.out.print(arr[i]+"\t"); } System.out.println("\n-------------------------------------");}//得到2010年到用户输入年份呢的天数
static int getDaysPassOfYear(int pyear){
int sum= 0;//总天数
//循环算出 从2010年开始算
for (int i = originYear; i < pyear; i++) {
//把天数累计到sum中
sum +=daysOfYear(i);
}
//把计算的天数返回
return sum;
}
//获取一月到4月份的天数 假如输入5月static int getDaysPassOfMonth(int pyear,int pmonth){ int sum =0; //循环累加 for (int i = 1; i < pmonth; i++) { //累加从一月份开始 sum += daysOfMonth(i, pyear); } //把总天数返回 return sum;}//得到要显示的月份的一号是星期几static int getWeek(int pmonth ,int pyear){ int week=0;//要返回的星期几 //假设输入的是2015年5月 计算的是2010,2011,2012,2013,2014年还有2015年的1~4月份 week = (getDaysPassOfMonth(pyear, pmonth)+getDaysPassOfYear(pyear)+firstInWeek)%7; return week;}//展示 日历,用户需要给出哪一年 哪一月static void showCalander(int pyear,int pmonth){ //getWeek(pmonth, pyear)算出1号星期几,返回int //daysOfMonth(pmonth, pyear)算出这个月有多少天,返回int drawCalander(getWeek(pmonth, pyear), daysOfMonth(pmonth, pyear));}
}
这个类封装几个方法 算出距离1900年一月一日到输入那一年的那一月的1号的天数和星期几
import java.util.Scanner;
public class MyInput {
static Scanner mScanner = new Scanner(System.in);static int nextInt(){ while (!mScanner.hasNextInt()) { System.err.println("请输入一个整数"); mScanner.next(); } int data = mScanner.nextInt(); return data;//或return mScanner.nextInt()}static float nextFloat(){ while (!mScanner.hasNextFloat()) { System.err.println("请输入一个小数");; mScanner.next(); } return mScanner.nextFloat();}static double nextDouble(){ while (!mScanner.hasNextDouble()) { System.err.println("请输入double型的数"); mScanner.next(); } return mScanner.nextDouble();}static boolean nextBoolean(){ while (!mScanner.hasNextBoolean()) { System.err.println("请输入boolean类型"); mScanner.next(); } return mScanner.nextBoolean();}static String next(){ return mScanner.next();}
}
这是一个过滤的封装类
import java.util.Calendar;
public class Demo {
public static void main(String[] args) {
String userChoice =”“;
//获取系统时间 Calendar mCalendar = Calendar.getInstance(); int year = mCalendar.get(Calendar.YEAR); //获取系统的时间 比实际时间少了一个月 int month = mCalendar.get(Calendar.MONTH)+1; do { Calender.showCalander(year, month); System.out.println("请输入 1 上个月 2 下个月 3 上一年 4 下一年 5 指定日期 6 退出"); userChoice = MyInput.next(); switch (userChoice) { case "1": if (year >= Calender.originYear) { month--; //当到达边界的时候一月份的时候 月份回到上一年的12月, if (month == 0) { month = 12; year--; } }else { System.err.println("不支持1900年以前的日历"); } break; case "2": month++; if (month ==13) { month =1; year++; } break; case "3": year--; break; case "4": year++; break; case "5": //输入的年份不能低于1900 do{ System.out.println("请输入要查询的年份:大于1900"); year = MyInput.nextInt(); }while(year < 1900); //输入的月份在1月到12月之间 do{ System.out.println("请输入要查询的月份 1 - 12"); month = MyInput.nextInt(); }while(month < 1 || month > 12); break; case "6": break; default: break; } } while (!userChoice.equals(6)); System.out.println("感谢使用abandon日历 ");}
}
- java用类封装的方式写简单的日历
- 我用java写的日历
- java 用基础写的日历
- Java Script写的日历
- JAVA 写的日历程序
- java 写的日历控件
- php 封装的日历类
- java程序设计一个日历,不用封装的类的程序
- 用jQuery写个简单的日历组件
- Java之图形界面封装的日历类Date
- JAVA简单的日历程序
- Java --简单的日历程序
- 简单日历的制作 java
- 用Python写的日历
- 日历控件的封装
- Java语言写的简易的日历
- 用java写的一个简单的日历,我的第一个小程序,新人还请前辈们多加指点。
- 用一个第三方的类实现自动换行,简单写死日历组件
- JAVA快速排序——亿级体量数据
- 数据库对数据库查询语句的处理步骤
- 结构方程-SEM R 很难搞
- mysql的查询优化器
- 坑货libmcrypt
- java用类封装的方式写简单的日历
- centos 6.5 下 安装 mysql 并实现远程登录使用
- Scala-偏函数与部分应用函数
- 求职系列笔记(1)---数据结构和算法
- c++内联函数(inline)使用详解
- #include<head.h>与#include“head.h”的区别
- Caffe学习笔记之 ——在Windows下的完全配置
- mysql具体优化查询语句
- Java中有关Null的9件事