一、附加功能

1、    根据歌曲名称查询播放列表中的歌曲
                要求:先查询到相应的播放列表,然后再根据歌曲名称查询播放列表中歌曲,
                 如果查询到相应歌曲则显示,如果没有查询到,则提示⽤户“该歌曲不 存在!”
2、    修改播放列表中的歌曲
      要求:根据歌曲ID对歌曲的名称和演唱者进⾏修改。
3、    删除播放列表中的歌曲
                要求:根据歌曲ID删除所有播放列表中的当前歌曲。
4、    显示播放列表中的所有歌曲
               要求:根据播放列表的名称,查询并显示当前播放列表中的所有歌曲。

二、实现代码

1.Song.java

import java.io.Serializable;/*** 歌曲类* * @author 流年**/
public class Song implements Serializable {private String id;// idprivate 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;}@Overridepublic 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;}@Overridepublic boolean equals(Object obj) {// 判断对象是否相等,相等则直接返回trueif (this == obj)return true;// this不等于objif (obj.getClass() == Song.class) {Song song = (Song) obj;return (song.getId().equals(id) && (song.getName().equals(name) && (song.getSinger().equals(singer))));}return false;}@Overridepublic String toString() {return "歌曲信息:id为" + id + ",歌曲名称为:" + name + ",演唱者为:" + singer;}}

2、PlayList.java

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 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) {// 没有的话返回值为空nullSong 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) {// 没有的话返回值为空nullSong song = null;// id是唯一的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类对象用来接收歌曲信息Song song1=searchSongById(id);if(song1==null) {System.out.println("没有找到id为"+id+"对应的歌曲信息");}else {//先移除原来的信息,然后再重新添加musicList.remove(song1);musicList.add(song);System.out.println("修改成功!");}}
//  public void updateSong1(String name,Song song) {
//      //根据name查询到相关的歌曲信息,然后再进行修改
//
//  }/*** 删除播放列表中的指定歌曲信息* @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);}}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;}}

3、PlayListCollection.java

import java.util.HashMap;
import java.util.Map;
import java.util.Set;/*** 播放列表集合* @author 流年**/
public class PlayListCollection  {Map <String,PlayList> playListMap;//存放播放列表集合public PlayListCollection() {playListMap=new HashMap<String,PlayList>();}/*** 向播放列表集合(播放器)添加播放列表* @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);}}public Map<String, PlayList> getPlayListMap() {return playListMap;}public void setPlayListMap(Map<String, PlayList> playListMap) {this.playListMap = playListMap;}
}

4.TestDemo.java

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Scanner;public class TestDemo implements Serializable {// 对歌曲类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("song4==song3?" + (song4.equals(song3)));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("根据name查询的歌曲信息为:");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("       8--导出歌单信息");System.out.println("       9--返回上一级菜单");System.out.println("*****************************************");}// 播放器菜单public void playerMenu() {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();Scanner sc = new Scanner(System.in);int input = 0, input1 = 0, input2 = 0;// 创建一个播放列表容器(播放器)PlayListCollection plc = new PlayListCollection();// 创建主播放列表PlayList mainPlayList = new PlayList("主播放列表");// 将主播放列表添加到播放器plc.addPlayList(mainPlayList);PlayList favouritePlayList = null;while (true) {td.mainMenu();System.out.println("请输入对应数字进行操作:");input = sc.nextInt();if (input == 0) {break;}switch (input) {case 1:// 播放列表管理while (true) {td.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 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);// mainPlayList.displayAllSong();}break;case 2:System.out.println("将歌曲添加到普通播放列表");System.out.println("请输入要添加的播放列表名称:");String sName = sc.next();favouritePlayList = plc.searchPlayListByname(sName);if (favouritePlayList == null) {System.out.println("该播放列表不存在,请先将播放列表");} 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("主播放列表:");mainPlayList.displayAllSong();System.out.println("普通播放列表");favouritePlayList.displayAllSong();}break;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 strPlayListName2=sc.next();//查询播放列表是否存在PlayList pl1=plc.searchPlayListByname(strPlayListName2);if(pl1==null) {System.out.println("该播放列表不存在");break;}else {System.out.println("请输入要歌曲的名称:");String strName=sc.next();Song song=pl1.searchSongByName(strName);if(song==null) {System.out.println("该歌曲在播放列表: "+strPlayListName2+"中不存在");break;}else {System.out.println("该歌曲在播放列表: "+strPlayListName2+"存在");System.out.println("歌曲的信息为:");System.out.println(song);}}break;case 5:System.out.println("修改播放列表中的歌曲");System.out.println("请输入要修改的歌曲所在的播放列表");String strName=sc.next();PlayList pl2=plc.searchPlayListByname(strName);if(pl2==null) {System.out.println("该播放列表不存在");break;}else {System.out.println("请输入要修改的歌曲id");String strSongId=sc.next();//判断该歌曲在播放列表中是否存在,存在才能修改Song song=pl2.searchSongById(strSongId);if(song==null) {System.out.println("要修改的歌曲id不存在:");break;}else {System.out.println("请输入修改之后的歌曲名称:");String strSongName=sc.next();System.out.println("请输入修改之后的歌曲演奏者:");String strSingerName=sc.next();Song song1=new Song(strSongId,strSongName,strSingerName);pl2.updateSong(strSongId, song1);System.out.println("修改之后的歌曲信息为:");System.out.println(song1);}}break;case 6:System.out.println("删除播放列表中的歌曲");System.out.println("请输入要删除的歌曲所在的播放列表");String StrPlayList=sc.next();//查询所在的播放列表是否存在PlayList pl3=plc.searchPlayListByname(StrPlayList);if(pl3==null) {System.out.println("该播放列表不存在");break;}else {System.out.println("该播放列表存在");System.out.println("请输入要删除的歌曲ID");String strSongId=sc.next();//查询该歌曲是否存在Song song=pl3.searchSongById(strSongId);if(song==null) {System.out.println("要删除的歌曲不存在");break;}else {pl3.deleteSong(strSongId);System.out.println("该歌曲已经删除");}}break;case 7:System.out.println("显示播放列表中的所有歌曲");System.out.println("请输入要显示的播放列表名称");String strPlayList=sc.next();//存在则显示PlayList pl4=plc.searchPlayListByname(strPlayList);if(pl4==null) {System.out.println("要显示的播放列表不存在");break;}else {System.out.println("该播放列表:"+pl4.getPlayListName()+"的全部歌曲为");pl4.displayAllSong();}break;case 8:System.out.println("导出歌单信息");//歌单信息在这里指歌曲的ID、名称、演奏者System.out.println("请输入歌单所在的播放列表");String strName1=sc.next();//根据歌单名称查询该歌单是否存在PlayList pl5=plc.searchPlayListByname(strName1);if(pl5==null) {System.out.println("该播放列表不存在:");break;}else {System.out.println("请输入歌单名称");String strSongName=sc.next();//查询通过歌单名称查询的歌单信息在该播放列表中是否存在Song song=pl5.searchSongByName(strSongName);if(song==null) {System.out.println("该歌单在该播放列表:"+pl5.getPlayListName()+"不存在");break;}else {//把歌单信息导出到 ”名称.txt“文件的根目录下try {FileOutputStream fos=new FileOutputStream("strName1.txt");ObjectOutputStream oos=new ObjectOutputStream(fos);FileInputStream fis=new FileInputStream("strName1.txt");ObjectInputStream ois=new ObjectInputStream(fis);oos.writeObject(song);
//                                  oos.writeBytes(song.getId());
//                                  oos.writeBytes(song.getName());
//                                  oos.writeBytes(song.getSinger());oos.flush();int n=0;Song song1=(Song)ois.readObject();System.out.println(song1);oos.close();fos.close();fis.close();ois.close();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}catch(IOException e) {e.printStackTrace();}catch(ClassNotFoundException e) {e.printStackTrace();}}}//FileOutputStream fos=new FileOutputStream()break;default:System.out.println("该歌曲没有对应的操作!");break;}}break;case 2:// 播放器管理while (true) {td.playerMenu();System.out.println("请输入对应的数字对播放器进行管理:");input2 = sc.nextInt();if (input2 == 9)break;switch (input2) {case 1:System.out.println("向播放器添加播放列表");System.out.println("输入要添加的播放列表名称:");String playerName = sc.next();// 创建一个新的播放列表对象favouritePlayList = new PlayList(playerName);// 将播放列表天剑到播放器Map中plc.addPlayList(favouritePlayList);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("显示所有播放列表名称");System.out.println("所有播放列表的名称为:");plc.displayListName();break;default:System.out.println("该歌曲没有对应的操作");break;}}break;default:System.out.println("该数字没有对应的操作");break;}}}public static void main(String[] args) {// TODO Auto-generated method stubTestDemo td = new TestDemo();// td.testSong();// td.testPlayList();// td.testPlayListCollection();td.test();}}

三、未解决的问题

问题一:在8--导出菜单位置,我无法把文件的名字设置为要导出的歌单名称

综合案例播放器(java)相关推荐

  1. 设计模式综合-媒体播放器的实现

    1. 媒体播放器的实现 (1)案例背景: Windows Media Player 和 RealPlayer 是两种常用的媒体播放器,它们的 API 结构和调用方法存在差别,现在你的应用程序需要支持这 ...

  2. 简单音频播放器java代码_Java实现简易音乐播放器

    //此程序实现mid.wav格式音频文件的播放 //暂时只实现了单曲播放功能 //选项>其它功能会后继添加 //Version 1.0 // @author Zha_yongchun // Em ...

  3. java 播放器开发 dat_dat格式用什么播放器 JAVA中文件的读写 I/O 输入输出流(3)

    OutputStreamWriter 和InputStreamReader都是包裹流 实例:如何将键盘输入的字符组成字符串直接赋给String对象. readLine()与回车符的问题: Print流 ...

  4. java课程设计-音乐播放器_java课程设计---java音乐播放器.doc

    java课程设计---java音乐播放器 Java程序设计课程设计 题 目 java音乐播放器 学 号: 姓 名: 指导教师: 完成时间: 目 录 第一章 系统概述3 1.需求分析3 1.1任务目的: ...

  5. java mp3转midi_java midi音乐文件播放器

    您的位置:首页 - 教程 - Java - 正文 java midi音乐文件播放器 java midi音乐文件播放器 import javax.swing.*; import javax.sound. ...

  6. 综合案例:播放器 学习

    导学 对于Java的学习,已经进入尾声了.接下来,我们就通过一个综合案例,来体验一下在企业中如何进行项目的开发.本节课程,我们会按照项目需求分析.接口设计.环境搭建.功能模块开发等阶段入手,完成整个项 ...

  7. 集合综合案例:播放器

    目录 一.需求分析: 二.详细设计: 三.代码: 一.需求分析: ①播放列表管理: 将歌曲添加到主播放列表. 将歌曲添加到播放列表. 通过歌曲id查询播放列表中的歌曲. 通过歌曲名查询播放列表中的歌曲 ...

  8. 综合案例:播放器 练习

    package player;/*** 歌曲类* @author gegejiawei*/ public class Song {// 成员变量private String id; // idpriv ...

  9. Java学习小型案例实战模拟-------播放器管理实战----------Java学习总结

    播放器管理 因为在Java内容当中,我们并没有学习图形界面的内容,所以播放器管理的内容呢都是在控制台来实现的. 需求分析: 播放列表管理: 将歌曲添加到主播放列表(集合) 将歌曲添加到普通播放列表 通 ...

最新文章

  1. 【C 语言】字符串模型 ( strstr-while 模型 )
  2. 如何查看开发者账号何时到期
  3. 模块化是数据中心设计的未来
  4. 删除已使用过且无法删除的替代
  5. socket多线程方式案例
  6. linux如何判断网线插入_斜口钳和网线钳制作网线!
  7. bzoj 1221: [HNOI2001] 软件开发
  8. 使用Java RMI时要记住的两件事
  9. CV新赛事 | 水下鱼类物种识别
  10. typecho 隐藏index.php,Typecho开启伪静态并隐藏index.php
  11. 【BZOJ3566】概率充电器,树形概率DP
  12. 用chkconfig配置linux自启动服务,用chkconfig配置linux自启动服务
  13. Linux、CentOS简单搭建虚拟主机
  14. Flutter基础—质感设计
  15. 计算机视觉基础-图像处理 Task06 边缘检测
  16. 约瑟夫问题的数学方法
  17. 随机森林简单回归预测
  18. 谷歌生物医学专用翻译_翻译软件的六大测评,请专家来支招
  19. 后羿采集器怎么导出数据_数据采集教程_智能模式_如何设置自动导出_后羿采集器...
  20. 3.5.4 Exposure Fusion(曝光融合)—Mertens TMO

热门文章

  1. Android-kotlin开发新闻阅读App
  2. SQL Server数据库——创建数据库
  3. java8 模块化_JEP 200:模块化JDK
  4. 圆极化微带阵列天线设计
  5. Gamit10.71添加新的天线类型
  6. 初学者选黑卡还是微单_【翔宇情】不同的佳能APS-C画幅单反微单区别在哪里,档次是怎么划分的?...
  7. 晚点采访华为鸿蒙王成录视频,看晚点团队对话华为鸿蒙操作系统掌舵人王成录的文章,其-虎嗅网...
  8. 关于博客搬家的一点感触
  9. 用c语言写一个万年历代码
  10. 字节跳动面试官:java范例完全自学手册