프로젝트 설명
게시판 만들기 프로젝트이다.
게시판에서 게시물쓰기, 게시물보기, 게시물상세보기, 게시물수정, 게시물삭제를 구현했다.
클래스만들기
import os #파일 경로를 위해서
import csv #csv파일을 쓰고 읽기 위해서
# 인스턴스변수로는 id, title, content가 있다.
# 생성자의 매개변수로는 title과 content가 있고
# id값은 클래스 변수를 활용해서 설정해주었다.
# 클래스변수를 생정자안에 넣어서 객체가 생성될때마다 1씩 증가하게 했다.
# 이를 이용해서 객체의 id값으로 주었다.
class Board :
number = 1
def __init__(self, title, content):
self.id = Board.number
self.title = title
self.content = content
Board.number += 1
def set_csvtype(self):
return self.id, self.title, self.content
#csv파일에 데이터를 읽거나 쓰기 위해서는,
#형태가 되어야 하므로 set_csvtype() 메서드를 만들었다.
# def get_title(self):
# return self.title
# def get_content(self):
# return self.content
# def get_id(self):
# return self.id
# def set_title(self, new_title):
# self.title = new_title
# def set_content(self, new_content):
# self.title = new_content
데이터 가지고 오기
path = "data.csv"
#csv파일이 있는지 없는지 확인
if not os.path.exists(path) : #path에 해당하는 파일이 존재하는지 아닌지를 판단해서 True/False로 반환한다. 앞에 not 키워들로 존재하지 않으면 True
file = open("data.csv", "w", newline="", encoding="UTF-8-sig") # 없으면 파일을 "w"모드로 열어서 생성해준다.
file.close()
# 아래로 내려오면 이제 csv파일은 있는 경우이다.
# 먼저 csv파일에 데이터가 있는지 없는지를 확인해서
# 데이터가 있다면 불러오고, 없다면종료
data_list = [] # 데이터가 있다면 데이터를 담을 리스트가 필요하다.
data_object_list = [] # 객체를 담는 데이터
#데이터가 있는 경우
if os.path.getsize("data.csv") > 0:
print("데이터 로딩 중...........")
print()
check_file = open("data.csv", "r", encoding="UTF-8-sig")
reader = csv.reader(check_file)
for data in reader: #리더객체이므로 하나씩 돌아가면 자료를 가지고 온다.
board = Board(data[1], data[2]) # 가지고 온 자료로 객체를 만들어 준다.
board_data = board.set_csvtype() # 객체 그대로를 리스트에 추가하면 안되고, 객체의 id, title, content 데이터를 추가해야한다. set_csvtype()은 ,형태로 데이터를 만드는 것이다.
data_list.append(board_data) #게시판은 기존에 자료가 있어야 읽고, 다른 자룔르 추가할 수 있다.
data_object_list.append(board)
check_file.close()
# 수정할 게시판 번호를 detail_choice 받아서 data_list[detail_choice-1]의 자료에 접근한다.
# 그러면 게시판번호, 게시판 타이틀, 게시판 본문 내용의 튜플이 온다.
# 여기서 튜플은 데이터의 추가 삭제가 불가능하므로 리스트로 바꾼다.
# 그후 각 데이터에 접근해서 값을 바꾸어준다.
# 마지막으로 file을 열어서 덮어씌어준다.
함수선언
#게시판 삭제
def delete(detail_choice):
del data_list[detail_choice-1]
file = open("data.csv", "w" ,newline="", encoding="UTF-8-sig")
writer = csv.writer(file)
for data in data_list:
writer.writerow(data)
file.close()
#게시판 수정
def update(detail_choice):
print("title을 입력하세요")
title = input(">>>>>")
print("content을 입력하세요")
content = input(">>>>>")
data_list[detail_choice-1] = list(data_list[detail_choice-1])
data_list[detail_choice-1][1] = title
data_list[detail_choice-1][2] = content
file = open("data.csv", "w" ,newline="", encoding="UTF-8-sig")
writer = csv.writer(file)
for data in data_list:
writer.writerow(data)
file.close()
# data_object_list[detail_choice-1].title = title
# data_object_list[detail_choice-1].content = content
# data_object_list[detail_choice-1].set_title(title)
# data_object_list[detail_choice-1].set_content(content)
# data_object_list[detail_choice-1].title = title
# data_object_list[detail_choice-1].content = content
# print(data_object_list[detail_choice-1].get_id())
# print(data_object_list[detail_choice-1].get_title())
# print(data_object_list[detail_choice-1].get_content())
# data_list[detail_choice-1] = list(data_list[detail_choice-1])
# data_list[detail_choice-1][1] = title
# data_list[detail_choice-1][2] = content
# print(data_list[detail_choice-1])
#게시판 상세보기
def show_detail(detail_choice):
if len(data_list) > 0 :
print()
print(f" {detail_choice}번글")
print("==================")
for data in data_list:
if detail_choice == data[0]:
print(f"title : {data[1]}")
print(f"content : {data[2]}")
print()
print()
print("1.update 2.delete 3.back")
print()
while True:
try :
detail_show_mode_choice = int(input(">>>>>>"))
if detail_show_mode_choice == 1:
update(detail_choice)
break
elif detail_show_mode_choice == 2:
delete(detail_choice)
break
elif detail_show_mode_choice == 3:
break
else :
print("잘못입력하셨습니다.(1/2/3)")
print()
except ValueError:
print(">숫자를 입력하세요<")
print()
else:
print("게시물이 존재하지 않습니다.")
# 게시판 보기
def show_board():
print()
print(" 게시물")
print("==================")
if len(data_list) > 0:
for data in data_list:
print(f"num : {data[0]}")
print(f"title : {data[1]}")
print()
print()
while True:
print("1.show_deail 2.add_board 3.back")
print()
try :
show_mode_choice = int(input(">>>>>>"))
if show_mode_choice == 1:
print("글번호를 입력하세요")
try:
detail_choice = int(input(">>>>>"))
if detail_choice in range(1,len(data_list)+1):
show_detail(detail_choice)
else:
print("존재하지 않는 글입니다.")
except ValueError:
print("글을 다시 선택해주세요")
elif show_mode_choice ==2:
add_board()
break
elif show_mode_choice == 3:
break
else :
print("show_mode_choice 잘못입력하셨습니다.(1/2/3)")
print()
except ValueError:
print("show_mode_choice 숫자를 입력하세요")
print()
else:
print("게시물이 존재하지 않습니다.")
#게시판 추가하기
def add_board():
print()
print("title을 입력하세요")
title = input(">>>>>")
print("content를 입력하세요")
content = input(">>>>>")
board = Board(title, content)
data_object_list.append(board)
save_board(board)
#게시판 저장하기
def save_board(board):
new_board = board.set_csvtype()
data_list.append(new_board)
save_file = open("data.csv", "w", newline="", encoding="UTF-8-sig")
writer = csv.writer(save_file)
for data in data_list:
writer.writerow(data)
save_file.close()
실행구문
while True: #무한반복
print()
print(" Board")
print("==================")
print("1.view")
print("2.add")
print("3.exit")
print()
try :
mode_choice = int(input(">>>>>>"))
if mode_choice == 1:
show_board()
elif mode_choice ==2:
add_board()
elif mode_choice == 3:
print("프로그램을 종료합니다.")
print()
break
else :
print("mode_choice 잘못입력하셨습니다.(1/2/3)")
print()
except ValueError:
print("mode_choice 숫자를 입력하세요")
print()