付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、网络程序设计课程设计报告书题目:局域网文件传输与消息通信专业:网络工程学号:20091423学生姓名:史政法指导教师:魏宁完成日期:2012年06月06日一、题目及要求Window程序设计的基本要求:1 .熟练掌握网络的基本概念和原理;2 .熟练掌握网络编程接口Socket概念及编程原理;3 .掌握基于TCP/IP的Internet编程技术;4 .掌握各种软件开发工具的使用过程及方法。本实例程序的技术要点是:如何从CasyncSocket类派生出自己的WinSock类。理解WinSock类与应用程序框架的关系。重点学习流式套接字对象的使用。处理网络事件的方法。二、系统概要设计1、CSocket
2、类的介绍在MFC中,为了提供面向对象的编程方式而封装了两个WinSock类:一个是CAsyncSocket类,另一个是CSocket类。他们的不同点在于前者使用的是非阻塞模式操作,而后者可以支持阻塞模式的I/O操彳KCSocket类是从CAsyncSocket类中继承来的,他为程序员提供了更高级的抽象性。由于CSocket类和CArchive类一起使用,并且管理了通讯的大多数操作,从而使程序员从网络编程的底层细节中解脱了出来,不必使用CAsyncSocket的一些成员函数和一些WindowsSocketAPI函数来处理通信问题。共同使用CSocket和CArchive类对象进行编程是最简单的W
3、inSock编程模式。下面是使用CSocket类进行网络通信的过程(1) 构造CSocket类对象(2) 用CSocket类对象的Create函数创建WindowsSocket,Create()函数会调用Bind()函数将此函数绑定的指定的地址和端口。(3) Socket创建完毕后,Listen()函数在服务器端进行监听客户的连接请求。(4) 在这一步,服务器端调用Accept0函数对客户端发来的请求进行接受和处理,而客户端则调用Connect()函数向服务器发出连接请求。(5) 在客户端和服务器端的数据传输完成后,应该分别在两边销毁创建的CSocket对象。2、编程思路和工程实现用MFCAp
4、pWizard新建一个给予对话框的工程,在第三步中添加WindowsSocketS的十穴住.米开【J松件IDCaption丁工11人上v/Rc+a+ic+av+H11IDIDC_STATIC/Idfl口in日于九小siaiiciexi云S7/ka+c+ic+q'z+IDC_STATIC_SERVPORT,八儿FIJip.更迩希的in-田仆statictext云Sl/ka+c+ic+q'z+IDC_STATIC_MSG交庄攸口Jip.滔自田仆statictextIDC_MYIP彳日后、ip叫川binternetaddIDMk+【Llc+crcc+or4r4IDC_YOURIPip
5、叫川binternetadd幺扃左号木匹pHithexIDC_EDIT_MSG“ULH耳l/euiiuoxhiittcnIDC_BUIIONCONNECT启动npYjjaknuuttunhiittenIDC_BUIION_DISCONNE关闭npbjJaknuuttun命令按钮buttonA士由Ag,|I.nrT-iflIDC_BUTTON_SENDMSGIDC_BUIION_SEND_FIL发送消息zau叩望也位button土方层77kuHccIDC_BUTTON_STOP1透乂件叩寸女拉button牵口hii+cnIDCANCELnpb攸UibuttonIDCPROGRESSSENDF支持
6、,建立的程序界面如右图:本机的ip二要连接的保二;褊疆I传送文件停止传送图1一程序主对话框中的控件属性MessageMapsMemberV4riablcEAulamatinnIActiveXEventsIClassfnfnProject:HletranClas&name:AddCiass:.-.;CFiletranDlgAddVariable.MemberDeleteVariableIDC_BUTTON_DISCONNECTIDC_BUTTON_SEND_HLEIDCDUTTONSENDMSGidcZbuttonZstopIDC-RUTTONCONNECTIDCEDITMSGIDC_M
7、YIPIDCPROGRESSSENDFILEUpdateCiiluinfrndAllCStringmMsgSendCIPAddressCtrEmMypPrngressCh1ni_PrdgrcssIDCANCELDescription:maptoClPAddresClrlmember图2对话框中的控件对象定义相应的成员变量编程思路:首先在对话框中输入要连接的IP地址,然后单击“启动”按钮,要连接的主机也做相同的操作,两边都准备完事后,两台计算机就可以消息和文件的传输了。单击“启动”按钮时,处理函数启动了监听线程来启动服务,主要的语句如下:pThreadListen=:AfxBeginThread
8、(_ListenTcpThread,this);点击“发送消息”按钮时,处理函数启动了消息发送线程来进行消息的传送,语句如下:pThreadSendMsg=:AfxBeginThread(_SendMsgThread,this);当点击“传送文件”按钮时,处理函数启动了文件传输线程来进行文件传输,语句如下:pThreadSendMsg=:AfxBeginThread(_SendFileThread,this);下面主要介绍一下要用到的三个线程和一个文件接收处理函数。首先要产生三个线程对象:CWinThread_ListenTcpThread;CWinThread_SendFileThread;
9、CWinThread_SendMsgThread;三、系统详细设计1 .监听线程函数UINT_ListenTcpThread(LPVOIDlparam)CFiletranDlg*pDlg=(CFiletranDlg*)lparam;if(pDlg->StopServer=true)return-1;CSocketsockSrvr;pDlg->m_Potr=PORT;保存当前使用端口,用于关闭intcreateSucceed=sockSrvr.Create(pDlg->m_Potr);if(createSucceed=0)AfxMessageBox("_ListenT
10、cpThreadCreate错误!"+pDlg->GetError(GetLastError();return-1;intlistenSucceed=sockSrvr.Listen();开始监听if(listenSucceed=0)(AfxMessageBox("_ListenTcpThreadListen错误!"+pDlg->GetError(GetLastError();return-1;CSocketrecSo;SOCKADDR_INclient;intiAddrSize=sizeof(client);intacceptSucceed=sockS
11、rvr.Accept(recSo,(SOCKADDR*)&client,&iAddrSize);接受连接并取得对方IPif(acceptSucceed=0)(AfxMessageBox("_ListenTcpThreadAccept错误!"+pDlg->GetError(GetLastError();return-1;sockSrvr.Close();/关闭charflagFLAG=0;if(recSo.Receive(flag,FLAG)!=2)return-1;pDlg->m_type=flag0;if(pDlg->m_type=
12、9;D')return0;pThreadListen=:AfxBeginThread(_ListenTcpThread,pDlg);pDlg->ReceiveFileMsg(recSo,client);return0;2 .传送文件线程函数UINT_SendFileThread(LPVOIDlparam)CFiletranDlg*pDlg=(CFiletranDlg*)lparam;if(pDlg->StopServer=true)return-1;CSocketsockClient;sockClient.Create();CStringip;pDlg->m_Your
13、Ip.GetWindowText(ip);sockClient.Connect(ip,PORT);首先发送标记F为文件,2intend=0;end=sockClient.Send("F",FLAG);/发送标志是否成功if(end=SOCKET_ERROR)AfxMessageBox("_SendFileThreadSend错误!"+pDlg->GetError(GetLastError();return-1;elseif(end!=2)AfxMessageBox("文件头错误");return-1;/CFilemyFile;F
14、ILEINFOmyFileInfo;if(!myFile.Open(pDlg->m_fileName,CFile:modeRead|CFile:typeBinary)return-1;myFileInfo.fileLength=myFile.GetLength();/得到文件大小strcpy(myFileInfo.fileName,myFile.GetFileName();/得到文件名称sockClient.Send(&myFileInfo,sizeof(myFileInfo);发送文件信息pDlg->m_Progress.SetRange32(0,myFileInfo.f
15、ileLength);myFile.Seek(0,CFile:begin);charm_bufSIZEFILE=0;CStringstrError;intnum=0;end=0;inttemp=0;for(;)if(pDlg->FileWork=false)pDlg->FileWork=true;pDlg->GetDlgItem(IDCANCEL)->EnableWindow(false);pDlg->GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(false);)num=myFile.Read(m_buf,S
16、IZEFILE);if(num=0)break;end=sockClient.Send(m_buf,num);temp+=end;pDlg->m_Progress.SetPos(temp);if(pDlg->FileStop=true)pDlg->FileStop=false;pDlg->FileWork=false;break;)if(end=SOCKET_ERROR)AfxMessageBox("_SendFileThreadSend错误!"+pDlg->GetError(GetLastError();break;)pDlg->m_P
17、rogress.SetPos(0);CStringstrLocalName;pDlg->GetLocalHostName(strLocalName);CStringstrLocalIP;pDlg->GetIpAddress(strLocalName,strLocalIP);if(temp=myFileInfo.fileLength)AfxMessageBox("文件发送成功");elseAfxMessageBox("文件发送失败");myFile.Close();sockClient.Close();pDlg->FileWork=fal
18、se;pDlg->GetDlgItem(IDC_PROGRESS_SEND_FILE)->ShowWindow(SW_HIDE);pDlg->GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(false);pDlg->GetDlgItem(IDCANCEL)->EnableWindow(true);pDlg->GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(true);return0;)3.发送消息线程函数UINT_SendMsgThread(LPVOIDlpara
19、m)/TCP发送信息线程CFiletranDlg*pDlg=(CFiletranDlg*)lparam;if(pDlg->StopServer=true)return-1;CSocketsockClient;sockClient.Create();CStringip,strError;pDlg->m_YourIp.GetWindowText(ip);intconn=sockClient.Connect(ip,PORT);if(conn=0)/AfxMessageBox("_SendMsgThreadConnect错误!"+pDlg->GetError(Ge
20、tLastError();sockClient.ShutDown(2);sockClient.Close();AfxEndThread(1L);return0;首先发送标记M为信息,2intend=0;end=sockClient.Send("M",FLAG);if(end=SOCKET_ERROR)AfxMessageBox("_SendMsgThreadSend错误!"+pDlg->GetError(GetLastError();return-1;elseif(end!=2)AfxMessageBox("消息头错误");re
21、turn-1;CStringstrMsg=pDlg->message;end=sockClient.Send(strMsg,strMsg.GetLength();if(end=SOCKET_ERROR)AfxMessageBox("_SendMsgThreadSend错误!"+pDlg->GetError(GetLastError();return-1;inti=0;sockClient.Close();return0;4.文件接收处理函数intCFiletranDlg:SaveYourFile(CSocket&recSo,SOCKADDR_IN&
22、;client)CStringfname;CFileDialogdlg(false);另存文件FILEINFOmyFileInfo;recSo.Receive(&myFileInfo,sizeof(FILEINFO);intfileLength=myFileInfo.fileLength;CStringstrfileIp,strfileName,strfileLength;strfileIp.Format(inet_ntoa(client.sin_addr);strfileName.Format(myFileInfo.fileName);strfileLength.Format(&qu
23、ot;%f",myFileInfo.fileLength/1024.0);CStringtitle="文件"+strfileName+"大小"+strfileLength+"KB"+"来在"+strfileIp+"是否接受"dlg.m_ofn.lpstrTitle=title;/标题条charfileme500=0;必须足够大小strcpy(fileme,strfileIp+strfileName);dlg.m_ofn.lpstrFile=fileme;文件名称if(dlg.DoMod
24、al()=IDOK)fname=dlg.GetPathName();得到文件名名称、路径GetDlgItem(IDC_PROGRESS_SEND_FILE)->ShowWindow(SW_SHOW);elseGetDlgItem(IDC_PROGRESS_SEND_FILE)->ShowWindow(SW_HIDE);GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(true);GetDlgItem(IDCANCEL)->EnableWindow(true);recSo.Close();return0;charbufSIZE
25、FILE=0;CFilef(fname,CFile:modeCreate|CFile:modeWrite);存文件m_Progress.SetRange32(0,fileLength);intn=0;接受的字节数0表示结束inttemp=0;GetDlgItem(IDCANCEL)->EnableWindow(false);GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(false);for(;)n=recSo.Receive(buf,SIZEFILE);接受if(n=0)/0表示结束break;接受完毕f.Write(buf,n);
26、temp+=n;m_Progress.SetPos(temp);if(FileWork=false)FileWork=true;if(FileStop=true)FileStop=false;FileWork=false;break;f.Close();m_Progress.SetPos(0);if(temp=fileLength)MessageBox("文件接受成功");elseMessageBox("文件接受失败");FileWork=false;GetDlgItem(IDC_PROGRESS_SEND_FILE)->ShowWindow(SW
27、_HIDE);GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(false);GetDlgItem(IDCANCEL)->EnableWindow(true);GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(true);return0;四、课程设计总结采用多线程方法,利用MFC的CSocket类,可以简单方便的实现计算机用户间的文件传输和消息发送功能。以上的程序在VisualC+6.0环境编译通过,并且在学校机房内(本机和本机、本机和他机之间)测试能达到基本的要求。当然我们可以通过继续增加线程来
28、进一步拓展程序的功能。指导教师评语:成绩:指导教师:添加的代码:#include"stdafx.h"#include"Filetran.h"#include"FiletranDlg.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE口=_FILE_;#endif#definePORT34567#defineSIZEFILE1024#defineFLAG2CWinThread*pThreadSendFile;CWinThread*pThreadListe
29、n;CWinThread*pThreadSendMsg;CFiletranDlg二CFiletranDlg(CWnd*pParent/*=NULL*/):CDialog(CFiletranDlg:IDD,pParent)/AFX_DATA_INIT(CFiletranDlg)m_MsgSend=_T("");message=_T("");/AFX_DATA_INIT/NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32m_hIcon=AfxGetApp()->LoadIcon(IDR
30、_MAINFRAME);FileWork=FileStop=false;StopServer=false;voidCFiletranDlg:DoDataExchange(CDataExchange*pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CFiletranDlg)DDX_Control(pDX,IDC_PROGRESS_SEND_FILE,m_Progress);DDX_Control(pDX,IDC_YOURIP,m_YourIp);DDX_Control(pDX,IDC_MYIP,m_MyIp);DDX_Text(pDX,IDC_EDIT
31、_MSG,m_MsgSend);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CFiletranDlg,CDialog)/AFX_MSG_MAP(CFiletranDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTONCONNECT,OnButtonconnect)ON_BN_CLICKED(IDC_BUTTON_DISCONNECT,OnButtonDisconnect)ON_BN_CLICKED(IDC_BUTTON_SEND_FILE,OnButtonSendFile
32、)ON_BN_CLICKED(IDC_BUTTON_STOP,OnButtonStop)ON_BN_CLICKED(IDC_BUTTON_SENDMSG,OnButtonSendmsg)/AFX_MSG_MAPEND_MESSAGE_MAP()BOOLCFiletranDlg:OnInitDialog()CDialog:OnInitDialog();ASSERT(IDM_ABOUTBOX&0xFFF0)=IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX<0xF000);CMenu*pSysMenu=GetSystemMenu(FALSE);if(pSysMenu
33、!=NULL)CStringstrAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if(!strAboutMenu.IsEmpty()pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);SetIcon(m_hIcon,TRUE);/SetbigiconSetIcon(m_hIcon,FALSE);/SetsmalliconCStringstrLocalName;GetLocalHostName(strL
34、ocalName);CStringstrLocalIP;GetIpAddress(strLocalName,strLocalIP);m_MyIp.SetWindowText(strLocalIP);得到本地的ipCStringtext="MyProgramTCP方式”;SetWindowText(text);GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(false);/断开不可用GetDlgItem(IDC_BUTTONCONNECT)->EnableWindow(true);/连接可用GetDlgItem(IDC_BUT
35、TON_SEND_FILE)->EnableWindow(false);GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(false);GetDlgItem(IDC_BUTTON_SENDMSG)->EnableWindow(false);returnTRUE;/returnTRUEunlessyousetthefocustoacontrolvoidCFiletranDlg:OnSysCommand(UINTnID,LPARAMlParam)if(nID&0xFFF0)=IDM_ABOUTBOX)CAboutDlgdlgAbout;d
36、lgAbout.DoModal();)else(CDialog:OnSysCommand(nID,lParam);)voidCFiletranDlg:OnPaint()(if(IsIconic()(CPaintDCdc(this);/devicecontextforpaintingSendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);intcxIcon=GetSystemMetrics(SM_CXICON);intcyIcon=GetSystemMetrics(SM_CYICON);CRectrect;GetClientRect(&a
37、mp;rect);intx=(rect.Width()-cxIcon+1)/2;inty=(rect.Height()-cylcon+1)/2;dc.DrawIcon(x,y,m_hlcon);).else(CDialog:OnPaint();)HCURSORCFiletranDlg:OnQueryDragIcon()(return(HCURSOR)m_hIcon;).UINT_ListenTcpThread(LPVOIDlparam)(.CFiletranDlg*pDlg=(CFiletranDlg*)lparam;if(pDlg->StopServer=true)return-1;C
38、SocketsockSrvr;pDlg->m_Potr=PORT;/保存当前使用端口,用于关闭intcreateSucceed=sockSrvr.Create(pDlg->m_Potr);if(createSucceed=0)(AfxMessageBox("_ListenTcpThreadCreate错误!"+pDlg->GetError(GetLastError();return-1;)intlistenSucceed=sockSrvr.Listen();开始监听if(listenSucceed=0)AfxMessageBox("_Listen
39、TcpThreadListen错误!"+pDlg->GetError(GetLastError();return-1;)CSocketrecSo;SOCKADDR_INclient;intiAddrSize=sizeof(client);intacceptSucceed=sockSrvr.Accept(recSo,(SOCKADDR*)&client,&iAddrSize);if(acceptSucceed=0)AfxMessageBox("_ListenTcpThreadAccept错误!"+pDlg->GetError(GetLas
40、tError();return-1;)sockSrvr.Close();/厌闭charflagFLAG=0;if(recSo.Receive(flag,FLAG)!=2)return-1;pDlg->m_type=flag0;if(pDlg->m_type='D')return0;pThreadListen=:AfxBeginThread(_ListenTcpThread,pDlg);pDlg->ReceiveFileMsg(recSo,client);return0;UINT_SendFileThread(LPVOIDlparam)CFiletranDlg*
41、pDlg=(CFiletranDlg*)lparam;if(pDlg->StopServer=true)return-1;CSocketsockClient;sockClient.Create();CStringip;pDlg->m_YourIp.GetWindowText(ip);sockClient.Connect(ip,PORT);/首先发送标记F为文件,2intend=0;end=sockClient.Send("F",FLAG);/发送标志是否成功if(end=SOCKET_ERROR)(AfxMessageBox("_SendFileThr
42、eadSend错误!"+pDlg->GetError(GetLastError();return-1;elseif(end!=2)(AfxMessageBox("文件头错误");return-1;CFilemyFile;FILEINFOmyFileInfo;if(!myFile.Open(pDlg->m_fileName,CFile二modeRead|CFile二typeBinary)return-1;myFileInfo.fileLength=myFile.GetLength();/得到文件大小strcpy(myFileInfo.fileName,m
43、yFile.GetFileName();/得到文件名称sockClient.Send(&myFileInfo,sizeof(myFileInfo);发送文件信息pDlg->m_Progress.SetRange32(0,myFileInfo.fileLength);myFile.Seek(0,CFile:begin);charm_bufSIZEFILE=0;CStringstrError;intnum=0;end=0;inttemp=0;for(;)if(pDlg->FileWork=false)pDlg->FileWork=true;pDlg->GetDlgI
44、tem(IDCANCEL)->EnableWindow(false);pDlg->GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(false);num=myFile.Read(m_buf,SIZEFILE);if(num=0)break;end=sockClient.Send(m_buf,num);temp+=end;pDlg->m_Progress.SetPos(temp);if(pDlg->FileStop=true)pDlg->FileStop=false;pDlg->FileWork=false;
45、break;)if(end=SOCKET_ERROR)(AfxMessageBox("_SendFileThreadSend错误!"+pDlg->GetError(GetLastError();break;)pDlg->m_Progress.SetPos(0);CStringstrLocalName;pDlg->GetLocalHostName(strLocalName);CStringstrLocalIP;pDlg->GetIpAddress(strLocalName,strLocalIP);if(temp=myFileInfo.fileLengt
46、h)AfxMessageBox("文件发送成功");elseAfxMessageBox("文件发送失败");myFile.Close();sockClient.Close();pDlg->FileWork=false;pDlg->GetDlgItem(IDC_PROGRESS_SEND_FILE)->ShowWindow(SW_HIDE);pDlg->GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(false);pDlg->GetDlgItem(IDCANCEL)->Enabl
47、eWindow(true);pDlg->GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(true);return0;)UINT_SendMsgThread(LPVOIDlparam)/TCP发送信息线程(CFiletranDlg*pDlg=(CFiletranDlg*)lparam;if(pDlg->StopServer=true)return-1;CSocketsockClient;sockClient.Create();CStringip,strError;pDlg->m_YourIp.GetWindowText(ip
48、);intconn=sockClient.Connect(ip,PORT);if(conn=0)/(AfxMessageBox("_SendMsgThreadConnect错误!"+pDlg->GetError(GetLastError();sockClient.ShutDown(2);sockClient.Close();AfxEndThread(1L);return0;)/首先发送标记M为信息,2intend=0;end=sockClient.Send("M",FLAG);if(end=SOCKET_ERROR)AfxMessageBox(&q
49、uot;_SendMsgThreadSend错误!"+pDlg->GetError(GetLastError();return-1;)elseif(end!=2)AfxMessageBox("消息头错误");return-1;)CStringstrMsg=pDlg->message;end=sockClient.Send(strMsg,strMsg.GetLength();if(end=SOCKET_ERROR)AfxMessageBox("_SendMsgThreadSend错误!"+pDlg->GetError(GetLa
50、stError();return-1;)inti=0;sockClient.Close();return0;)intCFiletranDlg:GetLocalHostName(CString&sHostName)charszHostName256;intnRetCode;nRetCode=gethostname(szHostName,sizeof(szHostName);if(nRetCode!=0)sHostName=_T('没有取得!");returnGetLastError();)sHostName=szHostName;return0;)intCFiletranDlg:GetIpAddress(constCString&sHostName,CString&sIpAddress)HOSTENT*pHe;pHe=gethostbyname(sHostName);structin_addrinAddr;inAddr.s_addr=*(unsignedlong*)pHe->h_addr_list0);sIpAddress=inet_ntoa(inAddr);if(sIpAddress.IsEmpty()sIpAddress=_T("没有取得!");return
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电子维修服务站设备操作与维护手册
- 中国人民建设银行借款合同
- 分部分项验收规范方案
- 交通行业大数据安全防护手册
- 2025年河北省生物试题及答案
- 科技创新激发探索欲望小学主题班会课件
- 土地规划利用试题及答案
- 环境保护小卫士:节约用水篇小学主题班会课件
- 年医疗汽车电池材料市场供需关系投资潜力规划分析报告
- 职场人士商务沟通技巧高效提升指导书
- 2026湖南衡阳市衡东县卫健系统招聘专业技术人员46人模拟试卷完整附答案详解
- 2026-2030国内铁路电气设备行业市场发展分析及竞争格局与投资机会研究报告
- 2026-2030中国建筑信息模型(BIM)行业发展状况与前景趋势研究报告
- 水电站运行人员考试题及答案(教学参考)
- 2026年营养师《公共营养》测试卷(含答案)专项训练
- 2026年甘肃省三支一扶招聘考试(1800人)考试参考题库及答案详解
- 2026年学校会计高频面试题包含详细解答
- 初中八年级历史《民族团结与祖国统一》单元整体导学案
- 2026年7月自考13811绩效管理押题及答案
- 多病共存患者安全管理
- 24J113-1 内隔墙-轻质条板(一)
评论
0/150
提交评论