광주인력개발원 일일포스팅(메모장)

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

Jumbo96 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
반응형