android基础学习-java篇day11-综合测试-播放器管理系统

播放器管理系统

  • 需求分析
  • 详细设计
  • 代码实现
  • 遇到问题

需求分析

播放器列表管理:

播放器列表管理的主要功能:

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

播放器管理主要功能:

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

详细设计

  •  歌曲类(Song)

属性:歌曲(id)、歌曲名(name)、演唱者(singer)、均为字符串类型

方法

  1. -构造方法
  2. -getter和setter方法
  3. -hashCode()和equals()方法
  4. -toString()方法
  • 播放列表类(PlayList)

属性:

  • -播放列表名称(playListName):字符串类型
  • -播放列表中的歌曲集合(musicList):List类型

方法:

  • -构造方法
  • -getter和setter方法
  • -将歌曲添加到播放列表:public void addToPlayList(Song song)
  • -显示播放列表中所有歌曲:public displayAllSong()
  • -通过id查询歌曲:public Song searchSongById(String id)
  • -通名称查询歌曲: public Song searchSongByName(String name)
  • -修改歌曲:public void updateSong(String id,Song song)
  • -从播放列表(通过id)删除歌曲:public void deleteSong(String id)
  • -导出所有歌曲
  • 播放器类(PlayListCollection)

属性

-存放播放列表的集合(playListMap):Map

方法:

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

遇到问题:

  1. 添加song时,在向List添加元素时,musicList.add(song1);每次添加都会将以前的内容覆盖掉,原因是每次的引用地址都相同。解决方式:在前面代码 加Song song1=new Song();让它每次都产生不一样的引用地址
  2. 难点重点:Map中的<key,value>,key值存的事列表名称playListName(一个主列表固定,多个普通列表需要自己添加),value值是装歌曲的List类中的ArrayList;遍历value值是一个List对象,将它强转换成(List)再进行List的操作,List遍历后是Song对象,再通过强转成Song类,进行Song的操作,Song类返回值重写toString就可以返回你想要的格式;

代码实现:

Song.java

package com.demo.homework;

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

	public Song() {
		super();
		this.setId(id);;
		this.setName(name);;
		this.setSinger(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;
	}


	public String toString() {
		
		return "歌曲编号:"+this.getId()+" "+"歌曲名称:"+this.getName()+" "+"演唱者:"+this.getSinger();
		
	}
	

}

PlayList.java

package com.demo.homework;
/*
 * 播放列表类
 */

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;

public class PlayList {
	private String playListName;// 播放列表名称
	public List musicList = new ArrayList();// 播放列表的歌曲集合
    public PlayListCollection p = new PlayListCollection();
    public List mainList = new ArrayList();//主播放列表
    public String mainName;
 
	public String getMainName() {
		return mainName;
	}

	public String setMainName(String mainName) {
		return this.mainName = mainName;
	}

	public List getMainList() {
		return mainList;
	}

	public void setMainList(List mainList) {
		this.mainList = mainList;
	}

	public PlayList() {
		this.setMusicList(musicList);
		this.setPlayListName(playListName);
	}

	public String getPlayListName() {
		return playListName;
	}

	public String setPlayListName(String playListName) {
		return this.playListName = playListName;
	}
	

	public List getMusicList() {
		return musicList;
	}

	public void setMusicList(List musicList) {
		this.musicList = musicList;
	}

