Java实现简易画图程序

上传人:仙*** 文档编号:107120131 上传时间:2022-06-14 格式:DOC 页数:35 大小:490KB
收藏 版权申诉 举报 下载
Java实现简易画图程序_第1页
第1页 / 共35页
Java实现简易画图程序_第2页
第2页 / 共35页
Java实现简易画图程序_第3页
第3页 / 共35页
资源描述:

《Java实现简易画图程序》由会员分享,可在线阅读,更多相关《Java实现简易画图程序(35页珍藏版)》请在装配图网上搜索。

1、wordJava语言课程期末作业题 目 第1题:简易绘图程序学 院计算机学院 专 业 软件工程 班 别学 号姓 名2015年12月6日35 / 35一、课程题目 绘图应用程序。利用学过的GUI 方法实现一个较为完整的绘图应用程序。用户可以选择要画的图形如线,椭圆,圆,矩形,弧,圆角矩形,多边形,折线等等,选择画笔颜色和画笔粗度,用鼠标单击和拖拽等动作绘图,并能将绘图结果保存为jpg和bmp格式。二、题目分析与设计 1. 开发环境:2. 题目需求分析:题目要某某现一个较为完整的绘图程序,最根本的要求是用户可以自由选择图形,颜色,线条粗细等属性,并用鼠标绘制图形,并将其保存为图片文件。首先,程序界

2、面参考一般绘图软件,进展组件的布局。另外对于程序的功能实现,如此将图形封装成类,通过多态实现多种不同图形的绘制,并用输入输出流保存或打开文件。除此之外根据实际操作的需要,添加一些必要或者实用的功能,如撤销操作,快捷键撤销或保存,关闭文件前弹窗提示保存等功能。(1). 菜单功能:通过菜单栏进展:一、 文件的读取与写入;二、 使用扩展功能;三、 程序的简单偏好设置;四、 程序信息提示。(2) . 绘图功能:在绘图过程通过工具栏进展形状、颜色等图形选择,在文本输入与扩展功能状态下会新增子工具栏,在子工具栏中对于字体或其它形状进展设置。然后在画板区域通过鼠标的点击与拖拽绘制图形。绘图过程应有保存与撤销

3、功能。绘图X围为画板的显示的区域。(3). 其它功能:如快捷键Ctrl+z为撤销,Ctrl+s为保存。鼠标停在工具栏按钮上时提示功能。文件修改后窗口标题带上星号作为标记。第一次编辑的文件或修改正的文件关闭前自动提示保存。等等。(4). 功能架构图:简易绘图文件操作绘画图形补充功能打开文件新建文件保存文件撤销擦除图形绘制背景颜色更多图形作者信息3. 界面设计:本程序使用Swing图形编程。菜单:类似于常见程序,添加子菜单:File,Paint, Setting, Help。在File菜单下有new,open, save, exit等菜单项。Paint下主要是moreshape调出更多图形选择,S

4、etting下的background菜单项可更改画板背景颜色。Help下可查看程序与作者的信息。主界面:采用默认的BordeLayout布局,添加工具栏于NORTH区,画板于CENTER区。打开程序时默认全屏。工具栏:由于有多个工具栏,所以使用JTabbedPane做出多标签。主工具栏一直存在,文本工具栏和扩展工具栏每次最多只有一个出现,假如打开时另一个工具栏已存在,如此会先将已存在的工具栏关闭。主工具栏与文本工具栏由于有复选框这一组件,添加后会自动填满多余空间,所以使用FlowLayout布局。扩展工具栏使用默认布局。主工具栏添加常用图形按钮、图形属性按钮、撤销按钮。文本工具栏添加字体属性按

5、钮,撤销按钮与退出文本工具栏按钮。扩展工具栏添加多边形按钮与退出扩展工具栏按钮。每个工具栏的按钮各自存放在一个ArrayList中。画板:画板类从JPanel继承,重写paintponent方法,使得画板每次刷新时可将之前的所有图形重新画出来。4. 逻辑实现:画图局部:程序将一个图形的所有信息封装为一个Drawings类,而具体的图形如此从Drawings类继承,并实现自己的draw()方法用以画出图形。因此,可以创建一个Drawings类型的数组,用一个索引对数组进展操作,用户每画一个图形,就将该图形的所有信息存放到数组中索引指向的位置,索引向后移动一位。重写后的画板的drawponent方

