进程管理器课程设计报告.doc_第1页
进程管理器课程设计报告.doc_第2页
进程管理器课程设计报告.doc_第3页
进程管理器课程设计报告.doc_第4页
进程管理器课程设计报告.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

进程管理器课程设计题目:进程管理器 姓 名 目 录一、需求与功能分析1二、系统总体框架1三、模块设计与分析2四、类的设计与分析11五、特色算法与分析11六、功能测试16七、存在的不足与对策19八、程序源代码20一、需求与功能分析我们的电脑需要我们去了解它的运行状况,掌握和管理它的进程,并对其异常情况给予操作和控制,进程管理器就像是我们了解和控制自己电脑运作的一个窗口,通过这个窗口我们可以了解到电脑所有进程运行状况,并对运行的进程加于管理和控制,正如在本实验中,启动进程管理器后,可以通过”获取进程”功能来获得本计算机启动的进程,以及与该进程相关的信息,其中包括的信息有:进程映像名称,进程开启的线程数,进程的PID以及进程的优先数,我们可以通过这些信息来了解计算机中每个进程的使用状况。同时我们可以在进程管理器上选中一个要终止的的进程,点击“终止进程”功能按钮,该进程被终止执行并退出进程列表,其中还包括了自动刷新的功能,此按钮实现的功能正如我们电脑任务管理器的“进程”功能,当电脑执行程序不能通过关闭窗口进行正常的关闭时,可以借助此办法来关闭进程。我们还可以通过这个进程管理器来启动新的进程,当我们要在进程管理器里启动新的进程时,只要点击“启动新进程”按键,则会弹出“打开进程”对话框,我们可以通过对话框里的“浏览”窗口选择要打开的新进程,这是任务管理器里没有实现的功能,通过这个功能我们在管理计算机时变得更加灵活方便,也使进程管理的功能更加完善。在退出此进程管理器时候,只要选择“退出”功能按钮则可关闭进程管理器,快速退出管理器的界面。本管理器设计比较简洁,操作灵活,使用简单,可以为我们管理和控制计算机的进程提供了一个简便的方法,是我们控制本计算机进程和了解计算机进程情况的良好助手。二、系统总体框架2.1系统框架图本系统设计比较简洁,用MFC来做界面,实现了四个功能,显示四类与进程相关的信息,具体的总体框架图如图1所示: 进程管理器界面启动新进程获取进程退 出终止进程选择要终止的进程打 开新 进 程优 先 数PID进程开启的线程数进程映像名称 图1 总体框架图2.2各功能模块的详细说明本系统实现了四大功能,分别包括了:获取进程、启动新进程、终止进程和退出管理器,各功能模块的详细说明如下:(1)获取进程。点击获取进程后,它能自动获取计算机的所有进程,并显示进程的相关信息,其中包括的信息有:进程映像名称,进程开启的线程数,进程的PID以及进程的优先数,通过这一功能,我们能了解进程的相关情况。(2)启动新进程。点击“启动新进程”按钮,进入“打开进程”对话框,在“浏览”窗口里选择任意一个应用程序,则能在管理器里直接启动我们所选的进程。(3)终止进程。当我们遇到某些软件在关闭窗口时不能直接关闭,这时可以在进程管理器的“终止进程”里找到该进程并将其终止,这一功能实现的是类似于任务管理器的“进程”选项所具有的功能。(4)退出管理器。当对管理器操作做完毕时,直接点击“退出管理器“按钮则可关闭管理器。三、模块设计与分析 本软件实现了进程管理的三大功能,其中主要用到了三大函数,包括获取进程函数“OnGetProcess”、启动新进程函数“Ononrun”、终止进程函数“OnStopProcess”以及退出管理器函数“OnBnClickedCancel”,以下是对每个程序的详细设计:31 获取进程模块该模块使用到的控件如表1:表1 实现获取进程功能使用的控件表控件名称控件类型标题变量作用说明变量名类型IDOKPush Button获取进程m_showCSXButton获取计算机的进程IDC_LIST_SHOWList Control-m_showlistCListCtrl显示所获得的进程在IDOK控件上建立事件OnGetProcess(),当用户点击“获取进程”按扭时事件发生,进程管理器可以获取计算机的所有进程。函数源代码如下:void CShowAllProcessDlg:OnGetProcess() /获取进程的消息处理函数/ TODO: Add your control notification handler code hereHANDLE Snapshot;Snapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); /获得某一时刻系统的进程、堆(heap)、模块(module)或线程的快照信息PROCESSENTRY32 processListStr; /获得进程的信息processListStr.dwSize=sizeof(PROCESSENTRY32);BOOL return_value;return_value=Process32First(Snapshot,&processListStr); /获得系统进程链表中第一个进程的信息m_showlist.DeleteAllItems(); int i=0;/item indexwhile(return_value)m_showlist.InsertItem(i,processListStr.szExeFile,0); /插入第一项,从零开始插入CString s;s.Format(%d,processListStThreads); /输出线程m_showlist.SetItemText(i,1,s);s.Format(%d,processListStr.th32ParentProcessID); /输出IDm_showlist.SetItemText(i,2,s);s.Format(%d,processListStr.pcPriClassBase); /输出优先数m_showlist.SetItemText(i,3,s);int memory=processListStThreads; /写入内存m_ProcessIndexi=processListStr.th32ProcessID;/save ID into array to teminate return_value=Process32Next(Snapshot,&processListStr);/获得系统进程链表中下一个进程的信息i+;功能实现的流程图如图2所示:开 始获取进程、堆、模块的快照信息获取下一进程信息息结 束Y获取进程第一个进程的信息N图2 获取进程流程图3.2启动新进程模块该模块使用到的控件情况如表2:表2实现启动新进程功能使用的控件表控件名称控件类型标题变量作用说明变量名类型IDC_onrunPush Button启动新进程m_runCSXButton启动新的进程IDC_LIST_SHOWList Control-m_showlistCListCtrl显示所获 得的进程在IDC_onrun控件上建立事件Ononrun (),当用户点击“启动新进程”按钮时事件发生,此可以通过“打开进程”对话框,选择一个应用程序让其执行。函数源代码如下:void CShowAllProcessDlg:Ononrun() /启动新进程的消息处理函数/ TODO: Add your control notification handler code here/加载动态链接库CString pszDllName=shell32.dll; HINSTANCE hLib = :LoadLibrary(pszDllName); /定义一个句柄,获取的dll文件,是相对路径,和.exe文件在同一个目录下typedef void (_stdcall *pRunFileDlg)(HWND,HICON, LPCTSTR, LPCTSTR, LPCTSTR, UINT);pRunFileDlg RunFileDlg;if (hLib=NULL) / 若hLib为空,加载失败,hLib不为空,加载成功return ;RunFileDlg = (pRunFileDlg)GetProcAddress(hLib, (char *)61);CString name =打开进程;CString sss = 请输入程序,文件夹,文档或其它东西。;LPWSTR wname=new WCHAR100;LPWSTR wsss=new WCHAR100;memset(wname,0,sizeof(WCHAR)*100);memset(wsss,0,sizeof(WCHAR)*100);MultiByteToWideChar /多字节字符到宽字符转换函数(CP_ACP, / ANSI转换时所用的代码页 MB_PRECOMPOSED, / character-type optionsname, / address of string to map name.GetLength(), / number of bytes in stringwname, / address of wide-character buffer100);MultiByteToWideChar /多字节字符到宽字符转换函数(CP_ACP, / ANSI转换时所用的代码页MB_PRECOMPOSED, / character-type optionssss, / address of string to mapsss.GetLength(), / number of bytes in stringwsss, / address of wide-character buffer100);if(RunFileDlg!=NULL) RunFileDlg(this-GetSafeHwnd(),NULL,NULL,(LPCTSTR)wname,(LPCTSTR)wsss,0x02);:FreeLibrary(hLib); /函数运行完毕后,卸载dll文件功能实现的流程图如图3所示:打开进程选择要启动的程序hLib是否为空加载文件函数运行完毕,卸载dll文件N结 束Y 图3 启动新进程流程图3.3终止进程模块该模块使用到的控件情况表如表1:表1实现终止进程功能使用的控件表控件名称控件类型标题变量作用说明变量名类型IDC_STOPPush Button终止进程m_stopCSXButton终止选中的进程IDC_LIST_SHOWList Control-m_showlistCListCtrl显示所有进程在IDC_STOP控件上建立事件OnStopProcess (),当用户选中其中一个进程,并点击“终止进程”按扭时事件发生,所选中的进程被终止,进程列表被更新。函数源代码如下:void CShowAllProcessDlg:OnStopProcess() /终止进程的消息处理/ TODO: Add your control notification handler code herePOSITION pos = m_showlist.GetFirstSelectedItemPosition(); /要选择的进程所处的位置int currentSelect=m_showlist.GetNextSelectedItem(pos); /当前选中的行if(currentSelect0)/选择某项CString FileBuffer;/获得进程的可执行文件的文件名FileBuffer=CString(TEXT(确实要终止进程)+m_showlist.GetItemText(currentSelect,0)+TEXT(?);if(AfxMessageBox(FileBuffer,MB_OKCANCEL,0)=IDOK)/先获得该进程句柄,通过进程标识HANDLE ProcessHandle;ProcessHandle=OpenProcess(PROCESS_ALL_ACCESS,FALSE,m_ProcessIndexcurrentSelect); /利用数组ID指定的获得存在的一个进程的句柄if(ProcessHandle)TerminateProcess(ProcessHandle,0); /使指定进程结束AfxMessageBox(指定进程已终止!);OnGetProcess();/刷新显示elseAfxMessageBox(系统不允许终止指定进程!);elseAfxMessageBox(请先选择一个需要终止的进程!,MB_OK);功能实现的流程图如图4所示:开 始有进程吗?指定进程已终止刷新Y选择要终止的进程名系统允许终止该进程YN结束图4 终止进程流程图图3.4退出模块该模块使用到的控件情况表如表1:表1 退出功能实现使用控件情况表控件名称控件类型标题变量作用说明变量名类型IDCANCELPush Button退出m_exitCSXButton退出进程管理器IDC_LIST_SHOWList Control-m_showlistCListCtrl显示所有进程在I IDCANCEL控件上建立事件OnBnClickedCancel(),“退出”按钮响应函数,退出进程管理器。函数源代码如下:void CShowAllProcessDlg:OnBnClickedCancel() /断开该连接按钮的响应函数 IDCANCEL/ TODO: 在此添加控件通知处理程序代码OnCancel();四、类的设计与分析4.1、CShowAllProcessApp类以CwinApp为基类创建CShowAllProcessApp 子类,它是应用程序的入口和出口,在这里处理一些启动和退出程序时需要读取或写入的设置信息,以及设置一些全局变量。CShowAllProcessApp类的定义如下:class CShowAllProcessApp : public CwinApp / 函数头文件中的应用程序,public:CShowAllProcessApp(); /整个程序中的应用程序/ Overrides/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CShowAllProcessApp)public:virtual BOOL InitInstance();/AFX_VIRTUAL/ Implementation/AFX_MSG(CShowAllProcessApp)/ NOTE - the ClassWizard will add and remove member functions here./ DO NOT EDIT what you see in these blocks of generated code !/AFX_MSG;/用户程序中的每个CCmdTarget派生类必须提供消息映射以处理消息,用这个函数了来处理用户消息DECLARE_MESSAGE_MAP()4.2 CaboutDlg类以CDialog 为基类创建CAboutDlg 类,CAboutDlg由CDialog 派生而来,用来处理进程管理器的主窗口。CLockfileDlg类的定义如下: class CAboutDlg : public CDialog public:CAboutDlg(); / Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ; /公有类型/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / 数据更新/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP() /;4.3、CshowAllProcessDlg类以CDialog为基类创建CShowAllProcessDlg 子类。 CLockfileDlg类的定义如下:class CShowAllProcessDlg : public CDialog/ Constructionpublic:DWORD m_ProcessIndex50;/存放所有进程的IDCShowAllProcessDlg(CWnd* pParent = NULL);/ standard constructor/ Dialog Data/AFX_DATA(CShowAllProcessDlg)enum IDD = IDD_SHOWALLPROCESS_DIALOG ;CListCtrlm_showlist;CSXButtonm_show;CSXButtonm_exit;CSXButtonm_stop;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CShowAllProcessDlg)protected:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:HICON m_hIcon;/ Generated message map functions/AFX_MSG(CShowAllProcessDlg)virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnGetProcess();afx_msg void OnStopProcess();afx_msg void OnstartBUTTON();afx_msg void Ononrun();/AFX_MSGDECLARE_MESSAGE_MAP()public:afx_msg void OnBnClickedCancel();public:afx_msg void OnLvnItemchangedListShow(NMHDR *pNMHDR, LRESULT *pResult);4.4、CSXButton类以CButton为基类创建CSXButton 类,CSXButton由CButton 派生而来,用于创建控制的按钮,用于界面的美化。CSXButton类的定义如下:class CSXButton : public CButton/ Constructionpublic: CSXButton();/ Attributesprivate: / Positioning BOOL m_bUseOffset; CPoint m_pointImage; CPoint m_pointText; int m_nImageOffsetFromBorder; int m_nTextOffsetFromImage; / Image HICON m_hIcon; HBITMAP m_hBitmap; HBITMAP m_hBitmapDisabled; int m_nImageWidth, m_nImageHeight;/ Color Tab char m_bColorTab; COLORREF m_crColorTab; / State BOOL m_bDefault; UINT m_nOldAction; UINT m_nOldState; / Operationspublic: / Positioning int SetImageOffset( int nPixels ); int SetTextOffset( int nPixels ); CPoint SetImagePos( CPoint p ); CPoint SetTextPos( CPoint p ); / Image BOOL SetIcon( UINT nID, int nWidth, int nHeight ); BOOL SetBitmap( UINT nID, int nWidth, int nHeight ); BOOL SetMaskedBitmap( UINT nID, int nWidth, int nHeight, COLORREF crTransparentMask ); BOOL HasImage();/ Color Tab void SetColorTab(COLORREF crTab);/ State BOOL SetDefaultButton( BOOL bState = TRUE );private: BOOL SetBitmapCommon( UINT nID, int nWidth, int nHeight, COLORREF crTransparentMask, BOOL bUseMask ); void CheckPointForCentering( CPoint &p, int nWidth, int nHeight ); void Redraw();/ Overrides / ClassWizard generated virtual function overrides /AFX_VIRTUAL(CSXButton) public: virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct); /AFX_VIRTUAL/ Implementationpublic: virtual CSXButton();/ Generated message map functionsprotected: /AFX_MSG(CSXButton) afx_msg LRESULT OnGetText(WPARAM wParam, LPARAM lParam); /AFX_MSG DECLARE_MESSAGE_MAP();六、功能测试本进程管理器实现了四个功能,加上调试形成五大界面,以下是程序调试后的各功能界面。1)进程管理器界面如图5所示: 图5 进程管理器界面2)获取进程界面如图6所示: 图6 获取进程界面3)启动新进程界面如图7所示: 图7 启动新进程界面4)终止进程界面如图8所示: 图8 终止进程界面5)退出进程界面如图9所示: 图9 退出进程界面七、存在的不足与对策经过三个星期的课程设计,终于编成了一个进程管理器,我从一个从未接触过MFC的新手到现在对MFC有了一定程度的了解,在此期间,我上网查阅了相关的资料,看网上视频教程和查阅图书馆的相关书籍,并在一些同学的帮助下,终于完成了这份粗糙的作品。通过这次课程设计中,我学到了很多关于MFC的只是,同时也对VC+有了更深的认识,并对编程有了新的看法。当然,在此过程中我也遇到了很多问题,有的问题经过研究科最终被解决了,有的问题却仍然存在,以下是我做这个实验遇到的问题,以及一些解决的方法:第一、通过本次试验,在“启动新进程”的实现函数里调用了MultiByteToWideChar,表示把多字节字符转为宽字节字符,它跟WideCharToMultiByte()函数(宽字节字符转为多字节字符)极容易混淆,实际上MultiByteToWideChar和WideCharToMultiByte是互逆的过程,MultiByteToWideChar是将普通字符串转化为Unicod,而WideCharToMultiByte正好相反。它们的操作过程相类似,在使用时首先要申请数组空间,然后分配响应的数组空间,接着是进行字符间的转换了,最后还要释放所占用的内存。这两个函数的缺点在于无法动态分配内存,在转换很长的字符串时可能会浪费较多内存空间,优点是在不考虑浪费空间的情况下转换较短字符串非常方便。 第二、在窗体界面美化方面。窗体的美化方法有很多,可以在PushButton控件中美化,可以在GroupButton控件中美化,可以在Edit控件中美化,在Static控件中美化等等,本系统是在PushButton控件中美化的,自定义一个基于Cbutton的子类 CSXButton,在CSXButton函数里对整个BUTTON控件进行绘制。此次课程设计由于时间和技术的问题,有很多地方还做得不够好,存在很多不足,有很地方还需要改进,在程序的设计方面。因为对MFC和VC+编程不太熟悉,在做设计的过程中遇到了很多问题,耗费了很多时间在代码的修改和调试上,还有很多界面的设置不能如愿实现,今后应在程序的编写上下苦功,不断加强自己的编程的能力。八、程序源代码/ ShowAllProcessDlg.cpp : implementation file/#include stdafx.h#include ShowAllProcess.h#include ShowAllProcessDlg.h#include TLHELP32.H/一定要加如这个头文件#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CShowAllProcessDlg dialogCShowAllProcessDlg:CShowAllProcessDlg(CWnd* pParent /*=NULL*/): CDialog(CShowAllProcessDlg:IDD, pParent)/AFX_DATA_INIT(CShowAllProcessDlg)/ NOTE: the ClassWizard will add member initialization here/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()-LoadIcon(IDI_ICON_START);void CShowAllProcessDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CShowAllProcessDlg)DDX_Control(pDX, IDC_LIST_SHOW, m_showlist);DDX_Control(pDX, IDOK, m_show); DDX_Control(pDX, IDOK, m_show);DDX_Control(pDX, IDCANCEL, m_exit);DDX_Control(pDX, IDC_STOP, m_stop);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CShowAllProcessDlg, CDialog)/AFX_MSG_MAP(CShowAllProcessDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDOK, OnGetProcess)ON_BN_CLICKED(IDC_STOP, OnStopProcess)/ON_BN_CLICKED(IDC_startBUTTON, OnstartBUTTON)ON_BN_CLICKED(IDC_onrun, Ononrun)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CShowAllProcessDlg message handlersBOOL CShowAllProcessDlg:OnInitDialog()CDialog:OnInitDialog();m_stop.SetIcon(IDI_ICON_STOP,25,25);m_exit.SetIcon(IDI_ICON_EXIT,25,25);m_show.SetIcon(IDI_ICON_SHOW,25,25);m_showlist.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);m_showlist.InsertColumn(0,进程映像名称);m_showlist.InsertColumn(1,进程开启的线程数);m_showlist.InsertColumn(2,PID);m_showlist.InsertColumn(3,优先级);for(int i=0;i4;i+)m_showlist.SetColumnWidth(i,120);/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization herereturn TRUE; / return TRUE unless you set the focus to a controlvoid CShowAllProcessDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CShowAllProcessDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CShowAllProcessDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CShowAllProcessDlg:OnGetProcess() / TODO: Add your control notification handler code hereHANDLE Snapshot;Snapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);/获得某一时刻系统的进程、堆(heap)、模块(module)或线程的快照信息PROCESSENTRY32 processListStr;processListStr.dwSize=sizeof(PROCESSENTRY32);BOOL return_value;return_value=Process32First(Snapshot,&processListStr);/获得系统进程链表中第一个进程的信息m_showlist.DeleteAllItems();int i=0;/item indexwhile(return_value)m_showlist.InsertItem(i,processListStr.szExeFile,0);CString s;s.Form

温馨提示

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

评论

0/150

提交评论