Development/OOP(Java)

Project1 (Timetable application)

일단하고봐 2023. 4. 5. 16:22

과제 주제 : Timetable Application 구현

 

과제 조건

-Course class

먼저 Course class에 필요한 변수 (이름,교수,강의실번호,가능여부)를 선언하고 생성자를 초기화해준다.

- Timetable Class

 

- TimeTableAPP Class

- 크게 주어진 세 개의 클래스를 기반으로 timetable application을 구현한다.

- course class 는 시간표에 포함될 내용인 수업에 대한 속성과 메서드를 제공하는 클래스이다.

- timetable class는 강의 일정을 관리하는 메서드를 포함하는 클래스이다.

- timetableapp class는 main 함수를 포함하여 수업일정을 추가,확인 및 관리할 수 있도록 작성한 application 구현 클래스이다.

 

Implement

<Course Class>

package assignment;

import assignment.Course;

public class Course {		//강의 속성에 사용하는 변수 선언
	public String name;
	public String professor;
	public String roomNumber;
	public boolean isValid;

	//각각의 생성자
	public Course(String name, String tutor, String room) {
		this.name = name;
		this.professor = tutor;
		this.roomNumber = room;
	}

	public Course(String name) {
		this.name = name;
	}

	public Course(Course copy) {
		this.name = copy.name;
		this.professor = copy.professor;
		this.roomNumber = copy.roomNumber;
		this.isValid = copy.isValid;
	}

	//get 함수
	public String getName() {
		return name;
	}
	
	public String getProfessor() {
		return professor;
	}
	public String getRoomNumber() {
		return roomNumber;
	}

	//set함수
	public void setName(String name) {
		this.name = name;
	}
	public void setProfessor(String professor) {
		this.professor = professor;
	}
	public void setRoomNumber(String roomNumber) {
		this.roomNumber = roomNumber;
	}

	//동일한 강의인지 확인하는 메서드
	public boolean equals(Course s) {
        if (this.name.equals(s.name) && this.professor.equals(s.professor) && this.roomNumber.equals(s.roomNumber)) {
            return true;
        }
        return false;
    }	

	// 강의명을 반환해주는 메서드
	public String toString() {
		return name;	
	}

	// 강의명, 교수명, 강의실 정보를 반환해주는 메서드
	public String getDetails() {
		return "\nName : " + name + "\n" + "Tutor : " + professor +  "\n" + "Room : " + roomNumber + "\n";
		
	}
}

<TimeTable Class>

package assignment;

import java.util.Calendar;
import java.util.Scanner;

import assignment.Course;


public class TimeTable {
	Course[][] timeTable = new Course[5][10];
	
    //열거형 type 으로 요일 상수 정의
	public enum DAYS {
		MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY
	}

	//2차원 배열로 시간표 생성
	public TimeTable() {
		timeTable = new Course[DAYS.values().length][10];
		initialize();
		
	}
	//시간표 초기화 (점심,저녁시간 고정값으로 설정)
	private void initialize() {
        for (int i = 0; i < timeTable.length; i++) {
            for (int j = 0; j < timeTable[i].length; j++) {
                if (j == 3) {
                    timeTable[i][j] = new Course("  LUNCH", "-", "-");
                } else if (j == 7) {
                    timeTable[i][j] = new Course(" DINNER", "-", "-");
                } else {
                    timeTable[i][j] = new Course("  ----", "-", "-");
                }
            }
        }
	}
	
    //요일과 period를 받아 시간표에 입력하는 메서드
	public String getSchedule(String day, int period) {

        int dayIndex = DAYS.valueOf(day).ordinal();
        Course course = timeTable[dayIndex][period-1];
        return "At that time you have: " + course.getDetails();
	}
    
	// 강의 속성 정보를 받아 가능여부 판단
	public boolean setSchedule(String day, int period, String name, String tutor, String room) {
        if (period == 3 || period == 7) {
            return false;
        }
        int dayIndex = DAYS.valueOf(day).ordinal();
        timeTable[dayIndex][period-1].setName(name);
        timeTable[dayIndex][period-1].setProfessor(tutor);
        timeTable[dayIndex][period-1].setRoomNumber(room);
        return true;
	}

	// 시간표 format 출력
	public String toString() {		//timetable 형태를 return
            StringBuilder sb = new StringBuilder();
            sb.append("\tMONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY\n");
            for (int i = 0; i < timeTable[0].length; i++) {
                sb.append((i + 1) + "\t");
                for (int j = 0; j < timeTable.length; j++) {
                    sb.append(timeTable[j][i].getName() + "\t");
                }
                sb.append("\n");
            }
            return sb.toString();
        }
        
