第6章程序设计软工.pptx

上传人:李司机 文档编号:4541026 上传时间:2023-04-26 格式:PPTX 页数:53 大小:509.99KB
返回 下载 相关 举报
第6章程序设计软工.pptx_第1页
第1页 / 共53页
第6章程序设计软工.pptx_第2页
第2页 / 共53页
第6章程序设计软工.pptx_第3页
第3页 / 共53页
第6章程序设计软工.pptx_第4页
第4页 / 共53页
第6章程序设计软工.pptx_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《第6章程序设计软工.pptx》由会员分享,可在线阅读,更多相关《第6章程序设计软工.pptx(53页珍藏版)》请在三一办公上搜索。

1、我们毕业啦其实是答辩的标题地方,大学计算机基础,计算机科学与技术学院 计算机基础教学部,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,2,6.1程序、程序设计及软件工程,6.2程序设计语言,6.3 程序设计,6.4 软件工程基础,本章小结,第6章程序设计及软件工程基础,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,3,6.1程序、程序设计及软件工程,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,4,计算机程序:使用计算机语言编写的若干条指令的有序集合称为计算机程序。程序设计:指根据所提出的待解问题,使用某种计算

2、机语言编制程序代码,来驱动计算机能够正确完成该任务的过程。软件:是程序、数据以及开发、使用和维护程序需要的所有文档的完整结合。软件工程是指导计算机软件开发和维护的一门学科,采用工程的概念、原理、技术和方法来开发和维护大型、复杂计算机软件系统。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,5,6.2程序设计语言,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,6,6.2.1程序设计语言的发展及分类 程序设计语言的发展是一个不断演化的过程,从发展历程来看,程序设计语言可以分为三类:机器语言汇编语言高级语言。如图6.1所示。,6.2.1程序设计

3、语言的发展及分类,1.机器语言机器语言也称低级语言,是用二进制代码0、1表示的,它是最底层的计算机语言,用机器语言编写的程序计算机能够直接识别和执行。2.汇编语言汇编语言克服了机器语言的缺点,采用助记码和符号地址来表示机器指令,因此也称作符号语言。3高级语言高级语言是一种接近于自然语言的程序设计语言,它按照人们的语言习惯,使用日常用语、数学公式和符号等表达方式,按照一定的语法规则来编写程序。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,7,6.2.1程序设计语言的发展及分类,4.几种常用的计算机程序设计语言几种常用的计算机程序设计语言:C语言、C+、Pascal语

4、言、Visual Basic、Java、创作工具、C#。5.未来的计算机语言 未来语言的发展将不在是一种单纯的语言标准,将会以一种完全面向对象,更易表达现实世界,更易于人编写,其使用将不再只是专业的编程人员,人们完全可以用订制真实生活中一项工作流程的简单方式来完成编程。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,8,6.2.2语言处理程序,只要不是用机器语言编写的程序,计算机是无法直接执行的。因此用汇编语言和高级语言编写的程序都需要“翻译”。语言处理程序的作用就是将汇编程序和高级语言程序翻译成等价的机器语言程序。被翻译的程序称为源程序,翻译后生成的机器指令程序称

5、为目标程序。下面分别介绍汇编语言程序和高级语言程序的翻译方式。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,9,6.2.2语言处理程序,1.汇编语言程序的翻译处理 用汇编语言编写好的程序,必须经过“汇编程序”(Assembler,能把用汇编语言书写的程序翻译成机器语言程序的软件)的翻译,将其转换成目标程序,这一过程称为“汇编”。目标程序一经安置在内存的预定位置上,就能被计算机的CPU处理和运行。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,10,6.2.2语言处理程序,2高级语言程序的翻译处理对高级语言程序的翻译有两种方式,即编译方式

6、和解释方式。(1)编译方式编译方式是指将源程序经“编译程序”翻译后,形成可执行目标程序的过程。通常我们把用高级语言编写好的程序称为源程序,最终可被计算机执行的机器指令程序称为目标程序。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,11,6.2.2语言处理程序,(2)解释方式在解释方式过程中,首先要有一种称为“解释程序”的系统软件。解式方式的翻译过程是这样的:源程序进入计算机,“解释程序”读取源程序第一条语句后,翻译成机器指令代码并执行之;接着读取源程序第二条语句,翻译并执行,直到源程序的最后一条语句。即解释方式的流程是:边扫描边解释,逐句输入,逐句翻译,逐句执行,

