공부 기록장

Class를 이용해 음악 목록 보여주기(2) 본문

JAVA

Class를 이용해 음악 목록 보여주기(2)

또도닝 2021. 3. 2. 09:41

1번에서 만들었던 클래스들을 적절히 이용해서 작동하게 하기 위해 또 다른 클래스들을 만들었다.

MusicManager 클래스를 이용해 노래를 추가하거나, 검색, 삭제 하는 기능들을 만들어 주었고, MusicPlayer 을 통해 만들어 둔 기능들을 실행해주었다. 이러한 기능들을 제어하기 위해 Exception이나 Interface들도 만들어 주었다.

 

MusicManager

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

public class MusicManager implements IMusicMgr{
	private ArrayList<MusicPlaylist> plist;
	private ArrayList<Music> mlist;
	
	public MusicManager() {
		load();
	}
	
	//노래만 추가
	public void addMusic(String title, String singer, String genre, String album) {
		//노래 추가할 때 제목&가수 둘 다 같으면 에러처리.
		for(Music music: mlist) {
			if(music.getTitle().equals(title) && music.getSinger().equals(singer))
				throw new DuplicateException();
		}
		Music m = new Situation(title,singer,genre,album);
		mlist.add(m);
	}
	
	//새로운 플레이리스트 생성
	public void makePlaylist(String pTitle) {
		if(plist != null) {
			for(MusicPlaylist p : plist) {
				if(p.getpTitle().equals(pTitle))
					throw new DuplicateException();
			}
		}
		plist.add(new MusicPlaylist(pTitle));
	}
	
	//플레이리스트 보기
	public ArrayList<MusicPlaylist> playlist() throws Exception{
		if(plist == null)
			throw new Exception();
		
		ArrayList<MusicPlaylist> pl = new ArrayList<MusicPlaylist>();
		for(MusicPlaylist m : plist) {
			pl.add(m);
		}
		return pl;
	}
	
	//노래에 상황 추가하기
	public void addSituation(String title, int situation) {
		if(situation > 6 || situation < 1)
			throw new InputException();
		
		for(Music m: mlist) {
			if(m.getTitle().equals(title))
				new Situation(m, situation);
		}
		
		if(plist != null) {
			for(MusicPlaylist p : plist) {
				for(Music mp : p.getMusic()) {
					if(((Situation)mp).getTitle().equals(title))
						((Situation)mp).setSituation(situation);
				}
			}
		}
	}
	
	//플레이리스트에 노래 추가
	public void addPlaylist(String title, String pTitle) {
		for(Music m: mlist) {
			if(m.getTitle().equals(title))
				for(MusicPlaylist p : plist){
					if(p.getpTitle().equals(pTitle))
						p.setMusic(m);
				}
		}
	}
	
	//노래 삭제
	public void removeMusic(String title) {
		//노래 목록에서 노래 삭제
		int target = -1;
		for(int i = 0; i < mlist.size(); i++) {
			if( mlist.get(i).getTitle().equals(title)) {
				target = i;
			}
		}
		if(target != -1)
			mlist.remove(target);
		
		//노래가 지워졌으니 플레이리스트에서도 삭제
		if(plist != null) {
			for(MusicPlaylist p : plist) {
				for(Music m : p.getMusic()) {
					if(m.getTitle().equals(title)) {
						p.getMusic().remove(m);
						break;
					}	
				}
			}
		}
	}
	
	//플레이리스트에서 노래 삭제
	public void removePlaylist(String pTitle, String title) {
		//노래 목록에서는 X, 지정 플레이리스트에서만 노래 삭제
		for(MusicPlaylist p : plist) {
			for(Music m : p.getMusic()) {
				if(m.getTitle().equals(title)) {
					p.getMusic().remove(m);
					break;
				}	
			}
		}
	}
	
	
	//플레이리스트 자체 삭제
	public void removePlaylist(String pTitle) {
		for(MusicPlaylist p : plist) {
			if(p.getpTitle().equals(pTitle))
				plist.remove(p);
		}
	}
	
	//노래에 상황 업데이트
	public void updateMusic(String title, int situation) {
		if(situation > 6 || situation < 1)
			throw new InputException();
		
		for(Music m: mlist) {
			if(((Situation)m).getTitle().equals(title))
				((Situation)m).setSituation(situation);
		}
	}
	
