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();
}
}
相关推荐
### Java万年历课程设计知识点解析 #### 一、项目背景及目的 - **选题依据**:本项目为自选课程设计题目。选择万年历设计的主要原因是希望通过这样一个相对简单的项目来巩固Java基础知识。 - **课题内容**:设计并...
【Java万年历源代码详解】 Java编程语言以其跨平台性、面向对象特性和丰富的类库,成为开发各种应用程序的热门选择。在这个项目中,我们关注的是一个基于Java实现的万年历程序。万年历是一种能显示公历日期、节气、...
【Java万年历实验报告】 本实验报告详细记录了基于Java编程实现万年历的全过程,旨在帮助学习Java的学生理解如何将理论知识应用于实际项目,同时掌握日期处理技术和软件工程的基本理念。实验的设计目标包括创建一个...
这个“java万年历的源代码”提供了显示农历和节假日的功能,这对于许多需要处理日期和时间的应用场景非常有用,尤其是在中国的环境中,农历和节假日的查询是必不可少的。 首先,我们需要理解Java中的日期和时间处理...
【Java 万年历小程序代码解析】 在编程领域,尤其是Java开发中,编写一个万年历小程序是一项常见的练习,旨在帮助开发者熟悉日期处理、循环逻辑以及界面展示等基础知识。这个"java 万年历小程序"项目是作者在大学...
Java万年历源代码是一个基于Java编程语言的项目,它实现了可以显示任意年份日历的功能,涵盖了从公元1年到公元9999年的日期信息。这个项目深入运用了Java集合类、图形用户界面(GUI)设计、多线程以及异常处理等多个...