7、并不产生目标程序。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,12,6.2.3程序设计语言的选择,程序设计语言的选择应该考虑以下因素:(1)项目的应用领域(2)算法和数据结构的复杂性(3)软件的执行环境(4)性能因素(5)软件开发人员的知识,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,13,6.2.4高级程序设计语言的组成,1.数据类型数据是程序操作的对象。为了有效地在计算机中保存、处理数据,各种程序设计语言都会提供若干种数据类型,供用户在程序设计中使用。数据类型一般分为基本数据类型和构造数据类型两大类。(1)基本数据类型基本数据类

8、型是指程序语言设计系统自身内置的类型。最主要的特点是,其值不可以再分解为其他类型。不同的程序设计语言有不同的基本数据类型,一般有整数类型、实数类型、字符类型、逻辑类型等。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,14,6.2.4高级程序设计语言的组成,(2)构造数据类型构造数据类型是指由基本数据类型按某种方式(可以由语言系统提供,也可以由用户自定义)组合而成的类型。一般有数组类型、枚举类型、记录类型、集合类型等。在程序中,使用数据类型通常表明了数据的两方面信息:第一,表明该类型数据的取值形式、范围和在计算机中的存储与表示方式。第二,表明该类型数据所能执行的运算

9、种类,也就是说,能够施加到不同类型数据上的运算是不同的。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,15,6.2.4高级程序设计语言的组成,2.常量与变量(1)常量常量是指在程序执行过程中其值保持不变的数据。常量在程序中常常以数字常量和符号常量的形式出现。例如计算圆面积的公式为Area=RR3.1415926,其中出现的3.1415926即是数字常量。有时候常量也可用符号来代替,例如若程序中多次使用到圆周率3.1415926,而这个数字书写起来又比较长,我们可以定义一个符号常量来代替3.1415926。例如:在C语言中,我们可以如下定义一个常量:Float co

