基于MFC多媒体播放器_第1页
基于MFC多媒体播放器_第2页
基于MFC多媒体播放器_第3页
基于MFC多媒体播放器_第4页
基于MFC多媒体播放器_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C C C C 课程设计 课程设计 项目报告项目报告 目 录 1 项目简介 1 1 1 项目名称 1 1 2 功能概述 1 1 3 开发人员及职责 1 2 需求分析 1 2 1 功能需求 1 2 2 性能需求 2 3 系统设计 3 3 1 代码设计 3 3 2 流程图 13 4 系统实现及测试 17 5 项目总结 20 5 1 总体总结 20 5 2 个人总结 21 1 项目简介 1 1 项目名称 多媒体播放器 1 2 功能概述 此款媒体播放器项目具有以下功能 1 本地设定目录中包含音频文件的浏览和播放 支持 mp3 格式 2 本地设定目录中包含图片文件的浏览 支持 bmp 格式 3 本地设定目录中包含视频文件的浏览和播放 支持 mp4 格式 4 最近播放列表功能 保存最近播放的 10 个文件 保存最近追加的 10 个文件 视 频 音频 图片是分开的 都有最近播放列表和最近追加列表 1 3 开发人员及职责 负责视频模块 以及最后的模块整合 报告的编写 负责音频模块 报告的编写 负责图片模块 报告的编写 2 需求分析 2 1 功能需求 本设计将要实现的是一个单机多媒体播放器 可以对音频 视频 图片进行查看 从 其目标功能及特点分析 将本软件功能划分如下 1 视频播放器 可以打开 MP4 格式的视频文件 在本地文件夹中将 MP4 格式的视频文件添加至播放列表 点击播放 或双击列表里的 所选项目 就可跳转至视频播放窗口 在播放窗口里 查看视频时 有 播放 暂停 停止 功能 播放中 还有 前进 后退 功能 即快进快退功能 以 4 秒为一个单位 这个单位也可以在代码中进行修改 在观看视频时 还有 上一曲 下一曲 功能 即查看之前添加在播放列表里的 视频项 同时 也可以选择播放模式 循环 顺序 随机 该功能也是基于播放列 表实现的 在右边功能键里 还有音量调节 静音功能 除此以外 还可以进行全屏浏览 按 ESC 退出全屏 在主页面 还有两个数据框 最近追加项目 和 最近播放项目 可以直观地 看到最近播放项目 且可以手动清空所有项目 这两个列表只按照时间 保存最近的 项目 且最多保存 10 个 2 音频播放器 可以打开 MP3 格式的音频 在本地文件夹中将 MP3 格式的视频文件添加至播放列表 点击播放 或双击列表 里的所选项目 就可跳转至音频播放窗口 并且 在主窗口 还有两个数据框 最近 追加项目 和 最近播放项目 可以直观地看到最近播放项目 且可以手动清空所 有项目 这两个列表只按照时间 保存最近的项目 且最多保存 10 个 此处为该多媒体公共窗口 功能相同 下面的图片浏览器也是一样的 在播放窗口里 听取音频时 有 播放 暂停 停止 功能 同样也会有 前进 后退 功能 上一曲 下一曲 功能 播放模式中的 循 环 顺序 随机 这些功能与上面所述的视频播放器相同 3 图片浏览器 可以打开 BMP 格式的图片 主窗口同视频 音频播放器一样 在此不多赘述 在浏览图片窗口中 会有 上一张 下一张 功能键 可以在 播放列表 最近 播放项目 最近追加项目 任何一个列表中循环 可以自由选择 当图片浏览到所选 列表的最后一张时 会自动循环至列表第一张 4 在主窗口的中 在列表中已添加文件后 有两种方式可以打开文件 一是选 中想要打开的文件 点击 播放文件 按钮 二是直接双击列表中的文件 便可进入 到相应子窗口进行查看 5 当单独拿出 exe 文件运行时 会自动在 exe 所在文件里创建 9 个文本文档 分别存放三个模块 视频 音频 图片 的三个列表 播放列表 最近播放项目 最 近追加项目 信息 2 2 性能需求 1 硬件平台要求 由于本软件为单机软件 不需进行大量的数据读写和数据交换 故对系统硬件配 置的要求并不高 只要能够平稳运行 Windows 操作系统的硬件平台 都能够使用本软 件 2 软件开发环境 1 OS Microsoft Windows XP SP2 2 Complier Visual C 6 0 Visual Studio 2005 Team System 或更高版本 3 MSDN Library 3 系统设计 3 1 代码设计 1 音频 视频模块 1 创建播放器对话框 右击 Dialog 点击插入 在弹出的对话框中点击 Dialog 再点击新建 双击新建的得对话框的 ID 弹出新建的对话框 删除里面所有的控件 右击 建立类向导 此时弹出 Adding a class 对话框 点击 ok 输入 name 为 player 点击确定后退出 再在对话框中右击 选择插入 ActiveX 控件 选择 Windows Media Player 之后在对话框中可以看到一个视频控件 右击 选择属性 在控制中将 选择模式改为 None 在视频控件中也就看不到一开就有的按键了 再次右击视频控件 选择建立类向导 点击 Member Variables 选择视频控件的 ID 默认为 ID OCX1 点击 Add Variables 此时会弹出一个对话框 点击确定后 弹出 Comfirm Class 对话框后 点击 OK 此时可以看到建立了很多 个类 之后为添加成员变量 Name 为 m play Category 为 Control Variable Type 为 CWMPPlayer4 点击确定之后可以看到下面的效果 2 控件与函数 声明全局变量 CString playname 用于记录播放地址 int ntype 用于记录播放的类 型 int num1 num2 num1 用于记录播放的地址在播放列表中的位置 num2 用于记录播 放列表中总的播放地址 构建成员函数 void player Onplay CString pname int n int m int t playname pname num1 n num2 m ntype t 将前台所选择播放的信息通过函数传递给播放器对话框中 在对话框中放上以下几个控件 控件ID标题控件ID标题 Push Button ID bofang播放Push Button ID zanting暂停 Push Button ID tingzhi停止Push Button ID qianjing前进 Push Button ID houtui后退Push Button ID shangyiqu上一曲 Push Button ID xiayiqu下一曲Push Button ID yinjia Push Button ID yinjiang Push Button ID jingyin静音 Push Button ID quanping全屏Group Box IDC static播放模 式 Group Box IDC yinliangkongz hi 音量控 制 Radio Button IDC XUNHU AN 循环 Radio Button IDC shunxu顺序Radio Button IDC suiji随机 TextIDC static时间进 度 TextID timeStatic TextIDC volumeStatic滑块IDC SLIDER 1 控件排列如下 并建立如下三个变量 添加全局变量 int hour minute second 右击对话框 建立类向导 在 Messages 中选择 WM INITDIALOG 点击 ADD Function 再点击 Edit Code 在 BOOL player OnInitDialog 函数中写入 hour 0 minute 0 second 0 UpdateData true m time Format d d d hour minute second UpdateData false 让时间进度一开始为 0 同样的方法添加成员函数 void player OnTimer UINT nIDEvent 让时间进度能随着播放的音视频的进度而走 添加成员函数 void player OnDestroy KillTimer 0 CDialog OnDestroy TODO Add your message handler code here 在退出播放器对话框时 让计数器停止 添加全局变量 BOOL qian false 若 qian 为 true 时 表示点击了前进或后退 此时点击 播放时 继续播放 双击播放 点击确定 添加以下成员函数 void player Onbofang if qian m play SetUrl playname KillTimer 0 hour minute second 0 UpdateData true m time Format d d d hour minute second UpdateData false SetTimer 0 500 NULL else m play GetControls play qian false 点击播放时 也开始启动计时器 同理 前进的成员函数 void player Onqianjing 后退的成员函数 void player Onhoutui 停止得成员函数 void player Ontingzhi 停止时 时间进度变为 0 同时计数器停止 暂停的成员函数 void player Onzanting CString strtemp GetDlgItemText ID zanting strtemp if strtemp Compare 暂停 0 m play GetControls pause SetDlgItemText ID zanting 继续 KillTimer 0 if strtemp Compare 继续 0 m play GetControls play SetDlgItemText ID zanting 暂停 SetTimer 0 500 NULL 点击暂停时 显示继续 此时计数器停止 当点击继续时 计数器又开始运行 同时显示出暂停 定义成员变量 int shape 2 默认值为 2 表示默认顺序播放 在循环 顺序 随机 播放函数中 分别将 shape 赋值为 1 2 3 创建成员函数 void player shunxubofang CStdioFile fsp if ntype 3 fsp new CStdioFile list txt CFile modeRead else if ntype 1 fsp new CStdioFile list1 txt CFile modeRead else if ntype 4 fsp new CStdioFile list21 txt CFile modeRead else if ntype 5 fsp new CStdioFile list22 txt CFile modeRead else if ntype 6 fsp new CStdioFile list31 txt CFile modeRead else if ntype 7 fsp new CStdioFile list32 txt CFile modeRead CString str if num1 0 num1 num2 for int i 0 iReadString str playname str fsp Close delete fsp m play SetUrl playname num1 此函数用于上一曲的顺序播放 根据媒体类型与播放列表的不同 而选择打开的 文件不同 若选择的是第一曲 上一曲为最后一曲 下一曲的顺序播放函数与上面类 似 不过若选中为最后一曲时 则下一曲为第一曲 与上面的函数不同在于 if num1 num2 1 num1 0 else num1 for int i 0 iReadString str playname str fsp Close delete fsp m play SetUrl playname 随机播放为在 0 到总地址数之间随机生成一个数 然后播放次数字所对应的音视 屏 与上面的函数不同在于 srand time 0 int temp rand num2 上一曲的函数 oid player Onxiayiqu TODO Add your control notification handler code here if shape 1 m play SetUrl playname else if shape 2 shunxubofang else if shape 3 suijibofang SetTimer 0 500 NULL 根据 shape 的不同 所选择的函数也就不同 在下一曲的函数中 与上面不同的是 当 shape 为 2 时 所调用的函数为 shunxubofang2 构建成员函数 void player nowvolume UpdateData true m volume Format d m silder GetPos UpdateData false 使声音滑块所对应的数字呈现在静态文本框中 同时在 OnInitDialog 中加入 m silder SetRange 0 100 m silder SetPos 50 nowvolume 定义滑块的长度为 100 刚开始时是 50 音减的函数中 void player Onyinjiang TODO Add your control notification handler code here long volume m play GetSettings GetVolume 10 m play GetSettings SetVolume volume m silder SetPos volume nowvolume 每次点击 就将声音减 10 音加只要将减 10 改为加 10 即可 同时在音加函数 中加入 SetDlgItemText IDC jingyin 静音 当处于静音时 点击 可将 有声 改为 静音 同时为音量滑块建立类向导 添加如下函数 void player OnReleasedcaptureSlider1 NMHDR pNMHDR LRESULT pResult TODO Add your control notification handler code here m play GetSettings SetVolume m silder GetPos nowvolume pResult 0 使其能够拖动滑块来改变音量大小 双击静音后 添加函数 void player Onjingyin TODO Add your control notification handler code here CString strtemp GetDlgItemText IDC jingyin strtemp if strtemp Compare 静音 0 m play GetSettings SetVolume 0 m silder SetPos 0 SetDlgItemText IDC jingyin 有声 if strtemp Compare 有声 0 m play GetSettings SetVolume 30 m silder SetPos 50 SetDlgItemText IDC jingyin 静音 nowvolume 当点击静音时 声音变为 0 此时文字变为 有声 当点击 有声 时 声音变为 50 此时文字为 静音 添加全局变量 bool quan false 当其为 true 时 为全屏显示 默认为 false 双击全屏 添加成员函数 void player Onquanping m play SetFullScreen TRUE quan true 此时全屏显示 quan 值为 true 右击视频控件 建立类向导 Messages 中选择 DoubleClick 编辑函数 写入 if quan m play SetFullScreen TRUE quan true else m play SetFullScreen FALSE quan false 根据 quan 的值 双击之后 来决定是全屏还是退出全屏 2 图片模块 新建对话框 建发与视频播放器的相同 在对话框中引入三个控件 一个图像的 ID 设为 ID showing 类型为位图 在样式中选择凹陷 图像居中 真实图像大小 两个 Button 一个为上一张 一个为下一张 建立类向导 方法与播放器相同 类名为 photo 构建函数 void photo getname CString pn int num1 int num2 int nt m path pn now num1 sum num2 type nt 将前台数据传给后台全局变量 m path 为播放地址 now 为播放地址序列 sum 为总播 放数量 type 为播放列表的类型 创建函数 void photo showpic hwnd GetDlgItem IDC showing hDesDC hwnd GetDC m hDC hSrcDC CreateCompatibleDC hDesDC hBitmap HBITMAP LoadImage AfxGetInstanceHandle m path IMAGE BITMAP 0 0 LR LOADFROMFILE LR CREATEDIBSECTION GetObject hBitmap sizeof BITMAP SelectObject hSrcDC hBitmap hwnd GetClientRect SetStretchBltMode hDesDC COLORONCOLOR StretchBlt hDesDC rect left rect top rect right rect bottom hSrcDC 0 0 bm bmWidth bm bmHeight SRCCOPY UpdateData false 此函数为将图像在图像控件中显示 接下来进行在 OnPaint 函数中画图 由于此类中没有该函数 可通过建立类向导 3 主窗口模块 打开 VC6 新建工程 选择 MFC AppWizard exe 在工程名字中填入 media1 如图所 示 点击确定 选择创建类型为基本对话框 一直点击确定 最后打开对话框 删除里面 所有的控件 右击 media1 resources 点击插入 选择新建 Meun 打开 Meun 菜单 新建三个主菜单 应用程序 媒体类型 目录设定 建立次菜单如下图所示 主菜单次菜单 ID次菜单标明 应用程序ID tuichu退出 媒体类型ID yinyue音乐 媒体类型ID tupian图片 媒体类型ID shipin视频 目录设定ID mulu设定监视目录 在 media1Dlg cpp 中头文件下加入 CMenu m Menu 并在 BOOL CMedia1Dlg OnInitDialog 函数中加入 m Menu LoadMenu IDR MENU1 SetMenu 这样就可以菜单嵌入该对话框中 建立全局函数 int type 1 默认值 为 1 打开新建的菜单 右击应用程序下的退出 建立类向导 在 Messages 中选择 COMMAND 再点击 Add Function 再点击 Edit Code 打开函数 Ontuichu 里面写入 CDialog OnCancel 运行程序后 点击推出时 可退出次对话框 同样的方 法为音乐 图片和视频建立类向导 打开函数 分别将 type 复制为 1 2 3 为了选中 不同类型后 能够在选项前面打勾 则需要建立类向导 选择 UPDATA COMMAND UI 点击确定之后 在音乐函数中写入pCmdUI SetCheck type 1 type 4 type 5 当 type 为 1 或 4 或 5 时音乐前面打勾 同理图片 所对应的 type 为 2 或 8 或 9 视频的 type 为 3 或 6 或 7 担当运行时 还不能出现上述 现象 因为此函数是菜单所有的 基本对话框中不包含函数 这是就需要借助菜单中 的函数 在 Cmedia1aDlg 类中声明成员函数 OnInitMenuPopup CMenu pPopupMenu UINT nIndex BOOL bSysMenu 接着直接将函数 copy 给此类中 将函数加入后 运行后 点击不同类型的媒体后 会看到前面打勾 在对话框的函数中建立全局变量 bool mulu true 默认值为 true 表示显示播放列表 接 下来在设定监视目录中 与前面同样的方法 建立类向导 选择两个函数 此函数与 音乐的函数一样 如下 void CMedia1Dlg Onmulu if mulu m list ShowWindow SW HIDE mulu false else m list ShowWindow SW SHOW mulu true void CMedia1Dlg OnUpdatemulu CCmdUI pCmdUI TODO Add your command update UI handler code here pCmdUI SetCheck mulu 默认时 此菜单前面打勾 播放列表显示 当打击后 true 为 false 前面不打勾 播放 列表不显示 再次点击时 mulu 有变为 true m list 为播放列表的变量 之后会声明 菜单建好后 接下来就时对话框的界面了 在主菜单中选入三个 Button4 Button5 Button6 ID 分别要与菜单中音乐 图片 视频的 ID 要一样 为了点击时与点击所对应的菜单一样 并将这三个 Button 属性中的样式中点击所有者 绘图 在右边的资源框中右击 Bitmap 在此文件夹中插入三张图片 图片的格式必须为 bmp 接 下来就是将图片嵌入这三个 button 中 对话框的函数中头文件下声明三个 CBitmapButton 变量 为 m btnX1 m btnX2 m btnX3 在 BOOL CMedia1Dlg OnInitDialog 函数中写入 m btnX1 LoadBitmaps IDB BITMAP2 m btnX1 SubclassDlgItem ID yinyue this m btnX1 SizeToContent m btnX2 LoadBitmaps IDB BITMAP1 m btnX2 SubclassDlgItem ID tupian this m btnX2 SizeToContent m btnX3 LoadBitmaps IDB BITMAP3 m btnX3 SubclassDlgItem ID shipin this m btnX3 SizeToContent 每一个 CBitmapButton 变量与 button 所对应起来 SizeToContent 是为了将 Button 的 大小与图片的大小想适应 运行后 结果如图 在对画框中引入四个组合框 标题分别为播放列表 最进播放列表 最近追加项目 最近播放项目 分别在播放列表 最近追加项目 最近播放项目中加入一个列表框 排列如下图 ID 从左往右依次为 ID list2 ID bofang ID zuijia 并在属性中选择水平滚动及垂直滚动 右击 ID list2 点击建议类向导 选择添加成员变量 类型为 CListBox 名字为 m list 同理 也为其他两个列表框建立两个成员变量 依次为 m zuibo m zuija 类型相同 接 下来在 CMedia1Dlg OnInitDialog 函数中写入 m list SetHorizontalExtent 1000 m zuijia SetHorizontalExtent 1000 m zuibo SetHorizontalExtent 1000 这是由于水平滑条不灵敏 以此当运行时可以看到水平滑条 垂直滑条得数量到达列 表的容量时可以看到 构架成员函数 void CMedia1Dlg dakaiwenjian 此函数是为了将九个文件中的数据根据媒体类型的不同 读入所对应的列表框中 如果这九个文件不存在 则自动创建 文件与所对应的列表如图所示 文件列表文件列表 lixt txt视频播放列表List22 txt最近播放音频 Lixt31 txt最近添加视频List41 txt图片播放列表 Lixt32 txt最近播放视频List42 txt最近添加图片 List1 txt音频播放列表List43 txt最近播放图片 List21 txt最近添加音频 在 CMedia1Dlg OnInitDialog 函数中调用此函数 当开始运行此函数时 开始读取文 件 默认是音频 在对话框中双击 Button4 打开函数 写入 m list ResetContent m zuijia ResetContent m zuibo ResetContent dakaiwenjian 首先是清除三个列表框中的内容 然后又打开文件 从新读取新的内容 Button5 与 Button6 与之相同 接下来开始为三个列表添加内容了 添加一个 Button 名字为添加文件 双击 打开 函数 if type 3 type 6 type 7 char szFileFilter Medal File avi wmv asf avi wmv asf RMVB File rmvb rmvb MP4 File mp4 mp4 Mkv File mkv mkv All File CFileDialog dlg true NULL NULL OFN HIDEREADONLY OFN NOCHANGEDIR OFN ALLOWMU LTISELECT szFileFilter POSITION pos dlg GetStartPosition if dlg DoModal IDOK while pos NULL m pathname dlg GetNextPathName pos for int i 0 i m list GetCount i CString strtemp m list GetText i strtemp if m pathname strtemp MessageBox 该文件已存在 break if m zuijia GetCount 10 m zuijia DeleteString 0 if i m list GetCount m list AddString m pathname m zuijia AddString m pathname 此函数是打开视频文件 并将其加入播放列表中 同时还有一个判断是否已存在的 if 语句 若存在 则不添加 添加的地址也会导入最近添加的项目中 若超过十个 则 将第一个删掉 列表框中的排列为时间先后顺序 3 6 7 代表视频文件 只是所对应 的列表不同 音频与图片与之类似 1 4 5 代表音频 2 8 9 代表图片 函数的随 后还要调用保存函数 视频的保存函数为 else if type 3 type 6 type 7 ofstream file file1 file open list txt file1 open list31 txt for int i 0 i m list GetCount i CString strtemp m list GetText i strtemp strtemp n file strtemp for i 0 i m zuijia GetCount i CString strtemp m zuijia GetText i strtemp strtemp n file1 strtemp file1 close file close 用此文件函数 还需要添加头文件 include fstream h 音乐与图片与之相同 只是所保 存的文件不同 接下来是保存最近播列表 创建成员函数 void CMedia1Dlg zuibobaocun ofstream file2 if type 1 type 4 type 5 file2 open list22 txt else if type 3 type 6 type 7 file2 open list32 txt else if type 2 type 8 type 9 file2 open list43 txt for int i 0 i m zuibo GetCount i CString strtemp m zuibo GetText i strtemp strtemp n file2 strtemp 根据媒体类型不同 保存在三个不同的文件中 创建最近播放函数 void CMedia1Dlg tianjia CString str for int i 0 i m zuibo GetCount i m zuibo GetText i str if str m pathname break if i m zuibo GetCount if m zuibo GetCount 10 m zuibo DeleteString 0 m zuibo AddString m pathname zuibobaocun 其效果与其他两个列表保存函数一样 从新引入四个按键 分别为删除文件 清空最近播放列表 清空最近添加项目 和播放文件 双击清空最近是 添加函数m zuibo ResetContent zuibobaocun 清空最近播放列表 清空最近添加项目与之相似 删除文件按钮是删除播放列表中的所选择的文件 函数为 m list DeleteString m list GetCurSel Onbaocunwenjian 最后就是播放了 播放分单击和双击 拿播放列表来说 先双击播放列表 创建函数 void CMedia1Dlg OnSelchangeList2 TODO Add your control notification handler code here select true CString str num m list GetCurSel m list GetText num str m pathname str count m list GetCount select 为全局变量 其为 true 时 表示以选中项目 Num 表示所选中的地址的所 对应的数字 count 为总地址数 所中之后再点击播放文件按钮 其函数为 void CMedia1Dlg Onbofang TODO Add your control notification handler code here if select if type 2 player play play Onplay m pathname num count type play DoModal else tianjia photo ph ph getname m pathname num count type ph DoModal else MessageBox 还没有选择播放文件 先调用添加函数 将播放的地址加入最近播放列表中 接下来根据 type 的不同打开的 对话框不同 通过函数传递播放地址 播放类型 以及当前顺序和总数量 接下来是双击 右击播放列表 建立类想到 点击 LBN DBLCLK 添加函数 void CMedia1Dlg OnDblclkList2 TODO Add your control notification handler code here if type 2 num m list GetCurSel m list GetText num str m pathname str player play play Onplay m pathname num m list GetCount type tianjia play DoModal else CString str num m list GetCurSel m list GetText num str m pathname str photo pp pp getname m pathname num m list GetCount type tianjia pp DoModal 此函数为以上两个函数的合体 其他两个列表单击双击播放与之相似 只是需要在里面从根据原先的 type 为复制 Type 的是与列表对应的关系如下 1音乐播放 列表 2图片播放 列表 3视频播放 列表 4最近添加 音乐 5最近播放 音乐 6最近添加 视频 7最近播放 视频 8最近添加 图片 9最近播放 图片 3 2 流程图 图片浏览器 图片 上一张 下一张 4 系统实现及测试 播放器主界面 播放音频 播放视频 图片浏览 5 项目总结 5 1 总体总结 对于这个多媒体播放器的项目 可以说我们进展地挺顺利的 由于我们在做项目 之前小组成员之间进行了良好的沟通 在后期的编写代码过程中也高效率的进行 最后 多媒体播放器达到了预期的效果 当然 在这过程中也遇到了许多的困难 比如怎么 能把各种视频 音频的格式都能包括到程序代码中 再者 快进 快退 最近播放列 表等功能的实现都着实困扰了我们 但是经过我们不断百度 成员间的相互商讨 沟 通 最终顺利地解决了一个又一个的难题 5 2 个人总结 个人总结 原先对于小学期 据学长学姐传授的 经验 都说是很水的 但是当我第一节上课 的时候 顿时意识到事情并没有那么简单 老师仅仅起到一个引入门的角色 而至于 接下来有许多我们以前没有学习过的知识 全

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论