	//요일을 입력받아 해당 요일의 시간표를 반환하는 메서드
	public String oneDaySchedule(String day) {			
        int dayIndex = DAYS.valueOf(day).ordinal();
        String result = DAYS.values()[dayIndex] + "\n";
        for (int j = 0; j < timeTable[dayIndex].length; j++) {
            result += timeTable[dayIndex][j].getDetails() + "\t";
        }
        result += "\n";
        return result;
	}
	
    //강의명을 입력 받아 요일을 반환하는 메서드
	public String subjectSchedule(String sub) {		
        String result = "";
        for (int i = 0; i < timeTable.length; i++) {
            for (int j = 0; j < timeTable[i].length; j++) {
                if (timeTable[i][j].getName().equals(sub)) {
                    result += "Subject: " + timeTable[i][j].getName() + "\n" + "Day: "+ DAYS.values()[i] + "\n" + "Lecture: "+ (j+1) + "\n" + "Professor: " + timeTable[i][j].getProfessor() + "\n" + "Room No: " + timeTable[i][j].getRoomNumber();
                }
            }
        }
        return result;
	}
	
    //날짜를 입력받아 calender class 객체에 저장후 객체 반환(calender class 사용)
	public Calendar setInputDate(String date) {			
	
        int year = Integer.parseInt(date.substring(0, 4));
        int month = Integer.parseInt(date.substring(4, 6)) - 1;
        int day = Integer.parseInt(date.substring(6));
        Calendar cal = Calendar.getInstance();
        cal.set(year, month, day);
        return cal;
    
	}
}

<TimeTableApp Class>

package assignment;

import java.util.Calendar;
import java.util.Scanner;

public class TimeTableApp {
	public static void main(String[] args) {

		Scanner keyboard = new Scanner(System.in);
		String[] weeks = { "SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY" };
		Calendar cal = Calendar.getInstance();
		TimeTable timeTable = new TimeTable();
		int enter, period;
		String name, day, tutorName, roomName, sub, str,date;
		boolean check;
		boolean when = true;
		do {
			System.out.println(timeTable.toString());
			System.out.println("===============Main Menu================");
			System.out.println("(1) Add a class to my time table");
			System.out.println("(2) View the class at a specific period");
			System.out.println("(3) View schedule of a specific class");
			System.out.println("(4) TimeTable corresponding to input date");
			System.out.println("(5) Exit the program");
			System.out.println("===============Main Menu================");
			enter = keyboard.nextInt();
			switch (enter) {
			case 1: {		//강의 정보를 입력받아서 시간표에 저장
				System.out.println("Please enter the day to add the class");
				day = keyboard.next();
				day = day.toUpperCase();
				System.out.println("Please enter the period to add the class");
				period = keyboard.nextInt();
				System.out.println("Please enter the name of the class");
				name = keyboard.next();
				System.out.println("Please enter the name of the tutor");
				tutorName = keyboard.next();
				System.out.println("Please enter the name of the room ");
				roomName = keyboard.next();

				check = timeTable.setSchedule(day, period, name, tutorName, roomName);
				if (check == true)
					System.out.println("Class successfully added");
				else
					System.out.println("Class was NOT successfully added");
				break;

			}
			case 2: {		// 요일과 교시를 입력받아 해당 시간의 강의 속성을 출력
				System.out.println("Please enter the day of the class");
				day = keyboard.next();
				day = day.toUpperCase();
				System.out.println("Please enter the peroid of the class");
				period = keyboard.nextInt();
				System.out.println(timeTable.getSchedule(day.toString(), period));
				break;

			}
			case 3: {		// 강의명을 입력받아 해당 강의 정보를 출력
				System.out.println("Please enter the class name");
				sub = keyboard.next();
				str = timeTable.subjectSchedule(sub);
				
				if (str.isEmpty()) {
					System.out.println("There are no class");
					break;
				} else {
					System.out.println(str);
				}
				break;
			}
			case 4: {		//날짜를 입력받아 해당하는 요일의 시간표를 출력
				System.out.println("Enter the date:");
				date = keyboard.next();
				cal = timeTable.setInputDate(date);
				
				if (cal.get(Calendar.DAY_OF_WEEK) - 1 == 0 || cal.get(Calendar.DAY_OF_WEEK) - 1 == 6) {
					System.out.println("There are no schedule");
					break;
				} else {
					System.out.println(timeTable.oneDaySchedule(weeks[cal.get(Calendar.DAY_OF_WEEK) - 1]));
				}

				break;

			}
			case 5: {		// 프로그램 종료
				when = false;
				break;
			}
			default:
				System.out.println("Try again");
			}
		} while (when);

	}

}

 

Result

1. Case1 : 강의 속성을 입력받아 시간표에 저장

 

2. Case2 : 요일과 교시를 입력받아 해당 강의 속성 출력

3. Case3 : 강의명을 입력받아 해당 강의 정보 출력

4. Case4 : 날짜를 입력받아 해당날짜의 시간표 출력 (2023.04.07은 금요일 -> 금공강^^)

5. Case5 : 프로그램 종료