본문 바로가기

PYTHON-BACK

#파이썬 도서관 출납 시스템_18일차_var. 0.1.0

728x90
var. 0.1.0
  • 함수만을 이용해서 cmd창에서만 동작하도록 GUI 사용하지 않은 버전으로 제작
  • 각 해당하는 txt 파일을 만들어서 txt 파일을 통해서 해당 내용 저장 및 불러오기를 이용

 

  • 위 다이어그램과 완벽하게 동일하게 만들지는 못했다..

설명
  • main.py
    • 역할: 프로그램의 시작 화면을 설정
  • manage_boosk.py
    • 역할: 도서 정보 관리
      • 도서 추가 : 새로운 도서 추가하는 창
      • 도서 삭제 : 선택한 도서 삭제, ISBN 기준
      • 도서 검색 : 도서 검색 기능
      • 관리 창 : 도서 관리 기능
  • manage_members.py
    • 역할: 회원 정보를 관리
      • 회원 추가 : 새로운 회원 추가 창
      • 회원 삭제 : 선택한 회원 삭제
      • 회원 검색 : 회원 정보 검색 기능
      • 관리 창 : 회원 관리 기능
  • manage_boorrow_records.py
    • 역할: 대출 기록 관리
      • 대출 기록 추가 : 새로운 대출기록 추가 창
      • 대출 기록 삭제 : 선택한 대출기록 삭제
      • 대출 기록 검색 : 대출기록 검색 기능
      • 관리 창 : 대출 기록 관리 기능
  • manage_categories.py
    • 역할: 도서 카테고리 관리
      • 카테고리 추가 : 카테고리 추가 창
      • 카테고리 삭제 : 선택한 카테고리 삭제
  • manage_publishers.py
    • 역할: 출판사 정보 관리
      • 출판사 추가 : 새출판사 추가 창
      • 출판사 삭제 : 선택한 출판사 삭제

코드 
# main.py
import os
import manage_books
import manage_members
import manage_borrow_records

# 공통 메뉴
def selectMenu():
    os.system('cls')

    print("===========================")
    print("도서관리 프로그램 ver. 0.1.0")
    print("===========================")
    print()
    print("1: 도서정보 관리")
    print("2: 회원 정보 관리")
    print("3: 대출 기록 관리")
    print("0: 종료")
    print()
    return input("메뉴 선택: ")

# 메인 메뉴
def main():
    while True:
        menu = selectMenu()

        if menu == "0":
            break
        elif menu == "1":
            manage_books.manageBooks()
        elif menu == "2":
            manage_members.manageMembers()
        elif menu == "3":
            manage_borrow_records.manageBorrowRecords()
        else:
            print("메뉴를 잘못 선택했습니다!")
            input("아무 키나 눌러주세요...")

    print("프로그램을 종료합니다.")

if __name__ == '__main__':
    main()

 

# manage_books.py
import os
import manage_categories
import manage_publishers

BOOKS_FILE = './txt/books.txt'

def manageBooksMenu():
    os.system('cls')

    print("=========도서정보 관리=========")
    print("1: 도서 추가")
    print("2: 도서 삭제")
    print("3: 도서 검색")
    print("4: 카테고리 관리")
    print("5: 출판사 관리")
    print("0: 뒤로가기")
    print()
    return input("메뉴 선택: ")

def addBook():
    print("=========도서 추가=========")
    title = input("도서명: ")
    author = input("저자명: ")
    publisher = input("출판사: ")
    isbn = input("ISBN: ")
    publication_year = input("발행년도: ")
    category = input("카테고리: ")
   
    with open(BOOKS_FILE, 'a') as file:
        file.write(f"{isbn},{title},{author},{publisher},{publication_year},{category}\n")
   
    print(f"도서 '{title}'이(가) 추가되었습니다.")

def delBook():
    print("=========도서 삭제=========")
    isbn_to_delete = input("삭제할 도서의 ISBN: ")
   
    with open(BOOKS_FILE, 'r') as file:
        lines = file.readlines()
   
    with open(BOOKS_FILE, 'w') as file:
        for line in lines:
            if not line.startswith(isbn_to_delete):
                file.write(line)
   
    print(f"도서 ISBN '{isbn_to_delete}'이(가) 삭제되었습니다.")

def searchBookMenu():
    os.system('cls')

    print("=========도서 검색=========")
    print("1: 도서명 검색")
    print("2: 저자명 검색")
    print("3: 출판사 검색")
    print("4: ISBN 검색")
    print("5: 발행년도 검색")
    print("6: 카테고리 검색")
    print("0: 뒤로가기")
    print()
    return input("메뉴 선택: ")

