收藏 分销(赏)

产品库存管理系统面向对象设计.pptx

上传人:天**** 文档编号:12065602 上传时间:2025-09-05 格式:PPTX 页数:145 大小:1.60MB 下载积分:22 金币
下载 相关 举报
产品库存管理系统面向对象设计.pptx_第1页
第1页 / 共145页
产品库存管理系统面向对象设计.pptx_第2页
第2页 / 共145页


点击查看更多>>
资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,产品库存管理系统面向对象设计,第1页,学习情境描述,要求依据第一个情境需求分析结果,学生成立项目开发小组,划分角色,推选项目经理和CTO(首席技术师),程序员。经过讨论给出产品库存管理系统中实体类:入库单、出库单、库存和用户类和控制类接口详细设计;利用情境2搭建好环境,对每个类给予编程实现。,第2页,所需知识,类定义与对象创建,结构方法作用及应用,面向对象三大特征:封装性、继承性和多态性Java语言实现,抽象类与接口应用,包创建与使用,访问控制符应用,异常处理,第3页,重点及难点,结构方法作用及应用,面向对象三大特征:封装性、继承性和多态性Java语言实现,抽象类与接口应用,异常处理,第4页,能力目标,培养学生面向对象编程能力,培养学生良好团体合作意识及沟通协调能力、接收新知识能力,培养学生分析问题、处理问题能力、创新能力以及逻辑思维能力,第5页,任务一,用Java语言描述现实世界中Person。,学生讨论确定Person特征,譬如:name-姓名,age-表示年纪,sex-表示性别等。,确定Person相关行为,譬如:吃饭、睡觉等。,用Java语言实现Person类,第6页,复习引入,面向对象与面向过程区分?,第7页,面向对象编程,面向对象编程是软件设计与实现有效方法,它将客观世界中存在事物看作对象,每个客观事物都有自己特征和行为。,第8页,对象基本概念,变量,方法,在现实生活中,在计算机程序中,客观世界实体,程序中对象,对象含有两方面含义(考虑从哪些方面描述对象),第9页,面向对象基本概念,类是抽象,对象是详细,含有相同特征和行为对象被抽象为类。,类是对象模板,包含一个对象全部数据和代码。,类示例,形状类,动物类,汽车类,第10页,对象,对,象,面向对象编程关键,为计算机应用程序提供实用基础,完成特定任务,表示现实世界中实体,“,对象是存在详细实体,含有明确定义状态和行为。”,第11页,对象示例,收银员对象,用户对象,用户,姓名:朱丽叶,年纪:28,体重:52千克,操作:,购置商品,状态,姓名:布兰尼,职衔:收银员,年纪:35,体重:60千克,操作:,收款,打印帐单,行为,第12页,消息传递,“,消息指一个对象为执行某项特定操作而向另一个,对象发送请求”,消息传递,当需要执行一项特定操作时,经过向已为其定义此项操作对象发送消息来请求,对象之间经过传递消息,实现相互通信,第13页,类和对象示例,雇员,收银员,系统管理员,仓库管理员,促销员,采购经理,第14页,面向对象技术实现,对象,类,实例化,抽象,计算机世界,实体,抽象数据类型,现实世界,抽象,映射,计算机逻辑实现,对象、类和实体关系,类是创建对象模板,对象是类实例,第15页,类基本概念,现实生活中对象,class Car,int color;,int name;,int speed;,void brake(),void speedUp(),void slowDown(),抽象数据类型,程序中对象,映,射,描述,实,现,第16页,类定义,类定义中必须要写类名,应该使用Java语言正当标识符来命名,类名不能与java中已定义好类名相同,格式,:,修饰符,class,类名,extends,父类名,implements,接口名表,组员变量申明,方法组员申明,其中,class,、,extends,和,implements,都是Java关键字。,类申明,类体,第17页,类中方法,6-1,方法定义,方法名称,参数列表,方法主体,方法返回对象类,型或原始类型,第18页,方法体,若局部变量与类组员变量同名,,则类组员变量被隐藏。,方法体是对方法实现,它包含局部变量申明以及全部正当Java指令。方法体中申明局部变量作用域在该方法内部,。,第19页,类定义举例,class Car,int color;,int name;,int speed;,void brake(),void speedUp(),void slowDown(),第20页,类实现,任务一实现,class Person,String name;,int age;,String sex;,public void eat(),System.out.println(Its delicious!);,第21页,【实战】:定义一个名为Rectangle表示长方形类,它包含double类型长length和宽width两个数据组员和设置长方形长宽值方法setDim()、计算长方形面积方法area()。,类实现,第22页,对象创建,实例化,初始化,对象申明,对象创建,第23页,申明,类名 对象名;,申明并不为对象分配内存空间,而,只是分配一个引用空间,第24页,实例化,类名 对象名=new 类名(),例:,Person p=new Person();,运算符new为对象分配内存空间,它调用对象结构方法,返回引用,第25页,初始化,另外执行结构方法,可进行初始化,当一个变量被创建时,会对其中各种类型组员变量自动按下表进行初始化赋值,。,第26页,对象使用,访问对象组员普通形式为:,对象名.组员变量名,对象名.组员方法名(),运算符”.”在这里称为组员运算符,第27页,创建对象举例,class TestPerson,public static void main(String args),Person p1=new Person();,p1.name=Tom;,p1.age=12;,p1.sex=male;,p1.eat();,按照前面设计Person类来充当生产车间,创建Person对象,第28页,任务二,经过结构方法,初始化Person类实例,为其组员变量赋初值。,第29页,结构方法,在Java中,任何变量在被使用前都必须先设置初值。Java提供了为类组员变量赋初值专门功效:,结构方法,。,第30页,结构方法特点,结构方法名与类名相同。,结构方法不返回任何值,也没有返回类型。,每一个类能够有零个或多个重载结构方法。若没有为一个类显式定义结构方法,则当创建类对象时,编译器将自动为它创建一个没有参数默认结构方法.,结构方法只能在创建对象时经过new关键字来自动调用,。,注意:,一旦我们自己定义了结构方法,系统将不再为我们提供默认不带参数结构方法。,第31页,class Person,String name;,int age;,String sex;,public Person(String s1),name=s1;,public Person(String s1,int x),name=s1;,age=x;,任务二实现,public Person(String s1,int x,String s2),name=s1;,age=x;,sex=s2;,public void eat(),System.out.println(Its delicious!);,class TestPerson,public static void main(String args),Person p1=new Person(Tom);,Person p2=new Person(John,20);,Person p3=new Person(Bob,22,male);,System.out.println(p1.name+p1.age+p1.sex);,System.out.println(p2.name+p2.age+p2.sex);,System.out.println(p3.name+p3.age+p3.sex);,经过结构方法赋初值,第32页,This引用句柄,结构方法形式参数与类组员变量名相同,在结构方法中调用其它重载结构方法,用this(参数列表)形式,自主学习内部类定义和使用。,第33页,面向对象基本特征,封装性、继承性、多态性是面向对象三个主要特征。,特征,描述,封装性,经过提供一个或多个公有(public)方法,实现对该类私有组员变量访问和修改,继承性,经过extends关键字实现子类继承父类全部非私有组员,多态性,经过方法重载和方法重写 实现方法多态性,第34页,封装性引入,class Person,String name;,int age;,String sex;,public void eat(),System.out.println(Its delicious!);,class TestPerson,public static void main(String args),Person p1=new Person();,p1.name=Tom;,p1.age=-12;/非法值,p1.sex=male;System.out.println(“p1年纪是:”+p1.age);,经过实例启发学生思索为何引入封装性?,第35页,封装性实现,私有数据,公有方法,外部世界,所谓封装,就是信息隐藏,隐藏对象实现细节,,不让用户看到,第36页,封装示例,3-1,接口,采购经理,罗杰斯,先生,法拉力企业,.,迪斯尼汽车企业,.,市场经理,雪莉女士,要求,第37页,封装示例,3-2,有选择地提供数据,法拉力企业,迪斯尼汽车企业,公共,电话号码,电子邮箱,产品种类,私有,备件制造方法,备件库存,备件制造成本,公共,电话号码,电子邮箱,汽车种类,私有,汽车组装方法,汽车库存,汽车组装成本,第38页,封装示例,3-3,实体,法拉力企业,实体,迪斯尼汽车企业,Auti Ltd,.,Buto Ltd,.,属性,电话号码,电子邮箱,产品种类,现有存货数量,雇员详情,所需物料详情,属性,电话号码,电子邮箱,汽车种类,汽车规格,雇员详情,库存详情,经销商详情,方法,接收订单,备件制造方法,计算备件制造成本,计算利润率,方法,发出订单,汽车组装方法,计算汽车组装成本,计算工资,发出订单,编制必要汇报,第39页,设置器和访问器方法,设置私有组员变量值方法称为设置器方法,通常为:,public void setX(类型 x),this.x=x;,访问私有组员变量值方法称为访问器方法,通常为:,public 类型 getX(),return x;,第40页,封装举例,class Person,private,int age;,public void setAge(int i),if(i130),return;,age=i;,public int getAge(),return age;,将其设为私有,方法设为公有,第41页,封装好处,封装优点,可进行数据检验,便于修改,增强代码可维护性,隐藏类实现细节,第42页,任务三,定义Person类子类Student类,第43页,继承性,类继承是指一个类能够继承其它类非私有组员,实当代码复用。,被继承类称为父类,继承父类后产生类称为子类。,第44页,继承,父 类,子类,父类/子类是相对,Cow,类,Lion,类,Tiger,类,Animals,类,Carnivorous,类,Herbivorous,类,Coat,类,第45页,继承实现,class SubClass extends SuperClass,Java中继承是经过extends关键字来实现。,关键字,第46页,任务三实现,class Student extends Person,String school;,public void study(),System.out.println(Studding);,public static void main(String args),Person p=new Person();,p.name=Tom;,p.age=30;,p.getInfo();,Student s=new Student();,s.name=John;,s.age=16;,s.school=“清华大学”;,s.getInfo();,s.study();,第47页,继承特点,继承特点,含有层次结构,子类继承了父类非私有属性和方法,Object是全部类超类,注意:,在Java语言中,只允许单继承。,第48页,继承优点,继承优点,代码可重用性,父类属性和方法可用于子类,设计应用程序变得愈加简单,能够轻松地自定义子类,第49页,结构方法继承,结构方法不能继承,但子类在创建对象时要对继承来自父类组员进行初始化,所以,在创建子类时除了执行子类结构方法外,还需要调用父类结构方法,详细遵照标准以下:,当子类未定义结构方法时,创建对象时将无条件地调用父类无参结构方法;,对于父类含参数结构方法,子类能够在自己结构方法中使用super调用它,但super调用语句必须是子类结构方法中第一个可执行语句;,子类在自己结构方法中假如没有用super明确调用父类结构方法,则在创建对象时,将自动先执行父类无参结构方法,然后再执行自己定义结构方法。,第50页,任务四,对上例中Student 类继承了父类全部非私有方法进行重写,第51页,多态性,方法重写实现,动态多态性,(运行时多态),方法重载实现,静态多态性,(编译时多态),多态性,第52页,方法重写,方法重写,子类和父类方法含有相同名称和类型,用子类对象调用子类中重写方法,super.methodname(),用于调用父类中方法,第53页,class Rectangle,int length;,int width;,Rectangle(int len,int wid),length=len;,width=wid;,/*计算矩形周长.*/,void getPerimeter(),System.out.println(“矩形周长为,+(2*(length+width);,方法重写,class Square,extends Rectangle,Square(int len),length=len;,/*计算周长.*/,void getPerimeter(),System.out.println(“正方形周长为+(4*length);,public static void main(String arg),Rectangle rectObj=new Rectangle(10,15);,rectObj.getPerimeter();,Rectangle sqObj=new Square(15);,sqObj.getPerimeter();,调用父类方法,调用子类方法,第54页,任务四实现,class Person,public String name;,public int age;,public void getInfo(),System.out.println(name);,System.out.println(age);,public void eat(),System.out.println(Its delicious!);,class Student extends Person,String school;,public void study(),System.out.println(Studding);,public void getInfo(),System.out.println(name);,System.out.println(age);,System.out.println(school);,public static void main(String args),Person p=new Person();,p.name=Tom;,p.age=30;,p.getInfo();,Student s=new Student();,s.name=John;,s.age=16;,s.school=塔山小学;,s.getInfo();,s.study();,第55页,多态性,【实战】,:经过分析,编程实现上图,第56页,组员方法覆盖应注意问题,覆盖方法方法名、返回类型和参数列表必须与它所覆盖方法相同,覆盖方法不能比它所覆盖方法访问性更低,覆盖方法不能比它所覆盖方法抛出更多异常,第57页,组员变量覆盖,若子类申明了与父类同名变量,则父类变量被隐藏起来,直接使用是子类变量,但父类变量仍占据空间,可经过super或父类名来访问。,第58页,程序运行结果:,Subclass:200,Superclass:100,组员变量覆盖,class A,int x=100;,class B extends A,int x=200;,void print(),System.out.println(Subclass:+x);,System.out.println(Superclass:+super.x);,public static void main(String args),(new B().print();,组员变量覆盖,第59页,类对象之间类型转换,父类对象和子类对象转换需要注意以下标准:,子类对象能够被视为是其父类一个对象,反之则不可。,若一个方法形式参数定义是父类对象,则调用该方法实际参数能够使用子类对象。,若父类对象引用指向实际是一个子类对象,则这个父类对象引用能够用强制类型转换转化成子类对象引用。,第60页,类变量 static 修饰符,我们在Person类中增加一个组员变量国籍,,并假设全部人都来自中国,该怎样实现?,思索?,第61页,类变量,country=China,name=“John”,age=15,name=“rose”,age=14,name=“Tom”,age=16,static,静态变量或类变量,静态变量访问:,类名.变量名,第62页,类变量应用,class Count,public static void main(String args),User u1=new User();,u1.login();,User u2=new User();,u2.login();,class User,static int count=0;,void login(),count+;System.out.println(你是第+count+位访问者);,第63页,类方法 static修饰符,static修饰符修饰方法叫静态方法,目标:使方法独立于类实例,使用类去访问,第64页,类方法,规 则,能够调用其它静态方法,必须访问静态数据,不能使用,super,或,this,关键字,调用静态方法语法为:,cl,assname.methodname();,第65页,类方法应用,public class IsPrime,public static boolean prime(int x),for(int k=2;k=Math.sqrt(x);k+),if(x%k=0),return false;,return true;,Class TestIsPrime,public static void main(String args),for(int m=10;m name.indexOf(),),System.out.println(“该电子邮件地址有效);,else,System.out.println(“该电子邮件地址无效);,第101页,提取字符串方法,方法,说明,public char charAt(int index),此方法用于从指定位置提取单个字符,该位置由索引指定,索引中值必须为非负,public String substring(int index),此方法用于提取从位置索引开始字符串部分,public String substring(int beginindex,int endindex),此方法用于提取 beginindex 和 endindex 位置之间字符串部分,public String concat(String str),此方法用于连接两个字符串,并新建一个包含调用字符串字符串对象,public String replace(char old,char new),此方法用于将调用字符串中出现某个字符全部位置都替换为另一个字符,public String trim(),此方法用于返回一个前后不含任何空格调用字符串副本,第102页,提取字符串,方法,说明,public char charAt(int index),此方法用于从指定位置提取单个字符,该位置由索引指定,索引中值必须为非负。,public String substring(int index),此方法用于提取从位置索引开始字符串部分。,public String substring(int beginindex,int endindex),此方法用于提取 beginindex 和 endindex 位置之间字符串部分。,public String concat(String str),此方法用于连接两个字符串,并新建一个包含调用字符串 String 对象。,public String replace(char old,char new),此方法用于将调用字符串中出现某个字符全部位置都替换为另一个字符。,public String trim(),此方法用于返回一个前后不含任何空格调用字符串副本。,.,char ch;,ch=orange.charAt(3);,.,它将从,index(3)中提取单个字符串,“n”并将其存放在变量 ch 中,第103页,提取字符串举例,public class StringMethods,public static void main(String args),String s=Java is a +platform independent language;,String s1=Hello world ;,String s2=Hello;,System.out.println(s);,System.out.println(index of t=+s.indexOf(t);,System.out.println(last index of t=+s.lastIndexOf(t);,System.out.println(index of(t,10)=+s.indexOf(t,10);,System.out.println(s1.substring(3,8);,System.out.println(s2.concat(World);,System.out.println(s2.replace(l,w);,System.out.println(s1.trim();,第104页,任务七实现,public class GetFilename,private String fullPath;,private final char pathSepatator=;,public GetFilename(String fname),fullPath=fname;,public String getName(),int pos=fullPath.lastIndexOf(pathSepatator);,if(pos=-1),return fullPath;,else,return fullPath.substring(pos+1);,public String getPath(),int pos=fullPath.lastIndexOf(pathSepatator);,if(pos=-1),return fullPath;,else,return fullPath.substring(0,pos);,public static void main(String args),GetFilename fn=new GetFilename(F:avamyexamplea.java);,System.out.println(fn.getName();,System.out.println(fn.getPath();,第105页,更改字符大小写方法,Hello,使用,toUpperCase(),方法,HELLO,HELLO,使用,toLowerCase(),方法,hello,语法,public String toUpperCase();,语法,Public String toLowerCase();,第106页,更改字符大小写方法举例,public class StringTest,public static void main(String args),String name=new String(George);,System.out.println(“姓名是+name);,int length=,name.length(),;,System.out.println(“姓名长度为”+length+“个字符);,System.out.println(“姓名用大写形式表示为:);,String nameUppercase=,name.toUpperCase(),;,System.out.println(nameUppercase);,第107页,任务八,判断一个字符串是否为回文,即将一个字符串进行反转,得到字符串与源串相同:比如原始字符串为“aba”,逆转后字符串也为“aba”。,第108页,StringBuffer 类,结构方法,说明,public StringBuffer(),保留 16 个字符空间,public StringBuffer(int length),设置缓存器大小,p,ublic,StringBuffer(Stringvalue),接收字符串参数,用来设置初始内容,,并在不重新分配情况下保留 16 个字符,空间,StringBuffer 用于表示能够修改字符串,使用连接运算符(+)字符串会自动创建字符串缓冲对象,第109页,StringBuffer 类方法,方法,说明,StringBuffer insert(String s),在指定位置插入指定字符串,int length(),确定 StringBuffer 对象长度,int capacity(),返回当前容量,void setCharAt(int pos,char ch),使用 ch 指定新值设置 pos 指定位置上字符,String toString(),转换为字符串形式,StringBuffer reverse(),将此字符序列用其反转形式取代,StringBuffer delete(int start,int end),删除调用对象中从 start 位置开始直到 end 指定索引 1 位置字符序列,StringBuffer deleteCharAt(int pos),删除 pos 指定索引处字符,StringBuffer replace(int start,int end,String s),使用一组字符替换另一组字符。将用替换字符串从 start 指定位置开始替换,直到 end 指定位置结束,第110页,不变性,String类,创建后,直接修改,不变性概念,处理方法,StringBuffer,类,String 对等类,表示可增加和可编,写字符可变序列,将字符插入到字符串中间,或附加到字符串末尾,第111页,不变性举例,public class StringBuf,public static void main(String args),StringBuffer buf=new StringBuffer(Java);,buf.append(“Guide Ver1/”);,buf.append(3);,int index=5;,buf.insert(index,Student);,index=23;,buf.setCharAt(index,.);,int start=24;,int end=25;,buf.replace(start,end,4);,String s=buf.toString();,/转换为字符串,System.out.println(s);,第112页,任务八实现,public class StringReverse,public static void main(String args),String s=I am a Chinese;,int len=s.length();,StringBuffer dest=new StringBuffer(len);,for(int i=len-1;i=0;i-),dest.append(s.charAt(i);,System.out.println(dest.toString();,第113页,main方法参数,main方法形参为String类数组参数args,args能够用来接收Java命令行传送给Java应用程序数据。比如:,java HelloEcho How are you?123,若要将包含多个空格单词作为一个字符串,可用引号括起来。比如:,java HelloEcho How are you?123,第114页,main方法参数举例,class CommandLine,public static void main(String args),for(int i=0;iargs.length;i+),System.out.println(args+i+:+argsi);,显示全部命令行参数,第115页,Java异常处理,任务九,public class ExceptionRaised,public ExceptionRaised(),public int calculate(int operand1,int operand2),int result=operand1/operand2;,return result;,public static void main(String args),ExceptionRaised obj=new ExceptionRaised();,int result=obj.calculate(9,0);,System.out.println(result);,OS,!,异常情况,异 常,程序突然终止并将控制交给操作系统,在运行时发生错误,第116页,什么是异常,在程序运行过程中发生、会打断程序正常执行事件称为异常(Exception),也称为例外。,比如,零用作除数(产生算术异常ArithmeticException)、,在指定磁盘上没有要打开文件(产生文件未找到异常,FileNotFoundException),数组下标越界(产生数组下标越界异常,ArrayIndexOutOfBoundsException)等,常见,异常,第117页,异常类层次,为内部错误,所以在正常情况下不期望用户程序捕捉它们,Java虚拟机在运行时生成例,外,由系统检测,用户可不做处,理,系统将它们交给缺省异常,处理程序,程序中可预知问题,可能会带来意想不到结果,Java程序必须捕捉或申明全部非运行时异常,第118页,异常处理机制,捕捉异常,申明抛出异常,t,hrows,Try-catch,消极处理方式,主动处理方式,第119页,捕捉异常,捕捉异常是经过try-catch-finally语句实现。,t,ry,f,inally,c,atch,要监控程序语句包含在此块中,以合理方式,捕捉和处理异常,释放资源等,第120页,try 和 catch 块,执行,catch 后程序,继续正常运行,程序控制,引发,代码块,try,c,atch,异常,单 元,第121页,任务九处理方案一,public class ExceptionRaised,public ExceptionRaised(),public int calculate(int operand1,int operand2),int result=0;,try,result=operand1/operand2;,catch(Exception e),System.err.println(发生异常:+e.toString();,e.printStackTrace();,return result;,指明catch能够捕捉并处理异常类型,调用异常类方法,第122页,异常类惯用方法,第123页,实战,阅读以下程序代码,分析程序可能产生异常情况,捕捉并处理异常。,public class ExceptionDemo,int array=1,2,3,4,5,6,7,8,9,0;,public void exceptest(int j),for(int i=0;ij;i+),System.out.println(array+i+=+arrayi);,public static void main(String args),ExceptionDemo ex=new ExceptionDemo();,ex.exceptest(11);,第124页,多重 catch 块2-1,一段代码可能会生成多个异常,当引发异常时,按次序查看每个,catch 语句,并执行第一个类型与异常类型匹配语句,执行其中一条 catch 语句之后,其它 catch 语句将被忽略,try,.,catch(ArrayIndexOutOfBoundsException e),catch(Exception e),第125页,多重 catch 块2-2,try,.,catch(Exception e),catch(ArrayIndexOutOfBoundsException e),使用多重 catch 语句时,异常子类一定要位于异常父类之前。,第126页,多重 catch 块示例,class ExceptionCode,public void calculate(),try,int num=0;,int num1=42/num;,int c=1,2,3,4;,c4=99;,catch(Exception e),System.out.println(父类异常,catch 子句);,catch(ArithmeticException ae),/错误,不能抵达代码,System.out.println(这个子类父类是exception 类,且不能抵达);,class UnreachableCode,public static void main(String args),ExceptionCode obj=new ExceptionCode();,obj.calculate();,第127页,finally 块,try、catch 和 finally 块执行流程,finally子句能够确保,不论try块中是否抛出异常,finally块中语句都会被执行到,这么能够对程序状态作统一管理。,finally语句对增强程序鲁棒性非常主要。,try 块,finally 块,catch 块,无异常,异常,第128页,异常处理块普通形式,try,/要监控错误代码块,catch(Exception e),/Exception e,异常处理程序,finally,/在 try 结束前要执行代码块,第129页,finally块示例,public class SystemException,public static void main(String args),int a=68;,int b=0;,try,System.out.println(a/b);/0用作了除数,catch(ArithmeticException e),System.out.println(“0用作了除数”);,return;,finally,System.out.println(“程序结束”);,思索:假如没有final
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服