기록

*25일차 실습 본문

학원/실습

*25일차 실습

pringspring 2022. 2. 28. 23:51

## 컬렉션 실습문제1

@실습문제1

*** 도서 관리 프로그램 ***

1. 새 도서 추가
=> addBook(inputBook() 이 리턴한 객체) 실행
2. 도서정보 정렬후 출력
=> sortedBookList() 실행 
=> Book[] 리턴받아 printBookList(Book[]) 실행
3. 도서 삭제
=> inputBookTitle(삭제할 도서명) 실행 
=> index를 리턴받아 deleteBook(index) 실행
4. 도서 검색출력
=> inputBookTitle(검색할 도서명) 실행 
=> index 리턴받아 printBook(index) 실행
5. 전체 출력
=> printAll() 실행
6. 끝내기

>>추가, 삭제, 검색에 필요한 키정보는 키보드로 입력받도록 함
//Book 객체의 필드값을 키보드로 입력받아 초기화하고 객체 리턴
+ inputBook() : Book

//삭제 또는 검색을 위한 도서 타이틀을 키보드로 입력받아 리턴
+ inputBookTitle() : String

>> 끝내기 메뉴 선택 전까지는 메뉴 반복 실행되도록 처리함

 

---------------------------

package com.collection.list.book.controller;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import com.collection.list.book.model.compare.AscCategory;
import com.collection.list.book.model.vo.Book;

public class BookManager {
	private ArrayList<Book> bookList = new ArrayList<>();
	{
		bookList.add(new Book("200", 2, "나미야 잡화점의 기적", "히가시노 게이고"));
		bookList.add(new Book("100", 3, "파리의 아파트", "기욤 뮈소"));
		bookList.add(new Book("400", 1, "ABCDE", "도레미"));
		bookList.add(new Book("300", 2, "미중전쟁", "김진명"));
		bookList.add(new Book("500", 1, "JAVA 삽질하기", "김동현"));
	}


	public BookManager() {
		super();
	}

	public BookManager(ArrayList<Book> bookList) {
		this.bookList = bookList;
	}

	// 1.새 도서 추가
	public void addBook(Book book) {
		bookList.add(book);
	}

	// 3.도서 삭제
	public void deleteBook(int index) {
		if (index != -1)
			bookList.remove(index);
		else
			System.out.println("해당 도서 없음");
	}

	// 4.도서명으로 검색하기
	public int searchBook(String title) {
		for (int i = 0; i < bookList.size(); i++) {
			Book b = (Book) bookList.get(i);
			if (title.equals(b.getTitle()))
				return 1;
		}
		return -1;
	}

	// 출력
	public void printBook(int index) {
		if (index != -1) {
			System.out.println((Book) bookList.get(index));
		} else {
			System.out.println("해당 도서 없음");
		}
	}

	//5.전체 출력
	public void printAll() {
		for (int i = 0; i < bookList.size(); i++) {
			System.out.println((Book) bookList.get(i));
		}
	}



	// 2.도서정보 정렬 후 출력
	public Book[] sortedBookList() {
		//List를 직접 정렬하게 되면, 실제 리스트의 저장순서(index)가 바뀐다.
		//정렬프로그램은 보통 배열복사를 통해 이루어진다.
		
		Book[] bookarr = new Book[bookList.size()];
		bookList.toArray(bookarr);
		
		Arrays.sort(bookarr,new AscCategory());
		return bookarr;
	}

	public void printBookList(Book[] bookArr) {
		for (int i = 0; i < bookArr.length; i++) {
			System.out.println(bookArr);
		}
	}

}
------------------------------------------------
package com.collection.list.book.model.compare;

import java.util.Comparator;

import com.collection.list.book.model.vo.Book;

public class AscCategory implements Comparator <Book>{

	@Override
	public int compare(Book o1, Book o2) {

		return o1.getCategory()-o2.getCategory();

		}

	}
	
------------------------------------------------------
package com.collection.list.book.model.vo;

public class Book {
	private String bNo;
	private int category;
	private String title;
	private String author;
	
	public Book() {
		super();
	}
	public Book(String bNo, int category, String title, String author) {
		super();
		this.bNo = bNo;
		this.category = category;
		this.title = title;
		this.author = author;
	}
	
