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)设计、多线程以及异常处理等多个...
以下是对Java万年历开发涉及的关键知识点的详细解释: 1. **Java基础**:首先,你需要熟悉Java的基础语法,包括类、对象、方法、变量、控制结构(如if-else、switch-case、for、while循环)等。这是编写任何Java...
"JAVA 万年历" JAVA 万年历是基于 Java 语言开发的万年历程序,适合初学者学习 Java 编程。下面是该程序的知识点总结: 一、程序设计思路 在设计万年历程序时,需要考虑到多个方面,包括用户界面、数据存储、算法...
【JAVA万年历】是一款基于Java编程语言的小程序,它被设计为一个玩具项目,旨在帮助用户查看从公元1年到公元9999年的日期信息。这个小程序不仅能够显示公历日期,还可能包括中国传统农历以及其他节气、节日等信息。...
在本项目中,我们主要关注的是“Java万年历”的实现,这涉及到计算机科学中的日期和时间处理,图形用户界面(GUI)编程以及设计文档的编写。以下是对这些知识点的详细说明: 1. **日期和时间处理**:在Java中,处理...
JAVA万年历设计报告 本报告详细介绍了一个使用JAVA语言设计的万年历系统。该系统的主要功能是提供一个简洁的万年历,能够查看当前的年份、月份和日期,并能够查找1至9999年的日期与星期的关系。 在系统设计中,...
【JAVA万年历课程设计报告】是一份详细记录了使用JAVA进行万年历程序开发的课程设计报告。报告涵盖了从需求分析、概要设计到各模块功能及程序说明等多个方面,旨在展示一个基于图形用户界面的万年历应用程序的开发...
【Java万年历实现详解】 Java万年历是一款常见的编程练习项目,对于初学者来说,它可以帮助理解日期处理、循环逻辑以及用户界面设计等基础知识。本文将深入探讨这个项目的实现,包括关键知识点、可能存在的不足以及...
【Java万年历】是一种基于Java编程语言实现的日历系统,它可以显示从公元1年至公元9999年之间的所有日期,因此被称为“万年历”。这个程序通常包含了一个核心的日期计算算法,用于处理不同年份、月份和日期之间的...
java 万年历的class源文件 简单实用
【Java万年历源码详解】 Java万年历程序是一个能够显示从公元1年至公元9999年之间所有日期的实用工具。这个程序的核心在于它利用了Java编程语言的强大功能,结合日期处理和用户界面设计,为用户提供了一个简洁易用...