我的Web浏览器设计.doc_第1页
我的Web浏览器设计.doc_第2页
我的Web浏览器设计.doc_第3页
我的Web浏览器设计.doc_第4页
我的Web浏览器设计.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

计 算 机 网 络 课 程 设 计题目 :Web浏览器设计成员姓名: 班 级: 指导教师: 日 期:20012年6月目录1、系统分析. 3 1.1 系统需求. 3 1.2 功能要求. 3 1.3 运行环境. 31.4 开发工具. 32、概要设计. 4 2.1 基本设计概念. 4 2.2 软件设计层次图. 53、详细设计. 63.1 web浏览器基本功能的实现. 63.2 收藏夹功能设计. 103.3 历史记录功能设计. 133.4 抓图工具设计. 154、系统运行 .255、设计总结. 29参考文献. 301、系统分析1.1 系统需求浏览器是指可以显示网页服务器或者文件系统的HTML文件内容,并让用户与这些文件交互的一种软件。网页浏览器主要通过HTTP协议与网页服务器交互并获取网页,这些网页由URL指定,文件格式通常为HTML,并由MIME在HTTP协议中指明。一个网页中可以包括多个文档,每个文档都是分别从服务器获取的。在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,同时也越来越离不开浏览器,人们利用浏览器可以查看很多东西,上淘宝,需要浏览器,上百度搜索东西,需要浏览器,打开网站网址,需要浏览器。由此浏览器的种类也越来越多,如IE浏览器、谷歌浏览器、360浏览器、遨游浏览器等等。因此,浏览器对于人们的生活起着举足轻重的作用,浏览器的作用范围将不断扩大,人们的生活将离不开浏览器的使用。1.2 功能要求使用ChtmlView类来实现一个应用程序,使之具有Web浏览器的功能,包括浏览网页、前进、后退、返回主页、刷新、搜索、收藏夹、历史记录、抓图、删除等功能。1.3 运行环境本系统基于Windows平台设计,适用于Windows系列的系统,如流行的Windows XP、Windows Vista等。1.4 开发工具:VC+6.0C程序开发软件;2、概要设计2.1 基本设计概念利用已有的HTTP控制、HTML解释器和HTML执行器,通过MFC提供的CHtmlView类实现的一个Windows下的多功能的浏览器。该浏览器的功能包括:WEB站点浏览、本地和网络的文件系统的浏览、前进、后退、返回主页、刷新、搜索、历史记录的维护、IE收藏夹功能和设置桌面快捷方式功能等。22 软件设计层次图2.2.1 系统流程图:当用户登录此简易浏览器时,需要在地址栏输入需要搜索的内容的网址,当输入网址后,该浏览器会链接到相应的URL地址,实现页面的下载,并显示页面,从而实现该简易浏览器连接网络的功能。输入网址下载页面显示页面返回前进2.2.2 功能结构图:该程序的设计主要分5部分。首先是登录界面的实现,其中要创建按钮,创建菜单栏及下拉菜单的实现;第二部分要实现各按钮的具体的功能包括在其中设置监听器,实现对按钮动作的监听及响应;第三部分用于对地址栏输入内容格式的设定包括如何处理异常等;第四部分实现页面的下载;第五部分用于实现页面的显示。具体的功能结构图如下:登录界面实现功能按钮实现URL连接实现下载链接页面显示链接页面web浏览器3、详细设计3.1 web浏览器基本功能(前进、后退、停止、刷新、搜索、主页)的实现:3.1.1 .利用MFC AppWizard生成应用程序框架创建工程名为HtmlView。第一步,选择工程类型为单文档(SDI),中文语言支持。第二步和第三步使用默认值,不需要数据库,也不提供对于复合对象的支持;第四步选择Internet Explorer ReBars工具栏的风格,这样就有了用来输入网址的文本框;第五步不做任何修改;第六步选择CHtmlView类作为视图类的基类。生成工程框架包含4个类。(1) 应用程序类:CHtmlViewApp,对应HtmlView.h和HtmlView.cpp文件。(2) 框架类:CMainFrame,对应MainFrm.h和MainFrm.cpp文件。(3) 文档类:HtmlViewDoc,对应HtmlViewDoc.h和HtmlViewDoc.cpp文件。(4) HtmlView类:CHtmlViewView,对应CHtmlViewView.h和CHtmlViewView.cpp文件。此时编译运行,程序已经具有基本的Web浏览功能,能自动链接到微软公司的网站。3.1.2 修改菜单在工作区中选择“ResourceView”选项卡,选择Menu,双击菜单控件的名字(IDR_MAINFRAME),右边出现程序的菜单。选择菜单中的“查看”命令,已经有了“工具栏”和“状态栏”两个条目,双击下面的空框,弹出设置菜单条目属性对话框,按照表添加菜单项:菜单条目名称(Caption)ID号前进ID_FOWARD后退ID_BACK停止ID_STOP刷新ID_REFRESH主页 ID_HOME搜索ID_SEARCH3.1.3 修改工具栏:在工作区中选择“ReaourcecView”选项卡,选择ToolBar,双击工具条控件的名字(IDR_MAINFRAME),右边出现程序的工具条。添加如图的新的按钮图样。他们的ID号与相应的菜单条目相同。使他们的ID号与相应的菜单条目的ID号相同。3.1.4添加控件事件处理函数:进入类向导,选择“Message Maps”选项卡。在“Class Name”下拉列表框中选择CHtmlViewView类,然后按照表为控件添加事件处理函数。对象IDMessagesMember FunctionID_FORWARDCOMMANDOnFoward()ID_BACKCOMMANDOnBack()ID_STOPCOMMANDOnStop()ID_REFRESHCOMMANDOnRefresh()ID_HOMECOMMANDOnHome()ID_SEARCHCOMMANDOnSearch()3.1.5添加事件处理函数代码:在CHtmlViewView.cpp实现文件中,添加上述6个时间处理函数的代码。void CHtmlViewView:OnBack() GoBack();/后退;void CHtmlViewView:OnForward() GoForward();/前进;void CHtmlViewView:OnHome() GoHome();/主页;void CHtmlViewView:OnStop() Stop();/停止;void CHtmlViewView:OnRefresh() Refresh();OnOldlogins();/刷新;void CHtmlViewView:OnSearch() GoSearch( );/搜索;3.1.6添加URL定位功能:(1)添加网址输入栏控件。在工作区中选择“Resource View”选项卡,选择Dialog,双击对话框控件的名字(IDR_MAINFRAME),右边出现对话框条。在上面添加一个“请输入地址”的静态文本,再添加一个组合框控件,ID号设为IDC_EDIT_ADDRESS,作为地址栏,提供给用户输入要浏览的网站地址。如图所示。(2)添加控制代码。当用户输入网址后按回车时,就有一个IDOK的消息发送到主框架类,添加处理这个消息的控制函数,在该函数中,用指定的网址调用Navigate()和Navigate2()函数 ,就可以实现对该网页的浏览。 在MainFrm.h文件中,添加消息处理函数的声明。public:void OnInputAddress();在MainFrm.cpp文件中,添加该函数的实现代码。void CMainFrame:OnInputAddress() / 当用户输入Web地址并且回车 CString sWebAddress ; / 从编辑框获取用户输入的Web地址m_wndDlgBar.GetDlgItem(IDC_EDIT_ADDRESS)-GetWindowText(sWebAddress); / 浏览相应的网页 (CHtmlView *)GetActiveView()-Navigate(sWebAddress); 在MainFrm.cpp的文件中,在消息映射(MESSAGE_MAP)段中添加自己的消息映射宏。ON_COMMAND(IDOK,OnInputAddress);3.1.7解决单击超级链接时地址栏的同步问题:利用CHtmlView类的事件处理函数,当网页下载完成,会触发OnDocumentComplete()函数,该函数的参数就是所下载网页的URL,可以利用此函数对地址栏进行设置,添加以下代码。 在MainFrm.h文件中,添加处理函数的声明。public:void SetURL(LPCTSTR lpszURL); 在MainFrm.cpp文件中,添加该函数的实现代码。void CMainFrame:SetURL(LPCTSTR lpszURL)m_wndDlgBar.GetDlgItem(IDC_EDIT_ADDRESS)-SetWindowText(lpszURL);m_wndDlgBar.GetDlgItem(IDC_shortcutname)-SetWindowText(lpszURL); 使用类向导添加事件处理函数。用类向导为应用程序的CHtmlViewView类添加OnDocumentComplete(LPCTSTR lpszURL)事件处理函数,并在myWeb16View.cpp文件中添加它的实现代码。void CHtmlViewView:OnDocumentComplete(LPCTSTR lpszURL) / 每次当前页面改变,更新地址栏的内容和窗口的标题(CMainFrame *)GetParentFrame()-SetURL(lpszURL);GetDocument()-SetTitle(lpszURL);CHtmlView:OnDocumentComplete(lpszURL);3.2 收藏夹功能设计: 3.2.1.修改菜单:在菜单中加入“收藏夹”栏。3.2.2.创建“收藏夹”:在主框架类的创建函数:OnCreate(LPCREATESTRUCT lpCreateStruct)实现代码中添加如下代码(与菜单中“收藏夹”子菜单相对应,同时与IE浏览器的注册表相连):/生成“我的收藏夹”子菜单TCHAR szMAX_PATH; /260TCHAR szPathMAX_PATH; /260HKEY hKey;DWORD dwSize; CMenu* pMenu;/ 开始消去存在的菜单pMenu = GetMenu()-GetSubMenu(4);while(pMenu-DeleteMenu(0, MF_BYPOSITION);/0X00000400L/从注册表中找到“我的收藏夹的位置”,然后读写注册表if(RegOpenKey(HKEY_CURRENT_USER, _T(SoftwareMicrosoftWindowsCurrentVersionExplorerUser Shell Folders), &hKey) != ERROR_SUCCESS) TRACE0(Favorites folder not foundn); return 0;dwSize = sizeof(sz);RegQueryValueEx(hKey, _T(Favorites), NULL, NULL, (LPBYTE)sz, &dwSize);ExpandEnvironmentStrings(sz, szPath, MAX_PATH);RegCloseKey(hKey);/添加我的收藏菜单项BuildFavoritesMenu(szPath, 0, pMenu);3.2.3.在主框架类CMainFrame中添加BuildFavoritesMenu()函数实现收藏夹的收藏功能: a.在MainFrm.h中声明int BuildFavoritesMenu(LPCTSTR pszPath, int nStartPos, CMenu *pMenu)函数实现添加我的收藏菜单项; b.在MainFrm.cpp中实现BuildFavoritesMenu()的功能,具体实现代码如下: int CMainFrame:BuildFavoritesMenu(LPCTSTR pszPath, int nStartPos, CMenu *pMenu) CString strPath(pszPath);CString strPath2;CString str;WIN32_FIND_DATA wfd;HANDLE h;int nPos;int nEndPos;int nNewEndPos;int nLastDir; TCHAR buf2048;CStringArray astrFavorites;CStringArray astrDirs; CMenu* pSubMenu;/ 确定有字符if(strPathstrPath.GetLength() - 1 != _T() strPath += _T();strPath2 = strPath; strPath += *.*;/ 首先扫描 .URL 然后扫描子目录h = FindFirstFile(strPath, &wfd);if(h != INVALID_HANDLE_VALUE) nEndPos = nStartPos; do if(wfd.dwFileAttributes&(FILE_ATTRIBUTE_DIRECTORY|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM)=0) str = wfd.cFileName; if(str.Right(4) = _T(.url) / an .URL file is formatted just like an .INI file, so we can / use GetPrivateProfileString() to get the information we want :GetPrivateProfileString(_T(InternetShortcut), _T(URL), _T(), buf, 2048, strPath2 + str); str = str.Left(str.GetLength() - 4);/ scan through the array and perform an insertion sort/ to make sure the menu ends up in alphabetic orderfor(nPos = nStartPos ; nPos nEndPos ; +nPos)if(str.CompareNoCase(astrFavoritesnPos) 0)break;astrFavorites.InsertAt(nPos, str);m_astrFavoriteURLs.InsertAt(nPos, buf);+nEndPos; while(FindNextFile(h, &wfd);FindClose(h);/ Now add these items to the menufor(nPos = nStartPos ; nPos AppendMenu(MF_STRING | MF_ENABLED, 0xe00 + nPos, astrFavoritesnPos); / now that weve got all the .URL files, check the subdirectories for morenLastDir = 0;h = FindFirstFile(strPath, &wfd);ASSERT(h != INVALID_HANDLE_VALUE);doif(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)/ ignore the current and parent directory entriesif(lstrcmp(wfd.cFileName, _T(.) = 0 | lstrcmp(wfd.cFileName, _T(.) = 0)continue;for(nPos = 0 ; nPos 0)break;pSubMenu = new CMenu;pSubMenu-CreatePopupMenu();/ call this function recursively.nNewEndPos = BuildFavoritesMenu(strPath2 + wfd.cFileName, nEndPos, pSubMenu);if(nNewEndPos != nEndPos)/ only intert a submenu if there are in fact .URL files in the subdirectorynEndPos = nNewEndPos;pMenu-InsertMenu(nPos, MF_BYPOSITION | MF_POPUP | MF_STRING, (UINT)pSubMenu-m_hMenu, wfd.cFileName);pSubMenu-Detach();astrDirs.InsertAt(nPos, wfd.cFileName); +nLastDir; delete pSubMenu; while(FindNextFile(h, &wfd); FindClose(h);return nEndPos; 3.2.4.在MainFrm.h中声明函数void OnFavorite(UINT nID)实现当在收藏夹中单击相应的网址时,将该网址在浏览器中显示; a.在MainFrm.cpp 中的消息映射表中添加ON_COMMAND_RANGE(0xe00, 0xfff, OnFavorite)消息响应; b.在MainFrm.cpp中实现OnFavorite(UINT nID)的功能,具体代码如下: void CMainFrame:OnFavorite(UINT nID) (CHtmlViewView*)GetActiveView()-Navigate2(m_astrFavoriteURLsnID-0xe00, 0, NULL);3.3.历史记录功能设计: (1). 修改菜单,在菜单中加入“历史记录”栏,将ID号设为:ID_OLDLOGINS。 (2). 在HtmlViewView.h中添加历史记录处理函数afx_msg void OnOldlogins(),并在HtmlViewView.cpp中实现该功能,代码如下: void CHtmlViewView:OnOldlogins() /历史记录(CMainFrame *)GetParentFrame()-HistoryScan(); (3).在CMainFrame类中添加函数HistoryScan()实现将最近登录网址添加到“历史记录”子菜单中。具体代码如下: int CMainFrame:HistoryScan() char buffer256; /定义一个流式文件; ifstream cfile(History.txt); if (!cfile.is_open() AfxMessageBox(_T(文件打开失败!); / 得到“历史记录”子菜单的句柄; pMenu1 = GetMenu()-GetSubMenu(6); while(pMenu1-DeleteMenu(0, MF_BYPOSITION);/0X00000400L while(!cfile.eof() /获取一个历史记录网址; cfile.getline(buffer,100); if (buffer = NULL) continue; /将获取的网址添加到历史记录链表中; m_astrHistoryURLs.InsertAt(m_number,buffer); /将网址添加到历史记录子菜单内;pMenu1-AppendMenu(MF_STRING | MF_ENABLED, 0x001+m_number+ , buffer); return 1; (4).在CMainFrame类中添加函数HistoryScanSave(),实现将历史记录保存到History.txt文件中;具体代码如下: void CMainFrame:HistoryScanSave() if ( file.Open(_T(History.txt),CFile:modeCreate|CFile:modeWrite) ) /由文件末尾开始写; file.SeekToEnd( ); file.Write(addr.GetBuffer(addr.GetLength()+1),addr.GetLength()+1); addr.ReleaseBuffer(); file.Close(); else AfxMessageBox(_T(文件打开失败!); (5). 在MainFrm.h中声明函数void OnHistory(UINT nID)实现当在历史记录菜单中单击相应的网址时,将该网址在浏览器中显示; a.在MainFrm.cpp 中的消息映射表中添加ON_COMMAND_RANGE(0x001, 0xdfe, OnHistory)消息响应; b.在MainFrm.cpp中实现OnHistory(UINT nID)的功能,具体代码如下: void CMainFrame:OnHistory(UINT nID) /当单击历史记录内某一网址时,将该网址在浏览器中显示; (CHtmlViewView*)GetActiveView()-Navigate2(m_astrHistoryURLsnID-0x001,0, NULL); (6). 在MainFrm.cpp中的SetURL()函数中添加代码实现将当前网址添加到历史记录菜单中,具体代码如下: /将地址栏内的地址存起来,作为历史记录; addr += lpszURL; addr += rn; HistoryScanSave();3.4 抓图工具的实现:3.4.1 在以设计好的Web浏览器中的菜单栏里添加一个“屏幕截图”,下设一个截图功能。 3.4.2 为它添加消息响应函数 void CHtmlViewView:OnScreensnap() / TODO: Add your command handler code here /屏幕截图 消息响应函数*SetCapture(); /启动全屏捕捉 m_bStartSnapWindow = TRUE; /m_Description.SetWindowText(正在进行抓图); ShowWindow(SW_MINIMIZE); m_nTimerID = SetTimer(1,300,NULL);/启动定时器,开始抓取图像3.4.3 注册系统热键,用来抓图:RegisterHotKey(GetSafeHwnd(),WM_SNAPHOTKEY,NULL,VK_F3);3.4.4 在HtmlViewView类中添加函数 toClipboard 实现将指定窗口复制到系统剪切板,当中用到了双缓冲技术: void CHtmlViewView:toClipboard(CWnd *wnd, BOOL FullWnd) CDC *dc;if(FullWnd)dc = new CWindowDC(wnd);/抓取整个窗口elsedc = new CClientDC(wnd);/抓取客户区域CDC memDC;memDC.CreateCompatibleDC(dc);CBitmap bm;CRect r;if(FullWnd)wnd-GetWindowRect(&r);elsewnd-GetClientRect(&r);CString s;wnd-GetWindowText(s);CSize sz(r.Width(),r.Height();bm.CreateCompatibleBitmap(dc,sz.cx,sz.cy);CBitmap * oldbm = memDC.SelectObject(&bm);memDC.BitBlt(0,0,sz.cx,sz.cy,dc,0,0,SRCCOPY);/直接调用 OpenClipboard(),而不用 wnd-CetParent()-OpenClipboard();wnd-OpenClipboard();:EmptyClipboard();:SetClipboardData(CF_BITMAP,bm.m_hObject);CloseClipboard();/回复原始环境memDC.SelectObject(oldbm);bm.Detach();delete dc; 3.4.5 在HtmlViewView类中添加函数CaptureWindowToClipboard 实现抓取图像到系统剪切板: bool CHtmlViewView:CaptureWindowToClipboard(HWNDhwndToCapture)bool bRet = FALSE;/如果“hwndToCapture”是有效窗口的话,将其复制到系统剪切板中 if(hwndToCapture)&(:IsWindow(hwndToCapture)bRet = TRUE;toClipboard(CWnd *)CWnd:FromHandle(hwndToCapture),TRUE);return bRet;3.4.6在HtmlViewView类中添加函数HighlightFoundWindow 实现高度显示选中的图像窗口:long CHtmlViewView:HighlightFoundWindow(HWND hwndFoundWindow) HDC hWindowDC = NULL;HGDIOBJ hPrevPen = NULL; HGDIOBJ hPrevBrush = NULL;RECT rect;long IRet = 0;HPEN hRectanglePen = CreatePen(PS_SOLID,3,RGB(255,0,0);:GetWindowRect(hwndFoundWindow,&rect);/获取选中窗口的DChWindowDC = :GetWindowDC(hwndFoundWindow);if(hWindowDC)/选取自定义的高亮矩形画笔hPrevPen = SelectObject(hWindowDC,hRectanglePen);/选取自定义的高亮画刷hPrevBrush = SelectObject(hWindowDC,GetStockObject(HOLLOW_BRUSH);/再选中的图像窗口四周绘制高亮矩形Rectangle(hWindowDC,0,0,rect.right-rect.left,rect.bottom-rect.top);/恢复原始画笔画刷SelectObject(hWindowDC,hPrevPen);SelectObject(hWindowDC,hPrevBrush);/释放DC:ReleaseDC(hwndFoundWindow,hWindowDC);/删除创建的矩形画笔if(hRectanglePen)DeleteObject(hRectanglePen);return IRet; 3.4.7在HtmlViewView类中添加函数RefreshWindow 实现刷新选中的图像窗口,消除高度显示: long CHtmlViewView:RefreshWindow(HWND hwndWindow) long IRet = 0;:InvalidateRect(hwndWindow,NULL,TRUE);:UpdateWindow(hwndWindow);:RedrawWindow(hwndWindow,NULL,NULL,RDW_FRAME|RDW_INVALIDATE|RDW_UPDATENOW|RDW_ALLCHILDREN);return IRet; 3.4.8 在HtmlViewView类中添加函数CheckWindowValidity 实现检验选中窗口的有效性: bool CHtmlViewView:CheckWindowValidity(HWND hwndToCheck) HWND hwndTemp = NULL;bool bRet = TRUE;/不能为空if(hwndToCheck = NULL) bRet = FALSE; return bRet;/必须是一个有效窗口if(IsWindow(hwndToCheck) = FALSE) bRet = FALSE; return bRet;/确定他不是先前选中的窗口if(hwndToCheck = m_hwndFoundWindow)bRet = FALSE; return bRet;/不能是程序主窗口if(hwndToCheck = this-m_hWnd)bRet = FALSE; return bRet;/不能是程序中的子窗口hwndTemp =:GetParent(hwndToCheck);if(hwndTemp = this-m_hWnd)bRet = FALSE; return bRet;return bRet;3.4.9 添加热键消息处理函数 OnHotKey,先在 .h文件的消息映射区手动添加一个消息处理函数声明:afx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM IParam);如图: 3.4.10 然后添加消息函数实现:3.4.11 在ClassWizard 中为 CScreenSnapDlag 添加OnTimer 事件处理函数,然后添加实现。void CHtmlViewView:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call defaultif (m_bStartSnapWindow)/当正在抓取操作时POINT CursorPoint;HWND hwndFoundWindow = NULL;GetCursorPos(&CursorPoint);/从当前鼠标所在点位置获取器窗口句柄hwndFoundWindow = :WindowFromPoint(CursorPoint);/检验选中窗口的有效性if(CheckWindowValidity(hwndFoundWindow) /如果先前有选中的窗口,则刷新它,以消除他的高亮显示if(m_hwndFoundWindow)RefreshWindow(m_hwndFoundWindow);/得到选中窗口的句柄m_hwndFoundWindow = hwndFoundWindow;/高亮宣誓选中窗口HighlightFoundWindow(m_hwndFoundWindow);CHtmlView:OnTimer(nIDEvent); 3.4.12 对程序作最后的处理OnDestroy 函数实现: void CHtmlViewView:OnDestroy() if(m_bStartSnapWindow) /当正在抓取操作时ReleaseCapture(); /释放全屏捕捉m_bStartSnapWindow = FALSE; /重置抓取操作为假KillTimer(m_nTimerID); /消除抓取定时器操作if(m_hwndFoundWindow) /如果已有选中窗口的话,则刷新它RefreshWindow(m_hwndFoundWindow);RegisterHotKey(GetSafeHwnd(),WM_SNAPHOTKEY,NULL,VK_F3);CHtmlView:OnDestroy();/ TODO: Add your message handler code here3.5.删除功能设计: 3.5.1添加“删除”菜单:在工作区中选择“ResourceView”选项卡,选择Menu,双击菜单控件的名字(IDR_MAINFRAME),右边出现程序的菜单。在菜单中加入“删除”栏,分别添加“清空历史记录”、“清空收藏夹”、“删除文档历史记录”、“清除Cookies”、“清除Internet临时文件”和“清除密码历史记录”6个菜单条目及其属

温馨提示

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

评论

0/150

提交评论