[JAVA毕业论文]Struts2.0开发都市供求信息网.doc

上传人:仙人指路1688 文档编号:2387251 上传时间:2023-02-17 格式:DOC 页数:43 大小:1.05MB
返回 下载 相关 举报
[JAVA毕业论文]Struts2.0开发都市供求信息网.doc_第1页
第1页 / 共43页
[JAVA毕业论文]Struts2.0开发都市供求信息网.doc_第2页
第2页 / 共43页
[JAVA毕业论文]Struts2.0开发都市供求信息网.doc_第3页
第3页 / 共43页
[JAVA毕业论文]Struts2.0开发都市供求信息网.doc_第4页
第4页 / 共43页
[JAVA毕业论文]Struts2.0开发都市供求信息网.doc_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《[JAVA毕业论文]Struts2.0开发都市供求信息网.doc》由会员分享,可在线阅读,更多相关《[JAVA毕业论文]Struts2.0开发都市供求信息网.doc(43页珍藏版)》请在三一办公上搜索。

1、引言都市供求信息网是某公司一个开发项目,网站性质为信息服务类型,可为信息发布者有偿与无偿提供招聘、求职、培训、房屋和出售等信息。为实现网络资源的合理利用,结合国内互联网发展现状,通过对网络各类信息的整合分类与发布,实现不同人群对不同信息的需求。提升网络资源的利用率,对城市各类公司企业信息进行合理分配,实现网络资源利用率的最大化。第一章 网站概述1.1 国内外研究现状九十年代迅速发展和普及的个人计算机及计算机网络技术将人类带入了信息时代。各行业的信息化工作是适应时代要求的迫切任务。信息化的含义比较广泛,至少要包括知识信息的生产、信息的传播和扩散及反馈等过程。计算机网络技术的发展为迅速、便捷的信息

2、传播、扩散提供了有效实用的工具,也正是因为计算机网络技术的发展提供了这样的工具,才使人类进入了信息化时代, 同时也带动了都市信息化的建设进程。虽然不能说信息化等同于计算机网络技术,但利用网络技术进行知识信息传播是信息化工作的一项重要内容。目前, 国内信息供求网站发展比较迅速, 国内比较有名阿里巴巴, 淘宝网等。但是国内大多数信息供求网站尚有不足之处, 例如网站信息量不够充实,网站安全性和真实性尚待加强,服务体系不够完善等。相对与国内信息供求网站,国外信息供求网站发展较早,相对国内来说较为成熟, 各类信息供求网站众多且功能体系和服务体系较为完善, 例如韩国外经贸部直属KTNET(株)是EC Pl

3、aza的母公司,KTNET自1990年成立以来,一直从事提供贸易相关的EDI (电子数据交换系统)和商业信息技术服务,是世界最为成功的B2B、B2G公司之一,现在从原有的以VAN为基础的服务成长为以因特网为基础的网上贸易基础结构提供商,网址为。 印度的INDIAMARK, 网址为。1.2 本系统的特点本系统采用了Struts2.0框架,比以往的Struts1.0有很多优点,首先Struts1的Action类依赖与Servlet API,从其execute的方法签名可看出,execute方法有两个Servlet的参数HttpServletRequest和HttpServletResponse,S

4、truts2则不依赖于Servlet API,所以该系统易于修改。再者,Struts2.0的验证机制较为完善,从而可以使用户界面设计更加人性化。第二章 技术方法2.1 开发环境介绍2.1.1集成开发环境:Eclipse2001 年11 月 IBM 宣布捐出了价值 4 千万美金的开发软件给开放源码的 Eclipse 项目。Eclipse 是替代IBM Visual Age for Java(以下简称IVJ)的下一代IDE开发环境,但它未来的目标不仅仅是成为专门开发Java程序的IDE环境,根据Eclipse的体系结构,通过开发插件,它能扩展到任何语言的开发,甚至能成为图片绘制的工具。目前,Ecl