6、法就会自动将数组中从0位置到索引位置的所有图形在画板上绘制出来。而撤销操作只需要将索引向前移动一位并重画即可。文件读写:保存文件时,先创建一个BufferedImage对象,然后将画板内容画到该对象上,并将该对象写入到指定文件中。打开文件时,如此从指定文件中获得一个BufferedImage对象,将其作为一个从Drawings类继承的图形,在画板上画出来。三、测试分析1. 测试数据:(1). 新建文件,画图,保存为jpg文件;(2). 新建文件,画图,保存为bmp文件;(3). 打开(1)(2)中保存的文件;(4). 打开一个txt文件,弹窗报错;2. 测试情况:测试结果与预计结果一致;附录:

7、源代码+图标import java.awt.AWTEvent;import java.awt.BasicStroke;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Cursor;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Toolkit;import java.awt.e

8、vent.AWTEventListener;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.awt.event.KeyEvent;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListene

9、r;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.io.Serializable;import java.util.ArrayList;import javax.imageio.ImageIO;import javax.swing.ImageIcon;import javax.swing.utton;import

10、javax.swing.JColorChooser;import javax.swing.oBox;import javax.swing.Jponent;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTabbed

11、Pane;import javax.swing.JToggleButton;import javax.swing.JToolBar;import javax.swing.filechooser.FileFilter;publicclassMiniDrawPadextends JFrame implements MouseListener, MouseMotionListener /根本属性定义MainMenu mainMenu;/主菜单JTabbedPane tab;/多工具栏ToolBar toolBar;/主工具栏ArrayList button;/主工具栏的一排按钮String name

12、s = /主工具栏按钮名pencil, line, oval, rect, orect, tria, eraser, word, color, full, undo;oBoxstrokeitem;/线条粗细选择框DrawPanel board;/画图面板File fileName = null;/打开保存的文件名String oldName;/原窗口名标记Drawings pic = new Drawings5000;/图形单元存储数组intindex=0;/当前图形存储位置intshape=0;/形状标记intstroke = 1;/线条粗细标记intlengthCount;/铅笔或橡皮擦图

13、形的存储长度intbold, italic;/粗体与斜体intsize=3;/文字大小String font;/文字字体Color color = Color.black;/颜色标记Color anticolor = Color.white;booleanfill = false;/填充标记inttag=0; /标记文件第一次打开/构造主面板public MiniDrawPad(String s) super(s);oldName = s;tab = new JTabbedPane();board = new DrawPanel();mainMenu = new MainMenu();tool

