Java的第一周学习完毕,利用自己的基础知识试着写了一下动态日历的程序编写,由于英语知识薄弱,大部分变量使用自己熟悉的字母代替。以下是编程代码:
package day1;
import java.util.Scanner;
/**
* 动态日历
*/
public class DynamicCalendar {
/**
* 由于1979年1月1日是星期一,所以以它作为标准画日历表 计算输入年份到1979年的天数
*
* @param y
* @return
*/
public int year(int y) {
int k;
k = y - 1979;
int a;
int b;
a = k / 4;
b = k % 4;
// 因为每四年有一个闰年,所以我先把年份分成有限个四年计算天数,剩余的几年再判断是否是闰年单独计算天数;
int fate1 = 0;
if (b <= 1) {
fate1 = a * 1461 + b * 366;
} else {
fate1 = a * 1461 + (b - 1) * 365 + 366;
}
return fate1;
}
/**
* 计算一个月的天数并且返回每个月的天数
*
* @param y
* @param m
* @return
*/
public int days(int y, int m) {
switch (m) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
// 判断是否是闰年
if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) {
return 29;
} else
return 28;
}
return 0;
}
/**
* 计算输入的该月是该年的第几天并且返回天数
*
* @param y
* @param m
* @return
*/
public int month(int y, int m) {
int fate2 = 0;
for (int i = 1; i < m; i++) {
fate2 = fate2 + days(y, i);
}
return fate2;
}
/**
* 计算输入的时间和1979年1月所相差的天数
*
* @param y
* @param m
* @return
*/
public int amount(int y, int m) {
int fate;
fate = year(y) + month(y, m);
return fate;
}
/**
* 打印日历并通过计算画出该月的日历
*
* @param y
* @param m
*/
public void situation(int y, int m) {
System.out.print(y + "年" + m + "月" + "\n");
for (int i = 1; i <= 30; i++) {
System.out.print("--");
}
System.out.println();
System.out.print("一" + "\t" + "二" + "\t" + "三" + "\t" + "四" + "\t" + "五" + "\t" + "六" + "\t" + "日" + "\t");
System.out.println();
int x;
x = amount(y, m) % 7;// 算出该月1号是星期几
for (int a = 1; a <= x; a++) {
System.out.print(" " + "\t");
}
int k;
k = days(y, m);
// 循环输出该月的天数
for (int b = 1; b <= k; b++) {
if ((b + x - 1) % 7 == 0) {
System.out.println();
}
System.out.print(b + "\t");
}
}
/**
* 主方法运行程序
*
* @param args
*/
public static void main(String[] args) {
DynamicCalendar os = new DynamicCalendar();
System.out.println("请输入年份:");
Scanner sc = new Scanner(System.in);
int year = sc.nextInt();
System.out.println("请输入月份:");
Scanner sm = new Scanner(System.in);
int month = sc.nextInt();
os.situation(year, month);
}
}