Java聊天工具課程設(shè)計(jì)報(bào)告_第1頁
Java聊天工具課程設(shè)計(jì)報(bào)告_第2頁
Java聊天工具課程設(shè)計(jì)報(bào)告_第3頁
Java聊天工具課程設(shè)計(jì)報(bào)告_第4頁
Java聊天工具課程設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Java網(wǎng)絡(luò)編程實(shí)踐(課程設(shè)計(jì)說明書課程名稱:Java網(wǎng)絡(luò)編程課程設(shè)計(jì) 題目:基于C/S的班級即時(shí)通訊工具 姓名:于明帥朱燁楓學(xué)號:201105407201105423教學(xué)班號:軟件工程1101班指導(dǎo)教師:王小剛蘭州交通大學(xué)軟件科學(xué)與工程系二。一二年 十二 月二十七 日J(rèn)ava網(wǎng)絡(luò)編程實(shí)踐任務(wù)書目的:熟悉JAVA語法,掌握圖形化界面、多線程、網(wǎng)絡(luò)、數(shù)據(jù)庫等綜合編程,掌 握用編程語言開發(fā)由若干功能組成的小型項(xiàng)目的基本流程,增強(qiáng)動手實(shí)踐能力,鞏 固和加強(qiáng)書本知識的學(xué)習(xí),體會JAVA編程的特點(diǎn)。題目1:基于C/S的班級即時(shí)通訊工具(2人)要求:C/S模式,基于Socket實(shí)現(xiàn),服務(wù)器端用多線程來處理

2、同時(shí)多個(gè)客戶端連接。數(shù)據(jù)存儲:服務(wù)器端存儲最少一個(gè)班級的信息;最好多個(gè)班級,主要存儲班級若 干學(xué)生的基本信息。用數(shù)據(jù)庫存儲。下面所有功能只考慮一個(gè)班是基本實(shí)現(xiàn),考 慮多個(gè)班是拓展實(shí)現(xiàn)。界面:GUI界面,友好直觀,布局合理,方便的功能入口。功能:1)登陸輸入用戶名和密碼;用戶名是學(xué)號,有初始密碼,例如1111112)登陸驗(yàn)證 根據(jù)服務(wù)器端存儲的班級信息,對輸入的用戶進(jìn)行驗(yàn)證,看是否 存在于該班(只考慮一個(gè)班的情況)。或是否是某個(gè)班的學(xué)生(多個(gè)班的情 況)。驗(yàn)證通過進(jìn)入主界面,否則給出錯(cuò)誤提示。3)主界面列出該學(xué)生好友列表(同班級同學(xué)默認(rèn)全是該生好友,如果是多個(gè)班 則可以添加別班好友并經(jīng)對方批準(zhǔn))

3、。4)即時(shí)聊天,選中某個(gè)好友,雙擊打開窗口聊天。如果不在線則服務(wù)器等對方 上線后轉(zhuǎn)發(fā)(此功能屬拓展實(shí)現(xiàn))。5)可以修改自己的登陸密碼。6)題目2:基于C/S的班級聊天室(群聊)工具(2人)要求:C/S模式,基于Socket實(shí)現(xiàn),服務(wù)器端用多線程來處理同時(shí)多個(gè)客戶端連接。數(shù)據(jù)存儲:服務(wù)器端存儲一個(gè)班級的信息;主要存儲班級若干學(xué)生的基本信息。 用數(shù)據(jù)庫存儲。界面:GUI界面,友好直觀,布局合理,方便的功能入口。功能:a)登陸輸入用戶名和密碼;用戶名是學(xué)號,有初始密碼,例如111111b)登陸驗(yàn)證根據(jù)服務(wù)器端存儲的班級信息,對輸入的用戶進(jìn)行驗(yàn)證,看是 否存在于該班。驗(yàn)證通過進(jìn)入主界面,否則給出錯(cuò)誤提