	//전체 음악 출력
	public ArrayList<Situation> getMusicList(){
		ArrayList<Situation> ml = new ArrayList<Situation>();
		for(Music m : mlist) {
			ml.add((Situation)m);
		}
		return ml;
	}
	
	//상활별 음악 출력(상황 입력)
	public ArrayList<Situation> getSituationList(int situation) {
		ArrayList<Situation> ml = new ArrayList<Situation>();
		for(Music m: mlist) {
			if(((Situation)m).getSituation() == situation)
				ml.add((Situation)m);
		}
		return ml;
	}
	
	//노래 제목 검색
	public ArrayList<Music> searchByTitle(String title){ 
		ArrayList<Music> m = new ArrayList<Music>();
		for(Music music: mlist) {
			if(music.getTitle().equals(title))
				m.add(music);
		}
		return m;
	}
	
	public void save() {
		try {
			ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("mdata.dat"));
			ObjectOutputStream out2 = new ObjectOutputStream(new FileOutputStream("pdata.dat"));
			out.writeObject(mlist);
			out2.writeObject(plist);
			out.flush();
			out2.flush();
			out.close();
			out2.close();
		}catch(FileNotFoundException e) {
			e.printStackTrace();
		}catch(IOException e) {
			e.printStackTrace();
		}
		
	}
	
	public void load() {
		try {
			ObjectInputStream in = new ObjectInputStream(new FileInputStream("mdata.dat"));
			ObjectInputStream in2 = new ObjectInputStream(new FileInputStream("pdata.dat"));
			mlist = (ArrayList<Music>) in.readObject();
			plist = (ArrayList<MusicPlaylist>) in2.readObject();
			System.out.println("음악 데이터 불러오기 성공");
		}catch(FileNotFoundException e) {
			mlist = new ArrayList<Music>();
			plist = new ArrayList<MusicPlaylist>();
			System.out.println("새로 생성");
		}catch(IOException e) {
			e.printStackTrace();
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
		}
		
	}
	
}

 

MusicPlayer

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

public class MusicManager implements IMusicMgr{
	private ArrayList<MusicPlaylist> plist;
	private ArrayList<Music> mlist;
	
	public MusicManager() {
		load();
	}
	
	//노래만 추가
	public void addMusic(String title, String singer, String genre, String album) {
		//노래 추가할 때 제목&가수 둘 다 같으면 에러처리.
		for(Music music: mlist) {
			if(music.getTitle().equals(title) && music.getSinger().equals(singer))
				throw new DuplicateException();
		}
		Music m = new Situation(title,singer,genre,album);
		mlist.add(m);
	}
	
	//새로운 플레이리스트 생성
	public void makePlaylist(String pTitle) {
		if(plist != null) {
			for(MusicPlaylist p : plist) {
				if(p.getpTitle().equals(pTitle))
					throw new DuplicateException();
			}
		}
		plist.add(new MusicPlaylist(pTitle));
	}
	
	//플레이리스트 보기
	public ArrayList<MusicPlaylist> playlist() throws Exception{
		if(plist == null)
			throw new Exception();
		
		ArrayList<MusicPlaylist> pl = new ArrayList<MusicPlaylist>();
		for(MusicPlaylist m : plist) {
			pl.add(m);
		}
		return pl;
	}
	
	//노래에 상황 추가하기
	public void addSituation(String title, int situation) {
		if(situation > 6 || situation < 1)
			throw new InputException();
		
		for(Music m: mlist) {
			if(m.getTitle().equals(title))
				new Situation(m, situation);
		}
		
		if(plist != null) {
			for(MusicPlaylist p : plist) {
				for(Music mp : p.getMusic()) {
					if(((Situation)mp).getTitle().equals(title))
						((Situation)mp).setSituation(situation);
				}
			}
		}
	}
	
	//플레이리스트에 노래 추가
	public void addPlaylist(String title, String pTitle) {
		for(Music m: mlist) {
			if(m.getTitle().equals(title))
				for(MusicPlaylist p : plist){
					if(p.getpTitle().equals(pTitle))
						p.setMusic(m);
				}
		}
	}
	
