0415 JDBC_도서정보 프로그램 작성

Fifty·2025년 4월 15일

2. JAVA

목록 보기
28/33

도서정보 JDBC 작성

도서정보를 저장하는 테이블
도서번호, 책제목, 저자, 출판사, 가격
Class: BookDAO
Method: select, update, delete, insert → 공통 사용 Connection
Data Access Object

1. tbl_book 생성

CREATE TABLE tbl_book(
bno NUMBER(3) PRIMARY KEY,
title VARCHAR2(20),
author VARCHAR2(20),
publisher VARCHAR2(20),
price NUMBER(6));

DESC tbl_book;

2. Book 클래스 생성

package JDBC_BOOK;

import lombok.Data;

@Data
public class Book {

	String bno;
	String title;
	String author;
	String publisher;
	int price;
	
}

3. BookDAO 생성

package JDBC_BOOK;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class BookDAO {

	private Connection conn;
	public Scanner sc = new Scanner(System.in);
	
	// 생성될 때 DB 접속
	public BookDAO() throws ClassNotFoundException, SQLException {
		String url="jdbc:oracle:thin:@localhost:1521:testdb";
		String user="green";
		String password="1234";
		
		Class.forName("oracle.jdbc.driver.OracleDriver");
		conn = DriverManager.getConnection(url, user, password);
		System.out.println("DB 연결");
	}
	
	// 도서정보 입력
	public void insert() throws SQLException {
		String bno;
		String title;
		String author;
		String publisher;
		int price;
		
		System.out.println("[안내] 도서정보 입력 페이지입니다.");
		System.out.print("도서번호 > ");
		bno=sc.next();
		System.out.print("책제목 > ");
		title=sc.next();
		System.out.print("저자 > ");
		author=sc.next();
		System.out.print("출판사 > ");
		publisher=sc.next();
		System.out.print("가격 > ");
		price=sc.nextInt();
		
		String query = "INSERT INTO tbl_book VALUES(?,?,?,?,?)";
		PreparedStatement pstmt = conn.prepareStatement(query);
		pstmt.setString(1, bno);
		pstmt.setString(2, title);
		pstmt.setString(3, author);
		pstmt.setString(4, publisher);
		pstmt.setInt(5, price);
		
		int result = pstmt.executeUpdate();
		
		if(result == 1)
			System.out.println("도서 정보 입력 완료");
		else
			System.out.println("입력한 정보를 다시 확인하세요");
	}
	
	// 도서정보 출력
	public void select() throws SQLException {
		System.out.println("[안내] 도서정보 출력 페이지입니다.");
		List<Book> list = new ArrayList<>();
		
		Statement stmt = conn.createStatement(); 
		String query = "SELECT * FROM tbl_book";
		ResultSet rs = stmt.executeQuery(query);
		
		while(rs.next()) {
			Book book = new Book();
			String bno = rs.getString("bno");
			String title = rs.getString("title");
			String author = rs.getString("author");
			String publisher = rs.getString("publisher");
			int price = rs.getInt("price");
			
			book.setBno(bno);
			book.setTitle(title);
			book.setAuthor(author);
			book.setPublisher(publisher);
			book.setPrice(price);
			
			list.add(book);
		}
		
		for(Book b: list)
			System.out.println(b);
	}
	
	// 도서정보 수정
	public void update() throws SQLException {
		System.out.println("[안내] 도서정보 수정 페이지입니다.");
		System.out.print("몇 번 게시글을 수정하시겠습니까? > ");
		String bno = sc.next();
		System.out.print("책제목 > ");
		String title=sc.next();
		System.out.print("저자 > ");
		String author=sc.next();
		System.out.print("출판사 > ");
		String publisher=sc.next();
		System.out.print("가격 > ");
		int price=sc.nextInt();
		
		String query = "UPDATE tbl_book SET title=?, author=?, publisher=?, price=? WHERE bno=?";
		PreparedStatement pstmt = conn.prepareStatement(query);
		pstmt.setString(1, title);
		pstmt.setString(2, author);
		pstmt.setString(3, publisher);
		pstmt.setInt(4, price);
		pstmt.setString(5, bno);
		
		int result = pstmt.executeUpdate();
		if(result == 1)
			System.out.println("도서 정보를 수정했습니다.");
		else
			System.out.println("도서 정보를 다시 확인하세요.");
	}
	
	// 도서정보 삭제
	public void delete() throws SQLException {
		System.out.println("[안내] 도서정보 삭제 페이지입니다.");
		System.out.println("몇 번 도서정보를 삭제하시겠습니까?");
		int bno = sc.nextInt();
		
		String query = "DELETE FROM tbl_book WHERE bno=?";
		PreparedStatement pstmt = conn.prepareStatement(query);
		pstmt.setInt(1, bno);
		
		int result = pstmt.executeUpdate();
		if (result == 1)
			System.out.println("도서 정보를 삭제했습니다.");
		else
			System.out.println("도서 정보 삭제를 실패했습니다.");
	}
	
}

