综合案例:播放器 练习

package player;

/**
 * 歌曲类
 * @author gegejiawei
 */
public class Song {
	// 成员变量
	private String id; // id
	private String name; // 歌曲名称
	private String singer; // 演唱者

	// 构造方法
	public Song() {
		super();
	}

	public Song(String id, String name, String singer) {
		super();
		this.id = id;
		this.name = name;
		this.singer = singer;
	}

	// getter&setter方法
	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;
		// this != obj
		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;
	}

}

package player;

import java.util.ArrayList;
import java.util.List;

/**
 * 播放列表类
 * @author gegejiawei
 */
public class PlayList {
	// 成员属性
	private String playListName;// 播放列表的名称
	private List<Song> musicList;// 播放列表的歌曲集合
	
	// 构造方法
	/**
	 * 播放列表构造方法
	 * @param playListName 播放列表的名称
	 */
	public PlayList(String playListName) {
		this.playListName = playListName;
		musicList = new ArrayList<Song>();
	}

	// getter&setter方法
	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;
	}

	// 成员方法
	/**
	 * 将歌曲添加到播放列表
	 * @param song 要添加的歌曲
	 */
	public void addToPlayList(Song song) {
		// 要排除重复添加的情况
		boolean flag = false;// 判断播放列表中的歌曲是否存在
		for(Song song1:musicList) {
			if(song1.equals(song)) {
				flag = true;
				break;
			}
		}
		if(flag) {
			System.out.println("该歌曲已存在于播放列表中,添加失败!");
		} else {
			musicList.add(song);
		}
	}
	
	/**
	 * 通过歌曲id查询
	 * @param id 歌曲id
	 * @return 查询到的歌曲信息
	 */
	public Song searchSongById(String id) {
		Song song = null;
		// id是唯一的
		for(Song song1:musicList) {
			if(song1.getId().equals(id)) {
				// 如果相等就找到了
				song = song1;
				break;
			}
		}
		return song;
	}
	
	/**
	 * 根据歌曲的名称查询
	 * @param name 歌曲名称
	 * @return 查询到的歌曲信息
	 */
	public Song searchSongByName(String name) {
		Song song = null;
		for(Song song1:musicList) {
			if(song1.getName().equals(name)) {
				// 如果相等就找到了
				song = song1;
				break;
			}
		}
		return song;
	}
	
	/**
	 * 修改播放列表中的歌曲信息
	 * @param id 要修改的歌曲id
	 * @param song 新的歌曲信息
	 */
	public void updateSong(String id, Song song) {
		// 根据id查询到相关的歌曲信息 然后再进行修改
		Song song1 = searchSongById(id);
		if(song1 == null) {
			System.out.println("没有找到id为" + id + "对应的歌曲信息!");
		} else {
			// 先移出原来的信息 然后再重新添加
			musicList.remove(song1);
			musicList.add(song);
			System.out.println("修改成功!");
		}
	}
	
	/**
	 * 删除播放列表中的指定歌曲信息
	 * @param id 歌曲id
	 */
	public void deleteSong(String id) {
		Song song = searchSongById(id);
		if(song != null) {
			musicList.remove(song);
		} else {
			System.out.println("没有找到id为" + id + "对应的歌曲信息!");
		}
	}
	
	/**
	 * 显示播放列表中的所有歌曲
	 */
	public void disPlayAllSong() {
		System.out.println("播放列表中的所有歌曲为:");
		for(Song song:musicList) {
			System.out.println(song);
		}
	}
}

package player;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * 播放列表集合类
 * @author gegejiawei
 */
public class PlayListCollection {
	// 成员属性
	Map<String, PlayList> playListMap;// 存放播放列表集合

	// 构造方法
	public PlayListCollection() {
		playListMap = new HashMap<String, PlayList>();
	}

	// getter&setter方法
	public Map<String, PlayList> getPlayListMap() {
		return playListMap;
	}

