日历的制作
这是记录我的上机作业的贴,要求如下:
1.编写一个程序,程序提供两种功能:
-
根据用户输入的年份输出该年日历。
-
根据用户输入的日期,输出该天星期。
程序应具有良好的人机交互性能,即:程序应向用户提示功能说明,并可根据用户的功能选择,执行对应的功能,并给出带详细描述信息的最终执行结果。
//A HarryChen Code!
//V1.0.2
import java.util.Scanner;
public class Mycalendar {
public static void main(String[] args){
class Date
{
int day = 1, month = 1, year , mdays;
boolean leap = true;
public boolean isLeap()
{
if(year%4==0&&year%100!=0||year%400==0) leap = true;
else leap = false;
return leap;
}
public int ToNewYear()
{
switch (month){
case 1: mdays = day;break;
case 2: mdays = 31+day;break;
case 3: mdays = 31+28+day;break;
case 4: mdays = 90+day;break;
case 5: mdays = 120+day;break;
case 6: mdays = 151+day;break;
case 7: mdays = 181+day;break;
case 8: mdays = 212+day;break;
case 9: mdays = 243+day;break;
case 10: mdays = 273+day;break;
case 11: mdays = 304+day;break;
case 12: mdays = 334+day;break;
}
mdays--;
return mdays;
}
public int counts(Date standard)
{
int days=0;
Date i=new Date();
for(i.year = standard.year;i.year<this.year;i.year++)
{
if(i.isLeap()) days += 366;
else days += 365;
}
if(this.isLeap()&&this.month>2) days++;
return days+this.ToNewYear();
}
public int goweek(Date standard)
{
return this.counts(standard)%7+1;
}
}
Scanner in = new Scanner(System.in);
Date theday = new Date();
Date standard = new Date();
standard.year = 2001;
standard.month = 1;
standard.day = 1;
System.out.println("请选择功能:1:打印日历2:日期计算器");
int mode = in.nextInt();
if(mode==2)
{
System.out.print("请依次输入年 月 日!");
theday.year = in.nextInt();
theday.month = in.nextInt();
theday.day = in.nextInt();
while(theday.year<standard.year) standard.year -= 28;
while(theday.year-standard.year>29) standard.year += 28;
System.out.println
(theday.year+"年"+theday.month+"月"+theday.day+"日 星期" +theday.goweek(standard));
}
if(mode==1)
{
System.out.println("请输入年份");
theday.year = in.nextInt();
theday.month = theday.day=1;
int weekday_of_NY = theday.goweek(standard);
System.out.println(weekday_of_NY);
System.out.println(" 1 2 3 4 5 6 7");
int sit = 1;
for(int imonth = 1;imonth <= 12;imonth++)
{
System.out.printf("%d月\n",imonth);
for(int i = 0;i < weekday_of_NY-1;i++,sit++)
System.out.print(" ");
for(int iday = 1;iday <= 31;iday++,sit++)
{
if(imonth==2&&theday.isLeap()&&iday==30) break;
if(imonth==2&&!theday.isLeap()&&iday==29) break;
if((imonth==4||imonth==6||imonth==9||imonth==11)&&iday==31) break;
System.out.printf("%3d",iday);
if((iday+weekday_of_NY-1)%7==0)
{
System.out.printf("\n");
sit = 0;
}
}
weekday_of_NY = sit;
System.out.printf("\n");
}
}
in.close();
}
}
然后我又上了一节课,对代码进行了小改动。(还是感觉好粗糙的~~~以后再改)
package dateclass;
//A HarryChen Code!
//V1.0.3
import java.util.Scanner;
public class Mycalendar {
public static void main(String[] args){
class Date
{
Date(int a, int b,int c){
year = a;
month = b;
day = c;
}
int day, month, year, mdays;
boolean leap = true;
public boolean isLeap()
{
//此部分未做改动,故省略。
}
public int ToNewYear()
{
//此部分未做改动,故省略。
}
public int counts(Date standard)
{
int days=0;
Date i=new Date(0, 0, 0);
for(i.year = standard.year;i.year<this.year;i.year++)
{
if(i.isLeap()) days += 366;
else days += 365;
}
if(this.isLeap()&&this.month>2) days++;
return days+this.ToNewYear();
}
public int goweek(Date standard)
{
//此部分未做改动,故省略。
}
}
Scanner in = new Scanner(System.in);
Date standard = new Date(2001, 1, 1);
System.out.println("请选择功能:1:打印日历2:日期计算器");
int mode = in.nextInt();
if(mode==2)
{
System.out.print("请依次输入年 月 日!");
int a = in.nextInt();
int b = in.nextInt();
int c = in.nextInt();
Date theday = new Date(a, b, c);
while(theday.year<standard.year) standard.year -= 28;
while(theday.year-standard.year>29) standard.year += 28;
System.out.println
(theday.year+"年"+theday.month+"月"+theday.day+"日 星期" +theday.goweek(standard));
}
if(mode==1)
{
System.out.println("请输入年份");
int a = in.nextInt();
Date theday = new Date(a,1,1);
int weekday_of_NY = theday.goweek(standard);
System.out.println(" 1 2 3 4 5 6 7");
int sit = 1;
for(int imonth = 1;imonth <= 12;imonth++)
{
//此部分未做改动,故省略。
}
}
in.close();
}
}