게시판 만들기
게시판에 게시글을 추가하고, 읽고, 삭제, 수정하는 프로그램을 구현해보자
읽고, 글을쓰는 것은 가능했지만 수정과 삭제는 구현실패
좀더 공부 후 코드 추가
클래스 만들기
import os
import csv
class Post :
post_num = 0 #클래스 변수로 게시물이 하나 추가될때 마다 1씩 올라간다.
def __init__(self, title, content):
self.title = title
self.content = content
Post.post_num += 1
def make_post(self): ##csv파일에 추가하기 위해서 ,로 형식을 만드는 코드
return Post.post_num, self.title, self.content
def get_title(self):
return self.title
def get_content(self):
return self.content
데이터 가지고 오기
#데이터를 가지고 올때 담을 변수
data=[]
# 파일이 존재하지 않을 경우 만들고 종료
if not os.path.exists("data.csv"):
file =open("data.csv", "w",newline="", encoding= "UTF-8-sig")
file.close()
# 파일이 존재하는 경우 파일을 연다.
if os.path.exists("data.csv"):
file = open("data.csv", "r", encoding= "UTF-8-sig")
#파일에 데이터가 있으면 데이터를 가지고 와서 먼저 객체를 만들어준다.
if os.path.getsize("data.csv") > 0:
reader = csv.reader(file)
for i in reader:
post = Post(i[0],i[1])
new_post = post.make_post()
data.append(new_post) #객체를 만들고 그 객체를 data[]에 담는다.
#파일레 데이터가 없으면 그대로 pass
else:
pass
file.close()
데이터 추가하기
#타이틀과 컨텐트 입력받아서 새로운 객체로 만들고 그 객체를 data[]에 저장
#파일에 저장된 데이터를 덮어쓰기
def add_post():
title = input("title 입력하세요>>>")
print()
content = input("content 입력하세요>>>")
print()
post = Post(title, content)
new_post = post.make_post()
data.append(new_post)
file =open("data.csv", "a",newline="", encoding= "UTF-8-sig")
writer = csv.writer(file)
writer.writerow(data[-1]) #맨 마지막 데이텀나 추가
#구현실패
#공부 후 다시 구현
def update_post(target):
pass
def del_post():
pass
데이터 상세보기
def show_detail(number):
file =open("data.csv", "r", encoding= "UTF-8-sig")
reader = csv.reader(file)
for i in reader:
if number == i[0]:
print()
print(f" {i[0]}번 글 상세보기")
print(f" title : {i[1]}")
print(f" content : {i[2]}")
print()
break
file.close()
while True:
print("1.수정하기 2.삭제하기 3.돌아가기(-1을 입력하세요)")
choice = int(input("입력하세요>>>>>"))
if choice == 1:
update_post(data[int(number)-1])
elif choice ==2 :
del_post()
elif choice == -1:
break
데이터 보기
#데이터를 읽기 모드로 열어서 모든 데이터를 돌아가면서 출력
def show_post():
file =open("data.csv", "r", encoding= "UTF-8-sig")
reader = csv.reader(file)
for index, data in enumerate(reader, start=1):
print()
print(f"{index} 번째 글입니다.")
print(f"number : {data[0]}")
print(f"title : {data[1]}")
print()
#글 상세 페이지로 이동하기위한 코드
while True:
print("1.상세보기(글번호를 입력하세요), 2.뒤로돌아가기(-1 을입력하세요)")
choice = int(input(">>>"))
if choice == -1:
break
elif choice in range(1, Post.post_num+1):
show_detail(str(choice))
break
file.close()
실행구문
while True:
print(" 게시물 메뉴 ")
print("1. 게시물 보기 ")
print("2. 게시물 쓰기 ")
print("3. 프로그램종료 ")
print()
try:
mode_choice = int(input("입력하세요>>>>"))
print()
if mode_choice not in (1,2,3):
raise ValueError()
else:
if mode_choice == 1:
print(">>>>>게시물 보기<<<<<")
print()
print()
show_post()
elif mode_choice == 2:
print(">>>>>게시물 쓰기<<<<<")
print()
add_post()
elif mode_choice ==3:
print(">>>>>프로그램 종료<<<<<")
print()
break
except ValueError:
print("다시 입력하세요")
print()