	// 将歌曲添加到播放列表
	public void addToPlayList(Song song, boolean state) {
		Scanner sc = new Scanner(System.in);
		if (state) {// 如果点击的是添加到主列表的操作
			String key=setMainName("main");
			System.out.println("输入添加歌曲的数量:");
			int n = sc.nextInt();// 获取歌曲的数量,从而做几次循环
			int flag = 0;
			while (flag < n) {
				Song song1 = new Song();// 每次新建一个对象,让Song的对象产生不同的id
				System.out.println("输入第" + (flag + 1) + "首歌曲的id:");
				song1.setId(sc.next());
				System.out.println("输入第" + (flag + 1) + "首歌曲的名称:");
				song1.setName(sc.next());
				System.out.println("输入第" + (flag + 1) + "首歌曲的演唱者:");
				song1.setSinger(sc.next());
				musicList.add(song1);
				((List) p.playListMap.get(key)).add(song1);// 使用ArrayList实现一个Key对应一个ArrayList实现一对多
				flag++;
			}
			System.out.println("主播放列表的歌曲为:");
			Iterator it=p.playListMap.values().iterator();
			while(it.hasNext()) {
				Iterator it2=((List)(it.next())).iterator();
				while(it2.hasNext()) {
				System.out.println(it2.next());}
			}
			
		    
			Set<Entry<String, Object>> entrySet = p.playListMap.entrySet();
			// 打印输出key-value的值 通过entrySet方法得到key-value
			for (Entry<String, Object> entry : entrySet) {
				// entry.getValue();
				// entry.getKey();
				System.out.println(entry.getKey() + "-" + entry.getValue());
				}
			new TestDemo().playListMenu();
		}

		/*
		 * 当state为false时,点击的是普通列表的操作
		 */
		System.out.println("输入你要添加的列表名称:");
		String s = sc.next();
		if (new PlayListCollection().playListMap.isEmpty())
			System.out.println("还没创建列表");
		if (!new PlayListCollection().playListMap.containsKey(s))// 判断是否存在此列表
		{
			System.out.println("列表不存在");
			new TestDemo().playListMenu();
		} else {

			System.out.println("输入添加歌曲的数量:");
			int n = sc.nextInt();// 获取歌曲的数量,从而做几次循环
			int flag = 0;

			while (flag < n) {
				Song song1 = new Song();// 每次新建一个对象,让Song的对象产生不同的id
				System.out.println("输入第" + (flag + 1) + "首歌曲的id:");
				song1.setId(sc.next());
				System.out.println("输入第" + (flag + 1) + "首歌曲的名称:");
				song1.setName(sc.next());
				System.out.println("输入第" + (flag + 1) + "首歌曲的演唱者:");
				song1.setSinger(sc.next());
				musicList.add(song1);
				((List) p.playListMap.get(s)).add(song1);// 使用ArrayList实现一个Key对应一个ArrayList实现一对多
				flag++;
			}
			System.out.println("普通列表的歌曲为");
			for (int i = 0; i < musicList.size(); i++)
			{   
				System.out.println(musicList.get(i));}

		}
		Set<Entry<String, Object>> entrySet = p.playListMap.entrySet();
		// 打印输出key-value的值 通过entrySet方法得到key-value
		for (Entry<String, Object> entry : entrySet) {
			// entry.getValue();
			// entry.getKey();
			System.out.println(entry.getKey() + "-" + entry.getValue());

		}
		new TestDemo().playListMenu();
	}

	// 显示播放列表中所有歌曲
	public void displayAllSong() {
		boolean flag=false;
		//使用KeySet()
		//1取得keySet
		Set<String> keySet=p.playListMap.keySet();
		//2遍历keySet
		for(String key:keySet) {
			if("main".equals(key)) {
				flag=true;
				System.out.println("主播放列表歌曲为");
				Iterator it2=((List)(p.playListMap.get(key))).iterator();
				while(it2.hasNext()) {
				System.out.println(it2.next());}
				break;
			}
			
			Set<Entry<String, Object>> entrySet = p.playListMap.entrySet();
			// 打印输出key-value的值 通过entrySet方法得到key-value
				for (Entry<String, Object> entry : entrySet) {
							// entry.getValue();
							// entry.getKey();
							//System.out.println(entry.getKey() + "-" + entry.getValue());
			           //	System.out.println(entry.getKey());//获取key的值
						
			//2遍历keySet
			for(String key2:keySet) {
				if(entry.getKey().equals(key)) {
					flag=true;
					System.out.println("普通播放列表歌曲为");
					Iterator it2=((List)(p.playListMap.get(entry.getKey()))).iterator();
					while(it2.hasNext()) {
				   System.out.println(((Song)(it2.next())));
					//System.out.println(it2.next());
					}
					break;
				}}}
			
			
			}}
			 

