实验:制作万年历

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");
        
    }
    
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值