4、示。c)主界面應(yīng)劃分幾個(gè)部分,至少有聊天室窗口部分(顯示多人的聊天信息), 自身發(fā)送聊天信息的窗口部分,聊天室成員列表部分,最好實(shí)現(xiàn)在線用戶 區(qū)別顯示(此功能屬拓展實(shí)現(xiàn))等。進(jìn)入主界面就可以參與群聊。d)可以修改自己的登陸密碼。題目3:基于C/S的學(xué)生信息管理(1人)實(shí)現(xiàn)應(yīng)用,可以通過網(wǎng)絡(luò)在客戶端對存放在服務(wù)器端的學(xué)生信息表(至少包含 學(xué)號、姓名、性別、年齡、籍貫等字段)學(xué)生紀(jì)錄增、刪、改、查,并返回結(jié)果。 要能通過菜單選擇功能?;赟ocket,多客戶端使用多線程,以能同時(shí)從多個(gè)客戶 端執(zhí)行功能。必須提供友好直觀、布局合理的圖形界面選擇功能、顯示信息和填寫修改信息。成員名單:于明帥、朱燁楓分

5、工列表登陸界面于明帥修改密碼界面朱燁楓聊天窗口界面于明帥服務(wù)器代碼朱燁楓連接數(shù)據(jù)庫朱燁楓課程設(shè)計(jì)報(bào)告于明帥一、項(xiàng)目簡述和目的聊天室做為即時(shí)通訊的一種,即時(shí)通訊(Instant Messenger,簡稱IM )軟件 可以說是目前我國上網(wǎng)用戶使用率最高的軟件,無論是老牌的ICQ,還是國內(nèi)用戶 量第一的騰訊QQ,以及微軟的MSN Messenger都是大眾關(guān)注的焦點(diǎn),它們能讓你 迅速地在網(wǎng)上找到你的朋友或工作伙伴,可以實(shí)時(shí)交談和互傳信息。而且,現(xiàn)在不 少IM軟件還集成了數(shù)據(jù)交換、語音聊天、網(wǎng)絡(luò)會議、電子郵件的功能。要求:1 . C/S模式,基于Socket實(shí)現(xiàn),服務(wù)器端用多線程來處理同時(shí)多個(gè)客戶端連

6、接。數(shù)據(jù)存儲:服務(wù)器端存儲最少一個(gè)班級的信息;最好多個(gè)班級,主要存儲班級若 干學(xué)生的基本信息。用數(shù)據(jù)庫存儲。下面所有功能只考慮一個(gè)班是基本實(shí)現(xiàn),考 慮多個(gè)班是拓展實(shí)現(xiàn)。.界面:GUI界面,友好直觀,布局合理,方便的功能入口。.功能:1 )登陸輸入用戶名和密碼;用戶名是學(xué)號,有初始密碼,例如111111 ;2)登陸驗(yàn)證 根據(jù)服務(wù)器端存儲的班級信息,對輸入的用戶進(jìn)行驗(yàn)證,看是否 存在于該班(只考慮一個(gè)班的情況)?;蚴欠袷悄硞€(gè)班的學(xué)生(多個(gè)班的情 況)。驗(yàn)證通過進(jìn)入主界面,否則給出錯(cuò)誤提示。3)主界面列出該學(xué)生好友列表(同班級同學(xué)默認(rèn)全是該生好友,如果是多個(gè)班 則可以添加別班好友并經(jīng)對方批準(zhǔn))。4)

7、即時(shí)聊天,選中某個(gè)好友,雙擊打開窗口聊天。如果不在線則服務(wù)器等對方 上線后轉(zhuǎn)發(fā)(此功能屬拓展實(shí)現(xiàn))。5)可以修改自己的登陸密碼。目的: 通過此項(xiàng)目實(shí)訓(xùn)JAVA聊天室的設(shè)計(jì),實(shí)踐、總結(jié)、回顧了網(wǎng)絡(luò)編程思想以及編 程方法,并通過編寫程序來掌握J(rèn)ava語言編程技巧,將學(xué)習(xí)到的知識融會貫通,同 時(shí)提高調(diào)試程序的能力,養(yǎng)成良好的編程習(xí)慣,并增強(qiáng)對程序設(shè)計(jì)整體思路的把握, 理論與時(shí)間相結(jié)合。本文的主要工作集中在:該課程基于C/S模式,客戶機(jī)向服務(wù) 器發(fā)聊天請求,服務(wù)器應(yīng)答并能顯示客戶機(jī)發(fā)過來的信息。當(dāng)用戶聊天時(shí),將當(dāng)前 用戶名、聊天對象、聊天,內(nèi)容、聊天語氣和是否私聊進(jìn)行封裝,然后與服務(wù)器建 立Socke

