본문 바로가기

웹 개발/Java

[Web_JAVA] 42

실습(총정리)

- boxOffice

 

1. DBConnecter.java(package dao)

- 변수 선언

private final static String PATH = "boxOffice.txt";

 

 

- getter 생성

public static String getPath() {
	return PATH;
}

 

 

- 내용 덮어쓰기

public static BufferedWriter getWriter() throws IOException {
	return new BufferedWriter(new FileWriter(PATH));
}

 

 

- 내용 추가하기

public static BufferedWriter getAppend() throws IOException {
	return new BufferedWriter(new FileWriter(PATH, true));
}

 

 

- 내용 가져오기

public static BufferedReader getReader() throws IOException {
	return new BufferedReader(new FileReader(PATH));
}

 

 

 

2. FilmVO.java(package vo)

- 필요한 변수 생성

private int ranking;  // 순위
private String name;  // 제목
private String releaseDate;  // 개봉일	
private long income;  // 매출액	
private int audience;  // 관객수
private int screenCount;  // 스크린수

 

 

- 생성자

public FilmVO() {;}

 

 

- getter, setter

public int getRanking() {
	return ranking; 
}

public void setRanking(int ranking) {
	this.ranking = ranking;
}

public String getName() {
	return name;
}

public void setName(String name) {
	this.name = name;
}

public String getReleaseDate() {
	return releaseDate;
}

public void setReleaseDate(String releaseDate) {
	this.releaseDate = releaseDate;
}

public long getIncome() {
	return income;
}

public void setIncome(long income) {
	this.income = income;
}

public int getAudience() {
	return audience;
}

public void setAudience(int audience) {
	this.audience = audience;
}

public int getScreenCount() {
	return screenCount;
}

public void setScreenCount(int screenCount) {
	this.screenCount = screenCount;
}

 

 

- toString() 재정의

@Override
public String toString() {
	String str = ranking + "\t" + name + "\t" + releaseDate + "\t";
	str += income + "\t" + audience + "\t" + screenCount;
	return str;
}

 

 

 

3. FilmDAO.java(package dao)

- 마지막 순위

public int getLastRanking() throws IOException{

	BufferedReader br = DBConnecter.getReader();
	int lastRanking = 0;

	while(br.readLine() != null) {
		lastRanking ++;
	}
	
	return lastRanking; 
}

 

 

- 추가와 삽입

public void appendAndInsert(FilmVO film) throws IOException{

	if(film.getRanking() != 0) {  // 전달받은 film이 0이 아니면(순위를 전달하면)
		insert(film);  // 삽입
		return;  // 삽입을 했다면 추가할 필요가 없기 때문에 return으로 막아준다.
	}
	
	// 전달받은 film이 0이라면 추가(순위를 전달하지 않으면)
	append(film);
}

 

 

- 추가

// 마지막 순위 다음에 영화를 추가하기 때문에 영화 순위는 전달받지 않는다.
private void append(FilmVO film) throws IOException{  // FilmVO film : 새로운 정보

	BufferedReader br = DBConnecter.getReader();
	int lastRanking = 0;  // 순위
	String data = null;  // 추가할 영화 정보
	String content = null;  // 전체 내용
	
	while(br.readLine() != null) {
		lastRanking ++;
	}
	br.close();
	
	// 전체 내용을 문자열로 가져온다.
	// String() 생성자에 byte를 넣어주면 문자열로 바꿔준다.
	content = new String(Files.readAllBytes(Paths.get(DBConnecter.getPath())));
	
	// 전체 내용 중 가장 마지막 문자가 \n인지 검사한다. 
	// 새로 추가되는 영화를 줄바꿈하여 추가하기 위해 검사가 필요하다.
	// 만약 마지막에 \n이 없다면 data에 \n부터 추가해준다.
	data = content.charAt(content.length() - 1) == '\n' ?  "" : "\n";
	
	// substring() : 문자열을 자를 때 사용하는 메소드
	// indexOf("\t") : 중복값이 있을 경우 제일 처음 발견되는 값이 잘라진다.(순위가 제외된다.)
	// lastRanking + 1 : 순위를 제외한 나머지 정보 앞에 계산한 마지막 순위를 연결해준다.
	data += lastRanking + 1 + film.toString().substring(film.toString().indexOf("\t"));
	
	BufferedWriter bw = DBConnecter.getAppend();
	bw.write(data);
	bw.close();
	
}

 

 

- 삽입

private void insert(FilmVO film) throws IOException{

	BufferedReader br = DBConnecter.getReader();
	String line = null;
	String temp = "";
	int newRanking = film.getRanking();
	boolean check = false;
	
	while((line = br.readLine()) != null) {
		
		// 삽입할 순위 검색
		if(Integer.parseInt(line.split("\t")[0]) == film.getRanking()) {
			
			// 삽입
			temp += film.toString() + "\n";
			check = true;
		}
		 
		// 삽입되었다면 순위 변경
		// - 기존 랭킹을 전위형으로 1씩 증가시키기 때문에 기존순위 + 1로 변경된다. 
		// line.substring(line.indexOf("\t")) : 순위를 제외한 영화 정보
		// 삽입이 안되었다면 순위 유지
		temp += check ? ++newRanking +  line.substring(line.indexOf("\t")): line;
		temp += "\n";
	}
	br.close();
	
	// 덮어쓰기
	BufferedWriter bw = DBConnecter.getWriter();
	bw.write(temp);
	bw.close();
	
}

 

 

