일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 국민취업지원제도
- 페이지 재사용
- 국비학원
- Git
- 정처기
- jdbc환경설정
- 로그아웃
- redirect
- 권한변경
- mvc
- 비밀번호변경
- forward
- 국취제
- 입력메소드
- 회원탈퇴
- 별찍기
- 인코딩
- github
- 회원정보수정
- 비밀번호암호화
- 내일배움카드
- jsp기본
- 배열
- 페이징
- jdbc설정
- live server 환경설정
- 내배카
- 관리자회원조회
- emmet환경설정
- 검색기능
- Today
- Total
기록
*23일차 실습 본문
@실습문제
음악playlist를 관리하는 프로그램을 만들어 보세요.
# 1. vo클래스 작성
@com.collection.list.music.model.vo.Music.java
-title:String
-singer:String
getter/setter, 기본생성자/파라미터있는생성자, toString 오버라이드
# 2. 실행클래스(메인메소드 포함)
@com.collection.list.music.run.Run.java
# 3. 메뉴클래스
@com.collection.list.music.view.MusicMenu.java
* 다음메뉴를 반복적으로 출력하고, 사용자선택값에 따라 적절한 컨트롤클래스 MusicManager객체의 메소드를 호출할 것.
* 필요한 사용자 입력값(곡명/가수명/Music객체정보)은 MusicMenu클래스에서 작성후 Manager객체로 전달함.
-sc:Scanner
-manager:MusicManager
================ Music Playlist Menu ================
1.목록보기
2.마지막에 음악추가
3.맨처음에 음악추가
4.곡삭제
5.곡변경
6.곡명검색
7.가수검색
8.목록정렬(곡명오름차순)
0.종료
================================================================
>> 메뉴선택 :
정렬 메뉴
-각 Comparator객체를 생성해 manager객체의 orderBy(Comparator)메소드 호출할 것.
================== 정렬 메뉴 ===================
1. 가수명 오름차순
2. 가수명 내림차순
3. 곡명 오름차순
4. 곡명 내림차순
5. 메인메뉴 돌아가기
================================================
a. 리스트 출력메소드
+ printList(List<Music>) : void
b. 곡명 입력메소드
+ inputTitle() : String
c. 가수 입력메소드
+ inputSinger() : String
d. 음악 입력메소드(곡명, 가수 모두 입력)
+ inputMusic() : Music
# 4. 컨트롤러 클래스 MusicManager
패키지 com.collection.list.music.controller
-musicList:ArrayList<Music> => 초기화블럭을 사용하여 5곡을 미리 만들어두기
구현할 메소드는 다음과 같다.
--------------------------------------------------------------------
1. 음악리스트 리턴
+ selectList():List<Music>
2. 마지막에 음악추가 : 사용자로부터 곡명과 가수를 입력받아 리스트에 저장하는 메소드.
+ addList(Music) : void
3. 맨처음에 음악추가 : 리스트 최상위(0번지)에 음악을 추가하는 메소드
+ addAtZero(Music) : void
4. 특정곡을 삭제하는 메소드(제목을 전달받아 검색후, 최초로 검색된 음악을 삭제)
삭제여부를 리턴
+ removeMusic(String) : boolean
5. 특정곡을 바꾸는 메소드(이전 음악객체, 새 음악객체를 전달해서 교체)
교체 성공여부를 리턴
+ boolean replaceMusic(Music oldMusic, Music newMusic) : boolean
6. 특정곡이 있는지 검사하는 메소드 : 복수개의 결과가 나올수 있음.
(곡명일부로 검색해서 해당곡이 있다면, 곡정보(제목/가수)를 출력하고, 없다면, "검색결과가 없습니다"출력)
+ searchMusicByTitle(String title) : List<Music>
7. 가수명으로 검색 메소드 : 복수개의 결과가 나올수 있음.
+ searchMusicBySinger(String singer) : List<Music>
8. 서브메뉴 - 각 정렬 메소드 : Comparable/Comparator 인터페이스를 적절히 활용할 것
+ orderBy(Comparator<Music> c) : List<Musice>
package com.collection.list.music.vo;
/**
*
*VO클래스
*
*/
import java.util.Objects;
public class Music implements Comparable<Music>{
private String title;
private String singer;
public Music() {}
public Music(String title, String singer) {
this.title = title;
this.singer = singer;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSinger() {
return singer;
}
public void setSinger(String singer) {
this.singer = singer;
}
@Override
public String toString() {
return title + "\t\t" + singer;
}
@Override
public int compareTo(Music o) {
return this.singer.compareTo(o.singer);
}
@Override
public int hashCode() {
return Objects.hash(singer, title);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Music other = (Music) obj;
if (singer == null) {
if (other.singer != null)
return false;
} else if (!singer.equals(other.singer))
return false;
if (title == null) {
if (other.title != null)
return false;
} else if (!title.equals(other.title))
return false;
return true;
}
}
--------------------------------------------------------
package com.collection.list.music.run;
import com.collection.list.music.view.MusicMenu;
public class MusicRun {
public static void main(String[] args) {
new MusicMenu().mainMenu();
System.out.println("-----이용해주셔서 감사합니다.-----");
}
}
--------------------------------------------------------
package com.collection.list.music.vo.model;
import java.util.Comparator;
import com.collection.list.music.vo.Music;
public class TitleAsc implements Comparator<Music> {
@Override
public int compare(Music o1, Music o2) {
return o1.getTitle().compareTo(o2.getTitle());
}
}
package com.collection.list.music.manager;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import com.collection.list.music.vo.Music;
/**
*
*music 관리자 클래스
*has a 포함관계
*
*/
public class MusicManager {
private List<Music> musicList = new ArrayList<>();
{
musicList.add(new Music("이지금","아이유"));
musicList.add(new Music("Easy on me","Adele"));
musicList.add(new Music("Die For You","The Weekend"));
musicList.add(new Music("outro","m83"));
musicList.add(new Music("수영해","유라"));
}
/**
* 1. 목록보기
* 필요에 따라 printList메소드를 오버라이딩해서 쓸 수 있다.
*/
public List<Music> selectList() {
return musicList;
}
/**
* 2. 마지막에 음악추가 : 사용자로부터 곡명과 가수를 입력받아 리스트에 저장하는 메소드.
*/
public void addList(Music m) {
//생성된 Music객체를 리스트에 추가
musicList.add(m);
}
/**
* 3. 맨처음에 음악추가 : 리스트 최상위(0번지)에 음악을 추가하는 메소드
*/
public void addAtZero(Music string) {
//0번지 music객체 추가
musicList.add(0,string);
}
/**
* 4. 특정곡을 삭제하는 메소드 : 제목으로 검색후 최초로 검색된 음악을 삭제
*/
public boolean removeMusic(String title) {
//1.리스트를 열람후 곡을 찾음
for(int i=0; i<musicList.size(); i++) {
//3.해당곡이 있을 경우 삭제
if(title.equals(musicList.get(i).getTitle())) {
musicList.remove(i);
// mList.remove(mList.get(i));
return true;
}
}
//4.해당곡이 없을 경우에는 찾는 곡이 없는 경우
return false;
}
/**
* 5. 특정곡을 바꾸는 메소드
*/
public boolean replaceMusic(Music oldMusic, Music newMusic) {
//1.리스트를 열람후 곡을 찾음
for(int i=0; i<musicList.size(); i++) {
//3.해당곡이 있을 경우 새로운 music객체(사용자 입력)
if(oldMusic.equals(musicList.get(i))) {
//대체
musicList.set(i, newMusic);
return true;
}
}
//4.해당곡이 없을 경우;
return false;
}
/**
* 6. 특정곡이 있는지 검사하는 메소드
* (곡명일부로 검색해서 해당곡이 있다면, 곡정보(제목/가수)를 출력하고, 없다면, "검색결과가 없습니다"출력)
*/
public List<Music> searchMusicByTitle(String title) {
//1.리스트 순회 : 곡이 있다면, 곡정보 출력
//없다면, 곡이 없다고 피드백주기
List<Music> searchList = new ArrayList<>();
for(int i=0; i<musicList.size(); i++) {
//2.해당곡이 있을 경우 출력
if(musicList.get(i).getTitle().contains(title))
searchList.add(musicList.get(i));
}
return searchList;
}
/**
* 7. 가수명으로 검색 메소드 : 복수개의 결과가 나올수 있음.
*/
public List<Music> searchMusicBySinger(String singer) {
//검색된 결과를 담을 리스트
List<Music> searchList = new ArrayList<>();
//1.리스트 순회
for(int i=0; i<musicList.size(); i++) {
//2.해당가수의 곡이 있을경우 출력
if(musicList.get(i).getSinger().contains(singer)) {
searchList.add(musicList.get(i));
}
}
return searchList;
}
/**
* 8. 졍렬메소드
* @java.uril.Comparable을 구현한 Music 클래스 (comparedTo메소드 오버라이드)
* @java.util.Comparator를 구현한 클래스 작성(compare메소드오버라이드)
*/
public List<Music> orderBy(Comparator<Music> comp) {
//실제 원본 리스트를 변경하지 않으려면, clone후 진행한다.
//ArrayList타입에 clone오버라이딩 되어있으므로, List -> ArrayList 형변환 필수.
//실제 ArrayList에 대해 깊은 복사가 이루어 지지만, 참조하는 요소 Music객체는 동일하다.(복사생성자를 통해 다시 깊은 복사 가능)
List<Music> musicList = (List<Music>)((ArrayList<Music>) this.musicList).clone();
// 아래 두 코드는 동일하다.
// Collections.sort(musicList, comp);
musicList.sort(comp);
return musicList;
}
}
--------------------------------------------------------
package com.collection.list.music.view;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
import com.collection.list.music.manager.MusicManager;
import com.collection.list.music.vo.Music;
import com.collection.list.music.vo.model.TitleAsc;
/**
*
*
* view단 클래스
* -사용자에게 메뉴시각화
* -사용자 입력값 처리
* -manager 객체의 메소드 호출
* -결과 출력
*
*/
public class MusicMenu {
private Scanner sc =new Scanner(System.in);
//music을 관리하는 class가 manager니까.
private MusicManager manager = new MusicManager();
public void mainMenu() {
String menu = "================ Music Playlist Menu ================\r\n"
+ "1.목록보기\r\n"
+ "2.마지막에 음악추가\r\n"
+ "3.맨처음에 음악추가\r\n"
+ "4.곡삭제\r\n"
+ "5.곡변경\r\n"
+ "6.곡명검색\r\n"
+ "7.가수검색\r\n"
+ "8.목록정렬(곡명오름차순)\r\n"
+ "0.종료\r\n"
+ "================================================================\r\n"
+ ">> 메뉴선택 : ";
while (true) {
System.out.println(menu);
String choice = sc.next();
boolean result = false;
switch(choice) {
//목록 출력
case "1" :
printList(manager.selectList());
break;
//마지막에 음악추가
case "2":
manager.addList(inputMusic());
break;
//맨처음에 음악추가
case "3":
manager.addAtZero(inputMusic());
break;
//특정곡 삭제
case "4":
result = manager.removeMusic(inputTitle());
System.out.println(result ? "> 삭제 성공! " : "> 삭제 실패! 찾는 곡 없음 " );
break;
//특정곡 변경
case "5":
result = manager.replaceMusic(inputMusic(),inputMusic());
System.out.println(result ? "> 수정 성공! " : "> 수정 실패! 찾는 곡 없음 " );
break;
//특정곡 검색
case "6":
printList(manager.searchMusicByTitle(inputTitle()));
break;
//가수명으로 검색
case "7":
printList(manager.searchMusicBySinger(inputSinger()));
break;
//서브메뉴
case "8":
orderMenu();
break;
case "0":
return; //현재메소드를 호출한곳으로 return(메인메소드)
default:
System.out.println("잘못 입력함");
}
}
}
private void orderMenu() {
String order="================ 정렬 메뉴 ================\\r\\n\" \r\n"
+ " + \"1.가수명 오름차순\\r\\n\" \r\n"
+ " + \"2.가수명 내림차순\\r\\n\"\r\n"
+ " + \"3.곡명 오름차순\\r\\n\" \r\n"
+ " + \"4.곡명 내림차순\\r\\n\" \r\n"
+ " + \"5.메인메뉴 돌아가기\\r\\n\" \r\n"
+ " + \"================================================================\\r\\n\" \r\n"
+ " + \">> 메뉴선택 : ";
while(true) {
System.out.print(order);
int choice =sc.nextInt();
switch(choice) {
case 1:
printList(manager.orderBy(null));
break;
case 2:
printList(manager.orderBy(Collections.reverseOrder()));
break;
case 3:
printList(manager.orderBy(new TitleAsc()));
break;
case 4:
printList(manager.orderBy(Collections.reverseOrder(new TitleAsc())));
break;
case 5:
return;
default:
System.out.println("잘못 입력함");
}
}
}
private void printList(List<Music> list) {
System.out.println("==========================================");
if(!list.isEmpty()) {
System.out.println("곡명\t\t가수");
System.out.println("------------------------------------");
//1.for(index)
//2.iterator
//3.foreach
for(Music m : list)
System.out.println(m);
}
else {
System.out.println("찾으시는 곡이 없습니다.");
}
System.out.println("------------------------------------\n");
}
public Music inputMusic() {
System.out.println("곡명 입력");
String title = sc.next();
System.out.println("가수 입력");
String singer = sc.next();
return new Music(title,singer);
}
public String inputTitle() {
System.out.println("곡명 입력: ");
return sc.next();
}
public String inputSinger() {
System.out.println("가수 입력: ");
return sc.next();
}
}
'학원 > 실습' 카테고리의 다른 글
*24일차 ncs (수강생 평가) -실기 (0) | 2022.02.25 |
---|---|
*24일차 ncs (수강생 평가) -필기 (0) | 2022.02.25 |
*22일차 실습 (0) | 2022.02.23 |
*21일차 실습 (0) | 2022.02.22 |
*20일차 실습 (0) | 2022.02.21 |