# 게시글 로딩하기
# data.csv 파일 있으면 게시글을 로딩
# data.csv 파일이 없으면 파일을 만든다.

# 1. data.csv를 읽는다.
# 2. 데이터 한 줄씩 읽고 한줄마다 Post 인스턴스를 만든다.
# 3. Post 리스트에 인스턴스를 저장한다.

import os
import csv
from post import Post

# 파일 경로
file_path = "./myvenv/Chapter12/data.csv"

# Post 객체를 저장 할 리스트
post_list = []


# data.csv 파일이 있다면
if os.path.exists(file_path):
    # 게시글 로딩
    print("게시글 로딩중입니다.")
    # csv 파일 읽기
    f = open(file_path, "r", encoding="utf-8")
    # reader로 하면 한 줄씩 읽어온다
    reader = csv.reader(f)
    for data in reader:
       # Post 인스턴스 생성하기
        post = Post(int(data[0]), data[1], data[2], int(data[3]))
        # post 리스트에 append하기
        post_list.append(post)

else:
    # 게시글이 없다면 파일 생성하기
    f = open(file_path, "w", encoding="utf-8", newline="")
    f.close()

# 게시글 등록
# 1. Post 인스턴스 생성
# 2. Post 리스트에 저장

# Post 인스턴스
# 1.글번호 2.제목 3.내용 4.조회수
def write_post():
    """
    게시글 쓰기 함수
    """
    print("\n\n -게시글 쓰기")
    title = input("제목을 입력해주세요 \n >>>")
    content = input("내용을 입력해주세요 \n >>>")
    # 글번호
    id = post_list[-1].get_id() + 1
    post = Post(id, title, content, 0)
    post_list.append(post)
    print(" # 게시글이 등록되었습니다.")

# 게시글 목록
# 게시글 목록 출력하기

# 글 번호 선택하기
# 1. 없는 글 번호 -> 무한 반복
# 2. -1 입력시 -> 메뉴로 복귀
# 3. 올바른 글 번호 -> 게시글 상세 정보
def list_post():
    """
    게시글 목록 함수
    """
    print("# 게시글이 등록 되었습니다. ")
    id_list = []

    for post in post_list:
        print("번호:", post.get_id())
        print(":", post.get_title())
        print("번호:", post.get_view_count())
        print("")
        id_list.append(post.get_id())

    while True:
        print("Q) 글 번호를 선택해주세요 (메뉴로 돌아가려면 -1을 입력해주세요)")
        
        try:
            id = int(input(">>>"))
            if id in id_list:
                detail_post(id)
                break
            elif id == -1:
                break
            else:
                print("없는 글 번호입니다.")
        
        except ValueError:
            print("숫자를 입력해주세요")
        
# 게시글 상세정보 확인하기
# 1. 사용자가 입력한 글번호와 같은 게시글 찾기
# 2. 조회수 증가 및 상세 내용 출력
# 3. 수정, 삭제 기능을 수정할때엔 Post 객체를 넘겨주기

def detail_post(id):
    """
    게시글 상세보기 함수
    """
    print("\n\n 게시글 상세-")

    for post in post_list:
        if post.get_id() == id:
            # 조회수 1 증가
            post.add_view_count()
            print("번호", post.get_id())
            print("제목", post.get_title())
            print("본문", post.get_content())
            print("조회수", post.get_view_count())

            target_post = post

    while True:
        print("Q) 수정: 1 삭제: 2 (메뉴로돌아가려면 -1을 입력")        
        try:
            choice = int(input(">>>"))
            if choice == 1:
                update_post(target_post)
                break
            elif choice == 2:
                delete_post(target_post)
                break
            elif choice == -1:
                break
            else:
                print("잘못입력하였습니다.")
        except ValueError:
            print("숫자를 입력해주세요")        

# 게시글 수정
def update_post(target_post):
    """
    게시글 수정 함수
    """
    print("\n\n 게시글 수정")
    title = input("제목을 입력해주세요\n >>>")
    content = input("본문을 입력해주세요\n >>>")
    target_post.set_post(target_post.id, title, content, target_post.view_count)
    print(" # 게시글이 수정되었습니다.")


# 게시글 삭제
def delete_post(target_post):
    """
    게시글 삭제 함수
    """
    post_list.remove(target_post)
    print("게시글이 삭제되었습니다.")

# 게시글 저장하기
def save():
    """
    게시글 저장 함수
    """
    f = open(file_path, "w", encoding="utf-8", newline="")
    writer = csv.writer(f)
    for post in post_list:
        row = [post.get_id(), post.get_title(), post.get_content(), post.get_view_count()]
        writer.writerow(row)

    f.close()
    print("저장이 완료되었습니다.")


# 메뉴 출력하기
while True:
    print("\n\n- FASTCAMPUS BLOG")
    print("- 메뉴를 선택해주세요")
    print("1. 게시글 쓰기")
    print("2. 게시글 목록")
    print("3. 프로그램 종료")

# 문자를 썼을때 에러가 발생
    try:
        choice = int(input(">>>"))
    except ValueError:
        print("숫자를 입력해주세요")    
    else:      
        if choice == 1:
            write_post()
        elif choice == 2:
            list_post()
        elif choice == 3:
            save()
            break

 

 

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

BELATED ARTICLES

more