java学习之——日历程序[控制台]

// 本程序的功能是输入年和月之后,会在控制台显示当月的日历。是学习java后第一个稍为完整的程序,尚未处理各点的异常。
// java实现,感谢 51自学网的 壁虎
// 作者: Tome  
// 日期: 2014.3.3




import java.util.*; //需要使用到键盘的输入,所以要引入这个文件


// 文件名为sample_calendar, 所以这个类名也被确定为sample_calendar,学java的第一个特别之处
public class sample_calendar {


//定义各月的天数,这里忽略了闰年, 这里要加public static,我自己摸索的,可以用。
public static int[] monthdays = {0,31,28,31,30,31,30,31,31,30,31,30,31};
// 定义星期字符串
public static String[] weeks = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};

// 一个很小的函数,用来确定某年是否是闰年,返回真代码是闰年,反之不是
private static boolean isRun(int y)
{
if(((y % 4== 0) && (y%100  != 0))|| y % 400 == 0 )
{
return true;
}
return false;
}

// 计算某年某月的第一天是周几,
// year 年份
// month 月份
private static int theFirstDay(int year, int month)
{
// 1900.1.1是周一,因此计划当月第一天与此相距多少天,再对7求模来确定月初是周几
// 计算这个时间分为两步,先是计划相距多少年,把各年的天数相加。
int days = 0;
if (year > 1900)
{
for( int y = 1900; y < year; y++)
{
if (isRun(y))
days += 366;
else
days += 365;
}
}


// 第二步 计算当年当月之前一共有多少天
if ( month > 1)
{
for (int m = 1; m < month; m++)
days += monthdays[m];

//判断是否闰年
if (( month > 2) && isRun(year)){
days ++;
}
}
// 再加上当日这一天
days++;
// 计算出当日是星期几,0代表周日
int week = days % 7;
return week;
}

// 入口程序,与C的main相当
public static void main(String[] args)
{
// 默认计显示2014  February的月历
int year = 2014;
int month = 2;

Scanner in = new Scanner(System.in);

// 输入年份,月份
System.out.println("Please input years:");
year = in.nextInt();
System.out.println("Please input months:");
month = in.nextInt();

// 计算月初是周几
int week = theFirstDay(year, month); 

// 计算当月一共有多少天
int monthDays = monthdays[month];
if ( ( month == 2) && isRun(year))
monthDays = 29;

// 开始显示日历
System.out.println("Calendar");
System.out.println(year+"年"+month+"月的日历如下:");
int loc = 0; //第行最多显示7天,loc用来定位显示位置,0代表行首

System.out.print("\n--------------------------------------------------");
// 打印表头,星期日到星期六
for(int i = 0; i < 7; i++)
System.out.print(weeks[i] + "\t");
System.out.println();


// first line,需要要特别处理一下,月初可能并不是周日,需要确定显示位置
if ((week != 0) && (true))
{
for (loc = 0; loc < week; loc ++)
{
System.out.print("\t");
}
}
// 显示剩下的各天
for (int data = 1; data <= monthDays; data++)
{
System.out.print(data+"\t");
loc++;
if(loc % 7 == 0)
System.out.println();
}

System.out.print("\n--------------------------------------------------");
}//主函数结束
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值