Java-万年历的DOS控制台打印

import java.util.Scanner;
class Calendar
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
System.out.println("输入年份");
int year=sc.nextInt();
System.out.println("输入月份");
int month=sc.nextInt();
System.out.println("输入日期");
int date=sc.nextInt();
boolean b=true;
int sum=betweenvalue(year);//输入的年份年初距离1900年1月1日的天数
b=isrunnian(year);//闰年判断;TRUE为闰年
//关于输入的日期值是否合法的判断,合法才能继续打印
boolean a=judge(b,month,date);
if(a){

int days=monthday(month,b);//月份的天数
int sum1=occurrence(month,date,b,sum );//输入的日期包括输入的那天距离1900年1月1日的天数
//12生肖方法调用
chineseZodiac(year);
print(year,sum1,month,b,date,sum);//打印万年历
}
else
return;
}

//计算12生肖
public static void chineseZodiac(int year)
{
int i=(year-1899)%12;
switch(i)
{
case 1:
System.out.print("子鼠年"+" ");break;
case 2:
System.out.print("丑牛年"+" ");break;
case 3:
System.out.print("寅虎年"+" ");break;
case 4:
System.out.print("卯兔年"+" ");break;
case 5:
System.out.print("辰龙年"+" ");break;
case 6:
System.out.print("巳蛇年"+" ");break;
case 7:
System.out.print("午马年"+" ");break;
case 8:
System.out.print("未羊年"+" ");break;
case 9:
System.out.print("申猴年"+" ");break;
case 10:
System.out.print("酉鸡年"+" ");break;
case 11:
System.out.print("戌狗年"+" ");break;
case 0:
System.out.print("亥猪年"+" ");break;
}

}
//月份日期值的合法性判断
public static boolean judge(boolean b,int month,int date)
{
boolean c=true;
int a[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(b)
{
a[2]=29;//闰年2月29天
}
if(month<1||month>12)
{
System.out.println("月份值不存在");
c=false;
}
else if( date<0 || date > a[month])
{
System.out.println("当前月不存在此日期");
c=false;
}
return c;
}

//打印万年历
public static void print(int year,int sum1,int month,boolean b,int date,int sum)
{
int a[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(b)
{
a[2]=29;//闰年2月29天
}

int temp=sum1%7;
if(temp==0)
System.out.println(year+"年"+month+"月"+date+"日:是 星期日");
else
System.out.println(year+"年"+month+"月"+date+"日:是 星期"+temp);


System.out.println("一\t二\t三\t四\t五\t六\t日");
int count=0;//保存一行打印的天数

//月初第一天前面的空格数计算
int sum2=sum;
for(int i=1;i<month;i++ )
{
sum2 +=a[i];
}
int t=sum2%7;//月初前面的空格数
for(int m=1;m<=t;m++)//打印月初前面的空格数
{
System.out.print(" "+"\t");
count++;
}

for(int q=1;q<=a[month];q++)
{
System.out.print(q+"\t");
count++;
if(count%7==0)
{
System.out.println();
System.out.println();
count=0;
}
}
}
//计算到年初的天数
public static int occurrence(int month,int date,boolean b,int sum)
{
int sum2=sum;
for(int i=1;i<month;i++ )
{
int a[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(b)
{
a[2]=29;//闰年2月29天
}
sum2 +=a[i];
}
sum2+=date;
return sum2;
}
public static int betweenvalue(int y)
{
int sum=0;
for( int i=1900;i<y;i++)//统计1900年到输入的年份开始所过的天数
{
if(i%4==0 &&i%100!=0||i%400==0)//注意不要在内部加括号,否则会出错
sum+=366;
else
sum+=365;
}
return sum;
}
public static int monthday(int month,boolean b)//月份天数判断
{
int day=30;
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:day=31;break;
case 4:
case 6:
case 9:
case 11:day=30;break;
case 2:
if(b){
day=29;
}
else
day=28;
}
return day;
}
public static boolean isrunnian(int y)//闰年判断方法
{
boolean a=true;
if(y%4==0 &&y%100!=0||y%400==0)
a=true;
else
a=false;
return (a);
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值