상세 컨텐츠

본문 제목

2023-10-23 간단한 게시판 만들기

Java TIL

by 개발일지작성 2023. 10. 23. 17:47

본문

728x90

이전에 키오스크와 비슷한 방식으로 게시판으로 연습해보려했다.

1. 메인영역

// 게시판 구성요소
// CRUD
// C : 생성 .add 를 사용해서 글 목록에 보이고 글 작성 시 메인화면에 한개씩 늘어나게
// R : 메인화면에 출력되게
// U : .set 사용해서 수정하기
// 게시글 번호, 글 내용, 현재 날짜(LocalDate time = LocalDate.now();) 시간 (LocalTime time = LocalTime.now();)
// D : .remove 로 인덱스 삭제

// 게시판입니다.
// ----------------------
// 1. 내용 / 현재 날짜
// 2. 내용 / 현재 날짜
// 3. 내용 / 현재 날짜
// ...
// 게시글 작성(다른 클래스 이동)      수정       삭제
// 어떤 글을 수정하시겠습니까 or 삭제하시겠습니까
        Main go = new Main();
        go.View();

단순하게 구상을 하고

메소드는 첫 글자 소문자로 동사

클래스는 첫 글자 대문자로 명사

(잘 안지켜진듯..?)

 

2. Main 클래스

while (true) {
    System.out.println("게시판 입니다.");
    System.out.println("-----------------------------------");
    System.out.println("번호           내용              작성시간");
    // 게시글 보여주기 for 반복문으로 userPosting 배열을 하나씩 보여줌
    for (int i = 0; i < userPosting.size(); i++) {
        System.out.printf(String.valueOf(i + 1));
        System.out.print("             ");
        System.out.printf(userPosting.get(i));
        System.out.print("         ");
        System.out.println(postingTime.get(i));
        System.out.println("작성     수정     삭제");
    }

while 반복문을 이용하여 잘못 입력해도 프로그램이 종료되지 않도록 감싸고 간단한 문구 출력은 Systemln 으로 출력

 

 

 

// 게시글 작성 키오스크랑 다르게 switch case 문 사용
    Scanner getLine = new Scanner(System.in);
    String sc = getLine.nextLine();
    switch (sc) {
        case "작성": {
            Post posting = new Post();
            posting.Post();
        }
        case "수정": {
            System.out.println("수정할 게시글 번호를 입력해주세요");
            int fix = getLine.nextInt();
            System.out.println("내용을 입력하세요");
            String fixPost = getLine.nextLine();                // 왜 실행이 안되는 것인가.... 너가 실행이 안되니 fixPost에 아무것도 입력이 안되잖니...
            super.userPosting.set(fix - 1, fixPost);
            System.out.println("수정이 완료 되었습니다.");
            Main go = new Main();
            go.View();
        }
        case "삭제": {
            System.out.println("삭제할 게시글 번호를 입력해주세요");
            int fix = getLine.nextInt();
            super.userPosting.remove(fix - 1);
            super.postingTime.remove(fix - 1);
            System.out.println("삭제가 완료 되었습니다.");
            Main go = new Main();
            go.View();
        }
        default:
            System.out.println("잘못입력하셨습니다.");
    }
}​

switch case 문을 사용하니 if 조건문보다 훨씬 가독성이 좋다

 

3. 게시글 작성 영역(Post)

import java.time.LocalTime;
import java.util.Scanner;

public class Post extends HomePage implements Back{
    public void Post() {
        Scanner sc = new Scanner(System.in);
        System.out.println("내용을 입력해 주세요");
        String UP = sc.nextLine();
        // 현재 시간을 출력해줌
        LocalTime time = LocalTime.now();
        // 입력한 내용과 현재 시간을 가지고 재확인 영역으로 이동
        Double_Check doubleCheck = new Double_Check();
        doubleCheck.double_check(UP, time);
    }
}

LocalTime 을 사용하니 시간 잘 나타내줌 문제는 시분초를 넘어 0.000000000 자리까지 나타냄.... 이거 수정을 한번.. 시도해봐야겠다

 

 

4.  재확인 영역

import java.time.LocalTime;
import java.util.Scanner;

public class Double_Check extends HomePage implements Back{
    public void double_check(String post, LocalTime posttime) {

        while (true) {
            System.out.println("게시글 작성을 완료 하셨습니까?");
            System.out.println("1.예          2.아니요");
            Scanner check = new Scanner(System.in);
            int sc = check.nextInt();
            if (sc == 1) {
                System.out.println("작성이 완료되었습니다.");
                super.userPosting.add(post);
                super.postingTime.add(posttime);
                Main goMain = new Main();
                goMain.View();
            } else if (sc == 2) {
                System.out.println("이전 화면으로 돌아갑니다.");
                Post goPost = new Post();
                goPost.Post();
            } else {
                System.out.println("잘못 입력하셨습니다.");
            }
        }
    }
}

작성완료를 누르면 만들어놓은 배열에 .add해줌 메인화면에 출력되도록

 

5. Scanner 재활용 영역

public class HomePage implements Back {

    @Override
    public void createPost() {
        Scanner sc = new Scanner(System.in);
    }
}

의미가 있나...? Class마다 스캐너를 안붙여줘도 되는거 딱 하나 코드의 재활용성을 높인다 라는 빛 좋은 개살구

6. 인터페이스

public interface Back {
    void createPost();

    List<String> userPosting = new LinkedList<>();
    List<LocalTime> postingTime = new LinkedList<java.time.LocalTime>();
}

인터페이스를 통해서 만드려고 했는데 활용을 전혀 못한거 같다

-----------------------------------------------------------------------------------------------------------------------------------------------------------------구현 못한점 update 구현 실패

System.out.println("수정할 게시글 번호를 입력해주세요");
int fix = getLine.nextInt();
System.out.println("내용을 입력하세요");
String fixPost = getLine.nextLine();                // 왜 실행이 안되는 것인가.... 너가 실행이 안되니 fixPost에 아무것도 입력이 안되잖니...
super.userPosting.set(fix - 1, fixPost);
System.out.println("수정이 완료 되었습니다.");
Main go = new Main();
go.View();

String fixPost 는 입력값에 따라라 라고 선언하고

.set을 이용하여 사용사가 입련한 index를 fixPost로 바꾸라고 선언하였는데

String fixPost = getLine.nextLine(); 이 실행이 안됨

수정하고 번호 입력하면 바로 수정이 완료 되었습니다. 가 출력이 되고 내용이 비어있음

 

왜이러는지 모르겠음

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

느낀점 : 키오스크보다 기능이 적으니 당연히 만드는 시간은 단축됨

아직 자바랑 친한느낌은 아님 그래도 조금은 더 익숙해진 느낌이 들어서 만족스러움

'Java TIL' 카테고리의 다른 글

다형성이란?  (0) 2023.11.08
필드, 메소드, 매개변수  (0) 2023.11.07
키오스크 다시한번  (0) 2023.10.29
2023-10-20 TIJava 인터페이스  (0) 2023.10.20
2023-10-19 TIL  (1) 2023.10.20

관련글 더보기