【从零开始的Java开发】1-6-5 集合综合案例:播放器管理

播放器管理:概述和需求分析

需求分析:

  • 播放列表管理
  • 播放器管理

播放列表管理主要功能:

  • 增:将歌曲添加到主播放列表
  • 增:将歌曲添加到普通播放列表
  • 查:通过歌曲id查询播放列表中的歌曲
  • 查:通过歌曲名称查询播放列表中的歌曲
  • 改:修改播放列表中的歌曲
  • 删:删除播放列表中的歌曲
  • 显示:显示所有歌曲

播放器管理主要功能:

  • 增:向播放器添加播放列表
  • 删:从播放器删除播放列表
  • 查:通过名字查询播放列表
  • 显示:显示所有播放列表的名称

详细设计

  • 歌曲类Song
  • 播放列表类PlayList
  • 播放器类PlayListCollection
  • 测试类TestDemo

歌曲类Song
属性:

  • 歌曲id
  • 歌曲名name
  • 演唱者singer

方法:

  • 构造方法
  • getter和setter
  • hashCode()和equals()
  • toString()

播放列表类 PlayList
属性:

  • 播放列表名称PlayListName
  • 播放列表中的歌曲集合musicList

方法:

  • 构造方法
  • getter和setter
  • 将歌曲添加到播放列表:public void addToPlayList(Song song)
  • 显示播放列表中所有歌曲:public void displayAllSong()
  • 通过id查询歌曲:public Song searchSongById(String id)
  • 通过name查询歌曲:public Song searchSongByName(String name)
  • 修改歌曲:public void updateSong(String id,Song song)
  • 删除歌曲:public void deleteSong(String id)
  • 通过歌曲名进行排序:public void sortBySongName()

ps:会有一个主播放列表,里面会有所有的歌。

播放器类PlayListCollection
属性:

  • 存放播放列表的集合:playListMap

方法:

  • 构造方法
  • getter和setter
  • 添加播放列表:public void addPlayList(PlayList playList)
  • 删除播放列表:public void deletePlayList(PlayList playList)
  • 通过名字查询:public PlayList searchPlayListByName(String playListName)
  • 显示所有播放列表名称:public void displayPlayListName()

歌曲类Song

注意,写完一个类就要测试一下。

public class Song {
	private String id;
	private String name;
	private String singer;

