日期:2014-05-20  浏览次数:20628 次

老师要求做一个日期查询,不知道有没错误。
要求输入年、月、日得到星期几和该月的日历。。。
做得自己都发觉很烂,不知道怎么改进,请达人指点
Java code

import java.util.Scanner;
class  WNL2
{
    public static void main(String[] args) 
    {
        Scanner sc=new Scanner(System.in);
        int a=4,c=1970,d,x=0,b,m,q;
        System.out.print("请输入大于1969年的年份:");
        do{
            b=sc.nextInt();
            if (b<1970){
                System.out.print("无效,请重新输大于1969的年份:");
        }
        }while(b<1970);
        System.out.print("请输入月:");
        do{
            m=sc.nextInt();
            if (m<1||m>12){
                System.out.print("无效,请重新输1~12之间的月份:");
        }
        }while(m<1||m>12);
        System.out.print("请输入日:");
        do{
            q=sc.nextInt();
            if (q<1||q>31){
                System.out.print("无效,请重新输1~31之间的日期:");
            }
        }while(q<1||q>31);
        if (m==2&&q>28&&!((b%4==0&&b/100!=0)||b/400==0)){
                System.out.print("无效,请重新输1~28之间的日期:");
                q=sc.nextInt();
        }
        if (m==2&&q>29&&((b%4==0&&b/100!=0)||b/400==0)){
                System.out.print("无效,请重新输1~29之间的日期:");
                q=sc.nextInt();
        }
        System.out.println("--------------------------------------");
                                            //以1970年1月1日星期4为参照;
        d=b-c;
        for (int i=0;i<d ;i++ ){
            c++;
            if ((c%4==0&&c/100!=0)||c/400==0){
                x++;                                //x计数器为闰年增加的天数;
                continue;
            }
        }
            int z=(d+x)%7;                            //z为增加天数取模(一个星期为7天);
            if ((c%4==0&&c/100!=0)||c/400==0){
                z=(d+x-1)%7;                        //如果该年是闰年则要减去多加的一天;
            }
        int y=a+z;                                    //y为4加上d年后多余的天数;
        if (a+z>7){
            y=a+z-7;                                //如果大于7则是下一个星期;
        }
        int s=0;                                    //用一个数组定义12个月的天数;
        int [] array=new int[]{31,28,31,30,31,30,31,31,30,31,30,31};
        for (int j=0;j<m-1 ;j++ ){
            if ((c%4==0&&c/100!=0)||c/400==0){
                array[1]=29;                        //闰年则二月29天;
            }
                    s+=array[j];
            }
            int w=(s+q)%7+y;
            if (w>7){
            w=w-7;                                    //当w-7的值为1时,则为星期天;
            }
        switch(w){
        case 2:System.out.println("您查询的日期是:星期一");break;
        case 3:System.out.println("您查询的日期是:星期二");break;
        case 4:System.out.println("您查询的日期是:星期三");break;
        case 5:System.out.println("您查询的日期是:星期四");break;
        case 6:System.out.println("您查询的日期是:星期五");break;
        case 7:System.out.println("您查询的日期是:星期六");break;
        case 8:System.out.println("您查询的日期是:星期天");break;
        default :System.out.println("您查询的日期是:星期天");
        }
        System.out.println("--------------------------------------");
//================================================以上为查询某日星期几的代码;
        System.out.println((m)+"月的所有日期为:");
        int l=s%7+y;
        if (l>7){
            l=l-7;
        }                                        //l代表每个月1号星期几;
        //System.out.println(l);
        System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
        for (int e=0;e<1 ;e++ ){
            int o=0;
            for (int h=0;h<l ;h++ ){            //需输入空格的次数;
                if (l==7)                        //当此月的第一天为星期一时,跳出;
                {
                    break;
                }
                o++;
                System.out.print("\t");
            }
            for (int p=1;p<=array[m-1] ;p++ ){    //从第几个开始输入日期(m-1)的意思为:在数组中存储的m月的天数下标是m-1;
                System.out.print(p+"\t");
                if (o+p==7||(o+p)%7==0){            //输到星期六则换行;
                        System.out.println();
            }
        }
        
        }
    }
}