慕课网2019版Java工程狮,步骤三,常用类库的综合实例

首先我们这是一个小的demo,用来体验实际开发的过程。于是我们需要按照正规流程的简易版进行开发我们的,播放器管理软件。
正规软件开发过程为:需求开发——》体系结构设计——》详细设计——》代码实现——》测试——》
接下来的步骤分为:需求分析——》详细设计——》代码实现(边实现边测试)

一、我们的需求:
播放列表管理:
• 将歌曲添加到主播放列表
• 将歌曲添加到普通播放列表
• 通过歌曲id查询播放列表中的歌曲
• 通过歌曲名称查询播放列表中的歌曲
• 修改播放列表中的歌曲
• 删除播放列表中的歌曲
• 显示播放列表中的所有歌曲
播放器管理:
• 向播放器添加播放列表
• 从播放器删除播放列表
• 通过名字查询播放列表信息
• 显示所有播放列表名称

二、详细设计
我们根据需求可以得知我们需要歌曲类存歌曲对象,播放列表类存播放列表对象,播放列表集合类存多个播放列表,也可称为播放器类,测试类用于测试开发的模块和方法,测试驱动开发
接下来设计每个类的属性和方法
歌曲类(Song)
属性:歌曲id(id)、歌曲名(name)、演唱者(singer),均为字符串类型
方法:
-构造方法
-getter和setter方法
-hashCode()和equals()方法
-toString()方法

播放列表类(PlayList)
属性:播放列表名称(playListName):字符串类型播放列表中的歌曲集合(musicList):List类型
方法:
-构造方法
-getter和setter方法
-将歌曲添加到播放列表:public void addToPlayList(Song song);
-显示播放列表中所有歌曲:public void displayAllSong();
-通过id查询歌曲:public Song searchSongById(String id);
-通过名称查询歌曲:public Song searchSongByName(Stringn);
-修改歌曲:public void updateSong(Stirng id,Song song);
-从播放列表删除歌曲:public void deleteSong(String id);
-按歌曲名进行排序:public void sortBySongName();

播放器类(PlayListCollection)
属性:存放播放列表的集合(playListMap):Map
方法:
-构造方法
-getter和setter方法
-添加播放列表:public void addPlayList(PlayList playList);
-删除播放列表:public void deletePlayList(PlayList playList);
-通过名字查询:public PlayList searchPlayListByName(StringplayListName);
-显示所有播放列表名称:public void displayPlayListName();

测试类 (TestDemo)

三,代码实现

//首先是Song类和其测试代码。
测试代码在TestDemo类中
package SongListTestDemo;

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() {
		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) {
		if (this == obj)
			return true;
		// this!=obj
		if (Song.class != obj.getClass())
			return false;
		else {
			Song other = (Song) obj;
			return other.getId().equals(getId())
					&& other.getName().equals(getName())
					&& other.getSinger().equals(getSinger());
		}
	}
	@Override
	public String toString() {
		return "歌曲 ID为:" + id + ", 歌曲名称为:" + name + ", 歌手为:" + singer;
	}

}
public class TestDemo {
	public void testSong() {// 测试歌曲类
		Song s1 = new Song("1", "qqq", "www");
		Song s2 = new Song("2", "eeee", "rrr");
		Song s3 = new Song("3", "aaa", "dddd");
		Song s4 = new Song("3", "aaa", "dddd");
		System.out.println(s1);
		System.out.println(s4.equals(s3));

	}
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		TestDemo t1 = new TestDemo();
		 t1.testSong();
	}
}

//接下来是PlayList类的实现,和测试它的方法

package SongListTestDemo;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

public class PlayList {
	private String PlayListName;
	private List<Song> musicList;
/*
 * @param playListName 播放列表的名词
 * @param musicList 
 */
	public PlayList(String playListName) {
		PlayListName = playListName;
		musicList=new ArrayList<Song>();
	}

	public String getPlayListName() {
		return PlayListName;
	}

	public void setPlayListName(String playListName) {
		PlayListName = playListName;
	}

	public List<Song> getMusicList() {
		return musicList;
	}

