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
'PYTHON-BACK' 카테고리의 다른 글
#파이썬 19일차_GitHub Action (0) | 2024.07.25 |
---|---|
#파이썬 도서관 출납 시스템_18일차_var. 0.2.0 (3) | 2024.07.24 |
#파이썬 도서관 출납 시스템_17일차 (3) | 2024.07.23 |
#파이썬 도서관 출납 시스템_16일차 (1) | 2024.07.22 |
#파이썬 기초 16일차 (0) | 2024.07.22 |