软件课程设计实验报告个人报告1.docx

上传人:b****5 文档编号:6783054 上传时间:2023-01-10 格式:DOCX 页数:27 大小:757.38KB
下载 相关 举报
软件课程设计实验报告个人报告1.docx_第1页
第1页 / 共27页
软件课程设计实验报告个人报告1.docx_第2页
第2页 / 共27页
软件课程设计实验报告个人报告1.docx_第3页
第3页 / 共27页
软件课程设计实验报告个人报告1.docx_第4页
第4页 / 共27页
软件课程设计实验报告个人报告1.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

软件课程设计实验报告个人报告1.docx

《软件课程设计实验报告个人报告1.docx》由会员分享,可在线阅读,更多相关《软件课程设计实验报告个人报告1.docx(27页珍藏版)》请在冰豆网上搜索。

软件课程设计实验报告个人报告1.docx

软件课程设计实验报告个人报告1

软件课程设计实验报告

(个人报告)

课题:

音乐播放器设计

班级:

成员:

学号:

指导老师:

课设评价:

课设成绩:

一、需求分析

1)引言···················································3

2)预期功能·············································3

3)设计目标·············································4

二、界面方案设计说明

1)拟选用的开发平台和工具介绍····························4

2)系统框图··············································5

3)软件各功能模块划分······································6

4)模块间的相互关系·····································8

5)开发计划··············································8

三、详细设计说明

1)主界面轮廓设计及初始化·······························8

2)界面外框和关闭最小化等的实现·························10

3)菜单添加歌曲设计·····································13

菜单界面设计:

4)播放列表list的实现···································13

播放列表的界面设计

5)播放的控制部分·······································14

播放按钮、进度条等的控制面板设计:

6)歌名、歌词、目录显示的部分···························16

歌词界面设计(含有全部显示和滚动两部分):

四、测试过程说明

1)测试用例说明········································18

2)测试情况说明········································20

3)测试经历与想法.........................................21

五、功能模块使用说明.................................22

六、开发总结·············································24

 

1、需求分析

1)引言

本课程《软件课程设计》,旨在运用所学课程中有关数据结构、操作系统、数据库系统知识来进行本课程设计,熟练掌握高级程序设计技术,加深对课程内容的理解、提高软件应用设计能力及编程和调试能力。

同时加强学生的自我学习能力和团队协作能力,让同学学会面对问题,并学会独立去解决问题,也能触发学生的创新能力。

此次,我们班抽的任务是任选一门自己熟悉或擅长喜欢的语言设计一个基于windows平台的音乐播放器软件,要能实现对音乐库的管理和基本播放功能。

随着信息时代的到来以及网络的日益发展,音乐播放器软件随处可见,人人都在使用自己喜欢的播放应用软件。

其中也不乏一些优秀的成品,如酷狗、天天动听、qq音乐播放器等。

对于各色各样的播放器,用户心中都有自己的评价,如今我们作为它们的使用者,以用户的角度重新来设计一个音乐播放器,不仅要实现播放等最基本功能,最重要的是要提供一个良好的用户体验,即给使用者简洁,明了,方便,功能丰富的感受。

这依赖于我们课堂知识基础、课下大量的资料查阅、自主学习思考,以及小组成员之间的讨论、纠正与创新。

在我们参考了很多的播放器软件,查阅了很多java的有关媒体播放器的知识后,我们才正式开始设计我们自己的播放器,并有了如下的成果。

2)预期功能

**软件基本要求

1.有图形界面;

2.提供基本播放功能:

播放、暂停、快进、快退、停止;

3.支持播放模式:

单曲播放、单曲循环、顺序播放和随机播放;

4.支持播放信息显示:

歌曲名、播放时间;

5.支持播放列表管理:

歌曲增加、歌曲删除、歌曲播放次序调整。

**可选要求

1.支持歌词显示和同步播放;

2.支持本地歌曲搜索和管理;

3.均衡器管理:

支持不同风格的音乐模式播放;

4.自动记忆播放功能(程序关闭时能记忆当前播放的歌曲,重启后继续播放);

5.提供更良好的操作界面;

6.其他功能。

3)设计目标

对于功能完成方面,力求在出色完成所有预期基本功能的基础上,基本实现所有可选要求,并且努力创新出新的功能。

对于用户界面设计方面,力求简洁明了,做到即便对没有任何编程基础的人也能无障碍使用我们设计的播放器。

对于程序编写方面,力求用简单的语句实现更多复杂的功能,不重复,不缀余。

对于软件稳定方面,力求软件运行不出错,力求稳定无bug。

2、总体方案设计说明

1)开发平台和工具

经过小组商定,因为之前有接触过java,所以我们选用了java语言,而java语言,其本身相对于其他编程语言也有着非常大的优势,作为一门面向对象的语言,java具有很强的灵活性、模块化、透明性、可重用性强的优点。

相对C++,java更加强大、健壮、安全,而且又很简单,容易入门和掌握。

个人在初次接触java之后就非常喜欢这门语言,之前也用java编写过爬虫带哦吗

所以我们选用了以下的开发平台和工具

开发平台——JavaEclipse:

