在上基础班,闲来无事,敲了个代码!是实现日历查询的!
import java.util.*;
public class rili {
/*
* 1.千年历,输入当前日期会出现一个日历表;
* 2.先进行对于大于公元元年的年份进行日期统计;
* 3.然后利用算法进行计算,得出当前星期数和当前日历表;
*
* */
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int ts,nian,yueFen,x = 0,riZi; //定义变量
System.out.println("输入年\t");
nian=sc.nextInt(); //输入当前年份
System.out.println("输入月\t");
yueFen=sc.nextInt(); //输入当前月份
System.out.println("输入日\t");
riZi=sc.nextInt(); //输入当前日期
System.out.println("\t"+"\t"+nian+"\t年\t"+yueFen+"\t月"); //输出日历表的年份和月份
char[] week={'日','一','二','三','四','五','六'}; //定义顶部的日历星期数
topPrint(week); //输出日历表的星期排序
if(nian>0){
for(int i=0 ;i<=nian-1;i++){ //计算有多少年(不含当前年)
for(int j=1;j<=12;j++){ //计算天数(全年)
x +=tianShu(j,i); //计算所有年的总天数
}
}
for(int i=1;i<=yueFen-1;i++){ //当前年和以前年的总天数(不含当前月份)
x +=tianShu(i,nian);} //进行天数累加
}
int x1=printweek(x); //初步计算月的总天数 //计算当前月的1号是星期几
x +=riZi;//所有月的总天数 //具体计算当前日期的总天数
int j=0; //定义填充变量
for (int i=1;i<=(tianShu(yueFen,nian));i++){ //填数字和空白
while(j<=x1) {
j++;
if(x1!=6){ //判断1号是否为星期六,如果不是星期六填充
System.out.print("\t");
} else{
break; //1号是星期六的话退出循环
}
}
System.out.print(i);//输出日期了!
if(i==riZi){
System.out.print("*\t"); //判断是不是当前的日期如果是的话就在后面加个星号标识
}else {
System.out.print("\t"); //其余天不用加星号标识符
}
if((i+x1+1)%7==0)
System.out.println(); //输了7天换行
}
System.out.println(); //换行
System.out.println("今天是:星期"+week[printweek(x)]); //通过当前日期的总天数,算出当前的星期数
}
public static void topPrint(char[] week) { //输出顶部日历表头
for (int i=0;i<week.length;i++){
System.out.print(week[i]+"\t");
}
System.out.println();
}
public static int tianShu(int yueFen,int nian) { //判断月的天数,以作累加之用
int ts;
switch (yueFen){
case 1: //1,3,5,7,8,10,12月是31天用case贯穿!
;
case 3:
;
case 5:
;
case 7:
;
case 8:
;
case 10:
;
case 12:
ts=31;
break;
case 4: //4,6,9,11月是30天用case贯穿下
;
case 6:
;
case 9:
;
case 11:
ts=30;
break;
case 2: //二月比较特殊所以要判断是否是润年!
if (nian%4==0&&((nian%100!=0)||(nian%400==0))){
ts=29;
}else ts=28;
break;
default:
ts=0;
}
return ts; //返回月的天数
}
public static int printweek(int x){ //计算星期数
return ((x+5)%7); //以0年0月0日是星期1的基础上进行纠正
}
}
|
|