Main에서 테스트

package JDBC_BOOK;

import java.sql.SQLException;

public class BookTest {

	public static void main(String[] args) throws ClassNotFoundException, SQLException {

		BookDAO bdao = new BookDAO();
		bdao.insert();
		bdao.select();
		bdao.update();
		bdao.delete();
		
	}		
}

코드스멜 개선하기

  1. DAO에서는 DB작업만 하게 수정하고, 결과값은 boolean이나 list를 반환하게 하기
  2. Book 클래스 생성자 추가해서 코드 간단하게 하기

Book.java

package JDBC_BOOK;

import lombok.Data;

@Data
public class Book {

	String bno;
	String title;
	String author;
	String publisher;
	int price;

	public Book() {}
	
	public Book(String bno, String title, String author, String publisher, int price) {
		this.bno = bno;
		this.title = title;
		this.author = author;
		this.publisher = publisher;
		this.price = price;
	}
	
}

BookDAO.java

package JDBC_BOOK;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class BookDAO {

	private Connection conn;
	public Scanner sc = new Scanner(System.in);
	
	// 생성될 때 DB 접속
	public BookDAO() throws ClassNotFoundException, SQLException {
		String url="jdbc:oracle:thin:@localhost:1521:testdb";
		String user="green";
		String password="1234";
		
		Class.forName("oracle.jdbc.driver.OracleDriver");
		conn = DriverManager.getConnection(url, user, password);
		System.out.println("DB 연결");
	}
	
	// 도서정보 입력
	public boolean insert(Book b) {
		String bno = b.getBno();
		String title = b.getTitle();
		String author = b.getAuthor();
		String publisher = b.getPublisher();
		int price = b.getPrice();
		String query = "INSERT INTO tbl_book VALUES(?,?,?,?,?)";
		
		try(PreparedStatement pstmt = conn.prepareStatement(query)) {
			pstmt.setString(1, bno);
			pstmt.setString(2, title);
			pstmt.setString(3, author);
			pstmt.setString(4, publisher);
			pstmt.setInt(5, price);
			
			int result = pstmt.executeUpdate();
			if(result == 1)
				return true;
			else
				return false;
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		}
		
	}
	
	// 도서정보 출력
	public List<Book> select(){
		System.out.println("[안내] 도서정보 출력 페이지입니다.");
		List<Book> list = new ArrayList<>();
		
		Statement stmt;
		try {
			stmt = conn.createStatement();
			String query = "SELECT * FROM tbl_book";
			ResultSet rs = stmt.executeQuery(query);
			
			while(rs.next()) {
				Book book = new Book();
				String bno = rs.getString("bno");
				String title = rs.getString("title");
				String author = rs.getString("author");
				String publisher = rs.getString("publisher");
				int price = rs.getInt("price");
				
				book.setBno(bno);
				book.setTitle(title);
				book.setAuthor(author);
				book.setPublisher(publisher);
				book.setPrice(price);
				
				list.add(book);
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return list; 
	}
	
	// 도서정보 수정
	public boolean update(String bno, String title, String author, String publisher, int price){
		
		String query = "UPDATE tbl_book SET title=?, author=?, publisher=?, price=? WHERE bno=?";
		
		try(PreparedStatement pstmt = conn.prepareStatement(query)) {
			pstmt.setString(1, title);
			pstmt.setString(2, author);
			pstmt.setString(3, publisher);
			pstmt.setInt(4, price);
			pstmt.setString(5, bno);
			
			int result = pstmt.executeUpdate();
			if(result == 1)
				return true;
			else
				return false;
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		}
	}
	
	// 도서정보 삭제
	public boolean delete(int no){
		String query = "DELETE FROM tbl_book WHERE bno=?";
		
		try(PreparedStatement pstmt=conn.prepareStatement(query)) {
			pstmt.setInt(1, no);
			
			int result = pstmt.executeUpdate();
			if (result == 1)
				return true;
			else
				return false;
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		}
		
	}
	
}

main(BookTest.java)

package JDBC_BOOK;

import java.sql.SQLException;
import java.util.List;
import java.util.Scanner;

public class BookTest {
	
	static Scanner sc = new Scanner(System.in);

	public static void main(String[] args) throws ClassNotFoundException, SQLException {

		BookDAO bdao = new BookDAO();
		
		while(true) {
			System.out.print("[메뉴] 입력:1, 출력:2, 수정:3, 삭제:4 > ");
			int n = sc.nextInt();
			switch(n) {
			case 1: insert_book(bdao); break;
			case 2: select_book(bdao); break;
			case 3: update_book(bdao); break;
			case 4: delete_book(bdao); break; 
			default: System.out.println("메뉴 선택을 다시 해주시기 바랍니다."); break;
			}
			System.out.println();
		}
	}		
	
	// 도서정보 입력
	public static void insert_book(BookDAO bdao) {
				
		System.out.println("[안내] 도서정보 입력 페이지입니다.");
		System.out.print("도서번호 > ");
		String bno=sc.next();
		System.out.print("책제목 > ");
		String title=sc.next();
		System.out.print("저자 > ");
		String author=sc.next();
		System.out.print("출판사 > ");
		String publisher=sc.next();
		System.out.print("가격 > ");
		int price=sc.nextInt();
		
		Book b = new Book(bno, title, author, publisher, price);
				
		if(bdao.insert(b))
			System.out.println("도서 정보 입력 완료");
		else
			System.out.println("입력한 정보를 다시 확인하세요");
	}

	// 도서정보 출력
	public static void select_book(BookDAO bdao) {
		List<Book> list = bdao.select();
		for(Book book:list)
			System.out.println(book);
	}
	
	// 도서정보 수정
	public static void update_book(BookDAO bdao) {
		System.out.println("[안내] 도서정보 수정 페이지입니다.");
		System.out.print("몇 번 게시글을 수정하시겠습니까? > ");
		String bno = sc.next();
		System.out.print("책제목 > ");
		String title=sc.next();
		System.out.print("저자 > ");
		String author=sc.next();
		System.out.print("출판사 > ");
		String publisher=sc.next();
		System.out.print("가격 > ");
		int price=sc.nextInt();
		
		if(bdao.update(bno, title, author, publisher, price))
			System.out.println("도서 정보를 수정했습니다.");
		else
			System.out.println("도서 정보를 다시 확인하세요");
	}

	// 도서정보 삭제
	public static void delete_book(BookDAO bdao) {
		System.out.println("[안내] 도서정보 삭제 페이지입니다.");
		System.out.println("몇 번 도서정보를 삭제하시겠습니까?");
		int no = sc.nextInt();
		if(bdao.delete(no))
			System.out.println("도서 정보를 삭제했습니다.");
		else
			System.out.println("도서 정보 삭제를 실패했습니다.");
	}
}

Member (일반회원, 관리자)

MemberDAO.java

package JDBC_BOOK;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class MemberDAO {

	private Connection conn;
	public Scanner sc = new Scanner(System.in);
	
	// 생성될 때 DB 접속
	public MemberDAO() throws ClassNotFoundException, SQLException {
		String url="jdbc:oracle:thin:@localhost:1521:testdb";
		String user="green";
		String password="1234";
		
		Class.forName("oracle.jdbc.driver.OracleDriver");
		conn = DriverManager.getConnection(url, user, password);
	//	System.out.println("DB 연결");
	}
	
	// 회원 가입
	public boolean insert(Member m) {
		String id = m.getId();
		String pw = m.getPw();
		String name = m.getName();
		String phone = m.getPhone();
		char grade = m.getGrade();
		String query = "INSERT INTO tbl_member VALUES(?,?,?,?,?)";
		
		try(PreparedStatement pstmt = conn.prepareStatement(query)) {
			pstmt.setString(1, id);
			pstmt.setString(2, pw);
			pstmt.setString(3, name);
			pstmt.setString(4, phone);
			pstmt.setInt(5, grade);
			
			int result = pstmt.executeUpdate();
			if(result == 1)
				return true;
			else
				return false;
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		}
		
	}
	
	// 회원 정보 출력
	public List<Member> select(){
		List<Member> list = new ArrayList<>();
		
		Statement stmt;
		try {
			stmt = conn.createStatement();
			String query = "SELECT * FROM tbl_member";
			ResultSet rs = stmt.executeQuery(query);
			
			while(rs.next()) {
				String id = rs.getString("id");
				String pw = rs.getString("id");
				String name = rs.getString("id");
				String phone = rs.getString("id");
				String gradeTemp = rs.getString("grade");
				char grade = gradeTemp.charAt(0);
				
				Member member = new Member(id, pw, name, phone, grade);
				list.add(member);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return list;
	}
	
	// 회원 정보 수정
	public boolean update(String id, String pw, String name, String phone, char grade){
		
		String gradeTemp = String.valueOf(grade);
		String query = "UPDATE tbl_member SET name=?, phone=?, grade=? WHERE id=? AND pw=?";
		
		try(PreparedStatement pstmt = conn.prepareStatement(query)) {
			pstmt.setString(1, name);
			pstmt.setString(2, phone);
			pstmt.setString(3, gradeTemp);
			pstmt.setString(4, id);
			pstmt.setString(5, pw);
			
			int result = pstmt.executeUpdate();
			if(result == 1)
				return true;
			else
				return false;
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		}
	}
	
	// 회원 정보 삭제
	public boolean delete(String id, String pw){
		String query = "DELETE FROM tbl_member WHERE id=? AND pw=?";
		
		try(PreparedStatement pstmt=conn.prepareStatement(query)) {
			pstmt.setString(1, id);
			pstmt.setString(2, pw);
			
			int result = pstmt.executeUpdate();
			if (result == 1)
				return true;
			else
				return false;
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		}
		
	}
	
}

Member.java

package JDBC_BOOK;

import lombok.Data;

@Data
public class Member {

	String id;
	String pw;
	String name;
	String phone;
	char grade;
	
	public Member() {}
	
	public Member(String id, String pw, String name, String phone, char grade) {
		this.id = id;
		this.pw = pw;
		this.name = name;
		this.phone = phone;
		this.grade = grade;
	}
}

Main(BookTest.java)

package JDBC_BOOK;

import java.sql.SQLException;
import java.util.List;
import java.util.Scanner;

public class BookTest {
	
	static Scanner sc = new Scanner(System.in);
	static Member currentUser = null;

	public static void main(String[] args) throws ClassNotFoundException, SQLException {

		BookDAO bdao = new BookDAO();
		MemberDAO mdao = new MemberDAO();
		
		choiceMenu(bdao, mdao);
		
	}
	
	// 로그인&관리자 여부에 따라 메뉴 별도 선택
	public static void choiceMenu(BookDAO bdao, MemberDAO mdao) {
		boolean flag=true;
		
		while(flag) {
			printMenu();
			int n = sc.nextInt();
			if(isManager()) {
				switch(n) {
				case 0: {
					if(currentUser==null)
						login(mdao);
					else 
						logout();
					break;
				}
				case 1: select_book(bdao); break;
				case 2: insert_book(bdao); break;
				case 3: update_book(bdao); break;
				case 4: delete_book(bdao); break;
				case 9: System.out.println("종료합니다."); flag=false; break;
				default: System.out.println("메뉴 선택을 다시 해주시기 바랍니다."); break;
				}
				System.out.println();
			}
			else {
				switch(n) {
				case 0: {
					if(currentUser==null)
						login(mdao);
					else 
						logout();
					break;
				}
				case 1: select_book(bdao); break;
				case 9: System.out.println("종료합니다."); flag=false; break;
				default: System.out.println("메뉴 선택을 다시 해주시기 바랍니다."); break;
				}
				System.out.println();
			}
		}
	}
	
	// 로그인&관리자 여부에 따라 메뉴 별도 출력
	public static void printMenu() {
		System.out.println("======= 메  뉴 ======");
		if(currentUser==null)
			System.out.println("0. 로그인");
		else
			System.out.println("0. 로그아웃");
		System.out.println("1. 도서정보 출력");
		if(isManager())
			System.out.println("2. 도서정보 입력\n3. 도서정보 수정\n4. 도서정보 삭제");
		System.out.println("9. 프로그램 종료");
		System.out.println("====================");
		System.out.print("메뉴 선택 > ");
	}

	// 로그인한 사람이 관리자인지?
	public static boolean isManager() {
		boolean flag = false;
		if(currentUser != null && currentUser.getGrade() == 'A')
			flag = true;
	    return flag;
	}
	
	// 로그인
	public static void login(MemberDAO mdao) {
		boolean flag=false;
		System.out.print("id > ");
		String id = sc.next();
		System.out.print("pw > ");
		String pw = sc.next();
		
		List<Member> list = mdao.select();
		for(Member m:list) {
			if(id.equals(m.getId()) && pw.equals(m.getPw())) {
				flag=true;
				currentUser=m;	// 현재 로그인한 사람?
				System.out.println(currentUser.getId()+"님 로그인 성공");
				break;
			}
		}
		if(!flag) System.out.println("로그인 정보를 다시 확인하세요.");
	}
	
	// 로그아웃
	public static void logout() {
		currentUser=null;
	}
	
	// 도서정보 입력
	public static void insert_book(BookDAO bdao) {
				
		System.out.println("[안내] 도서정보 입력 페이지입니다.");
		System.out.print("도서번호 > ");
		String bno=sc.next();
		System.out.print("책제목 > ");
		String title=sc.next();
		System.out.print("저자 > ");
		String author=sc.next();
		System.out.print("출판사 > ");
		String publisher=sc.next();
		System.out.print("가격 > ");
		int price=sc.nextInt();
		
		Book b = new Book(bno, title, author, publisher, price);
				
		if(bdao.insert(b))
			System.out.println("도서 정보 입력 완료");
		else
			System.out.println("입력한 정보를 다시 확인하세요");
	}

	// 도서정보 출력
	public static void select_book(BookDAO bdao) {
		List<Book> list = bdao.select();
		for(Book book:list)
			System.out.println(book);
	}
	
	// 도서정보 수정
	public static void update_book(BookDAO bdao) {
		System.out.println("[안내] 도서정보 수정 페이지입니다.");
		System.out.print("몇 번 게시글을 수정하시겠습니까? > ");
		String bno = sc.next();
		System.out.print("책제목 > ");
		String title=sc.next();
		System.out.print("저자 > ");
		String author=sc.next();
		System.out.print("출판사 > ");
		String publisher=sc.next();
		System.out.print("가격 > ");
		int price=sc.nextInt();
		
		if(bdao.update(bno, title, author, publisher, price))
			System.out.println("도서 정보를 수정했습니다.");
		else
			System.out.println("도서 정보를 다시 확인하세요");
	}

	// 도서정보 삭제
	public static void delete_book(BookDAO bdao) {
		System.out.println("[안내] 도서정보 삭제 페이지입니다.");
		System.out.println("몇 번 도서정보를 삭제하시겠습니까?");
		int no = sc.nextInt();
		if(bdao.delete(no))
			System.out.println("도서 정보를 삭제했습니다.");
		else
			System.out.println("도서 정보 삭제를 실패했습니다.");
	}


}

결과

======= 메  뉴 ======
0. 로그인
1. 도서정보 출력
9. 프로그램 종료
====================
메뉴 선택 > 0
id > aaa
pw > aaa
aaa님 로그인 성공

======= 메  뉴 ======
0. 로그아웃
1. 도서정보 출력
2. 도서정보 입력
3. 도서정보 수정
4. 도서정보 삭제
9. 프로그램 종료
====================
메뉴 선택 > 1
[안내] 도서정보 출력 페이지입니다.
Book(bno=1, title=자바스크립트, author=제로초, publisher=길벗, price=12000)
Book(bno=2, title=깃&깃허브, author=한재원, publisher=위키북스, price=18000)

======= 메  뉴 ======
0. 로그아웃
1. 도서정보 출력
2. 도서정보 입력
3. 도서정보 수정
4. 도서정보 삭제
9. 프로그램 종료
====================
메뉴 선택 > 3
[안내] 도서정보 수정 페이지입니다.
몇 번 게시글을 수정하시겠습니까? > 2
책제목 > 깃&깃허브
저자 > 한재원
출판사 > 위키북스
가격 > 16000
도서 정보를 수정했습니다.

======= 메  뉴 ======
0. 로그아웃
1. 도서정보 출력
2. 도서정보 입력
3. 도서정보 수정
4. 도서정보 삭제
9. 프로그램 종료
====================
메뉴 선택 > 1
[안내] 도서정보 출력 페이지입니다.
Book(bno=1, title=자바스크립트, author=제로초, publisher=길벗, price=12000)
Book(bno=2, title=깃&깃허브, author=한재원, publisher=위키북스, price=16000)

======= 메  뉴 ======
0. 로그아웃
1. 도서정보 출력
2. 도서정보 입력
3. 도서정보 수정
4. 도서정보 삭제
9. 프로그램 종료
====================
메뉴 선택 > 0

======= 메  뉴 ======
0. 로그인
1. 도서정보 출력
9. 프로그램 종료
====================
메뉴 선택 > 0
id > bbb
pw > bbb
bbb님 로그인 성공

======= 메  뉴 ======
0. 로그아웃
1. 도서정보 출력
9. 프로그램 종료
====================
메뉴 선택 > 1
[안내] 도서정보 출력 페이지입니다.
Book(bno=1, title=자바스크립트, author=제로초, publisher=길벗, price=12000)
Book(bno=2, title=깃&깃허브, author=한재원, publisher=위키북스, price=16000)

======= 메  뉴 ======
0. 로그아웃
1. 도서정보 출력
9. 프로그램 종료
====================
메뉴 선택 > 0

======= 메  뉴 ======
0. 로그인
1. 도서정보 출력
9. 프로그램 종료
====================
메뉴 선택 > 9
종료합니다.

수정사항

  1. 회원가입 절차 추가
  2. 로그인 안했을 경우, 메뉴 0. 로그인 1. 회원가입 9. 종료
    로그인한 일반회원, 메뉴 0. 로그아웃 1. 도서정보 출력 9. 종료
    로그인한 매니저, 메뉴 0.로그아웃 1. 도서정보 출력 2. 입력 3. 수정 4. 삭제 9. 종료
  3. 도서정보 검색에서 도서제목, 작가명, 출판사 검색을 통한 도서정보 출력
======= 메  뉴 ======
0. 로그인
1. 회원가입
9. 프로그램 종료
====================
메뉴 선택 > 0
id > aaa
pw > aaa
aaa님 로그인 성공
======= 메  뉴 ======
0. 로그아웃
1. 도서정보 출력
2. 도서정보 입력
3. 도서정보 수정
4. 도서정보 삭제
9. 프로그램 종료
====================
메뉴 선택 > 1
[출력방식] 전체출력:1, 부분출력:2, 검색출력:3
3
[검색항목] 도서제목:1, 작가명:2, 출판사:3 > 1
도서제목 검색 > 허브
Book(bno=2, title=깃&깃허브, author=한재원, publisher=위키북스, price=16000)

======= 메  뉴 ======
0. 로그아웃
1. 도서정보 출력
2. 도서정보 입력
3. 도서정보 수정
4. 도서정보 삭제
9. 프로그램 종료
====================
메뉴 선택 > 1
[출력방식] 전체출력:1, 부분출력:2, 검색출력:3
3
[검색항목] 도서제목:1, 작가명:2, 출판사:3 > 2
작가명 검색 > 허브
해당 도서 정보가 없습니다.

======= 메  뉴 ======
0. 로그아웃
1. 도서정보 출력
2. 도서정보 입력
3. 도서정보 수정
4. 도서정보 삭제
9. 프로그램 종료
====================
메뉴 선택 > 9
종료합니다.

0개의 댓글