13주차 월 1113 (가상환경 설정, 쥬피터, (도서관리프로그램)
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()
기능을 나눠서 해버리더라고...