控制台日历-java

 1 //输入年份与月份,打印出日历
 2     //1900-1-1 星期一
 3     public static void exercise15(){
 4         Scanner input=new Scanner(System.in);
 5         System.out.print("请输入年份:");
 6     int year=input.nextInt();
 7         System.out.print("请输入月份:");
 8     int moth=input.nextInt();
 9     //判断年份输入是否合法
10     if (year>1900) {            
11     //判断月份输入是否合法
12     if (moth>12||moth<0) {
13         System.out.println("你输入的月份非法!");
14         exercise15();
15     }
16     else{
17         System.out.println("\t"+year+"年的"+moth+"月日历如下");
18         System.out.print("日\t一\t二\t三\t四\t五\t六\n");
19         System.out.println("********************************************************************");        
20         int tnum=0;//保存输入月份前已经经历天数
21         for (int i=1900;i<year ;i++ ) {//输入年份的开始与1900-1-1经历多少天
22             if ((i%4==0 && i%100!=0)|| i%400==0) {
23                 tnum=tnum+366;
24             }
25             else{
26                 tnum=tnum+365;
27             }
28         }
29         for (int i=1;i<=moth-1 ;i++ ) {//到前一个月的天数
30             if (i==2) {
31                 tnum+=28;
32             }
33             else if(i==4||i==6||i==9||i==11){
34                 tnum+=30;
35             }
36             else  tnum+=31;
37         }
38         int ye=0;
39         if(moth==4||moth==6||moth==9||moth==11){//判断输入月份天数
40         ye=30;
41         }else if(moth==2)
42                 ye=28;
43                 else ye=31;
44 
45         //判断输入年是否为闰年
46         if ((year%4==0 && year%100!=0)|| year%400==0) {
47                 if (moth>2) {//是闰年且输入月份大于2月,总天数+1
48                         tnum++;
49                 }
50             
51                 if(moth==2)//是闰年且输入月份为2月 月份天数+1
52                 ye=29;
53             }
54         //计算输入月份星期起点
55         int xx=(tnum+1)%7;
56             for (int j=1;j<=xx ;j++ ) {//输出第一行的空格
57                 System.out.print(" \t");
58             }
59             int j=1;
60                 for (;j<=7-xx ;j++ ) {//输出第一行日历
61                 System.out.print(j+"  \t");
62             }
63         
64             for (;j<=ye ;j++ ) {//输出其他行日历
65                 if ((j+xx-1)%7==0) {
66                     System.out.print("  \n");
67                 }
68                 System.out.print(j+"  \t");
69             }    
70 
71     }
72     }else{
73         System.out.println("你输入的年份非法!");
74         exercise15();
75     }
76     }
 1 public static void calendar(){//程序起头
 2             Scanner input=new Scanner(System.in);
 3             System.out.print("请输入年份");
 4             int year=input.nextInt();
 5             System.out.print("请输入月份");
 6             int month=input.nextInt();
 7             //判断输入值
 8             if (year<1900||(month>12&&month<1)) {
 9                 System.out.print("输入的年份或月份有误!请重试:");
10                 calendar();
11             }else{
12                 //获取1号星期数
13             int weekNum=(calendarYearDayeNum( year)+calendarMonthDayeNum(year,month))%7;
14             calendarDisplay( weekNum,month, year);
15             System.out.println("输入eixt结束本程序!输入其他继续使用!");
16             System.out.print("请输入你的选项:");
17             String continu=input.next();
18             if ("eixt".equals("continu")) {
19                 return;
20             }
21             calendar();
22         }            
23         }
24         
25         //判断年份是否为闰年
26         public static boolean calendarLeapYear(int year){
27             //判断year的合法性
28         boolean flag=false;//初始化为不是闰年
29         if((year%4==0&&year%100!=0)||year%400==0)
30         flag=true;//是闰年返回true
31         return flag;
32         }
33 
34         //根据年份和月份,输出这个月有多少天。
35         public static int calendarMonthNum(int year,int month){
36             int daysNum=0;
37             if(month==4||month==6||month==9||month==11) 
38                 daysNum=30;
39             else if (month==2) {        
40                 daysNum=28;
41                 if (calendarLeapYear(year)) {//是闰年二月加一天
42                     daysNum+=1;
43                 }
44             }
45             else{//其余的是大月
46                 daysNum=31;
47             }
48             return daysNum;
49         }
50 
51         //3:根据年份,求这一年的1。1日离1900年1.1的天数
52         public static int calendarYearDayeNum(int year){
53             int daysSum=0;//记录天数
54             for (int i=1900;i<year ;i++ ) {
55                 daysSum+=365;//默认每年为365天
56                 if (calendarLeapYear(i)) {//是闰年加一天
57                     daysSum+=1;
58                 }
59             }
60             return daysSum;
61         }
62 
63         //4:根据年份和月份,求这一年的这个月的1号离这一年的1.1号的天数。
64         public static int calendarMonthDayeNum(int year,int month){
65             int monthSum=0;//记录天数
66             for (int i=1;i<month ;i++ ) {
67                 monthSum+=calendarMonthNum(year,i);//调用求月份天数方法
68             }
69             return monthSum;
70         }
71 
72
//需求,根据1号的星期打印出这个月的日历
        //num 星期数  小于7
        public static void calendarDisplay(int num,int month,int year){
            //打印头部
            System.out.println("\t\t  "+year+"年的"+month+"月");
            System.out.println("------------------------------------------------------");
            System.out.print("日\t一\t二\t三\t四\t五\t六\n");
            //打印第一空格
            num=num%7;

            for (int i=1;i<=num ;i++ ) {
                System.out.print("\t");
            }
            //打印日历
            for(int i=1;i<calendarMonthNum( year,month);i++){
                System.out.print(i+"\t");//输出日历
                if ((i+num)%7==0) {
                    System.out.print("\n");//到周六后换行
                }
            }
            System.out.print("\n");
        }

 

 

请输入年份:2017
请输入月份:7
        2017年的7月日历如下
日      一      二      三      四      五      六
********************************************************************
                                                1
2       3       4       5       6       7       8
9       10      11      12      13      14      15
16      17      18      19      20      21      22
23      24      25      26      27      28      29
30      31

 

转载于:https://www.cnblogs.com/sylwh/p/7214371.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值