5、ipse已经开始提供C语言开发的功能插件。更难能可贵的是,Eclipse是一个开放源代码的项目,任何人都可以下载Eclipse的源代码,并且在此基础上开发自己的功能插件。也就是说未来只要有人需要,就会有建立在Eclipse之上的COBOL,Perl,Python等语言的开发插件出现。同时可以通过开发新的插件扩展现有插件的功能,比如在现有的Java开发环境中加入Tomcat服务器插件。可以无限扩展,而且有着统一的外观,操作和系统资源管理,这也正是Eclipse的潜力所在。 虽然目前Eclipse项目还没有最后完成,但从已有的版本中已经能领略到Eclipse设计主导思想和主要功能特点。现在就了解E

6、clipse不但能使广大程序员对这款业界期望很高的IDE能一睹为快,更为重要的是如果能参加到Eclipse项目的开发中或是阅读它的开放源代码,这对广大程序员来说无疑是一个千载难逢的提高编程水平的好机会。Eclipse计划提供多个平台的版本,像Windows,Linux,Solaris,HP-UX和AIX,以下只介绍Windows版本。2.1.2 Web应用服务器:TomcatTomcat服务器是一个免费的开放源代码的Web应用服务器,它是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人

7、共同开发而成。由于有了Sun的参与和支持,最新的Servlet和JSP规范总是能在Tomcat中得到体现,Tomcat5支持最新的Servlet 2.4和JSP 2.0规范。因为Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。Tomcat服务器接受客户请求并做出响应的图例,如图2-1所示:图2-1 Tomcat服务器接受客户请求并做出响应的过程 客户端(通常都是浏览器)访问Web服务器,发送HTPP请求。 Web服务器接收到请求后,传递给Servlet容器。 Servlet容器加载Servlet,产生Ser

8、vlet实例后,向其传递表示请求和响应的对象。 Servlet实例使用请求对象得到客户端的请求信息,然后进行相应的处理。 Servlet实例将处理结果通过响应对象发送回客户端,容器负责确保响应正确送出,同时将控制返回给Web服务器。2.1.3 数据库服务器:MySql MySQL是最受欢迎的开源SQL数据库管理系统,它由MySQL AB开发、发布和支持。MySQL AB是一家基于MySQL开发人员的商业公司,它是一家使用了一种成功的商业模式来结合开源价值和方法论的第二代开源公司。MySQL是MySQL AB的注册商标。MySQL是一个快速的、多线程、多用户和健壮的SQL数据库服务器。MySQL

9、服务器支持关键任务、重负载生产系统的使用,也可以将它嵌入到一个大配置(mass-deployed)的软件中去。2.2 开源框架介绍2.2.1 Struts2.0Struts 2.0是从Struts 1.0发展而来,但实际上Struts 2.0与Struts 1.0在框架的设计思想上面还是有很大的区别,Struts 2.0是以WebWork的设计思想为核心,因此,可以认为Struts 2.0是Struts 1.0和WebWork结合的产物。Struts2的简单处理流程如下:(1)浏览器发送请求(2)中心处理器根据Struts.xml文件查找对应的处理请求的Action类(3)WebWork的拦截

10、器链自动对请求应用通用功能,例如:WorkFlow、Validation等功能(4)如果Struts.xml文件中配置Method参数,则调用Method参数对应的Action类中的Method方法,否则调用通用的Execute方法来处理用户请求(5)将Action类中的对应方法返回的结果响应给浏览器2.3 开源技术介绍2.3.1 Ajax Ajax(Asynchronous JavaScript and XML)是结合了Java技术、XML以及JavaScript等编程技术,可以让开发人员构建基于Java技术的Web应用,并打破了使用页面重载的惯例。 Ajax是使用客户端脚本与Web服务器交

11、换数据的Web应用开发方法。这样,Web页面不用打断交互流程进行重新加裁,就可以动态地更新。使用Ajax,用户可以创建接近本地桌面应用的直接、高可用、更丰富、更动态的Web用户界面。 异步JavaScript和XML(AJAX)不是什么新技术,而是指这样一种方法:使用几种现有技术包括级联样式表(CSS)、JavaScript、XHTML、XML和可扩展样式语言转换(XSLT),开发外观及操作类似桌面软件的Web应用软件。实现Ajax的所有组件都已存在了许多年。2.4 设计模式介绍Java目前出现的这些框架而言,其最终目的都是为了解除耦合,而MVC解除的是View和Model间的耦合。MVC包含

