媒体播放器综合设计报告_第1页
媒体播放器综合设计报告_第2页
媒体播放器综合设计报告_第3页
媒体播放器综合设计报告_第4页
媒体播放器综合设计报告_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

PAGE48/NUMPAGES48重庆交通大学信息科学与工程学院《程序设计实训I》综合设计报告媒体播放器学号:姓名:专业:班级:实验室(中心):指导老师:完成时刻:2012.12.14重庆交通大学信息科学与工程学院综合设计任务书课程程序设计实训I班级软件一班指导教师鲁云平题目媒体播放器完成时刻2012-11-17要紧内容1、需求分析;2、系统设计;3、编程与实现(必须附上自己添加的源代码并加上注释);4、测试内容与结果;5、存在的问题与不足及对策;6、对这门课的建议;7、参考文献设计报告要求设计成果要求1、两人一题,分工协作,独立完成。(多人协作完成,要注明分工情况)2、要求能够对信息进行添加、修改、删除、查询、统计等操作。3、数据库中不得少于两张表,每张表不得少于7个字段,每张表中不得少于30条记录。4、使用MFC完成设计。5、提交设计报告,设计报告内容完整、格式规范考核内容与方式1、设计报告:50%2、程序加演示:50%每位同学单独演示自己的程序并现场回答提问。版面要求题目用黑体三号,段后距18磅(或1行),居中对齐;标题用黑体四号,段前、段后距6磅(或0.3行);正文用小四号宋体,行距为1.25倍行距;标题按“一”、“㈠”、“1”、“⑴”顺序编号。备注请同学们参考《VisualC++实训》综合应用实习部分。目录引言……………4系统设计的差不多概念与原理………………4需求分析………….……………5系统设计…………………….6编程与实现………………...9测试内容与结果…………….11心得体会……….16对这门课的建议……………...17九、参考文献………17教师评阅意见:教师评阅意见:签名:年月日成绩:以下为设计报告正文内容一.引言现在人们娱乐的方式多种多样,差不多有了专门明显的变化,往常的户外运动现在差不多在锐减,换而之的是网络游戏与网上谈天,而在同时听听音乐看看电影也成为了巨大的需求,因此专门多多媒体播放软件出现了,形形色色各种都有,而我也赶下时髦,体验一下编写的过程,现在才发觉这并不难,重要的是插件的插入,而其他的功能实现只需调用相应函数就行了!二.系统设计的差不多概念与原理1.差不多概念与知识(1).MFCMFC(MicrosoftFoundationClasses),是一个微软公司提供的类库(classlibraries),以C++类的形式封装了Windows的API,同时包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和专门多Windows的内建控件和组件的封装类。(2)MFC编程特点微软基础类(MicrosoftFoundationClasses),是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,VC++是WinDOS下开发人员使用的专业C++SDK(SDK,StandardSoftWareDevelopKit,专业软件开发平台),MFC确实是挂在它之上的一个辅助软件开发包。MFC是WinAPI与C++的结合,API,即微软提供的Windows下应用程序的编程语言接口,是一种软件编程的规范,但不是一种程序开发语言本身,能够同意用户使用各种各样的第三方的编程语言来进行对Windows下应用程序的开发,使这些被开发出来的应用程序能在Windows下运行,因此用它们开发出来的应用程序都能工作在Windows的消息机制和绘图里,遵守Windows作为一个操作系统的内部实现,MFC是微软对API函数的专用C++封装,这种结合一方面让用户使用微软的专业C++SDK来进行Windows下应用程序的开发变得容易,因为MFC是对API的封装,微软做了大量的工作,隐藏了好多程序开发人员在Windows下用C++&MFC编制软件时的大量内节,如应用程序实现消息的处理,设备环境绘图等。3开发环境 开发工具:MicrosoftVisualC++6.0开发语言:C++运行支持环境:硬件环境:CPU1.0G以上内存256M以上硬盘20G以上操作系统:MicrosoftWindows2000,XP,VISTA,Windows7三.需求分析1、功能需求MP3媒体播放器软件是采纳MFC设计的Windows应用程序,在MFC的集成环境下填加文档/视图结构。这种程序框架和简单应用程序之间的重要区不就在于形成应用程序的主窗口不只需要一个类的对象,而是需要三个类对象:1框架窗口类对象,2视图类对象,3文档类对象。1、2、3组成应用程序的界面。在加入MP3的解码使程序界面有播放MP3的功能。MP3媒体播放应用程序是用WindowsMediaPlayer的界面插件,同时应用MediaPlayer的解码功能,使应用程序能够界面清析、播放格式增加同时操作简单。能够打开文件放进播放列表,点击播放键使其播放,暂停键暂停,停止键停止,重播键重新播放,全屏键全屏播放,退出键退出程序,增大键增大音量,减小键减小音量!2、性能需求性能需求是软件工程需求分析的一项重要内容。本应用程序的的性能需求播放音乐。具体功能包括播放MP3、WAV、AVI等媒体格式。应用程序界面下的功能选项中点击打开,之后点击所要播放的文件,就用将该文件播放。3、分析分析的任务是确定待开发的软件项目“做什么”,也确实是讲待开发的软件所具有的功能。具体任务包括确定软件系统的功能需求,性能需求。其中,功能需求应给出软件必须具备的全部功能。待开发的软件是MP3媒体播放器,要分析出它所能播放的媒体格式;性能需求是指软件的安全性,可靠性,可维护性,可靠性,精度,容错性能力,运行效率等。这些是保证开发之后能够正常的使用。在大型软件的分析中,软件的分析需要反复多次,以达到更加准确,这是开发软件的差不多要求。4、用户分析1)要求有稳定的性能,可实现要求的功能;2)拥有较好的界面,专门方便人操作!四.系统设计1.系统架构设计多媒体播放器的具体功能如下:(1)打开本地媒体文件(可支持的文件有*.mp3),在打开对话框能够对本地媒体文件进行查找;(2)播放操纵即可通过面板上按钮(3)暂停播放媒体文件,接着播放媒体文件;(4)停止播放媒体文件,播放进度条返回起点;(5)调整播放音量(增大、减小、静音切换);2.系统功能设计依照MP3播放器的功能设计,将整个系统分为操作界面块(播放器操作界面)、操作参数处理块(MFC控件)、播放操纵块(WindowsMediaPlayer控件)三个模块,这三个模块各自的功能与它们之间的关系构成了整个播放器的构架。下面是每个模块的具体描述:操作界面模块:即多媒体播放器的操作界面,将用户的各项操作作为参数传递给操作参数处理块(MFC控件),并接收操作参数处理块的处理结果(列表相关)与播放操纵块的播放操纵显示处理操作结果,将此信息返回给用户;操作参数处理块:由MFC通用控件操纵,接收来自操作界面的各项操作信息,并对这下操作进行分类处理,若是有关播放操纵类的操作则将把操作请求信息加工后传递给模仿操纵模块;若是列表操纵类的则将这些操作先加工处理再将信息传递给播放块。再者同意来自播放操纵模块的处理数据,并将处理结果综合整理后传递给操作界面,以呈现于用户。播放操纵块:由WindowsMediaPlayer系统调用操纵,接收来自操作参数处理块的媒体播放操纵等相关操作,并将处理结果传递给操作参数处理块。3.子系统与模块设计(1)打开菜单项,打开本地媒体文件。调用WindowsAPICFileDialog打开打开文件对话框。输入参数:选取的文件。输出参数:文件路径。(2)Play菜单项,将当前暂停或者停止状态的媒体文件的播放状态切换至播放播放状态。输入参数:Play指令选取。输出参数:播放操纵信息。(3)暂停菜单项,将当前处于播放状态的媒体文件的播放状态切换至暂停。输入参数:Pause指令选取。输出参数:暂停操纵信息。(4)停止菜单项,将当前处于播放状态或暂停状态的媒体文件的播放状态切换至停止状态。输入参数:停止指令选取。输出参数:停止操纵信息。(5)退出菜单项,退出多媒体播放器程序。输入参数:退出指令选取。输出参数:0。(6)音量增大项,操纵音量大小,将音量增大。输入参数:音量增大指令选取。输出参数:音量增大操纵信息。(7)音量减小项,操纵音量大小,将音量减小。输入参数:音量减小指令选取。输出参数:音量减小操纵信息。(8)播放进度条,能与媒体文件的播放进度同步,以显示当前的播放进度。输入参数:媒体文件的长度信息。五.编程与实现1.系统详细设计与实现1.多媒体播放器的详细设计与实现(1)打开媒体文件代码:voidCMediaPlayerDlg::OnOpen(){ charszFileFilter[]="Mp3File(*.mp3)|*.mp3|""WmaFile(*.wma)|*.wma|""VideoFile(*.dat)|*.dat|""WaveFile(*.wav)|*.wav|""AVIFile(*.avi)|*.avi|""MovieFile(*.mov)|*.mov|""MediaFile(*.mmm)|*.mmm|""MidFile(*.mid;*,rmi)|*.mid;*.rmi|""MPEGFile(*.mpeg)|*.mpeg|""AllFile(*.*)|*.*||";//文件类型过滤CFileDialogdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);if(dlg.DoModal()==IDOK){CStringPathName=dlg.GetPathName();PathName.MakeUpper();m_ActiveMovie.SetFileName(PathName);}(2)关闭媒体文件代码:voidCMediaPlayerDlg::OnClose(){ m_ActiveMovie.CloseWindow(); //TODO:Addyourcontrolnotificationhandlercodehere}(3)播放打开的文件代码:voidCMediaPlayerDlg::OnPlay(){ m_ActiveMovie.Run();//播放文件SetTimer(0,20,NULL); CStringPathName=m_ActiveMovie.GetFileName(); intstrLength=PathName.GetLength()+1; char*pValue=newchar[strLength]; strncpy(pValue,PathName,strLength); SetWindowText(pValue); //TODO:Addyourcontrolnotificationhandlercodehere}(4)暂停正在播放的文件代码:voidCMediaPlayerDlg::OnPause(){ m_ActiveMovie.Pause(); //TODO:Addyourcontrolnotificationhandlercodehere}(5)停止打开的文件代码:voidCMediaPlayerDlg::OnOnstop(){ m_ActiveMovie.Stop();//停止播放文件KillTimer(0);//关掉定时器 //TODO:Addyourcontrolnotificationhandlercodehere}(6)降低音量代码:voidCMediaPlayerDlg::OnLower(){longVolume=m_ActiveMovie.GetVolume();m_ActiveMovie.Pause(); m_ActiveMovie.SetVolume(Volume-100); m_ActiveMovie.Run(); //TODO:Addyourcontrolnotificationhandlercodehere}(7)增大音量代码:voidCMediaPlayerDlg::OnUpper(){ longVolume=m_ActiveMovie.GetVolume();m_ActiveMovie.Pause();m_ActiveMovie.SetVolume(Volume+100);m_ActiveMovie.Run(); //TODO:Addyourcontrolnotificationhandlercodehere}(8)快放代码:voidCMediaPlayerDlg::OnFast(){ m_ActiveMovie.SetRate(m_ActiveMovie.GetRate()+1); //TODO:Addyourcontrolnotificationhandlercodehere}(9)慢放代码:voidCMediaPlayerDlg::OnSlow(){ if(m_ActiveMovie.GetRate()>1) m_ActiveMovie.SetRate(m_ActiveMovie.GetRate()-1); //TODO:Addyourcontrolnotificationhandlercodehere}(10)重放voidCMediaPlayerDlg::OnRepeat(){ //TODO:Addyourcontrolnotificationhandlercodehere if(!isRepeat) {isRepeat=TRUE;SetDlgItemText(IDC_STATIC2,"Status:Repeat");}Else{isRepeat=FALSE;SetDlgItemText(IDC_STATIC2,"Status:Normal");}六.测试内容与结果1.概述(1)打开文件(从曲库中找出歌曲加入列表中)(2)播放,暂停,停止,音量调节,快放,慢放2.测试环境(1)3.测试工具:MicrosoftVisualC++6.04.测试打算(1)打开文件(2)播放及各按钮的使用(3)多次运行,检查稳定性5.测试项目及结果(1)打开文件通过测试发觉此功能正常工作。(2)测试播放按钮通过测试发觉此功能正常工作。(3)测试暂停按钮通过测试发觉此功能正常工作。(4)测试停止按钮通过测试发觉此功能正常工作。(5)声音增大测试通过测试发觉此功能正常工作。(6)声音减小测试通过测试发觉此功能正常工作。七.心得体会1.本次课程设计的任务是利用VC++开发一个支持mp3、等不同音频格式的多媒体播放器,以便通过课程设计掌握多媒体编程的差不多原理。通过本次课程设计自己进一步熟悉了VisualC++6.0开发环境工具,巩固复习了MFC的应用程序编程,对WindowsMediaPlayer的开发实现有了深刻的了解,更熟悉了C++语言,体会到了面向对象的开发过程。多媒体播放器的设计是基于MFC框架,因此也是基于Win32开发的应用程序。在开发过程中为了完善各多媒体播放器功能,设计用户之间友好的接口,使用了MFC通用控件:按钮、静态文本框、编辑框、组合框、列表框,在制作过程中对这些控件的属性、事件及方法都有了较为熟练的掌握。另外基于MFC开发程序必定要对整个MFC的框架有所了解,在设计时也进一步熟悉了MFC相关调用的实现。在实现媒体播放这一重要功能时,采纳了调用WindowsMediaPlayer控件来实现差不多播放功能,,通过本次的课程设计,对C++,MFC,面向对象的开发过程有了更深的认识与掌握,学习到了MediaPlayer控件调用,充实了自身,学到专门多有用的工具、方法。2.经验教训及其分析(1)真是不经历不明白,我现在才发觉自己的基础是那么的薄弱,MFC的各种控件的使用方法都不是专门熟,尤其是列表框,不管如何学,使用什么方法,都弄不了,真是愁煞我也。以后一定要极爱按基础的扎实,为以后的编程提供巨大的方便!(2)以后做事要做好全局的规划,决定好了之后就不要轻易的改变,否则会误了大事,这让我想到了那个挖井的故事,这儿挖一点挖不出水就不挖了,那儿挖不出水也不挖了,最后挖了好多地点,依旧没有挖出来一滴水,因此做什么事差不多上浅尝辄止的话,最后是成不了大事的!就比如讲我这次,做了专门多却一个也没做成。(3)通过这次课设,我学会了专门多,应该讲专门熟练的掌握了MFC控件的添加与使用,也对使用MFC的各种控件驾轻就熟了,也学会了一定的调试技巧,感受收获颇丰,而遗憾的是自己未能独立的完成一个项目!八、对这门课的建议这门课程应该以实验和上机操作为主,通过这种方式才能更好的提高我们的编程能力并锻炼我们的编程思想。课程体现了较强的应用特色,把介绍内容和实际英语有机的结合起来。如此的实例即不太大,如此程序不太长;同时实例又涉及一定的范围和意义,通过实例能消化教程的要紧内容。以后解决用户对VisualC++较高层的要紧内容需要,在介绍有关差不多知识后加入一个小规模、可运行的例子来消化、上机实验,以供用户模仿。实验内容是对教程内容的实训,同时在教程的内容上进一步提高。实习从一个应用系统开始逐步设计和组装,同时把VisualC++的差不多内容包含进来。通过实验和实习实训,能轻松自如地用VisualC++设计一个小的应用系统。九.参考文献1.《VisualC++教程》清华大学出版社郑阿奇主编2.《VisualC++实训》清华大学出版社郑阿奇主编丁有和编著3.《VisualC++6.0编程经典案例精解》电子工业出版社张红军党留群赵天臣等编著附部分程序代码:#include"stdafx.h"#include"MediaPlayer.h"#include"MediaPlayerDlg.h"#include"activemovie3.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CAboutDlgdialogusedforAppAboutclassCAboutDlg:publicCDialog{public: CAboutDlg();//DialogData //{{AFX_DATA(CAboutDlg) enum{IDD=IDD_ABOUTBOX}; //}}AFX_DATA //ClassWizardgeneratedvirtualfunctionoverrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport //}}AFX_VIRTUAL//Implementationprotected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP()private: boolisRepeat;};CAboutDlg::CAboutDlg():CDialog(CAboutDlg::IDD){ //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT}voidCAboutDlg::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg,CDialog) //{{AFX_MSG_MAP(CAboutDlg) //Nomessagehandlers //}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CMediaPlayerDlgdialogCMediaPlayerDlg::CMediaPlayerDlg(CWnd*pParent/*=NULL*/) :CDialog(CMediaPlayerDlg::IDD,pParent){ //{{AFX_DATA_INIT(CMediaPlayerDlg) //NOTE:theClassWizardwilladdmemberinitializationhere //}}AFX_DATA_INIT //NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32 m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);}voidCMediaPlayerDlg::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMediaPlayerDlg) DDX_Control(pDX,IDC_ACTIVEMOVIECONTROL1,m_ActiveMovie); //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CMediaPlayerDlg,CDialog) //{{AFX_MSG_MAP(CMediaPlayerDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_PLAY,OnPlay) ON_BN_CLICKED(IDC_OPEN,OnOpen) ON_BN_CLICKED(IDC_PAUSE,OnPause) ON_BN_CLICKED(IDC_ONSTOP,OnOnstop) ON_BN_CLICKED(IDC_LOWER,OnLower) ON_BN_CLICKED(IDC_UPPER,OnUpper) ON_BN_CLICKED(IDC_FULLSCREEN,OnFullscreen) ON_BN_CLICKED(IDC_REPEAT,OnRepeat) ON_BN_CLICKED(IDC_CLOSE,OnClose) ON_WM_TIMER() ON_BN_CLICKED(IDC_FAST,OnFast) ON_BN_CLICKED(IDC_SLOW,OnSlow)// ON_BN_CLICKED(IDC_FRONT,OnFront)// ON_BN_CLICKED(IDC_BEHIND,OnBehind) //}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CMediaPlayerDlgmessagehandlersBOOLCMediaPlayerDlg::OnInitDialog(){ CDialog::OnInitDialog();isRepeat=FALSE; //Add"About..."menuitemtosystemmenu. //IDM_ABOUTBOXmustbeinthesystemcommandrange. ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX<0xF000); CMenu*pSysMenu=GetSystemMenu(FALSE); if(pSysMenu!=NULL) { CStringstrAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if(!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu); } } //Settheiconforthisdialog.Theframeworkdoesthisautomatically //whentheapplication'smainwindowisnotadialog SetIcon(m_hIcon,TRUE); //Setbigicon SetIcon(m_hIcon,FALSE); //Setsmallicon //TODO:Addextrainitializationhere returnTRUE;//returnTRUEunlessyousetthefocustoacontrol}voidCMediaPlayerDlg::OnSysCommand(UINTnID,LPARAMlParam){ if((nID&0xFFF0)==IDM_ABOUTBOX) { CAboutDlgdlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID,lParam); }}//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,//thisisautomaticallydoneforyoubytheframework.voidCMediaPlayerDlg::OnPaint(){ if(IsIconic()) { CPaintDCdc(this);//devicecontextforpainting SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0); //Centericoninclientrectangle intcxIcon=GetSystemMetrics(SM_CXICON); intcyIcon=GetSystemMetrics(SM_CYICON); CRectrect; GetClientRect(&rect); intx=(rect.Width()-cxIcon+1)/2; inty=(rect.Height()-cyIcon+1)/2; //Drawtheicon dc.DrawIcon(x,y,m_hIcon); } else { CDialog::OnPaint(); }}//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags//theminimizedwindow.HCURSORCMediaPlayerDlg::OnQueryDragIcon(){ return(HCURSOR)m_hIcon;}voidCMediaPlayerDlg::OnPlay(){ m_ActiveMovie.Run();//播放文件SetTimer(0,20,NULL); CStringPathName=m_ActiveMovie.GetFileName(); intstrLength=PathName.GetLength()+1; char*pValue=newchar[strLength]; strncpy(pValue,PathName,strLength); SetWindowText(pValue); //TODO:Addyourcontrolnotificationhandlercodehere}voidCMediaPlayerDlg::OnOpen(){ charszFileFilter[]="Mp3File(*.mp3)|*.mp3|""WmaFile(*.wma)|*.wma|""VideoFile(*.dat)|*.dat|""WaveFile(*.wav)|*.wav|""AVIFile(*.avi)|*.avi|""MovieFile(*.mov)|*.mov|""MediaFile(*.mmm)|*.mmm|""MidFile(*.mid;*,rmi)|*.mid;*.rmi|""MPEGFile(*.mpeg)|*.mpeg|""AllFile(*.*)|*.*||";//文件类型过滤CFileDialogdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);if(dlg.DoModal()==IDOK){CStringPathName=dlg.GetPathName();PathName.MakeUpper();m_ActiveMovie.SetFileName(PathName);} //TODO:Addyourcontrolnotificationhandlercodehere }voidCMediaPlayerDlg::OnPause(){ m_ActiveMovie.Pause(); //TODO:Addyourcontrolnotificationhandlercodehere}voidCMediaPlayerDlg::OnOnstop(){ m_ActiveMovie.Stop();//停止播放文件KillTimer(0);//关掉定时器 //TODO:Addyourcontrolnotificationhandlercodehere }voidCMediaPlayerDlg::OnLower(){longVolume=m_ActiveMovie.GetVolume();m_ActiveMovie.Pause(); m_Activ

温馨提示

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

最新文档

评论

0/150

提交评论