8、t連接,再用對象輸出流包裝Socket的輸出流將聊天信息對象發(fā)送給服務(wù) 器端。當(dāng)用戶發(fā)送聊天信息時(shí),服務(wù)端將會收到客戶端用Socket傳輸過來的聊天信 息對象,然后將其強(qiáng)制轉(zhuǎn)換為Chat對象,接收用戶的聊天信息是由多線程技術(shù)實(shí)現(xiàn) 的,因?yàn)榭蛻舳吮仨殨r(shí)時(shí)關(guān)注更新服務(wù)器上是否有最新消息,當(dāng)每次用戶接收到聊 天信息后將會開始分析聊天信息然后將適合自己的信息人性化地顯示在聊天信息界 面上。進(jìn)一步培養(yǎng)學(xué)生面向?qū)ο蟪绦蛟O(shè)計(jì)的思想,加深對面向?qū)ο蟪绦蛟O(shè)計(jì)四大特性 的理解,針對JAVA語言中的重點(diǎn)和難點(diǎn)內(nèi)容進(jìn)行訓(xùn)練,獨(dú)立完成有一定工作量的 程序設(shè)計(jì)任務(wù),同時(shí)強(qiáng)調(diào)好的程序設(shè)計(jì)風(fēng)格。二、解題基本思路當(dāng)用戶聊天時(shí),

9、將當(dāng)前用戶名、聊天對象、聊天內(nèi)容、聊天語氣和是否私聊進(jìn)行封 裝,然后與服務(wù)器建立Socket連接,再用對象輸出流包裝Socket的輸出流將聊天 信息對象發(fā)送給服務(wù)器端。當(dāng)用戶發(fā)送聊天信息時(shí),服務(wù)端將會收到客戶端用Socket傳輸過來的聊天信息對象, 然后將其強(qiáng)制轉(zhuǎn)換為Chat對象,并將本次用戶的聊天信息對象添加到聊天對象集Message中,以供所有聊天用戶訪問,具體實(shí)現(xiàn)過程如圖3-6所示。接收用戶的聊天信息是由多線程技術(shù)實(shí)現(xiàn)的,因?yàn)榭蛻舳吮仨殨r(shí)時(shí)關(guān)注更新服務(wù) 器上是否有最新消息,在本程序中設(shè)定的是3秒刷新服務(wù)器一次,如果間隔時(shí)間太 短將會增加客戶端與服務(wù)器端的通信負(fù)擔(dān),而間隔時(shí)間長就會讓人感覺