12、三个基础部分:Model、View和Controller,即模型、视图和控制器,这三个部分以最小的耦合协同工作,以增加程序的可扩展性和可维护性。各个部分的实现技术可以总结如下:(1)Model:JavaBean、EJB的EntityBean模型(Model):就是业务流程/状态的处理以及业务规则的制定。业务流程的处理过程对其它层来说是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计是MVC最主要的核心。(2)View:JSP、Struts的TagLib视图(View)代表用户交互界面,对于Web应用来说,可以概括为HTML界面,但有可能为XHTML、XML和Applet。

13、随着应用的复杂性和规模性,界面的处理也变得具有挑战性。一个应用可能有很多不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务流程的处理。业务流程的处理交予模型(Model)处理。比如一个订单的视图只接受来自模型的数据并显示给用户,以及将用户界面的输入数据和请求传递给控制和模型。 (3)Controller:Struts的ActionServlet、Action控制(Control):用来接收和转发用户的交互信息,调用模型层进行相关的处理,将矗立的结果交给相应的视图显示给用户。2.5 J2EE简介2.4.1 J2EE的概念J2EE是一种利用

14、Java 2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。J2EE技术的基础就是核心Java平台或Java 2平台的标准版,J2EE不仅巩固了标准版中的许多优点,例如编写一次、随处运行的特性、方便存取数据库的JDBC API、CORBA技术以及能够在Internet应用中保护数据的安全模式等等,同时还提供了对 EJB(Enterprise JavaBeans)、Java Servlets API、JSP(Java Server PagES)以及XML技术的全面支持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。 J2EE体系结构提供中间层集成框架用来

15、满足无需太多费用而又需要高可用性、高可靠性以及可扩展性的应用的需求。通过提供统一的开发平台,J2EE降低了开发多层应用的费用和复杂性,同时提供对现有应用程序集成强有力支持,完全支持Enterprise JavaBeans,有良好的向导支持打包和部署应用,添加目录支持,增强了安全机制,提高了性能。2.4.2 J2EE的优点J2EE为搭建具有可伸缩性、灵活性、易维护性的商务系统提供了良好的机制,基于J2EE平台的产品几乎能够在任何操作系统和硬件配置上运行,现有的操作系统和硬件也能被保留使用。基于J2EE的应用程序不依赖任何特定操作系统、中间件、硬件。因此设计合理的基于J2EE的程序只需开发一次就可

16、部署到各种平台。一些J2EE部署在WINDOWS环境中,也可选择健壮性能更好的操作系统如Sun Solaris、IBM OS/390。最健壮的操作系统可达到99.999%的可用性或每年只需5分钟停机时间。这是实时性很强商业系统理想的选择。2.4.3 J2EE四层模型J2EE 的多层企业级应用模型将两层化模型中的不同层面切分成许多层。一个多层化应用能够为不同的每种服务提供一个独立的层,图2-2是 J2EE 典型的层结构:图2-22.6 与其他技术的比较2.6.1 ASP开发语言 ASP全名Active Server Pages,是一个WEB服务器端的开发环境,利用它可以产生和执行动态的、互动的、

17、高性能的WEB服务应用程序。ASP采用脚本语言VBScript(Java script)作为自己的开发语言,开发比较简单。ASP只能执行于微软的服务器产品,IIS(Internet Information Server),而且每次执行都要进行编译,所以性能比较低。而且ASP所有代码均写在页面中,表现与实现混合在一起,安全性差,只要得到页面,便能得到全部源码。2.6.2 PHP开发语言PHP是一种跨平台的服务器端的嵌入式脚本语言。它大量地借用C,Java和Perl语言的语法, 并耦合PHP自己的特性,使WEB开发者能够快速地写出动态产生页面。它支持目前绝大多数数据库。而且PHP是完全免费的。由于