def searchBook():
    while True:
        menu = searchBookMenu()
        if menu == "0":
            break
        query = input("검색어 입력: ")
       
        with open(BOOKS_FILE, 'r') as file:
            lines = file.readlines()
       
        for line in lines:
            parts = line.strip().split(',')
            if menu == "1" and query.lower() in parts[1].lower():
                print(line.strip())
            elif menu == "2" and query.lower() in parts[2].lower():
                print(line.strip())
            elif menu == "3" and query.lower() in parts[3].lower():
                print(line.strip())
            elif menu == "4" and query in parts[0]:
                print(line.strip())
            elif menu == "5" and query in parts[4]:
                print(line.strip())
            elif menu == "6" and query.lower() in parts[5].lower():
                print(line.strip())
       
        if menu not in ["1", "2", "3", "4", "5", "6"]:
            print("메뉴를 잘못 선택했습니다!")
       
        input("아무 키나 눌러주세요...")

def manageBooks():
    while True:
        submenu = manageBooksMenu()
        if submenu == "0":
            break
        elif submenu == "1":
            addBook()
        elif submenu == "2":
            delBook()
        elif submenu == "3":
            searchBook()
        elif submenu == "4":
            manage_categories.manageCategories()
        elif submenu == "5":
            manage_publishers.managePublishers()
        else:
            print("메뉴를 잘못 선택했습니다!")
        input("아무 키나 눌러주세요...")

 

# manage_borrow_records.py
import os

BORROW_RECORDS_FILE = './txt/borrow_records.txt'

def manageBorrowRecordsMenu():
    os.system('cls')

    print("=========대출 기록 관리=========")
    print("1: 대출 기록 저장")
    print("2: 반납 기록 저장")
    print("3: 과거 대출/반납 기록 조회")
    print("0: 뒤로가기")
    print()
    return input("메뉴 선택: ")

def saveBorrowRecord():
    print("=========대출 기록 저장=========")
    member_id = input("회원 ID: ")
    book_isbn = input("도서 ISBN: ")
    borrow_date = input("대출일: ")
   
    with open(BORROW_RECORDS_FILE, 'a') as file:
        file.write(f"{member_id},{book_isbn},{borrow_date},\n")
   
    print(f"회원 ID '{member_id}'이(가) 도서 ISBN '{book_isbn}'을(를) 대출했습니다.")

def saveReturnRecord():
    print("=========반납 기록 저장=========")
    member_id = input("회원 ID: ")
    book_isbn = input("도서 ISBN: ")
    return_date = input("반납일: ")
   
    with open(BORROW_RECORDS_FILE, 'a') as file:
        file.write(f"{member_id},{book_isbn},,{return_date}\n")
   
    print(f"회원 ID '{member_id}'이(가) 도서 ISBN '{book_isbn}'을(를) 반납했습니다.")

def viewPastRecords():
    print("=========과거 대출/반납 기록 조회=========")
    member_id = input("회원 ID: ")
   
    with open(BORROW_RECORDS_FILE, 'r') as file:
        lines = file.readlines()
   
    print(f"회원 ID '{member_id}'의 대출/반납 기록:")
    for line in lines:
        parts = line.strip().split(',')
        if parts[0] == member_id:
            print(f"도서 ISBN: {parts[1]}, 대출일: {parts[2]}, 반납일: {parts[3]}")
   
    if not any(line.startswith(member_id) for line in lines):
        print("기록이 없습니다.")

def manageBorrowRecords():
    while True:
        submenu = manageBorrowRecordsMenu()
        if submenu == "0":
            break
        elif submenu == "1":
            saveBorrowRecord()
        elif submenu == "2":
            saveReturnRecord()
        elif submenu == "3":
            viewPastRecords()
        else:
            print("메뉴를 잘못 선택했습니다!")
        input("아무 키나 눌러주세요...")

 

# manage_categories.py
import os

CATEGORIES_FILE = './txt/categories.txt'

def manageCategoriesMenu():
    os.system('cls')

    print("=========카테고리 관리=========")
    print("1: 카테고리 추가")
    print("2: 카테고리 삭제")
    print("3: 카테고리 목록 보기")
    print("0: 뒤로가기")
    print()
    return input("메뉴 선택: ")

def addCategory():
    print("=========카테고리 추가=========")
    category = input("카테고리명: ")
   
    with open(CATEGORIES_FILE, 'a') as file:
        file.write(f"{category}\n")
   
    print(f"카테고리 '{category}'이(가) 추가되었습니다.")

def delCategory():
    print("=========카테고리 삭제=========")
    category_to_delete = input("삭제할 카테고리명: ")
   
    with open(CATEGORIES_FILE, 'r') as file:
        lines = file.readlines()
   
    with open(CATEGORIES_FILE, 'w') as file:
        for line in lines:
            if line.strip() != category_to_delete:
                file.write(line)
   
    print(f"카테고리 '{category_to_delete}'이(가) 삭제되었습니다.")

def viewCategories():
    print("=========카테고리 목록=========")
    with open(CATEGORIES_FILE, 'r') as file:
        lines = file.readlines()
   
    print("카테고리 목록:")
    for line in lines:
        print(line.strip())

