13주차 월 1113 (가상환경 설정, 쥬피터, (도서관리프로그램) :: newb

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 13주차 월 1113 (가상환경 설정, 쥬피터, (도서관리프로그램)
    광주인력개발원 일일포스팅(메모장) 2023. 11. 13. 16:49
    728x90
    반응형

    JDK  Java Development Kit

    자바 언어로 소프트웨어를 개발할 때 사용되는 개발 도구와 라이브러리 집합을 제공하는 소프트웨어 개발 키트입니다. JDK에는 자바 컴파일러, 디버거, 자바 가상 머신 (JVM), 그리고 다양한 개발 및 실행 도구가 포함되어 있습니다. JDK를 사용하면 자바 프로그램을 개발하고 실행하는 데 필요한 모든 도구와 라이브러리를 포함하여 효과적으로 자바 애플리케이션을 작성할 수 있다.

     

    JDK는 Oracle Corporation에서 제공되며, 자바 개발자들이 자바 애플리케이션을 개발하고 배포하는 데 필수적입니다. JDK의 여러 버전이 있으며, 각 버전은 새로운 기능, 개선 사항, 보안 패치 등을 포함하고 있습니다. 최신 버전의 JDK를 사용하는 것이 보안 및 성능 측면에서 권장된다.

     

     

    ----------------------------------------------------------------------------------------------------------------------------

    아나콘다 설치 이유

    가장 편해서

    기본적으로 파이썬exe 설치되어있고

    시각화 라이브러리, 사용할 수 있는 라이브러리가 포함되어 설치

    오류가 적다.

    일관적으로 라이브러리 관리가 유리

     

    base는 아나콘다가 관리하는 최상위

    base가 꺠지면 아나콘다가 꺠진다.

    가상환경을 새로 만들어서 작업을하고 문제가 생길시 새로만든 애를 삭제

    가상환경이 꺠진다는 의미- 라이브러리가 충돌 등..

     

    파이썬exe는 가상환경이 없고 만들어 가야한다.

    exe와 아나콘다는 가상환경을 만든느 기법이 조금 다르다.

    ----------------------------------------------------------------------------------------------------------------------------

     

     가상환경만들기

    1. 생성되어 있는 가상환경 확인하기
    > conda env list

     

    2. 가상환경 생성하기
    >conda create -n gj_env_01 python=3.9

     

    (해석) conda create -n 가상환경이름 python=파이썬버전 (3.9는 가장 안정적인 버전)
    콘다를 생성하겠다. -n(이름) 가상환경이름 python 버전

     

    3. 경로 , 목록확인
    >conda env list

     

    4.  가상환경 삭제하기 (버전충돌 등이 났을때 삭제)
    >conda remove -n gj_env_01 --all

     

    5. 가상환경으로 들어가기(활성화시키기)
    >conda activate gj_env_01

    6. 가상환경에서 나오기(비활성화 시키기)(한단계 상위로 올라간다.)
    >conda deactivate

    7. 설치되어 있는 패키지(라이브러리) 확인하기
    - 두가지 방법
    >conda list
    >pip list
    - 패키지를 설치할 때 conda를 이용해서 설치하면 가장 최적화된 것을 설치(conda는 y/n를 물어본다)
                                       pip를 이용해서 설치하면 가장 최신버전을 설치(pip는 바로설치)

    8. 외부 에디터에서 가상환경을 연결(kernel)하기 위하여
    kernel = 연결통로(커널이 가상환경 base와 연결이 되어있다)
    - jupyter 설치하기

    >pip install jupyter notebook

    jupyter notebook 설치확인
    >jupyter notebook

     

    여기서 내가 연결한 폴더를 열고 작업을 하면된다.

    ----------------------------------------------------------------------------------------------------------------------------

    ★학습

     

    [미션]
     - 도서 목록 : 새로운 책이 도서관에 [입고] 되었을 때 프로그램 작성
     - 도서 대출 : 도서 목록에서 임의 책을 빌리고자 할 때 [대출] 프로그램 작성
     - 도서 반납 : 대출한 도서를 [반납] 하고자 할 때 프로그램 작성
     - 종료하기 : 종료하기에 대한 프로그램 작성
     - 도서 입고/대출/반납/종료 중 원하는 것을 선택했을 때 위 내용 수행합니다.
     - 프로그램을 종료하기 전까지는 위 내용은 누구든지 서비스를 받을 수 있도록...반복 실행
     - 도서에 대한 확인 값은 자유롭게 정의하여 진행

    [조건]
     - class 생성하여 처리

    ----------------------------------------------------------------------------------------------------------------------------

    class librery:
        # 책 list와 인덱스 생성
        def __init__(self):
            self.books = list()
            self.보유책갯수 = 0
            self.returnBooks = list()
            self.대출책갯수 = 0
            self.직원pw = '1234'
        # 폼 생성
        def menu(self):
            return input("""
            입고 - a
            대출 - b
            반납 - c
            목록 - d
            종료 - q
            
            """)
        # 입고 시 이름과 번호입력 books에 append, index +1
        def do_a(self, books):
            pw = input('직원만 관리가능합니다. 비밀번호를 입력해주세요. :')
            if self.직원pw == pw:
                book = {'name':'', 'code':''}
                book['name'] = input('책 이름을 입력하세요. : ')
                book['code'] = input('책 번호를 입력하세요. : ')
                self.books.append(book)
                self.보유책갯수 = len(books)
                print(f'현재 책의 총 갯수 : {self.보유책갯수}' )
            else:
                print('비밀번호가 일치하지 않습니다.')
    
        # 대출 시 책이름 입력후 books.remove, returnBook에는 append 
        def do_b(self, books, returnBooks):
            for book in self.books:
                print(book['name'], book['code'])
            returnBook = {'name':'', 'code':''}
            checkOut = input('대출하고자 하는 책이름을 입력해주세요. : ')
            checkCode = input('해당 책의 코드를 입력해주세요. : ')
            for book in self.books:
                if book.get('name') == checkOut and book.get('code') == checkCode:
                    self.books.remove(book)
                    self.보유책갯수 = len(books)
                    print(f'현재 책의 총 갯수 : {self.보유책갯수}' )
                    self.returnBooks.append({'name': checkOut, 'code': checkCode})
                    self.대출책갯수 = len(self.returnBooks)
                    print(f'대출 책의 총 갯수 : {self.대출책갯수}' )
                    break
                else:
                    input('책이름과 코드번호를 확인해주세요.')
        # 반납 시 책이름 입력후 books.append, returnBook에는 remove
        def do_c(self, books, returnBooks):
            for returnBook in self.returnBooks:
                print(returnBook['name'], returnBook['code'])
            checkIn = input('반납하고자 하는 책이름을 입력해주세요. : ')
            checkCode = input('해당 책의 코드를 입력해주세요. : ')
            for returnBook in self.returnBooks:
                if returnBook.get('name') == checkIn and returnBook.get('code') == checkCode:
                    self.returnBooks.remove(returnBook)
                    self.대출책갯수 = len(self.returnBooks)
                    print(f'대출 책의 총 갯수 : {self.대출책갯수}' )
                    self.books.append({'name': checkIn, 'code':checkCode})
                    self.보유책갯수 = len(self.books)
                    print(f'현재 책의 총 갯수 : {self.보유책갯수}' )
                    break
                else:
                    input('책이름과 코드번호를 확인해주세요.')
        def do_d(self, books):
            for book in self.books:
                print(book['name'], book['code'])
        def main(self):
            while True:
                menu = self.menu()
                if menu == 'a':
                    print('입고')
                    self.do_a(self.books)
                elif menu == 'b':
                    print('대출')
                    self.do_b(self.books, self.returnBooks)
                elif menu == 'c':
                    print('반납')
                    self.do_c(self.books, self.returnBooks)
                elif menu == 'd':
                    print('목록')
                    self.do_d(self.books)
                elif menu == 'q':
                    print('종료')
                    break
                else:
                    print('잘못 입력하셨습니다.')
    
    if __name__ == '__main__':
        a = librery()
        a.main()
    

     

    내가 구성한 로직.. 

     

    강사님 코드

    ### 기능을 수행할 클래스(모듈 or 라이브러리) 정의
    class LibraryKiosk :
        ### 라이브러리는  일반적으로 항상 첫글자가 대문자
        ### 클래스 생성자 정의
        def __init__(self) :
            ### 도서 목록을 저장할 딕셔너리 변수 생성
            ### self 내 자원에 접근할 수 있는...
            # - 도서번호, 도서제목, 도서재고수량 정보담기
            self.books = {}
            # 셀프가 붙음으로서 전역변수가 됨
            print("클래스 생성 되었습니다.")
    
        ### 도서입고 기능 정의하기
        def add_book(self, book_id, title, quantity) :
            ### 입고할 도서번호가 존재하는지 확인
            # - 존재한다면 수량만 증가시키기
            if book_id in self.books :
                # self.books[book_id]["quantity"] = self.books[book_id]["quantity"] + quantity
                self.books[book_id]["quantity"] += quantity
            # - 존재하지 않는다면
            else :
                # {"001" : {"title" : "파이썬 기초", "quantity" : 4}}
                self.books[book_id] = {"title" : title, "quantity" : quantity}
    
            print(f"도서번호 : {book_id} / 제목 : {title} / 입고수량 : {quantity} 입고 성공")
    
        ### 대출 기능 정의하기
        def borrow_book(self, book_id) :
            ### 대출하고자하는 도서번호에 해당하는 재고수량 확인하기
            if (book_id in self.books) and (self.books[book_id]["quantity"] > 0) :
                #self.books[book_id]["quantity"] = self.books[book_id]["quantity"] - 1
                self.books[book_id]["quantity"] -= 1
                print(f"도서번호 : {book_id} / 제목 : {self.books[book_id]['title']} / 남은재고수량 : {self.books[book_id]['quantity']}")
            # - 해당 도서가 목록에 없거나 재고수량이 없다면
            else:
                print("도서가 존재하지 않거나, 대출할 재고가 없습니다.")
    
        ### 반납 기능 정의하기
        def return_book(self, book_id) :
            # - 반납할 도서번호가 도서목록에 있는지 확인
            if book_id in self.books :
                self.books[book_id]["quantity"] += 1
                print(f"도서번호 : {book_id} / 제목 : {self.books[book_id]['title']} / 남은재고수량 : {self.books[book_id]['quantity']}")
            # - 해당 도서가 목록에 없다면
            else:
                print("해당 도서가 존재하지 않습니다. ")

     

     

    ### 2. 최초 실행할 기능 (함수) 정의
    def main() :
        ### 클래스 생성하기
        # - 최초 한번 : 프로그램이 종료되면 클래스는 소멸(메모리 공간 삭제)됩니다.
        kiosk = LibraryKiosk()
        print(kiosk)
        ### 3. 메뉴 선택 보여주기
        while True:
            print("<도서 키오스크 메뉴>")
            print("1. 도서입고")
            print("2. 도서대출")
            print("3. 도서반납")
            print("4. 종료")
    
            choice = input("원하는 번호(1~4)를 선택하세요 : ")
    
            if choice == "1":
                book_id = input("도서 번호를 입력해 주세요: ")
                title   = input("도서 제목를 입력해 주세요: ")
                quantity= int(input("입고할 권수를 입력해 주세요: "))
                print(f"{book_id}/{title}/{quantity}")
    
                # - 클래스 내부의 입고 기능 호출하기
                kiosk.add_book(book_id, title, quantity)
    
            elif choice == "2":
                print("대출 선택")
                book_id = input("대출할 도서번호를 입력해주세요 : ")
    
                ### 클래스 내부의 대출 기능 호출하기
                kiosk.borrow_book(book_id)
    
            elif choice == "3":
                print("반납 선택")
                book_id = input("반납할 도서번호를 입력해주세요 : ")
    
                ### 클래스 내부의 반납 기능 호출하기
                kiosk.return_book(book_id)
    
            elif choice == "4":
                print("종료 선택")
                break
            else:
                print("번호를 확인해주세요")
    ### 1. 최초 코드 시작
    if __name__ == '__main__' :
        main()

     

    기능을 나눠서 해버리더라고...

     

    728x90
    반응형
Designed by Tistory.