10、nst PI=3.1415926(,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,16,6.2.4高级程序设计语言的组成,2.常量与变量(2)变量变量的实质是指在程序运行过程中其值可变化的内存单元。为了便于识别或记忆,通常需要为变量指定一个标识符,即定义变量名。变量名对应于一个或一组存储单元。由于变量是用来存放数据的,因此变量在使用前需要说明其数据类型,即变量在使用之前,必须对其类型和名称进行定义。这样在编译时,编译程序就可以为内存中的变量分配相应的存储空间,以存放该变量的值。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,17,6.2.

11、4高级程序设计语言的组成,3.运算符与表达式(1)运算符:在程序中,对数据的处理主要是通过运算实现的。高级程序设计语言中会包含多种形式的运算,常见的运算有:算术运算:加、减、乘、除、取余。关系运算:大于、大于等于、小于、小于等于、等于、不等于。逻辑运算:与、或、非。字符运算:连接。就可以为内存中的变量分配相应的存储空间,以存放该变量的值。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,18,6.2.4高级程序设计语言的组成,不同的高级程序设计语言提供的运算符种类或运算符号略有不同。例如,常见运算在Visual Basic中的表示形式如表6-1所示。(2)表达式:程序

12、语言中的表达式是由一系列操作数和运算符组合而成的,表达式的结果为一个具体的值。操作数可以是常量或变量。例如:表6-1中提供了,用VB语言书写的表达式示例。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,19,6.2.4高级程序设计语言的组成,4.语句语句是程序中具有独立含义的基本单位,通常分为说明性语句和执行性语句。说明性语句通常用来说明程序中的变量以及变量的数据类型。执行性语句常见的有赋值语句、输入输出语句等,如图 6.6所示。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,20,6.2.4高级程序设计语言的组成,5.控制结构控制结构规

13、定了程序中语句的执行顺序,高级程序语言中会含有多种形式的控制结构语句,其中最基本的是:顺序结构控制语句、选择结构控制语句、循环结构控制语句。(1)顺序结构控制语句,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,21,6.2.4高级程序设计语言的组成,5.控制结构(2)选择结构控制语句选择结构(或称分支结构)根据条件判定的结果,决定程序的执行次序。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,22,6.2.4高级程序设计语言的组成,5.控制结构(3)循环结构控制语句循环结构又称重复结构。一般有两种循环形式:当型循环结构、直到型循环结构。,

14、26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,23,6.2.4高级程序设计语言的组成,6.函数和过程为了使程序在结构上更加清晰,避免程序段的重复书写,可以把具有某些特定功能的或反复使用的程序段独立出来,这样的程序段被称为过程(或子程序)或函数。过程和函数都不能独立执行,只有在某个程序中调用了这个过程或函数,它才被执行。高级程序设计语言提供了大量的已定义好的函数,程序设计者可以根据需要在程序中直接调用这些函数,大大提高了编程的效率。例如,使用某高级语言程序设计时,要计算sin(300)的值,只需要在程序中调用该语言提供的sin()函数即可。,26/4/2023,太原理

15、工大学.计算机科学与技术学院.计算机基础教学部,24,6.2.4高级程序设计语言的组成,7.注释 注释是程序的非有效部分,注释并不要求计算机理解它们,它的作用是方便读程序的人阅读理解程序。不同的程序设计语言,都有自己的注释规则。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,25,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,26,6.3 程序设计,6.3.1 程序设计的步骤,程序设计的步骤一般包括:问题分析和建立模型、算法设计、程序编码、调试运行和文档编制,如图6.11 所示。,26/4/2023,太原理工大学.计算机科学与技术学院.计

16、算机基础教学部,27,6.3.1 程序设计的步骤,1.问题分析和建立模型用计算机求解问题,首先要设法把实际问题抽象成数学问题,即对其建立数学模型。明确哪些数据是问题的输入,指已知什么条件;明确数据具体的处理过程和要求,指希望计算机对输入信息做什么样的加工;哪些是期望的输出,指希望得到什么结果,输出什么类型的报告、图标或信息。【例6-5】在一个学生成绩管理系统的设计中,首先需要分析问题的输入条件,比如学生的学号、姓名、各科的学习成绩等。系统的输出结果之一是要在屏幕上输出总成绩第一的学生的姓名和成绩。那么相应的处理过程就要对各个学生的各科成绩求和,并找出合计值最大的学生作为第一名。,26/4/20

17、23,太原理工大学.计算机科学与技术学院.计算机基础教学部,28,6.3.1 程序设计的步骤,2.算法设计算法是解决问题的步骤及其描述,是根据问题分析中的信息得来的,是对问题处理过程的进一步细化。算法是程序编码前对处理思想的一种描述,不能被计算机直接执行。【例6-6】针对上面例子设计的一种算法是:输入全部学生的姓名、学号及本学期的所有课程的成绩。对每个学生的各科成绩求和。按总成绩的降序对学生进行排序。取该排序列表的第一个学生。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,29,6.3.1 程序设计的步骤,3.程序编码 编码就是用计算机能够识别的语言编写源程序的过程

18、。首先应当选择编程语言,然后用该语言来描述前面设计的数据结构和算法。4.调试运行 调试运行是解决程序错误的主要手段,是程序设计过程中必不可少的阶段。调试程序是一个不断重复进行的过程,需要有耐心和毅力,还需要有调试程序经验的积累。为了便于找出并解决程序的错误,通常把程序错误分为三类:语法错误(编译错误)、逻辑错误和运行错误。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,30,6.3.1 程序设计的步骤,5.文档编制 文档由程序说明文件和用户操作手册组成。程序说明文件记录程序设计的算法,程序的实现以及修改的过程,以保证程序的可读性和可维护性。用户操作手册让用户了解程序

19、的使用方式以及正确的输入数据。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,31,6.3.2 程序设计的方法,1.结构化程序设计方法(1)结构化程序设计的基本思想 结构化程序设计的基本思想是:采用“自顶向下、逐步求精”的模块化程序设计原则,采用“单入口单出口”的控制结构,少用或最好不用GOTO语句。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,32,6.3.2 程序设计的方法,自顶向下、逐步求精模块化单入口单出口,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,33,6.3.2 程序设计的方法,(2)结构化程

20、序设计的步骤 结构化程序设计方法着眼于系统要实现的功能,从系统的输入和输出出发,分析系统要做什么,以及如何做,自顶向下地对系统的功能进行分解,建立系统的功能结构和相应的程序模块结构,有效地将一个较复杂的程序设计任务分解成许多易于控制和处理的子任务。(3)结构化程序设计实例【例6-8】使用结构化的设计方法处理一个任务:筹划一个大型聚会。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,34,6.3.2 程序设计的方法,2.面向对象程序设计方法(1)面向对象的基本概念对象(Object)我们通常用对象描述客观世界中的某个具体实体,对象可以是事、物或抽象概念。在面向对象程序

21、设计中,对象是指包含现实世界事务特征的抽象实体,它是将一组数据(属性)和使用该数据的一组基本操作(方法)封装在一起的实体。属性用于描述对象的状态特征,用属性值来表示。方法用于描述对象的行为,是对对象的属性的各种操作,用代码来实现。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,35,6.3.2 程序设计的方法,类(Class)类这个词指的是把对象归入相关的组,描述它们共性的思想。类是指具有相同属性和方法的、并遵守相同规则的一组对象的集合。消息(Message)消息是对象之间进行通信的方式。一条消息内容包含信息的接受者和对其执行操作的请求。发送者发送消息,接受者通过调

22、用相应的方法响应消息,这种通信机制称为消息传递。消息传递是对象之间相互联系的唯一途径。消息传递的过程被不断重复。从而驱动整个程序的运转。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,36,6.3.2 程序设计的方法,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,37,6.3.2 程序设计的方法,抽象性(Abstract)将客观事物抽象成对象及类是面向对象程序设计的基本思想,这种抽象包括两个方面,一是数据抽象,二是代码抽象。数据抽象定义了对象的属性和状态;代码抽象定义某类对象的共同行为特征或具有的共同功能,即对象的方法。封装性(Encap

23、sulation)封装就是把对象的属性和行为结合成一个独立的单位,并尽可能隐蔽对象的内部细节。在面向对象程序设计中,只能通过受限的接口来读取和修改对象的属性值,不允许外界直接访问对象内部,这样的设计实现了数据隐藏的效果,保证了数据的安全,防止外部程序破坏对象的内部数据,使得程序的维护、修改和移植较为容易。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,38,6.3.2 程序设计的方法,继承性(Inheritance)继承性是指特殊类的对象拥有其一般类的属性和行为的方式。即子类可以从父类那里获得所有的属性和方法,并且通过继承和改造拥有属于自己的一套属性与方法;同时,子

24、类又可以派生出下一代子类。例如,把“学生”类看作父类,“大学生”类和“中学生”类可以看作“学生”类的子类,它们和“学生”类是继承关系,继承了“学生”类(父类)的操作和属性。在面向对象程序设计中,继承有效地支持了软件代码的复用,缩短了开发周期,提高了软件开发的效率,同时也使软件易于维护和修改。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,39,6.3.2 程序设计的方法,多态性(Polymorphism)多态性是指当同样的消息被不同的对象接收时,却导致完全不同的行为。即通过继承实现的不同对象调用相同的方法,表现出不同的行为,称之为多态。例如,有一个“几何体”类,为其

25、定义了一个名为area的操作,用于计算面积。如果“矩形”和“圆形”类分别继承了“几何体”类,那么“矩形”和“圆形”类分别继承了“几何体”类的area操作。因为矩形和圆面积的计算公式不同,所以这两个操作虽然具有相同的名字却做不同的运算。这样就可以实现“一个接口,多种方法”。在面向对象程序设计中使用多态的概念,增强了程序对客观世界的模拟性,使得程序具有更好的可读性,易于理解,从而显著提高了软件的可复用性和可扩充性。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,40,(2)面向对象程序设计的方法 在面向对象的程序设计中,首先把问题背景中的实体描述为对象,设计的思路不是将

26、问题分解为过程,而是将问题分解为对象。用符合人类认识世界的思维方式来分析、解决问题,使问题空间与解空间具有一致性,降低了从问题域到解空间映射的复杂性,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,41,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,42,6.4 软件工程基础,6.4.1软件工程的诞生及发展,软件工程的诞生和发展是与软件的发展过程紧密相关的。自从第一台电子计算机诞生以来,就开始了软件的生产,“软件工程”提出至今,在实践中逐步成熟,在软件的开发与维护和软件产业的发展中发挥了巨大的作用,它的发展大致可分为四个重要阶段:第一阶段(

27、传统的软件工程)第二阶段(对象工程)第三阶段(软件过程工程)第四阶段(构件工程),26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,43,6.4.2软件工程的概念,1软件工程的定义 软件工程是应用计算机科学、数学及管理科学等原理,借鉴传统工程的原则、方法来创建软件,从而达到提高质量、降低成本的目的。2软件工程的基本目标与原则目标:在低开发成本、按时交付的前提下,开发出满足用户需求的高 质量软件产品。原则:(1)选取适宜开发范型。(2)采用合适的设计方法。(3)提供高质量的工程支持。(4)重视开发过程的管理。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机

28、基础教学部,44,6.4.2软件工程的概念,3.软件的生命周期 软件生命周期是一个软件从生到灭所历经的整个过程,具体来说是从提出用户需求开始,经过开发、交付使用,在使用中不断地增补修订,直至软件报废的全过程。通常把软件的生命周期划分为计划、开发和运行三个时期,每一个时期又可以进一步细划为若干阶段。软件计划时期一般有问题定义和可行性研究2个阶段;开发时期有需求分析、软件设计、编码和测试4个阶段;运行时期主要是维护阶段。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,45,6.4.2软件工程的概念,4软件工程的研究内容和基本原理(1)软件工程研究的内容软件工程的研究内容

29、主要包括标准与规范、过程与模型、方法与技术、工具和环境四个方面。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,46,6.4.2软件工程的概念,4软件工程的研究内容和基本原理(2)软件工的基本原理用分阶段的生命周期计划严格管理。坚持进行阶段评审。实行严格的产品控制。采纳现代程序设计技术。结果应能清楚地审查。开发小组的人员应少而精。承认不断改进软件工程实践的必要性。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,47,6.4.3软件开发模型,在软件系统的开发过程中,为了从宏观上管理软件的计划、开发和维护,就必须对软件的开发过程有总体的认识和

30、描述,即要建立软件开发模型。软件开发模型提供了软件生命周期中全部过程、活动和任务的结构框架。目前已经提出了多种具体的软件开发模型,如瀑布模型、原型模型、增量模型、螺旋模型、统一过程(RUP)模型、敏捷过程模型等。1.瀑布模型 瀑布模型也称生命周期模型或线性顺序模型。它将软件开发过程划分成若干个互相区别而又彼此联系的阶段,每个阶段中的工作都以上一个阶段工作的结果为依据,同时为下一个阶段的工作提供前提。最终得到软件系统或软件产品。瀑布模型规定了由前至后、相互衔接的固定次序,形如瀑布流水。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,48,6.4.3软件开发模型,2.R

31、UP模型RUP(Rational Unified Process)是一个面向对象软件工程的通用业务流程。它描述一系列相关的软件工程过程,具有相同的过程框架。RUP汇集现代软件开发中多方面的最佳经验,为适应各种项目及组织提供了灵活的形式。RUP模型是一个二维的软件开发模型:横轴表示项目的时间维,包括初始、细化、构造和交付四个阶段;纵轴表示工作流(活动),RUP的工作流包括6个核心工作流 和3个核心支持工作流。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,49,6.4.3软件开发模型,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,50,6.

32、4.3软件开发模型,(1)工作阶段在RUP中,软件的生命周期按时间分为初始、细化、构造和交付4个顺序阶段。在每个阶段的结尾执行一次评估以确定这个阶段的目标是否已经满足。如果评估结果令人满意的话,可以允许项目进入下一个阶段。(2)核心工作流 6个核心过程工作流:商业建模、需求分析、分析和设计、实现、测试、配置。3个核心支持工作流:配置和变更管理、项目管理、环境。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,51,6.4.3软件开发模型,(3)迭代和增量方法 RUP中的每个阶段可以进一步分解为迭代。一次迭代是一个完整的开发循环,只考虑系统的一部分需求,进行分析、设计、实现、测试、部署等过程,产生一个可执行的产品版本,是最终产品的一个子集,因此一个开发迭代在某种意义上是在所有工作流中的一次完整的经过,其本身就像一个小型的瀑布项目。在每次迭代中,它是在已完成部分的基础上进行的,每次增加一些新的功能实现,它增量式地发展,直至最后项目完成,成为最终的系统。,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,52,本章小结,本章主要介绍了程序设计及软件工程的基础知识。程序设计程序设计语言程序设计的步骤软件工程的目标软件生命周期软件工程的研究内容软件开发模型,26/4/2023,太原理工大学.计算机科学与技术学院.计算机基础教学部,53,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号