综合案例:播放器 学习

导学

对于Java的学习,已经进入尾声了。接下来,我们就通过一个综合案例,来体验一下在企业中如何进行项目的开发。本节课程,我们会按照项目需求分析、接口设计、环境搭建、功能模块开发等阶段入手,完成整个项目,并达到上线交付的成果。
在这里插入图片描述

需求分析

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

歌曲类

package com.dodoke.player.bean;

/**
 * 歌曲类(实体类-功能仅仅是提供对一个类的描述)
 * @author Dodoke
 *
 */
public class Song implements Comparable<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 Song() {
		super();
	}

	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 != true
		if(obj.getClass() == Song.class) {
			//类型相同才去进行比较
			Song song = (Song)obj;
			return (song.getId().equals(this.id)) && (song.getName().equals(this.name)) && (song.getSinger().equals(this.singer));
		}
		return false;
	}

	@Override
	public String toString() {
		return "歌曲信息:id为" + id + ", 歌曲名称为" + name + ", 演唱者为" + singer;
	}

	@Override
	public int compareTo(Song o) {
		String name1 = o.getName();
		int n = this.name.compareTo(name1);
		return n;
	}
	
}

播放列表类

package com.dodoke.player.dao;

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

import com.dodoke.player.bean.Song;

/**
 * 播放列表类(描述和数据操作相关的方法)
 * @author Dodoke
 *
 */
public class PlayList {
	/**
	 * 播放列表名称
	 */
	private String playListName;
	
	/**
	 * 播放列表的歌曲集合
	 */
	private List<Song> musicList;
	
	/**
	 * 在创建播放列表的时候,必须对播放列表命名
	 * @param playListName 播放列表名称
	 */
	public PlayList(String playListName) {
		super();
		this.playListName = playListName;
		musicList = new ArrayList<Song>();
	}
	
	/**
	 * 将歌曲添加到播放列表
	 * @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);
		}
	}
	
	/**
	 * 显示播放列表中所有的歌曲
	 */
	public void displayAllSong() {
		System.out.println("播放列表中所有歌曲为:");
		for(Song song1 : musicList) {
			System.out.println(song1);
		}
	}
	
	/**
	 * 通过歌曲编号查询播放列表中的歌曲
	 * @param id 歌曲编号
	 * @return 查询到的的歌曲信息
	 */
	public Song searchSongById(String id) {
		Song song = null;
		//歌曲编号id唯一
		for(Song song1 : musicList) {
			String id1 = song1.getId();
			if(id1.equals(id)) {
				//编号相同,则歌曲就是相同的
				song = song1;
				break;
			}
		}
		return song;
	}
	
	/**
	 * 根据歌曲名称查询歌曲
	 * @param name 歌曲名称
	 * @return 查询的歌曲信息
	 */
	public Song searchSongByName(String name) {
		Song song = null;
		for(Song song1 : musicList) {
			String name1 = song1.getName();
			if(name1.equals(name)) {
				//编号相同,则歌曲就是相同的
				song = song1;
				break;
			}
		}
		return song;
	}
	
	/**
	 * 修改播放列表中的歌曲信息
	 * @param id 要修改的歌曲id
	 * @param song 新的歌曲信息
	 */
	public void updateSong(String id, Song song) {
		Song song1 = searchSongById(id);
		if(song1 == null) {
			System.out.println("没有找到歌曲编号为" + id + "的歌曲信息!");
		} else {
			//先移除原有的歌曲信息,再对播放列表中的歌曲信息进行重新添加
			musicList.remove(song1);
			musicList.add(song);
			System.out.println("修改成功!");
		}
	}
	
	/**
	 * 删除播放列表中指定的歌曲信息
	 * @param id 歌曲编号
	 */
	public void deleteSong(String id) {
		Song song = searchSongById(id);
		if(song == null) {
			System.out.println("没有找到歌曲编号为" + id + "的歌曲信息!");
		} else {
			musicList.remove(song);
			System.out.println("删除成功!");
		}
	}
	
	/**
	 * 对歌曲名进行排序
	 */
	public void sortBySongName() {
		Collections.sort(musicList);
	}

	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;
	}

}