	public String getbNo() {
		return bNo;
	}
	public void setbNo(String bNo) {
		this.bNo = bNo;
	}
	public int getCategory() {
		return category;
	}
	public void setCategory(int category) {
		this.category = category;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	
	
	@Override
	public String toString() {
		return "번호:  "+bNo+"\t카테고리:  "+category+"\t제목:  "+title+"\t저자:  "+author;
		
	}
	
	public int compareTo(Book other) {
		return this.getbNo().compareTo(other.getbNo());
	}
		
}
----------------------------------------------------------
package com.collection.list.book.run;

import java.util.Iterator;
import java.util.Scanner;

import com.collection.list.book.controller.BookManager;
import com.collection.list.book.model.vo.Book;

public class TestBookManager {
	Scanner sc = new Scanner(System.in);
	BookManager bm = new BookManager();
	
	public static void main(String[] args) {
		TestBookManager tm = new TestBookManager();
		tm.mainMenu();
		System.out.println("---이용해주셔서 감사합니다.---");
	}

	public void mainMenu() {
		String menu = "**** 도서 관리 프로그램 ****\r\n" 
				+ " 1. 도서 추가\r\n" 
				+ " 2. 도서 정보 정렬 후 출력\r\n" 
				+ " 3. 도서 삭제\r\n"
				+ " 4. 도서 검색 출력\r\n" 
				+ " 5. 전체 출력\r\n" 
				+ " 6. 끝내기\r\n\n" 
				+ "***************\r\n" 
				+ ">> 메뉴 선택:   ";

		
		while(true) {
			System.out.print(menu);
//			int index;
			int choice = sc.nextInt();
			
			switch (choice) {
			case 1:
				System.out.println("---1.도서 추가하기---");
				bm.addBook(inputBook());
				System.out.println("---추가 완료 !---");
				System.out.println();
				break;
				
			case 2:
				System.out.println("---2.도서 정보 정렬 후 출력하기---");
				bm.printBookList(bm.sortedBookList());
				System.out.println("---출력 완료 !---");
				System.out.println();
				break;
				
			case 3:
				System.out.println("---3.도서 삭제하기---");
				bm.deleteBook(bm.searchBook(inputBookTitle()));
				System.out.println("---삭제 완료 !---");
				break;
				
			case 4:
				System.out.println("---4.도서를 검색한 후 출력하기---");
				bm.printBook(bm.searchBook(inputBookTitle()));
				break;
				
			case 5:
				System.out.println("---5.전체 출력하기---");
				bm.printAll();
				System.out.println();
				break;
				
			case 6:
				System.out.println("---6.시스템 종료---");
				return;
				
			default:
				System.out.println("잘못 입력");
				break;
				
	
			}
		}

	}
	
	
//	public Book inputBook() {
//		Book book = new Book();
//		try {
//			System.out.println("제목 입력");
//			//	String title = sc.next();
//			book.setTitle(sc.next());
//			sc.next();
//		}catch(InputMismatchException e) {
//			System.out.println("잘못 입력함.");
//		}
//		try {
//			System.out.println("저자 입력");
//			book.setAuthor(sc.next());
//			//	String author = sc.next();
//		}catch(InputMismatchException e) {
//			System.out.println("잘못 입력함.");
//		}
//		
//		return book;
//	}
	
	
	
	public String inputBookTitle() {
		System.out.println("제목 입력:   ");
		sc.nextLine();
		return sc.nextLine();
	}
	
	
	public Book inputBook() {
		System.out.print("책 번호 입력:  ");
		String bNo = sc.next();
		System.out.print("카테고리 입력(1.인문 2.자연과학 3.의료 4.기타)  :  ");
		int category = sc.nextInt();
		sc.nextLine();
		System.out.print("제목 입력:  ");
		String title = sc.nextLine();
		System.out.print("저자 입력: ");
		String author = sc.nextLine();
		
		return new Book(bNo,category,title,author);
	
		
	}
	
	
	
}

 

 

## 컬렉션 실습문제1

@실습문제1
 - 클래스명 : com.collection.list.book.model.vo.Book
//Field
- bNo : String //도서번호
- category : int   //도서분류코드(1.인문/2.자연과학/3.의료/4.기타)
- title : String //책제목
- author : String //저자

//기본생성자, 매개변수 있는 생성자, getters and setters 작성함
//toString() 오버라이딩함

 - 정렬 처리를 위한 클래스 작성함 : java.util.Comparator 인터페이스 상속받음
=> compare() 오버라이딩함
//카테고리 기준 오름차순 정렬용
com.collection.list.book.model.compare.AscCategory


