




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录1引言31.1课题要求及目标31.2 开发目标72系统总体设计(针对一个完整的题目)72.1 用例图及用例描述72.2系统结构103. 系统详细设计与实现11 3.1引言.11 3.2程序系统的结构.12 3.3类级说明.13 3.4函数级说明.24总结37 4.1 运行结果.37 4.2 测试与分析465任务分配表47参考文献481引言1.1课题要求及目标(1) 课题要求软件名:网上聊天系统(分服务器端和客户端两部分)功能: 使用Winsock实现网上聊天功能(实现时可在一台机器上调试运行)。用户可以通过客户端连接到服务器端并进行网上聊天。当然,聊天时可以启动多个客户端。编程语言:java 硬件平台CPU:Pentium4以上内存:128M以上软件平台操作系统:windows系列,mac系列,linux等 开发工具:Eclipse,JDK6描述: (1)实现群聊和私聊; (2)实现文件的发送与接收; (3)实现截图功能; (4)实现用户列表的维护。 (5)实现字体的改变(2) 开发技术Socket 的编程模型如图1所示。图1 Socket 的编程模型字节流套接字(Stream Socket)是最常用的套接字类型,TCP/IP协议族中的 TCP 协议使用此类接口。字节流套接口提供面向连接的、无差错的、发送先后顺序一致的、无记录边界和非重复的网络信息包传输。其模型如图2所示。数据报套接字 (Datagram Socket)TCP/IP协议族中的UDP协议使用此类接口,它是无连接的服务,它以独立的信息包进行网络传输,信息包最大长度为32KB,传输不保证顺序性、可靠性和无重复性,它通常用于单个报文传输或可靠性不重要的场合。数据报套接口的一个重要特点是它保留了记录边界。其模型如图3所示。原始数据报套接字(Raw Socket)提供对网络下层通讯协议(如IP协议)的直接访问,它一般不是提供给普通用户的,主要用于开发新的协议或用于提取协议较隐蔽的功能。图2 面向连接的SOCKET编程模型图3 面向非连接的SOCKET编程模型 Windows Sockets规范中定义了一个新的数据类型 SOCKET,这一类型的定义对于将来Windows Sockets规范的升级是必要的。这一类型的定义保证了应用程序向Win32 环境的可移植性。因为这一类型会自动地从16位升级到32位。(3) 程序开发环境和开发语言创建套接字socket()应用程序在使用套接字前,首先必须拥有一个套接字,系统调用socket()向应用程序提供创建套接字的手段,其调用格式如下:SOCKET socket(int af, int type, int protocol);该调用要接收三个参数:af、type、protocol。参数af指定通信发生的区域,UNIX系统支持的地址族有:AF_UNIX、AF_INET、AF_NS等,而DOS、WINDOWS中仅支持AF_INET,它是网际网区域。因此,地址族与协议族相同。参数type 描述要建立的套接字的类型。若取SOCK_STREAM表示要创建的套接字是流套接字,取SOCK_DGRAM创建的是数据报套接字,取SOCK_RAW表示创建原始套接字。参数protocol说明该套接字使用的特定协议,如果调用者不希望特别指定使用的协议,则置为0,使用默认的连接模式。若套接字创建成功则该函数返回所创建的套接字句柄SOCKET,否则产生INVALID_SOCKET错误。指定本地地址bind()当一个套接字用socket()创建后,存在一个名字空间(地址族),但它没有被命名。bind()将套接字地址(包括本地主机地址和本地端口地址)与所创建的套接字号联系起来,即将名字赋予套接字,以指定本地半相关。其调用格式如下:int bind(SOCKET s, const struct sockaddr* name, int namelen);参数s是由socket()调用返回的并且未作连接的套接字描述符(套接字号)。参数name 是赋给套接字s的本地地址,它由struct sockaddr结构表示,namelen表明了name的长度。如果没有错误发生,bind()返回0。否则返回值SOCKET_ERROR。sockaddr结构随选择的协议不同而变化,因此一般情况下另一个与该地址结构大小相同的sockaddr_in结构更常用,sockaddr_in结构用来标识TCP/IP协议下的地址,并可以方便地通过强制类型转换将其转换为sockaddr结构,sockaddr_in的格式如下:struct sockaddr_in short sin_family; /*AF_INET*/u_short sin_port; /*16位端口号*/struct in_addr sin_addr; /*32位IP地址*/char sin_zero8; /*保留*/监听连接listen()此调用用于面向连接服务器,表明它愿意接收连接。listen()需在accept()之前调用,其调用格式如下:int listen(SOCKET s, int backlog);参数s标识一个本地已建立、尚未连接的套接字号,服务器愿意从它上面接收请求。backlog表示请求连接队列的最大长度,用于限制排队请求的个数,目前允许的最大值为5。如果没有错误发生,listen()返回0。否则它返回SOCKET_ERROR。listen()在执行调用过程中可为没有调用过bind()的套接字s完成所必须的连接,并建立长度为backlog的请求连接队列。 调用listen()是服务器接收一个连接请求的四个步骤中的第三步。它在调用socket()分配一个流套接字,且调用bind()给s赋于一个名字之后调用,而且一定要在accept()之前调用。建立套接字连接connect()与accept()这两个系统调用用于完成一个完整相关的建立,其中connect()用于建立连接。无连接的套接字进程也可以调用connect(),但这时在进程之间没有实际的报文交换,调用将从本地操作系统直接返回。这样做的优点是程序员不必为每一数据指定目的地址,而且如果收到的一个数据报,其目的端口未与任何套接字建立“连接”,便能判断该端口不可操作。而accept()用于使服务器等待来自某客户进程的实际连接。connect()的调用格式如下:int connect(SOCKET s, const struct sockaddr * name, int namelen);参数s是欲建立连接的本地套接字描述符。参数name指出说明对方套接字地址结构的指针。对方套接字地址长度由namelen说明。如果没有错误发生,connect()返回0。否则返回值SOCKET_ERROR。在面向连接的协议中,该调用导致本地系统和外部系统之间连接实际建立。由于地址族总被包含在套接字地址结构的前两个字节中,并通过socket()调用与某个协议族相关。因此bind()和connect()无须协议作为参数。accept()的调用格式如下:SOCKET accept(SOCKET s, struct sockaddr * addr, int FAR* addrlen);参数s为本地套接字描述符,在用做accept()调用的参数前应该先调用过listen()。addr 指向客户方套接字地址结构的指针,用来接收连接实体的地址。addr的确切格式由套接字创建时建立的地址族决定。addrlen 为客户方套接字地址的长度(字节数)。如果没有错误发生,accept()返回一个SOCKET类型的值,表示接收到的套接字的描述符。否则返回值INVALID_SOCKET。accept()用于面向连接服务器。参数addr和addrlen存放客户方的地址信息。调用前,参数addr 指向一个初始值为空的地址结构,而addrlen 的初始值为0;调用accept()后,服务器等待从编号为s的套接字上接受客户连接请求,而连接请求是由客户方的connect()调用发出的。当有连接请求到达时,accept()调用将请求连接队列上的第一个客户方套接字地址及长度放入addr 和addrlen,并创建一个与s有相同特性的新套接字号。新的套接字可用于处理服务器并发请求。四个套接字系统调用,socket()、bind()、connect()、accept(),可以完成一个完全五元相关的建立。socket()指定五元组中的协议元,它的用法与是否为客户或服务器、是否面向连接无关。bind()指定五元组中的本地二元,即本地主机地址和端口号,其用法与是否面向连接有关:在服务器方,无论是否面向连接,均要调用bind();在客户方,若采用面向连接,则可以不调用bind(),而通过connect()自动完成。若采用无连接,客户方必须使用bind()以获得一个唯一的地址。以上讨论仅对客户/服务器模式而言,实际上套接字的使用是非常灵活的,唯一需遵循的原则是进程通信之前,必须建立完整的相关。数据传输send()与recv()当一个连接建立以后,就可以传输数据了。常用的系统调用有send()和recv()。send()调用用于在参数s指定的已连接的数据报或流套接字上发送输出数据,格式如下:int send(SOCKET s, const char *buf, int len, int flags);参数s为已连接的本地套接字描述符。buf 指向存有发送数据的缓冲区的指针,其长度由len 指定。flags 指定传输控制方式,如是否发送带外数据等。如果没有错误发生,send()返回总共发送的字节数。否则它返回SOCKET_ERROR。recv()调用用于在参数s指定的已连接的数据报或流套接字上接收输入数据,格式如下:int recv(SOCKET s, char *buf, int len, int flags);参数s 为已连接的套接字描述符。buf指向接收输入数据缓冲区的指针,其长度由len 指定。flags 指定传输控制方式,如是否接收带外数据等。如果没有错误发生,recv()返回总共接收的字节数。如果连接被关闭,返回0。否则它返回SOCKET_ERROR。关闭套接字closesocket()closesocket()关闭套接字s,并释放分配给该套接字的资源;如果s涉及一个打开的TCP连接,则该连接被释放。closesocket()的调用格式如下:BOOL closesocket(SOCKET s);参数s待关闭的套接字描述符。如果没有错误发生,closesocket()返回0。否则返回值SOCKET_ERROR。(4) 每个人自行完成上述任务。1.2 开发目标本课程设计目标是实现方便快捷的局域网多人在线聊天系统,人性化的界面,主要功能如下:(1)实现群聊和私聊;(2)实现文件的发送与接收; (3)实现截图功能; (4)实现用户列表的维护。 (5)实现字体的改变2系统总体设计(针对一个完整的题目)2.1 用例图及用例描述客户端服务器端主要用例描述:用例名:客户端登录主要参与者:用户概述:用户通过此用例连接服务器交互过程:1.用户打开客户端2.用户输入服务器地址,端口3.输入昵称,性别4.点击登陆进行登录,触发用例用例名:群聊,私聊主要参与者:用户概述:用户通过此用例与其他用户聊天交互过程:1.用户编写聊天信息2.点击发送按钮即可完成发送用例名:文件传送与接收主要参与者:用户概述:用户通过此用例完成文件传送与接收交互过程:1. 选择接受者2. 用户点击发送文件按钮3. 选择文件,并发送4.用户接收文件用例名:截图主要参与者:用户概述:通过此用例用户可以完成截图并保存交互过程:1. 用户点击截图按钮2. 确定截图范围3. 保存用例名:保存聊天记录主要参与者:用户概述:通过此用例用户可以保存并查看聊天记录交互过程:1. 用户点击聊天记录2. 保存用例名:保存日志主要参与者:管理员概述:通过此用例管理员可以完成保存系统日志交互过程:1. 用户点击保存日志2. 保存用例名:维护用户列表主要参与者:管理员概述:通过此用例管理员可以完成维护用户列表交互过程:2.2系统结构服务器-客户端结构图:小型通信系统显接收文件删发送文件添管理用户列表改登录打保存系统日志I管理用户客户端服务器端登维护用户列表公保存聊天日志消私聊搜群聊界截图2.3 数据存储方案本系统以文本方式存储聊天记录和系统日志3. 系统详细设计与实现3.1引言(1)编写目的:(1)系统稳定运行、安全可靠。(2)界面美观、交互界面友好。(3)易安装、易维护、易操作。(4)强大的消息发送与接收(5)强大的文件发送系统(6)基础信息设置完善(2)背景: a软件系统的名称:五人组聊天系统b本项目的的成员有:刘洋,邓成吉,王博,王志新,徐洪涛c. 硬件平台CPU:Pentium4以上内存:128M以上d. 软件平台操作系统:windows系列,mac系列,linux等e. 开发工具:Eclipse,JDK6(3)设计思想:本系统用消息格式的方式来发送与接收消息与文件,客户端以消息格式区别消息的种类,当收到的消息是发送给自己的就作出相应处理。服务器在其中起到接收客户机消息并进行群发,具体消息处理交给客户机。本系统的消息格式有以下几种:(1) 用户登录信息Old&exist_name&exist_sexNew&name&sex(2) 传送文件客户机给服务机:sendtrue&接受者&发送者IP服务机给客户机:sendtrue&接受者&发送者IP 真正传文件是客户机与客户机传送,服务机只起到搜索接收方(3) 聊天消息格式:群聊:withwho&sender&recever&message消息显示在群聊区私聊:客户机给服务器:privatetalk&sender&receiver&message服务机给客户机:privatetrue&sender&receiver&message消息显示在私聊区(4) 系统消息“系统消息”+name+“退出聊天室”3.2程序系统的结构小型通信系统显接收文件删发送文件添管理用户列表改登录打保存系统日志I管理用户客户端服务器端登维护用户列表公保存聊天日志消私聊搜群聊界截图3.3“类”级说明服务器端类名ChatServerFrame类的作用服务器主功能模块 负责实现服务器主要功能 调用其他功能模块类定义与实现:成员说明: private static final long serialVersionUID = 1L;static final int DEFAULT_PORT = 6000;static ServerSocket serverSocket;static Vector connections;/连接static Vector clients;/服务器信息面板JPanel pnlServer,pnlServerInfo;JLabel lblStatus,lblNumber,lblMax,lblServerName,lblIP,lblPort,lblLog;JTextField txtStatus,txtNumber,txtMax,txtServerName,txtIP,txtPort;JButton btnStop,btnSaveLog;static TextArea taLog;JTabbedPane tpServer;TextArea taMessage;接口说明:类名ClientProc类的作用服务器主功能模块 负责实现服务器主要功能 调用其他功能模块类定义与实现:成员说明: Socket s;BufferedReader in;PrintWriter out;private String name = null;private String sex = null; public ChatServerFrame SFrame;接口说明:客户端类名Connect类的作用客户端登录功能模块,实现与服务器连接,并进入聊天室类定义与实现:成员说明: private static final long serialVersionUID = 1L;private Socket client;/套接字private String hostName = localhost;private int port = 6000;private JLabel nameLabel;private JTextField nameText;private JRadioButton boyRadio,girlRadio,secretRadio;private String sex = ; / 标示用户性别信息private JLabel hostLabel;private JLabel portLabel;private JTextField hostText;private JTextField portText;private JButton cancell;private JButton ok;private Container c;private BufferedReader in;private PrintWriter out;接口说明:类名ChatFrame类的作用客户端聊天室窗口功能模块,消息输入与显示,调用其它功能类定义与实现:成员说明: /*菜单栏* private Box box = null; / 放输入组件的容器 private JComboBox fontName = null, fontSize = null, fontStyle = null, fontColor = null,sendings=null;/fontBackColor = null; / 字体名称;字号大小;文字样式;文字颜色;传送 private StyledDocument doc = null; private JFileChooser jfc; private JTextPane commonArea=null; /公共发言区private JTextPane myMsgArea=null;/我的频道发言区public JComboBox perponsComboBox; /下拉菜单private JTextArea inMsgField; /发言输入框private JCheckBox privateTalk;/私聊checkboxprivate boolean privateTalkFlag = false; /是否是私聊,默认值为假private JButton sentButton; /发送消息按钮private JButton screenCapture;/截屏按钮private JButton save;/保存聊天记录private JMenuItem menuItem;private JMenuItem cMenuItem;public BufferedReader in;public PrintWriter out;public String myName;private String withWho = 所有人;String outmsg;/发送的信息String mywords;/要说的话JPanel centerPanel;JScrollPane commonAreaScroll;JScrollPane myMsgAreaScroll;JScrollPane inMsgFieldScroll;public PList plist;/*聊天室顶层*/ JPanel upperPanel = new JPanel();String str_name = 宋体, 黑体, Dialog, Gulim ; String str_Size = 12, 14, 18, 22, 30, 40 ; String str_Style = 常规, 斜体, 粗体, 粗斜体 ; String str_Color = 黑色, 红色, 蓝色, 黄色, 绿色 ; String str_sendings=文件,图片; fontName = new JComboBox(str_name); / 字体名称 fontSize = new JComboBox(str_Size); / 字号 fontStyle = new JComboBox(str_Style); / 样式 fontColor = new JComboBox(str_Color); / 颜色 sendings = new JComboBox(str_sendings);接口说明:类名PList类的作用客户机显示在线用户列表功能模块类定义与实现:成员说明: private static final long serialVersionUID = 1L;private JList peopleList; /显示进入聊天室的人名单private JButton refurbishButton;/刷新列表按钮public DefaultListModel listModel;/用户列表public ChatFrame chf;接口说明:类名PopupListener类的作用客户端聊天室功能模块,私聊时显示对方昵称 类定义与实现:成员说明: 接口说明:JPopupMenu popup;/如果右击监听显示下拉菜单内容PopupListener(JPopupMenu popupMenu) popup = popupMenu;public void mousePressed(MouseEvent e) maybeShowPopup(e);public void mouseReleased(MouseEvent e) maybeShowPopup(e);private void maybeShowPopup(MouseEvent e) if (e.isPopupTrigger() popup.show(e.getComponent(), e.getX(), e.getY();/在相应的位置显示菜单组件 类名CaptureScreen类的作用客户端聊天室截图功能模块类定义与实现:成员说明: private static final long serialVersionUID = 1L;private JButton start,cancel; private JPanel c; private BufferedImage get; private JTabbedPane jtp;/一个放置很多份图片 private int index;/一个一直会递增的索引,用于标认图片 private JRadioButton java,system;/JAVA界面,系统界面接口说明:类名RTFReceive类的作用客户端聊天室接收文件功能模块 类定义与实现:成员说明: private File receiveFile; private Socket socket; public RTFReceive(File receiveFile, Socket socket) this.receiveFile = receiveFile; this.socket = socket;接口说明:类名RTFReceive类的作用客户端聊天室接收文件功能模块 类定义与实现:成员说明: private JFileChooser jfc; private JFrame fr; / private ServerSocket ss; private Socket sss; private JButton btnAccept; private JButton btnCancel;接口说明:类名RTFReceive类的作用客户端聊天室接收文件功能模块 类定义与实现:成员说明: private File sendFile;/用户选择的文件 private String sender; private Socket socket; private DataInputStream bin; private DataOutputStream bout; private ServerSocket ss;接口说明:类名DateDeal类的作用获取当前日期功能模块 类定义与实现:成员说明: private File sendFile;/用户选择的文件 private String sender; private Socket socket; private DataInputStream bin; private DataOutputStream bout; private ServerSocket ss;接口说明:/* * 将当前日期返回yyyy-MM-dd的字符串表现形式。 * return 返回当前日期的yyyy-MM-dd的字符串表现形式。 */public static String getCurrentDate()SimpleDateFormat df = new SimpleDateFormat(yyyy-MM-dd);return df.format(new Date();/* * 将当前日期返回yyyy年MM月dd日 HH:mm:ss的字符串表现形式。 * return 返回当前日期的yyyy年MM月dd日 HH:mm:ss的字符串表现形式。 */public static String getCurrentTime()SimpleDateFormat df = new SimpleDateFormat(yyyy年MM月dd日 HH:mm:ss);return df.format(new Date();/* * 将Date的日期返回yyyy-MM-dd HH:mm:ss的字符串表现形式。 * param date Date对象。 * return 返回yyyy-MM-dd HH:mm:ss的字符串表现形式。 */public static String getDate(Date date)SimpleDateFormat df = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);return df.format(date);/* * 根据当前日期返回不同形式的字符串形式。 * param date Date对象。 * return 如果与当前时间所在年月日相同,则返回HH:mm:ss形式,否则返回yyyy-MM-dd HH:mm:ss。 */public static String getDate2(Date date)GregorianCalendar g1 = new GregorianCalendar();g1.setTime(date);GregorianCalendar g2 = new GregorianCalendar();g2.setTime(new Date();SimpleDateFormat df = null;if(g1.get(Calendar.YEAR)=g2.get(Calendar.YEAR) & g1.get(Calendar.MONTH)=g2.get(Calendar.MONTH) & g1.get(Calendar.DAY_OF_MONTH)=g2.get(Calendar.DAY_OF_MONTH) df = new SimpleDateFormat(HH:mm:ss);elsedf = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);return df.format(dat3.4“函数”级说明函数名聊天室函数函数作用函数定义与实现:public ChatFrame(String host) super(host+ 的聊天室);try / 使用Windows的界面风格 UIManager.setLookAndFeel(com.sun.java.swing.plaf.windows.WindowsLookAndFeel); catch (Exception e) e.printStackTrace(); try / 使用Windows的界面风格 UIManager.setLookAndFeel(com.sun.java.swing.plaf.windows.WindowsLookAndFeel); catch (Exception e) e.printStackTrace(); myName = host;plist= new PList(this);/*聊天室顶层*/ JPanel upperPanel = new JPanel();String str_name = 宋体, 黑体, Dialog, Gulim ; String str_Size = 12, 14, 18, 22, 30, 40 ; String str_Style = 常规, 斜体, 粗体, 粗斜体 ; String str_Color = 黑色, 红色, 蓝色, 黄色, 绿色 ; String str_sendings=文件,图片; fontName = new JComboBox(str_name); / 字体名称 fontSize = new JComboBox(str_Size); / 字号 fontStyle = new JComboBox(str_Style); / 样式 fontColor = new JComboBox(str_Color); / 颜色 sendings = new JComboBox(str_sendings); box = Box.createVerticalBox(); / 竖结构 Box box_1 = Box.createHorizontalBox(); / 横结构 Box box_2 = Box.createVerticalBox(); / 横结构 box.add(box_1); box.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8); / 8个的边距 / 开始将所需组件加入容器 box_1.add(new JLabel(字体:); / 加入标签 box_1.add(fontName); / 加入组件 box_1.add(Box.createHorizontalStrut(8); / 间距 box_1.add(new JLabel(样式:); box_1.add(fontStyle); box_1.add(Box.createHorizontalStrut(8); box_1.add(new JLabel(字号:); box_1.add(fontSize); box_1.add(Box.createHorizontalStrut(8); box_1.add(new JLabel(颜色:); box_1.add(fontColor); box_1.add(Box.createHorizontalStrut(8); box_1.add(new JLabel(传送: ); box_1.add(sendings); box_1.add(Box.createHorizontalStrut(8); upperPanel.add(box, BorderLayout.SOUTH); /*中间聊天室两个窗口*/Border brd = BorderFactory.createMatteBorder(/边框修饰色2, 2, 2, 1, new Color(125,161,253);centerPanel = new JPanel(new BorderLayout(); commonArea = new JTextPane(); /公共言论区commonArea.setBorder(brd);commonArea.setEditable(false); /不可编辑commonArea.getScrollableUnitIncrement( new Rectangle(10,20) ,SwingConstants.VERTICAL ,-2);commonAreaScroll = new JScrollPane(commonArea);commonAreaScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);/设置滚动条什么时候出现commonAreaScroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);commonAreaScroll.setBorder(BorderFactory.createTitledBorder(群聊区);box_2.add(commonAreaScroll);box_2.add(Box.createVerticalStrut(2);myMsgArea = new JTextPane(); /我的发言myMsgArea.setBorder(brd);myMsgArea.setEditable(false);myMsgAreaScroll = new JScrollPane(myMsgArea);myMsgAreaScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);myMsgAreaScroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);myMsgAreaScroll.setBorder(BorderFactory.createTitledBorder(悄悄话);box_2.add(myMsgAreaScroll);centerPanel.add(box_2);/*输入发送区*JPanel centerLowerPanel = new JPanel(new BorderLayout();JPanel tempPanel1 = new JPanel(new BorderLayout();JPanel tempPanel2 = new JPanel(new FlowLayout(FlowLayout.LEFT);JLabel withWho = new JLabel(对); perponsComboBox = new JComboBox();perponsComboBox.addItem(所有人); privateTalk = new JCheckBox(私聊);inMsgField = new JTextArea(2,2);inMsgField.setBorder(brd);inMsgField.setBackground(new Color(248,243,209);/设置聊天框体的颜色inMsgField.addKeyListener(this);sentButton = new JButton(发送);screenCapture = new JButton(截屏);save = new JButton(聊天记录);inMsgFieldScroll = new JScrollPane(inMsgField);inMsgFieldScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);inMsgFieldScroll.setBorder(BorderFactory.createTitledBorder
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生活药学考试题及答案
- 中交安全考试试题及答案
- 2025年国家电投集团福建核电招聘考试笔试试题(含答案)
- 北京知识型直播培训课件
- 2025年甘肃烟草公司招聘考试笔试试题(含答案)
- 2025年恩施州鹤峰县县直教育单位选调教师考试笔试试题(含答案)
- 2024年云南省社区《网格员》考前冲刺训练(含答案)
- 干燥综合征及护理试题(含答案)
- 消防工程师模拟题(含答案)
- 卫生院医院感染相关知识考试试题(附答案)
- 高考地理一轮复习课件 【知识精讲+高效课堂】 农业区位因素及其变化
- 互通立交设计课件
- 第37次全国计算机等级考试考务培训-课件
- 生物竞赛辅导 动物行为学第七章 行为发育(38)课件
- 新生入学登记表新生入学情况表word模版
- 《空中领航》全套教学课件
- 《高情商沟通》课件
- 《新锅规》锅炉产品合格证
- 医院产后出血的应急演练脚本
- 中药熏洗法操作评分标准与流程
- 光伏发电项目监理工作制度
评论
0/150
提交评论