10、沒有時(shí)效性, 所以經(jīng)過權(quán)衡后認(rèn)為3秒最佳,因?yàn)槊總€(gè)用戶都不可能在3秒內(nèi)連續(xù)發(fā)送信息。當(dāng)每次用戶接收到聊天信息后將會開始分析聊天信息然后將適合自己的信息人性 化地顯示在聊天信息界面上。三、分析和設(shè)計(jì)本系統(tǒng)主要通過客戶端,服務(wù)器端來體現(xiàn)聊天系統(tǒng)的基本功能。(1)服務(wù)器端處理用戶登錄處理用戶發(fā)送信息,服務(wù)器監(jiān)控聊天內(nèi)容,服務(wù)器過濾非法內(nèi)容處理用戶得到信息處理用戶退出保存用戶聊天信息。(2)客戶端用戶登錄界面及結(jié)果用戶發(fā)送信息界面及結(jié)果用戶得到信息界面及結(jié)果用戶退出界面及結(jié)果目前國內(nèi)外做聊天系統(tǒng)的公司很多,產(chǎn)品也琳瑯滿目,國內(nèi)有諸如騰訊QQ、新 浪UC、網(wǎng)易泡泡等,國外有著名的MSN(新版改名為Liv

11、e Messenger)以及跨平臺Gaim等。本人取最具代表性的QQ和MSN進(jìn)行了一些研究,作為我開發(fā)聊天系 統(tǒng)的準(zhǔn)備。騰訊無疑是國內(nèi)即時(shí)通訊市場的霸主,自從99年進(jìn)入即時(shí)通訊領(lǐng)域并迅速占市 場之后,其在國內(nèi)用戶數(shù)量始終高居榜首,即使近幾年面對微軟MSN的強(qiáng)大攻勢, 騰訊QQ的時(shí)常占有率依然穩(wěn)步增長。騰訊的成功與其對QQ的不斷創(chuàng)新和完善是 分不開的。參考了許多網(wǎng)絡(luò)上的資料,以及自己通過觀察騰訊QQ運(yùn)行時(shí)的各種細(xì)節(jié)???以確定騰訊QQ是以多服務(wù)器提供服務(wù)、服務(wù)器總控客戶端、客戶端之間UDP直連 通信的。并且在兩個(gè)客戶端之間不能建立直連的情況下,才由服務(wù)器進(jìn)行中轉(zhuǎn)通信。其模型如圖1-1四、主要程序

