-
[Java] C R U DJava 2023. 8. 21. 12:31
1. C R U D 란?
- Create - 새로운 데이터를 생성하는것을 의미 합니다.
- Read - 데이터를 조회 하는 것을 의미합니다.
- Upate - 기본에 데이러를 수정하는 것을 의미합니다.
- Delete - 기본에 데이터를 삭제하는 것을 의미합니다.
2 - 1. 책스토어 프로그램 C R U D 만들기
- 1을 입력하면 Create , 2를 입력하면 Read, 3을 입력하면 Read_Title , 4를 입력하면 Update, 5를 입력하면 Delete, 0을 입력하면 프로그램이 종료되는 코드를 작성하자
- C R U D는 각각 함수로 작성하고 불러오는 방식 사용
- 1 ~ 5 번을 모두 상수로 선언
2 - 2. 책스토어 프로그램 C R U D 만들기 - 클래스 생성
- 클래스 생성 - https://stunote.tistory.com/28
[Java] Class 만들기
책 클래스 만들기 1. 멤버 변수 선언 책 이름, 작가, 총 페이지를 멤버변수로 선언 private 접근제어 지시자를 이용하여 같은 클래스 내부에서만 접근 가능하게 설계 private String title; private String auth
stunote.tistory.com
2 - 3. 책스토어 프로그램 C R U D 만들기 - 필요 준비물 선언
- 입력을 받기위해 Scanner 를 호출
- C R U D 종료는 각각상수 선언
- 배열에 저장된 마지막 인덱스 번호를 받기위해 int형 변수 선언후 배열 첫번째 인덱스 번호인 0으로 초기화
Scanner sc = new Scanner(System.in);
Book[] books = new Book[100];
final String SAVE = "1";
final String SEARCH_ALL = "2";
final String SEARCH_TITLE = "3";
final String DELETE_ALL = "4";
final String UPDATE = "5";
final String END = "0";
int lastIndexNumber = 0;
2 - 4 반복문 작성(반드시 한번은 실행)
- 반복횟수가 정해저 있는 반복문이 아니기 때문애 while 문으로 작성
- 메뉴선택 부분은 반복문 종료 까지 무한 반복
- 앞서 초기화한 상수를 사용하기위해서 String 자료형으로 Scanner 사용
while(true) {
System.out.println("** 메뉴 선택 **");
System.out.println("**1.저장 2.전체 조회 3.선택 조회 4.전체 삭제 5.수정 0.종료 **");
System.out.println("----------------------------------------------------------");
String selectedNumber = sc.nextLine();
}
2 - 5 반복문 작성(조건문)
- 입력받은 숫자로 실행할 조건식을 선택 if문으로 작성
- if문 조건식 은 앞서 입력받은 숫자로 초기화 되어 있는 상수명으로 선언(가독성을 높여주기 위함)
- else문에는 다른 수를 입력 받았을때 다시입력해 달라는 문자를 출력하는 실행문 입력
if (selectedNumber == SAVE) {
} else if (selectedNumber == SEARCH_ALL) {
} else if (selectedNumber == SEARCH_TITLE) {
} else if (selectedNumber == DELETE_ALL) {
}else if (selectedNumber == UPDATE) {
}else if (selectedNumber == END) {
} else {
System.out.println("잘못 입력하셨습니다. 0 ~ 5번을 입력해 주세요");
}
2 - 6 함수 선언 ( SAVE )
- main 클래스 밖에 함수 선언
- 매개변수는 입력값을 받기위해 "Scanner",인스턴스를 사용하기 위해 "클래스 배열", 마지막 인덱스 번호를 return 하기위해 "int index"로 선언
- 책이름 과 작가를 입력받기 위한 스캐너 변수를 String형으로 2번 선언
- 배열에 책이름과, 작가를 저장
- index 변수를 함수가 실행될때 마다 1씩 올라가게 설정하고 return 해줌
}// end of main
public static int save(Scanner scanner, Book[] books, int Index) {
System.out.println(">> 저장하기 <<");
System.out.println("책 제목을 입력하세요");
String bookTitle = scanner.nextLine();
System.out.println("저자 이름을 입력하세요");
String bookAuthor = scanner.nextLine();
Book book = new Book(bookTitle, bookAuthor);
books[Index] = book;
Index++;
System.out.println(bookTitle + "책을 생성 했습니다");
return Index;
}
2 - 7 함수 사용 ( SAVE)
- 처음 선언한 "lastIndexNumber"에 return 값을 저장 하기위해 변수를 "lastIndexNumber"로 선언
- save 함수 사용과 매개변수를(스캐너 함수, 클래스 배열 명, lastIndexNumber로 설정)
if (selectedNumber == SAVE) {
lastIndexNumber = save(sc, books, lastIndexNumber);
}
2 - 8 함수 선언 (SEARCH_ALL)
- 저장된 모든 책을 검색하는 함수 작성
- 매개변수는 조회하기 위한 클래스 배열로 선언
- 전체조회를 위해 배열을 길이만큼 반복하는 반복문 작성
- 클래스 배열내에 저장된것이 존재할때만 실행할수 있게 조건문 작성 ( 방어적 코드 )
public static void searchAll(Book[] books) {
System.out.println(">> 전체 조회 하기 << ");
for(int i = 0; i < books.length; i++) {
if(books[i] != null) {
books[i].showInfo();
System.out.println("----------");
}
}
}
2 - 9 함수 사용 (SEARCH_ALL)
- 매개변수는 클래스 배열 변수명인 "books" 로 설정 하고 함수 선언
else if (selectedNumber == SEARCH_ALL) {
searchAll(books);
}
2 - 10 함수 선언 (SEARCH_TITLE)
- 책제목을 입력받고 입력받은 책제목과 같은 제목을 가진 책이 있다면 책 정보를 보여주는 함수
- 반복문을 사용해 배열내 모든 index를 확인하는 코드
- 방어적 코드 작성을 위해 이중 조건문 작성
- .equals을 활용하여 책제목 비교
- 책을 찾을시 반복시킬 필요 없으므로 break문으로 반복문 종료
public static void searchTitle(Scanner scanner, Book[] books) {
System.out.println(">> 선택 조회하기 <<");
String bookTitle = scanner.nextLine();
for (int i = 0; i < books.length; i++) { // 방어적 코드 작성
if (books[i] != null) {
// "책제목".equals("사용자가 입력한 값)
if (books[i].getTitle().equals(bookTitle)) {
// 같은책 제목이 존재 한다.
books[i].showInfo();
break; // 여기서는 선택 조회라 데이터를 찾았다면 굳이 모든 반복문을 동작 시킬 필요가 없다
}
}
}
}
2 - 10 함수 사용(SEARCH_TITLE)
- 매개변수는 스캐너 변수명 "sc" 와 클래스 배열 변수명인 "books" 로 설정
else if (selectedNumber == SEARCH_TITLE) {
searchTitle(sc, books);
}
2 - 11 함수 선언(DELETE_ALL)
- 클래스 배열에 저장된 모든 데이터 삭제
- 반복문의 사용해 클래스 배열 모든 주소값을 참조하는 방식
- 방어적 코드 작성을 위해 반복문내 조건문 작성
public static void deleteAll(Book[] books) {
System.out.println(">> 전체 삭제 <<");
for (int i = 0; i < books.length; i++) {
if (books[i] != null) {
books[i] = null;
}
}
}
2 - 12 함수 사용(DELETE_ALL)
- 매개변수는 클래스 배열 변수명 "books"로 설정한후 함수 선언
else if (selectedNumber == DELETE_ALL) {
deleteAll(books);
}
2 - 13 함수 선언(UPDATE)
- 책제목을 입력받고 입력받은 책제목과 같은 제목을 가진 책이 있다면 해당 책 정보를 수정하는 함수
- 반복문을 사용해 배열내 모든 index를 확인하는 코드
- 방어적 코드 작성을 위해 반복문내에 조건문 작성
- .equals을 활용하여 책제목 비교
- boolean 데이터 타입을 이용해 책을 찾으면 true 로 초기화
- 반복문 종료후 boolean 데이터 타입 = flase 일때 책이 없어요 출력
public static void upDate(Scanner scanner, Book[] books) {
System.out.println("수정");
System.out.println("수정할 책을 검색 하세요");
String bookTitle = scanner.nextLine();
// 0 , 1 ... 5
// 4 --> 책없
// 5 --> 책없
boolean isFind = false;
for (int i = 0; i < books.length; i++) {
if (books[i] != null) {
if (books[i].getTitle().equals(bookTitle)) {
isFind = true;
System.out.println("무엇을 수정하시겠 습니까? 1번: 제목 2번 작가:");
String upDateNumber = scanner.nextLine();
if (upDateNumber.equals("1")) {
System.out.println("변경할 제목을 입력해 주세요 :");
String upDateBookTitle = scanner.nextLine();
books[i].setTitle(upDateBookTitle);
} else if (upDateNumber.equals("2")) {
System.out.println("변경할 작가이름을 입력해주세요");
String upDateAuthor = scanner.nextLine();
books[i].setAuthor(upDateAuthor);
}
}
}
}
if(isFind == false) {
System.out.println("찾는 책이 없어요 ~ ");
}
}
2 - 14 함수 사용(UPDATE)
- 매개변수는 스캐너 변수명 "sc" 와 클래스 배열 변수명인 "books" 로 설정
else if (selectedNumber == UPDATE) {
upDate(sc, books);
}
2 - 15 반복문 종료(END)
- 종료를 위해 boolean자료형 선언후 해당 자료형에 true를 초기화시키고 while문에 true 를 해당 변수로 변경
boolean flag = true;
while (flag)
- END 선택시 조건문에 지정한 변수를 false로 변경시켜 반복문 종료
else if (selectedNumber == END) {
flag = false;
}
'Java' 카테고리의 다른 글
[Java] 상속 (0) 2023.08.22 [Java] Class 만들기 (0) 2023.08.21 [Java] 배열 (0) 2023.08.21 [Java] 싱글톤 패턴 (0) 2023.08.18 [Java] static 변수, static 메소드 (0) 2023.08.17