04. while 문 작성
프로그램 응답 및 대기 상태를 위해 while 문을 작성한다.
몇 가지 추가될 기능을 포함하여 작성하고, 먼저 출판사 등록이 정상적으로 이뤄지는지 확인해 볼 예정이다.
import sqlite3
# DB생성 및 Auto Commit, RollBack
conn = sqlite3.connect(r'.\book_manager_database.db', isolation_level=None) # 해당 경로에 book_manager_database.db DB파일이 생성된다.
# 커서(Cursor)의 이용
global cursor
cursor = conn.cursor()
print('Cursor Tppe : ', type(cursor)) # Cursor Tppe :
######################################################################
# 테이블 생성(Data Type : TEXT, NUMERIC INTEGER, REAL, BLOB)
# 도서 기준(출판사)
cursor.execute('CREATE TABLE IF NOT EXISTS publisher(pub_id integer primary key autoincrement, publisher_name text unique, \
email text, tel_no text, website text, address text)')
# 출판사 등록 함수
def register_publisher(publisher_name, email, tel_no, website, address):
cursor.execute(r"insert into publisher (publisher_name, email, tel_no, website, address) values('{}','{}','{}','{}','{}')".format(publisher_name, email, tel_no, website, address));
while True :
print('#################################################')
print('▼ 출판사 등록 : 1\n▼ 도서 등록 : 2\n▼ 도서 검색 및 대여 : 3\n▼ 출판사 검색 : 7\n▼ 프로그램 종료 : 0')
input_command= input("수행하실 동작을 입력하세요. : ")
if input_command == '1': # 출판사 등록
publisher_company_name = input('출판사 명을 입력하세요. : ')
publisher_company_email = input('출판사의 메일주소를 입력하세요. : ')
publisher_company_tel = input('출판사의 전화번호를 입력하세요. : ')
publisher_company_site = input('출판사의 Web Site 주소를 입력하세요. : ')
publisher_company_address = input('출판사의 주소를 입력하세요. : ')
register_publisher(publisher_company_name, publisher_company_email, publisher_company_tel, publisher_company_site, publisher_company_address)
elif input_command == '2': # 도서 등록
pass
elif input_command == '3': # 도서 검색 및 대여
pass
elif input_command =='7': # 출판사 검색
pass
elif input_command == '0':
print('\n프로그램을 종료합니다.\n\n')
break
else:
print('\n\n잘못된 입력입니다. 항목을 다시 선택하세요.\n')
Error 메세지는 나타나지 않는데.... 등록이 정상적으로 진행되었는지 확인이 필요할 것 같다....
급하게 출판사 검색 함수를 작성....
# 출판사 검색 함수
def select_publisher(company_name):
# 출판사 결과 리스트 초기화
global result_rows
result_rows =[]
if company_name == '':
cursor.execute("select * from publisher");
else:
cursor.execute(r"select * from publisher where publisher_name like '{}'".format(company_name));
result_rows = cursor.fetchall()
#print(len(result_rows))
#print(type(result_rows))
for r in result_rows:
print(r)
출판사 검색 함수는 사용자에게서 출판사명을 먼저 전달 받아 확인하는 함수로 만들었다.
이후, 도서 등록 등에도 사용이 필요할 것 같아 전역 변수로 설정하였고,
빈 값이 입력되면, 등록된 전체 출판사 리스트를 출력하고, 특정 값이 입력되면 검색 후, 검색 결과 값을 반환한다.
출판사 검색 시, wildcard 를 사용해야 할지 고민을 잠깐해보았다....
wildcards 는 전체가 아닌 일부를 알고 있을 때 검색을 도와줄 수 있는 기능이다.
종류로는 '%' 와 '_' 가 있는데 각각 기능의 차이를 보면
% : 길이와는 상관없이 해당 항목을 표시
_ : 1개의 문자열을 표시
할 수 있다.
만약 출판사 정보가 아래와 같이 등록되어 있다면,
검색 조건(where 절) | 검색 결과 | 이유 |
publisher_name = 'abc' | 0 건 | 완전히 일치하는 항목이 없음 |
publisher_name = 'abc출판' | 1 건 (No 1) | 완전히 일치하는 항목만 출력 |
publisher_name like '%b%출판' | 2 건 (No 1, 4) | 길이에 상관없이 출판사명에 b를 포함한 항목이 출력 |
publisher_name like '_b_출판' | 1 건(No 1) | '_' 의 경우 1개의 문자열만을 표시하므로, abcd출판은 자릿수가 맞지 않음. |
표와 같은 형태로 검색 결과가 나타나게된다.
일반 사용자의 경우, 도서명을 검색하는 경우는 있으나, 출판사명을 검색할 일은 거의 없을 거라는 생각이 들어
관리자가 정확한 업무를 진행하기 위해 출판사의 검색은 wildcards 를 제거하였다.
그리고, 관리자와 일반 사용자의 로그인이 먼저 진행되어야 할 것 같은 생각이 들어..
다시 로그인 과정을 생성하였다...
이런 갑작스러운 번복 및 실수를 피하기 위해서 사전 기획이 중요하다......
로그인 과정은 다음 글에...
출판사 검색 까지 등록된 전체 코드
import sqlite3
# DB생성 및 Auto Commit, RollBack
conn = sqlite3.connect(r'.\book_manager_database.db', isolation_level=None) # 해당 경로에 book_manager_database.db DB파일이 생성된다.
# 커서(Cursor)의 이용
global cursor
cursor = conn.cursor()
print('Cursor Tppe : ', type(cursor)) # Cursor Tppe :
######################################################################
# 테이블 생성(Data Type : TEXT, NUMERIC INTEGER, REAL, BLOB)
# 도서 기준(출판사)
cursor.execute('CREATE TABLE IF NOT EXISTS publisher(pub_id integer primary key autoincrement, publisher_name text unique, \
email text, tel_no text, website text, address text)')
# 출판사 등록 함수
def register_publisher(publisher_name, email, tel_no, website, address):
cursor.execute(r"insert into publisher (publisher_name, email, tel_no, website, address) values('{}','{}','{}','{}','{}')".format(publisher_name, email, tel_no, website, address));
# 출판사 검색 함수
def select_publisher(company_name):
# 출판사 결과 리스트 초기화
global result_rows
result_rows =[]
if company_name == '':
cursor.execute("select * from publisher");
else:
cursor.execute(r"select * from publisher where publisher_name like '{}'".format(company_name));
result_rows = cursor.fetchall()
#print(len(result_rows))
#print(type(result_rows))
for r in result_rows:
print(r)
while True :
print('#################################################')
print('▼ 출판사 등록 : 1\n▼ 도서 등록 : 2\n▼ 도서 검색 및 대여 : 3\n▼ 출판사 검색 : 7\n▼ 프로그램 종료 : 0')
input_command= input("수행하실 동작을 입력하세요. : ")
if input_command == '1': # 출판사 등록
publisher_company_name = input('출판사 명을 입력하세요. : ')
publisher_company_email = input('출판사의 메일주소를 입력하세요. : ')
publisher_company_tel = input('출판사의 전화번호를 입력하세요. : ')
publisher_company_site = input('출판사의 Web Site 주소를 입력하세요. : ')
publisher_company_address = input('출판사의 주소를 입력하세요. : ')
register_publisher(publisher_company_name, publisher_company_email, publisher_company_tel, publisher_company_site, publisher_company_address)
elif input_command == '2': # 도서 등록
pass
elif input_command == '3': # 도서 검색 및 대여
pass
elif input_command =='7': # 출판사 검색
company_name = input('출판사명을 입력하세요. \n※ 빈칸 입력 시, 전체 검색 : ')
select_publisher(company_name)
elif input_command == '0':
print('\n프로그램을 종료합니다.\n\n')
break
else:
print('\n\n잘못된 입력입니다. 항목을 다시 선택하세요.\n')
Step1 - DB(SQLite3) (0) | 2022.08.06 |
---|---|
intro..도서 대여 프로그램 만들기.... (0) | 2022.07.25 |
댓글 영역