编写高级万年日历

编写高级万年日历

要求:日历中的每一个功能都要实现在这里插入图片描述
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]&&currentMonth == workMonths[i]) {
			if(works[i] != null) {//有事件才打印
				System.out.println("记事:(日期:"+":"+workDays[i]+")");
				System.out.println("内容:【"+works[i]+"】	编号:No."+i);
			}
		}
	}
	
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值