	// 通过id查询歌曲
	public Song searchSongById(String id) {
		Scanner sc=new Scanner(System.in);
		System.out.println("输入你要搜索的歌曲id");
		String searchId=sc.next();
		Song song=new Song();
		boolean flag=false;
		//通过entrySet方法得到key-value
		Set<Entry<String, Object>> entrySet = p.playListMap.entrySet();
		// 打印输出key-value的值 通过entrySet方法得到key-value
			for (Entry<String, Object> entry : entrySet) {
				
		Set<String> keySet=p.playListMap.keySet();
		//List的遍历,通过get(key)得到value因为value是List所以强转换成List类型。再用List遍历
		Iterator it2=((List)(p.playListMap.get(entry.getKey()))).iterator();
		while(it2.hasNext()){
	    song=(Song)it2.next();//将找到的数据转换成song,如果满足与输入结果相同,则返回这个结果
	    if(song.getId().equals(searchId)) {
	    	flag=true;
	    	System.out.println(song);
	    	break;
	    }
			}}
			if(flag)
		System.out.println("搜索成功");
			
			else {
				System.out.println("无此歌曲id");
			}

		return song;
		
		

	}

	// 通过名称查询歌曲
	public Song searchSongByName(String name) {
		Scanner sc=new Scanner(System.in);
		System.out.println("输入你要搜索的歌曲名称");
		String searchName=sc.next();
		Song song=new Song();
		boolean flag=false;
		//通过entrySet方法得到key-value
		Set<Entry<String, Object>> entrySet = p.playListMap.entrySet();
		// 打印输出key-value的值 通过entrySet方法得到key-value
			for (Entry<String, Object> entry : entrySet) {
				
		Set<String> keySet=p.playListMap.keySet();
		//List的遍历,通过get(key)得到value因为value是List所以强转换成List类型。再用List遍历
		Iterator it2=((List)(p.playListMap.get(entry.getKey()))).iterator();
		while(it2.hasNext()){
	    song=(Song)it2.next();//将找到的数据转换成song,如果满足与输入结果相同,则返回这个结果
	    if(song.getName().equals(searchName)) {
	    	flag=true;
	    	System.out.println(song);
	    	break;
	    }
			}}
			if(flag)
		System.out.println("搜索成功");
			
			else {
				System.out.println("无此歌曲名称");
			}

		return song;
	}

