虚拟的java编辑器课程设计报告.doc_第1页
虚拟的java编辑器课程设计报告.doc_第2页
虚拟的java编辑器课程设计报告.doc_第3页
虚拟的java编辑器课程设计报告.doc_第4页
虚拟的java编辑器课程设计报告.doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

虚拟的Java编辑器设计报告一、需求分析此次课程设计名称为JAVA编辑器。需要设计一个图形界面的文本编辑器,能编辑Java语言源程序,界面和功能类似Editplus。演示程序为计算机和用户的对话形式执行,即在计算机的终端显示图形界面的文档编辑器,然后用户就可以实现编辑,保存等像记事本一样的功能。(1)打开以有文件,保存编辑文件,退出编辑器并提醒保存;(2)查找编辑区中的字符串,用已知字符串替换查找的字符串;(3)显示文件的存取路径;(4)剪切,复制,粘贴,删除等;(5)改变文本区字体的颜色,字体大小和形状的功能;(6)关键字显示蓝色、类库类名显示红色。二. 设计1. 设计思想Java编辑器是用来编写java程序的源代码。Java程序编辑器是:图形界面、线程、流与文件等技术的综合应用。图形界面的实现:就选择了swing来完成实现,在选择组件上,文本编辑区就选用了JTextPane作为主要的部件。由于Java的特性,可能用任何一个编辑器来编辑,于是就将Windows中的记事本作为模仿对象,根据实现情况删减了其中的一些功能,如自动换行,设置字体,打印等功能。在设计类的时候,考虑到简单明了,一个主类,一个默认属性myfr类,染色类SyntaxHighlighter作为程序的整体框架,所有的对象和方法都是在默认属性类和染色类中创建和实现的,以及为各组件注册事件监听程序也是在默认属性类染色类中实现的。本程序主类完成对象的实例化及显示。2. 功能设计本程序涉及到了对图形用户界面的设计与实现和菜单的设计与实现。用户可以通过此编辑器对java文件进行文字的复制、剪切、粘贴、删除、查找、替换、时间的插入、设置字体颜色和关键字、类库名着色等。本程序主要有以下3个模块组成:(1)主体模块由窗口、功能菜单、文本框组成。为用户选择编辑的功能提供了简单、方便的界面。Java的窗口由JFrame类生成,我们可以在创建的空白窗口上添加组件。菜单是图形用户界面的重要组成部分,是由菜单条(MenuBar)、菜单(Menu)、菜单项(MenuItem)和复选菜单项(Checkbox MenuItem)等对象组成。(2)功能模块有文件的新建、打开、保存、另存为和退出,文字的复制、剪切、粘贴、删除、查找、替换、以及时间的插入,为用户提供了java编辑器的基础功能。 (3)染色模块关键字显示蓝色,类库名显示红色。实现高亮子的核心方法StyledDocument.setCharacterAttributes(int offset, int length, AttributeSet s, boolean replace)3. 详细设计本设计主要是模仿windows记事本界面,主要的难点是关键字染色算法和查找替换算法。其他的部分相对简单,主要就是一些容器组件的组合,布局的设置。主要的功能都在myfr类中实现的。Java中提供的多行文本编辑器有: JTextComponent, JTextArea, JTextPane, JEditorPane等, 都可以使用但是因为语法着色中文本要使用多种风格的样式, 所以这些文本编辑器的document要使用StyledDocument. JTextArea使用的是PlainDocument, 此document不能进行多种格式的着色.JTextPane, JEditorPane使用的是StyledDocument, 默认就可以使用.为了实现语法着色, 可以继承自DefaultStyledDocument, 设置其为这些文本编辑器的documet, 或者也可以直接使用JTextPane, JEditorPane来做. 为了方便, 这里就直接使用JTextPane了(1)主类 class ok 实例化初始化窗口 (2)主窗口体类 class myfr 字体类 class MyFont (3)染色类class SyntaxHighlighter (4)鼠标右键弹出菜单类class handlemouse (5)帮助主题类class myhelp(6)关闭窗口XXX类class xxx(7)关闭帮助主题窗口类class xxxhelp三. 调试及测试 1. 调试过程中遇到的主要问题及解决方法 开始把染色类写在myfr中,结果出现继承错误,只好把染色类写在myfr之外,通过引用实现类与类联系。在开始设置字体颜色是出现问题,关键字可着色,不能设置字体颜色,最后发现时没有监听器的位置出现了问题! 2. 对设计和编码的回顾讨论和分析 在本设计中没有用数据库,在直接用哈希表定义,所以只能简单定义几个常用的关键字、类库名,能说明功能实现就可以,这也是可以该进的地方。设计的功能有限,只能实现简单的文本编辑,没有编译,运行等等功能,这也是能力有限。 3.测试数据集 (1)主体模块定义一个myfr类对象,完成主类的实例化显示。(2)功能模块(A)文件(新建、打开、保存、另存为、退出)功能图如下:(B)编辑(复制、剪切、粘贴、删除、查找、查找下一个、替换、替换下一个、全选、日期/时间)功能图如下:(C)格式(字体、字体颜色)功能图如下:(D)格式风格(状态栏)功能图如下:(E)帮助(帮助主题、关于)功能图如下:(F)关键字显示蓝色、类库类名显示红色功能图如下:四、经验和体会。通过此次成功的实现了Java文本编辑器的设计与编写,我进一步巩固、加深了对专业课程JAVA语言教程的基础理论知识的理解,使我熟练的掌握了JAVA语言的输入输出流、数据库连接的使用,灵活运用各种类库。此次利用所学知识,开发小型应用系统我掌握了如何运用JAVA语言编写调试应用系统程序,并且训练了我独立开发应用系统,进行数据处理的综合能力。同时,对于给定的设计题目,如何对其进行分析,理清思路,并给出相应的数学模型,也是一项很好的考验。通过对这个课题的学习,我发现Java语言作为一种新兴的编辑语言,优势很明显,整个程序的结构很清晰,让人一目了然。而且,程序的编辑、修改、移植性也很强,可以通过对功能模块的添加,增加程序的实用性,例如查找、替换、打印等等,这些事今后可以进一步研究发展的方向。通过对这个课题的训练,使我基本掌握了Java编程的基础知识,主体模块与功能模块的结合技巧、方法,提高了我的自学能力,也锻炼了我分析问题、解决问题的能力!此次课程设计给我印象最深的就是,在程序中非常容易出小的毛病,而这些小毛病往往浪费大量的时间而不得其解,让人烦恼至极。比如,在主方法体中忘记定义一些变量,导致程序运行时程序也报出大量错,有时在鼠标随便定位处不小心按下一个字符,结果运行报错后出现意外错误,有时忘记保存等等此后让我懂得写程序一定要仔细,要认真写清每一行代码。附录:主要源程序import java.awt.*;import java.awt.event.*;import java.awt.Color;import java.io.*;import java.util.*;import java.util.HashSet;import java.util.Set;import java.awt.datatransfer.*;import java.awt.event.*;import java.text.*;import javax.swing.*;import javax.swing.event.*;import javax.swing.text.Caret;import javax.swing.JFrame;import javax.swing.JTextPane;import javax.swing.SwingUtilities;import javax.swing.event.DocumentEvent;import javax.swing.event.DocumentListener;import javax.swing.text.BadLocationException;import javax.swing.text.Document;import javax.swing.text.Style;import javax.swing.text.StyleConstants;import javax.swing.text.StyledDocument;import javax.swing.undo.*;public class okpublic static void main(String args)myfr fr=new myfr (我的java编辑器);fr.setSize(600,400);/myfr主窗体类/class myfr extends JFrame implements ActionListener String str,strnext,path,fname; /部分变量的声明JPanel mainpane; JFileChooser choose = new JFileChooser(); /文件对话框Dialog find,replace; /find为查找对话框,replace对话框JTextField findtxt,repltxt; /find为查找对话框的输入文本区,replace对话框的输入文本区Font newfont;JButton findenter,replb,but; /find为查找对话框,replace对话框的确定按钮JLabel state=new JLabel(java编辑器-未命名文档); /状态栏JTextPane txt1; /主输入文本区File newfiles;JPopupMenu popm; /弹出菜单声明JMenu m1,m2,m3,m4,m5,m6; /各菜单项JMenuItem m61,m62,m26,m271,m34,m51,m52,m53,m54,p_copy,p_cut,p_paste,p_del,font;int startp,endp,nexttemp,newstartp,newendp; /查找替换时所用的临时变量JToolBar toolbar = new JToolBar(); /工具条 private Set keywords;private Set classwords;private Style keywordStyle;private Style classwordStyle;private Style normalStyle;myfr(String sss) /构造函数开始super(sss);JMenuBar mb=new JMenuBar();fname=null; /初始文件名为空 findenter=new JButton(确定);findenter.addActionListener(this); /声明对话框中上确定按钮,并注册事件replb=new JButton(确定);replb.addActionListener(this);mainpane=(JPanel)this.getContentPane(); mainpane.setLayout(new BorderLayout(); txt1=new JTextPane();txt1.getDocument().addDocumentListener(new SyntaxHighlighter(txt1);txt1.addMouseListener(new handlemouse(this);/注册鼠标右击事件txt1.setFont(new Font(宋体,Font.PLAIN,18);mainpane.add(txt1, BorderLayout.CENTER); mainpane.add(North,toolbar); mainpane.add(South,state);JScrollPane sll = new JScrollPane(); /创建滚动条mainpane.add(Center, sll); ;sll.getViewport().add(txt1); /将滚动条装入文本区popm=new JPopupMenu(); /POPMeun 开始p_copy=new JMenuItem(复制 );p_copy.addActionListener(this);KeyStroke keycopyp=KeyStroke.getKeyStroke(KeyEvent.VK_C,Event.CTRL_MASK); p_copy.setAccelerator(keycopyp); p_cut=new JMenuItem(剪切 );p_cut.addActionListener(this);KeyStroke keycutp=KeyStroke.getKeyStroke(KeyEvent.VK_X,Event.CTRL_MASK); p_cut.setAccelerator(keycutp); p_paste=new JMenuItem(粘贴 );p_paste.addActionListener(this);KeyStroke keypp=KeyStroke.getKeyStroke(KeyEvent.VK_V,Event.CTRL_MASK); p_paste.setAccelerator(keypp); p_del=new JMenuItem(删除 );p_del.addActionListener(this);KeyStroke keydelp=KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0); p_del.setAccelerator(keydelp); popm.add(p_copy);popm.add(p_cut);popm.add(p_paste);popm.add(p_del);txt1.add(popm); /POPMenu 结束m1=new JMenu(文件(F);m1.setMnemonic(F); /定义快捷方式JMenuItem m10=new JMenuItem(新建 );m10.addActionListener(this); /注册事件监听器KeyStroke keynew=KeyStroke.getKeyStroke(KeyEvent.VK_N,Event.CTRL_MASK); /定义快捷键m10.setAccelerator(keynew); JMenuItem m11=new JMenuItem(打开 );m11.addActionListener(this);KeyStroke keyopen=KeyStroke.getKeyStroke(KeyEvent.VK_O,Event.CTRL_MASK); m11.setAccelerator(keyopen); JMenuItem m12=new JMenuItem(保存 );m12.addActionListener(this);KeyStroke keysave=KeyStroke.getKeyStroke(KeyEvent.VK_S,Event.CTRL_MASK); m12.setAccelerator(keysave); JMenuItem m13=new JMenuItem(另保存为 );m13.addActionListener(this);JMenuItem m14=new JMenuItem(退出 );m14.addActionListener(this);KeyStroke keyexit=KeyStroke.getKeyStroke(KeyEvent.VK_F4,Event.ALT_MASK); m14.setAccelerator(keyexit); /m2=new JMenu(编辑(E);m2.setMnemonic(E);JMenuItem m21=new JMenuItem(复制 );m21.addActionListener(this);KeyStroke keycopy=KeyStroke.getKeyStroke(KeyEvent.VK_C,Event.CTRL_MASK); m21.setAccelerator(keycopy); JMenuItem m22=new JMenuItem(剪切 );m22.addActionListener(this);KeyStroke keycut=KeyStroke.getKeyStroke(KeyEvent.VK_X,Event.CTRL_MASK); m22.setAccelerator(keycut); JMenuItem m23=new JMenuItem(粘贴 );m23.addActionListener(this);KeyStroke keyp=KeyStroke.getKeyStroke(KeyEvent.VK_V,Event.CTRL_MASK); m23.setAccelerator(keyp); JMenuItem m24=new JMenuItem(删除 );m24.addActionListener(this);KeyStroke keydel=KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0); m24.setAccelerator(keydel); JMenuItem m25=new JMenuItem(查找 );m25.addActionListener(this);KeyStroke keyfind=KeyStroke.getKeyStroke(KeyEvent.VK_F,Event.CTRL_MASK); m25.setAccelerator(keyfind); m26=new JMenuItem(查找下一个 );m26.addActionListener(this);KeyStroke keyfn=KeyStroke.getKeyStroke(KeyEvent.VK_F3,0); m26.setAccelerator(keyfn); m26.setEnabled(false);JMenuItem m27=new JMenuItem(替换 );m27.addActionListener(this);KeyStroke keyrepl=KeyStroke.getKeyStroke(KeyEvent.VK_H,Event.CTRL_MASK); m27.setAccelerator(keyrepl); m271=new JMenuItem(替换下一个);m271.setEnabled(false);m271.addActionListener(this);KeyStroke keyrepn=KeyStroke.getKeyStroke(KeyEvent.VK_F6,0); m271.setAccelerator(keyrepn); JMenuItem m28=new JMenuItem(全选 );m28.addActionListener(this);KeyStroke keyall=KeyStroke.getKeyStroke(KeyEvent.VK_A,Event.CTRL_MASK); m28.setAccelerator(keyall); JMenuItem m29=new JMenuItem(日期/时间 );m29.addActionListener(this);/m3=new JMenu(格式(O);m3.setMnemonic(O);font=new JMenuItem(字体F);font.addActionListener(this);JMenuItem m33=new JMenuItem(字体颜色 );m33.addActionListener(this);/m5=new JMenu(视图风格(V);m5.setMnemonic(V);m54=new JMenuItem(状态栏 );m54.addActionListener(this);/m6=new JMenu(帮助(H);m6.setMnemonic(H); m61=new JMenuItem(帮助主题 );m61.addActionListener(this);m62=new JMenuItem(关于 );m62.addActionListener(this);/添加各项m1.add(m10); m1.add(m11); m1.add(m12); m1.add(m13); m1.addSeparator(); m1.add(m14);m3.add(font);m2.add(m21); m2.add(m22); m2.add(m23); m2.add(m24); m2.addSeparator(); m2.add(m25);m2.add(m26); m2.add(m27); m2.add(m271); m2.addSeparator(); m2.add(m28);m2.add(m29); m3.add(m33); m5.add(m54); m6.add(m61); m6.addSeparator(); m6.add(m62); mb.add(m1); mb.add(m2); mb.add(m3); mb.add(m5); mb.add(m6); this.setJMenuBar(mb); /设置菜单栏setVisible(true);pack();show();this.addWindowListener(new xxx(this);/构造函数结束/事件处理/public void actionPerformed(ActionEvent p)if(p.getActionCommand()=新建 ) /响应菜单及工具栏事件 fname=null; /置文件名为空,便于判断文件是否保存过txt1.setText();state.setText( 我的java编辑器-未命名文档);if(p.getActionCommand()=打开 )try if(this.choose.APPROVE_OPTION=this.choose.showOpenDialog(this) path=this.choose.getSelectedFile().getPath(); fname=this.choose.getSelectedFile().getName();File file=new File(path);int flength=(int)file.length(); FileReader fReader=new FileReader(file); char data=new charflength; fReader.read(data,0,flength); txt1.setText(new String(data); state.setText( 我的java编辑器-+path+ 共+flength+字节);/状态栏统计文件字节数txt1.setCaretPosition(0);catch(IOException e)if(p.getActionCommand()=保存 )if(fname=null) /如果文件名为空,说明文件未被创建,弹出另存为对话框 othersave(); try File savefile=new File(path);savefile.createNewFile(); FileWriter fw=new FileWriter(savefile); fw.write(txt1.getText(); fw.close(); catch(IOException e)if(p.getActionCommand()=另保存为 )othersave();if(p.getActionCommand()=退出 )exit();/编辑/if(p.getActionCommand()=复制 ) txt1.copy(); if(p.getActionCommand()=剪切 ) txt1.cut(); if(p.getActionCommand()=粘贴 ) txt1.paste(); if(p.getActionCommand()=删除 ) txt1.replaceSelection();/if(p.getActionCommand()=查找 ) / 创建查找对话框;find=new Dialog(this,查找);JPanel p1=new JPanel();JPanel p2=new JPanel();findtxt=new JTextField(7);p1.add(new JLabel(输入要查找字符:);p1.add(findtxt);p2.add(findenter);find.add(Center,p1);find.add(South,p2);find.setSize(200,200);find.show();if(p.getSource()=findenter) /点击查找对话框的确定按钮后的事件处理if(findtxt.getText().equals() find.dispose();else if(!findtxt.getText().equals() find.dispose();str=txt1.getText();startp=str.indexOf(findtxt.getText();endp=startp+findtxt.getText().length();txt1.select(startp,endp);m26.setEnabled(true);newendp=endp;/获取这次查找的终点notfindmethod();/if(p.getActionCommand()=查找下一个 )nexttemp=newendp; /获取上次查找的终点做为未查找字符串的起点String strall=txt1.getText();txt1.select(nexttemp,strall.length(); /选中所有未查找的字符串strnext=txt1.getSelectedText();newstartp=strnext.indexOf(findtxt.getText()+nexttemp;/在未查找的字符串里搜索对应字符的在TXT1中的位置newendp=newstartp+findtxt.getText().length();txt1.select(newstartp,newendp); /找到相应文本,并选择notfindmethod();/if(p.getActionCommand()=替换 )m271.setEnabled(true);replace=new Dialog(this,替换); / 创建替换对话框;JPanel p1=new JPanel();JPanel p2=new JPanel();JPanel p3=new JPanel();findtxt=new JTextField(7);repltxt=new JTextField(7);p1.add(new JLabel(输入原始字符:);p1.add(findtxt);p2.add(new JLabel(输入替换字符:);p2.add(repltxt);p3.add(replb);replace.add(North,p1);replace.add(Center,p2);replace.add(South,p3);replace.setSize(200,150);replace.show();if(p.getSource()=replb) /点击替换对话框的确定按钮后的事件处理replace.dispose();str=txt1.getText();startp=str.indexOf(findtxt.getText();endp=startp+findtxt.getText().length();txt1.select(startp,endp);txt1.replaceSelection(repltxt.getText();/*txt1.replaceRange(repltxt.getText(),startp,endp);*/newendp=endp; /获取这次替换的终点/if(p.getActionCommand()=替换下一个)nexttemp=newendp; /获取上次查找的终点做为未查找字符串的起点String strall=txt1.getText();txt1.select(nexttemp,strall.length(); /选中所有未查找的字符串strnext=txt1.getSelectedText();newstartp=strnext.indexOf(findtxt.getText()+nexttemp;/在未查找的字符串里搜索对应字符的在TXT1中的位置newendp=newstartp+findtxt.getText().length();txt1.select(newstartp,newendp); notfindmethod();txt1.replaceSelection(repltxt.getText();/*txt1.replaceRange(repltxt.getText(),newstartp,newendp);/替换字符*/if(p.getActionCommand()=全选 )txt1.selectAll(); if(p.getActionCommand()=日期/时间 ) /用DATE类插入当前日期/时间,编译时会出现说明txt1.setText(txt1.getText()+Calendar.getInstance().getTime().toString();/格式/if(p.getSource()=font)/字体 new MyFont(); if(p.getActionCommand()=字体颜色 ) /字体颜色JColorChooser jColor=new JColorChooser(); /调用颜色面板,设置前景就可更改字体颜色Color fcolor=txt1.getForeground(); txt1.setForeground( jColor.showDialog(txt1,选择字体颜色,fcolor);normalStyle = (StyledDocument) txt1.getDocument().addStyle(Keyword_Style, null);StyleConstants.setForeground(normalStyle, fcolor);/试图风格/if(p.getActionCommand()=状态栏 ) /状态栏的隐藏和显视state.setVisible( !(state.isVisible() );/帮助/if(p.getActionCommand()=帮助主题 )myhelp help=new myhelp();help.setSize(200,240);if(p.getActionCommand()=关于 ) JLabel prompt=new JLabel(欢迎使用我的JAVA编辑器,JLabel.CENTER);JOptionPane.showMessageDialog(null,prompt,关于我的JAVA编辑器,JOptionPane.INFORMATION_MESSAGE);public void othersave() /另存为方法if(choose.APPROVE_OPTION=choose.showSaveDialog(this) path=choose.getSelectedFile().getPath(); newfiles=new File(path);state.setText( 我的java编辑器-+path);fname=choose.getSelectedFile().getName();try newfiles=new File(path);newfiles.createNewFile();FileWriter fw=new FileWriter(newfiles); fw.write(txt1.getText(); fw.close(); catch(IOException e)public void notfindmethod() /提示查找不到的方法notfindmethodif(!txt1.getSelectedText().equals(findtxt.getText() txt1.setCaretPosition(0); /光标返回文件头部JOptionPane.showMessageDialog(null,查找不到对应的字符!,查找错误,JOptionPane.ERROR_MESSAGE);m26.setEnabled(false); public void exit() int value;String qq=返回, 退出;value=JOptionPane.showOptionDialog(null, 你确定退出吗?请注意保存文件!, 退出程序?, JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE,null, qq, qq0);if(value=JOptionPane.YES_OPTION)return;else if(value=JOptionPane.NO_OPTION) System.exit(0); public class MyFont implements ActionListener final JDialog fontDialog; final JTextField tfFont, tfSize, tfStyle; final int fontStyleConst = Font.PLAIN, Font.BOLD, Font.ITALIC, Font.BOLD + Font.ITALIC ; final JList listStyle, listFont, listSize; JLabel sample; JPanel pane1, pane2, pane3, pane4;/ 构造函数MyFont public MyFont() fontDialog = new JDialog(myfr.this, 字体设置, true); Container con = fontDialog.getContentPane(); con.setLayout(new BoxLayout(con, BoxLayout.Y_AXIS); pane1 = new JPanel(); pane2 = new JPanel(); pane3 = new JPanel(); pane4 = new JPanel(); Font currentFont = txt1.getFont(); JLabel lblFont = new JLabel(字体(F):); JLabel lblStyle = new JLabel(字形(Y):); JLabel lblSize = new JLabel(大小(S):); lblStyle.setHorizontalAlignment(SwingConstants.CENTER); lblSize.setHorizontalAlignment(SwingConstants.CENTER); lblFont.setPreferredSize(new Dimension(91, 20); lblStyle.setPreferredSize(new Dimension(82, 20); lblSize.setPreferredSize(new Dimension(100, 20); tfFont = new JTextField(10); tfFont.setText(currentFont.getFontName(); tfFont.selectAll(); tfFont.setPreferredSize(new Dimension(200, 20); tfStyle = new JTextField(8); if (currentFont.getStyle() = Font.PLAIN) tfStyle.setText(常规); else if (currentFont.getStyle() = Font.BOLD) tfStyle.setText(粗体); else if (currentFont.getStyle() = Font.ITALIC) tfStyle.setText(斜体); else if (currentFont.getStyle() = (Font.BOLD + Font.ITALIC) tfStyle.setText(粗斜体); tfFont.selectAll(); tfStyle.setPreferredSize(new Dimension(200, 20); tfSize = new JTextField(7); tfSize.setText(currentFont.getSize() + );

温馨提示

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

评论

0/150

提交评论