- 수정

// 영화 제목만 수정이 가능하다고 가정한다.
// 영화 제목에 중복이 있을 수 있기 때문에, 영화 순위끼리 비교하여 정확한 수정을 유도한다.
// 외부에서 수정한 영화의 전체 정보를 받는다.
public void update(FilmVO film) throws IOException {

	BufferedReader br = DBConnecter.getReader();
	String line = null;
	String temp = "";
	
	while((line = br.readLine()) != null) { 
		
		if(Integer.parseInt(line.split("\t")[0]) == film.getRanking()) {
			temp += film.toString() + "\n";
			continue;
		}

		temp += line + "\n";
	}

	br.close();
	
	BufferedWriter bw = DBConnecter.getWriter();
	bw.write(temp);
	bw.close();
	
}

 

 

- 삭제

// 외부에서 삭제할 영화의 순위를 전달받는다.
// 영화가 삭제되면 아래의 영화 순위들이 위로 하나씩 올라와야 한다.
public void delete(int ranking) throws IOException {
	BufferedReader br = DBConnecter.getReader();

	String line = null;
	String temp = "";
	boolean check = false;
	int deletedRanking = ranking;
	
	while((line = br.readLine()) != null) {
		if(Integer.parseInt(line.split("\t")[0]) == ranking) {
			check = true;
			continue;
		}
		
		// line.substring(line.indexOf("\t")) 
		// 첫 번째 "\t"의 다음부터 마지막까지를 의미한다.
		temp += check ? deletedRanking++ + line.substring(line.indexOf("\t")) : line;
		temp += "\n";
	}
	br.close();
	
	BufferedWriter bw = DBConnecter.getWriter();
	bw.write(temp);
	bw.close();
	
}

 

 

- 콤마 지우기

public String removeComma(String data) {
	return data.replaceAll(",", "");
}

 

 

- S 지우기

public String removeS(String data) {
	return data.replaceAll("S", "");
}

 

 

- 검색

// 영화 제목으로 조회
// 사용자가 입력한 키워드가 제목에 포함되어 있으면 결과에 담아준다.
// 예) "아" 검색 시 "아바타"도 검색 결과에 포함
// 외부에서 사용자가 검색하고자 하는 키워드를 전달받는다.
// 검색 결과는 한 개가 아니라 여러 개이므로 ArrayList에 담아서 리턴한다.
public ArrayList<FilmVO> selectFilm(String keyword) throws IOException{
	
	BufferedReader br = DBConnecter.getReader();
	ArrayList<FilmVO> films = new ArrayList<>();
	String line = null;
	FilmVO film = new FilmVO();
	
	while((line = br.readLine()) != null) { 
		String[] filmDatas = line.split("\t");
		
		if(filmDatas[1].contains(keyword)) {
			film = new FilmVO();
			
			film.setRanking(Integer.parseInt(filmDatas[0]));
			film.setName(filmDatas[1]);
			film.setReleaseDate(filmDatas[2]);
			film.setIncome(Long.parseLong(removeComma(filmDatas[3].equals("") ? "0" : filmDatas[3])));  // 콤마
			film.setAudience(Integer.parseInt(removeS(removeComma(filmDatas[4]))));  // S, 콤마
			film.setScreenCount(Integer.parseInt(removeS(removeComma(filmDatas[5]))));  // S, 콤마
		
			films.add(film);
		
		}
	}
	
	br.close();
	
	return films;
	
}

 

 

- 목록

// 전체 정보 리턴
public ArrayList<FilmVO> selectAll() throws IOException{
	
	BufferedReader br = DBConnecter.getReader();
	ArrayList<FilmVO> films = new ArrayList<>();
	String line = null;
	FilmVO film = null;
		
	while((line = br.readLine()) != null) {
		String[] filmDatas = line.split("\t");
		film = new FilmVO();
		
		film.setRanking(Integer.parseInt(filmDatas[0]));
		film.setName(filmDatas[1]);
		film.setReleaseDate(filmDatas[2]);
		film.setIncome(Long.parseLong(removeComma(filmDatas[3].equals("") ? "0" : filmDatas[3])));  // 콤마
		film.setAudience(Integer.parseInt(removeS(removeComma(filmDatas[4]))));  // S, 콤마
		film.setScreenCount(Integer.parseInt(removeS(removeComma(filmDatas[5]))));  // S, 콤마
		
		films.add(film);
	}
	
	br.close();
	
	return films; 
	
}

 

 

 

 

'웹 개발 > Java' 카테고리의 다른 글

[Web_JAVA] 43  (0) 2022.03.29
[Web_JAVA] 41  (0) 2022.03.27
[Web_JAVA] 40  (0) 2022.03.26
[Web_JAVA] 39  (0) 2022.03.25
[Web_JAVA] 38  (0) 2022.03.24