下面是北大青鸟Accp5.0课程S1中Java的指导学习1——万年历的代码: Calendar类: package java1.zd1; import java.util.*; /** * 万年历 * @author admin * 2009.7.16 */ public class Calendar { Scanner input=new Scanner(System.in); /** * 格式化输出空格 * @param weekDay 当月第一天星期几 * @param sumDay 当月距1900.1.1的天数 * @param year 输入的年份 * @param month 输入的月份 */ public void print(int weekDay,int sumDay,int year,int month){ weekDay=1+sumDay%7; //判断每月的第一天是星期几 //若星期天,则置为0,则不输出空格 if(weekDay==7){ weekDay=0; } System.out.println("/n"+year+"年"+month+"月的日历为:"); System.out.println("日/t一/t二/t三/t四/t五/t六"); //循环输出空格 for(int i=0;i<weekDay;i++){ System.out.print("/t"); } } /** * 判断年份是否为闰年 * @param year 需要判断的年份 * @return 返回当年的天数 */ public int leapYear(int year){ int dayOfYear; //一年的天数 if((year%4==0&&year%100!=0)||(year%400==0)){ dayOfYear=366; //年份为闰年,天数是366天 }else{ dayOfYear=365; //年份为平年,天数是365天 } return dayOfYear; //返回当年的天数 } /** * 计算月份的天数 * @param year 需要判断的年份 * @param month 需要判断的月份 * @return 返回当月的天数 */ public int dayOfMonth(int year,int month){ int day=0; //一月的天数 switch(month){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: day=31; //大月的天数为31天 break; case 2: //判断2月的天数 switch(leapYear(year)){ case 365: day=28; //平年为28天 break; case 366: day=29; //闰年为29天 break; } break; case 4: case 6: case 9: case 11: day=30; //小月的天数为30天 break; default: day=0; //默认为0天 break; } return day; //返回当月的天数 } /** * 计算当年距1900年1月1日的天数 * @param year 输入的年份 * @return 返回相差的总天数 */ public int daysOfYears(int year){ int daysOfYears=0; //相距的总天数 //循环计算相差的天数 for(int i=1900;i<year;i++){ daysOfYears=daysOfYears+leapYear(i); } return daysOfYears; //返回总天数 } /** * 判断选择的是打印一年、一月、一天的日历 * @param num 选择操作 */ public void work(int num){ for(int i=0;i<25;i++){ System.out.print("*"); } switch(num){ case 1: //打印一年的日历 System.out.print("/n请输入年份:"); int year=input.nextInt(); calcYear(year); break; case 2: //打印一月的日历 System.out.print("/n请输入年份:"); year=input.nextInt(); System.out.print("请输入月份:"); int month=input.nextInt(); clacMonth(year, month); break; case 3: //判断某天是星期几 System.out.print("/n请输入年份:"); year=input.nextInt(); System.out.print("请输入月份:"); month=input.nextInt(); System.out.print("请输入天日:"); int day=input.nextInt(); clacDay(year, month, day); break; default: //退出查询系统 System.out.println("/n退出万年历查询系统,欢迎使用!"); break; } } /** * 循环操作菜单 */ public void systemMenu(){ //int year,month,day; System.out.println("/n查询完毕!/n0.退出查询系统/n1.返回上一级菜单"); System.out.print("请选择操作:"); int num=input.nextInt(); //选择操作 switch(num){ case 0: System.out.println("/n查询完毕,谢谢使用万年历查询系统!"); break; case 1: for(int i=0;i<25;i++){ System.out.print("*"); } System.out.println("/n1.查询某一年/n2.查询某一月/n3.查询某一天/n0.退出系统"); System.out.print("请选择操作:"); int num1=input.nextInt(); //选择操作 work(num1); break; default: //退出查询系统 System.out.println("退出万年历查询系统,欢迎使用!"); break; } } /** * 打印一年的日历 * @param year 输入的年份 */ public void calcYear(int year){ int sumDay=daysOfYears(year); //差距年份的天数 int months; //月份 int weekDay=0; //某月第一天星期几 //计算某年某月距1990.1.1的天数 for( months=1;months<=12;months++){ sumDay=sumDay+dayOfMonth(year,(months-1)); print(weekDay,sumDay,year,months); for(int i=1;i<=dayOfMonth(year,months);i++){ System.out.print(i+"/t"); if((sumDay+i-1)%7+1==6&&i!=dayOfMonth(year,months)){ System.out.println(); } } System.out.println(); } systemMenu(); } /** * 打印某月的日历 * @param year 输入的年份 * @param month 输入的月份 */ public void clacMonth(int year,int month){ int sumDay=daysOfYears(year); for(int i=1;i<=month;i++){ sumDay=sumDay+dayOfMonth(year,(i-1)); } int weekDay=0; print(weekDay,sumDay,year,month); for(int i=1;i<=dayOfMonth(year,month);i++){ System.out.print(i+"/t"); if((sumDay+i-1)%7+1==6){ System.out.println(); } } System.out.println(); systemMenu(); } /** * 计算某天是星期几 * @param year 输入的年份 * @param month 输入的月份 * @param day 输入的某天 */ public void clacDay(int year,int month,int day){ int sumDay=daysOfYears(year); for(int i=1;i<=month;i++){ sumDay=sumDay+dayOfMonth(year,(i-1)); } int weekDay=(sumDay+day-1)%7+1; switch(weekDay){ case 1: System.out.println(year+"年"+month+"月"+day+"日是星期一"); break; case 2: System.out.println(year+"年"+month+"月"+day+"日是星期二"); break; case 3: System.out.println(year+"年"+month+"月"+day+"日是星期三"); break; case 4: System.out.println(year+"年"+month+"月"+day+"日是星期四"); break; case 5: System.out.println(year+"年"+month+"月"+day+"日是星期五"); break; case 6: System.out.println(year+"年"+month+"月"+day+"日是星期六"); break; case 7: System.out.println(year+"年"+month+"月"+day+"日是星期日"); break; } systemMenu(); } } TestCalendar类: package java1.zd1; import java.util.*; public class TestCalendar { public static void main(String[] args){ Scanner input=new Scanner(System.in); Calendar calendar=new Calendar(); System.out.println("欢迎使用万年历查询系统!"); for(int i=0;i<25;i++){ System.out.print("*"); } System.out.println("/n1.查询某一年/n2.查询某一月/n3.查询某一天/n0.退出系统"); System.out.print("请选择操作:"); int num=input.nextInt(); calendar.work(num); } }