	public void setMusicList(List<Song> musicList) {
		this.musicList = musicList;
	}
/*
 * @param song要添加的歌曲
 */
	public void addToPlayList(Song song) {//将歌曲添加到播放列表
		boolean flag=false;
		for(Song s:musicList){
			if(s.equals(song))
			{
				flag=true;
				break;
			}
		}
		if (flag)
			System.out.println("已有此歌曲");
		else {
			musicList.add(song);
			System.out.println("已添加");
		}
	}

	public void displayAllSong() {//显示播放列表中所有歌曲
		System.out.println("播放列表中的所有歌曲有:");
		int size = musicList.size();
		if (size == 0) {
			System.out.println("此列表无歌曲");
		} else {
			for (Song s : musicList) {
				System.out.println(s.toString());
			}
		}
	}

	public Song searchSongById(String id) {//通过ID查询歌曲

		for (Song s : musicList) {
			if (s.getId().equals(id)) {
				return s;
			}
		}
		return null;
	}

	public Song searchSongByName(String n) {//通过名称查询歌曲

		for (Song s : musicList) {
			if (s.getName().equals(n)) {
				return s;
			}
		}
		return null;
	}
	
	public void updateSong(String id,Song song){//修改歌曲
		Song song1=searchSongById(id);
		if(song1==null){
			System.out.println("不存在ID为"+id+"的歌曲");
			//System.out.println("是否添加:");
			
		}
		else{
//		for (Song s : musicList) {
//			if (s.getId().equals(id)) {
				musicList.remove(song1);
				musicList.add(song);
				System.out.println("修改成功");
				//break;
//			}
//		}
	        }
	}
	public void deleteSong(String id){//从播放列表中删除歌曲
		Song song1=searchSongById(id);
		if(song1==null){
			System.out.println(getPlayListName()+"不存在ID为"+id+"的歌曲");
		}
		else{
//		for (Song s : musicList) {
//			if (s.getId().equals(id)) {
				musicList.remove(song1);
				System.out.println("删除成功");
//				break;
//			}
//		}
		}
	}
	
	public void exportPlayList(){//导出歌曲
		String name="D:\\editor\\mooc_learing\\src\\SongListTestDemo"+PlayListName+".txt";
		try {
			FileOutputStream fos=new FileOutputStream(name);
			ObjectOutputStream oos=new ObjectOutputStream(fos);
			oos.writeObject(musicList);
			oos.flush();
			oos.close();
		
		} catch (FileNotFoundException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		
	}
}
public class TestDemo {
	public void testSong() {// 测试歌曲类
		Song s1 = new Song("1", "qqq", "www");
		Song s2 = new Song("2", "eeee", "rrr");
		Song s3 = new Song("3", "aaa", "dddd");
		Song s4 = new Song("3", "aaa", "dddd");
		System.out.println(s1);
		System.out.println(s4.equals(s3));

	}

	public void testPlayList() {// 测试播放列表类
		Song s1 = new Song("1", "qqq", "www");
		Song s2 = new Song("2", "eeee", "rrr");
		Song s3 = new Song("3", "aaa", "dddd");
		Song s4 = new Song("3", "aaa", "dddd");
		PlayList mainPlayList = new PlayList("主播放列表");
		mainPlayList.addToPlayList(s1);
		mainPlayList.addToPlayList(s2);
		mainPlayList.addToPlayList(s3);
		mainPlayList.addToPlayList(s4);
		mainPlayList.displayAllSong();

		s4.setSinger("asd");
		mainPlayList.updateSong("1", s4);
		mainPlayList.displayAllSong();
		System.out.println("**********");

		Song s = mainPlayList.searchSongById("2");
		if (s != null) {
			System.out.println("根据ID找到的为" + s);
		} else
			System.out.println("不存在该歌曲");

		Song song = mainPlayList.searchSongByName("qqq");
		if (song != null) {
			System.out.println("根据name找到的为" + song);
		} else
			System.out.println("不存在该歌曲");
		mainPlayList.deleteSong("2");

		mainPlayList.displayAllSong();
	}//接下来是PlayListCollection类,不写其测试方法了,最后给大家整个的TestDemo类
package SongListTestDemo;

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

public class PlayListCollection {
	private Map<String, PlayList> playListMap;//存放播放列表集合

