版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《Java课程实习》报告题目音乐播放器学号201011621335201011621329200811621320学生姓名朱剑峰薛文博刘彬联系方式137630097391372690335615766274948所在专业计算机科学与技术所在班级1103指导教师刘思凤成绩教师签字课程设计时间:2013年6月1日至2013年6月25日评语:目录摘要 21 绪论 31.1 课题背景 31.2 课程设计目的 31.3 课程设计实验环境 31.4 课程设计要求 42 课程系统分析 42.1 程序界面布局设计 42.2 功能分析 43 系统设计与实现 53.1 系统功能结构图 53.2 模块功能设计 53.2.1 “菜单栏”功能设计 53.2.2 “动态音频播放进度显示”功能设计 93.2.3 “歌曲搜索”功能实现 93.2.4 “歌曲播放/停止”功能实现 103.2.5 “列表展示”功能实现 114 系统优点与缺点 134.1 系统优点 134.2 系统缺点 135 系统开发过程 14Myeclipse平台开发版本 14NetBeans开发平台版本 156 设计总结 16参考文献 17附录 18关键代码 181、音乐解码函数(decodeMusic) 182、播放线程类(classPlayThread) 203、控制滚动条类(classRunSlider) 21摘要JAVA是目前最流行的软件开发语言之一,称为网络上的“世界语”。JAVA适合开发基于多媒体、与平台无关、用面向对象的方法进行的基于Internet、Intranet、Extranet的Applet和应用程序。它具有简单高效、面向对象、不依赖于机器结构的特点,支持多线程、分布和并发机制。用JAVA开发的应用软件在可移植性、健壮性、安全性等方面大大优于已存在的其他编程语言。JAVA是一门包含多种知识的学科,提供了丰富的类库,能最大限度地利用网络。JAVA可广泛用于面向对象的事件描述、处理面向对象的企业型的应用开发,还应用于Internet系统管理、Web页面设计、Internet可视化软件开发等方面。在学习的过程中我学到了许多以前没有学到的概念和新鲜资讯。运用这些知识可以完成老师交给我的课程设计任务。这次老师让我们自己拟订题目,给了我们很大的想象空间。我们自选了一个音乐播放器的课程设计题目。本小组之所以选择做音乐播放器,全赖于本小组成员均对音乐有浓厚的兴趣,虽热衷于听音乐,但现在网上流传的音乐播放器还不能满足我们这些发烧友,像高清音乐等,这些高品质的作品若在现流行的播放器上运行,这只能做普通音乐文件“享用”。话说如此,因本小组开发能力有限,课程比较多,时间所限,以至暂且把音乐播放器开发到version0.9。主要功能还未能达到我们想要的境界。小结一下,本小组的播放器所具备的功能有如下,添加音乐,删除音乐,搜索音乐,更换播放器皮肤,更改播放模式等。(详见2.2节)本次设计的播放器在具备基本功能的基础上,还具有很强的扩展性,如歌词导入,可播放音乐类型的增加等等这些还未实现的地方我们都提供了许多接口,以便日后做修改或增加功能所用。能够具备一个属于自己的播放器确实是一件非常高兴的事情,能够一边开发一边享受音乐的熏陶更是一件难得可贵的经历,愿此摘要能让读者感受得到笔者的兴奋与成功。音乐播放器任务分工系统设计与代码实现:朱剑峰系统测试与维护:薛文博需求与功能分析:刘彬指导教师:刘思凤绪论课题背景随着社会电子音乐文件的与日俱增,作为现在最流行的音乐文件*.mp3,*.wav文件的数量和规模也在比以往的任何时候要多,不论是电台DJ需要使用方便而有效地管理自己所使用的音乐文件,还是个人。在计算机日益普及的今天,若采用一套有效的音乐播放器。将自己所收藏的大量的音乐文件能随时随地的播放,这将方便于众用户听音乐的需求。通过使用本音乐播放器能为音乐爱好者带来意想不到的收获。课程设计目的《应用软件开发实习》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计专题实际是计算机相关专业学生学习完《应用软件开发实习》课程后,进行的一次全面的综合训练,程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。课程设计实验环境程序运行在安装有windows操作系统的计算机上(台式机和笔记本),兼容windows2K/XP/Vista/7/8计算机硬件基本要求(仅供参考):CPU:1G;内存:512M.;显卡:256M显存;文件播放:需要安装有声卡、要求安装有语音库。JAVA程序设计语言及相应的集成开发环境,Myeclipse和Netbeans开发工具。课程设计要求按课程设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握JAVA程序设计的基本技能和面向对象的概念和方法;了解多线程、安全和网络等编程技术。同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。课程系统分析程序界面布局设计(1)创建一个JFrame类,类名为MyPlayer类。(2)向对话框中添加JSlider控件、JList控件、JLabel控件、JJToggleButton控件、MenuBar菜单、JPanel容器、JToolBar容器以及JScrolPanel容器。(3)设置所添加的控件的属性,以及使用Java的界面风格,本设计共使用了6种Java的不同界面风格。功能分析MyPlayer播放器主要对常用Windows音频格式的文件实现播放控制:主界面功能菜单栏功能添加音乐;添加音乐文件(即导入一个或多个音乐文件至列表当中);添加音乐目录(即导入文件夹中所有的音乐文件至列表当中);控制;随机播放;顺序播放;单曲循环;设置歌词(有待开发);更换皮肤;默认、深海世界、迷人金属、香韵咖啡、骇客帝国、浪漫满屋(均为java的界面风格)关于;帮助(记录作者的相关信息以及软件开发的日期);动态音频播放进度显示;正在播放歌曲在顶层的显示播放歌曲的时间长度的显示以及正在播放时间的长度的显示滚动条随播放状态改变显示歌曲搜索功能;根据关键字搜索对应的歌曲;歌曲播放/停止功能;上一首;(播放上一首歌曲并根据播放模式来选择)下一首;(播放下一首歌曲并根据播放模式来选择)播放/停止;(播放或停止歌曲)双击播放/双击停止;(在列表中对指定歌曲的操作)列表展示功能;隐藏/显示列表;移除单个音乐文件;移除所有音乐文件;显示当前歌曲数目,播放模式,皮肤情况;系统设计与实现系统功能结构图MyPlayer播放器的功能结构图如图3-1。图3-1主界面功能图模块功能设计“菜单栏”功能设计“菜单栏”功能结构图如图3-2-1。图3-2-1菜单栏功能结构“添加音乐”功能实现当点击“添加歌曲/文件夹”选择“添加本地歌曲”或“添加本地歌曲文件夹”的时候,这时候会触发这两个JMenuItem事件,调用了open()函数(opendir()函数),即将选中的音乐文件(或文件夹内所有音乐文件)的信息(名称与路径)放入nameVector和urlVector当中。并修改listCount的值,显示歌曲的总数,最后将nameVector的所有内容放入list列表当中。如图3-2-1-1。图3-2-1-1(左上)选择操作,(左下)选择目录,(右下)列表显示“控制”功能实现当选择“控制”功能的任意一项,则会使全局的chosenMethod整型变量的值根据选择的项赋对应的值,值域为1(随机播放)、2(顺序播放)、3(单曲循环)。因播放器的播放功能是一个while(true)的循环,每当播放歌曲时候,播放前会由函数chooseNextSong()根据chosenMethod的值来选择下一首歌是那一首。如果值是1,则会由[0,listCount(列表歌曲总数)],获取随机数,再根据play()函数播放;如果值是2,则根据chosenIndex(当前播放歌曲号),直接加一,再根据play()函数播放;如果值是3,则chosenIndex(当前播放歌曲号)的值不再修改,再根据play()函数播放;如图3-2-1-2。图3-2-1-2(左上)选择操作;(左下)随机播放后歌曲序号,(此处为后台显示),起始播放第1首歌,下一首歌为第295首歌曲;(右侧)为列表显示,指向对应歌曲,并且列表底下显示“随机播放”“更换皮肤”功能实现当选择“更换皮肤”功能的任意一项,则会触发对应事件的发生,调用函数loadskin1()或loadskin2()等等。此时会调用LookAndFeel的类,指定java包含的皮肤风格。Loadskin1()对应“默认”,loadskin2()对应“深海世界”等等。选择皮肤后,主界面底下会显示对应的提示,如选择了“浪漫满屋”,地下就会显示“皮肤:浪漫满屋”。如图3-2-1-3所示。图3-2-1-3(左)选项显示,(右)换肤后主界面情况。“关于”功能实现当选择“帮助”功能时,则弹出信息窗口,提示本软件的开发时间与开发人员相关信息。如图3-2-1-4所示。图3-2-1-4“动态音频播放进度显示”功能设计当歌曲播放正在播放时,则顶层“正在播放”处会显示歌曲的名称,当歌曲名称过长时候,超长部分会用省略号显示。同时会根据歌曲的格式,得到歌曲的长度,并显示在歌曲的右侧的JLabelfileTime中;另外会另起一个线程RunSlider来控制计时功能,每1秒钟,滚动条左侧JLabelrunningTime会根据播放的时间来修改,滚动条PlayerSlider则会每秒钟根据runingTime的值来移动。如图3-2-2所示图3-2-2正在播放歌曲中的动态播放进度显示。“歌曲搜索”功能实现在搜索栏中输入关键字,在回车确认,系统就会调用seachMusic()来搜索与关键字吻合的歌曲,并将其放入临时的VectortmpName当中,并显示其到list列表当中。如图3-2-3-1在临时的列表中选择所需要播放的歌曲,双击播放,同时临时列表消失,回复原来的列表,即导入nameVector的数据到list当中。当点击“X”按钮,若还在临时列表当中,则会清除临时列表并且恢复原来的列表;若已经恢复到临时列表,则搜索框中会返回提示“请输入搜索关键字...”。图3-2-3-1(上)搜索“陈奕迅”的歌曲(下)取消搜索后,搜索框的内容“歌曲播放/停止”功能实现“歌曲播放/停止”功能结构图如图3-2-4。图3-2-4“歌曲播放/停止”功能结构“上一首”“下一首”功能实现当点击“上一首”的按钮时,会根据按钮事件,若chosenMethod(播放方式)的值为1(即随机播放)则系统会调用chooseNextSong()来随机选择歌曲号来播放下一首歌;若chosenMethod不为1,则会调用previousMusic(),对chosenIndex(当前播放歌曲号)减一,再调用play()函数播放上一首歌曲。当点击“下一首”的按钮时,会根据按钮事件,若chosenMethod(播放方式)的值为1(即随机播放)则系统会调用chooseNextSong()来随机选择歌曲号来播放下一首歌;若chosenMethod不为1,则会调用nextMusic(),对chosenIndex(当前播放歌曲号)加1,再调用play()函数播放下一首歌曲。“播放/停止”“双击播放/停止”功能实现当点击“播放/停止”的按钮时候,若点击了“播放”,则会显示“停止”,同时会对列表正在选中的歌曲进行播放。同时会触发“动态音频播放进度显示”功能(3.2.2节所介绍),更改或增加播放信息;若点击了“停止”,则会显示“播放”,同时会对当前播放的歌曲进行停止,同样会触发“动态音频播放进度显示”功能,清除对应的显示。如图3-2-4-2图3-2-4-2(左)“播放”(右)“停止”“列表展示”功能实现“列表展示”功能结构图如图3-2-5。图3-2-5“列表展示”功能结构“隐藏/显示列表”功能实现当点击“显示列表/隐藏列表”的按钮时候,若点击了“显示列表”,则会显示“隐藏列表”,同时触发该事件,将原来的JFrame大框架的长度减少440个单位;若点击了“隐藏列表”,则会显示“显示列表”,同时触发该事件,将原来的JFrame大框架的长度增加440个单位。隐藏与显示列表这一功能虽然非常简单,但其重要性不可忽视,对于现在许多用户对音乐播放器的要求,就如自己的手机或着MP3一样,小巧、灵活、精致,至此这一项功能对于本小组一开始的设计就算是一个亮点。如图3-2-5-1所示。图3-2-5-1(左)隐藏列表,(右)显示列表“移除歌曲”功能文件实现当用鼠标对着列表的音乐文件右键的时候,会弹出两个选项“移除歌曲/移除所有歌曲”。当选择“移除歌曲”,则对所选择的音乐文件从列表中移除,即事件的触发调用了deleteSingle()函数,将对应的项从列表中移除,从nameVector中移除,从urlVector中移除;同理当选择“移除所有歌曲”的时候,事件触发调用deleteAll()函数,将列表清空,将nameVector中的元素清除。以上两者运行过后均会更新主界面底层“歌曲数目”,并且停止正在播放的歌曲。图3-2-5-2右键列表后出现的选择项“显示列表信息”功能实现由“添加音乐”功能(节)调用的open()、opendir()函数,会将保存在nameVector中的内容导入列表当中。当双击列表中的歌曲的时候,如果歌曲正在播放则会停止,如果播放器没有进行播放,则双击后就进行播放。当我们对着列表右键时,则会弹出列表,“移除歌曲/移除所有歌曲”,详见(节)系统优点与缺点系统优点windows界面风格可选择性,如上如所述,本音乐播放器具有6种皮肤可以更换。这大大满足了一个娱乐性的软件的需要,并且皮肤起名也符合用户的感官需求,像“深海世界”、“浪漫满屋”这些贴切而休闲的词汇更能吸引用户对播放器的使用。播放方式可选择性,对于喜欢听音乐的用户,会根据自己的需要选择一定的顺序来听音乐。列表隐藏的功能,符合大众播放器的功能,将播放器的界面弄得小巧而精致,即使隐藏了列表也不妨碍主要的播放器功能。搜索功能,随着网络的发达,音乐歌曲随处下载,人均播放列表的歌曲数目数以百计,这时候搜索功能就显得十分重要。本播放器根据关键字可以对列表进行搜索,并可以显示搜索后的列表,同时临时的列表不会缩减播放器功能。系统缺点本系统主要代码均在一个文件当中MyPlayer.java当中,由于本小组是用netBeans7.2.1开发平台开发的,对开发平台尚未了解,故暂且没有将代码弄得更具有可读性。本播放器还缺少暂停功能,在开发的最后版本(Music_Player0.9fornetBeans)还在改进当中。期待1.0版本对此功能的实现。本播放器对音乐文件的选择,仅仅.mp3文件以及.wav文件可播放。针对decodeMusic()解码函数的改善,尚未能解决。本播放器缺少歌词设置、显示功能。由于本小组对播放器的主界面还未想到一个满意的设计,所以歌词的实现暂且没有实现,待界面设计得灵活的时候,再添加歌词的功能。系统开发过程Myeclipse平台开发版本Version0.1菜单栏*文件包括“打开文件”“打开目录”“退出程序”*控制-随机播放-顺序播放-单曲循环-设置歌词*更换皮肤*帮助-关于2、上一首、下一首、停止/播放、隐藏列表4个button3、帮助显示-关于消息框。Version0.2能打开文件,显示文件名称在下面的框内,多个文件显示在框内!文件-退出程序实现能够显示列表与隐藏列表Version0.3双击能够播放暂停跟继续新增1、双击整个title换成为歌曲名称问题1、隐藏列表/显示列表list会缩水2、filedialog没有选择任何文件直接关闭会出现错误!(verson0.4中已解决)3、双击空的列表也可以开始(version0.6fornetBeans已经解决)Version0.31(Version0.3崩溃)Version0.4上一首,下一首能够在列表中显示上一首下一首播放功能新增:1、打开文件可以多选2、打开目录可以把整个目录里面的MP3、wav文件导出在列表中。问题:1、双击第一次是开始,第二次是停止(相对于同一首歌,相对于其它歌会停止, 也不播放)(version0.6fornetBeans已经解决)播放完一首歌后,不能自动往下播放。(version0.5forneatBeans已经解决)歌曲不能删除(version0.6fornetBeans已经解决)修改:1、“打开文件”“打开目录”分别换成添加本地歌曲,添加本地歌曲文件夹Version0.5皮肤(简单的颜色或者图片)更换皮肤-可供选择修改:1、项目已经转至netbeans平台上开发,并明明为Music_Player0.5forneatBeans新增:1、快捷键添加歌曲/文件夹添加了快捷键和关于加了快捷键Version0.6播放模式删除功能问题:1、播放列表可以拉出来,播放到名字比较长的歌曲,list会变宽!(已经完全解决,删 除正在播放的label)2、播放按钮,双击未解决(version0.6已经修复),上一首下一首置顶时候,以及 随机播放时候下一首上一首序号问题!(version0.6已经修复)。菜单项选中后,没有特别标志(解决办法1、换另外一种菜单项2、选中菜单项后字 体等改变)selected方法!是改变修改字体的!(version0.7添加1中解决)删除单首歌,序号不能改变(version0.7已经修复)NetBeans开发平台版本Version0.7fornetbeans添加底下:歌曲数目、播放模式、皮肤的显示歌曲名前面有序号音乐时间,以及滚动条”正在播放“显示的问题Version0.8fornetbeans添加搜索模块添加搜索功能搜索功能->搜索列表播放功能Version0.9fornetbeans1、修改播放器软件运行时的图标(将java的图标换成“射手”图标)设计总结JAVA是目前最流行的软件开发语言之一,称为网络上的“世界语”。JAVA适合开发基于多媒体、与平台无关、用面向对象的方法进行的基于Internet、Intranet、Extranet的Applet和应用程序。它具有简单高效、面向对象、不依赖于机器结构的特点,支持多线程、分布和并发机制。用JAVA开发的应用软件在可移植性、健壮性、安全性等方面大大优于已存在的其他编程语言。JAVA是一门包含多种知识的学科,提供了丰富的类库,能最大限度地利用网络。JAVA可广泛用于面向对象的事件描述、处理面向对象的企业型的应用开发,还应用于Internet系统管理、Web页面设计、Internet可视化软件开发等方面。在学习的过程中我学到了许多以前没有学到的概念和新鲜资讯。运用这些知识可以完成老师交给我的课程设计任务。这次老师让我们自己拟订题目,给了我们很大的想象空间。我们自选了一个音乐播放器的课程设计题目。课程设计的过程虽然是艰难而辛苦的,但是我却从中感到了快乐与欣慰。快乐是因为我以前对于JAVA的知识可以说是孤陋寡闻,但是通过这次课程设计我使自己的知识更加的丰富了,加大了自己的知识面。让自己的实力扩大了。所以我感到非常的快乐。欣慰是因为看着自己做出的课程设计得到了老师的认同,取得了成功。这次课程设计的整体过程是充实而满足的。参考文献[1](美)埃克尔(Eckel,B.)著,《Java编程思想》(第四版)陈昊鹏译.一北京:机械工业出版社,2007.6[2]刁成嘉著,《UML系统建模与分析设计》,机械工业出版社,2007.6[3]朱喜福著,《Java程序设计》(第2版),清华大学出版社,2009.10[4]辛运帏著,《Java语言程序设计》(第1版),人民邮电出版社,2009.10[5]叶核亚著,《Java程序设计实用教程》(第3版),电子工业出版社,2010.2[6]耿祥义,张跃平编著,《Java面向对象程序设计》.一北京:清华大学出版社,2010.1附录关键代码音乐解码函数(decodeMusic)解析:由于javaapplet播放声音,对应的格式只有一些原始格式如.au、.Wav、.Midi、.rfm格式,因此一下的解码函数就非常必要了,即将MP3等其它格式文件的音频等格式修改成系统能够实现的格式,并写入内存由此来实现播放功能。详细实现请阅读如下代码。publicvoiddecodeMusic(AudioInputStreamin){//开始解码MP3 AudioFormatformat=in.getFormat(); AudioFormatdecodedFormat=newAudioFormat( AudioFormat.Encoding.PCM_SIGNED,//音频编码技术 format.getSampleRate(),//每秒的样本数 16,//每个样本中的位数 format.getChannels(),//声道数(单声道1个,立体声2个,等等) format.getChannels()*2,//每帧中的字节数 format.getSampleRate(),false);//每秒的帧数和是否以big-endian //字节顺序存储单个样本中的数据 //然后重新获取一个新的输入流, AudioInputStreamdecodeIn=AudioSystem.getAudioInputStream( decodedFormat,in); /** *源数据行是可以写入数据的数据行。它充当其混频器的源。应用程序将音频字节写入源数据行,这样可处理字节缓冲并将它们传递给混频器。 *混频器可以将这些样本与取自其他源的样本混合起来,然后将该混合物传递到输出端口之类的目标(它可表示声卡上的音频输出设备)。 **/ SourceDataLinesdl=null; //然后 DataLine.Infoinfo=newDataLine.Info(SourceDataLine.class, decodedFormat); try{ /** *AudioSystem:类充当取样音频系统资源的入口点。此类允许查询和访问安装在系统上的混频器 ***/ sdl=(SourceDataLine)AudioSystem.getLine(info); sdl.open(decodedFormat); }catch(Exceptione){ e.printStackTrace(); } /**指示该行是否支持特定类型的控件。*/ if(sdl.isControlSupported(FloatControl.Type.PAN)){ //FloatControl对象提供对浮点值范围的控制 FloatControlpan=(FloatControl)sdl .getControl(FloatControl.Type.PAN); if(curPosition==Position.RIGHT){ pan.setValue(1.0f); }elseif(curPosition==Position.LEFT){ pan.setValue(-1.0f); } } sdl.start(); intnBytesRead=0; byte[]abData=newbyte[EXTERANAL_BUFFER_SIZE]; try{ while(nBytesRead!=-1){ //文件流的读写 nBytesRead=decodeIn.read(abData,0,abData.length); if(nBytesRead>=0){ sdl.write(abData,0,nBytesRead); } } }catch(Exceptione){ e.printStackTrace();return; }finally{ //通过在清空数据行的内部缓冲区之前继续数据I/O,排空数据行中的列队数据。 sdl.drain(); sdl.close(); }}播放线程类(classPlayThread)解析:本播放器只使用一个线程来实现歌曲播放的功能,若用户要更换歌曲或者停止音乐,则对线程重建,即杀死原线程再建立新的线程,其实现的效果还是跟原来线程一样。同时此线程包含了许多子功能,如更改播放模式,对“上一首”“下一首”显示“正在播放”等功能均在此线程上实现。详细内容请阅读如下代码。classPlayThreadextendsThread{ publicvoidrun(){ while(true){try{setInitShowing();//初始化滚动条以及计时label的值isStop=true;//标志状态,说明是停止了filename=(String)nameVector.get(chosenIndex).toString();//取chosenIndex对应的歌曲名称filepath=(String)urlVector.get(chosenIndex).toString();////取chosenIndex对应的歌曲路径System.out.println("我在播放:"+chosenIndex+""+filename);//后台输出检测/*设置“正在播放”的值,只输出前23个字符,以免超出长度,后面补...*/StringshowName=null;if(filename.length()>23){showName=filename.substring(0,23)+"..";}else{showName=filename;}showTileOfMusic.setText("正在播放:"+showName);Filefile=newFile(filepath);setTitle(filename);list.setSelectedValue(nameVector.get(chosenIndex),true);listIndex=chosenIndex;stporplySongButton.setText("停止");//修改停止/播放button的状态值AudioInputStreamin=AudioSystem.getAudioInputStream(file);//去音乐文件AudioFileFormataff=AudioSystem.getAudioFileFormat(file);//去音乐文件的格式(为了得到歌曲长度)musicLength=aff.getFrameLength()/aff.getFormat().getFrameRate();//取音乐文件的长度System.out.println("我有那么长:"+musicLength);//后台显示,用于检测
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全员英语培训课件
- 全员安全培训档案课件
- 消防安全生产事故分析
- 初级消防安全员培训指南
- 全口塑形技术
- 销售话术禁忌指南
- 全公司成本管理培训
- 健身推销话术宝典
- 电网企业职业发展蓝图
- 光电缆施工安全培训教案课件
- 2025年国际法考试试题及答案
- 2025年辅警笔试试题+答案
- 仓储部员工管理制度
- JG/T 381-2012建筑结构用冷成型焊接圆钢管
- 慢性便秘检查与评估中国专家共识(2024版)解读
- 2025年内蒙专技继续教育学习计划(公需课)考试及答案
- 对人类教育四个发展阶段的探析
- TTAF 051-2021 移动智能终端及应用软件用户个人信息保护实施指南 第5部分:终端权限管理
- 二零二五年度加油站与车辆清洗服务合作协议
- 2025版生物样本储藏租赁合同样本3篇
- 职业学院工会评优评先实施办法
评论
0/150
提交评论