音乐播放器毕业设计论文
第I页
摘 要
在信息,技术高速发展的今天,多媒体技术也越来越受到人们的重视。文章对目前使用较多的音乐播放器作出较详细的比较。通过阅读多张文献,分析了一些音乐播放器的功能并考虑了怎样能实现支持更多格式的音乐文件,怎样能满足使用者对播放器的需求。本文主要介绍了一个基于Java Applet来实现的音乐播放器的设计。并对系统开发中涉及到的关键技术作了探讨,简要分析介绍了Java技术和 Applet的工作原理,最后说明系统需要实现的功能。
音乐是一种声音符号,表达人的思想感情。是人们思想的载体之一。音乐是有目的和内涵的,其中隐含了作者的生活体验,思想情怀。一款好的pc音乐播放器不仅能够提供好的音乐播放效果,更能够为用户提供方便的操作。
本设计利用java语言和eclipse 编辑工具对播放器进行编写。同时给出了详细的系统设计过程、部分界面图及主要功能运行流程图,本文还对开发过程中遇到的问题和解决方法进行了详细的讨论,该音乐播放器集播放、暂停、停止、快进、快退、下一曲、上一曲、音量调节等功能与一体,性能良好。该播放器支持MP3、WAV、MP3和AIFF等音频格式。在开发的过程中采用瀑布模型。第一阶段首先对项目进行全面、仔细的需求分析,并准确做出项目进度安排,明确每个阶段的任务;第二阶段是进行项目分模块编码;第三阶段对项目进行全面的测试和系统集成测试。
关键词: JAVA; Eclipse; 模块化; Applet;
四川科技职业学院毕业设计(论文)
第II页
Abstract
In the information, the rapid development of technology today,the multimedia technology is becoming more and more attention. This paper makes comparison of the detail to the current use of more music player. By reading a plurality ofliterature, analysis of some function of music player and consider how to achieve the support more format music files,how to meet the needs of users of the player. This paper mainly introduces the design of a Java based Applet to achieve music player. And the key technologies involved in the system development are discussed and analyzed brieflyintroduces the work principle of Java technology and Applet,finally indicated that the system needs to realize the function.
The music is a sound symbolic expressing the mood and thinking. It is the
carrier of people's thinking. Music is the purpose and content, which implied the author's life experiences and feelings. A good pc music player can not only provide good music playing effect, but also provide users with convenient operation.
The player is using java language and eclipse editing tools. Giving a detailed system design process, part of the interface map and run flow chart of the main function, this article discussed in detail on problems and solution method in the development process. The music player set to play, pause, stop, fast forward, rewind, and the next one, on a volume adjustment functions with one good performance. The player supports MP3, WAV, MP3, AIFF, etc. audio formats. The model in the development process is Waterfall model. The first phase is the project of comprehensive and careful needs analysis, accurately making the project schedule and clearing each stage of the task. The second phase of the project is sub-module coding. The third stage, the project testing and system integration testing.
key words:JAVA ; Eclipse; Modularization; Applet;
四川科技职业学院毕业设计(论文)
第III页
目 录
毕业论文(设计)诚信承诺书 ......................................................................... 错误!未定义书签。 四川科技职业学院毕业论文评审表 ............................................................. 错误!未定义书签。 四川科技职业学院毕业论文评审表 ............................................................. 错误!未定义书签。 四川科技职业学院毕业设计(论文)任务书 ................................................... 错误!未定义书签。 第一章 绪论 ....................................................................................................................................... 1
1.1 音乐播放器的定义 .................................................................................................................... 1 1.2软件开发背景及意义 ................................................................................................................. 1 1.3发展现状及趋势 ......................................................................................................................... 2 第二章 相关技术简介 ........................................................................................................................... 4
2.1 Java技术简介 ............................................................................................................................. 4 2.2 JMF媒体框架技术 ..................................................................................................................... 4 2.3 JDK技术 ..................................................................................................................................... 5 第三章 系统分析 ..................................................................................................................................... 7
3.1功能需求 ..................................................................................................................................... 7
3.1.1播放器的基本控制需求 .................................................................................................. 7 3.1.2功能需求分析 .................................................................................................................. 7 3.2运行及其它需求分析 ................................................................................................................. 8 3.3 可行性分析 ................................................................................................................................ 8
3.3.1 经济及技术可行性 .......................................................................................................... 8 3.3.2 运行及法律可行性 .......................................................................................................... 9 4.1 软件结构设计 .......................................................................................................................... 10 4.2 界面功能模块设计 ...................................................................................................................11 第五章 播放器详细设计 ....................................................................................................................... 15
5.1文件菜单详细设计 ................................................................................................................... 15
5.1.1添加音乐文件主要实现方法: .................................................................................... 15 5.1.2 添加音乐文件夹的功能实现 ....................................................................................... 16 5.1.3 退出功能实现 ............................................................................................................... 18 5.2 播放菜单详细设计 .................................................................................................................. 18
5.2.1 播放/暂停功能实现 ...................................................................................................... 19 5.2.2 停止功能实现 ............................................................................................................... 21 5.2.3 音乐魔方实现 ............................................................................................................... 22 5.2.4 播放模式功能实现 ....................................................................................................... 27 5.2.5 歌词背景功能实现 ....................................................................................................... 27 5.3 皮肤功能详细设计 .................................................................................................................. 31 5.4 播放按钮详细设计 .................................................................................................................. 35 5.5 歌词同步详细设计 .................................................................................................................. 39 结 论 ....................................................................................................................................................... 41 致 谢 ....................................................................................................................................................... 42 参考文献 ................................................................................................................................................. 43
第一章 绪论
随着计算机和多媒体技术的不断发展以及个人计算机的普及,各种各样的媒体文件,媒体播放器层出不穷,而MP3(MPEG Audio Layer3)格式化以及体积小、音质也有保证的特点成为使用最为广泛的音频格式,得到了绝大多数软件和硬件媒体播放器的支持,同时WAV格式作为无损的音频格式也独树一帜。如今,软件市场上的媒体播放器百花齐放,如:Mediaplayer,酷我音乐盒,千千静听等。高音质播放器和低内存消耗是各种媒体播放器所最求的目标。
1.1 音乐播放器的定义
随着个人电脑的普及,及多媒体信息的传播和应用已经深入我们的生活中的各个方面,其中数字音频凭借着其中占用存储空间小,声音质量高的特点风靡全球,传统磁带盒CD所统治的半壁江山已经成为了数字音频的天下。
本音频播放软件采用JAVA语言编写,旨在利用JAVA的平台无关性特点做出一款通用性强,占用空间少却五脏六腑俱全的音频播放器。
1.2软件开发背景及意义
欣赏美妙的音乐是我们每个人在学习工作之余都会做的事,面对市场上和网络上各种花样繁多的播放器,他们不但用起来感到得心应手,而且各种功能操作非常方便。我们都用过“千千静听”,“酷狗音乐盒”,“Windows Media player”等非常优秀的播放器,但是在其使用的过程中总有些瑕疵。并且这些公司没有开放它们的源代码。我设计的这个“基于java的音乐播放器”除了能够播放一些常见的音频格式外更加易于操作和使用。此软件具有一般播放器的常用功能,界面沿用了标准的Windows窗口,主窗口的功能有对要播放文件的各种控制,所播放曲目的名称,通过主窗口能有选择的播放单个文件,单次播放和循环播放目录表中的文件。程序的开发环境是JDK,操作系统是Windows XP,用到的主要技术为java语言,eclipse编辑软件。
本次毕业设计的意义在于结合Java语言提供的先进的思想和多样的媒体控制手段,结合用户使用音乐播放器的习惯和对媒体播放器的要求,设计了一款界面清楚明了,操作简单实效,可以实现在播放列表中可以加载一个或者多个多媒体文件;自动连续播放多个多媒体文件;用户能随意改变播放顺序;在下次打开播放器时,能够自动加载上次的播放列表;在播放列表的多媒体文件播放完后可以选择自动关闭播放器或者循环播放等功能的媒体播放器。
1.3发展现状及趋势
音乐播放器的设计是一门集计算机技术和数字多媒体技术于一体的综合设计。随着中国计算机技术、宽带网络技术的发展,越来越多的人开始重视多媒体播放器的发展与应用。在当今信息社会以多媒体为特征的信息技术和信息产业的发展及应用对人类社会产生的影响和作用愈来愈明显,愈来愈重要。而音乐作为多媒体中的一个重要组成部分能改变信息的包装,实现知识信息数字化,为人们获得知识信息提供极大的方便和无穷的乐趣。友善的人机界面、多种多样的多媒体教学软件、诱人的电子游艺节目、身临其境的多媒体导购系统、五花八门的信息家电和高效方便的网上查询等等,无不渗透着多媒体的作用,它引导人们进入了一个有声有色的世界。同时,多媒体的发展和应用,极大地推动了各行各业的相互渗透和飞速发展,大大改变了人类社会的工作环境和生活方式。可毫不夸张地说,多媒体产业的形成和发展,不仅引起了计算机工业的一次革命,也正在深刻地影响人类社会发生巨大的变革。多媒体技术的发展在很大程度上依靠于多媒体软件开发的水平。
多媒体技术是当今信息技术领域发展最快、最活跃的技术,是新一代电子技术发展和竞争的焦点。多媒体技术融计算机、声音、文本、图像、动画、视频和通信等多种功能于一体,借助日益普及的高速信息网,可实现计算机的全球联网和信息资源共享,因此被广泛应用在咨询服务、图书、教育、通信、军事、金融、医疗等诸多行业,并正潜移默化地改变着我们生活的面貌。
人类社会逐渐进入信息化时代,社会分工越来越细,人际交往越来越频繁,群体性、交互性、分布性和协同性将成为人们生活方式和劳动方式的基本特征,
其间大多数工作都需要群体的努力才能完成。但在现实生活中影响和阻碍上述工作方式的因素太多,如打电话时对方却不在。即使电话交流也只能通过声音,而很难看见一些重要的图纸资料,要面对面的交流讨论,又需要费时的长途旅行和昂贵的差旅费用,这种方式造成了效率低、费时长、开销大的缺点。今天,随着多媒体计算机技术和通信技术的发展,两者相结合形成的多媒体通信和分布式多媒体信息系统较好地解决上述问题。
随着网络技术的不断发展和Internet的逐渐普及,人们对网络产品需求也不断增长。如今流行的网络音乐播放器虽然很多,但都或多或少存在一些缺陷,比如:没有记忆的功能;下次播放的时候不能从上次离开的曲目开始;没有身份认证功能;不能有效的保护媒体播放器里面的歌曲专有性;功能组合与用户的习惯相违背;界面太复杂以及操作太难等。随着人们对娱乐要求的提高,一款别致的、贴近用户操作习惯的音乐播放器非常值得去研究和开发。
第二章 相关技术简介
2.1 Java技术简介
Java 语言具有许多特点,当然也是它的优点,即简单性、分布性、高安全性、面向对象、与结构的无关性、可移植性、多线程及动态性等等。简单性:Java 语言是一种面向对象的语言, 如果你对面向对象的编程的基本概念有了一定的了解,就可以比较快地学会Java 语言编程。Java 力图在功能齐备的基础上不增加所谓的超级特点, 它毫不客气地取消了指针、运算符重载和多重继承的概念,以一种明晰的面向对象的方法帮助用户表达他们的想法。
Java是一种简单的语言。Java取消了其它的许多编程语言中十分繁琐的和难以理解的内容,例如C/C++中的指针,C++中类的多重继承等。Java语言在外观上让大多数程序员都感到很熟悉,这样程序员不需要经过长时间训练就能够学会使用这种新型的程序开发工具。Java要求的基本解释器约为40KB ,若加上基本的程序库,约为215KB。由于Java程序很小,因此在小型机上Java程序也能够很好地执行。
Java是一种面向对象的语言。这里的“对象”是指应用程序的数据及其操作方法。Java程序的设计思想不同于C语言基于过程的程序设计思想。设计面向对象的程序需要将编程重点放在资料和接口上。
Java是一种分布式的语言。Java有一个很周全的程序库,且很容易与HTTP和TCP/IP通信协议相配合。Java应用程序能在网络上开启并连结使用对象,就如同透过URL链接使用一个本地文件系统。利用Java来开发分布式的网络程序是Java的一个重要应用。
2.2 JMF媒体框架技术
JMF意为Java媒体框架(JMF)。该核心框架支持不同媒体(如:音频输出和视频输出)间的时钟同步。它是一个标准的扩展框架,允许用户制作纯音频流和视频流。
JMF实际上是Java的一个类包。JMF 2.1.1技术提供了先进的媒体处理能力,
从而扩展了Java平台的功能。这些功能包括:媒体捕获、压缩、流转、回放,以及对各种主要媒体形式和编码的支 持,如M-JPEG、H.263、MP3、RTP/RTSP (实时传送协议和实时流转协议)、Macromedias Flash、IBM的HotMedia和Beatniks的Rich Media Format (RMF)等。JMF 2.1.1还支持广受欢迎的媒体类型,如Quicktime、Microsofts AVI和MPEG-1等。此外,JMF 2.1.1软件中包括了一个开放的媒体架构,可使开发人员灵活采用各种媒体回放、捕获组件,或采用他们自己的定制的内插组件。
Sun以四种不同的专用版本提供JMF 2.1.1技术,满足专业开发人员的各类需求,第一个是一个轻便型版本,它完全采用Java语言编写,适用于任何Java兼容系统。此外,开发人员还可选 择分别适用于Solaris、Windows或Linux等操作系统的性能最优化软件包,以提高性能和能力。
JMF 2.1.1软件也是Java Media系列软件的一部分。Java Media系列软件包括Java 3D、Java 2D、Java Sound和Java Advanced Imaging等API。采用各种Java Media API,软件开发商人员就能容易、快速地为他们已有的各种应用程序和客户端Java小程序增添丰富的媒体功能,如流式视频、3D图像和影像处理等。就是 说,各种Java Media API发挥了Java平台的固有优势,将\"编写一次,到处运行\"的能力扩展到了图像、影像和数字媒体等各种应用领域,从而大大缩减了开发时间和降低了开发 成本。
2.3 JDK技术
Java编译器将Java源代码文件编译成可执行的Java字节码。Java源代码
文件的扩展名为 .java,Java编译器把这种扩展名的文件编译成扩展名为.class的文件。源文件中的每个类在编译后都将产生一个class文件,这意味一个Java源代码文件可能编译生成多个class文件。
Java解释器对编译生成的字节码格式的可执行程序的运行提供支持,它是运行非图形Java程序的命令行工具。它是Java Applet的简单测试工具,可使用它来测试Java Applet程序,而不需要WWW浏览器的支持。
JDK(Java Development Kit)是Sun Microsystems针对Java程序员开发的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK
(Software development kit)。
JDK是整个Java的核心,包括了Java运行环境(Java Runtime Environment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握 JDK是学好Java的第一步。最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等等。其中IBM的JDK包含的JVM(Java Virtual Machine)运行效率要比Sun JDK包含的JVM高出许多。而专门运行在x86平台的Jrocket在服务端运行效率也要比Sun JDK好很多。但不管怎么说,我们还是需要先把Sun JDK掌握好。
从SUN的JDK5.0开始,提供了泛型等非常实用的功能,其版本信息也不再延续以前的1.2,1.3,1.4,而是变成了5.0,6.0了。从6.0开始,其运行效率得到了非常大的提高,尤其是在桌面应用方面。JDK本身使用了Java语言编写,在我们下载的安装包里,有一个src.zip,里面就是JDK的源代码。
第三章 系统分析
3.1功能需求
3.1.1播放器的基本控制需求
根据项目的目标,我们可获得项目系统的基本需求,以下从不同的角度来描述系统的需求,并且使用用例图来描述,系统的功能需求,我们分成以下几部分来概括,即播放器的基本控制需要。
在播放器正在运行时,用户选择一首歌曲后单击“播放”按钮,播放器将播放选中的播放列表中的音乐,并同时显示当前进度;当歌曲未暂停或停止时,用户单击“暂停”按钮,播放器将进入暂停状态;播放器正在播放或暂停时,用户单击“停止”按钮,播放器将停止播放或暂停时,用户点击“上一首”或者“下一首”按钮,播放器将播放上一首或下一首歌曲。
3.1.2功能需求分析
从时序图3-2中可以看出播放器运行原理和调用过程。
主界面 播放列表 播放界面 播放方法 打开文件/文件夹 添加单首歌添加曲歌文选择播放歌曲 播放界面 播放歌曲 调用方法 播放方法 返回播放
图3-2
3.2运行及其它需求分析
硬件条件:赛扬CPU、 1G 内存、10G硬盘以上的PC机。 软件条件:Windows XP 、 eclipse 3.7.2 、 jdk1.6.0。
本软件对其它软件几乎没有依赖性,程序健壮性较好有较好的可维护性、可靠性、可理解性、效率。易于用户理解和操作。可维护性包括了可读性、可测试性等含义。可靠性通常包括正确性和健壮性。开发过程中,在各种矛盾的目标之间作权衡,并在一定的限制的条件下(经费、时间、可用的软、硬件资源等),使上述各方面最大限度的得到满足。
3.3 可行性分析
3.3.1 经济及技术可行性
经济可行性研究是对组织的经济现状和投资能力进行分析,对系统
建设运行和维护费用进行估算,对系统建成后可能取得的社会和经济效益进行估计。由于本系统是作为毕业设计由我自己开发的,在经济上的投入甚微,系统建
成之后将为今后播放音乐提供很大的方便,估算新系统的开发费用和今后的运行、维护费用,估计新系统将获得的效益,并将费用与效益进行比较,看是否有利。
开发、运行和维护费用主要包括:购买和安装设备的费用:计算机硬件、系统软件、电源、空调等;软件开发费用:若由实习单位的技术人员开发,则该项费用可以计入下面的人员费用一项;人员费用:系统开发人员、操作人员和维护人员的工资、培训费用等;消耗品费用:系统开发所用材料、系统正常运行所用消耗品,例如水、电费、打印纸、软盘、色带等开支。结合该毕业设计的整个过程所有开支都不大,所以经济上是可行的。
技术可行性要考虑现有的技术条件是否能够顺利完成开发工作,软硬件配置是否满足开发的需求等。该音乐播放器用的是java语言开发的,调试相对简单,当前的计算机硬件配置也完全能满足开发的需求,因此在技术上是绝对可行的。软件方面:用的是eclipse,它的速度快、可靠性能高、价格低,完全能满足系统的需求。
3.3.2 运行及法律可行性
对新软件运行后给现行系统带来的影响(包括组织机构、管理方式、工作环境等)和后果进行估计和评价。同时还应考虑现有管理人员的培训、补充,分析在给定时间里能否完成预定的系统开发任务等。 运行可行性是对组织结构的影响,现有人员和机构和环境对系统的适应性及人员培训补充计划的可行性。当前我国信息化技术已经相当普及,各类操作人员水平都有相当的高度,所以在运行上是可行性的。从时间上看,时间上是有点紧,但通过一个多月的努力基本功能现在已经基本实现。在法律可行性上从以下几点考虑:
① 所有技术资料都为合法。 ② 开发过程中不存在知识产权问题。
③ 未抄袭任何已存在的课程信息管理系统,不存在侵犯版权问题。 ④ 开发过程中未涉及任何法律责任。
综上所述,本系统的开发从技术上、从经济上、从法律上都是完全可靠的。
第四章 软件结构及界面设计
4.1 软件结构设计
本软件不仅要求功能完善,而且还要界面友好,因此,对于一个成功的软件设计,功能模块的设计是关键。在需求分析阶段,搞清楚了软件“做什么”的问题,形成了目标软件的逻辑模型。现在我们所要做的就是要把软件“做什么”的逻辑模型变换为“怎么做”的物理模型,即着手实现软件的需求。我们需要描述的是系统的总的体系结构。
软件的设计中最重要的就是软件的模块化。模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干个模块的过程。每个模块完成一个特定的功能,所有的模块按某种方法组织起来,成为一个整体,完成整个系统所要求的功能。
将系统划分为多个模块是为了降低软件系统的复杂性,提高可读性、可维护性,但模块的划分不能是任意的,应尽量保持其独立性。也就是说,每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单,即尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。
主界面 添加? 播放列表 播放? 播放音乐 程序结束 图4-1 音乐播放器系统流程图
4.2 界面功能模块设计
主界面功能如图4.2.1:
主界面 上一曲 播放/暂停 下一曲 停止 静音/声音 播放状态
图4.2.1
音乐播放器的界面有“文件”、“播放”、 2个主菜单,其中“文件”菜单包含“打开文件”、”添加音乐文件夹”“退出系统”三个菜单项,“播放”菜单里包含“播放/暂停”“停止”,“音乐魔方”,”播放模式”,“播放背景”。菜单项如图4-2所示。菜单主要功能模块如图4.2.2
文件 添添退加加出 音音乐 乐文件
菜单 播放 列表菜单 播播音播歌放放乐放词//魔模背暂暂方 式 景 停 停 单全随曲部机循循播环 环 放
列表菜单 播放 删除 清空列表 添加音乐 添加音乐
图4.2.2
下图是播放器主界面如图3.4:
图3.4
第五章 播放器详细设计
播放器采用JAVA为开发语言,下面详细介绍了系统各个模块与功能的实现。
5.1文件菜单详细设计
文件菜单只要包括:添加音乐文件,添加音乐文件夹,退出功能:如图5.1。
图5.1
5.1.1添加音乐文件主要实现方法:
/**
* 打开音乐文件 */
public void openMusicFile() { int selectState = 0; File chooserFile = null;
JFileChooser chooser = new JFileChooser(); MP3FileFilter mp3FileFilter = new MP3FileFilter(); WAVFileFilter wavFileFilter = new WAVFileFilter(); chooser.setCurrentDirectory(new File(\".\")); chooser.setDialogTitle(\"选择音乐文件\"); chooser.setApproveButtonText(\"确定\");
chooser.setApproveButtonToolTipText(\"选择音乐文件\");
chooser.addChoosableFileFilter(wavFileFilter); chooser.addChoosableFileFilter(mp3FileFilter);
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);//只选择文件
selectState = chooser.showOpenDialog(this);
if (selectState == JFileChooser.APPROVE_OPTION) { chooserFile = chooser.getSelectedFile();
if (chooserFile.toString().toLowerCase().endsWith(\".mp3\") ||
chooserFile.toString().toLowerCase().endsWith(\".wav\")) {
SongInfo newSong = new SongInfo(chooserFile.toString()); RightPanel.getInstance().addSongFiletoList(newSong); } } }
//监听事件,通过判断语句判断是否点击了添加音乐文件的菜单,然后调用openMusicFile();方法
public void actionPerformed(ActionEvent e) { String action = e.getActionCommand(); if (\"添加音乐文件\".equals(action)) { mini.openMusicFile(); }
5.1.2 添加音乐文件夹的功能实现
/**
* 打开音乐文件夹 */
public void openMusicFolder() {
int selectState = 0; File chooserFolder = null;
JFileChooser chooser = new JFileChooser(); chooser.setCurrentDirectory(new File(\".\")); chooser.setDialogTitle(\"选择音乐文件夹\"); chooser.setApproveButtonText(\"确定\");
chooser.setApproveButtonToolTipText(\"选择音乐文件夹\");
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);//只选择文件夹
selectState = chooser.showOpenDialog(this);
if (selectState == JFileChooser.APPROVE_OPTION) { chooserFolder = chooser.getSelectedFile(); String songPath[] = chooserFolder.list(); int length = songPath.length; for (int i = 0; i < length; i++) {
if (songPath[i].toLowerCase().endsWith(\".mp3\")
|| songPath[i].toLowerCase().endsWith(\".wav\")) { SongInfo newSong = new SongInfo(chooserFolder + File.separator + songPath[i]);
RightPanel.getInstance().addSongFiletoList(newSong); } } } }
//判断是否点击了添加音乐文件夹,成立就调用openMusicFolder的方法 public void actionPerformed(ActionEvent e) { String action = e.getActionCommand(); if (\"添加音乐文件\".equals(action)) { mini.openMusicFile();
} else if (\"添加音乐文件夹\".equals(action)) { mini.openMusicFolder(); }
5.1.3 退出功能实现
//在点击时间监听中判断是否点击的退出菜单,然后判断歌曲是否关闭,没有关闭则先关闭歌曲再销毁界面退出程序。
public void actionPerformed(ActionEvent e) {
String action = e.getActionCommand(); if (\"添加音乐文件\".equals(action)) { mini.openMusicFile();
} else if (\"添加音乐文件夹\".equals(action)) { mini.openMusicFolder(); } else if (\"退 出\".equals(action)) { if (player != null) { player.close(); player = null; }
mini.dispose();
Config.getInstance().saveConfig(); RightPanel.getInstance().savePlayList(); System.exit(0); }
5.2 播放菜单详细设计
播放菜单主要包括:播放/暂停,停止,音乐魔方,播放模式,歌词背景功能:如图5.2
图5.2
5.2.1 播放/暂停功能实现
/**
* 开始播放音乐 */
public static void start() {
if (player != null && !noCanPlaySong()) {
player.getGainControl().setLevel(soundSlider.getValue() / 100.0F);
setSoundState(getSoundState()); player.start(); //进度条更新
SliderUpdateThread.initThread(); SliderUpdateThread.getThread().start(); SliderUpdateThread.resume();
player.addControllerListener(SongControlListener.getInstance()); playerState = PlayerState.PLAY;
psButton.setIcon(new IconTool(\"images/pause.png\").getIcon()); psButton.setIconPath(\"images/pause.png\");
songNameLabel.setText(currentSong.getSongName());
int index = defaultSongInfo.indexOf(currentSong); defaultSongList.setSelectedIndex(index); LRCParse.getInstance().LoadLRC(); LRCLabel.getInstance().refresh(); PlayerInfoLabel.getInstance().refresh(); } }
/**
* 暂停音乐函数 */
public static void pause() { if (player != null) {
player.stop();
playerState = PlayerState.PAUSE;
psButton.setIcon(new IconTool(\"images/play.png\").getIcon()); psButton.setIconPath(\"images/play.png\"); PlayerInfoLabel.getInstance().refresh(); } }
//在时间监听中判断是否点击播放/暂停按钮,并调用相应方法播放,如果当前状态为播放就暂停音乐,如果状态为暂停或停止就播放音乐。
public void actionPerformed(ActionEvent e) { String action = e.getActionCommand(); if (\"添加音乐文件\".equals(action)) { mini.openMusicFile();
} else if (\"添加音乐文件夹\".equals(action)) { mini.openMusicFolder(); } else if (\"退 出\".equals(action)) { if (player != null) {
player.close(); player = null; }
mini.dispose();
Config.getInstance().saveConfig(); RightPanel.getInstance().savePlayList(); System.exit(0);
} else if (\"播放/暂停\".equals(action) && MusicPlayer.getPlayerState()
== PlayerState.PLAY) {
MusicPlayer.pause();
} else if (\"播放/暂停\".equals(action) && MusicPlayer.getPlayerState() == PlayerState.PAUSE) {
MusicPlayer.start();
} else if (\"播放/暂停\".equals(action) && MusicPlayer.getPlayerState() == PlayerState.UNREALIZED) {
MusicPlayer.initPlayer(null); MusicPlayer.start(); }
5.2.2 停止功能实现
/**
* 停止播放 */
public static void stop() { if (player != null) {
playerState = PlayerState.UNREALIZED;
psButton.setIcon(new IconTool(\"images/play.png\").getIcon()); psButton.setIconPath(\"images/play.png\"); SliderUpdateThread.pause();
timeSlider.setValue(0); timeLabel.setText(\"00:00|\" +
FormatUtils.formatTime(player.getDuration().getSeconds()));
player.close();
PlayerInfoLabel.getInstance().refresh(); } }
//判断是否点击停止菜单,并调用stop();方法 public void actionPerformed(ActionEvent e) { String action = e.getActionCommand(); if (\"添加音乐文件\".equals(action)) { mini.openMusicFile(); }
else if (\" 停 止 \".equals(action)) { MusicPlayer.stop(); } }
5.2.3 音乐魔方实现
音乐魔方只要是主界面的一个迷你模式,能够实现播放/暂停,快进/快退,退出功能如图:5.2.3。
图5.2.3
/**
* 将Image图像转换为Shape图形 *
* @param img * @param isFiltrate
* @return Image图像的Shape图形表示 * @author Hexen
*/
public Shape getImageShape(Image img) {
ArrayList ArrayList // 筛选像素 // 首先获取图像所有的像素信息 PixelGrabber pgr = new PixelGrabber(img, 0, 0, -1, -1, true); try { pgr.grabPixels(); } catch (InterruptedException ex) { ex.getStackTrace(); } int pixels[] = (int[]) pgr.getPixels(); // 循环像素 for (int i = 0; i < pixels.length; i++) { // 筛选,将不透明的像素的坐标加入到坐标ArrayList x和y中 int alpha = getAlpha(pixels[i]); if (alpha == 0) { continue; } else { x.add(i % width > 0 ? i % width - 1 : 0); y.add(i % width == 0 ? (i == 0 ? 0 : i / width - 1) : i / width); } } // 建立图像矩阵并初始化(0为透明,1为不透明) int[][] matrix = new int[height][width]; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { matrix[i][j] = 0; } } // 导入坐标ArrayList中的不透明坐标信息 for (int c = 0; c < x.size(); c++) { matrix[y.get(c)][x.get(c)] = 1; } /* * 逐一水平\"扫描\"图像矩阵的每一行,将不透明的像素生成为Rectangle,再将每一行的Rectangle通过Area类的rec对象进行合并, * 最后形成一个完整的Shape图形 */ Area rec = new Area(); int temp = 0; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { if (matrix[i][j] == 1) { if (temp == 0) temp = j; else if (j == width) { if (temp == 0) { Rectangle rectemp = new Rectangle(j, i, 1, 1); rec.add(new Area(rectemp)); } else { Rectangle rectemp = new Rectangle(temp, i, j - temp, 1); rec.add(new Area(rectemp)); temp = 0; } } } else { if (temp != 0) { Rectangle rectemp = new Rectangle(temp, i, j - temp, 1); rec.add(new Area(rectemp)); temp = 0; } } } temp = 0; } return rec; } /** * 获取像素的Alpha值 * * @param pixel * @return 像素的Alpha值 */ private int getAlpha(int pixel) { return (pixel >> 24) & 0xff; } @Override public void paint(Graphics g) { // super.paint(g); //运行此行会导致鼠标进入窗体时窗口闪烁 g.drawImage(img, 0, 0, null); bf.repaint(); kj.repaint(); kt.repaint(); zt.repaint(); fh.repaint(); tj.repaint(); } // public static void main(String[] args) { // repanl sample = new repanl(); // sample.setVisible(true); // } 5.2.4 播放模式功能实现 /** * 随机播放 */ public static void randomSong() { int randNumber = (int) (Math.random() * (defaultSongInfo.size() - 1)); initPlayer(defaultSongInfo.elementAt(randNumber)); start(); defaultSongList.setSelectedIndex(randNumber); } 5.2.5 歌词背景功能实现 歌词背景菜单包含风车,倾听,蒲公英,许愿,无背景,5个子菜单。如图5.2.5: 图:5.2.5 /** * 加载指定歌词背景的属性 * @param file是属性文件 */ private void loadProperties(String path) { try { pp.load(FileUtils.getInputStream(path));// 读取属性文件 } catch (FileNotFoundException e) { System.out.println(\"FileNotFound\"); } catch (IOException e) { System.out.println(\"IOException\"); } } /** * 设置歌词背景的属性 * @param i 是属性的下标 */ public void setProperties(int i) { if (i >= 0 && i < ComVariable.TOTAL_LRC_PROPERTIES) { String path = \"minimusic/syj/properties/lrc/lrc\" + i + \".properties\"; loadProperties(path); Config.getInstance().setLrcbg(i); } } /** * 得到前景色 * @return 前景色 */ public Color getForegroundColor() { String decode = pp.getProperty(\"fgColor\"); if (decode == null) { return new Color(0, 255, 0); } return Color.decode(decode); } /** * 得到背景色 * @return 背景色 */ public Color getBackgroundColor() { String decode = pp.getProperty(\"bgColor\"); return Color.decode(decode); } /** * 得到背景图片Image * @return 背景图片 */ public Image getBackgroundImage() { String imgPath = pp.getProperty(\"bgImage\"); return new IconTool(imgPath).getImage(); } public static LRCProperties getInstance() { return lrcp; } /** * 设置歌词背景 * @param index为歌词背景的下标 */ public void setLRCBackImage(int index) { if (index < 0 || index >= bgImageMenuItem.length || index == bgImageNum) { return; } bgImageMenuItem[index].setIcon(new IconTool(\"images/select.png\").getIcon()); if (bgImageNum != -1) { bgImageMenuItem[bgImageNum].setIcon(null); } lrcp.setProperties(index); lrcLabel.repaint(); bgImageNum = index; } 5.3 皮肤功能详细设计 此功能主要采用对话框形式显示皮肤缩略图,然后根据自己喜好选择设置皮肤,也可以点击下面的更换颜色选择器自己配色。如图5.3 图5.3 主要功能实现代码: /** * 皮肤类 * @author jys1109 */ public class MySkin { private static MySkin mySkin = new MySkin(); private Config config = Config.getInstance(); private Properties pp = new Properties(); private int themeNumer = config.getTheme(); private MySkin() { setTheme(config.getTheme()); } /** * 加载主题 * @param path */ private void loadTheme(String path) { try { pp.load(FileUtils.getInputStream(path));// 读取属性文件 } catch (FileNotFoundException e) { System.out.println(\"FileNotFound\"); } catch (IOException e) { System.out.println(\"IOException\"); } } /** * 设置主题 * @param i */ public void setTheme(int i) { String path = \"minimusic/syj/properties/theme/theme\" + i + \".properties\"; loadTheme(path); config.setTheme(i); this.themeNumer = i; refreshSystem(); } /** * 系统UI进行更新 */ private void refreshSystem() { TitlePanel.getInstance().setTheme(themeNumer); MyMenuBar.getInstance().setMenuBackgroundColor(getBackgroundColor()); MyPopupMenu.getInstance().setBackgroundColor(getBackgroundColor()); BottomPanel bpnl = BottomPanel.getInstance(); bpnl.setBackgroundColor(getForegroundColor()); MySliderUI.setSliderColor(getForegroundColor()); bpnl.getTimeSlider().setUI(new MySliderUI(bpnl.getTimeSlider())); bpnl.getSoundSlider().setUI(new MySliderUI(bpnl.getSoundSlider())); bpnl.getSongNameLabel().setForeground(getListTextColor()); bpnl.getTimeLabel().setForeground(getListTextColor()); MyTabbedPaneUI.setDefaultColor(getForegroundColor()); RightPanel.getInstance().getListTabPnl().setUI(new MyTabbedPaneUI()); RightPanel.getInstance().getListTabPnl().setForeground(getListTextColor()); MyCellRenderer.setForegroundColor(getListTextColor()); MyCellRenderer.setBackgroundColor(getForegroundColor()); MiniMusic.getInstance().setBorderColor(getListTextColor()); MiniMusic.getInstance().repaint(); } public Color getBackgroundColor() { return Color.decode(pp.getProperty(\"bgColor\")); } public Color getForegroundColor() { return Color.decode(pp.getProperty(\"fgColor\")); } public Color getListTextColor() { return Color.decode(pp.getProperty(\"ltColor\")); } public static MySkin getCurrentSkin() { return mySkin; } } 当点击更换按钮时弹出系统颜色选择器,如图5.3.1 图5.3.1 主要功能实现代码: public void actionPerformed(ActionEvent e) { Object obj = e.getSource(); if (obj == ccButton) { Color newColor = JColorChooser.showDialog(this, \"更换颜色\null); if (newColor != null) { titlePanel.setSkinColor(newColor); MiniMusic.getInstance().repaint(); } } 5.4 播放按钮详细设计 播放按钮主要包括:上一曲/下一曲,播放/暂停,停止,声音:开/关。如图5.4 主要功能实现代码: /** * 开始播放音乐 */ public static void start() { if (player != null && !noCanPlaySong()) { player.getGainControl().setLevel(soundSlider.getValue() / 100.0F); setSoundState(getSoundState()); player.start(); //进度条更新 SliderUpdateThread.initThread(); SliderUpdateThread.getThread().start(); SliderUpdateThread.resume(); player.addControllerListener(SongControlListener.getInstance()); playerState = PlayerState.PLAY; psButton.setIcon(new IconTool(\"images/pause.png\").getIcon()); psButton.setIconPath(\"images/pause.png\"); songNameLabel.setText(currentSong.getSongName()); int index = defaultSongInfo.indexOf(currentSong); defaultSongList.setSelectedIndex(index); LRCParse.getInstance().LoadLRC(); LRCLabel.getInstance().refresh(); PlayerInfoLabel.getInstance().refresh(); } } /** * 暂停音乐函数 */ public static void pause() { if (player != null) { player.stop(); playerState = PlayerState.PAUSE; psButton.setIcon(new IconTool(\"images/play.png\").getIcon()); psButton.setIconPath(\"images/play.png\"); PlayerInfoLabel.getInstance().refresh(); } } /** * 停止播放 */ public static void stop() { if (player != null) { playerState = PlayerState.UNREALIZED; psButton.setIcon(new IconTool(\"images/play.png\").getIcon()); psButton.setIconPath(\"images/play.png\"); SliderUpdateThread.pause(); timeSlider.setValue(0); timeLabel.setText(\"00:00|\" + FormatUtils.formatTime(player.getDuration().getSeconds())); player.close(); PlayerInfoLabel.getInstance().refresh(); } } /** * 清空所有信息 */ public static void clear() { if (player != null) { playerState = PlayerState.UNREALIZED; psButton.setIcon(new IconTool(\"images/play.png\").getIcon()); psButton.setIconPath(\"images/play.png\"); SliderUpdateThread.pause(); timeSlider.setValue(0); player.close(); } timeLabel.setText(\"00:00|00:00\"); songNameLabel.setText(\"播放列表中没有可以播放的歌曲\"); LRCLabel.getInstance().setStandOutSign(0); } /** * 下一首歌曲 */ public static void nextSong() { if (noCanPlaySong()) { return; } int index = defaultSongInfo.indexOf(currentSong); if (index == defaultSongInfo.size() - 1) { index = 0; } else { index++; } if (defaultSongInfo.elementAt(index).isCanPlay()) { initPlayer(defaultSongInfo.elementAt(index)); start(); } else { currentSong = defaultSongInfo.elementAt(index); nextSong(); } } /** * 上一首歌曲 */ public static void priorSong() { if (noCanPlaySong()) { return; } int index = defaultSongInfo.indexOf(currentSong); if (index == 0) { index = defaultSongInfo.size() - 1; } else { index--; } if (defaultSongInfo.elementAt(index).isCanPlay()) { initPlayer(defaultSongInfo.elementAt(index)); start(); } else { currentSong = defaultSongInfo.elementAt(index); priorSong(); } } 5.5 歌词同步详细设计 主要实现了读取同步对应功能,并实现了类似酷狗歌词时间轴的歌词拖动功能,如图5.5 图5.5 歌词功能实现代码: /** * 调整歌词进度 * @param decrease是移动的个数 * @param media为true是调整音乐进度,false时只调整歌词进度 */ public void adjustLRC(int decrease, boolean media) { if (lrcStringList.size() != 0 && (standOutSign + decrease) < lrcStringList.size() - 1&& (standOutSign + decrease) >= 0) { this.standOutSign = standOutSign + decrease; nowTime = lrcStringList.get(this.standOutSign).getTime(); if (media) { MusicPlayer.pause(); SliderUpdateThread.pause(); MusicPlayer.getPlayer().setMediaTime(new Time(lrcStringList.get(this.standOutSign).getTime() * 1.0)); MusicPlayer.start(); SliderUpdateThread.resume(); } repaint(); } } /** * 更新歌词 * @param time时歌词播放的时间 */ public void updateLRC(int time) { if (!isAdjustLrc()) { this.nowTime = time; int size = lrcStringList.size(); for (int i = 0; i < size; i++) { if (time >= lrcStringList.get(size - 1).getTime()) { standOutSign = size - 1; } else if (time >= lrcStringList.get(i).getTime() && time <= lrcStringList.get(i + 1).getTime()) { standOutSign = i; } } repaint(); } } 结 论 经过老师的悉心指导和自己的辛苦努力,大体上完成了“Java音乐播放器”的开发。但是由于时间仓促,仍有许多方面存在着不足,一些功能还是没有实现,比如播放器只可以播放java 本身支持的几种音乐格式,不能添加歌词同步,不能在线播放等,整个播放器还有许多功能需要待进一步的完善和改进。 经过对毕业设计从头到尾的设计和开发,使我在大学学到的知识应用的更加熟练,达到了学以致用。 在程序设计过程中,我体会到了只有实践才能掌握知识,书本上的知识是不够的,只有把理论与实践相结合才能够真正的学到知识。一个软件的设计,不可能一步到位,还需要不断的完善和补充。同时,系统中还存在许多问题,有待在日后的使用中发现和解决。编程前的深思熟虑是减少程序调试工作量的重要方法,只有进行充分考虑,才会减少调试过程中的工作量。虽然在开始写程序之前我们做了多的准备工作,但在真正的写程序时仍然发现许多问题,有些问题是分析时的疏漏,有些则是如果不做无论如何也想不到的。 致 谢 经过这么长时间的设计与开发,论文已基本完成。在此我非常感谢我的指导老师,她工作繁忙,又同时带多个学生,但仍不厌其烦的帮我找出论文中所出现的问题,并在我论文写作过程中给我全程指导,在百忙之中认真帮我审稿。再次感谢李天祥老师在我写论文过程中的细心指导!无论在理论上还是实践中,他都给我很大的帮助,使我得到不少的提高,这对于我以后的工作和学习都是一种巨大的帮助和财富,忠心感谢向他表示感谢。同时我也向曾经帮助过我的老师和同学致以最诚挚的感谢,在此对他们一一并表示感谢! 参考文献 [1] 施霞萍,张欢欢.java程序设计教程 第二版 机械功业出版社 2010,P20-315. [2] 耿素云,张跃平.Java实用教程[M].清华大学出版社,P10-300. [3] 原野,沈均义,刑东山.基于Java的音乐播放器.计算机机工程,2002年,P54-57. [4] 刘黎明,党东耀.Java Applet 多媒体播放器设计.计算机应用,2000,P2-78. [5] 潘传帮,杨瑞峰.Java实效编程百例.人民邮电出版社.2001,P34-54. [6] 李争,陆正中 .JBuilder 精髓.电子工业出版社,P56-59. [7] 张勇,基于Java的多媒体技术研究及实现.西安电子科技大学,P12-98. [8] Sun公司编著Java程序设计语言基础:实践指南.Sun Java技术网站电子文档 [9] Bruce Eckel编著.Java编程思想.机械工业出版社,P23-45. [10] IBM著作.Java 3D简介.IBM网站Java技术在线教程,P34-66. [11] 张桂珠 刘丽 陈爱国 Java面向对象程序设计(第2版)北京邮电大学出版 社,P23-75. [12] 毕广吉.Java程序设计实例教程[M]. 北京:冶金工业出版社,2007年,P87-90. [13] 王保罗.Java面向对象程序设计[M]. 北京:清华大学出版社,2003年.P12-32. 毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作 者 签 名: 日 期: 指导教师签名: 日 期: 使用授权说明 本人完全了解 大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名: 日 期: 学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。 作者签名: 日期: 年 月 日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 涉密论文按学校规定处理。 作者签名: 日期: 年 月 日 导师签名: 日期: 年 月 日 注 意 事 项 1.设计(论文)的内容包括: 1)封面(按教务处制定的标准封面格式制作) 2)原创性声明 3)中文摘要(300字左右)、关键词 4)外文摘要、关键词 5)目次页(附件不统一编入) 6)论文主体部分:引言(或绪论)、正文、结论 7)参考文献 8)致谢 9)附录(对论文支持必要时) 2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。 3.附件包括:任务书、开题报告、外文译文、译文原文(复印件)。 4.文字、图表要求: 1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写 2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画 3)毕业论文须用A4单面打印,论文50页以上的双面打印 4)图表应绘制于无格子的页面上 5)软件工程类课题应有程序清单,并提供电子文档 5.装订顺序 1)设计(论文) 2)附件:按照任务书、开题报告、外文译文、译文原文(复印件)次序装订 毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作 者 签 名: 日 期: 指导教师签名: 日 期: 使用授权说明 本人完全了解 大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名: 日 期: 学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。 作者签名: 日期: 年 月 日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 涉密论文按学校规定处理。 作者签名: 日期: 年 月 日 导师签名: 日期: 年 月 日 指导教师评阅书 指导教师评价: 一、撰写(设计)过程 1、学生在论文(设计)过程中的治学态度、工作精神 □ 优 □ 良 □ 中 □ 及格 □ 不及格 2、学生掌握专业知识、技能的扎实程度 □ 优 □ 良 □ 中 □ 及格 □ 不及格 3、学生综合运用所学知识和专业技能分析和解决问题的能力 □ 优 □ 良 □ 中 □ 及格 □ 不及格 4、研究方法的科学性;技术线路的可行性;设计方案的合理性 □ 优 □ 良 □ 中 □ 及格 □ 不及格 5、完成毕业论文(设计)期间的出勤情况 □ 优 □ 良 □ 中 □ 及格 □ 不及格 二、论文(设计)质量 1、论文(设计)的整体结构是否符合撰写规范? □ 优 □ 良 □ 中 □ 及格 □ 不及格 2、是否完成指定的论文(设计)任务(包括装订及附件)? □ 优 □ 良 □ 中 □ 及格 □ 不及格 三、论文(设计)水平 1、论文(设计)的理论意义或对解决实际问题的指导意义 □ 优 □ 良 □ 中 □ 及格 □ 不及格 2、论文的观念是否有新意?设计是否有创意? □ 优 □ 良 □ 中 □ 及格 □ 不及格 3、论文(设计说明书)所体现的整体水平 □ 优 □ 良 □ 中 □ 及格 □ 不及格 建议成绩:□ 优 □ 良 □ 中 □ 及格 □ 不及格 (在所选等级前的□内画“√”) 指导教师: (签名) 单位: (盖章) 年 月 日 评阅教师评阅书 评阅教师评价: 一、论文(设计)质量 1、论文(设计)的整体结构是否符合撰写规范? □ 优 □ 良 □ 中 □ 及格 □ 不及格 2、是否完成指定的论文(设计)任务(包括装订及附件)? □ 优 □ 良 □ 中 □ 及格 □ 不及格 二、论文(设计)水平 1、论文(设计)的理论意义或对解决实际问题的指导意义 □ 优 □ 良 □ 中 □ 及格 □ 不及格 2、论文的观念是否有新意?设计是否有创意? □ 优 □ 良 □ 中 □ 及格 □ 不及格 3、论文(设计说明书)所体现的整体水平 □ 优 □ 良 □ 中 □ 及格 □ 不及格 建议成绩:□ 优 □ 良 □ 中 □ 及格 □ 不及格 (在所选等级前的□内画“√”) 评阅教师: (签名) 单位: (盖章) 年 月 日 四川科技职业学院毕业设计(论文) 第 1 页 教研室(或答辩小组)及教学系意见 教研室(或答辩小组)评价: 一、答辩过程 1、毕业论文(设计)的基本要点和见解的叙述情况 □ 优 □ 良 □ 中 □ 及格 □ 不及格 2、对答辩问题的反应、理解、表达情况 □ 优 □ 良 □ 中 □ 及格 □ 不及格 3、学生答辩过程中的精神状态 □ 优 □ 良 □ 中 □ 及格 □ 不及格 二、论文(设计)质量 1、论文(设计)的整体结构是否符合撰写规范? □ 优 □ 良 □ 中 □ 及格 □ 不及格 2、是否完成指定的论文(设计)任务(包括装订及附件)? □ 优 □ 良 □ 中 □ 及格 □ 不及格 三、论文(设计)水平 1、论文(设计)的理论意义或对解决实际问题的指导意义 □ 优 □ 良 □ 中 □ 及格 □ 不及格 2、论文的观念是否有新意?设计是否有创意? □ 优 □ 良 □ 中 □ 及格 □ 不及格 3、论文(设计说明书)所体现的整体水平 □ 优 □ 良 □ 中 □ 及格 □ 不及格 评定成绩:□ 优 □ 良 □ 中 □ 及格 □ 不及格 (在所选等级前的□内画“√”) 教研室主任(或答辩小组组长): (签名) 年 月 日 教学系意见: 系主任: (签名) 年 月 日 四川科技职业学院毕业设计(论文) 第 2 页 学位论文原创性声明 本人郑重声明:所呈交的学位论文,是本人在导师的指导下进行的研究工作所取得的成果。尽我所知,除文中已经特别注明引用的内容和致谢的地方外,本论文不包含任何其他个人或集体已经发表或撰写过的研究成果。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式注明并表示感谢。本人完全意识到本声明的法律结果由本人承担。 学位论文作者(本人签名): 年 月 日 学位论文出版授权书 本人及导师完全同意《中国博士学位论文全文数据库出版章程》、《中国优秀硕士学位论文全文数据库出版章程》(以下简称“章程”),愿意将本人的学位论文提交“中国学术期刊(光盘版)电子杂志社”在《中国博士学位论文全文数据库》、《中国优秀硕士学位论文全文数据库》中全文发表和以电子、网络形式公开出版,并同意编入****《中国知识资源总库》,在《中国博硕士学位论文评价数据库》中使用和在互联网上传播,同意按“章程”规定享受相关权益。 论文密级: □公开 □保密(___年__月至__年__月)(保密的学位论文在解密后应遵守此协议) 作者签名:_______ 导师签名:_______ _______年_____月_____日 _______年_____月_____日 四川科技职业学院毕业设计(论文) 第 3 页 独 创 声 明 本人郑重声明:所呈交的毕业设计(论文),是本人在指导老师的指导下,独立进行研究工作所取得的成果,成果不存在知识产权争议。尽我所知,除文中已经注明引用的内容外,本设计(论文)不含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体均已在文中以明确方式标明。 本声明的法律后果由本人承担。 作者签名: 二〇一〇年九月二十日 毕业设计(论文)使用授权声明 本人完全了解**学院关于收集、保存、使用毕业设计(论文)的规定。 本人愿意按照学校要求提交学位论文的印刷本和电子版,同意学校保存学位论文的印刷本和电子版,或采用影印、数字化或其它复制手段保存设计(论文);同意学校在不以营利为目的的前提下,建立目录检索与阅览服务系统,公布设计(论文)的部分或全部内容,允许他人依法合理使用。 (保密论文在解密后遵守此规定) 作者签名: 二〇一〇年九月二十日 四川科技职业学院毕业设计(论文) 第 4 页 致 谢 时间飞逝,大学的学习生活很快就要过去,在这四年的学习生活中,收获了很多,而这些成绩的取得是和一直关心帮助我的人分不开的。 首先非常感谢学校开设这个课题,为本人日后从事计算机方面的工作提供了经验,奠定了基础。本次毕业设计大概持续了半年,现在终于到结尾了。本次毕业设计是对我大学四年学习下来最好的检验。经过这次毕业设计,我的能力有了很大的提高,比如操作能力、分析问题的能力、合作精神、严谨的工作作风等方方面面都有很大的进步。这期间凝聚了很多人的心血,在此我表示由衷的感谢。没有他们的帮助,我将无法顺利完成这次设计。 首先,我要特别感谢我的知道***老师对我的悉心指导,在我的论文书写及设计过程中给了我大量的帮助和指导,为我理清了设计思路和操作方法,并对我所做的课题提出了有效的改进方案。***老师渊博的知识、严谨的作风和诲人不倦的态度给我留下了深刻的印象。从他身上,我学到了许多能受益终生的东西。再次对周巍老师表示衷心的感谢。 其次,我要感谢大学四年中所有的任课老师和辅导员在学习期间对我的严格要求,感谢他们对我学习上和生活上的帮助,使我了解了许多专业知识和为人的道理,能够在今后的生活道路上有继续奋斗的力量。 另外,我还要感谢大学四年和我一起走过的同学朋友对我的关心与支持,与他们一起学习、生活,让我在大学期间生活的很充实,给我留下了很多难忘的回忆。 最后,我要感谢我的父母对我的关系和理解,如果没有他们在我的学习生涯中的无私奉献和默默支持,我将无法顺利完成今天的学业。 四年的大学生活就快走入尾声,我们的校园生活就要划上句号,心中是无尽的难舍与眷恋。从这里走出,对我的人生来说,将是踏上一个新的征程,要把所学的知识应用到实际工作中去。 回首四年,取得了些许成绩,生活中有快乐也有艰辛。感谢老师四年来对我孜孜不倦的教诲,对我成长的关心和爱护。 学友情深,情同兄妹。四年的风风雨雨,我们一同走过,充满着关爱,给我留下了值得珍藏的最美好的记忆。 在我的十几年求学历程里,离不开父母的鼓励和支持,是他们辛勤的劳作,无私的付出,为我创造良好的学习条件,我才能顺利完成完成学业,感激他们一直以来对我的抚养与培育。 最后,我要特别感谢我的导师***老师、和研究生助教***老师。是他们在我毕业的最后关头给了我们巨大的帮助与鼓励,给了我很多解决问题的思路,在此表示衷心的感激。老师们认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我收益匪浅。他无论在理论上还是在实践中,都给与我很大的帮助,使我得到不少的提高这对于我以后的工作和学习都有一种巨大的帮助,感谢他耐心的辅导。在论文的撰写过程中老师们给予我很大的帮助,帮助解决了不少的难点,使得论文能够及时完成,这里一并表示真诚的感谢。 四川科技职业学院毕业设计(论文) 第 5 页 致 谢 这次论文的完成,不止是我自己的努力,同时也有老师的指导,同学的帮助,以及那些无私奉献的前辈,正所谓你知道的越多的时候你才发现你知道的越少,通过这次论文,我想我成长了很多,不只是磨练了我的知识厚度,也使我更加确定了我今后的目标:为今后的计算机事业奋斗。在此我要感谢我的指导老师——***老师,感谢您的指导,才让我有了今天这篇论文,您不仅是我的论文导师,也是我人生的导师,谢谢您!我还要感谢我的同学,四年的相处,虽然我未必记得住每分每秒,但是我记得每一个有你们的精彩瞬间,我相信通过大学的历练,我们都已经长大,变成一个有担当,有能力的新时代青年,感谢你们的陪伴,感谢有你们,这篇论文也有你们的功劳,我想毕业不是我们的相处的结束,它是我们更好相处的开头,祝福你们!我也要感谢父母,这是他们给我的,所有的一切;感谢母校,尽管您不以我为荣,但我一直会以我是一名农大人为荣。 通过这次毕业设计,我学习了很多新知识,也对很多以前的东西有了更深的记忆与理解。漫漫求学路,过程很快乐。我要感谢信息与管理科学学院的老师,我从他们那里学到了许多珍贵的知识和做人处事的道理,以及科学严谨的学术态度,令我受益良多。同时还要感谢学院给了我一个可以认真学习,天天向上的学习环境和机会。 即将结束*大学习生活,我感谢****大学提供了一次在**大接受教育的机会,感谢院校老师的无私教导。感谢各位老师审阅我的论文。 因篇幅问题不能全部显示,请点此查看更多更全内容