	public PlayListCollection(){
		this.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) {//添加播放列表
		if (playListMap.containsValue(playlist))
			System.out.println("列表已存在,SB");
		playListMap.put(playlist.getPlayListName(), playlist);
		System.out.println("加入成功");
	}
/**
 * 
 * @param playlist
 */
	public void deletePlayList(PlayList playlist) {//删除播放列表
//		if (!playListMap.containsValue(playlist)) {
//			System.out.println("无此列表,你看清楚了SBB");
//			return;
//		} else {
			playListMap.remove(playlist.getPlayListName());
			System.out.println("删除成功");
//		}
	}

	public PlayList searchPlayListByName(String playListName) {//通过名字查询
		if (!playListMap.containsKey(playListName)) {
			return null;
		} else {
			return playListMap.get(playListName);
		}
	}

	public void displayListName() {//显示所有播放列表名称
		if (playListMap.isEmpty()) {
			System.out.println("空的啊 输出啥啊 傻逼");
			return;
		} else {
			for (String s : playListMap.keySet()) {
				System.out.println(s);
			}
		}
	}

}

//最后的TestDemo类,特别长,包括界面,有点简陋哈
package SongListTestDemo;

import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class TestDemo {
	public void testSong() {// 测试歌曲类
		Song s1 = new Song("1", "qqq", "www");
		Song s2 = new Song("2", "eeee", "rrr");
		Song s3 = new Song("3", "aaa", "dddd");
		Song s4 = new Song("3", "aaa", "dddd");
		System.out.println(s1);
		System.out.println(s4.equals(s3));

	}

	public void testPlayList() {// 测试播放列表类
		Song s1 = new Song("1", "qqq", "www");
		Song s2 = new Song("2", "eeee", "rrr");
		Song s3 = new Song("3", "aaa", "dddd");
		Song s4 = new Song("3", "aaa", "dddd");
		PlayList mainPlayList = new PlayList("主播放列表");
		mainPlayList.addToPlayList(s1);
		mainPlayList.addToPlayList(s2);
		mainPlayList.addToPlayList(s3);
		mainPlayList.addToPlayList(s4);
		mainPlayList.displayAllSong();

		s4.setSinger("asd");
		mainPlayList.updateSong("1", s4);
		mainPlayList.displayAllSong();
		System.out.println("**********");

		Song s = mainPlayList.searchSongById("2");
		if (s != null) {
			System.out.println("根据ID找到的为" + s);
		} else
			System.out.println("不存在该歌曲");

		Song song = mainPlayList.searchSongByName("qqq");
		if (song != null) {
			System.out.println("根据name找到的为" + song);
		} else
			System.out.println("不存在该歌曲");
		mainPlayList.deleteSong("2");

		mainPlayList.displayAllSong();
	}

	public void testPlayListCollection() {// 测试播放器类
		// 定义主播放列表
		Song s1 = new Song("1", "qqq", "www");
		Song s2 = new Song("2", "eeee", "rrr");
		Song s3 = new Song("3", "aaa", "dddd");
		PlayList mainPlayList = new PlayList("主播放列表");
		mainPlayList.addToPlayList(s1);
		mainPlayList.addToPlayList(s2);
		mainPlayList.addToPlayList(s3);
		mainPlayList.displayAllSong();
		System.out.println("*************");
		// 定义新的播放列表
		Song s4 = new Song("4", "bbb", "dd");
		PlayList PlayList = new PlayList("播放列表1");
		PlayList.addToPlayList(s1);
		PlayList.addToPlayList(s2);
		PlayList.addToPlayList(s3);
		PlayList.addToPlayList(s4);
		PlayList.displayAllSong();
		System.out.println("*********");

		PlayListCollection plc = new PlayListCollection();
		plc.addPlayList(PlayList);
		plc.addPlayList(mainPlayList);
		System.out.println("***********");
		plc.displayListName();
		System.out.println("***********");
		PlayList p = plc.searchPlayListByName("播放列表1");
		p.displayAllSong();
		System.out.println("***********");
		plc.deletePlayList(PlayList);
		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("1:   将歌曲添加到主播放列表");
		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 test() {// 主流程的实现
		TestDemo td = new TestDemo();
		Scanner sc = new Scanner(System.in);
		int in = 0, in1 = 0, in2 = 0;
		//创建一个播放列表容器(播放器)
		PlayListCollection plc=new PlayListCollection();
	   //创建主播放列表
		PlayList mainPLayList=new PlayList("主播放列表");
		
		//将主播放列表添加到播放器
		plc.addPlayList(mainPLayList);
		PlayList  favouritePlayList=null;
		while (true) {
			td.mainMenu();
			System.out.println("输入数字");
			in = sc.nextInt();
			if (in == 0) {
				break;
			}
			switch (in) {
			case 1:
				while (true) {
					td.playListMenu();
					System.out.println("输入数字");
					in1 = sc.nextInt();
					if (in1 == 9)
						break;
					switch (in1) {
					case 1:
						System.out.println("1:   将歌曲添加到主播放列表");
						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("歌曲的name为:");
							String strName=sc.next();
							System.out.println("歌曲的singer为:");
							String strSinger=sc.next();
							Song s=new Song(strId,strName,strSinger);
							mainPLayList.addToPlayList(s);
						}
						mainPLayList.displayAllSong();				
						break;
					case 2:
						System.out.println("2:   将歌曲添加到其他播放列表");
						System.out.println("请输入要添加的列表名称");
						String cName=sc.next();
						favouritePlayList=plc.searchPlayListByName(cName);
						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();
								Song song=mainPLayList.searchSongById(strId);
								if(song==null){
									//若歌曲不存在,则创建新的添加,并且添加到主播放列表
									System.out.println("该歌曲在主播放列表不存在,继续输入其他信息");
									System.out.println("歌曲的name为:");
									String strName=sc.next();
									System.out.println("歌曲的singer为:");
									String strSinger=sc.next();
									Song s=new Song(strId,strName,strSinger);
									mainPLayList.addToPlayList(s);
									favouritePlayList.addToPlayList(s);
								}
								else{
									//歌曲存在则直接添加到新播放列表
									System.out.println("该歌曲已存在");
									favouritePlayList.addToPlayList(song);
								}
								
							}
							mainPLayList.displayAllSong();	
							favouritePlayList.displayAllSong();
						}
						
						break;
					case 3:
						System.out.println("3:   通过歌曲ID查询播放列表歌曲");
						System.out.println("请输入要查询的播放列表名称:");
						String strPlayListName1=sc.next();
						PlayList p=plc.searchPlayListByName(strPlayListName1);
						if(p==null){
							System.out.println("无此播放列表");
							break;
						}
						else{
							System.out.println("请输入歌曲ID:");
							String id=sc.next();
							Song s=p.searchSongById(id);
							if(s==null)
								System.out.println("无此歌曲");
							else 
								System.out.println(s.toString());
						}
						break;
					case 4:
						System.out.println("4:   通过歌曲名称查询播放列表中的歌曲");
						System.out.println("请输入播放列表名称:");
						String PLName4=sc.next();
						PlayList p4=plc.searchPlayListByName(PLName4);
						if(p4==null){
							System.out.println("无此播放列表");
							break;
						}
						else{
							System.out.println("此播放列表存在,请输入歌曲Name");
							String sName4=sc.next();
							if((p4.searchSongByName(sName4))!=null){
								p4.displayAllSong();
							}
							else{
								System.out.println("此播放列表无该歌曲");
								break;
							}
						}
						break;
					case 5:
						System.out.println("5:   修改播放列表中的歌曲");
						System.out.println("请输入播放列表名称");
						String name3=sc.next();
						PlayList p7=plc.searchPlayListByName(name3);
						if(p7==null){
							System.out.println("无此播放列表");
							break;
						}else{
							System.out.println("此播放列表存在");
							System.out.println("歌曲的ID为:");
							String strId5=sc.next();
							System.out.println("修改歌曲的name为:");
							String strName5=sc.next();
							System.out.println("修改歌曲的singer为:");
							String strSinger5=sc.next();
							Song s5=new Song(strId5,strName5,strSinger5);
							Map<String,PlayList> s0=plc.getPlayListMap();
							for(PlayList p5:s0.values()){
								p5.updateSong(strId5, s5);
							}
						}
						break;
					case 6:
						System.out.println("6:   删除播放列表中的歌曲");
						System.out.println("请输入播放列表名称");
						String name2=sc.next();
						PlayList p5=plc.searchPlayListByName(name2);
						if(p5==null){
							System.out.println("无此播放列表");
							break;
						}
						else{
							System.out.println("此播放列表存在,请输入歌曲id");
							String songid=sc.next();
							Song tempSong=p5.searchSongById(songid);
							if(tempSong==null){
								System.out.println("无此歌曲存在");
								break;
							}
							else{
								if(p5.getPlayListName().equals("主播放列表")){
									Map<String,PlayList> s6=plc.getPlayListMap();
									for(PlayList p6:s6.values()){
										p6.deleteSong(songid);
									}
								}
								else{
									p5.deleteSong(songid);
								}
							}
							
						}
						
						break;
					case 7:
						System.out.println("7:   显示播放列表的所有歌曲");
						System.out.println("请输入播放列表名称");
						String name=sc.next();
						PlayList p2=plc.searchPlayListByName(name);
						if(p2==null){
							System.out.println("无此播放列表");
							break;
						}
						else{
							System.out.println(name+"  该播放列表存在");
							
							p2.displayAllSong();
						}
						break;
					default:
						System.out.println("无该操作");
						break;
					}
				}
				break;
			case 2:
				while (true) {
					td.playerMenu();
					System.out.println("输入数字");
					in2 = sc.nextInt();
					if (in2 == 9)
						break;
					switch (in2) {
					case 1:
						System.out.println("1:   向播放器添加播放列表");
					    System.out.println("输入要添加的播放列表的名称");
					    String playerName=sc.next();
					    //创建一个新的播放列表对象
					    favouritePlayList=new PlayList(playerName);
					    //将播放列表添加到播放器map中
					    plc.addPlayList(favouritePlayList);
						break;
					case 2:
						System.out.println("2:   从播放器删除播放列表");
					System.out.println("请输入要删除的播放列表名称");
					String strpln=sc.next();
					if(strpln.equals("主播放列表")){
						System.out.println("主播放列表不能被删除");
						break;
					}
					else{
						PlayList pl=plc.searchPlayListByName(strpln);
						if(pl==null){
							System.out.println("无播放列表");
						}
						else{
							plc.deletePlayList(pl);
						}
					}
						break;
					case 3:
						System.out.println("3:   通过名字查询播放列表信息");
						System.out.println("请输入要查询的播放列表名称");
						String name=sc.next();
						PlayList p2=plc.searchPlayListByName(name);
						if(p2==null){
							System.out.println("无此播放列表");
							break;
						}
						else{
							System.out.println(name+"  该播放列表存在");
							
							p2.displayAllSong();
						}
						break;
					case 4:
						System.out.println("4:   显示所有播放列表名称");
						plc.displayListName();
						break;
					
					default:
						System.out.println("无该操作");
						break;
					}
				}
				break;
			default:
				System.out.println("无该操作");
				break;
			}
		}

	}

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		TestDemo t1 = new TestDemo();
		// t1.testSong();
		// t1.testPlayList();
		// t1.testPlayListCollection();
		t1.test();

	}

}


最后宣传下我个人的微信公众号,微信搜索:可及的小屋,有志向整副业,娱乐的程序员们,欢迎您的到来。谢谢。
100G程序员资料,自取哦!!
可及的小屋

发布了48 篇原创文章 · 获赞 9 · 访问量 2405

猜你喜欢

转载自blog.csdn.net/jjy19971023/article/details/104304893