	public void setPlayListMap(Map<String, PlayList> playListMap) {
		this.playListMap = playListMap;
	}
	
	// 成员方法
	/**
	 * 向播放列表集合(播放器)添加播放列表
	 * @param playList 要添加的播放列表
	 */
	public void addPlayList(PlayList playList) {
		// 播放列表名称作为key值
		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> playListSet = playListMap.keySet();
		for(String s:playListSet) {
			if(s.equals(playListName)) {
				playList = playListMap.get(s);
				break;
			}
		}
		return playList;
	}
	
	/**
	 * 显示所有播放列表的名称
	 */
	public void displayListName() {
		Set<String> playListSet = playListMap.keySet();
		System.out.println("播放列表名称为:");
		for(String s:playListSet) {
			System.out.println(s);
		}
	}
	
}

package player;

import java.util.Scanner;

/**
 * 测试类
 * @author gegejiawei
 */
public class TestDemo {

	/**
	 * 对歌曲类Song进行测试
	 */
	public void testSong() {
		Song song1 = new Song("s001", "两只老虎", "小太阳");
		Song song2 = new Song("s002", "小燕子", "风车");
		Song song3 = new Song("s003", "茉莉花", "彩虹");
		Song song4 = new Song("s003", "茉莉花", "彩虹");
		System.out.println(song1);
		// 测试song1和song3是否相等
		System.out.println(song2.equals(song3));
		System.out.println(song3.equals(song4));
		System.out.println(song3 == song4);
	}

	/**
	 * 对播放列表类PlayList进行测试
	 */
	public void testPlayList() {
		// 定义几个Song类的对象 添加到播放列表中
		Song song1 = new Song("s001", "两只老虎", "小太阳");
		Song song2 = new Song("s002", "小燕子", "风车");
		Song song3 = new Song("s003", "茉莉花", "彩虹");
		Song song4 = new Song("s003", "茉莉花", "彩虹");
		// 创建一个PlayList对象
		PlayList mainPlayList = new PlayList("主播放列表");
		mainPlayList.addToPlayList(song1);
		mainPlayList.addToPlayList(song2);
		mainPlayList.addToPlayList(song3);
		mainPlayList.addToPlayList(song4);
		// 显示播放列表的内容
		mainPlayList.disPlayAllSong();
		// 通过id查询歌曲信息
		Song song = mainPlayList.searchSongById("s005");
		if (song != null) {
			System.out.println("根据id查询的歌曲信息为:");
			System.out.println(song);
		} else {
			System.out.println("该歌曲不存在!");
		}
		// 通过名称查询歌曲信息
		song = null;
		song = mainPlayList.searchSongByName("小燕子");
		if (song != null) {
			System.out.println("根据名称查询的歌曲信息为:");
			System.out.println(song);
		} else {
			System.out.println("该歌曲不存在!");
		}
		// 修改播放列表中的歌曲信息
		Song songUpdate = new Song("s005", "蜗牛与黄鹂鸟", "小太阳");
		mainPlayList.updateSong("s003", songUpdate);
		mainPlayList.disPlayAllSong();
		// 删除播放列表中的指定歌曲信息
		mainPlayList.deleteSong("s005");
		mainPlayList.disPlayAllSong();
	}