Eclipse是一个开放源代码的、基于Java的可扩展开发平台。

就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

个人觉得用eclipse写java非常快捷方便,也很容易debug纠错。

运行平台——Jdk(JavaDevelopmentKit):

java的运行环境。

工具——windowsoffice2013:

用于编写项目过程计划书、项目报告等。

2)系统框图

本人在此次软件课设中主要负责界面设计和绘制和课设报告的代码分析。

个人认为,音乐播放器作为一个交互性较强的,着重于用户体验的一个应用程序软件,对于其界面设计的要求是比较高的,要力求简单完善,但又要功能强大简洁明了,让任何一个人都可以很快的用起来得心应手而又爱不释手,希望用户体验能有新奇和愉悦感。

这次的软件课设,本人负责界面设计,所以用到了java语言的swing和JMF,初次使用,学到了很多东西,觉得JMF非常强大,对Swing也长生了浓厚的兴趣。

本人负责的部分在系统框图中显示如下:

 

3)基本模块划分

1、界面整体框架划分

整个框架是用的javaswing的Frame:

publicclassMusicPlayerextendsJFrame{}

由于panel的双缓冲性能,故选择了在frame里套上一个panel,然后再在panel的基础上绘制组件,并实现对其划分模块:

JPanelframe=newJPanel();//伪frame,实则是panel,因为panel有缓冲,更有利于在其上画组件

frame.setLayout(newBorderLayout());

this.add(frame,BorderLayout.CENTER);

考虑到界面美化情况,选择了去除原JFrame的边框,自己绘制边框和关闭响应

this.setUndecorated(true);//去掉frame框架

加监听器使边框可以随鼠标移动(原去边框后无此功能)

this.addMouseListener(newMouseAdapter(){}

this.addMouseMotionListener(newMouseMotionAdapter(){}

添加关闭按钮:

JButtoncloseButton=newJButton();

closeButton.addActionListener(newActionListener(){}//关闭操作

界面最小化到托盘的实现,需要调用java的systemTray类:

SystemTraysystemTray;

systemTray=SystemTray.getSystemTray();//构建托盘实例

界面格局划分

JSplitPanejspp1=

newJSplitPane(JSplitPane.HORIZONTAL_SPLIT,true)

JSplitPanejspp2=

newJSplitPane(JSplitPane.VERTICAL_SPLIT,true,ctropanel,list);

2、歌名显示和添加菜单

labelfilepath=newJLabel("播放目录:

");

labelfilename=newJLabel("播放文件:

");

menubar=newJMenuBar();

menufile=newJMenu("打开文件");

menubar.add(menufile);

3、播放控制界面

按钮组:

JButtonlastBttn=newJButton("上一曲");

JButtonnextBttn=newJButton("下一曲");

JButtonplayBttn=newJButton("播放");

JButtonwaitBttn=newJButton("暂停");

JButtonquickBttn=newJButton("快进");

JButtonslowBttn=newJButton("快退");

JButtonstopBttn=newJButton("停止");

各个button会设置相应的形状颜色及背景图片,加上相应的监听器

播放进度条控制:

jSlider=newJSlider();

音量:

(最终因响应的功能未实现而放弃)

slider2=newJSlider(JSlider.HORIZONTAL,0,100,50);

JLabellabel=newJLabel(""),//音量标签

label1=newJLabel("-"),

label2=newJLabel("+");

4、播放列表界面

list=newList();

JSplitPanejspp2

=newJSplitPane(JSplitPane.VERTICAL_SPLIT,true,ctropanel,list);

5、歌词显示界面

全部歌词显示界面:

textArea=newJTextArea();

textArea.setFont(newFont("宋体",Font.ITALIC,15));

滚动歌词显示界面:

lyricsJTextField=newJTextField();

lyricsJTextField.setFont(newFont("serif",Font.BOLD,20));

6、界面背景图片

背景图片重绘:

publicvoidpaint(Graphicsg){

g.drawImage(image,0,0,this.getSize().width,this.getSize().height,this);

super.paint(g);

}

4)模块间的相互关系

监听器模块实现对鼠标的监听,当鼠标点击界面上设置的不同功能按键时,由监听器进入不同的功能模块,实现具体的功能。

而鼠标点击的界面按键是由界面设计模块完成,同时功能模块中的歌词模块和播放列表管理模块的可视性也是由界面设计模块完成的。

总体而言,各个模块互相依赖,彼此支持,缺一不可。

5)开发计划

6-7周

确定项目功能,分配任务

8-11周

个人根据个人任务学习,查阅资料

12周

设定基本框架和方案

13周

考试周不作安排

14周

对最初的模板进行讨论完善,完成期中报告

15-16周

各自开发

16-17周

集中开发

18周

各个模块调试、测试,就现实的完成程度讨论优化及方案

 

3、详细设计说明

代码程序分析

1)主界面轮廓设计及初始化

privatestaticfinallongserialVersionUID=1L;

privatelongtime=0;

privateintN=0;

privateintmemorytime=0;

privatelongjumpSecond=5000000;

privateStringlrc;

privatelonglrctime;

privatelongsongtime;

privateintfileIndex=0;

booleanisStop=true;//控制播放线程

booleanhasStop=true;//播放线程状态

booleanisPause=false;

booleanhasPause=false;

Stringitem1;

Stringitem2;

Stringfilepath;//播放文件目录

Stringfilename;//播放文件名称

AudioInputStreamaudioInputStream;//音频文件流

AudioFormataudioFormat;//音频文件格式

privateClipclip;//接口:

源数据行,可以写入音频数据

Listlist;//文件列表

JTextAreatextArea;

JMenuBarmenubar;

JMenumenufile;

JMenuItemmenuopensong;

JPanelpanelmain;

Containercontainer;

JPanelpaneright;

MenuItemmenu_add;

MenuItemmenu_del;

JTextFieldtextField;

JTextFieldlyricsJTextField;

Containercontainer2;

PopupMenupopupMenu;

JLabellabelfilepath;//播放目录显示标签

JLabellabelfilename;//播放文件显示标签

staticinttesttimethread=0;

TimeThreadtimeThread;

privateTimertimer;

privateJLabelstartPoint;

privateJLabelendPoint;

JSliderjSlider;

JSliderslider2;

intxOld=0;

intyOld=0;

SystemTraysystemTray;

2)界面外框和关闭最小化等的实现

this.setLayout(newBorderLayout());

this.setTitle("音乐播放器");

this.setSize(800,600);

this.setUndecorated(true);//去掉frame框架

this.setVisible(true);//最下面也有一行次代码,最好是保留那一行的

ImageIconicon=newImageIcon("Image\\player.jpg");

this.setIconImage(icon.getImage());//设置应用程序的图标显示

//添加监听器使窗体可以移动

this.addMouseListener(newMouseAdapter(){

publicvoidmousePressed(MouseEvente){

xOld=e.getX();//得到鼠标的位置

yOld=e.getY();

}

});

this.addMouseMotionListener(newMouseMotionAdapter(){

publicvoidmouseDragged(MouseEvente){

intxOnScreen=e.getXOnScreen();

intyOnScreen=e.getYOnScreen();

intxx=xOnScreen-xOld;

intyy=yOnScreen-yOld;

MusicPlayer.this.setLocation(xx,yy);

}

});

//去掉了框体,所以要自己加一个关闭按钮,此关闭按钮实则是实现最小化到托盘

JButtoncloseButton=newJButton();

closeButton.setIcon(newImageIcon("Image\\close.jpg"));//设置托盘图标

closeButton.setPreferredSize(newjava.awt.Dimension(30,27));

closeButton.setContentAreaFilled(false);

closeButton.setBorder(null);

closeButton.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvente){

dispose();//如果点击按钮则关闭窗体但不关闭应用程序

}

});