def manageCategories():
    while True:
        submenu = manageCategoriesMenu()
        if submenu == "0":
            break
        elif submenu == "1":
            addCategory()
        elif submenu == "2":
            delCategory()
        elif submenu == "3":
            viewCategories()
        else:
            print("메뉴를 잘못 선택했습니다!")
        input("아무 키나 눌러주세요...")

 

# manage_members.py
import os

MEMBERS_FILE = './txt/members.txt'

def manageMembersMenu():
    os.system('cls')
    print("=========회원 정보 관리=========")
    print("1: 회원 정보 추가")
    print("2: 회원 정보 수정")
    print("3: 회원 정보 삭제")
    print("4: 회원 대출 현황")
    print("0: 뒤로가기")
    print()
    return input("메뉴 선택: ")

def addMember():
    print("=========회원 정보 추가=========")
    name = input("회원명: ")
    member_id = input("회원 ID: ")
    contact = input("연락처: ")
    email = input("이메일: ")
   
    with open(MEMBERS_FILE, 'a') as file:
        file.write(f"{member_id},{name},{contact},{email}\n")
   
    print(f"회원 '{name}'이(가) 추가되었습니다.")

def editMember():
    print("=========회원 정보 수정=========")
    member_id_to_edit = input("수정할 회원의 ID: ")
   
    with open(MEMBERS_FILE, 'r') as file:
        lines = file.readlines()
   
    with open(MEMBERS_FILE, 'w') as file:
        for line in lines:
            parts = line.strip().split(',')
            if parts[0] == member_id_to_edit:
                new_name = input("새 회원명: ")
                new_contact = input("새 연락처: ")
                new_email = input("새 이메일: ")
                file.write(f"{member_id_to_edit},{new_name},{new_contact},{new_email}\n")
            else:
                file.write(line)
   
    print(f"회원 ID '{member_id_to_edit}'의 정보가 수정되었습니다.")

def deleteMember():
    print("=========회원 정보 삭제=========")
    member_id_to_delete = input("삭제할 회원의 ID: ")
   
    with open(MEMBERS_FILE, 'r') as file:
        lines = file.readlines()
   
    with open(MEMBERS_FILE, 'w') as file:
        for line in lines:
            if not line.startswith(member_id_to_delete):
                file.write(line)
   
    print(f"회원 ID '{member_id_to_delete}'이(가) 삭제되었습니다.")

def viewMemberBorrowing():
    print("=========회원 대출 현황=========")
    member_id = input("회원 ID: ")
   
    print(f"회원 ID '{member_id}'의 대출 현황을 조회합니다.")

def manageMembers():
    while True:
        submenu = manageMembersMenu()
        if submenu == "0":
            break
        elif submenu == "1":
            addMember()
        elif submenu == "2":
            editMember()
        elif submenu == "3":
            deleteMember()
        elif submenu == "4":
            viewMemberBorrowing()
        else:
            print("메뉴를 잘못 선택했습니다!")
        input("아무 키나 눌러주세요...")

 

# manage_publishers.py
import os

PUBLISHERS_FILE = './txt/publishers.txt'

def managePublishersMenu():
    os.system('cls')

    print("=========출판사 관리=========")
    print("1: 출판사 추가")
    print("2: 출판사 삭제")
    print("3: 출판사 목록 보기")
    print("0: 뒤로가기")
    print()
    return input("메뉴 선택: ")

def addPublisher():
    print("=========출판사 추가=========")
    publisher = input("출판사명: ")
   
    with open(PUBLISHERS_FILE, 'a') as file:
        file.write(f"{publisher}\n")
   
    print(f"출판사 '{publisher}'이(가) 추가되었습니다.")

def delPublisher():
    print("=========출판사 삭제=========")
    publisher_to_delete = input("삭제할 출판사명: ")
   
    with open(PUBLISHERS_FILE, 'r') as file:
        lines = file.readlines()
   
    with open(PUBLISHERS_FILE, 'w') as file:
        for line in lines:
            if line.strip() != publisher_to_delete:
                file.write(line)
   
    print(f"출판사 '{publisher_to_delete}'이(가) 삭제되었습니다.")

def viewPublishers():
    print("=========출판사 목록=========")
    with open(PUBLISHERS_FILE, 'r') as file:
        lines = file.readlines()
   
    print("출판사 목록:")
    for line in lines:
        print(line.strip())

def managePublishers():
    while True:
        submenu = managePublishersMenu()
        if submenu == "0":
            break
        elif submenu == "1":
            addPublisher()
        elif submenu == "2":
            delPublisher()
        elif submenu == "3":
            viewPublishers()
        else:
            print("메뉴를 잘못 선택했습니다!")
        input("아무 키나 눌러주세요...")

 

최종 동작

 

ver. 0.2.0은 지난번 학습한 tkinter를 사용해서 GUI를 적용한 버전으로 개발예정

728x90