import java.util.Date;
import java.util.Scanner;
public class calend{
//初始化一个年份
private static int Year;
//初始化一个月份
private static int Month;
//初始化一个天数
private static int Day;
//初始化一个标识符
private static boolean flage = true;
public static void main(String[] args) {
System.out.println("**********欢迎使用简易日历*********");
while(flage){
//打印菜单
printMenu();
//正则验证输入的选项
String cmd = getString();
//调用正则的方法,判断是否合法
int temp = validateSelect(cmd);
if(temp==-1){
System.out.println("输入不合法,请从新输入!");
continue;
}if(temp==0){
System.out.println("系统退出!");
break;
}
switch (temp) {
case 1:
/**
* 打印当前的日历,调用一个打印当前日历的方法
*/
printNow();
break;
case 2:
/**
* 打印自定义的日历,调用一个自定义的方法
*/
printDefine();
break;
default:
break;
}
}
}
//打印当前日历的方法
@SuppressWarnings("deprecation")
public static void printNow(){
int sum1=0;
Date date=new Date();//日期构造器
int nowYear=date.getYear()+1900;//当前年份
int nowMonth=date.getMonth()+1;//当前月份
int nowDay=date.getDate();//当前天数
/**
* 测试打印的日期
*/
// System.out.println("当前的年份"+nowYear);
// System.out.println("当前的月份"+nowMonth);
// System.out.println("当前的天数"+nowDay);
for (int i = 1900; i <nowYear; i++) {
if(i%4==0&&i%100!=0||i%400==0){
sum1+=366;
}else{
sum1+=365;
}
}
for (int i = 1; i <nowMonth; i++) {
if(i==2){
if(nowYear%4==0&&nowYear%100!=0||nowYear%400==0){
sum1+=29;
}else{
sum1+=28;
}
}else if(i==4||i==6||i==9||i==11){
sum1+=30;
}else if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){
sum1+=31;
}
}
sum1++;//计算总的天数
int weekday=sum1%7;
System.out.println("日\t一\t二\t三\t四\t五\t六");
for(int i=0;i<weekday;i++){
System.out.print("\t");
}int printday=0;
if(nowMonth==2){
if(nowYear%4==0&&nowYear%100!=0||nowYear%400==0){
printday=29;
}else{
printday=28;
}
}else if(nowMonth==4||nowMonth==6||nowMonth==9||nowMonth==11){
printday=30;
}else if(nowMonth==1||nowMonth==3||nowMonth==5||nowMonth==7||nowMonth==8||nowMonth==10||nowMonth==12){
printday=31;
}
//指定一个标识符
boolean flag = false;
for (int i = 1; i <=printday; i++) {
if(sum1%7==6){
if(i==nowDay){
flag = true;
System.out.print("["+i+"]"+"\n");
}else{
System.out.print(i+"\n");
}
}else{
if(i==nowDay){
flag = true;
System.out.print("["+i+"]"+"\t");
}else{
System.out.print(i+"\t");
}
}
sum1++;
}
System.out.println();
if(!flag){
System.out.println("当前月没有这一天,无法标记");
}
System.out.println("是否继续?(Y/N)");
if("Y".equalsIgnoreCase(getString())){
}else{
flage = false;
System.out.println("谢谢使用,系统退出");
}
}
//打印自定义日历的方法
public static void printDefine(){
//定义一个天数的总数
int sum = 0;
/**
* 年份判断的方法
*/
while(true){
System.out.println("请输入年份:");
String tempYear = getString();
int year = validateYear(tempYear);
if(year==-1){
System.out.println("输入的年份不合法,请从新输入");
continue;
}else{
Year = Integer.parseInt(tempYear);
break;
}
}
/**
* 月份判断的方法
*/
while(true){
System.out.println("请输入月份:");
String tempMonth = getString();
int month = validateMonth(tempMonth);
if(month==-1){
System.out.println("输入的月份不合法,请从新输入");
continue;
}else{
Month = Integer.parseInt(tempMonth);
break;
}
}
/**
* 天数判断的方法
*/
while(true){
System.out.println("请输入天数:");
String tempDay = getString();
int day = validateDay(tempDay);
if(day==-1){
System.out.println("输入的天数不合法,请从新输入");
continue;
}else{
Day = Integer.parseInt(tempDay);
break;
}
}
/**
* for循环计算年份
*/
for(int i=1900;i<Year;i++){
if(i%4==0&&i%100!=0||i%400==0){
sum+=366;
}else{
sum+=365;
}
}
/**
* for循环计算月份
*/
for(int i=1;i<Month;i++){
if(i==2){
if(Year%4==0&&Year%100!=0||Year%400==0){
sum+=29;
}else{
sum+=28;
}
}else if(i==4||i==6||i==9||i==11){
sum+=30;
}else{
sum+=31;
}
}
//计算总数,算出这个月的第一天是什么位置
sum++;
System.out.println("日\t一\t二\t三\t四\t五\t六");
int weekDay = sum%7;
for(int i=0;i<weekDay;i++){
System.out.print("\t");
}
/**
* 每个月的天数
*
*/
int printday=0;
if(Month==2){
if(Year%4==0&&Year%100!=0||Year%400==0){
printday=29;
}else{
printday=28;
}
}else if(Month==4||Month==6||Month==8||Month==11){
printday=30;
}else if(Month==1||Month==3||Month==5||Month==7||Month==8||Month==10||Month==12){
printday=31;
}
/**
* 开始打印日历
*/
boolean flag = false;
for(int i=1;i<=printday;i++){
if(sum%7==6){
if(i==Day){
flag = true;
System.out.print("["+i+"]"+"\n");
}else{
System.out.print(i+"\n");
}
}else{
if(i==Day){
flag = true;
System.out.print("["+i+"]"+"\t");
}else{
System.out.print(i+"\t");
}
}
sum++;
}
System.out.println();
if(!flag){
System.out.println("当前月没有这一天,无法标记");
}
System.out.println("是否继续?(Y/N)");
if("Y".equalsIgnoreCase(getString())){
}else{
flage = false;
System.out.println("谢谢使用,系统退出");
}
}
//正则验证输入的天数
public static int validateDay(String cmd){
String reg = "^[1-9]|[1][0-9]|[2][0-9]|[3][0-1]$";
if(cmd.matches(reg)){
return Integer.parseInt(cmd);
}
return -1;
}
//正则验证输入的月份
public static int validateMonth(String cmd){
String reg = "^[1-9]|[1][0-2]$";
if(cmd.matches(reg)){
return Integer.parseInt(cmd);
}
return -1;
}
//正则验证输入的年份
public static int validateYear(String cmd){
String reg = "^[1-9](\\d{2,3})$";
if(cmd.matches(reg)){
return Integer.parseInt(cmd);
}
return -1;
}
//正则验证输入的方法
public static int validateSelect(String cmd){
String reg = "[0-2]";
if(cmd.matches(reg)){
return Integer.parseInt(cmd);
}
return -1;
}
//菜单的方法
public static void printMenu(){
System.out.println("【1】当前日历【2】自定义日历【0】退出系统");
}
//输入数字的方法
public static int getInt(){
Scanner sc = new Scanner(System.in);
return sc.nextInt();
}
//输入字符串的方法
public static String getString(){
Scanner sc = new Scanner(System.in);
return sc.next();
}
}