资源描述
滨州学院计算机科学技术系
《Java语言程序设计》课后作业
题目
姓名 学号
专业 班级
年 月 日
成绩 教师签名
问 题 描 述 及 分 析
(根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么)
1. 模拟ktv点歌系统做基于java控制台的程序。
2. 将歌曲的名字,歌手名字,歌曲内容保存。
3. 能够从文件中读取大量歌曲的信息,并保存。
4. 对歌曲能够按歌名排名,也能按歌手名字保存。
5. 能通过歌名查找相关信息,也能按歌手查找相关信息。
6. 能添加歌曲。
设计思路描述
N
打印列表
模糊查找
返回到主面板
Y
播放
精确查找
根据歌手查找歌曲
根据歌名查找歌曲
点歌面板
4.退出
3.删除歌曲
2.添加歌曲
1.点歌
主控制面板
调试过程中遇到的问题及解决办法
(调试过程中遇到的主要问题及解决方法,得到的结论)
问题1:歌名和歌手字符串不能比较。
解决办法:
转换成char类型数组,逐个比较,并比较ACSII的值。
class MusicNameComparator implements Comparator<Music>
{
@Override
public int compare(Music arg0, Music arg1) {
// TODO Auto-generated method stub
char name1[]=arg0.GetMusName().toCharArray();
char name2[]=arg1.GetMusName().toCharArray();
int i=0;
while(name1[i]==name2[i]&&i<name1.length&&i<name2.length)i++;
return name1[i]-name2[i];
}
}
结论:
字符串转换成char类型数组,逐个比较,并比较ACSII的值。
问题2:文件读取时,信息分类
解决办法:public void AddByFile (List<Music> allMusic){
String musname,lyric,singer;
try{BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("123.txt")));
String data = null;
data=br.readLine();
while(data!=null){
Music music=new Music();
for(int j=0;j<3;j++)
{
if(j%3==0){
musname=data;
music.SetMusName(musname);}
else if(j%3==1){
singer=data;
music.SetSinger(singer);}
else if(j%3==2){
lyric=data;
music.SetLyric(lyric);
allMusic.add(music);}
data=br.readLine();
}
}
Collections.sort(allMusic, new MusicNameComparator());
}
catch(IOException ioe)
{ ioe.toString();}
}
结论:用BufferedReader.readline();从文件里一行一行读取。
总 结
(对结果进行分析,设计心得,重点突出特色及改进设想)
1.加深对java集合框架的理解。
2.加深对 comparator<T>接口的练习,对Collections.sort(List<T> list,Comp
arator<? Super T>);的使用
3.对String.indexof();的使用。可以返回字符串是否存在相应的字串。
4.加深了对面向对象思想的理解。和接触面向接口的思想。
附 录
(参考资料等)
import java.util.Comparator;
public class Music {
private String Number;
private String MusName;
private String Singer;
private String Lyric;
public Music()
{
this.MusName="Null";
this.Singer="Null";
this.Lyric="Null";
}
public Music(String musName,String singer,String lyric)
{
this.MusName=musName;
this.Singer=singer;
this.Lyric=lyric;
}
public void SetMusName(String name)
{
this.MusName=name;
}
public void SetSinger(String singer)
{
this.Singer=singer;
}
public void SetLyric(String lyric)
{
this.Lyric=lyric;
}
public String GetMusName()
{
return this.MusName;
}
public String GetSinger()
{
return this.Singer;
}
public String GetLyric()
{
return this.Lyric;
}
public String toString()
{
return "\n歌名:"+this.MusName+"\n歌手:"+this.Singer+"\n歌词:"+this.Lyric;
}
public void play()
{
System.out.println("正在播放。。。\n"+this.Lyric);
}
}
class HappyMusic extends Music
{
public HappyMusic(String musName, String singer, String lyric) {
super(musName, singer, lyric);
// TODO Auto-generated constructor stub
}
}
class MusicNameComparator implements Comparator<Music>
{
@Override
public int compare(Music arg0, Music arg1) {
// TODO Auto-generated method stub
char name1[]=arg0.GetMusName().toCharArray();
char name2[]=arg1.GetMusName().toCharArray();
int i=0;
while(name1[i]==name2[i]&&i<name1.length&&i<name2.length)i++;
return name1[i]-name2[i];
}
}
class MusicSingerComparator implements Comparator<Music>
{
@Override
public int compare(Music o1, Music o2) {
// TODO Auto-generated method stub
char singer1[]=o1.GetSinger().toCharArray();
char singer2[]=o2.GetSinger().toCharArray();
int i=0;
while(singer1[i]==singer2[i]&&i<singer1.length&&i<singer2.length)i++;
return singer1[i]-singer2[i];
}
}
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class MusicManner {
private String PlayLsit;
private List<Music> allMusic;
public List<Music> GetallMusic()
{
return this.allMusic;
}
public MusicManner(String name)
{
this.PlayLsit=name;
allMusic=new ArrayList<Music>();
AddByFile(allMusic);
}
public void AddByFile (List<Music> allMusic)
{
String musname,lyric,singer;
try{
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("123.txt")));
String data = null;
data=br.readLine();
while(data!=null)
{
Music music=new Music();
for(int j=0;j<3;j++)
{
if(j%3==0)
{
musname=data;
music.SetMusName(musname);
}
else if(j%3==1)
{
singer=data;
music.SetSinger(singer);
}
else if(j%3==2)
{
lyric=data;
music.SetLyric(lyric);
allMusic.add(music);
}
data=br.readLine();
}
}
Collections.sort(allMusic, new MusicNameComparator());
}
catch(IOException ioe)
{
ioe.toString();
}
}
public void AddByUser()
{
Music music=new Music();
Scanner input=new Scanner(System.in);
System.out.println("输入歌名:");
music.SetMusName(input.next());
System.out.println("输入歌手:");
music.SetSinger(input.next());
System.out.println("输入歌词:");
music.SetLyric(input.next());
this.allMusic.add(music);
}
public void SortMusicByName()
{
Collections.sort(this.allMusic, new MusicNameComparator());
}
public void SortMusicBySinger()
{
Collections.sort(this.allMusic, new MusicSingerComparator());
}
public Music GetMusicByName(String name){
Music music=null;
for(Music tempmusic:this.allMusic){
if(tempmusic.GetMusName().equals(name)){
music=tempmusic;
break;
}
}
return music;
}
public Music GetMusicBySinger(String singer)
{
Music music=null;
for(Music tempmusic:this.allMusic)
if(tempmusic.GetSinger().equals(singer)){
music=tempmusic;
break;
}
return music;
}
public void DeleByUser(String name)
{
Music music;
if((music=GetMusicByName(name))!=null){
allMusic.remove(music);
System.out.println("删除成功!");
}
else
System.out.println("歌曲不存在!");
}
public List<Music> IndexMusicOfName(String keyword){
List<Music> list=new ArrayList<Music>();
for(Music tempmusic:this.allMusic){
if(tempmusic.GetMusName().indexOf(keyword)!=-1){
list.add(tempmusic);
}
}
printmusiclistbyname(list);
return list;
}
public void printmusiclistbyname(List<Music> list)
{
for(Music music:list)
System.out.println(music.GetMusName()+"\n");
}
public List<Music> IndexMusicOfSinger(String keyword){
List<Music> list=new ArrayList<Music>();
for(Music tempmusic:this.allMusic){
if(tempmusic.GetSinger().indexOf(keyword)!=-1){
list.add(tempmusic);
}
}
printmusiclistbysinger(list);
return list;
}
public void printmusiclistbysinger(List<Music> list)
{
for(Music music:list)
System.out.println(music.GetSinger()+"\n");
}
}
import java.util.Scanner;
public class MusicTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
MusicManner ktv=new MusicManner("大家乐");
Scanner input=new Scanner(System.in);
int command;
while(( command=read1(input))!=4){
switch(command)
{
case 1:
Music music;
while((command=read2(input))!=3)
switch(command)
{
case 1:
ktv.printmusiclistbyname(ktv.GetallMusic());
System.out.println("请输入歌名:");
String name=input.next();
if((music=ktv.GetMusicByName(name))!=null)
{
System.out.println(music.toString());
music.play();
}
else
{
System.out.println("很抱歉,没有找到相应的歌。正在查找相似的歌名...");
ktv.IndexMusicOfName(name);
System.out.println("希望有您要找的结果.");
continue;
}
continue;
case 2:
ktv.printmusiclistbysinger(ktv.GetallMusic());
System.out.println("请输入歌手:");
String singer=input.next();
if((music=ktv.GetMusicBySinger(singer))!=null)
{
System.out.println(music.toString());
music.play();
}
else
{
System.out.println("很抱歉,没有找到相应的歌。正在查找相似的歌手...");
ktv.IndexMusicOfSinger(singer);
System.out.println("希望有您要找的结果.");
}
continue;
}
continue;
case 2:
ktv.AddByUser();
System.out.println("step2");
continue;
case 3:
System.out.println("step3");
System.out.println("请输入要删除歌曲的名字:");
String name=input.next();
ktv.DeleByUser(name);
continue;
case 4:
System.out.println("quit");
return;
default:
System.out.println("default");
}
}
System.out.println("欢迎下次光临。");
}
public static int read1(Scanner input)
{
System.out.println("欢迎来到:大家乐点歌系统!请选择:1.点歌 2.添加歌曲 3.删去歌曲 4.退出");
return input.nextInt();
}
public static int read2(Scanner input)
{
System.out.println("请选择:1.歌名 2.歌手 3.返回");
return input.nextInt();
}
}
11
展开阅读全文