Hayden's Archive
[자바/Java] 상영 영화 관리 프로그램 본문
- 도서관 사서 프로그램 ( 관련 포스팅 : https://hayden-archive.tistory.com/62 )과 유사하지만 인터페이스를 추가하여 클래스가 인터페이스를 구현하도록 하고 CRUD에서 D 기능을 추가하였으며 또 MovieMgrImpl 클래스에 싱글톤을 적용했다.
- equals() 함수 뿐만 아니라 contains() 함수를 사용하여 영화 제목이 완전히 일치하지 않더라도 키워드가 포함된다면 검색에서 걸릴 수 있도록 하였다.
- 배열을 2개 만들어 담을 뿐만 아니라 System.arraycopy() 기능을 활용하여 배열을 간편하게 카피하였다.
package com.vo;
public class Movie {
private String title;
private String director;
private int grade;
private String genre;
private String summary;
public Movie(){}
public Movie(String title, String director, int grade, String genre) {
super();
this.title = title;
this.director = director;
this.grade = grade;
this.genre = genre;
}
public Movie(String title, String director, int grade, String genre, String summary) {
super();
this.title = title;
this.director = director;
this.grade = grade;
this.genre = genre;
this.summary = summary;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDirector() {
return director;
}
public void setDirector(String director) {
this.director = director;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public String getGenre() {
return genre;
}
public void setGenre(String genre) {
this.genre = genre;
}
public String getSummary() {
return summary;
}
public void setSummary(String summary) {
this.summary = summary;
}
@Override
public String toString() {
return "title=" + title + ", director=" + director + ", grade=" + grade + ", genre=" + genre
+ ", summary=" + summary +"\n";
}
}
package com.service;
import com.vo.Movie;
public interface MovieMgr {
void add(Movie m);
Movie[] search();
Movie[] search(String title);
Movie[] searchDirector(String name);
Movie[] searchGenre(String genre);
void delete(String title);
int getSize();
}
package com.service;
import java.util.Arrays;
import com.vo.Movie;
public class MovieMgrImpl implements MovieMgr {
private Movie[ ] movies = new Movie[100];
private int index;
private static MovieMgrImpl mgr = new MovieMgrImpl();
private MovieMgrImpl() {}
public static MovieMgrImpl getInstance() {
return mgr;
}
//싱글톤...MovieMgr을 mgr이름으로 객체 생성...getInstance로 생성한 객체를 받아온다.
//영화 정보 추가하기
public void add(Movie m) {
movies[index++] = m;
}
// 영화 정보 모두 검색하기
public Movie[] search() {
Movie[] ms = new Movie[index];
for(int i = 0; i < index; i++) {
if(movies[i] != null) {
ms[i] = movies[i];
}
}
return ms;
}
// 영화 제목으로 영화 찾기
// equals()가 아닌 contains()로 키워드가 포함되면 검색에 걸림
public Movie[] search(String title) {
int i = 0; int count = 0;
Movie[] ms = new Movie[index];
for(Movie m : movies) {
if(m == null) continue;
else if(m.getTitle().contains(title)) {
ms[i++] = m;
count++;
}
}
//null 값을 추리기 위해서 다시 for문을 동작시킴.
Movie[] ms2 = new Movie[count];
if(count > 0) System.arraycopy(ms, 0, ms2, 0, count);
return ms2;
}
// 감독명으로 영화 찾기
public Movie[] searchDirector(String name) {
int size = 0;
for(int i = 0; i < index; i++) {
if(movies[i] == null) continue;
else if(movies[i].getDirector().equals(name)) size++; //2
}
Movie[] ms = new Movie[size];
for(int i = 0; i < index; i++) {
if(movies[i].getDirector().equals(name)) {
ms[--size] = movies[i];
//뒤에서부터 하나씩 넣어주는 것. ms[1], ms[0]
}
}
return ms;
}
// 장르로 영화 찾기
public Movie[] searchGenre(String genre) {
int count = 0; int i = 0;
Movie[] ms = new Movie[index];
for(Movie m : movies) {
if(m == null) continue;
else if(m.getGenre().equals(genre)) {
ms[i++] = m;
count++;
}
}
Movie[] ms2 = new Movie[count];
for(int j = 0; j < count; j++) {
ms2[j] = ms[j];
}
return ms2;
}
// 이름으로 영화 정보 삭제하기
public void delete(String title) {
int count = 0;
for(Movie m : movies) {
if(m == null) continue;
else if(m.getTitle().equals(title)) count++;
}
Movie[] ms = new Movie[index-count];
int idx = 0;
for(Movie m : movies) {
if(m == null) continue;
else if(m.getTitle().equals(title)) continue;
else ms[idx++] = m;
}
System.out.println(Arrays.toString(ms));
}
// 배열의 길이
public int getSize() {
return index;
}
}
package com.test;
import java.util.Arrays;
import java.util.Scanner;
import com.service.MovieMgrImpl;
import com.vo.Movie;
public class MovieTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("<<영화 관리 프로그램>>");
//getInstance()로 MovieMgr 객체 받아옴..
MovieMgrImpl mvManager = MovieMgrImpl.getInstance();
boolean flag = true;
while(flag) {
System.out.println("1. 영화 정보 입력");
System.out.println("2. 영화 정보 전체 검색");
System.out.println("3. 영화명 검색");
System.out.println("4. 영화 감독별 검색");
System.out.println("5. 영화 장르별 검색");
System.out.println("6. 영화 정보 삭제");
System.out.println("0. 종료");
int selectNum = sc.nextInt();
switch(selectNum) {
case 1:
System.out.print("영화 명을 입력해주세요 : ");
String mvName = sc.next();
System.out.print("감독 명을 입력해주세요 : ");
String mvDir = sc.next();
System.out.print("등급을 입력해주세요 : ");
int mvGr = sc.nextInt();
System.out.print("장르를 입력해주세요 : ");
String mvGre = sc.next();
System.out.print("요약을 입력해주세요 : ");
String mvSumm = sc.next();
mvManager.add(new Movie(mvName, mvDir, mvGr, mvGre, mvSumm));
System.out.println("성공적으로 추가되었습니다.");
break;
case 2:
System.out.println(Arrays.toString(mvManager.search()));
break;
case 3:
System.out.println("찾고자하는 제목을 입력하세요 : ");
mvName = sc.next();
System.out.println(Arrays.toString(mvManager.search(mvName)));
break;
case 4:
System.out.println("찾고자하는 감독을 입력하세요 : ");
mvName = sc.next();
System.out.println(Arrays.toString(mvManager.searchDirector(mvName)));
break;
case 5:
System.out.print("찾고자하는 장르를 입력하세요 : ");
sc.nextLine();
mvGre = sc.next();
System.out.println(Arrays.toString(mvManager.searchGenre(mvGre)));
break;
case 6:
System.out.print("삭제하고자하는 제목을 입력하세요 : ");
mvName = sc.next();
mvManager.delete(mvName);
System.out.println("삭제완료");
break;
case 0:
flag=false;
break;
}
}
}
}