java——万年历

利用Java来实现万年历 

package demo;

import java.util.Scanner;


public class CalendarTest {
    public static void main(String[]args) {
        Scanner sc = new Scanner(System.in);
        Calendar c = new Calendar();
        System.out.println("请输入年份:");
        int year = sc.nextInt();
        System.out.println("请输入月份:");
        int month = sc.nextInt();
        c.show(year,month);
    }
}




class Calendar{
    //判断闰年和平年
    public boolean isLeapYear(int year){
        return ((year % 4 == 0)&&(year % 100 != 0)||(year % 400 == 0));
    }
    //获取指定月份的天数
    public int getTotalDaysOfMonth(int year,int month){
        int total;
        //判断月
        switch (month){
            case 1: case 3: case 5: case 7: case 8: case 12: case 10:
                total = 31;
                break;
            case 2:
                total = (isLeapYear(year)?29:28);
                break;
            default:
                total = 30;
                break;
        }
        return total;
    }
    public int getWeekOfMonth(int year,int month){
        int total = 0;
        for (int i = 1; i < year; ++i){
            total += (isLeapYear(year)?366:365);
        }
        for (int i = 1; i < month; ++i){
            total += getTotalDaysOfMonth(year,i);
        }
        total %= 7;
        total = (total+1)%7;
        return total;
    }
    public void show(int year,int month){
        System.out.println("\033[1;95m"+"\t\t"+" "+year+"年"+month+"月");
        System.out.println("\033[1;96m"+"---------------------------");
        String[] week = {"日","一","二","三","四","五","六"};
        for(int i = 0; i < 7; ++i){
            if(week[i].equals("六") || week[i].equals("日")) System.out.print("\033[32m"+week[i]+"\t");
            else System.out.print("\033[33m"+week[i]+"\t");
        }
        System.out.println();
        int weeks = getWeekOfMonth(year,month);
        for (int i = 0; i<weeks; ++i) System.out.print("\t");
        int days = getTotalDaysOfMonth(year,month);
        for (int i = weeks,j = 1; j <= days; ++i,++j){
            if (i % 7 == 0 || i % 7 == 6)System.out.print("\033[32m"+j+"\t");
            else System.out.print("\033[33m"+j+"\t");
            if ((i+1) % 7 ==0) System.out.println();
        }
        System.out.println();
    }
}

实现:

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是一个万年历的FPGA课程设计的Verilog代码和仿真: ``` module calendar( input clk, // 时钟信号 input reset, // 复位信号 output reg [3:0] year, // 年份 output reg [3:0] month, // 月份 output reg [4:0] day, // 日 output reg [2:0] week // 星期 ); // 闰年判断 wire leap_year = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0); // 每月天数 reg [6:0] days_in_month; always @(*) begin case (month) 4, 6, 9, 11: days_in_month = 30; 2: days_in_month = leap_year ? 29 : 28; default: days_in_month = 31; endcase end // 日历计算 reg [5:0] day_count; reg [2:0] day_of_week; always @(posedge clk or posedge reset) begin if (reset) begin year <= 0; month <= 1; day <= 1; week <= 0; day_count <= 0; day_of_week <= 0; end else begin if (day_count == 0) begin day_count <= 1; day_of_week <= (day_of_week == 6) ? 0 : day_of_week + 1; if (day == days_in_month) begin day <= 1; if (month == 12) begin month <= 1; year <= year + 1; end else begin month <= month + 1; end end else begin day <= day + 1; end end else begin day_count <= day_count + 1; end week <= (day_count + day_of_week) % 7; end end endmodule ``` 在上面的代码中,我们使用了一个状态机来计算每一天的日期和星期。在每个时钟上升沿,我们检查当前是否需要更新日历,以及更新哪些日期和星期。我们还使用一个闰年标志来计算每个月的天数。最后,我们将日历输出到四个输出端口。 以下是一个简单的仿真测试,它显示了日历的输出。在仿真中,我们提供了一个时钟信号和一个复位信号,以便在仿真开始时将日历复位为1月1日。 ``` module calendar_tb; reg clk; reg reset; wire [3:0] year; wire [3:0] month; wire [4:0] day; wire [2:0] week; calendar dut( .clk(clk), .reset(reset), .year(year), .month(month), .day(day), .week(week) ); initial begin clk = 0; reset = 1; #10 reset = 0; end always #5 clk = ~clk; initial begin $monitor("%d/%d/%d %d", year, month, day, week); #100 $finish; end endmodule ``` 在上面的仿真测试中,我们使用了一个monitor语句来跟踪日历的输出,并在仿真完成时结束仿真。我们还提供了一个时钟和复位信号以启动仿真。 希望这个代码和仿真对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1219忆梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值