	//노래 삭제
	public void removeMusic(String title) {
		//노래 목록에서 노래 삭제
		int target = -1;
		for(int i = 0; i < mlist.size(); i++) {
			if( mlist.get(i).getTitle().equals(title)) {
				target = i;
			}
		}
		if(target != -1)
			mlist.remove(target);
		
		//노래가 지워졌으니 플레이리스트에서도 삭제
		if(plist != null) {
			for(MusicPlaylist p : plist) {
				for(Music m : p.getMusic()) {
					if(m.getTitle().equals(title)) {
						p.getMusic().remove(m);
						break;
					}	
				}
			}
		}
	}
	
	//플레이리스트에서 노래 삭제
	public void removePlaylist(String pTitle, String title) {
		//노래 목록에서는 X, 지정 플레이리스트에서만 노래 삭제
		for(MusicPlaylist p : plist) {
			for(Music m : p.getMusic()) {
				if(m.getTitle().equals(title)) {
					p.getMusic().remove(m);
					break;
				}	
			}
		}
	}
	
	
	//플레이리스트 자체 삭제
	public void removePlaylist(String pTitle) {
		for(MusicPlaylist p : plist) {
			if(p.getpTitle().equals(pTitle))
				plist.remove(p);
		}
	}
	
	//노래에 상황 업데이트
	public void updateMusic(String title, int situation) {
		if(situation > 6 || situation < 1)
			throw new InputException();
		
		for(Music m: mlist) {
			if(((Situation)m).getTitle().equals(title))
				((Situation)m).setSituation(situation);
		}
	}
	
	//전체 음악 출력
	public ArrayList<Situation> getMusicList(){
		ArrayList<Situation> ml = new ArrayList<Situation>();
		for(Music m : mlist) {
			ml.add((Situation)m);
		}
		return ml;
	}
	
	//상활별 음악 출력(상황 입력)
	public ArrayList<Situation> getSituationList(int situation) {
		ArrayList<Situation> ml = new ArrayList<Situation>();
		for(Music m: mlist) {
			if(((Situation)m).getSituation() == situation)
				ml.add((Situation)m);
		}
		return ml;
	}
	
	//노래 제목 검색
	public ArrayList<Music> searchByTitle(String title){ 
		ArrayList<Music> m = new ArrayList<Music>();
		for(Music music: mlist) {
			if(music.getTitle().equals(title))
				m.add(music);
		}
		return m;
	}
	
	public void save() {
		try {
			ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("mdata.dat"));
			ObjectOutputStream out2 = new ObjectOutputStream(new FileOutputStream("pdata.dat"));
			out.writeObject(mlist);
			out2.writeObject(plist);
			out.flush();
			out2.flush();
			out.close();
			out2.close();
		}catch(FileNotFoundException e) {
			e.printStackTrace();
		}catch(IOException e) {
			e.printStackTrace();
		}
		
	}
	
	public void load() {
		try {
			ObjectInputStream in = new ObjectInputStream(new FileInputStream("mdata.dat"));
			ObjectInputStream in2 = new ObjectInputStream(new FileInputStream("pdata.dat"));
			mlist = (ArrayList<Music>) in.readObject();
			plist = (ArrayList<MusicPlaylist>) in2.readObject();
			System.out.println("음악 데이터 불러오기 성공");
		}catch(FileNotFoundException e) {
			mlist = new ArrayList<Music>();
			plist = new ArrayList<MusicPlaylist>();
			System.out.println("새로 생성");
		}catch(IOException e) {
			e.printStackTrace();
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
		}
		
	}
	
}

Interface

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

public interface IMusicMgr {
	public void addMusic(String title, String singer, String genre, String album);
	public void addSituation(String title, int situation);
	public void addPlaylist(String title, String pTitle);
	public void removeMusic(String title);
	public void makePlaylist(String pTitle);
	public void removePlaylist(String pTitle, String title); 
	public void removePlaylist(String pTitle); 
	public void updateMusic(String title, int situation); 
	public ArrayList<Situation> getMusicList();
	public ArrayList<Situation> getSituationList(int situation); 
	public ArrayList<Music> searchByTitle(String title);
	public void save(); 
	public void load();
}

Exception

public class DuplicateException extends RuntimeException {

}

public class InputException extends RuntimeException{

}

'JAVA' 카테고리의 다른 글

Class를 이용해 음악 목록 보여주기(1)  (0) 2021.03.02
Comments