In: Computer Science
You will write a Java Application program to perform the task of generating a calendar for the year 2020. You are required to modularize your code, i.e. break your code into different modules for different tasks in the calendar and use method calls to execute the different modules in your program. Your required to use arrays, ArrayList, methods, classes, inheritance, control structures like "if else", switch, compound expressions, etc. where applicable in your program. Your program should be interactive and able to display the calendar for 1 month, 3 months and all 12 months at the same time depending on the choice picked by the user.
Write a Java application program to generate the calendar for the year 2019 from January to December. The program will be menu driven, The menu items will include the following:
Your solution should follow the format below:
BELOW IS THE CODE:
import java.util.Scanner;
public class PrintCalendar {
/** Main method */
public static void main(String[] args)
{
Scanner scan = new Scanner
(System.in);
int month=4;
//Prompt the user to enter year
System.out.print("Year for the calendar of
interest : ");
int year = scan.nextInt();
//Prompt the user to enter choice
for month
System.out.print("How many months u want
to display :Enter 1. for One Month, 2. for Three Months, 3. for
Twelve Months, 4. for Exit : ");
int ch = scan.nextInt();
// Prompt the user to enter month if
choice is 1
if (ch == 1){
System.out.print("Enter month in number
between 1 and 12: ");
month = scan.nextInt();}
// Prompt the user to enter month if
choice is 1
if (ch == 2){
System.out.print("Enter starting month in
number between 1 and 12: ");
month = scan.nextInt();}
// Print calendar for the month of the
year
if (month < 1 || month > 12 ||
year < 1980)
System.out.println("Wrong
input!");
else
{
if (ch ==1)
printMonth(year, month);
if (ch == 2)
{
printMonth(year, month);
printMonth(year, month+1);
printMonth(year, month+2);
}
if (ch == 3)
{
for(int k=1;k<=12;k++)
printMonth(year, k);
}
if (ch == 4)
{
System.out.println("Exiting");
}
}
}
/** Print the calendar for a month in a year
*/
static void printMonth(int year, int month) {
//Print the headings of the
calendar
printMonthTitle(year, month);
//Print the body of the calendar
printMonthBody(year, month);
}
/** Print the month title, e.g., May, 1999 */
static void printMonthTitle(int year, int month) {
System.out.println("
" + getMonthName(month) + " " + year + " Calendar");
System.out.println(" Sun
Mon Tue Wed Thu Fri Sat ");
}
/** Get the English name for the month
*/
static String getMonthName(int month) {
String monthName = null;
switch (month) {
case 1: monthName =
"January"; break;
case 2: monthName =
"February"; break;
case 3: monthName =
"March"; break;
case 4: monthName =
"April"; break;
case 5: monthName =
"May"; break;
case 6: monthName =
"June"; break;
case 7: monthName =
"July"; break;
case 8: monthName =
"August"; break;
case 9: monthName =
"September"; break;
case 10: monthName =
"October"; break;
case 11: monthName =
"November"; break;
case 12: monthName =
"December";
}
return monthName;
}
/** Print month body */
static void printMonthBody(int year, int month)
{
// Get start day of the
week for the first date in the month
int startDay = getStartDay(year,
month);
// Get number of days in the
month
int numberOfDaysInMonth =
getNumberOfDaysInMonth(year, month);
// Pad space before the first day
of the month
int i = 0;
for (i = 0; i < startDay;
i++)
System.out.print(" ");
for (i = 1; i <=
numberOfDaysInMonth; i++) {
if (i < 10)
System.out.print(" " + i);
else
System.out.print(" " + i);
if ((i + startDay) % 7
== 0)
System.out.println();
}
System.out.println();
}
/** Get the start day of the first day in a month */
static int getStartDay(int year, int month) {
//Get total number of days since
1/1/1800
int startDay1800 = 3;
int totalNumberOfDays =
getTotalNumberOfDays(year, month);
//Return the start day
return (totalNumberOfDays +
startDay1800) % 7;
}
/** Get the total number of days since January 1, 1800 */
static int getTotalNumberOfDays(int year, int
month) {
int total = 0;
//Get the total days from 1800 to year
- 1
for (int i = 1800; i < year; i++)
if (isLeapYear(i))
total = total +
366;
else
total = total + 365;
//Add days from January to the
month prior to the calendar month
for (int i = 1; i < month;
i++)
total = total +
getNumberOfDaysInMonth(year, i);
return total;
}
/** Get the number of days in a month */
static int getNumberOfDaysInMonth(int year,
int month) {
if (month == 1 || month == 3 ||
month == 5 || month == 7 ||
month == 8 || month ==
10 || month == 12)
return 31;
if (month == 4 || month == 6 ||
month == 9 || month == 11)
return 30;
if (month == 2) return isLeapYear(year) ? 29 : 28;
return 0; // If month is
incorrect
}
/** Determine if it is a leap year */
static boolean isLeapYear(int year) {
return year % 400 == 0 || (year % 4
== 0 && year % 100 != 0);
}
}
The solution for the problem is available AS ABOVE but AFTER RUNNING IT the menu doesn't look good and after running a selection, it's not going back to the menu for the USER To INPUT next choice until user chooses to exit. RUN IT AND SEE so Can you HELP modify it to output like below:
OR help with a fresh code. Thanks
include these on the menu as per question:
Welcome to the Calendar for the year 2019
-------------------------------------------------
1. Show Calendar for 1 month
2. Show Calendar for 3 months
3. Show Calendar for the year
4. Exit
Enter your selection (Only numbers are allowed):
If you have any doubts, please give me comment...
import java.util.Scanner;
public class PrintCalendar {
/** Main method */
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int month = 4;
// Prompt the user to enter year
System.out.print("Year for the calendar of interest : ");
int year = scan.nextInt();
int ch;
// Prompt the user to enter choice for month
System.out.println("How many Months do you want to display (1 month, 3 months, 12 months).");
do {
System.out.println("Welcome to the Calendar for the year " + year);
System.out.println("-------------------------------------------------");
System.out.println("1. Show Calendar for 1 month");
System.out.println("2. Show Calendar for 3 months");
System.out.println("3. Show Calendar for the year");
System.out.println("4. Exit");
System.out.println("Enter your selection (Only numbers are allowed):");
ch = scan.nextInt();
// Prompt the user to enter month if choice is 1
if (ch == 1) {
System.out.print("Enter month in number between 1 and 12: ");
month = scan.nextInt();
}
// Prompt the user to enter month if choice is 1
else if (ch == 2) {
System.out.print("Enter starting month in number between 1 and 12: ");
month = scan.nextInt();
}
// Print calendar for the month of the year
if (month < 1 || month > 12 || year < 1980)
System.out.println("Wrong input!");
else {
if (ch == 1)
printMonth(year, month);
else if (ch == 2) {
printMonth(year, month);
printMonth(year, month + 1);
printMonth(year, month + 2);
} else if (ch == 3) {
for (int k = 1; k <= 12; k++)
printMonth(year, k);
} else if (ch == 4) {
System.out.println("Exiting");
}
}
} while (ch != 4);
}
/** Print the calendar for a month in a year */
static void printMonth(int year, int month) {
// Print the headings of the calendar
printMonthTitle(year, month);
// Print the body of the calendar
printMonthBody(year, month);
}
/** Print the month title, e.g., May, 1999 */
static void printMonthTitle(int year, int month) {
System.out.println(" " + getMonthName(month) + " " + year + " Calendar");
System.out.println(" Sun Mon Tue Wed Thu Fri Sat ");
}
/** Get the English name for the month */
static String getMonthName(int month) {
String monthName = null;
switch (month) {
case 1:
monthName = "January";
break;
case 2:
monthName = "February";
break;
case 3:
monthName = "March";
break;
case 4:
monthName = "April";
break;
case 5:
monthName = "May";
break;
case 6:
monthName = "June";
break;
case 7:
monthName = "July";
break;
case 8:
monthName = "August";
break;
case 9:
monthName = "September";
break;
case 10:
monthName = "October";
break;
case 11:
monthName = "November";
break;
case 12:
monthName = "December";
}
return monthName;
}
/** Print month body */
static void printMonthBody(int year, int month) {
// Get start day of the week for the first date in the month
int startDay = getStartDay(year, month);
// Get number of days in the month
int numberOfDaysInMonth = getNumberOfDaysInMonth(year, month);
// Pad space before the first day of the month
int i = 0;
for (i = 0; i < startDay; i++)
System.out.printf("%4c", ' ');
for (i = 1; i <= numberOfDaysInMonth; i++) {
if (i < 10)
System.out.printf("%4d", i);
else
System.out.printf("%4d", i);
if ((i + startDay) % 7 == 0)
System.out.println();
}
System.out.println("\n");
}
/** Get the start day of the first day in a month */
static int getStartDay(int year, int month) {
// Get total number of days since 1/1/1800
int startDay1800 = 3;
int totalNumberOfDays = getTotalNumberOfDays(year, month);
// Return the start day
return (totalNumberOfDays + startDay1800) % 7;
}
/** Get the total number of days since January 1, 1800 */
static int getTotalNumberOfDays(int year, int month) {
int total = 0;
// Get the total days from 1800 to year - 1
for (int i = 1800; i < year; i++)
if (isLeapYear(i))
total = total + 366;
else
total = total + 365;
// Add days from January to the month prior to the calendar month
for (int i = 1; i < month; i++)
total = total + getNumberOfDaysInMonth(year, i);
return total;
}
/** Get the number of days in a month */
static int getNumberOfDaysInMonth(int year, int month) {
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
return 31;
if (month == 4 || month == 6 || month == 9 || month == 11)
return 30;
if (month == 2)
return isLeapYear(year) ? 29 : 28;
return 0; // If month is incorrect
}
/** Determine if it is a leap year */
static boolean isLeapYear(int year) {
return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
}
}