본문 바로가기

Python

도서 관리 프로그램 (Python-SQLite3)

import sqlite3 as db
from datetime import datetime, timedelta

#첫번째 페이지
def first_page():
    print("="*30)
    print('0. 회원가입')
    print('1. 로그인')
    print('2. 책 반납하기')
    print('3. 종료')
    print("=" * 30)

#회원가입
membership_list = [] # 회원목록
def membership_join():
    try:

        new_id = input("희망하는 아이디를 입력하세요.: ")
        new_pw = input("희망하는 비밀번호를 입력하세요.: ")
        conn = db.connect("C:\\Users\\hoon5\\PycharmProjects\\pythonProject\\membership.db")
        c = conn.cursor()
        sql = f"insert into membership values('{new_id}','{new_pw}')"
        c.execute(sql)
        conn.commit()
        c.close()
        conn.close()
    except:
        print("이미 등록된 아이디 입니다")

#로그인
db_login_list = []
def membership_login():

    conn = db.connect("C:\\Users\\hoon5\\PycharmProjects\\pythonProject\\membership.db")
    c = conn.cursor()
    sql = f"select id,pw from membership "
    c.execute(sql)
    text = c.fetchall()
    text_id=[]
    text_pw=[]
    for i in range(len(text)):
        text_id.append(text[i][0])
        text_pw.append(text[i][1])
    # print(text_id)
    # print(text_pw)

    while True:
        new_id = input("아이디를 입력하세요.: ")
        new_pw = input("비밀번호를 입력하세요.: ")
        db_login_list.append(new_id)
        if new_id in text_id and new_pw in text_pw:
            return library()
            break
        else:
            print("아이디 혹은 비밀번호를 입력해주세요")

#도서관  선택
def library():
    print("1. 장덕도서관")
    print("2. 첨단도서관")
    print("3. 신가도서관")

# 조회화면
def inquiry():
    print("="*30)
    print("1.특정 도서 검색")
    print("2.특정 저자의 검색")
    print("3.장바구니에 추가")
    print("=" * 30)

#대여화면
def borrow():
    print("=" * 30)
    print("1. 장바구니 목록")
    print("2. 대여하기")
    print("3. 도서대여 목록")
    print("=" * 30)

# 특정 도서 검색
def search_book(libraryName):
    try:
            nameOfBook = input("책을 검색해주세요") # 검색할 도서명
            # db연동
            conn = db.connect("C:\\Users\\hoon5\\PycharmProjects\\pythonProject\\book.db")
            c = conn.cursor()
            sql = f"select bookNum,bookName,callNumber,registrationNum from book where bookName like '%{nameOfBook}%'and libraryName ='{libraryName}'"
            c.execute(sql)
            text = c.fetchall()
            print(text)
            conn.close()
            return text
    except:
            pass

# 특정 저자의 검색
def search_writer(libraryName):
    nameOfWriter = input("저자를 검색해주세요") # 검색할 저자명
    # db연동
    conn = db.connect("C:\\Users\\hoon5\\PycharmProjects\\pythonProject\\book.db")
    c = conn.cursor()
    sql = f"select bookName,registrationNum from gj_book where writer like '%{nameOfWriter}%'and libraryName ='{libraryName}'"
    c.execute(sql)
    print(c.fetchall())
    conn.close()

#선택한 도서 장바구니에 추가
choice_list=[] # 선택한 도서 리스트
def booklist_basket(librayName):
    choice_list.append(search_book(librayName))

#대여가능정보
def check_book(libraryName):
    rentBook = search_book(libraryName)
    conn = db.connect("C:\\Users\\hoon5\\PycharmProjects\\pythonProject\\borrowlist.db")
    c = conn.cursor()
    sql = f"select bookName,bookNum,callNumber,registrationNum from borrowlist"
    c.execute(sql)
    text =c.fetchall()
    conn.close()
    # print(rentBook[0][1])
    # print(text[1][0])
    # print(len(text))
    # for i in range(len(rentBook)):
    #     if rentBook[i][1]  == text[i][0]:
    #         print("대여가 불가능합니다")
    #     else:
    #         print("대여가 가능합니다")

# 반납하기
borrow_list = []
def return_book(libraryName):
    returnBook = search_book(libraryName)
    borrow_list.remove(returnBook[0])

#조회대여
def inqbro():
    print("1.조회")
    print("2.대여")

#책대여
myBorrowList = []
def borrow_book():
   print(choice_list)
   bookNum = int(input("대여하고싶은 책 번호를 입력해주세요!"))
   try:
       for choice in choice_list:
           myBorrowList.append(choice)
           if bookNum == choice[0][0]:
               conn = db.connect("C:\\Users\\hoon5\\PycharmProjects\\pythonProject\\borrowlist.db")
               c = conn.cursor()
               sql = f"Insert into borrowlist values('{choice[0][0]}','{choice[0][1]}','{choice[0][2]}','{choice[0][3]}','{db_login_list[0]}','{del_time()}')"
               c.execute(sql)
               conn.commit()
               conn.close()
               print("대여가 완료되었습니다")

   except:
       print("이미 대여중인 책입니다.")

#책반납
def del_borrowList():
    delBook = int(input("반납하고 싶은 책의 번호를 입력해주세요! 돌아가시려면 5번을 눌러주세요"))
    conn = db.connect("C:\\Users\\hoon5\\PycharmProjects\\pythonProject\\borrowlist.db")
    c = conn.cursor()
    sql = f"delete from borrowlist where bookNum = '{delBook}'"
    c.execute(sql)
    conn.commit()
    conn.close()
    print("책 반납이 완료되었습니다")

