目录
一、需求分析:
①播放列表管理:
- 将歌曲添加到主播放列表。
- 将歌曲添加到播放列表。
- 通过歌曲id查询播放列表中的歌曲。
- 通过歌曲名查询播放列表中的歌曲。
- 修改播放列表中的歌曲。
- 删除播放列表中的歌曲。
- 显示播放列表中的所有歌曲。
②播放器管理:
- 向播放器添加播放功能。
- 从播放器删除播放列表。
- 通过名字查询播放列表信息。
- 显示所有播放列表名称。
二、详细设计:
1.歌曲类(Song):
- 属性(都是String型):歌曲id(id),歌曲名(name),歌手(singer)。
- 方法:构造方法,getter和setter方法,hashCode()方法和equals()方法,toString()方法。
2.播放列表类(PlayList):
属性:
①播放列表名称:String playListName
②播放列表的歌曲集合:musicList
方法:
①构造方法
②getter和setter方法
③将歌曲添加到播放列表:public void addToPlayList(Song song)
④显示播放列表中的所有歌曲:public void displayAllSong()
⑤通过歌曲id查询播放列表中的歌曲:public Song searchSongById(String id)
⑥通过名称查询歌曲:public Song searchSongByName(String n)
⑦修改歌曲:public void updateSong(String id,Song name)
⑧从播放列表删除歌曲:public void deleteSong(String id)
⑨按歌曲名进行排序:public void sortBySongName()
3.播放器类(PlayListCollection):
- 属性:存储播放列表的集合(playListMap):Map
- 方法:
①构造方法
②getter和setter方法
③向播放列表集合添加播放列表:public void addPlayList(PlayList playlist)
④删除播放列表:public void deletePlayList(PlayList playlist)
⑤通过名字查询:public PlayList searchPlayListByName(String playListName)
⑥显示所有播放列表名称:public void displayPlayListName()
4.测试类(Test)
三、代码:
①Song类:
package com.player;
public class Song {
private String id;
private String name;
private String singer;
public Song(String id, String name, String singer) {
super();
this.id = id;
this.name = name;
this.singer = singer;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSinger() {
return singer;
}
public void setSinger(String singer) {
this.singer = singer;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((singer == null) ? 0 : singer.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
// 判断对象是否相等,相等返回true
if (this == obj) {
return true;
}
// 判断类型是否相同
if (obj.getClass() == Song.class) {
Song song = (Song) obj;
return (song.getId().equals(id) && song.getName().equals(name) && song.getSinger().equals(singer));
}
return false;
}
@Override
public String toString() {
return "歌曲信息: id是:" + id + ", 歌名是:" + "《" + name + "》" + ", 歌手是:" + singer;
}
}
②PlayList类:
package com.player;
import java.util.ArrayList;
import java.util.List;
public class PlayList {
private String playListName;
private List<Song> musicList;
/**
* 构造方法
*
* @param playListName 播放列表的名称
*/
public PlayList(String playListName) {
this.playListName = playListName;
musicList = new ArrayList<Song>();
}
/**
* 将歌曲添加到播放列表
*
* @param song 要添加的歌曲
*/
public void addToPlayList(Song song) {
// 排除重复添加的情况
boolean x = false;
for (Song song1 : musicList) {
if (song1.equals(song)) {
x = true;
break;
}
}
if (x) {
// System.out.println("这首歌曲已存在于播放列表中,添加失败!");
} else {
musicList.add(song);
}
}
/**
* 显示播放列表中的所有歌曲
*/
public void displayAllSong() {
if (!musicList.isEmpty()) {
System.out.println("播放列表中的所有歌曲是:");
for (Song song : musicList) {
System.out.println(song);
}
} else {
System.out.println("该播放列表为空!");
}
}
/**
* 通过歌曲id查询播放列表中的歌曲
*
* @param id 歌曲id
* @return 查询到的歌曲信息
*/
public Song searchSongById(String id) {
Song song = null;
Boolean y = false;
for (Song song1 : musicList) {
if (song1.getId().equals(id)) {
song = song1;
y = true;
break;
}
}
// if (y) {
// System.out.println("找到了!"+song);
// }else {
// System.out.println("此列表不存在id为"+id+"的歌曲!");
// }
return song;
}
/**
* 通过名称查询歌曲
*
* @param n 歌曲名称
* @return 查询到的歌曲信息
*/
public Song searchSongByName(String name) {
Song song = null;
boolean z = false;
for (Song song1 : musicList) {
if (song1.getName().equals(name)) {
song = song1;
z = true;
break;
}
}
if (z) {
System.out.println("找到了!该歌曲信息是:" + song);
} else {
System.out.println("此列表不存在歌名为《" + name + "》的歌曲!");
}
return song;
}
/**
* 修改歌曲
*
* @param id 要修改的歌曲id
* @param name 修改后的歌曲
*/
public void updateSong(String id, Song song) {
Song song1 = searchSongById(id);
if (song1 != null) {
// 先移除原有歌曲,再添加新歌曲
musicList.remove(song1);
musicList.add(song);
System.out.println("修改成功!");
} else {
System.out.println("播放列表中不存在该歌曲!");
}
}
/**
* 从播放列表删除歌曲
*
* @param id 要删除的歌曲id
*/
public void deleteSong(String id) {
Song song = searchSongById(id);
if (song != null) {
// 先移除原有歌曲,再添加新歌曲
musicList.remove(song);
System.out.println("删除成功!");
}
}
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;
}
}
③PlayListCollection类:
package com.player;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class PlayListCollection {
Map<String, PlayList> playListMap; // 存储播放列表的集合
public PlayListCollection() {
playListMap = new HashMap<String, PlayList>();
}
/**
* 向播放列表集合添加播放列表
*
* @param playlist 要添加的播放列表
*/
public void addPlayList(PlayList playlist) {
playListMap.put(playlist.getPlayListName(), playlist);
}
/**
* 删除播放列表
*
* @param playlist 要删除的播放列表
*/
public void deletePlayList(PlayList playlist) {
playListMap.remove(playlist.getPlayListName()); // 通过键名删除
System.out.println("删除成功!");
}
/**
* 通过名字查询
*
* @param playListName 播放列表名称
* @return 播放列表信息
*/
public PlayList searchPlayListByName(String playListName) {
PlayList playList = null;
Set<String> set = playListMap.keySet();
for (String string : set) {
if (string.equals(playListName)) {
playList = playListMap.get(string);
}
}
return playList;
}
/**
* 显示所有播放列表名称
*/
public void displayPlayListName() {
Set<String> set = playListMap.keySet();
System.out.println("播放列表名称是:");
for (String string : set) {
System.out.println(string);
}
}
public Map<String, PlayList> getPlayListMap() {
return playListMap;
}
public void setPlayListMap(Map<String, PlayList> playListMap) {
this.playListMap = playListMap;
}
}
④Test类:
package com.player;
import java.util.Scanner;
public class Test {
// 测试歌曲类:Song
// public void songTest() {
// Song song1 = new Song("001", "重返荣耀", "南拳妈妈");
// Song song2 = new Song("002", "水手怕水", "周杰伦");
// Song song3 = new Song("003", "骑士精神", "蔡依林");
// Song song4 = new Song("004", "河滨公园", "S.H.E");
// Song song5 = new Song("002", "水手怕水", "周杰伦");
// System.out.println(song1);
// System.out.println("song1==song3?" + (song1.equals(song3)));
// System.out.println("song2==song5?" + (song2.equals(song5)));
// System.out.println(song3 == song4);
// }
// 测试播放列表类:PlayList
// public void PlayListTest() {
// Song song1 = new Song("001", "重返荣耀", "南拳妈妈");
// Song song2 = new Song("002", "水手怕水", "周杰伦");
// Song song3 = new Song("003", "骑士精神", "蔡依林");
// Song song4 = new Song("004", "河滨公园", "S.H.E");
// Song song5 = new Song("002", "水手怕水", "周杰伦");
// PlayList mainPlayList = new PlayList("主播放列表");
// mainPlayList.addToPlayList(song1);
// mainPlayList.addToPlayList(song2);
// mainPlayList.addToPlayList(song3);
// mainPlayList.addToPlayList(song5);
// mainPlayList.displayAllSong();
// // 通过歌曲id查询播放列表中的歌曲
// Song song = mainPlayList.searchSongById("002");
// // 通过名称查询歌曲
// song = null;
// song = mainPlayList.searchSongByName("河滨公园");
// // 修改歌曲
// Song song6 = new Song("004", "如果当时", "许嵩");
// mainPlayList.updateSong("003", song6);
// mainPlayList.displayAllSong();
// // 删除歌曲信息
// mainPlayList.deleteSong("005");
// mainPlayList.deleteSong("001");
// mainPlayList.displayAllSong();
// }
// 测试播放列表集合类
// public void PlayListCollectionTest() {
// Song song1 = new Song("001", "重返荣耀", "南拳妈妈");
// Song song2 = new Song("002", "水手怕水", "周杰伦");
// Song song3 = new Song("003", "骑士精神", "蔡依林");
// // 创建主播放列表
// PlayList mainPlayList = new PlayList("主播放列表");
// // 添加歌曲到主播放列表
// mainPlayList.addToPlayList(song1);
// mainPlayList.addToPlayList(song2);
// mainPlayList.addToPlayList(song3);
// // 定义一个新播放列表并从主播放列表添加歌曲过去
// PlayList likePlayList = new PlayList("我喜欢");
// likePlayList.addToPlayList(mainPlayList.getMusicList().get(0));
// likePlayList.addToPlayList(mainPlayList.getMusicList().get(1));
// likePlayList.displayAllSong();
// // 将2个播放列表添加到集合中
// PlayListCollection playListCollection = new PlayListCollection();
// playListCollection.addPlayList(mainPlayList);
// playListCollection.addPlayList(likePlayList);
// playListCollection.displayPlayListName();
// // 根据播放列表名称查询播放列表信息,并显示
// PlayList playList = playListCollection.searchPlayListByName("我喜欢");
// playList.displayAllSong();
// // 删除播放列表
// System.out.println("删除前:");
// playListCollection.displayPlayListName();
// playListCollection.deletePlayList(likePlayList);
// System.out.println("删除后:");
// playListCollection.displayPlayListName();
// }
// 主菜单
private void mainMenu() {
System.out.println("*****************************");
System.out.println(" ***主菜单*** ");
System.out.println(" 1——播放列表管理 ");
System.out.println(" 2——播放器管理 ");
System.out.println(" 0——退出 ");
System.out.println("*****************************");
}
// 播放列表管理菜单
public void playListMenu() {
System.out.println("*******************************");
System.out.println(" ***播放列表管理菜单*** ");
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("*******************************");
}
// 播放器菜单
public void playerMenu() {
System.out.println("*******************************");
System.out.println(" ***播放器管理*** ");
System.out.println(" 1——向播放器添加播放列表 ");
System.out.println(" 2——从播放器删除播放列表 ");
System.out.println(" 3——通过名字查询播放列表信息 ");
System.out.println(" 4——显示所有播放列表名称 ");
System.out.println(" 5——返回上一级菜单 ");
System.out.println("*******************************");
}
// 主流程
public void test() {
Scanner scanner = new Scanner(System.in);
int input1 = 0, input2 = 0, input3 = 0;
Test test = new Test();
// 创建一个播放列表容器
PlayListCollection playListCollection = new PlayListCollection();
// 创建主播放列表
PlayList mainPlayList = new PlayList("主播放列表");
// 将主播放列表添加到播放器
playListCollection.addPlayList(mainPlayList);
PlayList nomalPlayList = null;
while (true) {
test.mainMenu();
System.out.println("请输入对应数字进行操作:");
input1 = scanner.nextInt();
if (input1 == 0) {
break;
}
switch (input1) {
case 1:
// 播放列表管理
while (true) {
test.playListMenu();
System.out.println("请输入对应数字进行操作:");
input2 = scanner.nextInt();
if (input2 == 8) {
break;
}
switch (input2) {
case 1:
System.out.println("将歌曲添加到主播放列表 ");
System.out.println("请输入要添加的歌曲数量:");
int count = scanner.nextInt();
for (int i = 1; i <= count; i++) {
System.out.println("请输入第" + i + "首歌曲的信息:");
System.out.println("请输入歌曲id:");
String idString = scanner.next();
System.out.println("请输入歌曲名称:");
String nameString = scanner.next();
System.out.println("请输入歌手:");
String singerString = scanner.next();
// 创建歌曲类对象
Song song = new Song(idString, nameString, singerString);
mainPlayList.addToPlayList(song);
// mainPlayList.displayAllSong(); //测试
}
break;
case 2:
System.out.println("将歌曲添加到普通播放列表 ");
System.out.println("请输入要添加的播放列表名称:");
String plName = scanner.next();
// 根据名称判断播放列表是否存在于播放器中
nomalPlayList = playListCollection.searchPlayListByName(plName);
if (nomalPlayList == null) {
System.out.println("该播放列表不存在,请先将播放列表添加到播放器中!");
} else {
System.out.println("请输入要添加的歌曲数量:");
int count1 = scanner.nextInt();
for (int i = 1; i <= count1; i++) {
System.out.println("请输入第" + i + "首歌曲的信息:");
System.out.println("请输入歌曲id:");
String idString = scanner.next();
// 判断该id的歌曲是否在主播放列表中存在
Song song = mainPlayList.searchSongById(idString);
// 若不存在,则创建新的添加,继续输入歌曲的其他信息
if (song == null) {
System.out.println("该歌曲在主播放列表中不存在,请继续输入歌曲的其他信息!");
System.out.println("请输入歌曲名称:");
String nameString = scanner.next();
System.out.println("请输入歌手:");
String singerString = scanner.next();
// 创建歌曲类对象
song = new Song(idString, nameString, singerString);
// 分别将歌曲添加到普通播放列表和主播放列表
nomalPlayList.addToPlayList(song);
mainPlayList.addToPlayList(song);
} else {
// 若歌曲存在于主播放列表中,则直接添加到普通播放列表
nomalPlayList.addToPlayList(song);
}
}
// 显示播放列表中的歌曲信息
System.out.println("主播放列表:");
nomalPlayList.displayAllSong();
System.out.println("普通播放列表:");
mainPlayList.displayAllSong();
}
break;
case 3:
System.out.println("通过歌曲id查询播放列表中的歌曲");
System.out.println("请输入要查询的播放列表名称:");
String playListName = scanner.next();
// 查询该播放列表是否存在
PlayList playList = playListCollection.searchPlayListByName(playListName);
if (playList == null) {
System.out.println("该播放列表不存在!");
break;
} else {
System.out.println("请输入要查询的歌曲id:");
String idString = scanner.next();
Song song = playList.searchSongById(idString);
if (song == null) {
System.out.println("该歌曲在" + playListName + "中不存在!");
} else {
System.out.println("该歌曲的信息是:");
System.out.println(song);
}
}
break;
case 4:
System.out.println("通过歌曲名称查询播放列表中的歌曲");
System.out.println("请输入要查询的播放列表名称:");
String playListNamea = scanner.next();
// 查询该播放列表是否存在
PlayList playLista = playListCollection.searchPlayListByName(playListNamea);
if (playLista == null) {
System.out.println("该播放列表不存在!");
break;
} else {
System.out.println("请输入要查询的歌曲名称:");
String nameString = scanner.next();
Song song = playLista.searchSongByName(nameString);
if (song == null) {
System.out.println("该歌曲在" + playListNamea + "中不存在!");
} else {
System.out.println("该歌曲的信息是:");
System.out.println(song);
}
}
break;
case 5:
System.out.println("修改播放列表中的歌曲 ");
System.out.println("请输入要查询的播放列表名称:");
String playListNameb = scanner.next();
// 查询该播放列表是否存在
PlayList playListb = playListCollection.searchPlayListByName(playListNameb);
if (playListb == null) {
System.out.println("该播放列表不存在!");
break;
} else {
System.out.println("请输入要修改的歌曲id:");
String idString = scanner.next();
if (playListb.searchSongById(idString) == null) {
System.out.println("播放列表" + playListNameb + "中不存在id为" + idString + "的歌曲,请先添加该歌曲再修改!");
break;
} else {
System.out.println("请输入修改后的歌曲名称:");
String nameString = scanner.next();
System.out.println("请输入修改后的歌手:");
String singerString = scanner.next();
Song songb = new Song(idString, nameString, singerString);
playListb.updateSong(idString, songb);
}
}
break;
case 6:
System.out.println("删除播放列表中的歌曲 ");
System.out.println("请输入要查询的播放列表名称:");
String playListNamec = scanner.next();
// 查询该播放列表是否存在
PlayList playListc = playListCollection.searchPlayListByName(playListNamec);
if (playListc == null) {
System.out.println("该播放列表不存在!");
break;
} else {
System.out.println("请输入要修改的歌曲id:");
String idString = scanner.next();
if (playListc.searchSongById(idString) == null) {
System.out.println("播放列表" + playListNamec + "中不存在id为" + idString + "的歌曲!");
break;
} else {
playListc.deleteSong(idString);
}
}
break;
case 7:
System.out.println("显示播放列表中所有的歌曲 ");
System.out.println("请输入要查询的播放列表名称:");
String playListNamed = scanner.next();
// 查询该播放列表是否存在
PlayList playListd = playListCollection.searchPlayListByName(playListNamed);
if (playListd == null) {
System.out.println("该播放列表不存在!");
break;
} else {
playListd.displayAllSong();
}
break;
default:
System.out.println("该数字没有对应操作!");
break;
}
}
break;
case 2:
// 播放器管理
while (true) {
test.playerMenu();
System.out.println("请输入对应数字进行操作:");
input3 = scanner.nextInt();
if (input3 == 5) {
break;
}
switch (input3) {
case 1:
System.out.println("向播放器添加播放列表");
System.out.println("输入要添加到播放列表称:");
String playListName = scanner.next();
// 创建一个新的播放列表对象
nomalPlayList = new PlayList(playListName);
// 将播放列表添加到播放器中
playListCollection.addPlayList(nomalPlayList);
break;
case 2:
System.out.println("从播放器删除播放列表");
System.out.println("请输入要删除的播放列表名称:");
String palyListName2 = scanner.next();
if (palyListName2.equals("主播放列表")) {
System.out.println("主播放列表不能删除!");
break;
}
// 查询该播放列表是否存在
PlayList playList2 = playListCollection.searchPlayListByName(palyListName2);
if (playList2 == null) {
System.out.println("该播放列表不存在!");
} else {
playListCollection.deletePlayList(playList2);
}
break;
case 3:
System.out.println("通过名字查询播放列表信息");
System.out.println("请输入要查询的播放列表名称:");
String palyListName1 = scanner.next();
PlayList playList1 = playListCollection.searchPlayListByName(palyListName1);
if (playList1 == null) {
System.out.println("该播放列表不存在!");
} else {
// 显示该播放列表中名称及其歌曲
System.out.println("该播放列表存在!");
playList1.displayAllSong();
}
break;
case 4:
System.out.println("显示所有播放列表名称 ");
playListCollection.displayPlayListName();
break;
default:
System.out.println("该数字没有对应操作!");
break;
}
}
break;
default:
System.out.println("该数字没有对应操作!");
break;
}
}
}
public static void main(String[] args) {
Test test = new Test();
// test.songTest();
// test.PlayListTest();
test.test();
}
}