14、Bar = new ToolBar();board.setPreferredSize(new Dimension(Toolkit.getDefaultToolkit().getScreenSize();board.addMouseListener(this);board.addMouseMotionListener(this);this.setJMenuBar(mainMenu);tab.add(主工具栏, toolBar);this.add(tab, BorderLayout.NORTH);this.getContentPane().add(board, BorderLayout.CENTE

15、R);this.setExtendedState(JFrame.MAXIMIZED_BOTH);this.setBounds(350, 35, 555, 655);this.setVisible(true);initItem();/初始化当前图形单元this.addWindowListener(new WindowAdapter() Overridepublicvoid windowClosing(WindowEvent e) / TODO Auto-generated method stubif(getTitle().equals(oldName+*) /关闭前确定保存Object opti

16、ons = 确定, 取消 ; intchoice = JOptionPane.showOptionDialog(JOptionPane.getFrameForponent(board), 文件未保存,是否保存?, 提示, JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options0);if(choice = 0) mainMenu.saveFile();System.exit(0););/注册全局监听Toolkit tk = Toolkit.getDefaultToolkit(); tk.add

17、AWTEventListener(new ImplAWTEventListener(), AWTEvent.KEY_EVENT_MASK);/自定义键盘监听器class ImplAWTEventListener implements AWTEventListener Overridepublicvoid eventDispatched(AWTEvent event) if (event.getClass() = KeyEvent.class) / 被处理的事件是键盘事件. KeyEvent keyEvent = (KeyEvent) event; if (keyEvent.getID() =

18、KeyEvent.KEY_PRESSED)/按下时你要做的事情 keyPressed(keyEvent); privatevoid keyPressed(KeyEvent event) if(event.isControlDown() & event.getKeyCode() = KeyEvent.VK_Z) undo();if(event.isControlDown() & event.getKeyCode() = KeyEvent.VK_S)mainMenu.saveFile(); /菜单面板类classMainMenuextends JMenuBar /构造菜单面板public Main

19、Menu() JMenu File, Paint, Setting, Help;JMenuItem newfile, open, save, exit, moreShape, background, tip;/创建菜单File = new JMenu(File);Paint = new JMenu(Paint);Setting = new JMenu(Setting);Help = new JMenu(Help);/File菜单下newfile = new JMenuItem(new);open = new JMenuItem(open);save = new JMenuItem(save);

20、exit = new JMenuItem(exit);/Paint菜单下moreShape = new JMenuItem(moreShape);/Setting菜单下background = new JMenuItem(background);/Help菜单下tip = new JMenuItem(tip);this.add(File);File.add(newfile);File.addSeparator();File.add(open);File.addSeparator();File.add(save);File.addSeparator();File.add(exit);this.a

21、dd(Paint);Paint.add(moreShape);this.add(Setting);Setting.add(background);this.add(Help);Help.add(tip);this.setBackground(Color.cyan);/各个菜单项添加监听器newfile.addActionListener(new ActionListener() Overridepublicvoid actionPerformed(ActionEvent e) / TODO Auto-generated method stubnewFile(););open.addAction

22、Listener(new ActionListener() Overridepublicvoid actionPerformed(ActionEvent e) / TODO Auto-generated method stubopenFile(););save.addActionListener(new ActionListener() Overridepublicvoid actionPerformed(ActionEvent e) / TODO Auto-generated method stubsaveFile(););exit.addActionListener(new ActionL

23、istener() Overridepublicvoid actionPerformed(ActionEvent e) / TODO Auto-generated method stubif(getTitle().equals(oldName+*) Object options = 确定, 取消 ; intchoice = JOptionPane.showOptionDialog(JOptionPane.getFrameForponent(board), 文件未保存,是否保存?, 提示, JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSA

24、GE, null, options, options0);if(choice = 0) saveFile();System.exit(0););moreShape.addActionListener(new ActionListener() Overridepublicvoid actionPerformed(ActionEvent e) / TODO Auto-generated method stubaddTab(多边形工具栏););background.addActionListener(new ActionListener() Overridepublicvoid actionPerf

25、ormed(ActionEvent e) / TODO Auto-generated method stubboard.setBackground(anticolor = JColorChooser.showDialog(JOptionPane.getFrameForponent(board), Choose Color, MiniDrawPad.this.color);if(anticolor = Color.black)color = Color.WHITE;elsecolor = Color.black;initItem(););tip.addActionListener(new Act

26、ionListener() Overridepublicvoid actionPerformed(ActionEvent e) / TODO Auto-generated method stubJOptionPane.showMessageDialog(JOptionPane.getFrameForponent(board), 本作品仅供学习交流n由于作者能力有限,本作品仍有许多不足之处,欢迎提出改良之处。nEmail:1368663435 .););/新建文件的实现publicvoid newFile() if(getTitle().equals(oldName+*) Object opti

27、ons = 确定, 取消 ; intchoice = JOptionPane.showOptionDialog(JOptionPane.getFrameForponent(board), 文件未保存,是否保存?, 提示, JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE,null, options, options0);if(choice = 0) saveFile();index = 0;shape = 0;color = Color.black;stroke = 1;strokeitem.setSelectedIndex(0);

28、 initItem();board.repaint();/将有关值设置为初始状态,并且重画 isSave(true);fileName = null; /打开文件的实现publicvoid openFile() if(getTitle().equals(oldName+*) Object options = 确定, 取消 ; intchoice = JOptionPane.showOptionDialog(JOptionPane.getFrameForponent(board), 文件未保存,是否保存?, 提示, JOptionPane.DEFAULT_OPTION, JOptionPane.

29、WARNING_MESSAGE, null, options, options0);if(choice = 0) saveFile();JFileChooser fileChooser = new JFileChooser();fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); JpgFilter jpg = new JpgFilter(); BmpFilter bmp = new BmpFilter();fileChooser.addChoosableFileFilter(jpg);fileChooser.addChoosab

30、leFileFilter(bmp);fileChooser.setFileFilter(jpg);intresult = fileChooser.showOpenDialog(MiniDrawPad.this);if (result = JFileChooser.CANCEL_OPTION) return; fileName = fileChooser.getSelectedFile();if(!fileName.getName().endsWith(fileChooser.getFileFilter().getDescription() JOptionPane.showMessageDial

31、og(MiniDrawPad.this, 文件格式错误!);return; fileName.canRead();if (fileName = null | fileName.getName().equals() JOptionPane.showMessageDialog(fileChooser, Invalid File Name,Invalid File Name, JOptionPane.ERROR_MESSAGE); BufferedImage image;try tag = 1;index = 0;shape = -1;image = ImageIO.read(fileName);i

32、nitItem();picindex.image = image;picindex.board = board;board.repaint();index+;shape = 0;initItem(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();/保存文件的实现/保存图形文件程序段publicvoid saveFile() if(fileName = null) JFileChooser fileChooser = new JFileChooser();fileChooser.setFil

33、eSelectionMode(JFileChooser.FILES_ONLY); JpgFilter jpg = new JpgFilter(); BmpFilter bmp = new BmpFilter();fileChooser.addChoosableFileFilter(jpg);fileChooser.addChoosableFileFilter(bmp);fileChooser.setFileFilter(jpg);intresult = fileChooser.showSaveDialog(MiniDrawPad.this);if (result = JFileChooser.

34、CANCEL_OPTION) return; fileName = fileChooser.getSelectedFile();if(!fileName.getName().endsWith(fileChooser.getFileFilter().getDescription() String t = fileName.getPath() + fileChooser.getFileFilter().getDescription();fileName = new File(t); fileName.canWrite();if (fileName = null | fileName.getName

35、().equals() JOptionPane.showMessageDialog(fileChooser, Invalid File Name,Invalid File Name, JOptionPane.ERROR_MESSAGE); BufferedImage image = createImage(board);try ImageIO.write(image, png, fileName); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();isSave(true);/创建image,由

36、saveFile方法调用public BufferedImage createImage(DrawPanel panel) /int totalWidth = panel.getPreferredSize().width;/int totalHeight = panel.getPreferredSize().height;/BufferedImage panelImage = new BufferedImage(totalWidth, totalHeight, BufferedImage.TYPE_INT_RGB);intwidth = MiniDrawPad.this.getWidth();

37、intheight = MiniDrawPad.this.getHeight();BufferedImage panelImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics2D g2D = (Graphics2D) panelImage.createGraphics();g2D.setColor(Color.WHITE);g2D.fillRect(0, 0, width, height);g2D.translate(0, 0);panel.paint(g2D);/将画板内容画到panelIma

38、ge上g2D.dispose();returnpanelImage;/文件过滤class JpgFilter extends FileFilter Overridepublicboolean accept(File f) / TODO Auto-generated method stubif(f.isDirectory() returntrue;returnf.getName().endsWith(.jpg);Overridepublic String getDescription() / TODO Auto-generated method stubreturn.jpg;class BmpF

39、ilter extends FileFilter Overridepublicboolean accept(File f) / TODO Auto-generated method stubif(f.isDirectory() returntrue;returnf.getName().endsWith(.bmp);Overridepublic String getDescription() / TODO Auto-generated method stubreturn.bmp;/主工具栏类classToolBarextends JToolBar implements MouseListener

40、, ItemListener /界面构造public ToolBar() this.setLayout(new FlowLayout(FlowLayout.LEFT);button = new ArrayList(names.length);for(inti=0; inames.length; i+) if(i = 10) strokeitem = newoBox();for(intj=1; j=10; j+) strokeitem.addItem( + j);this.add(strokeitem);this.addSeparator();strokeitem.setMaximumSize(

41、getPreferredSize();strokeitem.addItemListener(this);button.add(i, new utton(new ImageIcon(ClassLoader.getSystemResource(icon/ +namesi + .ico);this.add(button.get(i);if(i = 6 | i = 7 | i = 8 | i = 9 | i = 10) this.addSeparator();for(intj=0; jnames.length; j+)button.get(j).addMouseListener(this);/Mous

42、eListener监听器/实现按钮功能publicvoid mousePressed(MouseEvent e) utton b = (utton)e.getSource();/createNewItem();switch(button.indexOf(b) case 0:shape = 0;break;case 1:shape = 1;break;case 2:shape = 2;break;case 3:shape = 3;break;case 4:shape = 4;break;case 5:shape = 5;break;case 6:shape = 6;break;case 7:sh

43、ape = 7;addTab(文本工具栏);break;case 8:color = JColorChooser.showDialog(this, Choose Color, color);break;case 9:fill = !fill;break;case 10:undo();break;initItem();/提示按钮功能publicvoid mouseEntered(MouseEvent e) utton b = (utton)e.getSource();switch(button.indexOf(b) case 0:b.setToolTipText(铅笔);break;case 1

44、:b.setToolTipText(直线);break;case 2:b.setToolTipText(椭圆);break;case 3:b.setToolTipText(矩形);break;case 4:b.setToolTipText(圆角矩形);break;case 5:b.setToolTipText(三角形);break;case 6:b.setToolTipText(橡皮擦);break;case 7:b.setToolTipText(文字);break;case 8:b.setToolTipText(颜色);break;case 9:b.setToolTipText(填充);br

45、eak;case 10:b.setToolTipText(撤销);break;/以下方法无需实现Overridepublicvoid mouseClicked(MouseEvent e) / TODO Auto-generated method stubOverridepublicvoid mouseReleased(MouseEvent e) / TODO Auto-generated method stubOverridepublicvoid mouseExited(MouseEvent e) / TODO Auto-generated method stub/ItemListener监听

46、器Overridepublicvoid itemStateChanged(ItemEvent e) / TODO Auto-generated method stubstroke = strokeitem.getSelectedIndex();initItem();/文本工具栏类classWordToolBarextends JToolBar implements ItemListener, MouseListener /组件定义ArrayListal = newArrayList();JToggleButton bold, italic;oBoxfont, size;utton color,

47、 undo, exit;String fonts = , 宋体, 楷体, 微软雅黑, 黑体, Consolas;/界面构造public WordToolBar() font = newoBox();size = newoBox();color = new utton(new ImageIcon(ClassLoader.getSystemResource(icon/ + color.ico);undo = new utton(new ImageIcon(ClassLoader.getSystemResource(icon/ + undo.ico);exit = new utton(new Ima

48、geIcon(ClassLoader.getSystemResource(icon/ + exit.ico);bold = new JToggleButton(粗体);italic = new JToggleButton(斜体);for(inti=0; ifonts.length; i+)font.addItem(fontsi);for(intj=2; j=90; j+=2)size.addItem(j);size.setSelectedIndex(3);bold.setBackground(Color.white);italic.setBackground(Color.white);al.a

49、dd(bold);al.add(italic);al.add(font);al.add(size);al.add(color);al.add(undo);al.add(exit);al.add(undo);bold.addMouseListener(this);italic.addMouseListener(this);font.addMouseListener(this);size.addMouseListener(this);color.addMouseListener(this);exit.addMouseListener(this);this.setLayout(new FlowLay

50、out(FlowLayout.LEFT);this.add(bold);this.addSeparator();this.add(italic);this.addSeparator();this.add(font);this.addSeparator();this.add(size);this.addSeparator();this.add(color);this.addSeparator();this.add(undo);this.addSeparator();this.add(exit);for(inti=0; i100; i+) this.addSeparator();bold.addI

51、temListener(this);italic.addItemListener(this);font.addItemListener(new ItemListener() Overridepublicvoid itemStateChanged(ItemEvent e) / TODO Auto-generated method stubMiniDrawPad.this.font = font.getSelectedItem().toString(););size.addItemListener(new ItemListener() Overridepublicvoid itemStateCha

52、nged(ItemEvent e) / TODO Auto-generated method stubMiniDrawPad.this.size = size.getSelectedIndex(););color.addActionListener(new ActionListener() Overridepublicvoid actionPerformed(ActionEvent e) / TODO Auto-generated method stubMiniDrawPad.this.color = JColorChooser.showDialog(JOptionPane.getFrameF

53、orponent(board), Choose Color, MiniDrawPad.this.color);initItem(););undo.addActionListener(new ActionListener() Overridepublicvoid actionPerformed(ActionEvent e) / TODO Auto-generated method stubundo(););/退出文字工具栏exit.addActionListener(new ActionListener() Overridepublicvoid actionPerformed(ActionEve

54、nt e) / TODO Auto-generated method stubtab.remove(tab.indexOfTab(文本工具栏););/粗体斜体选择Overridepublicvoid itemStateChanged(ItemEvent e) / TODO Auto-generated method stubintstate = e.getStateChange();JToggleButton b = (JToggleButton)e.getSource();if (state = e.SELECTED) if(b.getText() = 粗体)/调用粗体 MiniDrawPa

55、d.this.bold = 1;if(b.getText() = 斜体)/调用斜体 MiniDrawPad.this.italic = 2; else if(b.getText() = 粗体)/取消粗体 MiniDrawPad.this.bold = 0;if(b.getText() = 斜体)/取消斜体 MiniDrawPad.this.italic = 0; initItem();/文字工具栏提示Overridepublicvoid mouseEntered(MouseEvent e) / TODO Auto-generated method stubJponent b = (Jponen

56、t)e.getSource();switch (al.indexOf(b) case 0:b.setToolTipText(粗体);break;case 1:b.setToolTipText(斜体);break;case 2:b.setToolTipText(字体);break;case 3:b.setToolTipText(大小);break;case 4:b.setToolTipText(颜色);break;case 5:b.setToolTipText(退出);break;/以下方法无需实现Overridepublicvoid mouseClicked(MouseEvent e) / T

57、ODO Auto-generated method stubOverridepublicvoid mousePressed(MouseEvent e) / TODO Auto-generated method stubOverridepublicvoid mouseReleased(MouseEvent e) / TODO Auto-generated method stubOverridepublicvoid mouseExited(MouseEvent e) / TODO Auto-generated method stub/多边形工具栏类classMoreShapeextends JToolBar implements MouseListener /ArrayList b =

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!