#책반납일
def del_time():
    now = datetime.now()  # 시간 전체
    # 현재(대여 시점) + 5일 = 반납예정일이 되도록 설정하기
    return_day = now + timedelta(days=5)
    print(f"오늘은 {now.year}년 {now.month}월 {now.day}일 입니다. -->도서 반납예정일자는 {return_day.year}년 {return_day.month}월 {return_day.day}일 입니다.")
    # return return_day
    # 년월일
    ymd = now.date()
    return ymd

#대여중인 책 목록
def allBorrowList():
    conn = db.connect("C:\\Users\\hoon5\\PycharmProjects\\pythonProject\\borrowlist.db")
    c = conn.cursor()
    sql = f"select * from borrowlist where userId = '{db_login_list[0]}'"
    c.execute(sql)
    text = c.fetchall()
    conn.close()
    print(text)





#--------------최종구현------------------
while True:
    first_page()
    choice_firstpage = int(input("번호를 입력해주세요!!"))
    if choice_firstpage==0: # 회원가입으로 이동
        membership_join()

    elif choice_firstpage==1:# 로그인 페이지로 이동 --> 로그인 성공시 도서관 선택
        membership_login()

        while True:
            #library()  도서관선택
            choice_library = int(input("번호를 입력해주세요! (돌아가시려면 5번을 눌러주세요)"))# 도서관 번호
            if choice_library == 1:  # 장덕도서관 선택
                while True:
                    inqbro() #조회/대여 선택
                    choice_inqbro = int(input("번호를 입력해주세요! (돌아가시려면 5번을 눌러주세요)"))
                    if choice_inqbro == 1:
                        while True:
                                inquiry()#조회목록
                                choice_book = int(input("번호를 입력해주세요! (돌아가실려면 5번을 눌러주세요)"))  # inquiry함수중에서 선택
                                if choice_book == 1:
                                    search_book('장덕도서관')
                                elif choice_book == 2:
                                    search_writer('장덕도서관')
                                elif choice_book == 3:
                                    booklist_basket('장덕도서관')
                                else:
                                    break
                    elif choice_inqbro ==2:
                        while True:
                                borrow()
                                choice_borrow = int(input("번호를 입력해주세요! (돌아가실려면 5번을 눌러주세요)"))
                                if choice_borrow ==1:
                                    print(choice_list)
                                elif choice_borrow ==2:
                                    borrow_book()
                                elif choice_borrow ==3:
                                    allBorrowList()
                                else:
                                    break
                    else:
                        library()
                        break
            elif choice_library == 2:  # 첨단도서관 선택
                while True:
                    inqbro() #조회/대여 선택
                    choice_inqbro = int(input("번호를 입력해주세요! (돌아가시려면 5번을 눌러주세요)"))
                    if choice_inqbro == 1:
                        while True:
                                inquiry()#조회목록
                                choice_book = int(input("번호를 입력해주세요! (돌아가실려면 5번을 눌러주세요)"))  # inquiry함수중에서 선택
                                if choice_book == 1:
                                    search_book('첨단도서관')
                                elif choice_book == 2:
                                    search_writer('첨단도서관')
                                elif choice_book == 3:
                                    booklist_basket('첨단도서관')
                                else:
                                    break
                    elif choice_inqbro ==2:
                        while True:
                                borrow()
                                choice_borrow = int(input("번호를 입력해주세요! (돌아가실려면 5번을 눌러주세요)"))
                                if choice_borrow ==1:
                                    print(choice_list)
                                elif choice_borrow ==2:
                                    borrow_book()
                                elif choice_borrow ==3:
                                    allBorrowList()
                                else:
                                    break
                    else:
                        library()
                        break
            elif choice_library == 3:  # 신가도서관 선택
                while True:
                    inqbro() #조회/대여 선택
                    choice_inqbro = int(input("번호를 입력해주세요! (돌아가시려면 5번을 눌러주세요)"))
                    if choice_inqbro == 1:
                        while True:
                                inquiry()#조회목록
                                choice_book = int(input("번호를 입력해주세요! (돌아가실려면 5번을 눌러주세요)"))  # inquiry함수중에서 선택
                                if choice_book == 1:
                                    search_book('신가도서관')
                                elif choice_book == 2:
                                    search_writer('신가도서관')
                                elif choice_book == 3:
                                    booklist_basket('신가도서관')
                                else:
                                    break
                    elif choice_inqbro ==2:
                        while True:
                                borrow()
                                choice_borrow = int(input("번호를 입력해주세요! (돌아가실려면 5번을 눌러주세요)"))
                                if choice_borrow ==1:
                                    print(choice_list)
                                elif choice_borrow ==2:
                                    borrow_book()
                                elif choice_borrow ==3:
                                    allBorrowList()
                                else:
                                    break
                    else:
                        library()
                        break
    elif choice_firstpage==2:#책 반납하기
       while True:
           allBorrowList()
           del_borrowList()
           break


이번 프로젝트를 수행하면서 얻은 소득은
데이터베이스와 파이썬과의 연동을 진행하며 각각 요소의 역할 및 개발 환경에 대해 이해 해볼 수 있었다는 점이다.

파이썬 언어를 기반으로 Sql 쿼리문을 반영하며 개별적인 함수를 만들어보고, 각각의 함수로 구현한 기능들을 반복문과 조건문을 활용해 실행시켜 봄으로써
함수와 반복문 및 조건문에 대해 좀 더 익숙해지고, 프로그램 제작 구조에 대해 경험할 수 있었다.

이에 더해, 각 기능들을 연결해가며 느낀 점은 프로젝트 기획 단계에서부터 설계 및 구조 구축간 충분한 고민을 통해 세밀하고 발생가능한 오류 요소들을 제거해나가는 것이 선행되어야 함을 절실히 깨달을 수 있었다.