面向数据设计的概念Jackson系统开发方法教学目的

上传人:xx****x 文档编号:242921645 上传时间:2024-09-12 格式:PPT 页数:63 大小:199.50KB
返回 下载 相关 举报
面向数据设计的概念Jackson系统开发方法教学目的_第1页
第1页 / 共63页
面向数据设计的概念Jackson系统开发方法教学目的_第2页
第2页 / 共63页
面向数据设计的概念Jackson系统开发方法教学目的_第3页
第3页 / 共63页
点击查看更多>>
资源描述
,软 件 工 程,11.1 面向数据设计的概念,11.2 Jackson系统开发方法,教学目的:了解概念,掌握Jackson系统开发方,教学重点:JSP技术。,教学难点:JSP技术。,教 具:多媒体教室、电子教案,作 业:,第11章 面向数据的设计方法,第11章 面向数据的设计方法,面向数据的设计(,data structured-oriented design,),方法就是根据问题的数据结构定义一组映射,把问题的数据结构转换为问题解的程序结构。,面向数据流的设计来源于程序的模块化和功能分解的概念;,而面向数据结构的设计,则侧重于问题的数据结构,把程序结构设计成与问题的数据结构一致,不强调模块定义。模块只是设计过程的副产品,对于模块独立性原则也未过分强调。这种程序结构容易理解,也易于修改。,11.1 面向数据设计的概念,在许多应用领域中,信息有着清晰的层次结构,输入数据、存储信息(即数据库)及输出数据都有各自的组织形式。,一般说来,顺序出现的数据可以用顺序控制结构的程序处理;选择出现的数据用分支控制结构的程序处理;重复出现的数据用循环控制结构的程序处理。,因此可以根据数据的组织形式确定使用和处理这些数据的程序的组织形式。,11.1 面向数据设计的概念,面向数据的设计就是根据数据结构的表示获得软件表示。,本章重点讨论:,1. Jackson系统开发方法,Jackson System Development,简称JSD,2. 基于结构化数据的系统开发方法,Data Structured System Development,简称DSSD,11.1 面向数据设计的概念,JSD方法是Jackson 于1989年对软件设计中广为使用的Jackson结构程序设计(Jackson Structured Programming,简称JSP)方法的扩展。,DSSD方法,也称为WarnierOrr方法,是对Warnier程序逻辑构造(Logical Construction of Program,简称LCP)方法的扩充,除了设计能力以外,还加强了分析能力。,11.1 面向数据设计的概念,面向数据设计方法一般都包括下列任务:,1确定数据结构特征;,2用顺序、选择和重复三种基本形式表示,数据;,3把数据结构表示映射为软件的控制结构;,4用与具体方法配套的设计指南进一步精,化控制结构;,5开发软件的过程性描述。,11.1 面向数据设计的概念,JSD和DSSD方法的软件总体结构设计与软件过程性设计的分界并不明显,都能很快地过渡到过程性描述。这也是易于理解和易于维护的重要表现之一。,JSD和DSSD也是分析与设计一体化的 ,本章侧重于讨论与设计有关的技术。面向数据的设计方法,要求信息结构用层次图表示,在软件需求规格说明中与信息域的描述相对应。,11.1 面向数据设计的概念,面向数据的设计方法的适用场合,具有明显的层次信息结构的应用:,企事业的信息管理系统;,系统软件(如操作系统);,科学与工程计算;,计算机辅助教学;,组合问题求解等领域。,例如:CAD/CAE/CIM类应用软件。,11.2 Jackson系统开发方法,用JSD方法开发一个软件的步骤:,1)标识实体与动作:用与面向对象方法类似的分析技术识别出系统中的实体(包括人、对象、产生或使用信息的组织)和动作(客观世界中影响系统实体的那些事件);,2)生成实体结构图:针对每一实体,将影响它的所有动作按发生的时间顺序用Jackson结构图(Jackson diagrams)表示出来。为了描述时间约束,同一动作必须出现在多张结构图中;,用,JSD,方法开发一个软件的步骤:,3)初建系统模型:将实体和动作统一用一个过程模型表示,并定义该模型中的过程与客观世界中的过程之间的联系。所用描述工具为系统规格说明图(System Specification Diagram,简称SSD);,4)扩充功能性过程:在过程模型中扩充交互型功能和信息型功能,分别产生内部输入信息和系统输出信息;,5)系统定时:确定实现必须满足的时间约束;,6)实现:确定系统中所有软硬件成分,形成一个完整设计方案。,前三个步骤主要在需求分析阶段完成,后三步是软件设计的任务。,11.2.1 JSD分析技术回顾,我们曾以大学校园内直达交通车系统USS为例进行需求分析,结果得出“交通车”和“按钮”两实体及其动作对应的实体结构图如下图所示。,Shuttle,Shuttle* body,Station(i),Arrive(i),Leave(i),Arrive(1),Button,Push,*,Leave(1),11.2.1 JSD分析技术回顾,初建系统模型后,得到,USS,的系统规格说明图(图,724,)。其中后缀为“,_0”,的过程表示客观世界中的过程(或外部过程),后缀为“,_1”,的过程表示系统模型内的过程(或模型过程)。,Button1,DS,Shuttle0,Shuttle1,SV,数据流联系,Button0,状态向量联系,图7-2-4 USS的系统规格说明图,Button1,DS,Shuttle0,Shuttle1,SV,数据流联系,Button0,状态向量联系,11.2.1 JSD分析技术回顾,将实体结构图与初建系统模型(系统规格说明图)综合起来,可导出目标软件系统中每个过程内部细节的结构正文表示,如6.2.3节过程BUTTON_1和SHUTTLE_1所描述。,上述结构正文也可对应地用Jackson结构图表示。图625是与模型过程SHUTTLE_1的结构正文对应的Jackson结构图。,图625 对应于结构正文的结构图,Shuttle 1,Station(i)*,Arrive(1),Leave(1),Shuttle,body1,TRANSit body1,wait body1,Transit(i)*,Transit(1)*,Arrive(i),Leave(i),Wait(1)*,TRANSit body,wait body,Wait(i)*,11.2.2 扩充功能性过程,这一步骤以初建系统模型为基础,通过数据流和状态向量两种方式将新定义的功能性过程与原有的模型过程联系起来。具体考虑两类功能:,1信息型功能(information function):从模型过程产生的数据流和状态向量中提取信息并生成输出信息。嵌入型功能只需在原有模型过程的结构正文中插入一些操作;,2交互型功能(interactive function):监视模型过程的状态向量,在输出结果的同时产生内部输入信息,反过来影响模型化过程的动作。,图1021 两类功能性过程与系统模型的关系,外部过程,系统模型,信息型,功能过程,交互型,功能过程,客观世界,系统,11.2.2 扩充功能性过程,假设在交通车上有一块发光板,专门显示车到站的信息,发光板“亮”说明车到站,“暗”说明车离开。此板或亮或暗受,LON,(,i,)、,LOFF,(,i,),两命令的控制。在过程,SHUTTLE_1,中可嵌入一个新功能:当交通车到达站(,i,),时,发出命令,LON,(,i,);,离开站(,i,),时,发出命令,LOFF,(,i,)。,交通车在两站之间往返运行过程中,输出“开关发光板”的命令数据流,图,1022,为增加这一功能后的,SSD,,,结构正文修改为:,11.2.2 扩充功能性过程,图1022 修改后的SSD,LAMPCMDSLamp commands,Button0,BD,SV,Button1,Shuttle0,Shuttle1,LAMPCMDS,SHUTTLE_1 seq,LON(1) /* 控制发光板“亮”,说,明交通车正停在站1上 */,read 状态向量,WAIT_BODY1 itr while Wait(1),read 状态向量,WAIT_BODY1 end,LOFF(1) /* 交通车即将离站;控,制发光板“暗” */,LEAVE(1),TRANSIT_BODY1 itr while Transit(1),read 状态向量,TRANSIT_BODY1 end,SHUTTLE_BODY1 itr,STATION seq,ARRIVE(i),LON(i) /* 交通车已停靠站(i) */,WAIT_BODY itr while Wait(i),read 状态向量,WAIT_BODY end,LOFF(i) /* 交通车将离开站(i) */,LEAVE(i),TRANSIT_BODY itr while Transit(i),read 状态向量,TRANSIT_BODY end,STATION end,SHUTTL_BODY1 end,ARRIVE(1),SHUTTL_1 end,11.2.2 扩充功能性过程,第二个功能是产生关于启动(START)和关闭(STOP)发动机的命令,以此控制交通车的运行。下达STOP命令的条件是,传感器显示车已到站,而下达START 命令的条件是乘客压下按钮招呼交通车并恰好交通车在某个站上等待。为此引入一个功能性过程mcontrol,它从SHUTTLE_1和BUTTON_2两过程接收数据,适时地发出START和STOP两种命令。,过程SHUTTLE_1与过程mcontrol之间用数据流“S1D”连接。因此SHUTTLE_1的结构正文进一步修改为:,SHUTTLE_1 seq,LON(1),read 状态向量,WAIT_BODY1 itr while Wait(1),read 状态向量,WAIT_BODY1 end,LOFF(1),LEAVE(1),TRANSIT_BODY1 itr while Transit(1),read 状态向量,TRANSIT_BODY1 end,SHUTTLE_BODY1 itr,STATION seq,ARRIVE(i),write arrive to,S1D /* 向mcontrol发送数据流,,说明车已到站(i)*/,LON(i),WAIT_BODY itr while Wait(i),read 状态向量,WAIT_BODY end,LOFF(i),LEAVE(i),TRANSIT_BODY itr while Transit(i),read 状态向量,TRANSIT_BODY end,STATION end,SHUTTLE_BODY1 end,ARRIVE(1),write arrive to,S1D /* 发送数据流,说明车已到站1 */,SHUTTLE_1 end,11.2.2 扩充功能性过程,过程,SHUTTLE_1,执行“,read,状态向量”操作和过程,mcontrol,对“,S1D”,的访问都必须有足够快的频率,否则交通车将不能及时停下来。,为完成,USS,实例,还需进一步考虑实体,BUTTON,模型。过程,BUTTON_1,是对按钮动作的精确描述(即每次压下都对应过程,push,的一次调用),实际上系统应把第一次压下按钮招呼交通车的动作与一次运行未开始之前乘客压下按钮招呼交通车的请求区分开来。用已有实体无法描述和区分动作之间的时间约束,常常引入额外的实体,为此设计过程,BUTTON_2,,,结构图如图,1023,所示,图1023 button2的结构图,Button2,Push group*,Extra,Arrival body,Extra,push body,Request,push,Arrival,Extra Arrival*,Extra push*,11.2.2 扩充功能性过程,功能性过程mcontrol既负责检查BUTTON_2的状态向量“B2V”,确定是否有未满足的请求,又负责把从SHUTTLE_1处(S1D)获取的信息(即交通车已到达发出请求的车站)传递给BUTTON_2(MBD流)。在此定义了一个交互型功能。,BUTTON_2的结构正文描述如下:,BUTTON_2 seq,request,:=,no,/* 置初值 */,read MBD and B1D /* 检查是否有未满足请求和交,通车是否停在站上 */,BUTTON_BODY itr,PUSH_GROUP seq,EXTRA_AR_BODY itr while (ARRIVAL),/* 交通车已靠站但尚无请求,,或既无请求交通车也未靠站 */,read MBD and B1D,EXTRA_AR_BODY end,RQ_PUSH seq /* 首次请求到达,置请求标志 */,request,:=,yes,read MBD and B1D,RQ_PUSH end,EXTRA_RQ_PUSH itr while (REQUEST),/* 因交通车尚未靠站,请求,暂不满足,循环等待 */,read MBD and B1D,EXTRA_RQ_PUSH end,ARRIVAL seq/* 请求满足,清请求标志 */,request,:=,no,read MBD and B1D,ARRIVAL end,PUSH GROUP end,BUTTON_BODY end,BUTTON_2 end,11.2.2 扩充功能性过程,图1024给出的系统规格说明图反映了在此步骤完成的所有工作。我们在SHUTTLE_1中嵌入了一个功能,产生开、关发光板的命令,增加了一个功能性过程mcontrol,它除了负责完成BUTTON_2上的交互型功能外,还产生启动、关闭发动机的命令。至于mcontrol过程的内部结构可采用传统的JSP技术导出,关于JSP技术我们将在10.2.4和10.2.5节讨论。,图1024扩充功能1和2后的系统规格说明图,Button0,BD,SV,Button1,Shuttle0,Shuttle1,LAMPCMDS,B1D,Button2,S1D,MBD,Mcontrol,B2V,MOTOR,CMDS,11.2.3 施加时间约束,经过前几个步骤,获得一个由若干顺序过程组成的系统,它们通过数据流或状态向量进行通信,但对这些处理过程的执行速度尚未考虑。所以,对于输出流,定义输出速度和更新频率;对于输入流,要求子系统保证及时收集所有输入信息并保持它们的到达顺序不变。,在,USS,实例中,关于时间方面的约束包括:,1,停车命令允许的最大延迟时间;,2,开、关发光板命令的响应时间。,目前在,JSD,方法中,时间约束的描述仍采用非形式化的方式。一种解决办法是引入时间标志流(,time marker stream,),作为模型过程的输入,时间标志流由特定的时钟过程产生。,11.2.4 实现与JSP技术,实现是JSD方法的最后一个步骤,它将系统功能说明配置到给定的软硬件环境上,并满足性能方面的约束。,这一步骤主要考虑:过程在多处理机上的调度(scheduling)、根据SSD和Jackson结构图进行过程变换(transformation)、过程状态向量的存储和访问(storage and access of state vectors)以及借助JSP技术描述功能性过程。因篇幅所限,本节及下节仅讨论最后一个问题。,11.2.4 实现与JSP技术,JSP技术是一种详细设计技术,它由问题所固有的数据结构导出过程的内部结构。所用的基本工具称为数据结构图,是Jackson结构图的变种,专门用于描述数据元素之间的逻辑关系。例如在图1025中,数据集合A由若干个B结构(“*”表示重复)组成,而每个B由若干个C结构后跟一个D结构组成(同级分叉表示顺序),D结构或为数据项E或为F(“”表示选择),这种层次信息结构的表示方法同样适用于输入、输出和数据库中的数据。,图1025 数据结构图,A,B*,C*,D,E,F,图1026 信用卡记帐系统,Outstanding bal,CNO主文件,YYYY 1749.30,CNO,DATE,AMT,XXXX 10.17 25.30,XXXX 10.27 108.20,XXXX 10.30 65.40,YYYY 10.13 158.00,YYYY 10.28 307.90, ,支付文件,支付记录*,CNO分组*,CNO,CNO主文件,顾客记录*,余款额,支付文件,XXXX 2373.50, ,简化的信用卡付帐系统,如图1026所示。系统的输入是支付文件和顾客主文件。,支付文件的每个记录由顾客号(CNO)、支付日期(DATE)和支付金额(AMT)三个数据项组成,并假定已按顾客号预先分组。,顾客主文件由顾客号(CNO)和余款额(Outstanding bal)两项组成。两个文件分别对应图10-2-6中所示数据结构图。,假设该系统输出报表如下图所示,Accounting Report,CNO Date Amt Old bal New bal,XXXX,YYYY,Grand tot,图1027 系统输出报表所对应的数据结构图,记帐报表,情况汇总,顾客数据,总付款额,总余额,CNO组*,CNO,支付记录*,付款总数,平帐数据,原余额,现余额,11.2.5 产生过程表示,JSP,方法通过综合、对照过程的输入,/,输出数据结构的层次关系导出对应的过程性表示,程序。具体步骤如下:,1,找出输入与输出数据结构中有对应关系的数据元素,即有直接因果关系者,它们在程序中可一并处理。,2,依据下述三条规则从数据结构图导出,Jackson,结构图。,1,)在,Jackson,结构图中,为有对应关系的每对数据元素,画一个处理框,该框所处层次取这两个数据元素在,各自数据结构图中层次较低者。,2,)参照输入数据结构图中剩余的每个数据元素所处层,次,在,Jackson,结构图的相应层次上画一个处理框。,3,)参照输出数据结构图中剩余的每个数据元素所处层,次,在,Jackson,结构图的相应层次上画一个处理框。,11.2.5 产生过程表示,3列出所有操作和条件(包括分支和循环条件),并把它们分配到Jackson结构图中。,4根据Jackson结构图,产生结构正文描述。,将上述第1步骤用于信用卡付帐系统发现,输入数据结构“支付文件”中的“CNO组”、“支付记录”分别与输出数据结构中的“CNO组”、“支付记录”对应,输入数据结构“顾客主文件”中的“顾客记录”与输出数据结构中的“CNO组”对应。参照上述第2步骤得到该系统的结构图(图1028)。,图1028 导出Jackson结构图(程序结构),信用卡,付帐系统,情况汇总,处理,顾客数据,总付款额,总余额,处理,CNO组*,处理CNO,处理,支付记录*,计算顾客,支付总额,平帐数据,原余额,现余额,执行完3、4两步骤后,该结构图中“处理顾客数据”一框对应的结构正文应为:,PROCESS_CUST_DATA seq,open PAY_FILE;,open CNO_MASTER_FILE;,PROCESS CNO_GROUP itr until eof:PAY_FILE;,read PAY_FILE;,PROCESS_CNO;,/* 读顾客总文件,找出原余额 */,PROCESS_PAY_REC itr until end:CNO_GROUP;,write report line;,computer total payments;,read PAY_FILE;,end PROCESS_PAY_REC,COMPUTE_CUST_TOTAL;,COMPUTE_BALANCE seq,PROCESS_OLD_BAL;,COMPUTE_NEW_BAL;,write report line;,end COMPUTE_BALANCE,end PROCESS_CNO_GROUP,end PROCESS_CUST_DATA,教学目的:掌握DSSD方法,了解复杂过程逻辑的描述。,教学重点: DSSD方法。,教学难点: DSSD方法。,教 具:多媒体教室、电子教案,作 业:习题4,11.3 DSSD方法,11.3 基于结构化数据的系统开发(DSSD)方法,DSSD,需求分析阶段产生的需求规格说明,将作为设计过程的输入信息。设计过程的输出为设计规格说明,具体包括输出数据结构、过程描述和设计约束三方面内容。,DSSD,设计分为逻辑设计和物理设计两个步骤,逻辑设计着重考虑软件的输出、界面及过程性表示,物理设计则在逻辑设计的基础上考虑如何满足性能、可维护性和其他一些设计约束。,基本工具:,Warnier,Orr,图,既可描述程序结构,又可描述数据结构。这里介绍一种简化的,DSSD,方法。,11.3.1 DSSD设计步骤,DSSD的逻辑设计步骤主要有两个:,1推导输出数据的逻辑结构(Logical,Output Structure,简称LOS);,2由LOS导出处理过程的逻辑结构,(Logical Process Structure,简称LPS)。,11.3.1 DSSD设计步骤,按下述简化方法,LOS可分四步导出:,1)从问题描述本身或其他相关需求信息,中找出所有不同的原子数据项(即不,可再分的数据项);,2)说明每个原子数据项的出现频率;,3)找出那些可再分的一般数据项;,4)用Warnier-Orr图表示LOS。,【例11.1】产生如图11-3-1所示的“机器使用情况日报表”系统,Daily_Machine_Tool_Usage_Report,Date:DATE,Tool category Tool ID status NO.parts produced,Tool_CAT,TID S NO_PARTS,CATEGORY TOTAL PARTS: CAT_TOT_PARTS,CATEGORY TOTAL PARTS:,TOTAL PARTS PRODUCED THIS DATE: MANUF_TOTAL,11.3.2 推导输出数据的逻辑结构,输出数据结构表现为数据项的一种层次结构。,按照,LOS,推导步骤:,1,)首先从问题描述(例,11.1,所给报表原型)中找出原子数据项;,2,)确定每个原子数据项出现的频率(图,1132,)。,图1132 原子数据项及出现频率,原子数据项,频率,细节,HEADING(标题),DATE(日期),COLUME_HEAD(列标题),TOOL_CAT(工具类名称),TID(工具标志),S(状态),NO_PARTS(产品件数),SUB_TOTAL_HEAD(按类汇总小标题),CAT_TOT_PARTS(按类汇总),TOTAL_HEAD(按目汇总标题),MANUF_TOTAL(每日产品总计),1/报表,1/报表,1/报表,1/工具类,1/工具,1/工具,1/工具,1/工具类,1/工具类,1/报表,1/报表,每日机器使用情况报表,若干类,每类有若干项,按类汇总,按日汇总,11.3.2 推导输出数据的逻辑结构,3)找出一般数据项,有:,报表(出现一次)、,工具类(每报表出现t次)、,工具(每类出现s次)。,4)用Warnier-Orr图表示LOS,11.3.2 推导输出数据的逻辑结构,图1133 LOS的WarnierOrr图示,标题,日期标题,日期 工具类名称 工具标识,列标题 工具 状态,工具类 (1,s) 产品件数,(1,t) 按类汇总小标题,每日汇总标题 按类汇总,每日产品总计,生产,日报表,11.3.3 推导处理过程的逻辑结构 (LPS),LPS,是软件的过程性表示,推导步骤如下:,1,)从,LOS,的,Warnier,Orr,图示中去掉所有原子数据项;,生产,日报表,图1134 去掉所有原子数据项,工具,工具类 (1,s),(1,t),2)对每个一般数据项加上“.BEGIN、.END”分隔符;,.BEGIN,.BEGIN,工具,工具类 (1,s),(1,t),.END,.END,生产,日报表,3)定义所有初始、终止的指令或过程;4)说明所有数值计算和非数值处理;,.BEGIN 置MANUF_TOTAL为0,.BEGIN,置CAT_TOTALPARTS为0,工具类 工具,(1,t) (1,s),把NO_PARTS加到,CAT_TOTAL_PARTS上,.END,.END,生产,日报表,把CAT_TOTAL_PARTS加到MANUF_TOTAL上,5)说明所有输出指令或过程; 6)说明所有输入指令或过程。,图1136 完整的LPS,生,产,日,报,表,.BEGIN,工具类,(1,t),.END,输出标题、日期标题、日期、列标题,置MANUF_TOTAL为0,取一条逻辑记录,.BEGIN,工具,(1,s),.END,输出TOOL_CAT,置CAT_TOTAL_PARTS为0,输出TID,S,NO_PARTS,把NO_PARTS加到CAT_TOTAL_CAT上,取一条逻辑记录,输出SUB_TOTAL_HEAD,把CAT_TOTAL_PARTS加到MANUF_TOTAL上,输出CAT_TOTAL_PARTS,输出TOTAL_HEAD,输出MANUF_TOTAL,图1136 完整的LPS,生,产,日,报,表,.BEGIN,工具类,(1,t),.END,输出标题、日期标题、日期、列标题,置MANUF_TOTAL为0,取一逻辑记录,.BEGIN,工具,(1,s),.END,输出TOOL_CAT,置CAT_TOTAL_PARTS为0,输出TID,S,NO_PARTS,把NO_PARTS加到CAT_TOTAL_CAT上,取一条逻辑记录,输出SUB_TOTAL_HEAD,把CAT_TOTAL_PARTS加到MANUF_TOTAL上,输出CAT_TOTAL_PARTS,输出TOTAL_HEAD,输出MANUF_TOTAL,11.3.4 复杂过程逻辑的描述,DSSD提供了一种复杂过程逻辑(Complex Process Logic,简称CPL)的工具。,【例10.2】假设某邮购系统按下面算法计算顾客购物的总费用,即货物本身的价格加上运费减去折头。按表11-1计算运费,按表11-2计算折头:,表11-1,表11-1,距离(英里),重量(磅),收费,=100,100,100,50,50,0.01距离重量,1.10重量,0.02距离重量,2.35重量,货款总额(美元),折头率(%),100,500且100,500,0,1,2,购,物,总,费,用,货款总额,+,运费,折头,每种物品的费用,+ (1,i),单价,数量,本地,/?1,远程,/?2,轻,/?3,重,/?4,0.01 距离重量,1.10 重量,轻,/?3,重,/?4,0.02 距离重量,2.35 重量,货款总额,折头率,0% (/?5),1% (/?6),2% (/?7),11.3.4 复杂过程逻辑的描述,其中:/?i分支条件或循环条件;,+、算术运算符;,表示不可兼具的选择关系。,本例中:,/?1距离100英里;,/?3 重量 50 磅;,/?5 货款总额100美元;,/?6 100美元=货款总额=500美元;,习 题,11.4 用Jackson数据结构图表示Pascal文件结构:,type persons=record,age: integer;,sex: (male,female);,case t of,1: factory;,2: office;,3: administration,end;,end;,var,the of persons;,解:,office ,record *,age,sex,t,thefile,Administration,Factory,female,male,返回目录,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


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

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


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