播放器类

package com.dodoke.player.dao;

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

/**
 * 设置该播放器为系统唯一播放器
 * @author Dodoke
 *
 */
public class Player {
	
	private static Player palyer = new Player();
	
	public static Player getInstance() {
		return palyer;
	}
	
	Map<String, PlayList> map = new HashMap<String, PlayList>();;//存放播放列表的集合 key-播放列表名称 value-播放列表
	
	private Player() {
		
	}
	
	/**
	 * 向播放器中新增播放列表
	 * @param pl 要添加的播放列表
	 */
	public void addPlayList(PlayList pl) {
		map.put(pl.getPlayListName(), pl);
	}
	
	/**
	 * 删除播放列表
	 * @param pl 要删除的播放列表
	 */
	public void deletePlayList(PlayList pl) {
		map.remove(pl.getPlayListName());
		System.out.println("删除成功!");
	}
	
	/**
	 * 根据播放列表名称查询播放列表
	 * @param playListName 播放列表名称
	 * @return 播放列表
	 */
	public PlayList searchPlayListByName(String playListName) {
		PlayList pl = null;
		//找到map中所有key值得集合
		Set<String> plKeySet = map.keySet();
		for(String s : plKeySet) {
			//当集合中的key与参数相同时,也就是找到了播放列表
			if(s.equals(playListName)) {
				pl = map.get(s);
			}
		}
		return pl;
	}
	
	/**
	 * 显示所有播放列表的名称
	 */
	public void displayListName() {
		Set<String> plKeySet = map.keySet();
		System.out.println("播放列表名称为:");
		for(String s : plKeySet) {
			System.out.println(s);
		}
	}
	
	public Map<String, PlayList> getMap() {
		return map;
	}

	public void setMap(Map<String, PlayList> map) {
		this.map = map;
	}
	
}

测试类

package com.dodoke.player.test;

import com.dodoke.player.bean.Song;
import com.dodoke.player.dao.PlayList;
import com.dodoke.player.dao.Player;

public class Test {
	public static void main(String[] args) {
		Test test = new Test();
		test.testPlayer();
	}
	
	/**
	 * 对歌曲类进行测试
	 */
	public void testSong() {
		Song song1 = new Song("s001","两只老虎","小太阳");
		Song song2 = new Song("s002","小燕子","风车");
		Song song3 = new Song("s003","茉莉花","彩虹");
		Song song4 = new Song("s003","茉莉花","彩虹");
		//测试toString()方法
		System.out.println(song1);
		//测试song1和song3是否相等,测试song3和song4是否相等
		System.out.println("song1==song3:" + song1.equals(song3));
		System.out.println("song3==song4:" + song3.equals(song4));
	}
	
	/**
	 * 对播放列表类进行测试
	 */
	public void  testPlayList() {
		Song song1 = new Song("s001","两只老虎","小太阳");
		Song song2 = new Song("s002","小燕子","风车");
		Song song3 = new Song("s003","茉莉花","彩虹");
		Song song4 = new Song("s003","茉莉花","彩虹");
		PlayList pl = new PlayList("主播放列表");
		pl.addToPlayList(song1);
		pl.addToPlayList(song2);
		pl.addToPlayList(song3);
		pl.addToPlayList(song4);
		//显示播放列表内容
		pl.displayAllSong();
		//通过id查询歌曲信息
		Song song = pl.searchSongById("s003");
		if(song == null) {
			System.out.println("抱歉,没查到");
		} else {
			System.out.println(song);
		}
		//通过歌曲名称查询
		song = null;
		song = pl.searchSongByName("两只老虎");
		if(song == null) {
			System.out.println("抱歉,没查到");
		} else {
			System.out.println(song);
		}
		//修改歌曲信息
		Song songnew = new Song("s004","突然的自我","伍佰");
		pl.updateSong("s001", songnew);
		pl.displayAllSong();
		//歌曲排序
		pl.sortBySongName();
		pl.displayAllSong();
		//删除歌曲信息
		pl.deleteSong("s002");
		pl.displayAllSong();
	}
	
