詳細設計 一、類 1、歌曲類(Song) 屬性:歌曲ID,歌曲名稱,演唱者 方法:構造方法、getter/setter方法、hashCode()和equals()重寫方法、toString重寫方法 2、播放列表類(PlayList) 屬性:播放列表名稱、播放列表中的歌曲集合(List類型) 方法:構造方法、getter/setter方法、public void addToPlayList(Song song)將歌曲添加到播放列表的方法、public void displayAllSong()顯示播放列表中所有歌曲的方法、public Song searchSongById(String id)通過id查詢歌曲的方法、public Song searchSongByName(String Name)通過名稱查詢歌曲的方法、public void updateSong(Song song)修改歌曲的方法、public void deleteSong(String id)從播放列表刪除歌曲的方法、public void exportPlayList()導出歌單的方法 3、播放器類(PlayListCollection) 屬性:存放播放列表的集合(Map類型) 方法:構造方法、getter/setter方法、public void addPlayList(PlayList playlist)添加播放列表到播放器的方法、public void deletePlayList(PlayList playlist)刪除播放列表的方法、public PlayList searchPlayListByName(String Name)通過名字查詢播放列表的方法、public void displayPlayListName()顯示所有播放列表名稱的方法 4、測試類(Test)
歌曲類package com.imooc.model;import java.io.Serializable;/*由于之后要利用對象序列化輸出歌單,因此需要實現序列化接口*/public class Song implements Serializable{ PRivate String songId; private String songName; private String songSinger; public Song() { } public Song(String songId,String songName,String songSinger) { setSongId(songId); setSongName(songName); setSongSinger(songSinger); } public String getSongId() { return songId; } public void setSongId(String songId) { this.songId = songId; } public String getSongName() { return songName; } public void setSongName(String songName) { this.songName = songName; } public String getSongSinger() { return songSinger; } public void setSongSinger(String songSinger) { this.songSinger = songSinger; } @Override public String toString() { return "[歌曲編號:"+songId+" 歌曲名:"+songName+" 演唱者:"+songSinger+"]"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((songId == null) ? 0 : songId.hashCode()); result = prime * result + ((songName == null) ? 0 : songName.hashCode()); result = prime * result + ((songSinger == null) ? 0 : songSinger.hashCode()); return result; } @Override public boolean equals(Object obj) { if(this==obj) return true; if(obj instanceof Song) { return this.songId.equals(((Song) obj).songId); } else return false; }}播放列表類package com.imooc.model;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectOutputStream;import java.util.ArrayList;import java.util.List;public class PlayList { private String playListName; private List<Song> musicList;//播放列表中的歌曲集合,且只允許存放Song類型的對象 public PlayList() { } public PlayList(String playListName) { setPlayListName(playListName); setMusicList(new ArrayList<Song>()); } public String getPlayListName() { return playListName; } public void setPlayListName(String playListName) { this.playListName = playListName; } public List<Song> getMusicList() { return musicList; } public void setMusicList(List<Song> musicList) { this.musicList = musicList; } /*將歌曲添加到播放列表*/ public void addToPlayList(Song song) { int i; if(musicList.size()==0)//若列表中不含任何歌曲則直接添加 { musicList.add(song); System.out.println("添加成功!"); } else { for(i=0;i<musicList.size();i++) { //判斷添加的歌曲是否重復,若無重復再進行添加 if((song.getSongSinger()).equals((musicList.get(i)).getSongSinger())&(song.getSongName()).equals((musicList.get(i)).getSongName())) { System.out.println("此歌曲已存在!添加失敗!"); break; } if(i==(musicList.size()-1)) { musicList.add(song); System.out.println("添加成功!"); } } } } //顯示播放列表中的所有歌曲 public void displayAllSong() { for(int i=0;i<musicList.size();i++) { System.out.println(musicList.get(i)); } System.out.println("歌曲顯示完畢!"); } //通過歌曲ID查找歌曲 public Song searchSongById(String songId) { int i; boolean flag=false; for(i=0;i<musicList.size();i++)//遍歷List { if(songId.equals(musicList.get(i).getSongId())) { System.out.println("找到了!歌曲信息為:"); System.out.println(musicList.get(i)); flag=true; break; } if(i==(musicList.size()-1)) { System.out.println("不存在此歌曲!"); } } if(flag) return musicList.get(i); else return null; } //通過歌曲名查找歌曲 public Song searchSongByName(String songName) { int i; boolean flag=false; for(i=0;i<musicList.size();i++)//遍歷List { if(songName.equals(musicList.get(i).getSongName())) { System.out.println("找到了!歌曲信息為:"); System.out.println(musicList.get(i)); flag=true; break;//找到了就跳出循環 } if(i==(musicList.size()-1)) { System.out.println("不存在此歌曲!"); } } if(flag) return musicList.get(i); else return null; } //修改歌曲 public void updateSong(Song song) { for(int i=0;i<musicList.size();i++) { if((song.getSongId()).equals((musicList.get(i)).getSongId())) { musicList.set(i,song); System.out.println("修改成功!"); break; } } } //根據歌曲ID刪除歌曲 public void deleteSong(String songId) { for(int i=0;i<musicList.size();i++) { if(songId.equals((musicList.get(i)).getSongId())) { musicList.remove(i); System.out.println("刪除成功!"); break; } if(i==(musicList.size()-1)) { System.out.println("不存在此歌曲!"); } } } //導出歌單 public void exportPlayList() { try { FileOutputStream fos = new FileOutputStream(playListName+"歌單"); ObjectOutputStream oos=new ObjectOutputStream(fos); for(int i=0;i<musicList.size();i++) { oos.writeObject(musicList.get(i)); oos.flush(); } System.out.println("導出歌單/""+playListName+"/"成功!"); oos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}package com.imooc.model;import java.util.HashMap;import java.util.Iterator;import java.util.Map;public class PlayListCollection { private Map<String,PlayList> playListMap;//存放播放列表的集合 public PlayListCollection() { //在無參構造中為成員屬性賦值 this.playListMap=new HashMap<String,PlayList>(); } public Map<String, PlayList> getPlayListMap() { return playListMap; } public void setPlayListMap(Map<String, PlayList> playListMap) { this.playListMap = playListMap; } //添加播放列表到播放器 public void addPlayList(PlayList playlist) { if(playListMap.containsKey(playlist.getPlayListName())) { System.out.println("此播放列表已存在!"); } else { playListMap.put(playlist.getPlayListName(),playlist); System.out.println("成功將播放列表添加到播放器!"); } } //刪除播放列表 public void deletePlayList(String playListName) { if(playListMap.containsKey(playListName)) { playListMap.remove(playListName); System.out.println("刪除播放列表成功!"); } else { System.out.println("不存在此播放列表!刪除失敗!"); } } public void searchPlayListByName(String playListName) { if(playListMap.containsKey(playListName)) { System.out.println("存在此播放列表!"); } else { System.out.println("不存在此播放列表!"); } } //顯示所有播放列表名稱 public void displayPlayListName() { Iterator<PlayList> it=playListMap.values().iterator(); while(it.hasNext()) { System.out.println(it.next().getPlayListName()); } System.out.println("已顯示全部播放列表名稱!"); }}測試類package com.imooc.test;import java.util.Iterator;import java.util.Scanner;import com.imooc.model.PlayList;import com.imooc.model.PlayListCollection;import com.imooc.model.Song;public class Test { public static void printStar() { System.out.println("*********************************"); } /*主菜單*/ public static void mainMenu() { printStar(); System.out.println("/t**主菜單**"); System.out.println("/t1--播放列表管理"); System.out.println("/t2--播放器管理"); System.out.println("/t0--退出"); printStar(); System.out.println("請輸入對應的數字進行操作:"); } /*播放列表管理菜單*/ public static void playListMenu() { printStar(); System.out.println("/t**播放列表管理**"); System.out.println("1--將歌曲添加到主播放列表"); System.out.println("2--將歌曲添加到普通播放列表"); System.out.println("3--通過歌曲id查詢播放列表中的歌曲"); System.out.println("4--通過歌曲名稱查詢播放列表中的歌曲"); System.out.println("5--修改播放列表中的歌曲"); System.out.println("6--刪除播放列表中的歌曲"); System.out.println("7--顯示播放列表中的所有歌曲"); System.out.println("8--導出歌單"); System.out.println("9--返回上一級菜單"); printStar(); System.out.println("請輸入對應的數字對播放列表進行管理:"); } /*播放器菜單*/ public static void playerMenu() { printStar(); System.out.println("/t**播放器管理**"); System.out.println("/t1--向播放器添加播放列表"); System.out.println("/t2--從播放器刪除播放列表"); System.out.println("/t3--通過名字查詢播放列表信息"); System.out.println("/t4--顯示所有播放列表名稱"); System.out.println("/t9--返回上一級菜單"); printStar(); } /*主流程實現*/ public static void test() { } public static void main(String[] args) { PlayList mainPlayList=new PlayList("主播放列表");//創建主播放列表 PlayListCollection playlistcollection=new PlayListCollection();//創建播放器對象 playlistcollection.addPlayList(mainPlayList);//將主播放列表加入播放器 Scanner sc=new Scanner(System.in); int mainMenuInput=3; while(mainMenuInput!=0) { mainMenu(); mainMenuInput=sc.nextInt(); switch(mainMenuInput) { case 1: { int playListMenuInput=0; while(true) { if(playListMenuInput==9)/*利用break跳出while循環實現回到上一級菜單的功能,(前提是有循環while嵌套才能回到mainMenu()這個語句)*/ { break; } playListMenu(); playListMenuInput=sc.nextInt(); switch(playListMenuInput) { case 1: { int songNumber=0; System.out.println("請輸入要添加的歌曲的數量:"); songNumber=sc.nextInt(); for(int i=1;i<=songNumber;i++) { System.out.println("請輸入第"+i+"首歌曲的id:"); String songId=sc.next(); System.out.println("請輸入第"+i+"首歌曲的名字:"); String songName=sc.next(); System.out.println("請輸入第"+i+"首歌曲的演唱者:"); String songSinger=sc.next(); Song song=new Song(songId,songName,songSinger); mainPlayList.addToPlayList(song); } break; } case 2: { int songNumber=0; String playListName; System.out.println("請輸入播放列表名稱:"); playListName=sc.next(); if(playlistcollection.getPlayListMap().containsKey(playListName)) { System.out.println("請輸入要添加歌曲的數量:"); songNumber=sc.nextInt(); for(int i=1;i<=songNumber;i++) { boolean flag=true;//用來判斷輸入的歌曲ID是否存在 System.out.println("請輸入第"+i+"首歌曲的id:"); String songId=sc.next(); /*如果查找到了輸入的歌曲ID已存在,則直接根據ID添加歌曲至播放列表,并且不再輸入名字和演唱者*/ for(int j=0;j<mainPlayList.getMusicList().size();j++) { if(songId.equals(((Song)(mainPlayList.getMusicList().get(j))).getSongId())) { playlistcollection.getPlayListMap().get(playListName).addToPlayList((Song)playlistcollection.getPlayListMap().get(playListName).getMusicList().get(j)); flag=false; break; } } if(flag) { System.out.println("該歌曲在主播放列表不存在!請繼續輸入歌曲其他信息以完成新歌曲的創建!"); System.out.println("請輸入第"+i+"首歌曲的名字:"); String songName=sc.next(); System.out.println("請輸入第"+i+"首歌曲的演唱者:"); String songSinger=sc.next(); Song song=new Song(songId,songName,songSinger); playlistcollection.getPlayListMap().get(playListName).addToPlayList(song); mainPlayList.addToPlayList(song);//向普通列表添加歌曲時同時也添加到主播放列表 } System.out.println("主播放列表中的歌曲:"); mainPlayList.displayAllSong(); System.out.println("普通播放列表中的歌曲:"); playlistcollection.getPlayListMap().get(playListName).displayAllSong(); } } else { System.out.println("不存在該播放列表!請先將播放列表添加至播放器!"); } break; } case 3: { System.out.println("請輸入要查詢的播放列表名稱:"); String playListName=sc.next(); if(playlistcollection.getPlayListMap().containsKey(playListName)) { System.out.println("請輸入要查詢的歌曲id:"); String songId=sc.next(); playlistcollection.getPlayListMap().get(playListName).searchSongById(songId); } else { System.out.println("不存在該播放列表!請先將播放列表添加至播放器!"); } break; } case 4: { System.out.println("請輸入要查詢的播放列表名稱:"); String playListName=sc.next(); if(playlistcollection.getPlayListMap().containsKey(playListName)) { System.out.println("請輸入要查詢的歌曲名稱:"); String songName=sc.next(); playlistcollection.getPlayListMap().get(playListName).searchSongByName(songName); } else { System.out.println("不存在該播放列表!請先將播放列表添加至播放器!"); } break; } case 5: { System.out.println("請輸入要修改的歌曲id:"); String songId=sc.next(); Song song=mainPlayList.searchSongById(songId); System.out.println("請輸入修改后的歌曲名稱:"); String songName=sc.next(); System.out.println("請輸入修改后的歌曲演唱者:"); String songSinger=sc.next(); song.setSongName(songName); song.setSongSinger(songSinger); mainPlayList.updateSong(song); break; } case 6: { /*利用迭代器遍歷刪除每一個播放列表里id為輸入id的歌曲*/ System.out.println("請輸入要刪除的歌曲id:"); String songId=sc.next(); Iterator<PlayList> it=playlistcollection.getPlayListMap().values().iterator(); while(it.hasNext()) { PlayList array=(PlayList)it.next(); for(int i=0;i<(array).getMusicList().size();i++) { if(songId.equals(((Song)(((array).getMusicList()).get(i))).getSongId())) { array.deleteSong(songId); break; } } } break; } case 7: { System.out.println("請輸入要顯示的播放列表名稱:"); String playListName=sc.next(); if(playlistcollection.getPlayListMap().containsKey(playListName)) { playlistcollection.getPlayListMap().get(playListName).displayAllSong(); } else { System.out.println("不存在該播放列表!請先將播放列表添加至播放器!"); } break; } case 8: { System.out.println("請輸入要導出歌單的播放列表名稱:"); String playListName=sc.next(); if(playlistcollection.getPlayListMap().containsKey(playListName)) { playlistcollection.getPlayListMap().get(playListName).exportPlayList(); } else { System.out.println("不存在該播放列表!請先將播放列表添加至播放器!"); } break; } case 9: { break; } default :; } } break; } case 2: { int playerMenuInput=0; while(true) { if(playerMenuInput==9)/*break跳出while循環回到上級菜單*/ break; playerMenu(); playerMenuInput=sc.nextInt(); switch(playerMenuInput) { case 1: { System.out.println("輸入要添加的播放列表名稱:"); String playListName=sc.next(); playlistcollection.addPlayList(new PlayList(playListName)); break; } case 2: { System.out.println("輸入要刪除的播放列表名稱:"); String playListName=sc.next(); playlistcollection.deletePlayList(playListName); break; } case 3: { System.out.println("請輸入要查詢的播放列表名稱:"); String playListName=sc.next(); playlistcollection.searchPlayListByName(playListName); break; } case 4: { playlistcollection.displayPlayListName(); break; } case 9: { break; } } } break; } case 0:System.out.println("成功退出播放器!");System.exit(-1);break; default :System.out.println("數據輸入錯誤!"); } } sc.close(); }}新聞熱點
疑難解答