//托盘的右键菜单的添加和实现

PopupMenupop=newPopupMenu();//构造一个右键弹出式菜单

MenuItemshow=newMenuItem("打开程序(s)");

MenuItemexit=newMenuItem("退出程序(x)");

pop.add(show);

pop.add(exit);

ImageIconimage=newImageIcon("Image\\player.jpg");//设置托盘图标

TrayIcontrayIcon=newTrayIcon(image.getImage(),"MusicPlayer!

",pop);//设置托盘的图标,延时显示内容,添加右键菜单

trayIcon.setImageAutoSize(true);//显示图标

trayIcon.isImageAutoSize();

systemTray=SystemTray.getSystemTray();//构建托盘实例

try{

systemTray.add(trayIcon);

}catch(AWTExceptionex){

System.out.println("系统托盘不可用");

}

trayIcon.addMouseListener(newMouseAdapter(){

publicvoidmouseClicked(MouseEvente){

if(e.getClickCount()==2)//双击托盘窗口再现

setVisible(true);

//systemTray.remove(trayIcon);//从系统的托盘实例中移除托盘图标

}

});

show.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvente){

//systemTray.remove(trayIcon);//从系统的托盘实例中移除托盘图标

setVisible(true);//显示窗口

}

});

exit.addActionListener(newActionListener()//点击“退出演示”菜单后退出程序

{

publicvoidactionPerformed(ActionEvente){

FileWriterfw1=null;//退出时保存当前播放信息

try{

fw1=newFileWriter("D:

\\MusicPlayer_log.txt");

}catch(IOExceptione1){

e1.printStackTrace();

}//setroute

BufferedWriterbw1=newBufferedWriter(fw1);

try{

bw1.write("list_number=");

Stringn=String.valueOf(N);

bw1.write(n);

bw1.newLine();

bw1.write("filepath=");

bw1.write(filepath);

bw1.newLine();

bw1.write("song=");

bw1.write(list.getSelectedItem());

bw1.newLine();

bw1.write("time=");

Stringplaytime=String.valueOf(toMillisecond(clip.getMicrosecondPosition()));

bw1.write(playtime);

bw1.flush();

fw1.flush();

}catch(IOExceptione2){

e2.printStackTrace();

}

FileWriterfw2=null;

try{

fw2=newFileWriter("D:

\\list_log.txt");

}catch(IOExceptione3){

e3.printStac

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1