728x90
반응형
34. 배열 활용 : 도서 관리 프로그램 만들기
1. Book 클래스를 만들고, 내부에 생성자/get 메서드/showInfo 메서드를 만들어보자.
2. BookTest 파일을 만들고,CRUD 형식에 맞추어 소스코드를 작성해보자.
(1) Book 클래스
package basic.ch15;
public class Book {
private int totalPage;
private String title;
private String author;
// 생성자
public Book(String title, String author) {
this.title=title;
this.author=author;
}
// 생성자 오버로딩
public Book(String title, String author, int totalpPage) {
this(title, author);
this.totalPage=totalPage;
}
// getter 메서드
public int getPage() {
return this.totalPage;
}
public String getTitle() {
return this.title;
}
public String getAuthor() {
return this.author;
}
// showInfo 메서드
public void showInfo() {
System.out.println(">>>책 정보<<<");
System.out.println("제목 : "+title);
System.out.println("저자 : "+author);
System.out.println("총 페이지 수 : "+totalPage);
}
}
(2). TestBook 파일
package basic.ch15;
import java.util.Scanner;
public class MyBookStore {
static int LAST_INDEX_NUMBER=0;
public static void main(String[] args) {
// 준비물
Scanner sc = new Scanner(System.in);
// 배열 선언
Book[] books = new Book[100];
// 샘플 데이터 생성
books[0] = new Book("플러터 UI 실전", "김근호");
books[1] = new Book("무궁화 꽃이 피었습니다", "김진명");
books[2] = new Book("옥문도", "요코미조 세이시");
books[3] = new Book("리딩으로 리드하라", "이지성");
books[4] = new Book("팔묘촌", "요코미조 세이시");
// 메뉴 생성-상수 선언
final String SAVE = "1";
final String SEARCH_ALL = "2";
final String SEARCH_BY_TITLE = "3";
final String DELETE_ALL = "4";
final String END = "0";
boolean flag = true;
while (flag) {
System.out.println("** 메뉴 선택 **");
System.out.println("1. 저장 | 2. 전체 조회 | 3. 선택 조회 | 4. 전체 삭제 | 0. 프로그램 종료");
String selectedNumber = sc.nextLine(); // 문자열을 받고+줄을 바꿔주는 메서드
System.out.println("selectedNumber :" + selectedNumber);
if (selectedNumber.equals(SAVE)) { // String 비교할 땐 equals
System.out.println(">> 저장하기 <<");
save(sc,books);
} else if (selectedNumber.equals(SEARCH_ALL)) {
System.out.println(">> 전체 조회하기 <<");
readAll(books);
} else if (selectedNumber.equals(SEARCH_BY_TITLE)) {
System.out.println(">> 선택 조회하기 <<");
readByTitle(sc,books);
} else if (selectedNumber.equals(DELETE_ALL)) {
System.out.println(">> 전체 삭제하기 <<");
deleteAll(books);
} else if (selectedNumber.equals(END)) {
System.out.println(">> 프로그램 종료하기 <<");
flag = false;
} else {
System.out.println(">> 잘못된 선택입니다. <<");
}
}
} // end of main
// 1. 저장하기
public static void save(Scanner sc, Book[] books) {
// 배열에 저장하려면, book[3]=new Books();
System.out.println("-----저장하기-----");
System.out.println("책의 제목을 입력하세요.");
String bookTitle = sc.nextLine();
System.out.println("책의 저자를 입력하세요.");
String bookAuthor = sc.nextLine();
Book book=new Book(bookTitle, bookAuthor);
if(LAST_INDEX_NUMBER>=books.length) {
System.out.println("더 이상 저장할 공간이 없습니다.");
return;
}
for(int i=0; i<books.length; i++) {
if(books[i]==null) {
books[i]=book;
LAST_INDEX_NUMBER++;
break;
}
}
System.out.println(">> 저장이 완료되었습니다. <<");
}
// 함수를 활용해보자.
// 2. 전체 조회하기
public static void readAll(Book[] books) { // 모든 책을 보고 싶음->배열 활용
System.out.println("-----전체 조회하기-----");
if (books.length <= 0) {
System.out.println("책이 하나도 없습니다.");
}
for (int i = 0; i < books.length; i++) {
// 방어적 코드
if (books[i] != null) {
System.out.println(books[i].getTitle() + "," + books[i].getAuthor());
}
}
}
// 3. 선택 조회하기
public static void readByTitle(Scanner sc, Book[] books) {
System.out.println("-----선택 조회하기-----");
System.out.println("책 제목을 입력해주세요.");
String bookTitle=sc.nextLine();
Boolean isFind=false;
// 사용자가 입력한 책 제목
// books 전부 조사 books[0]-->객체 가리킴-->객체.getTitle()
// 문자열 비교-->equals(bookTitle)
//books[0].getTitle().equals()
// ㄴ만약 배열 안에 객체가 없다면, null pointer exception이 발생할 수 있다.
// 만약 사용자가 입력한 책 제목과 배열 요소 안에 title 값이 같다면
// 화면에 책 제목, 책 저자 이름을 출력하고
// 아니라면, 해당하는 책이 없습니다. 라는 문구를 출력하시오.
for(int i=0; i<books.length; i++) {
if(books[i]!=null) {
if(books[i].getTitle().equals(bookTitle)) {
System.out.println(" 책 제목 "+books[i].getTitle());
System.out.println(" 책 저자 "+books[i].getAuthor());
isFind=true;
break;
}
}
}
if(isFind==false) {
System.out.println("해당 제목의 책은 존재하지 않습니다.");
}
}
// 4. 전체 삭제 메서드
public static void deleteAll(Book[] books) {
System.out.println("-----전체 삭제하기-----");
for (int i = 0; i < books.length; i++) {
books[i] = null;
// 오브젝트 타입은 null을 넣어주면 삭제된다.
}
}
} // end of class
728x90
반응형
'Java > 기본 개념 및 클래스' 카테고리의 다른 글
[Java] 36. 배열 활용: 랜덤 숫자 생성기 (0) | 2024.04.22 |
---|---|
[Java] 35. 배열 활용: 전화번호부 만들기 (0) | 2024.04.22 |
[Java] 33. 배열의 길이와 요소 (0) | 2024.04.22 |
[Java] 32. 자료구조와 배열 (0) | 2024.04.22 |
[Java] 31. 버블 정렬 (0) | 2024.04.19 |