18、PHP本身存在的一些缺点,使得它不适合应用于大型电子商务站点,而更适合一些小型的商业站点。首先,PHP缺乏规模支持。其次,缺乏多层结构支持。对于大负荷站点,解决方法只有一个:分布计算。数据库、应用逻辑层、表示逻辑层彼此分开,而且同层也可以根据流量分开,群组成二维数组。而PHP则缺乏这种支持。而且PHP提供的数据库接口支持不统一,这就使得它不适合运用在电子商务中。2.6.3 JSP开发语言JSP是Sun公司推出的新一代网站开发语言,JSP可以在Serverlet和JavaBean的支持下,完成功能强大的站点程序。JSP技术能够支持高度复杂的基于Web的应用。JSP页面的内置脚本语言基于Java程

19、序设计语言,所有的JSP页面都被编译成为Java Servlet,所以JSP页面就具有Java技术的所有好处,包括健壮的存储管理和安全性。作为Java平台的一部分,JSP拥有Java程序设计语言“一次编写,到处执行”的特点。JSP可以执行于所有平台。如Win NT,Linux,Unix。从一个平台移植到另外一个平台,JSP和JavaBean甚至不用重新编译,因为Java字节码都是标准的与平台无关的。对于脚本语言来讲,JSP虽然在开发和部署方面相对其他脚本语言来说要复杂一些,但对于跨平台的中大型网站系统来讲,基于JAVA技术的JSP(结合JavaBean和EJB)几乎成为唯一的选择。第三章 系统

20、分析3.1需求概述3.1.1 业务功能为用户提供信息服务,同时提高企业知名度。3.1.2 系统目标(1) 界面设计友好和美观。(2) 在首页中提供预览信息的功能,并且信息分类明确。(3) 用户能够方便地查看某类别中的所有信息和信息的详细内容。(4) 能够实现站内信息搜索,如定位查询、模糊查询。(5) 对用户输入的数据,能够进行严格的数据检验,并给予信息提示。(6) 具有操作方便和功能强大的后台信息审核功能。(7) 具有操作方便的后台付费设置功能。(8) 具有易维护性和易操作性。3.1.3 功能要求1. 前台主要实现信息显示,信息搜索,和信息发布.其中信息显示包括列表显示和详细显示;2. 后台主

21、要实现信息显示,信息删除与信息审核等功能模块。3.1.4系统功能结构都市供求信息网前台功能结构如图3-1所示:图3-1都市供求信息网后台功能如图3-2所示:图 3-1 业务流程迁移图3.2 业务流程分析图3-2第三章 概要设计4.1系统设计4.1.1表现层 由Jsp和Struts标签库实现,主要用于用户交互和处理结果展现给用户。4.1.2控制层 运用Struts2.0框架的ActionServlet和Action进行控制转发,主要作用是描述应用程序中的商业流程,调用相应的DAO进行结果控制。4.1.3 DAO层 运用传统的JDBC进行数据库增删改查的操作4.2数据库设计供求信息实体属性图如图4

22、-1所示:图4-1信息类别实体属性图如图4-2所示:图4-2管理员实体属性图如图4-3所示:图4-3数据库逻辑机构图如图4-4所示:图4-4表4-1 tb_info表结构Field NameField TypeSizeisKeywordAllowNullisAutoIncrementid int2YNYinfo_typeint2NYNinfo_titlevarchar80NYNinfo_contentvarchar1000NYNinfo_linkmanvarchar50NYNinfo_phonevarchar50NYNinfo_emailvarchar100NYNinfo_datedateti

23、me8NYNinfo_statevarchar1NYNinfo_payforvarchar1NYN表4-2 tb_type表结构Field NameField TypeSizeisKeywordAllowNullisAutoIncrementidint2YNYtype_signint2NYNtype_namevarchar20NYNtype_infovarchar20NYN表 4-3 tb_user表结构Field NameField TypeSizeisKeywordAllowNullisAutoIncrementidint2YNYuser_namevarchar20NYNuser_pass