	public Song(String id, String name, String singer) {
		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() {
		return Objects.hash(id, name, singer);
	}

	@Override
	public boolean equals(Object obj) {
		// 判断对象是否相等
		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

public class PlayList {
	private String playListName;// 播放列表名称
	private List<Song> musicList;// 播放列表歌曲集合

	// 构造方法 参数是播放列表的名称
	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 void addToPlayList(Song song) {
		// 要排除重复添加的情况
		boolean flag = false;
		for (Song s : musicList) {
			if (s.equals(song)) {
				flag = true;
				break;
			}
		}
		if (!flag)
			musicList.add(song);
		else {
			System.out.println("歌曲《" + song.getName() + "》已经在播放列表中!");
		}

	}

	// 显示播放列表中的所有歌曲
	public void displayAllSong() {
		System.out.println("播放列表中的所有歌曲为:");
		for (Song song : musicList) {
			System.out.println(song.toString());
		}
		System.out.println();
	}

	// 根据歌曲id查询歌曲
	public Song searchSongById(String id) {
		Song ans = null;
		for (Song song : musicList) {
			if (id.equals(song.getId())) {
				ans = song;
				break;
			}
		}
		return ans;
	}

	// 根据歌曲名称查询歌曲
	public Song searchSongByName(String name) {
		Song ans = null;
		for (Song song : musicList) {
			if (name.equals(song.getName())) {
				ans = song;
				break;
			}
		}
		return ans;
	}

	// 修改播放列表中歌曲信息
	public void updateSong(String id, Song song) {
		Song s = searchSongById(id);
		if (s == null) {
			System.out.println("id为" + id + "的歌曲未找到!");
		} else {
			musicList.remove(s);
			musicList.add(song);
			System.out.println("修改成功!");
		}
	}

	// 删除播放列表中歌曲信息
	public void deleteSong(String id) {
		Song s = searchSongById(id);
		if (s == null) {
			System.out.println("id为" + id + "的歌曲未找到!");
		} else {
			musicList.remove(s);
			System.out.println("删除成功!");
		}
	}
}

播放器类PlayListCollection

//播放列表集合
public class PlayListCollection {
	Map<String, PlayList> playListMap;// 存放播放列表集合

	public PlayListCollection() {
		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) {
		playListMap.put(playList.getPlayListName(), playList);
	}

	// 删除播放列表
	public void deletePlayList(PlayList playList) {
		playListMap.remove(playList.getPlayListName());
		System.out.println("删除成功!");
	}

	// 查询播放列表
	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() {
		System.out.println("所有播放列表名称为:");
		Set<String> playListSet = playListMap.keySet();
		for (String s : playListSet) {
			System.out.println(s);
		}
		System.out.println();
	}
}

主业务代码

三个菜单

星号:

//星号
public void star() {
	System.out.println("*****************************");		
}

主菜单:

//主菜单
public void mainMenu() {
	star();
	System.out.println("     主菜单");
	System.out.println("     1-播放列表管理");
	System.out.println("     2-播放器管理");
	System.out.println("     0-退出");
	star();
}

播放列表管理菜单:

//播放列表管理菜单
public void playListMenu() {
	star();
	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("     0-返回上一级菜单");
	star();		
}

播放器菜单:

//播放器菜单
public void playerMenu() {
	star();
	System.out.println("     播放器管理");
	System.out.println("     1-向播放器添加播放列表");
	System.out.println("     2-从播放器删除播放列表");
	System.out.println("     3-通过名字查询播放列表");
	System.out.println("     4-显示所有播放列表的名称");
	System.out.println("     0-返回上一级菜单");
	star();		
}

总体代码

public class TestDemo {

	public static void main(String[] args) {
		TestDemo td = new TestDemo();
		td.test();

	}

	// 主流程
	public void test() {

		// 创建一个主播放列表
		PlayList mainPlayList = new PlayList("mainPlayList");

		// 创建喜欢的音乐 播放列表
		PlayList love = null;

		// 创建播放列表容器(播放器)
		PlayListCollection plc = new PlayListCollection();
		plc.addPlayList(mainPlayList);

		// 输入
		Scanner sc = new Scanner(System.in);
		int ip1 = 0, ip2 = 0, ip3 = 0;
		while (true) {
			mainMenu();
			System.out.println("请输入对应数字进行操作:");
			ip1 = sc.nextInt();// 这里就不处理异常了
			if (ip1 == 0) {
				System.out.println("退出!");
				break;
			}

			switch (ip1) {
			case 1: {
				while (true) {
					playListMenu();
					System.out.println("请输入对应数字进行操作:");
					ip2 = sc.nextInt();
					if (ip2 == 0) {
						System.out.println("退出!");
						break;
					}

					switch (ip2) {
					case 1: {
						System.out.println("     1-将歌曲添加到主播放列表");
						System.out.println("请输入要添加的歌曲的个数:");
						int temp = sc.nextInt();
						for (int i = 0; i < temp; i++) {
							System.out.println("请输入第" + (i + 1) + "首歌曲的信息:id、歌曲名、演唱者");
							String id, name, singer;
							id = sc.next();
							name = sc.next();
							singer = sc.next();
							mainPlayList.addToPlayList(new Song(id, name, singer));

						}

						System.out.println("添加成功!");
						mainPlayList.displayAllSong();
						break;
					}
					case 2: {
						System.out.println("     2-将歌曲添加到普通播放列表");
						System.out.println("请输入要添加的播放列表名称:");
						String name = sc.next();

						// 判断此播放列表是否存在
						PlayList pl = plc.searchPlayListByName(name);
						if (pl != null) {
							System.out.println("请输入要添加的歌曲的个数:");
							int temp = sc.nextInt();
							for (int i = 0; i < temp; i++) {
								System.out.println("请输入第" + (i + 1) + "首歌曲的信息:id、歌曲名、演唱者");
								String id, namee, singer;
								id = sc.next();
								namee = sc.next();
								singer = sc.next();

								// 判断这首歌是否已经在播放列表中
								Song song = mainPlayList.searchSongById(id);
								if (song == null) {
									song = new Song(id, namee, singer);
									mainPlayList.addToPlayList(song);
									pl.addToPlayList(song);
								} else {
									pl.addToPlayList(song);
								}

							}

							System.out.println("添加成功!");
							// 显示两个播放列表的信息
							System.out.println("主播放列表:");
							mainPlayList.displayAllSong();
							System.out.println("当前播放列表:");
							pl.displayAllSong();

						} else {
							System.out.println("此播放列表不存在!请将其添加到播放器中!");
						}
						break;
					}
					case 3: {
						System.out.println("     3-通过歌曲id查询播放列表中的歌曲");
						System.out.println("请输入要查询的播放列表名称:");
						String name = sc.next();

						PlayList pl = plc.searchPlayListByName(name);
						if (pl == null) {
							System.out.println("此播放列表不存在!请输入正确的播放列表!");
						} else {
							System.out.println("请输入要查询的歌曲id:");
							String id = sc.next();
							Song song = pl.searchSongById(id);
							if (song == null) {
								System.out.println("此歌曲不存在!");
							} else {
								System.out.println("歌曲信息为:" + song);
							}
						}

						break;
					}
					case 4: {
						System.out.println("     4-通过歌曲名称查询播放列表中的歌曲");

						System.out.println("请输入要查询的播放列表名称:");
						String name = sc.next();

						PlayList pl = plc.searchPlayListByName(name);
						if (pl == null) {
							System.out.println("此播放列表不存在!请输入正确的播放列表!");
						} else {
							System.out.println("请输入要查询的歌曲名称:");
							String namee = sc.next();
							Song song = pl.searchSongById(namee);
							if (song == null) {
								System.out.println("此歌曲不存在!");
							} else {
								System.out.println("歌曲信息为:" + song);
							}
						}
						break;
					}
					case 5: {
						System.out.println("     5-修改播放列表中的歌曲");

						System.out.println("请输入要修改的播放列表名称:");
						String name = sc.next();

						PlayList pl = plc.searchPlayListByName(name);
						if (pl == null) {
							System.out.println("此播放列表不存在!请输入正确的播放列表!");
						} else {
							System.out.println("请输入要修改的歌曲id:");
							String id = sc.next();
							Song song = pl.searchSongById(id);
							if (song == null) {
								System.out.println("此歌曲不存在!");
							} else {
								System.out.println("请输入修改后的歌曲id,名称,演唱者:");
								String s1 = sc.next(), s2 = sc.next(), s3 = sc.next();
								pl.updateSong(id, new Song(s1, s2, s3));
							}
						}
						break;
					}
					case 6: {
						System.out.println("     6-删除播放列表中的歌曲");

						System.out.println("请输入要修改的播放列表名称:");
						String name = sc.next();

						PlayList pl = plc.searchPlayListByName(name);
						if (pl == null) {
							System.out.println("此播放列表不存在!请输入正确的播放列表!");
						} else {
							System.out.println("请输入要删除的歌曲id:");
							String id = sc.next();
							Song song = pl.searchSongById(id);
							if (song == null) {
								System.out.println("此歌曲不存在!");
							} else {
								pl.deleteSong(id);
							}
						}
						break;
					}
					case 7: {
						System.out.println("     7-显示所有歌曲");
						System.out.println("请输入要显示的播放列表的名称:");
						String name = sc.next();

						PlayList pl = plc.searchPlayListByName(name);
						if (pl == null) {
							System.out.println("此播放列表不存在!请输入正确的播放列表!");
						} else {
							pl.displayAllSong();
						}
						break;
					}
					default: {
						System.out.println("没有此操作!");
						break;
					}
					}
				}
				break;
			}
			case 2: {
				while (true) {
					playerMenu();
					System.out.println("请输入对应数字进行操作:");
					ip3 = sc.nextInt();
					if (ip3 == 0) {
						System.out.println("退出!");
						break;
					}

					switch (ip3) {
					case 1: {
						System.out.println("     1-向播放器添加播放列表");
						System.out.println("请输入新播放列表的名称:");
						String name;
						name = sc.next();
						love = new PlayList(name);
						plc.addPlayList(love);
						break;
					}
					case 2: {
						System.out.println("     2-从播放器删除播放列表");
						System.out.println("请输入要删除的播放列表的名称:");
						String name = sc.next();
						PlayList pl = plc.searchPlayListByName(name);
						if (pl == null) {
							System.out.println("该列表不存在!");
						} else {
							if (pl.equals(mainPlayList)) {
								System.out.println("主播放列表不可删除!");
							} else {
								plc.deletePlayList(pl);
								System.out.println("删除成功!");
							}
						}

						break;
					}
					case 3: {
						System.out.println("     3-通过名字查询播放列表");
						System.out.println("请输入要查询的播放列表名称:");
						String name=sc.next();
						PlayList pl=plc.searchPlayListByName(name);
						if(pl==null) {
							System.out.println("此播放列表不存在!");
						}else {
							pl.displayAllSong();
						}
						break;
					}
					case 4: {
						System.out.println("     4-显示所有播放列表的名称");
						plc.displayListName();
						break;
					}
					default: {
						System.out.println("没有此操作!");
						break;
					}
					}
				}
				break;
			}

			default: {
				System.out.println("没有此操作!");
				break;
			}
			}
		}
	}

	// 星号
	public void star() {
		System.out.println("*****************************");
	}

	// 主菜单
	public void mainMenu() {
		star();
		System.out.println("     主菜单");
		System.out.println("     1-播放列表管理");
		System.out.println("     2-播放器管理");
		System.out.println("     0-退出");
		star();
	}

	// 播放列表管理菜单
	public void playListMenu() {
		star();
		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("     0-返回上一级菜单");
		star();
	}

	// 播放器菜单
	public void playerMenu() {
		star();
		System.out.println("     播放器管理");
		System.out.println("     1-向播放器添加播放列表");
		System.out.println("     2-从播放器删除播放列表");
		System.out.println("     3-通过名字查询播放列表");
		System.out.println("     4-显示所有播放列表的名称");
		System.out.println("     0-返回上一级菜单");
		star();
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

karshey

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值