	/**
	 * 对播放器类进行测试
	 */
	public void testPlayer() {
		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 pl = new PlayList("流行音乐");
		//从主播放列表中获取流行音乐
		pl.addToPlayList(mainPlayList.getMusicList().get(0));
		pl.addToPlayList(mainPlayList.getMusicList().get(1));
		//将两个播放列表添加到播放器中
		Player player = Player.getInstance();
		player.addPlayList(mainPlayList);
		player.addPlayList(pl);
		//展示播放列表名字
		player.displayListName();
		//根据播放列表名称查询播放列表信息,并显示所有歌曲
		PlayList plst = player.searchPlayListByName("流行音乐");
		plst.displayAllSong();
		//删除播放列表信息
		System.out.println("删除前:");
		player.displayListName();
		System.out.println("删除后:");
		player.deletePlayList(pl);
		player.displayListName();
	}
}

程序运行服务类

package com.dodoke.player.service;

import java.util.Scanner;

import com.dodoke.player.bean.Song;
import com.dodoke.player.dao.PlayList;
import com.dodoke.player.dao.Player;

/**
 * 描述程序运行逻辑
 * @author Dodoke
 *
 */
public class PlayerService {
	
	/**
	 * 主菜单
	 */
	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 player() {
		PlayerService plService = new PlayerService();
		Scanner sc = new Scanner(System.in);
		int input = 0, input1 = 0, input2 = 0;
		//创建唯一的播放列表容器(播放器)
		Player player = Player.getInstance();
		//创建一个播放器自带的主播放列表
		PlayList mPlayList = new PlayList("主播放列表");
		//将主播放列表添加到播放器
		player.addPlayList(mPlayList);
		//预先设置一个普通播放列表的变量名
		PlayList pList = null;
		while(true) {
			plService.mainMenu();
			System.out.println("请输入对应的数字进行操作:");
			input = sc.nextInt();//不再进行异常的处理
			if(input == 0) {
				System.out.println("退出程序!");
				break;
			}
			//针对用户在主菜单输入的数字进行判断处理
			switch(input) {
				case 1: {
					//播放列表管理
					while(true) {
						plService.playListMenu();
						System.out.println("请输入对应的数字进行播放列表管理操作:");
						input1 = sc.nextInt();
						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 id = sc.next();
									System.out.println("请输入歌曲名称");
									String name = sc.next();
									System.out.println("请输入歌曲演唱者");
									String singer = sc.next();
									Song song = new Song(id, name, singer);
									mPlayList.addToPlayList(song);
								}
								System.out.println("歌曲添加完毕!");
								break;
							}
							case 2: {
								System.out.println("将歌曲添加到普通播放列表!");
								System.out.println("请输入要添加的播放列表名称:");
								String playListName = sc.next();
								//判断播放列表是否在播放器中存在
								pList = player.searchPlayListByName(playListName);
								if(pList == null) {
									System.out.println("该播放列表不存在,请先将播放列表添加到播放器中!");
								} else {
									System.out.println("请输入要添加的歌曲数量:");
									int count = sc.nextInt();
									for(int i = 1; i <= count; i++) {
										System.out.println("请输入第" + i + "首歌曲");
										System.out.println("请输入歌曲id");
										//去主播放列表查询歌曲
										String id = sc.next();
										Song songs = mPlayList.searchSongById(id);
										if(songs == null) {
											//如果不存在则让用户继续填写歌曲信息,并将歌曲同时添加到主播放列表和普通播放列表(普通播放列表是主播放列表的子集)
											System.out.println("该歌曲在主播放列表不存在,继续输入歌曲的其他信息!");
											System.out.println("请输入歌曲名称");
											String name = sc.next();
											System.out.println("请输入歌曲演唱者");
											String singer = sc.next();
											Song song = new Song(id, name, singer);
											pList.addToPlayList(song);
											mPlayList.addToPlayList(song);
										} else {
											//如果存在主播放列表,则直接将歌曲信息添加到普通播放列表
											pList.addToPlayList(songs);
											System.out.println("主播放列表中已有该歌曲,已将其添加到名为:" + playListName + "的歌单中!");
										}
									}
									System.out.println("歌曲添加完毕!");
								}
								break;
							}
							case 3: {
								System.out.println("通过歌曲id查询到播放列表中的歌曲");
								System.out.println("请输入要查询的播放列表名称:");
								String playListName = sc.next();
								//判断播放列表是否在播放器中存在
								pList = player.searchPlayListByName(playListName);
								if(pList == null) {
									System.out.println("该播放列表不存在,请先将播放列表添加到播放器中!");
								} else {
									System.out.println("请输入要查询的歌曲id:");
									String id = sc.next();
									Song song = pList.searchSongById(id);
									if(song == null) {
										System.out.println("该歌曲在播放列表" + playListName + "中不存在!");
									} else {
										System.out.println("歌曲信息为:");
										System.out.println(song);
									}
								}
								break;
							}
							case 4: {
								System.out.println("通过歌曲名称查询播放列表中的歌曲");
								break;
							}
							case 5: {
								System.out.println("修改播放列表中的歌曲");
								break;
							}
							case 6: {
								System.out.println("删除播放列表中的歌曲");
								break;
							}
							case 7: {
								System.out.println("显示播放列表的所有歌曲");
								System.out.println("请输入要查询的播放列表");
								String playListName = sc.next();
								PlayList plst = player.searchPlayListByName(playListName);
								if(plst == null) {
									System.out.println("抱歉,您输入的列表名称没有匹配!");
								} else {
									plst.displayAllSong();
								}
								break;
							}
							default: {
								System.out.println("该数字没有对应的操作");
								break;
							}
						}
					}
					break;//对于死循环明确终止以后,才可以写,否则认为是无用代码
				}
				case 2: {
					//播放器管理
					while(true) {
						plService.playerMenu();
						System.out.println("请输入对应的数字进行播放器管理操作:");
						input2 = sc.nextInt();
						if(input2 == 9) {
							break;
						}
						switch(input2) {
							case 1: {
								System.out.println("向播放器添加播放列表!");
								System.out.println("请输入要添加的播放列表名称");
								String playName = sc.next();
								if(playName.equals("主播放列表")) {
									System.out.println("主播放列表无需创建!");
								} else {
									pList = new PlayList(playName);
									//将创建好的播放列表对象添加到播放器中
									player.addPlayList(pList);
									System.out.println("播放列表创建完毕!");
								}
								break;
							}
							case 2: {
								System.out.println("从播放器删除播放列表!");
								System.out.println("请输入要删除的播放列表名称:");
								String playListName = sc.next();
								if(playListName.equals("主播放列表")) {
									System.out.println("抱歉!主播放列表不能删除!");
									break;
								}
								//查询要删除的播放列表是否存在
								PlayList pList1 = player.searchPlayListByName(playListName);
								if(pList1 == null) {
									System.out.println("该播放列表不存在!");
								} else {
									player.deletePlayList(pList1);
								}
								break;
							}
							case 3: {
								System.out.println("通过名字查询播放列表信息!");
								System.out.println("请输入要查询的播放列表名称:");
								String playListName = sc.next();
								PlayList pList2 = player.searchPlayListByName(playListName);
								if(pList2 == null) {
									System.out.println("该播放列表不存在!");
								} else {
									System.out.println("已查询到该播放列表");
									System.out.println("该播放列表名称为:" + playListName);
									pList2.displayAllSong();
								}
								break;
							}
							case 4: {
								System.out.println("显示所有列表名称!");
								player.displayListName();
								break;
							}
							default: {
								System.out.println("该数字没有对应的操作");
								break;
							}
						}
					}
					break;
				}
				default: {
					System.out.println("该数字没有对应的操作");
				}
			}
		}
	}
}

控制类

package com.dodoke.player.controller;

import com.dodoke.player.service.PlayerService;

/**
 * 控制层-调用程序运行逻辑
 * @author Dodoke
 *
 */
public class PlayerController {
	
	public static void main(String[] args) {
		PlayerService play = new PlayerService();
		play.player();
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值