	/**
	 * 测试播放列表集合类
	 */
	public void testPlayListCollection() {
		Song song1 = new Song("s001", "两只老虎", "小太阳");
		Song song2 = new Song("s002", "小燕子", "风车");
		Song song3 = new Song("s003", "茉莉花", "彩虹");
		// 创建主播放列表
		PlayList mainPlayList = new PlayList("主播放列表");
		// 将歌曲添加到主播放列表中
		mainPlayList.addToPlayList(song1);
		mainPlayList.addToPlayList(song2);
		mainPlayList.addToPlayList(song3);
		// 定义一个新的播放列表 从主播放列表中添加歌曲进来
		PlayList favouritePlayList = new PlayList("最喜欢的歌曲");
		favouritePlayList.addToPlayList(mainPlayList.getMusicList().get(0));
		favouritePlayList.addToPlayList(mainPlayList.getMusicList().get(1));
		favouritePlayList.disPlayAllSong();
		// 将两个播放列表添加到播放列表集合中
		PlayListCollection plc = new PlayListCollection();
		plc.addPlayList(mainPlayList);
		plc.addPlayList(favouritePlayList);
		plc.displayListName();
		// 根据播放列表名称查询播放列表信息 并显示所有歌曲
		PlayList playList = plc.searchPlayListByName("最喜欢的歌曲");
		playList.disPlayAllSong();
		// 删除播放列表信息
		System.out.println("删除前:");
		plc.displayListName();
		plc.deletePlayList(favouritePlayList);
		System.out.println("删除后:");
		plc.displayListName();
	}