	// 修改歌曲
	public void updateSong(String id, Song song) {
		Scanner sc=new Scanner(System.in);
		System.out.println("输入你要更新的歌曲id");
		String searchId=sc.next();
		song=new Song();
		boolean flag=false;
		//通过entrySet方法得到key-value
		Set<Entry<String, Object>> entrySet = p.playListMap.entrySet();
		// 打印输出key-value的值 通过entrySet方法得到key-value
			for (Entry<String, Object> entry : entrySet) {
				
		Set<String> keySet=p.playListMap.keySet();
		//List的遍历,通过get(key)得到value因为value是List所以强转换成List类型。再用List遍历
		Iterator it2=((List)(p.playListMap.get(entry.getKey()))).iterator();
		while(it2.hasNext()){
	    song=(Song)it2.next();//将找到的数据转换成song,如果满足与输入结果相同,则返回这个结果
	    if(song.getId().equals(searchId)) {
	    	flag=true;
	    	((List)(p.playListMap.get(entry.getKey()))).remove(song);
	    	System.out.println("输入你修改后的歌曲名称");
	    	song.setName(sc.next());
	    	System.out.println("输入你修改后的歌曲演唱者");
	    	song.setSinger(sc.next());
	    	System.out.println(song);
	    	break;
	    }
			}}
			if(flag)
		System.out.println("修改成功");
			
			else {
				System.out.println("无此歌曲id");
			}

		
	}
	public void outPut() {
		System.out.println("为输入导出的歌单命名");
		Scanner sc=new Scanner (System.in);
		//创建File文件 song.txt
		File file=new File("/Users/mac/Documents/java/demo/",sc.next()+".txt");
		if(!file.exists()) {//判断文件是否存在
			System.out.println("创建成功");	
			try {
				file.createNewFile();
			PrintStream ps = System.out;//临时存一下
			System.setOut(new PrintStream(file));//将system.out 的内容打印到.txt内
			this.displayAllSong();
			System.setOut(ps);//设置回标准输入流
			new TestDemo().playListMenu();
			}
			 catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				
			}
		}
		else {
			System.out.println("文件名已存在");	
			outPut();
		}
		
		
	}

	// 从播放列表删除歌曲
	public void deleteSong(String id) {
		Scanner sc=new Scanner(System.in);
		System.out.println("输入你要删除的歌曲id");
		String searchId=sc.next();
		Song song=new Song();
		boolean flag=false;
		//通过entrySet方法得到key-value
		Set<Entry<String, Object>> entrySet = p.playListMap.entrySet();
		// 打印输出key-value的值 通过entrySet方法得到key-value
			for (Entry<String, Object> entry : entrySet) {
				
		Set<String> keySet=p.playListMap.keySet();
		//List的遍历,通过get(key)得到value因为value是List所以强转换成List类型。再用List遍历
		Iterator it2=((List)(p.playListMap.get(entry.getKey()))).iterator();
		while(it2.hasNext()){
	    song=(Song)it2.next();//将找到的数据转换成song,如果满足与输入结果相同,则返回这个结果
	    if(song.getId().equals(searchId)) {
	    	flag=true;
	    	((List)(p.playListMap.get(entry.getKey()))).remove(song);
	    	break;
	    }
			}}
			if(flag)
		System.out.println("删除歌曲成功");
			
			else {
				System.out.println("无此歌曲id");
			}

	}

}

PlayListCollection.java

package com.demo.homework;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;

public class PlayListCollection {
	static Map<String,Object> playListMap=new HashMap<String,Object>();//存放播放列表的集合
    static List<Song> list=new ArrayList();

	
	
	//添加播放列表
	public void addPlayList(PlayList playList) {
		Scanner sc=new Scanner(System.in);
		String key=playList.setPlayListName(sc.next());
		List value=playList.getMusicList();
		playListMap.put(key, value);
		//sc.close();
		
		Set <Entry<String,Object>> entrySet=playListMap.entrySet();
		//打印输出key-value的值 通过entrySet方法得到key-value
		for(Entry<String, Object> entry:entrySet) {
			//entry.getValue();
			//entry.getKey();
			System.out.println(entry.getKey()+"-"+entry.getValue());
			
		}
		

	}
	//删除播放列表
	public void deletePlayList(PlayList playList) {
		Scanner sc=new Scanner(System.in);
		//通过输入的列表名称删除播放列表
		System.out.println("输入你要删除的播放列表名称");
		if(playListMap.containsKey(sc.next())) {//如果列表有这个名称,则进行删除操作
			playListMap.remove(sc.next());
			System.out.println("删除列表成功");
		}
		else {
			System.out.println("无此播放列表");
		}
	
		
	}
	//通过名字查询播放列表
	public PlayList searchPlayListByName(String PlayListname) {
		Scanner sc=new Scanner(System.in);
		System.out.println("输入你查询的播放列表名称");
		String key=sc.next();
		//通过输入的列表名称删除播放列表
		if(playListMap.containsKey(key)) {//如果列表有这个名称,则进行删除操作
			if(((List)(playListMap.get(key))).size()==0) //如果为空表
				{System.out.println("该列表为空");}
			else {
				System.out.println("查询列表成功");
		System.out.println(playListMap.get(key));
			}
			
		}
		else {
			System.out.println("无此播放列表");
		}
		
		return null;
		
	}
	//显示所有播放列表的名称 
	public void displayPlayListName() {
		Set<Entry<String,Object>>entrySet=playListMap.entrySet();
		System.out.println("找到以下列表");
		for(Entry<String,Object>entry:entrySet) {
			System.out.println(entry.getKey());
		}
		
	}
	
	
}

