Coding History

2024. 07. 09 시험문제 (Motivation App)

BlackBirdIT 2024. 7. 9. 10:49

수월하게 볼 줄 알았는데 연습하지 않았던 상세보기와 명령어가 다르고, 또 날짜까지 넣어야되서 조금 걸렸는데 그래도 걱정했던 것 보다는 수월하게 풀렸다. 반복 연습이 도움이 됐던 것 같다. 이하는 내가 제출한 코드다.

public class Main {
    public static void main(String[] args) {
        new App().run();
    }
}
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import static org.koreait.MotivationController.*;

public class App {
    static Scanner sc;
    static int lastId;
    static List<Motivation> motivations;

    public App() {
        sc = new Scanner(System.in);
        lastId = 1;
        motivations = new ArrayList<>();
    }

    public static void run() {
        System.out.println("== 명언 앱 실행 ==");

        while (true) {
            System.out.print("명령어 ) ");
            String cmd = sc.nextLine().trim();

            if (cmd.equals("종료")) {
                System.out.println("== 명언 앱 종료 ==");
                return;
            } else if (cmd.isEmpty()) System.out.println("명령어 똑바로 입력해.");


            String[] split = cmd.split("=");
            String id = split.length > 1 ? split[1] : "";

            switch (cmd) {
                case "등록":
                    doWrite();
                    break;
                case "목록":
                    showList();
                    break;

                default:
                    if (cmd.startsWith("삭제")) {
                        try {
                            doDelete(Integer.parseInt(id));
                        } catch (NumberFormatException e) {
                            System.out.println("번호 입력 요망.");
                        }
                    } else if (cmd.startsWith("수정")) {
                        try {
                            doModify(Integer.parseInt(id));
                        } catch (NumberFormatException e) {
                            System.out.println("번호 입력 요망.");
                        }
                    } else if (cmd.startsWith("상세보기")) {
                        try {
                            showDetail(Integer.parseInt(id));
                        } catch (NumberFormatException e) {
                            System.out.println("번호 입력 요망.");
                        }
                    } else System.out.println("명령어 오류");
                    break;
            }
        }
    }
}
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

import static org.koreait.App.*;
public class MotivationController {



    static void showDetail(int id) {
        Motivation found = foundMotivationId(id);
        if (found == null) {
            System.out.printf("%d번 명언은 존재하지 않습니다.\n", id);
        } else {
            System.out.println("번호 : " + found.getId());
            System.out.println("날짜 : " + found.getRegDate());
            System.out.println("작가 : " + found.getWriter());
            System.out.println("내용 : " + found.getBody());
        }
    }

    static void doModify(int id) {
        Motivation found = foundMotivationId(id);
        if (found == null) {
            System.out.printf("%d번 명언은 존재하지 않습니다.\n", id);
        } else {
            System.out.println("명언(기존) : " + found.getBody());
            System.out.println("작가(기존) : " + found.getWriter());
            System.out.print("명언 : ");
            String newBody = sc.nextLine().trim();
            System.out.print("작가 : ");
            String newWriter = sc.nextLine().trim();

            found.setBody(newBody);
            found.setWriter(newWriter);
        }
    }

    static void doDelete(int id) {
        Motivation found = foundMotivationId(id);
        if (found == null) {
            System.out.printf("%d번 명언은 존재하지 않습니다.\n", id);
        } else {
            motivations.remove(found);
            System.out.printf("%d번 명언이 삭제되었습니다.\n", id);
        }
    }

    private static Motivation foundMotivationId(int id) {
        for (Motivation motivation : motivations) {
            if (motivation.getId() == id) {
                return motivation;
            }
        }
        return null;
    }

    static void showList() {
        if (motivations.isEmpty()) {
            System.out.println("명언 없음.");
        } else {
            System.out.println("번호      /       작가          /       명언");
            System.out.println("=".repeat(45));
            for (int i = motivations.size() - 1; i >= 0; i--) {
                Motivation motivation = motivations.get(i);
                System.out.printf("%d       /       %s        /       %s\n", motivation.getId(), motivation.getWriter(), motivation.getBody());
            }
        }
    }

    static void doWrite() {
        System.out.print("명언 ) ");
        String body = sc.nextLine().trim();
        System.out.print("작가 ) ");
        String writer = sc.nextLine().trim();

        int id = lastId++;

        String dateTime = DateTimeFormatter.ofPattern("yy-MM-dd hh:mm:ss")
                .format(LocalDateTime.now());




        motivations.add(new Motivation(id, body, writer, dateTime));
        System.out.printf("%d번 명언이 등록되었습니다.\n", id);
    }
}
public class Motivation {
    private int id;
    private String body;
    private String writer;
    private String regDate;

    public Motivation(int id, String body, String writer, String regDate) {
        this.regDate = regDate;
        this.id = id;
        this.body = body;
        this.writer = writer;
    }

    @Override
    public String toString() {
        return "Motivation{" +
                "id=" + id +
                ", body='" + body + '\'' +
                ", writer='" + writer + '\'' +
                ", regDate='" + regDate + '\'' +
                '}';
    }

    public String getRegDate() {
        return regDate;
    }

    public void setRegDate(String regDate) {
        this.regDate = regDate;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }

    public String getWriter() {
        return writer;
    }

    public void setWriter(String writer) {
        this.writer = writer;
    }
}

공부한 보람이 있구만,, 아무튼 이렇게 제출 했고 아직도 시험은 보고 있어서 화장실을 못가는중이다. 틈새에 포스팅한다.