package janeljs.calendar;
import java.util.Scanner;
public class Prompt {
public void printMenu() {
System.out.println("+----------------------+");
System.out.println("| 1. 일정 등록");
System.out.println("| 2. 일정 검색");
System.out.println("| 3. 달력 보기");
System.out.println("| h. 도움말 q. 종료");
System.out.println("+----------------------+");
System.out.print("SELECT> ");
}
public void runPrompt(Scanner sc) {
final String COMMAND_KEYS = "🔮 command (1, 2, 3, h, q)";
printMenu();
Command cmds = new Command();
boolean isLoop = true;
while (isLoop) {
String cmd = sc.nextLine();
switch (cmd) {
case "1":
cmds.cmdRegister(sc);
System.out.println(COMMAND_KEYS);
break;
case "2":
cmds.cmdSearch(sc);
System.out.println(COMMAND_KEYS);
break;
case "3":
cmds.cmdPrintCalendar(sc);
System.out.println(COMMAND_KEYS);
break;
case "h":
printMenu();
break;
case "q":
isLoop = false;
System.out.println("Have a nice day!");
break;
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Prompt prompt = new Prompt();
prompt.runPrompt(sc);
sc.close();
}
}
package janeljs.calendar;
public class Calendar {
public static final int[] LAST_DAYS = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
public static final int[] LEAP_YEAR_LAST_DAYS = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
public static boolean isLeapYear(int year) {
if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) {
return true;
} else {
return false;
}
}
public static int getFirstDay(int year, int month) {
final int START_YEAR = 1970;
final int START_DAY_OF_THE_WEEK = 4;
int firstDay=0;
int daySum = 0;
for (int i = START_YEAR; i < year; i++) {
if(!isLeapYear(i)) {
daySum+=365;
}
else {
daySum+=366;
}
}
for (int i = 1; i < month; i++) {
if(!isLeapYear(year)) {
daySum += LAST_DAYS[i-1];
}
else {
daySum += LEAP_YEAR_LAST_DAYS[i-1];
}
}
firstDay = (START_DAY_OF_THE_WEEK+daySum) % 7;
return firstDay;
}
public static void printCalendar(int year, int month) {
System.out.printf(" 🌼%4d년 %d월🌼\n", year, month);
System.out.println(" SU MO TU WE TH FR SA");
System.out.println(" --------------------");
int count = 0;
int firstDay = getFirstDay(year, month);
for (int i = 0; i < firstDay; i++) {
System.out.print(" ");
count++;
}
int lastDay = getLastDay(year, month);
for (int i = 1; i <= lastDay; i++) {
System.out.printf("%3d", i);
count++;
if (count % 7 == 0) {
System.out.println();
}
}
System.out.println();
System.out.println();
}
public static int getLastDay(int year, int month) {
int lastday = 0;
if (isLeapYear(year)) {
lastday = LEAP_YEAR_LAST_DAYS[month - 1];
} else {
lastday = LAST_DAYS[month - 1];
}
return lastday;
}
}
package janeljs.calendar;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Scanner;
public class PlanItem {
String format;
String plan;
String location;
ArrayList<String> guests;
public PlanItem() {
guests = new ArrayList<>();
}
public PlanItem(String plan, String location, ArrayList<String> guests) {
this.plan = plan;
this.location = location;
this.guests = guests;
}
public void planItem(Scanner sc, Date date) {
System.out.println("✔️ Add Event");
System.out.print("EVENT> ");
plan = sc.nextLine();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
format = formatter.format(date);
System.out.println("📆 " + format + " : " + plan + "\n" + "Successfully Registered \n");
}
public void planPlace(Scanner sc) {
System.out.println("🗺️ Add location");
System.out.print("LOCATION> ");
location = sc.nextLine();
}
public void planGuest(Scanner sc) {
System.out.println("🗺️ Add guests (press q to quit)");
while (true) {
System.out.print("GUEST> ");
String guest = sc.nextLine();
if (guest.equals("q")) {
System.out.println("GUESTS: " + guests);
System.out.println();
break;
}
guests.add(guest);
}
}
}
package janeljs.calendar;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Scanner;
public class Command {
HashMap<Date, PlanItem> planSave;
public Command() {
planSave = new HashMap<>();
File f = new File("plan.dat");
if (!f.exists()) {
return;
}
try {
Scanner sc = new Scanner(f);
while (sc.hasNext()) {
String line = sc.nextLine();
String[] words = line.split(",");
Date date = fromStringtoDate(words[0]);
String plan = words[1];
String location = words[2];
String[] strGuests = Arrays.copyOfRange(words, 3, words.length);
ArrayList<String> alGuests = fromStringtoArrayList(strGuests);
PlanItem p = new PlanItem(plan, location, alGuests);
planSave.put(date, p);
}
sc.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public ArrayList<String> fromStringtoArrayList(String[] strGuests) {
ArrayList<String> alGuests = new ArrayList<>();
for (String x : strGuests) {
String temp = x.replace("[", "").replace("]", "").replace(" ", "");
alGuests.add(temp);
}
return alGuests;
}
public void cmdRegister(Scanner sc) {
System.out.println("\n[CREATE] Enter a date (yyyy-MM-dd).");
System.out.print("DATE> ");
String strDate = sc.nextLine();
Date date = null;
try {
date = new SimpleDateFormat("yyyy-MM-dd").parse(strDate);
} catch (ParseException e) {
e.printStackTrace();
}
PlanItem newplan = new PlanItem();
System.out.println();
newplan.planItem(sc, date);
newplan.planPlace(sc);
System.out.println();
newplan.planGuest(sc);
planSave.put(date, newplan);
try {
FileWriter fw = new FileWriter("plan.dat", true);
fw.write(newplan.format + "," + newplan.plan + "," + newplan.location + "," + newplan.guests + "\n");
fw.close();
} catch (IOException e) {
System.out.println("An error occured.");
e.printStackTrace();
}
}
public Date fromStringtoDate(String strDate) {
Date date = null;
try {
date = new SimpleDateFormat("yyyy-MM-dd").parse(strDate);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
public void cmdSearch(Scanner sc) {
System.out.println("[SEARCH] Enter a date (yyyy-MM-dd).");
System.out.print("DATE> ");
String searchDate = sc.nextLine();
Date sdate = fromStringtoDate(searchDate);
PlanItem result = planSave.get(sdate);
System.out.println("💖 Event: " + result.plan);
System.out.println("🗺️ Location: " + result.location);
int i = 1;
System.out.println("👨👩👦👦 Guest List");
for (String x : result.guests) {
System.out.println("- Guest" + i + ": " + x);
i++;
}
System.out.println();
}
public void cmdPrintCalendar(Scanner sc) {
System.out.println("📆 Enter a year.");
System.out.print("YEAR> ");
int year = sc.nextInt();
System.out.println("🈷 Enter a month.");
System.out.print("MONTH> ");
int month = sc.nextInt();
if (year < 0 || month > 12 || month < 1) {
System.out.println("❗ 유효한 값이 아닙니다.");
year = sc.nextInt();
month = sc.nextInt();
}
Calendar.printCalendar(year, month);
}
}
일정을 처음 등록하면 plan.dat파일이 생성되고, 새로 등록할 때마다 아래와 같은 형태로 추가된다. 파일에 정보를 저장해 놓았기 때문에 프로그램을 종료했다가 다시 실행해도 일정을 검색할 수 있다.
2020-12-06,Finance Team Standup,Sinchon,[Tom, Julia]
2020-12-15,Sales Weekly Kick-off,Paris,[Andrew, Jane]
드디어 완강 + 프로젝트 완료!😎 금방 끝날 줄 알았는데 강의를 안 보고 차근차근 구현하려니 생각보다 시간이 오래걸렸다. 그래도 미션 조건 외에 내가 추가하고 싶었던 기능들도 구현하고, 추가 클래스와 메서드들도 만들어 봤더니 조금 더 자바 프로그래밍이 익숙해진 것 같다.
+) eclipse console 창에 이모지가 예쁘게 출력되었으면 좋겠다😢
완전 이쁘게 잘 만들엇네요 🤩🤩