编写高级万年日历
要求:日历中的每一个功能都要实现
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Rili {
//获取日期
Date date = new Date();
//获取月份
int months = Integer.parseInt(new SimpleDateFormat(“MM”).format(date));
//获取年份
int years = Integer.parseInt(new SimpleDateFormat(“yyyy”).format(date));
//用于存放从1900年1月1日以来的总天数
int days = 0;
//当前月的天数
int monthsDay = 0;
//星期几
String week = “”;
//当前星期几所表示的数字
int weekDay = 0;
//扫描器
Scanner sc = new Scanner(System.in);
//事件的年份
int[] workYears = new int[255];
//事件的年份
int[] workMonths = new int[255];
//事件的年份
int[] workDays = new int[255];
//事件的年份
String[] works = new String[255];
public static void main(String[] args) {
Rili pc = new Rili();
pc.start();
System.out.println(pc.date);
System.out.println(pc.months);
System.out.println(pc.years);
}
//开始方法
public void start() {
System.out.println("*****欢迎使用万年历*****\n\n");
System.out.println("1.浏览下个月输入【A】\t2.浏览上个月输入【D】");
System.out.println("3.浏览去年输入【W】\t4.浏览明年输入【S】");
System.out.println("5.重新开始输入【Q】\t6.退出程序输入【E】");
System.out.println("7.添加记事本【F】\t8.[浏览/删除]全部记事【R】");
System.out.println("9.[删除/修改]记事【X】\t10.菜单提示......【C】");
System.out.println("11.显示当前时间【T】\n\n");
//调用主菜单方法
menu();
}
//主菜单
public void menu() {
//用于控制循环
boolean flag = true;
while(true) {
System.out.print("菜单输入:");
String answer = sc.next();
switch(answer) {
case "1":
case "A":
case "a":
//执行功能1的方法
prox();
specific();
break;
case "2":
case "D":
case "d":
lastMonth();
specific();
break;
case "3":
case "W":
case "w":
specific();
lastYear();
break;
case "4":
case "S":
case "s":
specific();
nextYear();
break;
case "5":
case "Q":
case "q":
fate();
break;
case "6":
case "E":
case "e":
System.out.println("退出我行我速万年历系统!!!");
flag = false;
break;
case "7":
case "F":
case "f":
notepad();
break;
case "8":
case "R":
case "r":
showDelAll();
break;
case "9":
case "X":
case "x":
updateDel();
break;
case "10":
case "C":
case "c":
menuDisplay();
break;
case "11":
case "T":
case "t":
currentDate();
break;
}
}
}
//浏览下个月的方法
public void prox() {
if(months == 12) {
months = 1;
years += 1;
}
else {
months += 1;
}
//用于存放从1900年1月1日以来的总天数
days = 0;
//计算从1900年1月1日到当前年上一年的总天数
sumDate();
//需要加上月的天数
count();
}
//计算从1900年1月1日到当前年上一年的总天数
public void sumDate() {
for(int year = 1900;year<years;year++) {
if((year%4==0&&year%100 !=0) || year%400==0) {
days += 366;
}else {
days += 365;
}
}
}
public void count() {
for (int month = 1; month < months; month++) {
switch(month) {
case 2:
if((years%4==0&&years%100 !=0) || years%400==0) {
days += 29;
}else {
days += 28;
}
break;
case 4:
case 6:
case 9:
case 11:
days += 30;
break;
default:
days += 31;
break;
}
}
//当前月有多少天
switch(months) {
case 2:
if((years%4==0&&years%100 !=0) || years%400==0) {
monthsDay= 29;
}else {
monthsDay= 28;
}
break;
case 4:
case 6:
case 9:
case 11:
monthsDay= 30;
break;
default:
monthsDay= 31;
break;
}
week();
show();
}
//浏览上个月的方法
public void lastMonth() {
if(months == 1) {
months = 12;
years -= 1;
}
else {
months -= 1;
}
//用于存放从1900年1月1日以来的总天数
days = 0;
//计算从1900年1月1日到当前年上一年的总天数
sumDate();
//需要加上月的天数
count();
}
//浏览上一年
public void lastYear() {
years -= 1;
//用于存放从1900年1月1日以来的总天数
days = 0;
//计算从1900年1月1日到当前年上一年的总天数
sumDate();
//需要加上月的天数
count();
}
//浏览下一年
public void nextYear() {
years += 1;
//用于存放从1900年1月1日以来的总天数
days = 0;
//计算从1900年1月1日到当前年上一年的总天数
sumDate();
//需要加上月的天数
count();
}
//重新开始输入方法
public void fate() {
Scanner sc = new Scanner(System.in);
System.out.print("输入年份:");
years = sc.nextInt();
while(true) {
System.out.print("输入月份:");
months = sc.nextInt();
if(months>=1 && months<=12) {
break;
}else {
System.out.println("输入月份错误,请重新输入!\n");
}
}
//用于存放从1900年1月1日以来的总天数
days = 0;
//计算整年数,从1900年1月1日到当前年上一年的总天数,
for (int year = 1900; year <= years-1; year++) {
if((year%4==0&&year%100 !=0) || year%400==0) {
days += 366;
}else {
days += 365;
}
}
//需要加上月的天数
count();
}
//把当前星期所表示的数字转化为中文
public void week() {
//距1900.1.1的天数加后除以7的余数,余数为0表示星期日,。。。余数为6表示星期六
weekDay = (days+1)%7;
switch(weekDay) {
case 0:
week="星期日";
break;
case 1:
week="星期一";
break;
case 2:
week="星期二";
break;
case 3:
week="星期三";
break;
case 4:
week="星期四";
break;
case 5:
week="星期五";
break;
case 6:
week="星期六";
break;
}
System.out.println(years+"年"+months+"月的第一天是:"+week);
System.out.println();
}
//显示日历
public void show() {
System.out.println("星期天\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
for (int i = 1; i <=weekDay; i++) {
System.out.print("\t");
}
for (int day = 1; day <= monthsDay; day++) {
System.out.print(day+"\t");
if((days + day)%7 == 6) {//这里表示当为星期六时需要换行
System.out.println();
}
}
//显示节日
feast();
}
//获取节假日方法
public void feast() {
System.out.println();
switch(months) {
case 1:
System.out.println("1.1日元旦");
break;
case 2:
System.out.println("2.14日情人节");
break;
case 3:
System.out.println("3.8日妇女节");
break;
case 4:
System.out.println("4.1日愚人节");
break;
case 5:
System.out.println("5.1日劳动节\n5.4日青年节");
break;
case 6:
System.out.println("6.1日儿童节");
break;
case 7:
System.out.println("7.1日建党节");
break;
case 8:
System.out.println("8.1日建军节");
break;
case 9:
System.out.println("9.10日教师节");
break;
case 10:
System.out.println("10.1日国庆节");
break;
case 11:
System.out.println("11.26日感恩节");
break;
case 12:
System.out.println("12.24日平安夜\n12.25圣诞节");
break;
}
System.out.println("\n");
}
//显示提示菜单
public void menuDisplay() {
System.out.println("1.浏览下月输入【A】\t2.浏览上月输入【D】");
System.out.println("3.浏览去年输入【W】\t4.浏览明年输入【S】");
System.out.println("5.重新开始输入【Q】\t6.退出程序输入【E】");
System.out.println("7.添加记事输入【F】\t8.[浏览/删除]全部记事【R】");
System.out.println("9.[删除/修改]记事【X】\t10.菜单提示……【C】");
System.out.println("11.显示当前时间【T】\n\n");
}
//添加记事
public void notepad() {
int index = 0;
while(true) {
if(works[index] == null) {
break;
}else {
index++;
if(index >= 255) {
System.out.println("记事已满,不能再添加新的记事!");
System.out.println("返回主界面");
return;
}
}
}
//获取年份
while(true) {
System.out.print("请输入想记事的年份:");
workYears[index] = sc.nextInt();
if(workYears[index] < 1900) {
System.out.println("输入的年份格式有误,请重新输入!");
}else {
break;
}
}
//获取月份
while(true) {
System.out.print("请输入想记事的月份(1-12):");
workMonths[index] = sc.nextInt();
if(workMonths[index] < 1 || workMonths[index] >12) {
System.out.println("输入的年份格式有误,请重新输入!");
}else {
break;
}
}
//获取月份
while(true) {
int rememberMonthDays = 0;
switch(workMonths[index]) {
case 2:
if((workDays[index]%4==0&&workDays[index]%100 !=0) || workDays[index]%400==0) {
rememberMonthDays= 29;
}else {
rememberMonthDays= 28;
}
break;
case 4:
case 6:
case 9:
case 11:
rememberMonthDays= 30;
break;
default:
rememberMonthDays= 31;
break;
}
System.out.print("请输入想记事的日期(1-"+rememberMonthDays+"):");
workDays[index] = sc.nextInt();
if(workDays[index] < 1 || workDays[index] > rememberMonthDays) {
System.out.println("输入的日期格式有误,请重新输入!");
}else {
break;
}
}
//记事内容
System.out.println("请输入记事内容:");
works[index] = sc.next();
//显示内容
System.out.println("添加完毕!创建记事:");
System.out.println("时间"+workYears[index]+"年"+workMonths[index]+"月"+workMonths[index]+"日");
System.out.println("【"+works[index]+"】\t位于:No."+index);
}
//显示和删除所有记事方法
public void showDelAll() {
System.out.println("你的记事如下:");
for (int i = 0; i < workDays.length; i++) {
if(works[i] != null) {//有事件才打印
System.out.println("记事:(日期:"+workYears[i]+"年"+workMonths[i]+"月"+workDays[i]+"日)");
System.out.println("内容:【"+works[i]+"】 编号:No."+i);
}
}
System.out.println();
System.out.print("输入【del】删除全部记事,其他键返回菜单:");
String answer = sc.next();
if(answer.equals("del")||answer.equals("DEL")) {//做删除操作
for (int i = 0; i < workDays.length; i++) {
if(works[i] != null) {//有事件才清掉
workYears[i] = 0;
workMonths[i] = 0;
workDays[i] = 0;
works[i] = null;
}
}
System.out.println("已删除全部记事!返回主菜单!!!\n");
}else {
System.out.println("取消删除全部记事!返回主菜单!!!\n");
}
}
//修改和删除
public void updateDel() {
System.out.print("需要修改(Y)/删除(N)???");
String answer = sc.next();
if(answer.equals("Y")||answer.equals("y")) {//修改
System.out.print("请输入需要修改的记事号码:No.");
int no = sc.nextInt();
if(works[no] == null) {
System.out.println("无此编号记事!退出修改程序……\n");
return;
}else {
System.out.println("记事:(日期:"+workYears[no]+"年"+workMonths[no]+"月"+workDays[no]+"日)");
System.out.println("内容:【"+works[no]+"】 编号:No."+no);
//修改事件//修改年份
while(true) {
System.out.print("请输入想修改记事的年份:");
workYears[no] = sc.nextInt();
System.out.println();
if(workYears[no] <1900) {
System.out.println("输入年份格式错误,请重新输入!\n");
}else {
break;
}
}
//修改月份
while(true) {
System.out.print("请输入想修改记事的月份(1-12):");
workMonths[no] = sc.nextInt();
System.out.println();
if(workMonths[no] < 1 || workMonths[no] > 12) {
System.out.println("输入月份格式错误,请重新输入!\n");
}else {
break;
}
}
//修改日期
while(true) {
//当前月天数
int rememberMonthDays = 0;
switch(workMonths[no]) {
case 2:
if((workYears[no]%4==0&&workYears[no]%100 !=0) || workYears[no]%400==0) {
rememberMonthDays= 29;
}else {
rememberMonthDays= 28;
}
break;
case 4:
case 6:
case 9:
case 11:
rememberMonthDays= 30;
break;
default:
rememberMonthDays= 31;
break;
}
System.out.print("请输入想修改记事的日期(1-"+rememberMonthDays+"):");
workDays[no] = sc.nextInt();
System.out.println();
if(workDays[no] < 1 || workDays[no] > rememberMonthDays) {
System.out.println("输入日期格式错误,请重新输入!\n");
}else {
break;
}
}
//修改事件内容
System.out.println("修改记事内容为:");
works[no] = sc.next();
System.out.println("修改记事完毕!");
return;
}
}else if(answer.equals("N")||answer.equals("n")){//删除
System.out.print("请输入需要删除的记事号码:No.");
int no = sc.nextInt();
if(works[no] == null) {
System.out.println("无此编号记事!退出删除程序……");
return;
}else {
System.out.println("记事:(日期:"+workYears[no]+"年"
+workMonths[no]+"月"+workDays[no]+"日)");
System.out.println("内容:【"+works[no]+"】 编号:No."+no);
System.out.println("确定删除(Y)???");
String answer2 = sc.next();
if(answer2.equals("Y")||answer2.equals("y")) {//删除
workYears[no] = 0;
workMonths[no] = 0;
workDays[no] = 0;
works[no] = null;
System.out.println("该号码记事已删除!");
System.out.println();
return;
}else {//取消删除
System.out.println("取消删除,返回主菜单!!!!!");
System.out.println();
return;
}
}
}else {//输入有误,返回主菜单
System.out.println("输入有误,返回主菜单!!!");
System.out.println();
}
}
//显示当前时间
public void currentDate() {
System.out.println("当前时间为:"+"".format("%tH", date)+":"+"".format("%tM", date)
+":"+"".format("%tS", date)+"\n\t"+"".format("%tF", date)+","+"".format("%tA", date));
}
//获取具体每月的事件
public void specific() {
int currentYear = years;
int currentMonth = months;
for (int i = 0; i < workDays.length; i++) {
if(currentYear == workYears[i]&¤tMonth == workMonths[i]) {
if(works[i] != null) {//有事件才打印
System.out.println("记事:(日期:"+":"+workDays[i]+")");
System.out.println("内容:【"+works[i]+"】 编号:No."+i);
}
}
}
}
}