• 今天写了个Java程序 - [身边事]

    2008年04月06日

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://hfc.blogbus.com/logs/18448596.html

    日历来的,花了我2个小时

    import javax.swing.JOptionPane;

    public class Calender {
           
      
        public static void main(String[] args) {
            //分别输入年份和1月1日是星期几
            String yearString = JOptionPane.showInputDialog("输入年份(1900-2100):");
            int year=Integer.parseInt(yearString);
            String weekdayString = JOptionPane.showInputDialog("该年1月1日是星期几?\n"+
             "输入“1”表示星期一,“2”表示星期二,如此类推(只能输入1-7的整数)");
            int weekday=Integer.parseInt(weekdayString);
           
            //weekdayNext变量为提示下一个月的首日的星期
            int weekdayNext=1;
            //定义日历的题目
            String output_00 = "Calender of "+year;
            output_00 +="\n____________________________________\n";
           
            //用month数组储存月份及其名字
            String[] Months = new String[13] ;
            for (int i_m=1;i_m<=12;i_m++)
             Months[i_m]=i_m+"月";
            //用output数组储存各月份的日历
            String[] output = new String[13] ;
           
            //检查闰年
            int runyear=1;
            if ((year%4==0&&year%100!=0)||year%400==0)
             runyear=29;
            else
             runyear=28;
           
            //分别制作各月份的日历
            for(int m=1;m<=12;m++){
             switch (m)
             {
              case 1://输入月的标题
               output[m]+="      "+Months[m]+"       "+"\n_______________________________________\n"+
             "MON    TUE    WED    THU    FRI    SAT    SUN\n";
                  //通过weekday变量确定首日的位置
                  if (weekday>1)
                  {for (int i_sp=2;i_sp<=weekday;i_sp++)
                  output[m]+="            ";}
                  //分别输入各日子
                  for (int i=1;i<=31;i++){
                  if (i<9)
                  {if ((weekday+i-1)%7==0)
                    output[m]+=i+" \n";
                   else
                    output[m]+=i+"          ";}
                  else if (i==9)
                  {if ((weekday+i-1)%7==0)
                    output[m]+=i+" \n";
                   else
                    output[m]+=i+"        ";}
                  else
                   {if ((weekday+i-1)%7==0)
                    output[m]+=i+" \n";
                   else
                    output[m]+=i+"       ";}
                  }
                  //计算下一个月首日的位置
                  weekdayNext=((31-(8-weekday))%7)+1;
                break;
              case 2://输入月的标题
               output[m]+="\n       "+Months[m]+"       "+"\n_______________________________________\n"+
             "MON    TUE    WED    THU    FRI    SAT    SUN\n";
               //通过weekdayNext变量确定首日的位置
                    if (weekdayNext>1)
                    {for (int i_sp=2;i_sp<=weekdayNext;i_sp++)
                     output[m]+="            ";}
               //分别输入各日子
                  for (int i=1;i<=runyear;i++){
                  if (i<9)
                  {if ((weekdayNext+i-1)%7==0)
                    output[m]+=i+" \n";
                   else
                    output[m]+=i+"          ";}
                  else if (i==9)
                  {if ((weekdayNext+i-1)%7==0)
                    output[m]+=i+" \n";
                   else
                    output[m]+=i+"        ";}
                  else
                   {if ((weekdayNext+i-1)%7==0)
                    output[m]+=i+" \n";
                   else
                    output[m]+=i+"       ";}
                  }
                  //计算下一个月首日的位置
                  weekdayNext=((runyear-(8-weekdayNext))%7)+1;
                break;
                
              case 3: case 5: case 7: case 8: case 10: case 12:
               //输入月的标题
               output[m]+="\n       "+Months[m]+"       "+"\n_______________________________________\n"+
             "MON    TUE    WED    THU    FRI    SAT    SUN\n";
               //通过weekdayNext变量确定首日的位置
                    if (weekdayNext>1)
                    {for (int i_sp=2;i_sp<=weekdayNext;i_sp++)
                     output[m]+="            ";}
               //分别输入各日子
                  for (int i=1;i<=31;i++){
                  if (i<9)
                  {if ((weekdayNext+i-1)%7==0)
                    output[m]+=i+" \n";
                   else
                    output[m]+=i+"          ";}
                  else if (i==9)
                  {if ((weekdayNext+i-1)%7==0)
                    output[m]+=i+" \n";
                   else
                    output[m]+=i+"        ";}
                  else
                   {if ((weekdayNext+i-1)%7==0)
                    output[m]+=i+" \n";
                   else
                    output[m]+=i+"       ";}
                  }
                  //计算下一个月首日的位置
                  weekdayNext=((31-(8-weekdayNext))%7)+1;
               break;
             
              case 4: case 6: case 9: case 11:
               //输入月的标题
               output[m]+="\n       "+Months[m]+"       "+"\n_______________________________________\n"+
             "MON    TUE    WED    THU    FRI    SAT    SUN\n";
               //通过weekdayNext变量确定首日的位置
                    if (weekdayNext>1)
                    {for (int i_sp=2;i_sp<=weekdayNext;i_sp++)
                     output[m]+="            ";}
               //分别输入各日子
                  for (int i=1;i<=30;i++){
                  if (i<9)
                  {if ((weekdayNext+i-1)%7==0)
                    output[m]+=i+" \n";
                   else
                    output[m]+=i+"          ";}
                  else if (i==9)
                  {if ((weekdayNext+i-1)%7==0)
                    output[m]+=i+" \n";
                   else
                    output[m]+=i+"        ";}
                  else
                   {if ((weekdayNext+i-1)%7==0)
                    output[m]+=i+" \n";
                   else
                    output[m]+=i+"       ";}
                  }
                  //计算下一个月首日的位置
                  weekdayNext=((30-(8-weekdayNext))%7)+1;
               break;
            }
            }
             //用outputFinal储存日历标题和各月日历
             String outputFinal = output_00;
             for (int i_f=1;i_f<=12;i_f++)
             outputFinal += output[i_f];
             
             //输出日历
       JOptionPane.showMessageDialog(null,outputFinal);
    }
    }


    随机文章:

    21点...by Java 2008年04月27日
    课程表 2008年03月16日

    收藏到:Del.icio.us




发表评论

您将收到博主的回复邮件
记住我
  • Google向你推荐