日历小程序(java)

 import java.util.Scanner;



public class MyCalendar {
/**
* 打印日历头
*/
public static void printTitle(){
System.out.println("星期日/t星期一/t星期二/t星期三/t星期四/t星期五/t星期六/t");
}
/**
* 判断year年的month月有几天
* @param year
* @param month
* @return
*/
public static int getDays(int year,int month){
switch (month) {
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;
default: 
if(year%400==0 || year%4==0 && year%100!=0){
return 29;
}else{
return 28;
}
}
}
/**
* 判断year年month月的第一天是星期几
*  星期天 0
*    星期一 1
*    ...
*    星期六 6
* @param year
* @param month
* @return
*/
public static int getWeekOfFirstDay(int year,int month){
//间隔的天数
int totalDays=0;
for (int i=1900;i<year;i++){
totalDays+=getYearDays(i);
}
for(int i=1;i<month;i++){
totalDays+=getDays(year,i);
}
return (totalDays+1)%7;
}
/**
* 判断该年有多少天
* @param year
* @return
*/
public static int getYearDays(int year){
if(year%400==0 || year%4==0 && year%100!=0){
return 366;
}else{
return 365;
}
}
public static void main(String[] args) {
//打印首行
System.out.println("************欢迎使用万年历************");
Scanner input=new Scanner(System.in);
System.out.print("/n请输入年:");
//确定年和月
int year=input.nextInt();
System.out.print("/n请输入月:");
int month=input.nextInt();
System.out.println("/n/n");
/**
* 打印日历
* 1. 打印日历头
* 2. 确定月的天数
*    2.1 确定闰年还是平年
*    2.2 确定大小月
* 3. 确定该月的第一天是星期几
*    3.1 使用7个数字分别表示星期几
*    星期天 0
*    星期一 1
*    ...
*    星期六 6
*    
*    3.2 分析出计算公式 (1+间隔天数)%7
*      3.2.1 计算间隔天数
*     比如计算 1900年 n月的的第一天是星期几   (前n-1个月天数+1)%7
* 比如计算 n年m月的的第一天是星期几   (前(n-1900)年的天数的总和 + n年前m-1个月天数+1)%7
*    
* 4.开始打印
* 第一天是星期几就打印几个 '/t'  然后循环。这个月有几天,就循环多少次
*    
*    
*/
//打印日历头
printTitle();
//获取月的天数
int monthDays=getDays(year,month);
//第一天是星期几
int firstDay=getWeekOfFirstDay(year,month);
// 打印日历
printCalendar(monthDays,firstDay);
}
/**
* 打印日历
*/
public static void printCalendar(int monthDays,int firstDay){
for(int i=0;i<firstDay;i++){
System.out.print("/t");
}
for(int i=1;i<=monthDays;i++){
System.out.print(i+"/t");
if((i+firstDay)%7==0){
System.out.println();
}
}
}

}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值