TestDemo.java

package com.demo.homework;

import java.util.List;
import java.util.Scanner;

public class TestDemo {
	 public static PlayListCollection p = new PlayListCollection();
	//测试歌曲类
	public void testSong() {
		
	}
	//测试播放列表类
	public void testPlayList() {
		
	}
	//测试播放器类
	public void testPlayListCollection() {
		
	}
	//主菜单
	public void mainMenu(){
	System.out.println("**************");
	System.out.println("主菜单");
	System.out.println("1--播放器列表管理");
	System.out.println("2--播放器管理");
	System.out.println("0--退出");
	System.out.println("**************");
	System.out.println("请输入对应数字进行操作:");
	//从键盘中接受数据
	Scanner sc=new Scanner(System.in);
	while(!sc.hasNext("0")) {//扫描到0就退出循环
	int n=sc.nextInt();
    switch(n) {
    case 1:new TestDemo().playListMenu();break;//显示播放器列表管理
    case 2:new TestDemo().playMenu();break;//播放器管理
    case 0:break;
    }
		
	}
	
	}
	//播放列表菜单
	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("**************");
		System.out.println("请输入对应数字对播放列表进行操作:");
		//从键盘中接受数据
				Scanner sc=new Scanner(System.in);
				while(sc.hasNext()) {
				int n=sc.nextInt();
				PlayList playList=new PlayList();
				Song song=new Song();
			    switch(n) {//a无任何意义
			    case 1:playList.addToPlayList(song,true);break;//显示播放器列表管理
			    case 2:playList.addToPlayList(song,false);break;//播放器管理
			    case 3:playList.searchSongById("a");break;//通过id找歌曲
			    case 4:playList.searchSongByName("a");break;//通过id找歌曲
			    case 5:playList.updateSong("a", song);;break;//通过名称找歌曲
			    case 6:playList.deleteSong("a");;break;//通过id删除歌曲
			    case 7:playList.displayAllSong();break;//显示所有歌曲
			    case 8:playList.outPut();break;//导出歌单,放到一个文本里面
			    case 9:mainMenu();break;//返回上一个
			    case 0:break;
			    }}
		
	}
	//播放器菜单
	
	public void playMenu() {
			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("**************");
			System.out.println("请输入对应数字对播放器进行操作:");
			//从键盘中接受数据
			PlayList playList=new PlayList();
			Scanner sc=new Scanner(System.in);
			while(sc.hasNext()) {//扫描到0就退出循环
			int n=sc.nextInt();
		    switch(n) {
		    case 1:new PlayListCollection().addPlayList(new PlayList());break;//显示播放器列表管理
		    case 2:new PlayListCollection().deletePlayList(playList);break;//通过名称删除播放列表
		    case 3:new PlayListCollection().searchPlayListByName("a");break;//通过名称显示播放列表
		    case 4:new PlayListCollection().displayPlayListName();break;//显示所以播放列表
		    case 9:new TestDemo().playListMenu();break;//播放器管理
		    case 0:break;
		    }
				
			}
			
		
	}
	
	

	public static void main(String[] args) {
		String key="main";
		List value=new PlayList().getMainList();
		p.playListMap.put(key, value);
		new TestDemo().mainMenu();


	}

}

猜你喜欢

转载自blog.csdn.net/qq_17846019/article/details/82711041
今日推荐