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

Posted karshey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从零开始的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 从零开始的Java开发1-3-3 综合案例:学生信息管理

从零开始的Java开发1-6-1 集合排序:对整型和字符串Comparator接口Comparable接口

从零开始的Java开发1-5-4 ArrayListHashSetHashMap 概述与案例

从零开始的Java开发2-9-3 油画商城静态网页案例

从零开始的Java开发2-9-2 案例:仿Windows计算器

如何从零开始学python