12、源代碼客戶端主要代碼:import java.awt.*;import java.awt.List;import java.awt.event.*;import java.io.*;import .*;import java.text.SimpleDateFormat;import java.util.Date;import javax.swing.*;public class Chatlogo extends JFrame (JFrame a1 = new JFrame(QQ2012”);/ 創(chuàng)建登錄窗口 TOC o 1-5 h z JLabel lab1 = new JLabel(賬號”)

13、;JLabel lab2 = new JLabel(密碼”);JButton bt1 = new JButton(登錄”);JButton bt2 = new JButton(修改密碼);JTextField text1 = new JTextField(26);JPasswordField pasf1 = new JPasswordField(26);設(shè)置文本框長度JFrame a2 = new JFrame(修改密碼,創(chuàng)建修改密碼窗口JLabel lab3 = new JLabel(賬號);JLabel lab4 = new JLabel(新密碼);JLabel lab5 = new JL

14、abel(確認(rèn)密碼);JButton bt3 = new JButton(確定);JButton bt4 = new JButton(取消);JTextField text2 = new JTextField(22);JPasswordField pasf2 = new JPasswordField(23);JPasswordField pasf3 = new JPasswordField(23);JPanel panel1 = new JPanel(new FlowLayout(FlowLayout.LEFT,15,10);JPanel panel2 = new JPanel(new Flo

15、wLayout(FlowLayout.LEFT,70,30);JPanel panel3 = new JPanel(new FlowLayout(FlowLayout.CENTER,10,10);設(shè)置按鈕及文本框位置JFrame a3 = new JFrame();/ 創(chuàng)建聊天窗口JPanel panel4 = new JPanel();JPanel panel5 = new JPanel();JTextArea area1 = new JTextArea(12, 10);JTextArea area2 = new JTextArea(12, 8);JScrollPane scroll1 =

16、new JScrollPane(area1);JScrollPane scroll2 = new JScrollPane(area2);創(chuàng)建文本區(qū)JButton bt5 = new JButton(發(fā)送”);JButton bt6 = new JButton(關(guān)閉窗口);List list = new List(15, false);Checkbox cb = new Checkbox(私聊);Choice choice=new Choice();/ 添加下拉列表框BufferedReader bufferedreader;PrintStream printStream;Socket sock

17、et ;boolean bool = true;ObjectInputStream ois;ObjectOutputStream oos;JPanel imagePanel1;ImageIcon background1;添加背景圖片public Chatlogo()(/choice.add(群聊);/choice.add(私聊);a1.add(lab1);a1.add(text1);a1.add(lab2);a1.add(pasf1);a1.add(bt1);a1.add(bt2);background1 = new ImageIcon(d:tt.jpg); 背景圖片來源JLabel labe

18、l = new JLabel(background1);/ 利用標(biāo)簽添加背景圖片 label.setBounds(0,0, background1.getIconWidth(), background1.getIconHeight();imagePanel1 = (JPanel) a1.getContentPane();imagePanel1.setOpaque(false);imagePanel1.setLayout(new FlowLayout();/ 設(shè)置背景圖片位置 a1.getLayeredPane().setLayout(null);a1.getLayeredPane().add(

19、label, new Integer(Integer.MIN_VALUE); a1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);a1.setSize(background1.getIconWidth(), background1.getIconHeight(); al.setResizable(false);al.setVisible(true);panel1.add(panel2);panel3.add(lab3);panel3.add(text2);panel3.add(lab4);panel3.add(pasf2);panel3.add(

20、lab5);panel3.add(pasf3);panel3.add(bt3);panel3.add(bt4);a2.add(panel3);a2.setSize(300,300);/設(shè)置修改密碼窗口大小a1.setVisible(true);a3.setSize(500, 400);/ 設(shè)置聊天窗口大小 a3.add(panel4, BorderLayout.CENTER); a3.add(panel5, BorderLayout.SOUTH); a3.add(list, BorderLayout.EAST);設(shè)置各按鈕的布局panel5.add(bt5);panel5.add(bt6);p

21、anel5.add(cb);panel5.add(choice);panel4.setLayout(new GridLayout(2, 1);panel4.add(scroll1);panel4.add(scroll2);bt1.addActionListener(new ActionListener()(public void actionPerformed(ActionEvent ae1) (/ 監(jiān)聽動作事件boolean temp = false; try bufferedreader = new BufferedReader(new FileReader(d:pwd.txt); Str

22、ing sName =;while(sName = bufferedreader.readLine() != null)String sarr = sName.split();&if(text1.getText().equals(sarr0)(pasf1.getText().equals(sarr1)(temp = true;break;else(temp = false;if(temp = false)(JOptionPane.showMessageDialog(a1,對不起,密 碼錯(cuò)誤或用戶不存在!”);else(oos.writeObject(賬號:+text1.getText();a1

23、.setVisible(false);a3.setTitle(text1.getText();a3.setVisible(true);調(diào)用文本中的信息,進(jìn)行賬號登陸bufferedreader.close(); catch (FileNotFoundException e1) (/ 拋出異常事件/ TODO Auto-generated catch blocke1.printStackTrace(); catch (IOException e1) (/ TODO Auto-generated catch block e1.printStackTrace(););bt2.addActionLis

24、tener(new ActionListener()(public void actionPerformed(ActionEvent e) ( a1.setVisible(false);a2.setVisible(true); ); bt3.addActionListener(new ActionListener()(public void actionPerformed(ActionEvent ae2) ( try PrintWriter printwrite= new PrintWriter(new FileWriter(d:pwd.txt”,true);String s1= text2.

25、getText();String s2 = pasf2.getText();String s4 = pasf3.getText();String s3 = s1 + + s2;bufferedreader = new BufferedReader(new FileReader(d:pwd.txt); String ss = bufferedreader.readLine(); int a = 0;while(ss != null)String sss = ss.split();a = compare(sss0,s1);if(s2.equals(s4) if(a = 1)JOptionPane.

26、showMessageDialog(a2,該賬 號已被使用”);break;ss = bufferedreader.readLine();if(a = 0)printwrite.println(s3);JOptionPane.showMessageDialog(a2,密碼修改成功”); a2.setVisible(false);al.setVisible(true); break;else(JOptionPane.showMessageDialog(a2,”兩次密碼 輸入不一致);break;printwrite.close(); catch (FileNotFoundException e)

27、 ( e.printStackTrace(); catch (IOException e) ( e.printStackTrace(););實(shí)現(xiàn)修改密碼操作,并將用戶信息保存到文檔里bt4.addActionListener(new ActionListener()(public void actionPerformed(ActionEvent ae3) ( / TODO Auto-generated method stub a1.setVisible(true);a2.setVisible(false););choice.addItemListener(new ItemListener()(

28、public void itemStateChanged(ItemEvent e) );bt5.addActionListener(new ActionListener()(public void actionPerformed(ActionEvent ae4) (try if(cb.getState()(oos.writeObject( 私 聊 :+text1.getText()+ 對:+list.getSelectedItem() + :說-:+ area2.getText();elseoos.writeObject(群聊:+text1.getText()+”說:+ area2.getTe

29、xt();area2.setText(); catch (IOException e) e.printStackTrace(););/設(shè)置聊天操作,實(shí)現(xiàn)獲取時(shí)間bt6.addActionListener(new ActionListener()public void actionPerformed(ActionEvent ae5) try oos.writeObject(該用戶下線:+text1.getText();System.exit(1); catch (IOException e1) e1.printStackTrace(););try socket = new Socket(loca

30、lhost”, 9999);/設(shè)置服務(wù)器 Ip oos = new ObjectOutputStream(socket.getOutputStream();ClientThread ct = new ClientThread(); ct.start(); catch (UnknownHostException e) ( e.printStackTrace(); catch (IOException e) ( e.printStackTrace();class ClientThread extends Thread(public void run()( try while(bool)( ois

31、= new ObjectInputStream(socket.getInputStream(); String s = (String)ois.readObject();String sarr = s.split(:); area1.selectAll();if(sarr0.equals(列表) list.removeAll(); list.add(在線用戶列表”); for(int i = 1; i sarr.length; i+) list.add(sarri); else if(sarr0.equals(私聊) SimpleDateFormatc=newSimpleDateFormat(

32、yyyy/MM/dd HH:mm:ss); area1.append(sarr1+ +sarr2+ +c.format(newDate()+: +n+ +sarr3+n);else if(sarr0.equals(群聊)(SimpleDateFormatc=newSimpleDateFormat(yyyy/MM/dd HH:mm:ss); area1.append(sarr1+ +c.format(new Date()+: +n+ +sarr +n); 實(shí)現(xiàn)聊天功能 catch (IOException e) ( e.printStackTrace(); catch (ClassNotFoun

33、dException e) ( e.printStackTrace();public int compare(String s1,String s2)( int flag = 0; if(s1.equals(s2) = true)( flag = 1; return flag;public static void main(String args) ( Chatlogo c = new Chatlogo();服務(wù)器主要代碼:import java.io.*;import .*;import java.util.*; public class Server(ServerSocket ssc;So

34、cket socket ;boolean bool = true;ArrayList array = new ArrayList();Map map = new HashMap();public Server()(try ssc = new ServerSocket(9999);while(bool)socket = ssc.accept();String s = + socket.getInetAddress()+:+socket.getPort();socket = ssc.accept();array.add(socket);MyThread mt = new MyThread();mt

35、.start(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();class MyThread extends ThreadObjectInputStream ois;ObjectOutputStream oos;public void run()String s =;String sarr;try ois = new ObjectInputStream(socket.getInputStream();while(s = (String)ois.readObject() != null)sa

36、rr = s.split(:);if(sarr0.equals(賬號)map.put(sarr1, socket);Iterator iter = map.keySet().iterator();String ss =”;while(iter.hasNext()(if(ss = null)(ss = iter.next() + :;else(ss += iter.next() + :;for(int i = 0; i array.size(); i+)(try oos = new ObjectOutputStream(Socket) array.get(i).getOutputStream()

37、;oos.writeObject(列表+: + ss); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();else if(sarr0.equals(該用戶下線)Socket soc = (Socket)map.get(sarr1);map.remove(sarr1);array.remove(soc);Iterator iter = map.keySet().iterator();while(iter.hasNext()(if(ss = null)(ss = iter.next() + :;e

38、lse(ss += iter.next() + :;for(int i = 0; i array.size(); i+)(try oos = new ObjectOutputStream(Socket) array.get(i).getOutputStream();oos.writeObject(列表:+ ss); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace();else if(sarr0.equals(私聊)Socket socke = (Socket)map.get(sarr2);oos=newObjectOutputStream(socke.getOutputStream();oos.writeObject(s);else if(sarr0.equals(群聊)for(int i =

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論