android基礎學習-java篇day11-綜合測試-播放器管理系統
播放器管理系統
- 需求分析
- 詳細設計
- 程式碼實現
- 遇到問題
需求分析
播放器列表管理:
播放器列表管理的主要功能:
- 將歌曲新增到主播放列表
- 將歌曲新增到普通列表
- 通過歌曲id查詢播放列表中的歌曲
- 通過歌曲名稱查詢播放列表中的歌曲
- 修改播放列表中的歌曲
- 刪除播放列表中的歌曲
- 顯示播放列表的中的所有歌曲
- 匯出歌單
播放器管理主要功能:
- 向播放器新增播放列表
- 從播放器刪除播放列表
- 通過名字查詢播放列表資訊
- 顯示所有播放列表名稱
詳細設計
-
類
-
歌曲類(Song)
屬性:歌曲(id)、歌曲名(name)、演唱者(singer)、均為字串型別
方法:
- -構造方法
- -getter和setter方法
- -hashCode()和equals()方法
- -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)
遇到問題:
- 新增song時,在向List新增元素時,musicList.add(song1);每次新增都會將以前的內容覆蓋掉,原因是每次的引用地址都相同。解決方式:在前面程式碼 加Song song1=new Song();讓它每次都產生不一樣的引用地址
- 難點重點: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();
}
}
相關文章
- android基礎學習-android篇day14-UI基礎控制元件綜合案例——點餐系統AndroidUI控制元件
- [效能測試] locust學習-基礎篇
- Java基礎 --- 綜合練習Java
- JAVA基礎學習篇之反射Java反射
- Dart基礎系統學習Dart
- 軟體測試基礎 第五篇 軟體測試文件管理
- 如何系統學習C 語言(上)之 基礎篇
- 從零開始學AB測試:基礎篇
- 測試學習SQL篇SQL
- android基礎學習-java篇day7-step3-第三節:java字串AndroidJava字串
- android基礎學習-java篇day8-step3-第四節:java集合AndroidJava
- Linux系統基礎學習Linux
- 身為學霸的我學習linux系統之基礎篇Linux
- 軟體測試技術基礎學習之測試過程
- 零基礎如何學習軟體測試
- Java基礎學習Java
- Java 學生管理系統(MVC)開源原始碼(基礎版)JavaMVC原始碼
- android基礎學習-android篇day12-android的UI基礎入門AndroidUI
- Android基礎學習Android
- Android面試之Java 基礎篇Android面試Java
- 『測試基礎』| 如何理解測試用例管理和缺陷管理?
- 軟體測試學習教程—軟體測試基礎理論五
- 軟體測試學習教程—軟體測試基礎理論六
- 軟體測試學習教程—軟體測試基礎理論四
- 軟體測試學習教程—軟體測試基礎理論三
- android基礎學習-android篇day12-UI基礎控制元件(上)AndroidUI控制元件
- android基礎學習-android篇day13-UI基礎控制元件(下)AndroidUI控制元件
- Python基礎學習篇Python
- JAVA學習--JAVA基礎(一)Java
- android基礎學習-java篇day9-step3-第五節:java執行緒AndroidJava執行緒
- 軟體測試學習資源—Git 基礎使用Git
- 小白學習安全測試(一)——Http協議基礎HTTP協議
- java基礎的學習Java
- android基礎學習-android篇day16-Menu的使用Android
- 零基礎如何系統學習Java?這裡有些建議Java
- 系統學習 TypeScript(三)——基礎型別TypeScript型別
- 『與善仁』Appium基礎 — 1、Android系統的測試環境搭建APPAndroid
- 【Java 反射學習】Java 反射基礎Java反射