package chapt;
import java.util.Scanner;
public class E2 {
private static Scanner sc;
public static void main(String[] args) {
sc = new Scanner(System.in);
System.out.println("===============万年历================");
System.out.println("===========按下1开始,按下0结束===========");
int a=0;
int nian;
int yue;
int tianshu;
int xingqishu;
int caozuo=0;
while(a==0) {
caozuo=sc.nextInt();
if(caozuo!=0 && caozuo!=1) {
System.out.println("==================选择功能错误==================");
}else {
//使用“switch”语句进行判断选择需要的功能
switch (caozuo) {
case 1:
System.out.println("===============万年历================");
System.out.print("请输入年份与月份: ");
System.out.println();
System.out.println("(示例:2002 10)");
nian=sc.nextInt();
yue=sc.nextInt();
if(nian<1 || yue<1 || yue>12) {
System.out.println("===============输入错误信息================");
}else {
System.out.println("==============="+nian+"年"+yue+"月"+"================");
Tian tian = new Tian(nian,yue);
tianshu = tian.jisuantian();
XingQi xingqi=new XingQi(tianshu);
xingqishu=xingqi.getXinQi();
Print print = new Print(xingqishu,nian,yue);
print.SuanTian();
print.Shuchu();
}
break;
case 0:
System.out.println("操作结束");
a=1;
}
}
if(a==1) {
break;
}
}
}
}
//创建计算天数的类
class Tian{
public int nian;
public int yue;
public int yTian;
public int tian;
public int i=0;
//无参构造方法
public Tian() {
}
//两参构造方法(传入要查询的年,月)
public Tian(int nian,int yue) {
this.nian=nian;
this.yue=yue;
}
//计算出一年一月一日到查询月的天数
public int jisuantian() {
for(i=1;i<this.nian;i++) {
if(i%4==0 && i%100!=0) {
this.tian=this.tian+366;
}else if(i%400==0) {
this.tian=this.tian+366;
}else {
this.tian=this.tian+365;
}
}
for(i=1;i<yue;i++) {
if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12) {
this.tian=this.tian+31;
}else if(i==4 || i==6 || i==9 || i==11) {
this.tian=this.tian+30;
}else if(i==2) {
if(i%4==0 && i%100!=0) {
this.tian=this.tian+29;
}else if(i%400==0) {
this.tian=this.tian+29;
}else {
this.tian=this.tian+28;
}
}
}
this.tian=this.tian+1;
return this.tian;
}
}
//创建类计算查询月的第一天为星期几
class XingQi{
public int xingqi;
//无参构造方法
public XingQi() {
}
//通过有参构造方法将计算出来的天数传入
//通过对传进的参数求余得出星期数
public XingQi(int tian) {
this.xingqi=tian%7;
}
//返回星期数
public int getXinQi() {
return this.xingqi;
}
}
//创建类将相关信息打印出来
class Print{
public int xingqi;
public int nian;
public int yue;
public int tian;
//无参构造方法
public Print(){
}
//三参构造方法,将星期数,年,月传入
public Print(int xingqi,int nian,int yue){
this.xingqi=xingqi;
this.nian=nian;
this.yue=yue;
}
//通过判断语句判断出出对应月份的天数
public void SuanTian() {
if(this.yue==1 || this.yue==3 || this.yue==5 || this.yue==7 || this.yue==8 || this.yue==10 || this.yue==12) {
this.tian=31;
}else if(this.yue==4 || this.yue==6 || this.yue==9 || this.yue==11) {
this.tian=30;
}else if(this.yue==2) {
if(this.nian%4==0 && this.nian%100!=0) {
this.tian=29;
}else if(this.nian%400==0) {
this.tian=29;
}else {
this.tian=28;
}
}
}
//输出对应日历格式
public void Shuchu(){
int i=0;
int u=0;
int p=1;
System.out.println("======================================");
System.out.println(" "+"日"+" "+"一"+" "+"二"+" "+"三"+" "+"四"+" "+"五"+" "+"六");
for(i=1;i<=this.tian;i++) {
if(i==1) {
for(u=1;u<=this.xingqi;u++) {
System.out.print(" ");
p++;
}
}
if(i<10) {
System.out.print(" "+i);
}else {
System.out.print(" "+i);
}
if(p==7) {
System.out.print("\n");
p=0;
}
p++;
}
System.out.println("\n");
}
}