	/**
	 * 主菜单
	 */
	public 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("                     9--返回上一级菜单                         ");
		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("                     9--返回上一级菜单                         ");
		System.out.println("*****************************************************");
	}

	/**
	 * 主流程
	 */
	public void test() {
		TestDemo td = new TestDemo();
		@SuppressWarnings("resource")
		Scanner sc = new Scanner(System.in);
		int input = 0, input1 = 0, input2 = 0;
		// 创建一个播放列表容器(播放器)
		PlayListCollection plc = new PlayListCollection();
		// 创建主播放列表
		PlayList mainPlayList = new PlayList("主播放列表");
		// 将主播放列表添加到播放器
		plc.addPlayList(mainPlayList);
		// 定义favourite播放列表
		PlayList favouritePlayList = null;
		while (true) {
			td.mainMenu();
			System.out.println("请输入对应数字进行操作:");
			input = sc.nextInt();
			// 输入0则退出程序
			if (input == 0) {
				break;
			}
			// 对其他数字进行判断
			switch (input) {
				// 播放列表管理
				case 1: {
					while (true) {
						td.playListMenu();
						System.out.println("请输入对应的数字对播放列表进行管理:");
						input1 = sc.nextInt();
						// 输入9则返回上一级菜单
						if (input1 == 9) {
							break;
						}
						// 对其他数字进行判断
						switch (input1) {
							// 将歌曲添加到主播放列表
							case 1: {
								System.out.println("将歌曲添加到主播放列表");
								System.out.println("请输入要添加的歌曲的数量:");
								int count = sc.nextInt();
								for (int i = 1; i <= count; i++) {
									System.out.println("请输入第" + i + "首歌曲:");
									System.out.println("请输入歌曲的id:");
									String strId = sc.next();
									System.out.println("请输入歌曲的名称:");
									String strName = sc.next();
									System.out.println("请输入演唱者");
									String strSinger = sc.next();
									// 创建歌曲类的对象
									Song song = new Song(strId, strName, strSinger);
									mainPlayList.addToPlayList(song);
								}
								System.out.println("歌曲添加完毕!");
								break;
							}
							// 将歌曲添加到普通播列表
							case 2: {
								System.out.println("将歌曲添加到普通播列表");
								System.out.println("请输入要添加的播放列表名称:");
								String sName = sc.next();
								// 根据名称判断播放列表是否存在播放器中
								favouritePlayList = plc.searchPlayListByName(sName);
								if(favouritePlayList == null) {
									System.out.println("该播放列表不存在,请先将播放列表添加到播放器中!");
									break;
								} else {
									System.out.println("请输入要添加的歌曲的数量:");
									int count1 = sc.nextInt();
									for(int i = 1; i <=count1; i++) {
										System.out.println("请输入第" + i + "首歌曲");
										System.out.println("请输入歌曲id:");
										String strId = sc.next();
										// 首先判断该id的歌曲是否在主播放列表存在
										Song song = mainPlayList.searchSongById(strId);
										if (song == null) {
											// 如果歌曲不存在 则创建新的添加 并且添加到主播放列表
											System.out.println("该歌曲在主播放列表不存在,继续输入歌曲的其他信息!");
											System.out.println("请输入歌曲名称:");
											String strName = sc.next();
											System.out.println("请输入演唱者:");
											String strSinger = sc.next();
											// 创建一个Song类的对象
											song = new Song(strId, strName, strSinger);
											// 分别将歌曲添加到普通播放列表和主播放列表
											favouritePlayList.addToPlayList(song);
											mainPlayList.addToPlayList(song);
										} else {
											// 如果歌曲存在于主播放列表 则直接添加到现在的播放列表
											favouritePlayList.addToPlayList(song);
										}
									}
									System.out.println("歌曲添加完毕!");
								}
								break;
							}
							// 通过歌曲id查询到播放列表中的歌曲
							case 3: {
								System.out.println("通过歌曲id查询到播放列表中的歌曲");
								System.out.println("请输入要查询的播放列表名称:");
								String strPlayListName1 = sc.next();
								// 查询播放列表是否存在
								PlayList pl = plc.searchPlayListByName(strPlayListName1);
								if(pl == null) {
									System.out.println("该播放列表不存在!");
									break;
								} else {
									System.out.println("请输入要查询的歌曲id:");
									String strId1 = sc.next();
									Song s = pl.searchSongById(strId1);
									if(s == null) {
										System.out.println("该歌曲在播放列表" + strPlayListName1 + "中不存在!");
									} else {
										System.out.println("该歌曲信息为:");
										System.out.println(s);
									}
								}
								break;
							}
							// 通过歌曲名称查询播放列表中的歌曲
							case 4: {
								System.out.println("通过歌曲名称查询播放列表中的歌曲");
								System.out.println("请输入要查询的播放列表名称:");
								String strPlayListName1 = sc.next();
								// 查询播放列表是否存在
								PlayList pl = plc.searchPlayListByName(strPlayListName1);
								if(pl == null) {
									System.out.println("该播放列表不存在!");
									break;
								} else {
									System.out.println("请输入要查询的歌曲名称:");
									String strName1 = sc.next();
									Song s = pl.searchSongByName(strName1);
									if(s == null) {
										System.out.println("该歌曲在播放列表" + strPlayListName1 + "中不存在!");
									} else {
										System.out.println("该歌曲信息为:");
										System.out.println(s);
									}
								}
								break;
							}
							// 修改播放列表中的歌曲
							case 5: {
								System.out.println("修改播放列表中的歌曲");
								System.out.println("请输入播放列表名称");
								String strPlayListName1 = sc.next();
								// 查询播放列表是否存在
								PlayList pl = plc.searchPlayListByName(strPlayListName1);
								if(pl == null) {
									System.out.println("该播放列表不存在!");
									break;
								} else {
									System.out.println("请输入要修改的歌曲id");
									// 判断目标歌曲是否存在 存在才能修改
									String songId = sc.next();
									Song s = pl.searchSongById(songId);
									if(s == null) {
										System.out.println("该歌曲在播放列表" + strPlayListName1 + "中不存在!");
									} else {
										// 输入需要修改的歌曲信息 已获得新歌曲id
										System.out.println("请输入要修改的歌曲名称");
										String songName = sc.next();
										System.out.println("请输入该歌曲的演唱者");
										String songSinger = sc.next();
										Song newSong = new Song(songId, songName, songSinger);
										// 调用修改歌曲方法
										pl.updateSong(songId, newSong);
										System.out.println("修改成功!");
									}
								}
								break;
							}
							// 删除播放列表中的歌曲
							case 6: {
								System.out.println("删除播放列表中的歌曲");
								System.out.println("请输入播放列表名称");
								String strPlayListName1 = sc.next();
								// 查询播放列表是否存在
								PlayList pl = plc.searchPlayListByName(strPlayListName1);
								if(pl == null) {
									System.out.println("该播放列表不存在!");
									break;
								} else {
									System.out.println("请输入需要删除的歌曲id");
									String songId = sc.next();
									pl.deleteSong(songId);
									System.out.println("删除成功!");
								}
								break;
							}
							// 显示播放列表的所有歌曲
							case 7: {
								System.out.println("显示播放列表的所有歌曲");
								System.out.println("请输入播放列表名称");
								String strPlayListName1 = sc.next();
								// 查询播放列表是否存在
								PlayList pl = plc.searchPlayListByName(strPlayListName1);
								if(pl == null) {
									System.out.println("该播放列表不存在!");
									break;
								} else {
									System.out.println("该播放列表:" + pl.getPlayListName() + "的全部歌曲为");
									pl.disPlayAllSong();
								}
								break;
							}
							// 其他数字处理
							default: {
								System.out.println("该数字没有对应的操作");
								break;
							}
						}
					}
					break;//对于死循环明确终止以后,才可以写,否则认为是无用代码
				}
				// 播放器管理
				case 2: {
					while(true) {
						td.playerMenu();
						System.out.println("请输入对应的数字对播放器进行管理:");
						input2 = sc.nextInt();
						// 输入9则返回上一级菜单
						if(input2 == 9) {
							break;
						}
						// 对其他数字进行判断
						switch(input2) {
							// 向播放器添加播放列表
							case 1: {
								System.out.println("向播放器添加播放列表");
								System.out.println("输入要添加的播放列表名称:");
								String playerName = sc.next();
								if(playerName.equals("主播放列表")) {
									System.out.println("主播放列表无需创建!");
								} else {
									// 创建一个新的播放列表对象
									favouritePlayList = new PlayList(playerName);
									// 将播放列表添加到播放器Map
									plc.addPlayList(favouritePlayList);
									System.out.println("播放列表创建完毕!");
								}
								break;
							}
							// 从播放器删除播放列表
							case 2: {
								System.out.println("从播放器删除播放列表");
								System.out.println("请输入要删除的播放列表名称:");
								String strPlayListName = sc.next();
								if(strPlayListName.equals("主播放列表")) {
									System.out.println("主播放列表不能删除!");
									break;
								}
								// 查询播放列表是否存在
								PlayList playList1 = plc.searchPlayListByName(strPlayListName);
								if(playList1 == null) {
									System.out.println("该播放列表不存在!");
								} else {
									// 存在则删除
									plc.deletePlayList(playList1);
								}
								break;
							}
							// 通过名字查询播放列表信息
							case 3: {
								System.out.println("通过名字查询播放列表信息");
								System.out.println("请输入要查询的播放列表名称:");
								String strPlayList1 = sc.next();
								PlayList playList2 = plc.searchPlayListByName(strPlayList1);
								if(playList2 == null) {
									System.out.println("该播放列表不存在!");
								} else {
									// 显示该播放列表名称及其中的所有歌曲
									System.out.println("该播放列表存在!");
									System.out.println("该播放列表的名称为:" + strPlayList1);
									playList2.disPlayAllSong();
								}
								break;
							}
							// 显示所有播放列表名称
							case 4: {
								System.out.println("显示所有播放列表名称");
								plc.displayListName();
								break;
							}
							// 其他数字处理
							default: {
								System.out.println("该数字没有对应的操作!");
								break;
							}
						}
					}
					break;
				}
				// 其他数字处理
				default: {
					System.out.println("该数字没有对应的操作!");
					break;
				}
			}
		}
	}

	public static void main(String[] args) {
		// 创建类的对象
		TestDemo td = new TestDemo();
		// 对歌曲类Song进行测试
		// td.testSong();
		// 对播放列表类PlayList进行测试
		// td.testPlayList();
		// 对播放列表集合类进行测试
		// td.testPlayListCollection();
		// 对主流程进行测试
		td.test();
	}

}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值