 - 관리용 클래스 : com.collection.list.book.controller.BookManager
//Field
- bookList : ArrayList

//기본생성자 : bookList 객체 생성함
//매개변수있는 생성자 : 다른 리스트를 전달받아. 
// bookList 객체의 초기값으로 사용함

//Method
+ addBook(book:Book) : void  //리스트에 객체 추가
+ deleteBook(int index) : void //리스트에서 객체 제거
+ searchBook(String title) : int
//도서명이 일치하는 객체를 찾아 해당 인덱스를 리턴
//도서명이 일치하는 객체가 리스트에 없으면, -1 리턴함
+ printBook(index:int) : void //인덱스 위치의 객체의 정보를 출력함
+ printAll():void //목록정보 모두 출력
+ sortedBookList():Book[]
// 해당 카테고리순 오름차순정렬해서 객체배열 리턴함
+ printBookList(Book[] br) : void
//객체 배열 출력, for each 문 사용


 - 클래스명 : com.collection.list.book.run.TestBookManager.java   >> main() 포함
>> menu() 메소드 추가함
public static void menu(){}

=> 다음 내용이 출력되게 함
=> BookManager 클래스 객체 생성함

*** 도서 관리 프로그램 ***

1. 새 도서 추가
=> addBook(inputBook() 이 리턴한 객체) 실행
2. 도서정보 정렬후 출력
=> sortedBookList() 실행 
=> Book[] 리턴받아 printBookList(Book[]) 실행
3. 도서 삭제
=> inputBookTitle(삭제할 도서명) 실행 
=> index를 리턴받아 deleteBook(index) 실행
4. 도서 검색출력
=> inputBookTitle(검색할 도서명) 실행 
=> index 리턴받아 printBook(index) 실행
5. 전체 출력
=> printAll() 실행
6. 끝내기

>>추가, 삭제, 검색에 필요한 키정보는 키보드로 입력받도록 함
//Book 객체의 필드값을 키보드로 입력받아 초기화하고 객체 리턴
+ inputBook() : Book

//삭제 또는 검색을 위한 도서 타이틀을 키보드로 입력받아 리턴
+ inputBookTitle() : String

>> 끝내기 메뉴 선택 전까지는 메뉴 반복 실행되도록 처리함

@실습문제2
실습문제1버젼을 맵으로 해서 만들어본다. 
클래스 import시 문제1 패키지의 entity클라스를 공유함.

 - 클래스명 : com.collection.map.book.Controller.MapBookManager.java
//Field
- booksMap : HashMap //도서번호를 키로 사용함

//기본생성자 : 맵 객체 생성함
//매개변수있는 생성자 : 다른 맵을 전달받아. 
//booksMap 객체의 초기값으로 생성함

//Method
+ putBook(book:Book) : void //맵에 객체 추가, 도서번호를 키로 사용함
+ deleteBook(key:String) : void //맵에서 객체 제거
+ searchBook(String title) : String : entrySet() 사용
//도서명이 일치하는 객체의 도서번호를 리턴
//도서명이 객체가 맵에 없으면, null 리턴함
+ displayAll():void //맵정보 모두 출력 : keySet() 사용
+ sortedBookMap():Book[]
// 해당 도서명순으로 오름차순정렬해서 객체배열 리턴함
+ printBookMap(Book[] br) : void
//객체 배열 출력, for each 문 사용
+ printBook(key:String) : void //

- 실행용 : com.collection.map.book.TestBookManager.java
=> 실행은 [문제 2] 와 같은 방식으로 작동되게 함

 

 

package com.collection.map.book.controller;

import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import com.collection.list.book.model.compare.AscCategory;
import com.collection.list.book.model.vo.Book;

public class BookManager {
	private Map<String,Book> bookMap = new HashMap<>();
	{
		bookMap.put("100", new Book("100", 3, "파리의 아파트", "기욤 뮈소"));
		bookMap.put("200", new Book("200", 2, "나미야 잡화점의 기적", "히가시노 게이고"));
		bookMap.put("300", new Book("300", 2, "미중전쟁", "김진명"));
		bookMap.put("400", new Book("400", 1, "ABCDE", "도레미"));
		bookMap.put("500", new Book("500", 1, "JAVA 삽질하기", "김동현"));
	}
	public BookManager(){}
	public BookManager(Map<String,Book> bookMap) {
		this.bookMap = bookMap;
	}
	
	public void addBook(Book book){
		bookMap.put(book.getbNo(), book);
	}
	
	public void deleteBook(String key){
		if(key != null)
			bookMap.remove(key);
		else
			System.out.println("해당 도서가 존재하지 않습니다.");
	}
	