24、wordvarchar10NYN第五章 系统详细设计5.1 struts2.0的配置5.1.1 Struts2.0文件的配置:将struts2.0标签库文件放入WEB-INF文件夹下,在web.xml文件中配置标签库,格式如下:web-app version=2.4 xmlns=xmlns:xsi=http:/www.w3.org/2001/XMLSchema-instancexsi:schemaLocation= struts2org.apache.struts2.dispatcher.FilterDispatcherstruts2/* org.springframework.web.con

25、text.ContextLoaderListener 5.1.2 struts2.0类库的配置:将struts2.0的类库文件放入WEB-INF下lib文件夹下,xwork-2.0.4.jar、struts2-tiles-plugin-2.0.4.jar、struts2-struts1-plugin-2.0.4.jar、struts2-spring-plugin-2.0.4.jar、struts2-sitemesh-plugin-2.0.4.jar、struts2-jsf-plugin-2.0.11.1.jar、struts2-jfreechart-plugin-2.0.11.1.jar、st

26、ruts2-core-2.0.11.1.jar。struts.xml和cityinfo.xml放在src,具体配置如下:struts.xml: cityinfo.xml: /view/IndexTemp.jsp /view/IndexTemp.jsp /view/IndexTemp.jsp /pages/admin/Login.jsp /pages/admin/view/AdminTemp.jsp goindex /pages/admin/view/AdminTemp.jsp /pages/admin/view/AdminTemp.jsp admin_* ListShow admin_List

27、Show.action /pages/admin/view/AdminTemp.jsp /pages/admin/view/AdminTemp.jsp 5.2 系统编码实现(1)本系统采用了二分栏结构,分为4个区域,即页头、侧栏、页尾和内容显示区。通过主界面上的按钮,可对各类信息进行浏览操作,同时还可以发布各类信息如图5-1所示。图5-1 供求信息网主界面(2)单击“招聘信息”导航按钮,对发布的招聘信息进行浏览操作。(3)单击“培训信息”导航按钮,对发布的培训信息进行浏览操作。(4)单击“房屋信息”导航按钮,对发布的房屋信息进行浏览操作。(5)单击“求购信息”导航按钮,对发布的求购信息进行浏览

28、操作。(6)单击“招商引资”导航按钮,对发布的招商引资信息进行浏览操作。(7)单击“公寓信息”导航按钮,对发布的公寓信息进行浏览操作。(8)单击“求职信息”导航按钮,对发布的求职信息进行浏览操作。(9)单击“家教信息”导航按钮,对发布的家教信息进行浏览操作。(10)单击“车辆信息”导航按钮,对发布的车辆信息进行浏览操作。(11)单击“出售信息”导航按钮,对发布的出售信息进行浏览操作。(12)单击“寻找启示”导航按钮,对发布的寻找启示信息进行浏览操作。(13)单击“进入后台”按钮,首先进入登陆界面,如图5-2所示,输入用户名及密码进入后台管理界面,如图5-3所示。图5-2图5-3(14)用户可过

29、“付费状态”区域下的单选按钮或者“审核状态”区域下的单选按钮,进行查询信息、删除信息及审核信息操作,如图5-5所示:图5-5(15)如需要对某条信息进行设置付费状态,则将该条的信息ID输入到“付费设置”区域下的文本框中,然后单击“查询”按钮,如图5-6所示。(16)在设置付费状态页面,单击“设为付费”按钮,即设置付费状态完成,如果不需要此条信息,可单击“删除信息”按钮,将此条信息删除如图5-7所示。5.3 公共类设计5.3.1 数据库链接及操作类DB类主要是对数据库的操作,如连接和关闭数据库,以及执行SQL语句操作数据库。每一种操作对应一个方法,如getCon()方法用来获取数据库连接,clo

30、sed()方法用来关闭数据库连接,而对数据库的增、删、改、查等操作都在doPstm()方法中实现,该方法是通过PreparedStatement对象来执行SQL语句的。执行查询的SQL语句后,返回的结果是ResultSet结果集对象;执行更新的SQL语句,则返回影响的记录数。DB类中的doPstm()方法用来操作数据库,但其并没有返回值,在执行了上述两种SQL语句后,通过创建返回ResultSet结果集对象的方法,在执行doPstm()方法操作数据库后,调用其中一个方法返回需要的值。核心代码如下:public void doPstm(String sql,Object params)if(sq

31、l!=null&!sql.equals()if(params=null)params=new Object0;getCon();if(con!=null)trySystem.out.println(sql);pstm=con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);for(int i=0;iparams.length;i+)pstm.setObject(i+1,paramsi);pstm.execute();catch(SQLException e)System.out

32、.println(doPstm()方法出错!);e.printStackTrace();5.3.2 业务处理类OpDB类实现了处理本系统中用户请求的所有业务的操作,如信息显示、信息发布、管理员登录、信息审核、信息删除等。几乎每一个用户请求的业务,在OpDB类中都对应着一个方法,具有相同性质的业务可在一个方法中实现。在这些方法中,通过调用DB类中的doPstm()方法来对数据库进行操作。OpDB类中的方法与方法所处理的业务如表5-1所示:表5-1:方法返回值实现业务OpGetListBox()java.util.TreeMap初始化主页导航菜单项与后台下拉列表狂选项OpListShow()jav

33、a.util.List信息列表显示OpSingleShow()com.yxp.model.InfoSingle查看信息详细内容OpUpdate()int信息发布、信息审核、信息删除、付费设置LogOn()boolean管理员登录OpCreatePage()com.yxp.model.CreatePage分页设置5.3.3 分页类CreatePage类用来封装分页信息,这些信息都保存在CreatePage类的响应属性中CreatePage类的属性有:当前页码、总页数、总记录数、每页显示的记录数、分页导航栏信息、分页状态显示信息,并在类的构造方法中为这些属性赋初始值。分页信息中的总记录数,通过查询

34、数据库来获得。总页数通过获得总记录数后与每页显示的记录数计算得到,算法如下:总页数=(总记录数%每页显示记录=0)?(总记录数/每页显示记录):(总记录数/每页显示记录+1),先设置总记录数,再来设置总页数。核心代码如下:/* 计算总页数 */public void setAllP()AllP=(AllR%PerR=0)?(AllR/PerR):(AllR/PerR+1);/* 设置当前页码 */public void setCurrentP(String currentP) if(currentP=null|currentP.equals()currentP=1;tryCurrentP=In

35、teger.parseInt(currentP);catch(NumberFormatException e)CurrentP=1;e.printStackTrace();if(CurrentPAllP)CurrentP=AllP;5.3.4 字符串处理类字符串处理类用来解决程序中经常出现的有关字符串处理的问题,在本系统的字符串处理类中实现了转换字符串中的HTML字符和将日期型数据转换为字符串的两种操作。字符串处理类DoString的实现过程如下:(1)创建转换字符串中的HTML字符的方法HTMLChange()。代码如下:public static String HTMLChange(Str

36、ing source)String changeStr=;changeStr=source.replaceAll(&,&);changeStr=changeStr.replaceAll( , );changeStr=changeStr.replaceAll(,>);changeStr=changeStr.replaceAll(rn,);return changeStr;(2)创建转换日期格式为String型的方法dateTimeChange()。代码如下:public static String dateTimeChange(Date source)SimpleDate

37、Format format=new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);String changeTime=format.format(source);return changeTime;该方法主要调用java.text.SimpleDateFormat类来转换日期型数据为String型。使用该类进行转换,首先创建一个SimpleDateFormat类对象,在创建的同时指定了格式化日期为String后的格式为yyyy-MM-dd HH:mm:ss,即 年-月-日 时:分:秒,然后调用该类的format(java.util.Date)方法将Date型转换为

38、String型。结论本系统主要介绍了都市信息供求系统的设计与实现,通过此系统,用户可以更好的使用信息与发布信息,同时该系统借助Struts2.0,增强了人机界面的人性化设计。本系统主要用到的工具有Eclipse、Dreamweaver等工具为主要开发工具,以MySQL为开发数据库,采用MVC开发模式,结合struts框架,实现了系统的基本功能。致谢语本研究及学位论文是在我的导师刘晓华的亲切关怀和悉心指导下完成的。她严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。从课题的选择到项目的最终完成,刘老师都始终给予我细心的指导和不懈的支持。两个月依赖,刘老师在学业上给我以精心指导,在此谨向郑老师致以诚挚的谢意和崇高的敬意。 在此,我还要感谢在一起愉快的度过大学生活的同学们,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号