毕业论文_在线编译器.doc_第1页
毕业论文_在线编译器.doc_第2页
毕业论文_在线编译器.doc_第3页
毕业论文_在线编译器.doc_第4页
毕业论文_在线编译器.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

081002410410722学校代码学号分类号公 开密级 题目 C语言在线编译器Online C Complier 胡泽江作者姓名 软件工程专业名称 工 学学科门类 宋笑雪指导教师提交论文日期成绩评定等级III摘要C语言在1970年由丹尼斯.里奇研制出来后发展至今,以它高效、灵活、功能丰富、表达力强和较高的移植性等特点,广泛用于系统与应用软件的开发,2012年反超Java重登宝座,在程序员中说起Hello World,可能就想起C语言了,同时在计算机二级考试中,也有C语言的科目,所以在学习C语言的人当中不仅仅是程序员,还有很大一部分是对计算机知识,特别是编程语言了解相对较少的学生和社会人群。因此,需要一个相对简易,易理解的C语言编译和学习环境提供给这种人群。本论文研究的是C语言在线编译器,包含了C语言的编译器,加入了C语言的学习资料,示例代码,供初学者使用。系统架构是基于B/S的系统,在前端使用了JS,JQUERY,AJAX,CSS,HTML作为布局和业务逻辑,由于C语言在线编译器的特殊性,前端技术也承担了一部分的C语言编译的技术,大量使用了正则表达式,来操作C语言代码字符。后台使用JAVA语言开发,使用LL1算法,词法分析来完成C语言的语法分析,应用struts机制和页面交互,后台主要用于代码编译、错误提示,前端主要用于代码执行。论文主要介绍了本课题的开发背景、所完成的功能和以及具体的开发过程。关键词:C语言;编译器;LL1算法;正则表达式 AbstractC language developed by Dennis Ritchie in 1970, development has to express thecharacteristics of strong and high portability, efficient, flexible, feature-rich, widelyused for system and application software development, 2012overtake re-board the throne of Java programmers talk about the Hello World may think of the C language, while in the computer two examinations, but also the subjects of the C language, not just in learning the C language programmers.there are a large part of computerknowledge, especially a programming language is understood that a relatively small number of students and social groups. Therefore, we need a relatively simple, easy to understand the C language compiler and learning environment available to thispopulation. This thesis is a C Language Compiler, contains a C language compiler, adding aC-language learning materials, sample code, for beginners to use. The system architecture is based on B / S system, the front end of the JS, JQUERY, AJAX,CSS, the HTML layout and Business logic, due to the special nature of the C Language compiler front-end technology also bear part of the C language compiler technology to achieve, The use of regular expression, operation of the C language code characters.Background using the JAVA language development, Use LL1 algorithm, lexical analysis to complete C language syntax analysis application struts mechanismsinteract and page background is mainly used for code compilation error, the front-end for code execution. The paper introduces the development background of thesubject, the complete function and the specific development process. Keywords: C Language; complier; LL1 Algorithm, Regular expressions目录摘要IAbstractII第一章 概 述11.1 C在线编译器的定义11.2 web应用价值11.3 C在线编译器意义11.4 开发技术1第二章 需求分析32.1 可行性研究32.1.1 技术可行性32.1.2 经济可行性32.2 系统的功能要求32.3 系统的性能要求42.3.1可靠性要求42.3.2时间要求42.3.3并发处理能力要求4第三章 关键技术53.1 Ajax概述53.2 Servlet概述53.3 Jquery概述53.4 正则表达式63.5 LL1算法63.6 编译器6第四章 概要设计84.1系统总体结构84.2代码编辑模块84.3代码分析器模块9第五章 详细设计与实现105.1代码编辑模块105.1.1 页面设计105.2 类设计105.2.1 代码分析器类图115.3代码生成器模块和代码执行模块13第六章 系统测试156.1 测试方法156.2 测试用例156.3 测试结果16总结17致谢18参考文献19C语言在线编译器第一章 概 述1.1 C在线编译器的定义C语言是众多编程语言中的姣姣者,每年都有很多高校学生以及一部分社会人群在学习C语言,但是传统的虽然功能强大,但是相对复杂,并且C语言本身也相对较难1,对于刚入门的新手,会有一定的心里压力,同时随着互联网的普及,许多互联网应用都给我们带来了极大的便利,结合互联网和传统的C语言编译器,就产生了有特色的C语言在线编译器,只要能上网,不需要安装任何的编译环境和软件就能够写C语言程序,编译C语言程序,执行C语言程序,同时也提供了大量的C语言学习资料以及示例代码,让C语言初学者们能够轻松简单快乐的学习C语言。 1.2 web应用价值传统应用指的是仅仅能运行在pc上的,单用户操作的应用,例如我们每天都会接触的Office软件,他们功能强大,但是仅仅只能应用在PC机上,无法和别人共享,在使用他们之前,你必须安装对应的软件,他会占用你一定的硬盘空间和内存,即有一定的消耗。但是如果将传统的应用换成互联网应用2,那么它所产生的消耗就少得多,你仅仅需要能上网,就能够使用,而且随着web技术的发展,新技术的成熟,比如Html5,互联网应用所产生的用户体验也完全不亚于传统的应用,在功能上也能够接近传统应用。所以,将一切的传统应用转换成互联网应用都是合适的,甚至是您的操作系统,在互联网应用上的更高一层就是云,这也是今后云计算,云存储的发展方向。1.3 C在线编译器意义C语言在线编译器,不需要安装任何的编译环境和软件就能够写C语言程序,编译C语言程序,执行C语言程序。用户能够快速的开始编写C语言程序3,不需要承担传统编译器所带来的内存消耗和硬盘存储空间的消耗,同时C语言在线编译器集学习和编写代码为一体,边学习边实践是最好的学习方式,同时,用户可以到任何一个可以上网的PC上编写代码,学习C语言,不需要费时去安装和配置传统的编译环境。1.4 开发技术本系统是严格的按照“软件工程”的思想和开发流程进行的4,采用B/S架构5,前端使用Ajax、jquery,html、css将页面显示和页面逻辑处理和页面数据剥离开来,结合Javascript,给予了页面动态效果6,增强了用户体验。后台分为逻辑处理模块和前端交互模块,把业务逻辑和数据交互拆分开来,便于后期的维护。在软件工程开发思想的指导下,使用了最优秀的开发工具Intellij,使用SeverLet和Ajax技术7,采用Tomcat7.0作为Web服务器。19第二章 需求分析根据调查显示至今年四月份开始至今,C语言是世界上使用的最多的语言,C语言如此受欢迎已经能够足够说明C语言本身的优点吸引着开发人员去使用它,也使广大人群去学习它,同时在计算机二级考试中,也有C语言的科目。学习总是需要和实践相结合,在学习C语言过程中需要大量的代码编写,这就需要一个对于新手来说简单、方便的编译器,来为学习C语言的人群减轻学习压力,但是如今在PC上运行的C语言编译器大多数比较复杂,C语言学习者还需要花心思去熟悉C语言编译环境。在学习C语言的人当中不仅仅是程序员,还有很大一部分是对计算机知识了解相对薄弱的学生和社会人群。同时,这类人群的学习环境复杂,并不是每个人都拥有PC,他们可能去网吧,朋友家去练习,而且各个操作系统也存在差异,这样传统编译器就带来了些麻烦,因为到一个新的环境去学习,你就可能需要下载安装软件,而这个是一个相对耗费时间和精力的过程。因此,脱离系统环境的的C语言编译环境提供给这类人群。2.1 可行性研究2.1.1 技术可行性 在大学,学习了Java8、Web、编译原理等关键性的技术9,为我之后的学习和写这个系统打下了坚实的基础,同时这些技术也实际应用过,增加了我能够写好这个系统的信心。这些技术已经相当成熟,遇见的问题可以通过技术资料、搜索引擎解决。大学也培养了我的自学能力,对于陌生的知识能够较快的接受和理解,并将他们投入实战应用。学校学习了软件工程、软件需求与分析等课程,加上在公司实习积累的经验,使得我能够做好需求分析,架构设计等工作,为编写软件打下了基础6。2.1.2 经济可行性经济可行性主要是从对项目的经济上进行分析评价的,一方面是支出的费用,包括编写这个系统的成本,以及后期系统上线后需要服务器等硬件支持和网站维护的花费,另一个是取得的收益,在网站积累用户后,可以和C语言培训机构合作,加入培训机构的广告来获取广告费用。2.2 系统的功能要求C语言编译器要实现C语言语法检验功能、C语言代码转换功能、运行结果功能、C语言在线学习功能。其具体功能模块如下: 1. C语言语法检验模块:通过该模块可以对用户编写的C语言进行代码扫描,检验C语言程序语法错误。2. C语言代码转换模块:通过该模块可以实现将C语言代码转换为JS代码。3. 运行结果模块:通过该模块可以实现将由C语言代码转换过来的JS代码运行输出结果。4. C语言在线学习模块:通过该模块提供C语言学习资料以及示例代码,供用户学习8。2.3 系统的性能要求2.3.1可靠性要求系统没有后台数据库,不需要考虑后台数据的完整性以及数据安全,同时系统大量的功能实现是由Javascript去完成的,以及使用了Ajax技术,减少了页面和后台的访问,减少了恶意的Doc攻击,也使得系统可以接受庞大的用户同时访问。2.3.2时间要求在不考虑网络状况的情况下,系统响应时间应较迅速,一般控制在0.1秒以内。2.3.3并发处理能力要求系统能够支持同时间多用户的访问要求,并且保证运行的顺畅。第三章 关键技术3.1 Ajax概述传统的Web应用允许用户端填写表单(form),当送出表单时就向Web服务器发送一个请求。服务器接收并处理传来的表单,然后送回一个新的网页,但这个做法浪费了许多带宽,因为在前后两个页面中的大部分HTML代码基本上是相同的。由于每次应用的沟通都需要向服务器发送请求,应用的回应时间就依赖于服务器的回应时间。这导致了用户界面的回应比本机应用慢得多。与此不同,AJAX应用可以仅向服务器发送并取回必需的数据,它使用SOAP或其它一些基于XML的页面服务接口(接口),并在客户端采用JavaScript处理来自服务器的回应。因为在服务器和浏览器之间交换的数据大量减少(大约只有原来的5%),结果我们就能看到回应(服务器回应)更快的应用(结果)。同时很多的处理工作可以在发出请求的客户端机器上完成,所以Web服务器的处理时间也减少了。3.2 Servlet概述Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。 Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。3.3 Jquery概述jQuery是一个跨浏览器的JavaScript库的设计,简化了客户端脚本的HTML。简单的说jQuery是使用最流行的JavaScript库。jQuery是开源码软件, jQuery的语法专门设计,以使它更容易来浏览一个文档,选择DOM元素,创建动画,处理事件,开发Ajax应用程序。jQuery还提供了插件开发创造能力的JavaScript库。这使开发人员能够创建抽象为低层次的互动和动画,先进的特效和高层次,主题能够部件。jQuery库的模块化方法允许创建强大的动态网页和Web应用程序。微软和诺基亚宣布其平台上捆绑jQuery的,微软采用它最早在ASP.NET AJAX框架和ASP.NET MVC框架,而诺基亚已经融入他们的Web运行时构件开发平台。3.4 正则表达式正则表达式(Regular Expression、regex或regexp,缩写为RE),也译为正规表示法、常规表示法,在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎12。3.5 LL1算法LL(1)是预测分析器,第一个L代表扫描模式是自左向右的,第二个L代表分析模式是最左推导。至于括号中的1代表在分析中最多向前看一个输入字符。LL(1)的组成包括总控程序,分析栈和分析表,其中分析表是LL(1)分析器的核心。First集合以及后面讲到的Follow集合都与分析表有关。分析栈:存放分析过程中的文法符号(待匹配和已经推导的串)。分析表:判断当前用那条文法进行推导总控程序:做大的调度工作关于LL(1)文法的性质如下:任何LL(1)文法是无二义性的。若一文法中的非终结符含有左递归,则它必然是非LL(1)文法。非LL(1)语言是存在的。存在一种算法,它能判定任一文法是否为LL(1)文法。存在一种算法,它能判定任意两个LL(1)文法是否产生相同的语言。不存在这样的算法,它能判定上下文无关语言能否由LL(1)文法产生。3.6 编译器编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。编译器是将一种语言翻译为另一种语言的计算机程序。编译器将源程序(source language) 编写的程序作为输入,而产生用目标语言(target language )编写的等价程序。编译器编译程序的流程:1. 扫描程序(scanner)在这个阶段编译器阅读源程序(通常以析程序字符流的形式表示)。2. 语法分析程序(parser )语法分析程序从扫描程序中获取记号形式的源代码,并完成定义程序结构的语法分析 (syntax analysis ),这与自然语言中句子的语法分析类似。语法分析定义了程序的结构元素及其关系。通常将语法分析的结果表示为分析树(parse tree)或语法树(syntax tree)13。3. 语义分析程序(semantic analyzer )程序的语义就是它的“意思”,它与语法或结构不同。程序的语义确定程序的运行,但是大多数的程序设计语言都具有在执行之前被确定而不易由语法表示和由分析程序分析的特征。4. 代码生成器(code generator)5. 代码生成器得到中间代码(IR),并生成目标机器的代码第四章 概要设计4.1系统总体结构系统从纵向上分为两层,即前端和后台,前端处理数据显示,以及部分的业务逻辑,包括代码的初步审查、代码生成、代码执行,后台主要负责代码分析的业务逻辑,前端和后台通过Ajax结合Severlet来进行数据通讯。系统的框架如图4.1所示。4.2代码编辑模块代码编辑模块主要用于得到用户输入的代码,并对用户输入关键字提示,其工作流程如图3.2所示。4.3代码分析器模块代码分析模块主要处理从前台传递过来的代码,对代码进行词法分析和语法分析,判断用户的代码的正确性,如果用户输入的代码有误,能够识别出错误的位置,并将错误信息返回给前台,其工作流程如图3.3所示4.4代码生成器模块和代码执行模块代码生成模块主要处理编译通过的代码,利用正则表达式将原来的C语言代码转换成Javascript代码并将生成的javascript代码推送到页面,让浏览器去执行,将结果显示在页面上,其工作流程如图3.4所示浏览器javascript代码C语言代码代码转换器执行显示页面图4.4 代码生成和代码执行工作流程C语言在线编译器第五章 详细设计与实现5.1代码编辑模块代码编辑模块主要用于得到用户输入的代码,并对用户输入关键字提示。5.1.1 页面设计1.使用Div实现TextArea在代码编辑模块中,是使用了Div元素来模拟TextArea,因为TextArea中的内容只允许是文字,同时,对文字的字体和颜色的设置会应用到整个TextArea中的文字内容,不能对局部调整,但是我的需求是希望能对代码中的关键字进行高亮显示,并改变颜色,所以TextArea不能够满足我的需求。在Div中我可以任意插入Html元素,同时也可以是用CSS样式调整,使得Div的外观和TextArea差不多,甚至比TextArea更加美观14,多以就选择了Div。2.页面大小有限,而且页面中还有其他很多元素,例如标题,结果显示模块等,如何,然而用户编写的代码量是不确定的,如何能够满足用户能够编写任意量的代码?在页面中使用分页,用户在本页编辑满了后,可以点击下一页继续编辑,同时系统保证页面不跳转,代码不丢失,用户可以编写任意长度的代码,上下翻页非常方便,在编辑也下方显示当前页页码,可以让用户随时了解当前所在的位置。5.2 类设计对用户输入的代码进行初步的判断,提示用户是否输入了关键字,以及出入关键字的准确性,并将关键字高亮显示15,显示蓝色,显示1秒后,删除包装关键字的标签,然后重新组装上关键字。关键字定义:keyWord=printf,print,int,float,double,bool,void,long,switch,caseelse,struct,enum,return,short,const,typedef,extern,continue,while,do,default,for,static,if;判断是否是关键字function isKeyWord(n) 获取最后当前编辑代码块的一个单词(依照用户敲入空格为准)function getLastWord(n) return lastword;将最后关键字裁减掉function cutLastWord(n) 改变关键字的颜色function dealKeyWordColor() 删除已经呗改变颜色的关键字,然后补上正常的关键字function removeKeyword() 用于将字体设置成原来的样式function resetWord(n) return word;包装keyword,使得代码符合Html执行的要求function packKeyWord(keyword) return word;从文本中找出所有的单词function getWordList(code1) 5.2.1 代码分析器类图代码分析器主要由词法分析器和语法分析器构成,其类图结构如图5.1所示。图5.1 后台处理逻辑类图代码预处理:由功能类CodeAnalyser构成,CodeAnalyser类图如图5.2所示。图5.2 CodeAnalyser类图该类索引传入的C语言代码,并将找到的字符进行分类处理letterProcessor()用于处理字符为字母的情况digitProcessor()用于处理字符为数字的情况otherProcessor()用于处理字符为特殊字符的情况analyse调用上述的方法,分析取得的字符,重构C语言代码。词法分析:由功能类WordAnalyser构成,WordAnalyser类图如图5.3所示。图5.3 WordAnalyser类图isKeyWord()用于判断是否为关键字isOperator()用于判断是否为操作符isDelimit()用于判断是否为界符andlyse()调用上述三个函数,从UserCollection提取定义好的字符,来进行比较判断,并进行处理。语法分析器:由功能了LL1Module构成,LL1Module类图如图5.4所示图5.4 LL1Module类图LL1()中使用LL1算法进行语法分析,自定义栈来存储文法,并对输入字符串进行匹配扫描,来判断合法性。四元式:由功能类FourYuanStyle构成,用于分析四元式,处理C语言的语法,FourYuanStyle类图如图5.5所示、图5.5 FourYuanStyle类图fourYuanStyle()初始化四元式,四元式的定义在SYS类中getFourYuan()获取已经初始化完成的四元式数组analyse()分析code,拆分出可构的四元式,并存入静态的四元式数组中,被用于CodeProcessor类5.3代码生成器模块和代码执行模块代码生成模块主要处理编译通过的代码,利用正则表达式将原来的C语言代码转换成Javascript代码并将生成的javascript代码推送到页面16,让浏览器去执行,将结果显示在页面上。如图5.6.替换变量类型删除结尾标识($)删除函数头C语言代码Javascript语言代码处理输出printf图5.6 代码生成流程图代码转换器:使用CtoJava.js来完成这个功能模块参与的函数如下:删除原C代码的函数头function deleteMain(code) return code;/删除指删除指定索引处的字符function deleteIndex(code, position) return code;查找到在code中指定字符的最后一个的位置function findLastChar(code, char) return position;处理printf串,转换成可以被Javascript的代码function deal_printf(code) return code;function replacePrintf(position, length, codeTemp1) 生成Javascript写到页面的输出语句function getPrintfString(printf_position) return null;对输出语句进行转换function printfProcess(printf_position) 生成js 写入homepagefunction makeJavaJs(code) 第六章 系统测试6.1 测试方法在编写代码分析模块时,进行了大量的单元测试,检验代码分析的可靠性,以及是否能够提示正确的错误信息,后期和前端页面结合是进行了集成测试,保证数据在前端和后台之间传递的完整性17,把单元测试穿插在编码过程中进行并及时改正了所发现的错误18,在系统完成进行验收测试时,选择可具有代表性的C语言代码对系统功能进行测试,验证C语言在线编译器是否达到开发目标。6.2 测试用例根据用例测试的目的是在系统测试过程中,验证系统各个功能是否可以完成预期目标,以及在测试中出现错误时如何改正以达到其拟定功能。对代码编译模块的测试:以下对给出系统的功能的测试用例。1. 输入错误C语言代码#include”studio.h”int main()int a=10;int c,d,b=10; int x,y; if(ac)a=c+d+y; a=b; x=y-b; else /此处少了一个“” a=c; while(ac) a=c; printf(a的值为:);printf(%d,a);$页面执行结果:编译失败,在第9行出现错误2. 输入正确C语言代码#include”studio.h”int main()int a=10;int c,d,b=10; int x,y; if(ac)a=c+d+y; a=b; x=y-b; else a=c; while(ac) a=c; printf(a的值为:);printf(%d,a);$页面执行结果:编译通过,结果:a的值为:10对C语言学习模块的测试:点击C语言学习的各个章节,能够成功跳转到相应的学习内容。点击C语言示例代码,能够显示各个示例代码6.3 测试结果通过C语言在线编译器各种功能的测试,该系统基本达到了开发之初所拟定的目标,实现了C语言在线编译器的预期功能。总结在大学的四年中,有很多自己想去实践的东西,但是在技术上遇见很多问题,所以总是不能够实现自己的想法,随着各种相关的课程的开放,自己的自学能力的提高,渐渐的相信自己的实力,只要肯去钻研,就能够解决所有的问题。本次毕业设计是对大学四年学过的“c+程序设计语言“、“Java程序设计语言”、“Web编程技术”、“数据库原理”、“软件工程”、“软件测试”等课程的一个具体实践,是一个理论结合实践的过程,也是对自己自学能力的一个肯定。作为一项毕业设计的任务,C语言在线编译器的设计与实现目标是实现一个在浏览器上运行的C语言编译器。在设计与开发的过程中,我充分利用所学知识,遇见不懂的技术就去学习,遇见问题就百度、谷歌解决,将理论联系实践,使自己对所学的知识有一个更深刻的理解,并为以后的实际工作积累了实践经验。由于时间仓促和技术所限,该系统存在一些不足之处,有待进一步改进和完善。本次的毕业设计,也是对自己大学四年的学习的一个总结和检验。设计之初,进行需求分析,搜集了大量的素材,来判断C语言在线编译器的可行性。在前期工作完成之后,各种C语言本地编译环境进行了研究,使得之后的C语言在线编译器能够尽量满足C语言入门学者的需求。设计阶段,写代码,调程序,反反复复出现问题。在这期间我学会了很多,也得到了许多宝贵的经验。我切实体会到了在软件系统开发过程中,最重要也最困难的工作就是需求分析,需求分析是系统开发能否取得成功的关键。而对于整个开发过程,需要合理的进度安排和很好的逻辑协调能力,这种解决问题的能力锻炼和思考问题的模式都使我受益匪浅,相信从本次的毕业设计中体会到的会影响我今后的程序员生涯。致谢本次毕业设计,首先要感谢我的指导老师宋笑雪老师,宋笑雪对本次毕业设计给与了很大的帮助,并为具体开发以及论文的书写提出了许多宝贵意见,她严谨仔细的治学态度深深的影响了我,在此对宋笑雪的帮助表示衷心的感谢!此外还要感谢在本次毕业设计中帮助过我的同学们,没有老师及同学的帮助和指导是不可能顺利完成本次的设计任务的。感谢信息工程学院的领导以及老师为我们创造的良好的学习环境。C语言在线编译器参考文献1 徐宝文 郑国良程序设计语言发展回顾与展望N.计算机世界报 1995.13.2 姚慧广,赵岳松.Web编程中MVC模型的应用J.微机发展,2002,12(3):910.3 汪松松 基于在线服务模式的程序编译平台

温馨提示

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

评论

0/150

提交评论