	public String searchBook(String title){
		//Map을 열람하는 방법 3가지
		//1. keySet()
		//2. values()
		//3. entrySet()
		Set<Map.Entry<String, Book>> entrySet = bookMap.entrySet();
		Iterator<Map.Entry<String, Book>> it = entrySet.iterator();
//		Iterator<Map.Entry<String, Book>> it = bookMap.entrySet().iterator();
		while(it.hasNext()){
			Map.Entry<String, Book> entry = (Map.Entry<String, Book>)it.next();
			Book b = (Book)entry.getValue();
			if(title.equals(b.getTitle()))
				return b.getbNo();
		}
		return null;
	}
	
	public void printBook(String key){
		if(key!=null)
			System.out.println((Book)bookMap.get(key));
		else
			System.out.println("해당 도서가 존재하지 않습니다.");
	}
	
	public void printAll(){
		Set<String> keySet = bookMap.keySet();

//		for(String key : keySet) {
//			Book value = bookMap.get(key);
//			System.out.println(value);
//		}

		Iterator<String> iter = keySet.iterator();
		while(iter.hasNext()) {
			String key = iter.next();
			Book value= bookMap.get(key);
			System.out.println(value);
		}
	}
	
	public Book[] sortedBookMap(){
		Book[] bookArr = new Book[bookMap.size()];
		Iterator<Map.Entry<String, Book>> it = bookMap.entrySet().iterator();
		int index = 0;
		while(it.hasNext()){
			Map.Entry<String, Book> entry = (Map.Entry<String, Book>)it.next();
			bookArr[index++] = (Book)entry.getValue();
		}
		
		//배열정렬에 배열과 배열기준객체를 제공한다
		//<Book> void java.util.Arrays.sort(Book[] a, Comparator<? super Book> c)
		Arrays.sort(bookArr, new AscCategory());
//		Arrays.sort(bookArr, Collections.reverseOrder(new AscCategory()));
		return bookArr;
	}
	
	public void printBookMap(Book[] bookArr){
		for (Book book : bookArr) {
			System.out.println(book);
		}
	}
}

-----------------------------------------
package com.collection.map.book.run;

import java.util.Scanner;

import com.collection.map.book.controller.BookManager;
import com.collection.list.book.model.vo.Book;

public class TestBookManager {
	Scanner sc = new Scanner(System.in);
	BookManager bm = new BookManager();
	
	public static void main(String[] args) {
		TestBookManager t = new TestBookManager();
		t.menu();
		System.out.println("프로그램을 종료합니다.");
	}

	public void menu() {
		String menu = "*** 도서 관리 프로그램 ***\n"
				   + "1. 새 도서 추가\n"
				   + "2. 도서정보 정렬후 출력\n"
				   + "3. 도서 삭제\n"
				   + "4. 도서 검색출력\n"
				   + "5. 전체 출력\n"
				   + "6. 끝내기\n"
				   + "메뉴선택 : ";
		
		while(true){
			System.out.print(menu);
			int selected = sc.nextInt();
			switch (selected) {
			case 1: bm.addBook(inputBook()); break;
			case 2: bm.printBookMap(bm.sortedBookMap()); break;
			case 3: bm.deleteBook(bm.searchBook(inputBookTitle())); break;
			case 4: bm.printBook(bm.searchBook(inputBookTitle())); break;
			case 5: bm.printAll(); break;
			case 6: return;
			default: System.out.println("잘못 입력하셨습니다."); break;
			}
			
		}
	
	}

	public String inputBookTitle() {
		sc.nextLine();
		System.out.print("책제목을 입력하세요 : ");
		return sc.nextLine();
	}
a
	public Book inputBook() {
		System.out.print("책번호 : ");
		String bNo = sc.next();
		System.out.print("책카테고리 (1.인문/2.자연과학/3.의료/4.기타) : ");
		int category = sc.nextInt();
		sc.nextLine();
		System.out.print("책제목 : ");
		String title = sc.nextLine();
		System.out.print("저자 : ");
		String author = sc.nextLine();
		return new Book(bNo, category, title, author);
	}

}

'학원 > 실습' 카테고리의 다른 글

*34일차 실습  (0) 2022.03.28
*26일차 실습  (0) 2022.03.02
*24일차 ncs (수강생 평가) -실기  (0) 2022.02.25
*24일차 ncs (수강생 평가) -필기  (0) 2022.02.25
*23일차 실습  (0) 2022.02.24