




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、計算機網絡課程設計報告實驗題目:班級: 學號: 姓名: 指導老師: 完成時間:目錄摘要一:設計內容 1.設計目的2.設計要求二:設計原理 三:設計過程 1.服務端框圖2.客戶端框圖3.總流程圖四:運行界面展示 五:設計總結 六:參考書目 附錄:部分源代碼摘要:當今世界正處于信息時代 ,計算機和通信網絡是這一時代所謂 信息基礎 設 施 .在互聯網相當普及的今天 ,在互聯網上聊天對很多 網蟲來說已經是 家常便 飯了 .聊天室程序可以說是網上最簡單的多點通信程序 .一個簡單的聊天室 , 從程 序員的觀點來看就是在多個 I/O 端點之間實現多對多的通信 .基于 SOCKET的 局域網通信是一種靈活的
2、, 易于實現的 ,低成本的方法 .它可以運行 在各種使用 TCP/IP 協議作為通訊協議的網絡上.而在 SOCKETA PI 的幫助下 ,開 發基于SOCKET的 局域網通信軟件也是易于實現的 .一:設計內容1. 設計目的:1加深對 TCP/IP協議的理解;2掌握用 Socket 編程實現聊天工具。3. visual studio2005 提供了支持網絡環境的類庫 ,可適應多種網絡 協議,包括 TCP/IP、UDP等。使用 類庫,可快速地開發各種網絡應用 程序,而 Socket通信是基于 TCP/IP協議。2. 設計要求:1. 需求分析在網絡越來越發達的今天 ,人們對網絡的依賴越來越多 ,越來
3、越離不開網絡 , 由此而產生的聊天工具越來越多 ,網絡聊天時一類的聊天系統的發展日新月異 ,因 此產生了制作一個局域網的網絡聊天工具的 ;而且通過制作該程序還能更好的學 習網絡軟件編程知識 .2. 功能要求:a. 登錄功能。b. 客戶可以通過服務器轉發,實現一對一和多對多聊天。c. 實現呼叫功能。d. 客戶端程序應該可以實時顯示目前其它用戶的狀態。e. 應該具有易用、美觀的圖形界面。3. 客戶端功能劃分:a. 登陸功能:建立與服務器的連接并登陸,能顯示登陸錯誤信息。b. 界面顯示:將在線好友顯示在好友列表中,并實現系統托盤,加入工具 欄便于操作。c. 聊天功能:與好友聊天。d. 聊天紀錄:能保
4、存聊天紀錄,并能察看聊天紀錄。e. 信息提示:閃動托盤圖標提示到來信息,并播放不同音樂來提示。f. 其他:用戶登陸成功,將保存其號碼,以便下次登陸時,不必再輸入而可 以直接選擇,顯示登陸時間。:設計原理:服務器端通過 socket()系統調用創建一個 Socket 數組后 (即設定了接受連接 客戶的最 大數目 ),與指定的本地端口綁定bind(), 就可以在端口進行偵聽 listen().如果有客戶端連接請求 ,則在數組中選擇一個空Socket,將客戶端地 址賦給這個 Socket.然后登錄成功的客戶就可以在服務器上聊天了 .客戶端程 序相對簡單 ,只需要建立一個 Socket 與服務器端連接
5、 ,成 功后通過這個 Socket 3 來發送和接收數據就可以了 .socket 聊天室基本原理是 ,拋開 CGI(公 共網關 接口 )和 www 服務器 ,根據 html 規范 ,接收到瀏覽器的請求以后 ,模仿 www 服務 器的響應 ,將聊天內容發回瀏覽器 .在瀏覽器看來就像瀏覽一個巨大的頁面一樣始終處于頁,一個簡化了的 www 服務器 .面聯接狀態 , 這就是一個專門的聊天服務器三:設計過程:1.聊天室服務器端設計:ThreadJFrameActionListenerChatServer -port:public static in-serverSocket:ServerSocketSe
6、rverListen- server: ServerSocket- userLinkList :UserLinkList- isStop: public Boolean+ServerListen(ServerSocket,JComboBox,JTextArea,J-messageShow:JTextArea -userLinkList:UserLinkList -showStatus:JTextField + ChatServer():publicTextField,UserLinkList)+init():public void+startService():public void +sto
7、pService():public void +sendStopToAll():public void +sendMsgToAll(String):public void + sendSystemMessage():public voidServerReceive-textarea:JTextArea - userLinkList :UserLinkList- isStop: public Boolean+ServerListen(ServerSocket,JComboBox,JTextArea,J TextField,UserLinkList)2.客戶端框架設計3. 流程圖:四:運行界面五:
8、設計總結通過此 JAVA聊天室的設計, 實踐、總結、回顧了網絡編程思 想以及編程方 法,并通過編寫程序來掌握 Java 語言編程技巧,將學習到的知識 融會貫通, 同時提高調試程序的能力,養成良好的編程習慣,并增強對程序設計 整體思路 的把握,理論與時間相結合。本文的主要工作集中在:該課程基于 C/S 模式, 客戶機向服務器發聊天請求,服務器應答并能顯示客戶機發過來的信息。 當用 戶聊天時,將當前用戶名、聊天對象、聊天,內容、聊天語氣和是否私聊進 行 封裝,然后與服務器建立 Socket 連接,再用對象輸出流包裝 Socket 的輸出流 將聊天信息對象發送給服務器端。 當用戶發送聊天信息時, 服
9、務端將會收到客戶 端用 Socket 傳輸過來的聊天信息對象,然后將其強制轉換為 Chat 對象,接收 用 戶的聊天信息是由多線程技術實現的, 因為客戶端必須時時關注更新服務器 上是 否有最新消息, 當每次用戶接收到聊天信息后將會開始分析聊天信息然后 將適合 自己的信息人性化地顯示在聊天信息界面上。 進一步培養學生面向對象 程序設計的思想,加深對面向對象程序設計四大 特性的理解,針對 JAVA 語言 中的重點和難點內容進行訓練,獨立完成有一定工 作量的程序設計任務,同時 強調好的程序設計風格。六:參考書目:1.JAVA編程思想第四版(機械工業出版社)2.WINDOWS網絡編程技術(科學出版社)
10、部分源代碼:1.服務器端主框架代碼:import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import .*;import java.io.*;/* 聊天服務端的主框架類*/public class ChatServer extends JFrame implements ActionListener public static int port = 8888;/ 服務端的偵聽端口 ServerSocket serverSocket;/ 服務端 SocketImage
11、icon;/ 程序圖標JComboBox combobox;/ 選擇發送消息的接受者JTextArea messageShow;/服務端的信息顯示JScrollPane messageScrollPane;/信息顯示的滾動條 JTextField showStatus;/ 顯示用戶連接狀態JLabel sendToLabel,messageLabel;JTextField sysMessage;/服務端消息的發送JButton sysMessageButton;/ 服務端消息的發送按鈕 UserLinkList userLinkList;/ 用戶鏈表/ 建立菜單欄JMenuBar jMenuB
12、ar = new JMenuBar();/ 建立菜單組JMenu serviceMenu = new JMenu ( 服務 (V);/ 建立菜單項JMenuItem portItem = new JMenuItem ( 端口設置 (P); JMenuItem startItem = new JMenuItem ( 啟動服務 (S); JMenuItem stopItem=new JMenuItem ( 停止服務 (T); JMenuItem exitItem=new JMenuItem ( 退出 (X);JMenu helpMenu=new JMenu ( 幫助 (H); JMenuItem
13、helpItem=new JMenuItem ( 幫助 (H); / 建立工具欄JToolBar toolBar = new JToolBar();/ 建立工具欄中的按鈕組件JButton portSet;/ 啟動服務端偵聽JButton startServer;/ 啟動服務端偵聽JButton stopServer;/ 關閉服務端偵聽JButton exitButton;/ 退出按鈕/ 框架的大小Dimension faceSize = new Dimension(400, 600);ServerListen listenThread;JPanel downPanel ;GridBagLay
14、out girdBag;GridBagConstraints girdBagCon;/* 服務端構造函數*/public ChatServer()init();/ 初始化程序/ 添加框架的關閉事件處理this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.pack();/ 設置框架的大小this.setSize(faceSize);/ 設置運行時窗口的位置Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); this.setLocation( (int)
15、(screenSize.width - faceSize.getWidth() / 2,(int) (screenSize.height - faceSize.getHeight() / 2); this.setResizable(false);this.setTitle( 聊天室服務端 ); / 設置標題/ 程序圖標icon = getImage(icon.gif);this.setIconImage(icon); / 設置程序圖標 show();/ 為服務菜單欄設置熱鍵 V serviceMenu.setMnemonic(V);/ 為端口設置快捷鍵為 ctrl+p portItem.set
16、Mnemonic (P);portItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_P,InputEvent.CTRL_MASK); / 為啟動服務快捷鍵為 ctrl+sstartItem.setMnemonic (S);startItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_S,InputEvent.CTRL_MASK); / 為端口設置快捷鍵為 ctrl+TstopItem.setMnemonic (T);stopItem.setAccelerator (Ke
17、yStroke.getKeyStroke (KeyEvent.VK_T,InputEvent.CTRL_MASK); / 為退出設置快捷鍵為 ctrl+xexitItem.setMnemonic (X);exitItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_X,InputEvent.CTRL_MASK); / 為幫助菜單欄設置熱鍵 HhelpMenu.setMnemonic(H);/ 為幫助設置快捷鍵為 ctrl+phelpItem.setMnemonic (H);/*helpItem.setAccelerator (KeyS
18、troke.getKeyStroke (KeyEvent.VK_H,InputEvent.CTRL_MASK);程序初始化函數*/public void init()Container contentPane = getContentPane(); contentPane.setLayout(new BorderLayout();/ 添加菜單欄serviceMenu.add (portItem);serviceMenu.add (startItem);serviceMenu.add (stopItem); serviceMenu.add (exitItem); jMenuBar.add (se
19、rviceMenu);helpMenu.add (helpItem);jMenuBar.add (helpMenu); setJMenuBar (jMenuBar);/ 初始化按鈕portSet = new JButton( 端口設置 ); startServer = new JButton( 啟動服務 ); stopServer = new JButton( 停止服務 ); exitButton = new JButton( 退出 );/ 將按鈕添加到工具欄 toolBar.add(portSet);toolBar.addSeparator();/ 添加分隔欄toolBar.add(star
20、tServer);toolBar.add(stopServer);toolBar.addSeparator();/ 添加分隔欄 toolBar.add(exitButton);contentPane.add(toolBar,BorderLayout.NORTH);/ 初始時,令停止服務按鈕不可用 stopServer.setEnabled(false); stopItem .setEnabled(false);/ 為菜單欄添加事件監聽 portItem.addActionListener(this);startItem.addActionListener(this); stopItem.add
21、ActionListener(this); exitItem.addActionListener(this);helpItem.addActionListener(this);/ 添加按鈕的事件偵聽 portSet.addActionListener(this); startServer.addActionListener(this); stopServer.addActionListener(this);exitButton.addActionListener(this); combobox = new JComboBox(); combobox.insertItemAt( 所有人 ,0);
22、 combobox.setSelectedIndex(0); messageShow = new JTextArea(); messageShow.setEditable(false);/ 添加滾動條 messageScrollPane = new JScrollPane(messageShow, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);messageScrollPane.setPreferredSize(new Dimension(400,400); messa
23、geScrollPane.revalidate();showStatus = new JTextField(35); showStatus.setEditable(false); sysMessage = new JTextField(24); sysMessage.setEnabled(false); sysMessageButton = new JButton(); sysMessageButton.setText( 發送 );/ 添加系統消息的事件偵聽 sysMessage.addActionListener(this); sysMessageButton.addActionListen
24、er(this); sendToLabel = new JLabel(發送至 :); messageLabel = new JLabel(發 送消息 :); downPanel = new JPanel(); girdBag = new GridBagLayout(); downPanel.setLayout(girdBag); girdBagCon = new GridBagConstraints(); girdBagCon.gridx = 0; girdBagCon.gridy = 0; girdBagCon.gridwidth = 3; girdBagCon.gridheight = 2
25、; girdBagCon.ipadx = 5; girdBagCon.ipady = 5;JLabel none = new JLabel( ); girdBag.setConstraints(none,girdBagCon); downPanel.add(none);girdBagCon = new GridBagConstraints(); girdBagCon.gridx = 0; girdBagCon.gridy = 2;girdBagCon.insets = new Insets(1,0,0,0); girdBagCon.ipadx = 5;girdBagCon.ipady = 5;
26、 girdBag.setConstraints(sendToLabel,girdBagCon); downPanel.add(sendToLabel);girdBagCon = new GridBagConstraints(); girdBagCon.gridx =1;girdBagCon.gridy = 2;girdBagCon.anchor = GridBagConstraints.LINE_START; girdBag.setConstraints(combobox,girdBagCon); downPanel.add(combobox);girdBagCon = new GridBag
27、Constraints(); girdBagCon.gridx = 0;girdBagCon.gridy = 3; girdBag.setConstraints(messageLabel,girdBagCon); downPanel.add(messageLabel);girdBagCon = new GridBagConstraints(); girdBagCon.gridx = 1;girdBagCon.gridy = 3; girdBag.setConstraints(sysMessage,girdBagCon); downPanel.add(sysMessage);girdBagCon
28、 = new GridBagConstraints(); girdBagCon.gridx = 2;girdBagCon.gridy = 3; girdBag.setConstraints(sysMessageButton,girdBagCon); downPanel.add(sysMessageButton);girdBagCon = new GridBagConstraints(); girdBagCon.gridx = 0;girdBagCon.gridy = 4;girdBagCon.gridwidth = 3; girdBag.setConstraints(showStatus,gi
29、rdBagCon); downPanel.add(showStatus);contentPane.add(messageScrollPane,BorderLayout.CENTER); contentPane.add(downPanel,BorderLayout.SOUTH);/ 關閉程序時的操作 this.addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e) stopService();System.exit(0); );/* 事件處理*/public void actionPerforme
30、d(ActionEvent e) Object obj = e.getSource();if (obj = startServer | obj = startItem) / 啟動服務端startService();else if (obj = stopServer | obj = stopItem) / 停止服務端int j=JOptionPane.showConfirmDialog( this,真的停止服務嗎 ?, 停止服務 , JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);if (j = JOptionPane.YES_OPTIO
31、N) stopService();else if (obj = portSet | obj = portItem) / 端口設置/ 調出端口設置的對話框PortConf portConf = new PortConf(this);portConf.show();else if (obj = exitButton | obj = exitItem) / 退出程序int j=JOptionPane.showConfirmDialog( this,真的要退出嗎 ?,退出 , JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);if (j = JO
32、ptionPane.YES_OPTION) stopService();System.exit(0);else if (obj = helpItem) / 菜單欄中的幫助/ 調出幫助對話框Help helpDialog = new Help(this);helpDialog.show();else if (obj = sysMessage | obj = sysMessageButton) / 發送系統消息 sendSystemMessage();/* 啟動服務端*/public void startService()tryserverSocket = new ServerSocket(por
33、t,10);messageShow.append( 服務端已經啟動,在 +port+ 端口偵聽 .n);startServer.setEnabled(false); startItem.setEnabled(false); portSet.setEnabled(false); portItem.setEnabled(false); stopServer .setEnabled(true); stopItem .setEnabled(true); sysMessage.setEnabled(true);catch (Exception e)/System.out.println(e);userL
34、inkList = new UserLinkList();listenThread = new ServerListen(serverSocket,combobox, messageShow,showStatus,userLinkList);listenThread.start();/* 關閉服務端*/public void stopService()try/ 向所有人發送服務器關閉的消息 sendStopToAll(); listenThread.isStop = true; serverSocket.close();int count = userLinkList.getCount();i
35、nt i =0;while( i count)Node node = userLinkList.findUser(i); node.input .close(); node.output.close(); node.socket.close();i +;stopServer .setEnabled(false); stopItem .setEnabled(false); startServer.setEnabled(true); startItem.setEnabled(true); portSet.setEnabled(true); portItem.setEnabled(true); sy
36、sMessage.setEnabled(false); messageShow.append( 服務端已經關閉 n); combobox.removeAllItems(); combobox.addItem( 所有人 );catch(Exception e)/System.out.println(e);/* 向所有人發送服務器關閉的消息*/public void sendStopToAll()int count = userLinkList.getCount();int i = 0;while(i count)Node node = userLinkList.findUser(i); if(n
37、ode = null) i +; continue;trynode.output.writeObject( 服務關閉 ); node.output.flush();catch (Exception e) /System.out.println($+e);i+;/* 向所有人發送消息*/public void sendMsgToAll(String msg)int count = userLinkList.getCount();/ 用戶總數int i = 0;while(i count)Node node = userLinkList.findUser(i);if(node = null) i
38、+;continue;trynode.output.writeObject( 系統信息 );node.output.flush();node.output.writeObject(msg);node.output.flush();catch (Exception e)/System.out.println(+e);i+;sysMessage.setText();/* 向客戶端用戶發送消息*/public void sendSystemMessage()String toSomebody = combobox.getSelectedItem().toString();String message
39、 = sysMessage.getText() + n; messageShow.append(message);/ 向所有人發送消息 if(toSomebody.equalsIgnoreCase( 所有人 ) sendMsgToAll(message);else/ 向某個用戶發送消息Node node = userLinkList.findUser(toSomebody); trynode.output.writeObject( 系統信息 );node.output.flush();node.output.writeObject(message);node.output.flush();ca
40、tch(Exception e)/System.out.println(!+e);sysMessage.setText();/ 將發送消息欄的消息清空/* 通過給定的文件名獲得圖像*/Image getImage(String filename) URLClassLoader urlLoader = (URLClassLoader)this.getClass().getClassLoader();URL url = null;Image image = null;url = urlLoader.findResource(filename);image = Toolkit.getDefaultT
41、oolkit().getImage(url);MediaTracker mediatracker = new MediaTracker(this); try mediatracker.addImage(image, 0); mediatracker.waitForID(0);catch (InterruptedException _ex) image = null;if (mediatracker.isErrorID(0) image = null;return image;public static void main(String args) ChatServer app = new Ch
42、atServer(); 用戶上下線偵聽代碼: import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import java.io.*;import .*;/* 服務端的偵聽類*/public class ServerListen extends Thread ServerSocket server;JComboBox combobox;JTextArea textarea;JTextField textfield;UserLinkList userLinkList;/
43、用戶鏈表Node client;ServerReceive recvThread;public boolean isStop;/* 聊天服務端的用戶上線于下線偵聽類*/public ServerListen(ServerSocket server,JComboBox combobox,JTextArea textarea,JTextField textfield,UserLinkList userLinkList) this.server = server;bobox = combobox;this.textarea = textarea;this.textfield = textfield;
44、this.userLinkList = userLinkList;isStop = false;public void run()while(!isStop & !server.isClosed()tryclient = new Node();client.socket = server.accept();client.output = new ObjectOutputStream(client.socket.getOutputStream(); client.output.flush();client.input = new ObjectInputStream(client.socket.g
45、etInputStream(); client.username = (String)client.input.readObject();/ 顯示提示信息combobox.addItem(client.username);userLinkList.addUser(client);textarea.append( 用戶 + client.username + 上線 + n); textfield.setText(在線用戶 + userLinkList.getCount() + 人n);recvThread = new ServerReceive(textarea,textfield,combob
46、ox,client,userLinkList);recvThread.start();catch(Exception e)2.客戶端代碼:客戶端主界面代碼:import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import java.io.*;import .*;/* 聊天客戶端的主框架類*/ public class ChatClient extends JFrame implements ActionListener String ip = ;/
47、連接到服務端的 ip 地址 int port = 8888;/ 連接到服務端的端口號String userName = 匆匆過客 ;/ 用戶名 int type = 0;/ 0 表示未連接, 1 表示已連接Image icon;/ 程序圖標JComboBox combobox;/ 選擇發送消息的接受者 JTextArea messageShow;/客戶端的信息顯示 JScrollPane messageScrollPane;/信/ 息顯示的滾動條JLabel express,sendToLabel,messageLabel ;JTextField clientMessage;/ 客戶端消息的發
48、送 JCheckBox checkbox;/悄悄話JComboBox actionlist;/ 表情選擇JButton clientMessageButton;/ 發送消息JTextField showStatus;/顯示用戶連接狀態Socket socket;ObjectOutputStream output;/ 網絡套接字輸出流 ObjectInputStream input;/ 網絡套接字輸入流ClientReceive recvThread;/ 建立菜單欄JMenuBar jMenuBar = new JMenuBar();/ 建立菜單組JMenu operateMenu = new
49、JMenu ( 操作 (O);/ 建立菜單項JMenuItem loginItem = new JMenuItem ( 用戶登錄 (I); JMenuItem logoffItem = new JMenuItem ( 用戶注銷 (L); JMenuItem exitItem=new JMenuItem ( 退出 (X);JMenu conMenu=new JMenu ( 設置 (C);JMenuItem userItem=new JMenuItem ( 用戶設置 (U);JMenuItem connectItem=new JMenuItem ( 連接設置 (C); JMenu helpMenu
50、=new JMenu ( 幫助 (H);JMenuItem helpItem=new JMenuItem ( 幫助 (H);/ 建立工具欄JToolBar toolBar = new JToolBar();/ 建立工具欄中的按鈕組件JButton loginButton;/ 用戶登錄JButton logoffButton;/ 用戶注銷JButton userButton;/ 用戶信息的設置JButton connectButton;/ 連接設置JButton exitButton;/ 退出按鈕/ 框架的大小Dimension faceSize = new Dimension(400, 600
51、); JPanel downPanel ;GridBagLayout girdBag; GridBagConstraints girdBagCon;public ChatClient()init();/ 初始化程序/ 添加框架的關閉事件處理this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.pack();/ 設置框架的大小this.setSize(faceSize);/ 設置運行時窗口的位置Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); this
52、.setLocation( (int) (screenSize.width - faceSize.getWidth() / 2,(int) (screenSize.height - faceSize.getHeight() / 2); this.setResizable(false);this.setTitle( 聊天室客戶端 ); / 設置標題/ 程序圖標icon = getImage(icon.gif);this.setIconImage(icon); / 設置程序圖標 show();/ 為操作菜單欄設置熱鍵 V operateMenu.setMnemonic(O);/ 為用戶登錄設置快捷
53、鍵為 ctrl+i loginItem.setMnemonic (I);loginItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_I,InputEvent.CTRL_MASK); / 為用戶注銷快捷鍵為 ctrl+llogoffItem.setMnemonic (L);logoffItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_L,InputEvent.CTRL_MASK); / 為退出快捷鍵為 ctrl+xexitItem.setMnemonic (X);exi
54、tItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_X,InputEvent.CTRL_MASK); / 為設置菜單欄設置熱鍵 CconMenu.setMnemonic(C);/ 為用戶設置設置快捷鍵為 ctrl+u userItem.setMnemonic (U);userItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_U,InputEvent.CTRL_MASK); / 為連接設置設置快捷鍵為 ctrl+c connectItem.setMnemonic (C);connectItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_C,InputEvent.CTRL_MASK); / 為幫助菜單欄設置熱鍵 HhelpMenu.setMnemonic(H);/ 為幫助設置快捷鍵為 ctrl+phelpItem.setMnemonic (H);helpItem.setAccelerator (KeyS
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 銀行網點業務運營流程規范
- 勞動教育引導大學生就業觀念的塑造與提升
- 在線教育培訓服務合同協議書版
- 供水管線完善工程實施方案(范文模板)
- 我的夢想與努力抒情文(5篇)
- 石油工程專業知識重點
- 音樂制作與錄音工程教程
- 企業宣傳印刷品制作合同協議
- 國際商務管理與跨文化交流試題集
- 建筑工程材料知識考核
- 綜合布線系統結構圖課件
- 2025年別墅新風系統安裝合同范本
- 智慧礦山無人機自動巡檢解決方案
- 新產品開發周期與研發進度規劃計劃
- 2025年1月福建省普通高中學業水平合格性考試語文仿真模擬卷02(春季高考適用)(參考答案)
- 氣體充裝安全培訓課件
- 2025年濟南鐵路局招聘筆試參考題庫含答案解析
- 《生產公司崗位職責》課件
- 《缺血-再灌注損傷》課件
- 加油站安全事故隱患排查治理制度
- 國際法學(山東聯盟)知到智慧樹章節測試課后答案2024年秋煙臺大學
評論
0/150
提交評論