1、扬州大学本科生毕业设计摘 要 汽车保险销售管理系统是用来实现家用轿车保险费用的计算和录入功能。论文根据汽车保险销售的实例为开发背景,阐述了构建基于.Net的分布式应用系统的设计开发方法。本文首先对分布式系统体系结构和传统的分布式对象技术进行了分析和比较,然后对.Net框架进行了介绍,在此基础上,论文结合分布式系统的发展趋势和.Net框架的特点提出了基于.Net的采用C#语言的编程方式的分布式系统的解决方案。论文接着结合汽车保险销售管理系统这个实例,重点进行了系统分析、系统设计。在设计方面,系统采用面向对象的思想,进行了系统的总体结构、数据库、子模块、安全性设计。最后给出了系统实现过程中用到的V
2、isual Studio.NET 2005等关键技术。通过系统分析和系统设计,证实了系统分析在系统设计过程中的重要性。本系统基于微软Windows平台,采用SQL Server 2005作为Database Server以.Net Framework作为开发平台,C#作为开发语言。关键词:分布式系统、SQL Server、C#AbstractCar Insurance sales management is used to achieve andentrythe calculation offamily carinsurance cost. This paper is based on the
3、 development of instance of the car insurance sales management. With the background of distributed system, this thesis systematically expands on the technology of building .Net-based distributed application system, combing the teaching activities management information system.At first, the developme
4、nt of distributed system architecture and distributed object technology are analyzed and compared. Then.Net framework are introduced. Based on this, this thesis combines the distributed application system developing trends and the typical of .Net framework, puts the solving schema of distributed sys
5、tem based on .Net. Combining teaching activities, system analysis and system design are discussed emphatically in the thesis. In the system design section, the object-oriented design idea are used and the general structure、database、subsystem、system security are designed.Finally, Visual Studio.NET. S
6、QL Service etc technology to be used in developing the system are given. From the system analysis and design, the importance of system analysis in the process of system design are confirmed.This system based on Windows platform, using SQL Server 2005 as database,C#.Net as programming language.Keywor
7、ds: Distributed System, SQL Server, C#目 录第一章 概述- 1 -1.1系统开发背景及意义- 1 -1.2系统开发关键技术与开发环境- 1 -1.2.1 .Net技术简介- 1 -1.2.2 Microsoft SQL Server技术的简介- 3 -1.2.3 系统运行软件平台- 4 -1.2.4数据库应用系统的层次体系- 4 -第二章 系统分析与设计- 8 -2.1 系统的功能需求- 8 -2.2系统设计- 8 -2.3系统功能结构图- 9 -2.4数据库设计- 10 -2.4.1数据库概念结构设计- 10 -2.4.2数据库需求分析- 11 -2.4
8、.3 数据库结构实现与存储- 12 -第三章 系统功能的实现- 14 -3.1主要功能分析与实现- 14 -3.1.1 整体界面- 14 -3.1.2 车辆信息模块的结构- 15 -3.1.3 保单录入模块的结构- 17 -3.1.4 退出模块的结构- 21 -3.2 各功能模块的部分源代码- 21 -3.2.1主界面模块- 21 -3.2.2 车辆信息录入模块- 22 -3.3.3保单录入模块- 24 -第四章 系统测试- 27 -4.1测试计划- 27 -4.2测试过程- 27 -4.3异常处理与程序调试- 27 -第五章 致 谢- 29 -第六章 参 考 文 献- 30 - - 30 -
9、第一章 概述汽车工业经历了一百多年的发展,对国家经济的发展和腾飞以及对人类社会的文明带来了巨大影响。汽车工业已成为许多国家的支柱产业,随着人们生活水平以及汽车性能的不断提高,人们对汽车的消费和需求也越来越旺盛,世界汽车工业也保持庞大的市场需求和生产规模。近年来,中国汽车市场发展迅猛,以接近40的速度增长。随之而来的汽车保险的销售也越来越得到人们的重视。市面上汽车保险的种类也是五花八门参差不齐。如何有效的管理好这些汽车保险,如何更高的提高工作人员的工作效率也成为了摆在保险公司面前的一个刻不容缓的需要解决的问题。在如此形式下,一种介于汽车保险和用户之间的桥梁,汽车保险销售公司正在不断的产生和发展壮
10、大。1.1系统开发背景及意义随着计算机技术的不断发展,计算机应用于各大领域,并给人们的生活带来了极大的便利,在汽车保险业务系统亦是如此。以往的纸质汽车保险指南或繁杂的网络版本汽车保险指南,都在不同程序上限制了用户出行的方便性。本论文所介绍的便是一个汽车保险销售业务管理系统,以方便用户用最简约的方式,查询到最有用的汽车保险业务的开展。提高工作人员的工作效率和效果,节省人力资源等,提高公司的管理水平,有利于推动公司管理的“无纸化办公”进程。1.2系统开发关键技术与开发环境1.2.1 .Net技术简介.Net首先是一个平台,它定义了一种公用语言子集,这是一种为符合其规范的语言与类库之间提供无缝集成的
11、混合语。.Net统一了编程类库,提供了对下一代网络通讯标准,可扩展标记语言(Extensible Markup Language,XML)的完全支持,使应用程序的开发变得更容易,更简单。Microsoft.Net计划还将实现人机交互方面的革命,微软将在其软件中添加手写和语音识别的功能,让人们能够与计算机进行更好的交流,并在此基础上继续扩展功能,增加对各种用户终端的支持能力。最为重要的是.Net将改变因特网的行为方式:软件将变为服务。与Microsoft的其他产品一样,.Net与Windows平台紧密集成,并且与其他微软产品相比它更进一步:由于其运行库已经与操作系统融合在了一起,从广义上把它称为
12、一个运行库也不为过。.Net框架是.Net平台的基础架构。其强大功能来自于公共语言运行时(Common Language Runtime,CLR)环境和类库。CLR和类库(包括:Windows Forms,ADO.Net和ASP.Net)紧密结合在一起,提供了不同系统之间交叉与综合的解决方案和服务。.Net框架创造了一个完全可操控的、安全的和特性丰富的应用执行环境。这不但使得应用程序的开发与发布更加简单,并且成就了众多种类语言间的无缝集成。.Net的核心组件包括:(1)、一组用于创建互联网操作系统的构件块,其中包括Passport.Net(用于用户认证)以及用于文件存储的服务、用户首选项管理、
13、日历管理以及众多的其他任务。(2)、构建和管理新一代服务的基本结构和工具,包括Visual Studio.Net、.Net企业服务器、.Net Framework和Windows.Net。(3)、能够启用新型智能互联网设备的.Net设备软件。(4)、.Net用户体验。.Net结构包括:(1)、虚拟对象系统类型系统(2)、元数据(3)、公用语言规范(4)、虚拟执行系统简而言之,.Net是一种面向网络、支持各种用户终端的开发平台环境。微软的宏伟目标是让.Net彻底改变软件的开发方式、发行方式、使用方式等等,并且不止是针对微软一家,而是面向所有开发商与运营商。.Net的核心内容之一就是搭建第三代因特
14、网平台,这个网络平台将解决网站之间的协同合作问题,从而最大限度地获取信息。在.Net平台上,不同网站之间通过相关的协定联系在一起,网站之间形成自动交流,协同工作,提供最全面的服务。1.2.2 Microsoft SQL Server技术的简介SQL是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统,可以使用相同的SQL语言作为数据输入与管理的接口。它以记录集合作为操作对象,所有SQL语句接受集合作为输入,返回集合作为输出,这种集合特性允许一条SQL语句的输出作为另一条SQL语句的
15、输入,所以SQL语句可以嵌套,这使他具有极大的灵活性和强大的功能,在多数情况下,在其他语言中需要一大段程序实现的功能只需要一个SQL语句就可以达到目的,这也意味着用SQL语言可以写出非常复杂的语句。结构化查询语言(Structured Query Language)最早是IBM的圣约瑟研究实验室为其关系数据库管理系统SYSTEM R开发的一种查询语言,它的前身是SQUARE语言。SQL语言结构简洁,功能强大,简单易学,所以自从IBM公司1981年推出以来,SQL语言得到了广泛的应用。如今无论是像Oracle、Sybase、DB2、Informix、SQL Server这些大型的数据库管理系统,
16、还是像Visual Foxpro、PowerBuilder这些PC上常用的数据库开发系统,都支持SQL语言作为查询语言。Microsoft SQL server可以帮助初级数据库用户及资深程序员建立与Web及企业数据源轻松实现集成的强大自定义解决方案。检索记录,跟踪信息,Microsoft SQL server将时刻准备帮助您实现智能化工作方式。Microsoft SQL server大大简化了建立功能强大的数据库解决方案以及访问并分析重要数据的任务。它能够改变原有的数据分析方式,轻松创建并发布交互式电子表格,在无需离开Microsoft SQL server的前提下,以多种不同方式动态查看现
17、有的重要信息。现在,为实现最大工作效率,当创建窗体、报表、数据访问页、宏或模块时,您可以撤消或恢复多个操作。使用您所了解的工具在Web上共享数据。将您的窗体或报表保存为数据访问页,以便使用户能够在他们的浏览器中即时查看与编辑数据。在Web站点上访问Office工具,以便下载帮助您提高工作速度的模板、工具、提示及更新。利用功能强大的新型发布工具。这些工具允许您通过诸如扩展标记语言(XML)这样的Internet标准导出数据及相关格式,以供在Web上进行显示。1.2.3 系统运行软件平台操作系统: Windows XP、Microsoft .Net Framework v2.0、VS2005、SQ
18、L Server 2005。1.2.4数据库应用系统的层次体系终端/主机体系结构这是一种早期处理数据所采用的模式,如下图所示。这种体系结构使得用户能够尽可能地使用共享资源,终端所要做的事只是输入命令,显示结果,而有关的一切数据处理都交给了主机去完成。在这样的结构中,由于终端不需要做什么处理工作,所以它可以很简单,也不必随着信息业的发展频繁更新,因此也称“哑”终端,但主机就不一样了,它几乎包揽了有关数据的一切处理工作,这就要求它具有十分高的性能,并且能够随着信息量的增加不断更新。这种模式中,服务器存储所有数据,进行所有处理运算,资源也得到了充分的共享。但是用户界面不友好,主机负载过大。图1.2
19、终端/主机体系结构客户机/服务器体系结构传统的C/S结构是两层的,基本思想是:服务器提供数据的存取和管理等,客户端运行相应的应用,通过网络获得服务器的服务,使用服务器上的数据库资源。与主机/终端模式相比,C/S结构更容易扩充,更加灵活。当信息系统的规模扩大或需求改变时,不必重新设计便可在原有基础上进行扩充和调整,从而保护了己有投资。为了应用客户机/服务器这种体系结构,原来完全放在主机上的应用程序被分成了两部分:客户机端的应用程序和服务器端的应用程序,如图所示。图1.3 客户机/服务器体系结构由于两层结构的C/S系统本身固有的缺陷,使得它不能应用于一些大型的、结构复杂的系统中,由此出现了三层结构
20、的C/S系统,它把两层结构中服务器部分和客户端部分的应用单独划分出来,从而满足了大型应用系统的需求。 典型的数据库应用可分成三部分:即表示部分、应用逻辑部分和数据访问部分。由此,三层C/S结构将应用的三部分明确地进行分割,使其在逻辑上各自独立,并且单独加以实现,分别称之为客户服务器、应用服务器和数据库服务器。与两层C/S结构相比,其应用逻辑部分被明确地划分出来。在硬件实现上,有两种方式:1、客户位于客户机上,应用服务器和数据库服务器位于同一主机上。这种方式在主机具有良好性能的前提下,能保证应用服务器和数据库服务器之间的通信效率,减少客户和应用服务器之间网络上的数据传输,使系统具有好的性能。如图
21、所示。图1.4 三层C/S硬件实现模式12、客户位于客户机上,应用服务器和数据库服务器位于不同主机上。这种方式更加灵活,能够适应客户机数目的增加和应用处理负荷的变动。在增加新的应用逻辑时,可以追加新的应用服务器。系统规模越大,这种方式的优点体现得越明显。如图所示。图1.5 三层C/S硬件实现模式2两种方式在复杂应用下,使整个系统达到高性能的关键是应用服务器和数据库服务器间的数据通信效率,它对于应用服务器和数据库服务器位于不同主机上的第二种方式来说尤为重要。三层C/S模式的功能:1、客户:是应用的用户接口部分,负责用户与应用程序的交互。它接受用户的输入请 求,将结果以适当的形式返回用户,常以图形
22、用户界面(GUI)表现出来。客户的GUI界面应当易于生成和修改,并尽量与其他两层保持独立,以适应应用的变化。2、应用服务器:是应用逻辑处理的核心,是具体业务的实现。它与客户间的数据交往应尽量简洁,客户将请求信息发送给应用服务器,应用服务器返回数据和结果。应用服务器一般和数据库服务器有密切交往,应用服务器向数据库服务器发送SQL请求,数据库服务器将数据访问结果返回给应用服务器。此外,应用服务器也可能和数据库服务器没有交换,而作为客户的独立服务器使用。应用逻辑变得复杂或增加新的应用时,可增加新的应用服务器,它可与原应用服务器驻留于同一主机或是不同主机上。3、数据库服务器:以传统的基于SQL的DBM
23、S实现,它接收应用服务器提出的SQL请求,完成数据的存储、访问和完整性约束等。第二章 系统分析与设计系统分析和设计是信息系统开发的一个重要环节。本章将主要介绍一个基于.Net的汽车保险销售管理系统的功能需求、总体框架、以及系统开发原理等做系统的分析研究,并介绍系统所拥有的特点。2.1 系统的功能需求该系统一般包括对汽车保险的发布、更新、删除、保单信息查询和相关信息的发布、查询、更新、输出等功能。如果人工直接操作的话,工作量将十分庞大,特别是,如果投保人数有几千或上万时,人工操作将变得相当繁杂。用计算机可使人们从繁重而又单调的工作中解脱出来,仅用一些简单的操作便可及时准确地获得需要的信息。汽车保
24、险销售管理系统是一个为适应当前保险销售工作的需求而设计开发的软件系统。该系统的前台采用的是MS Visual Studio.Net2005开发系统,后台数据库采用的是SQL Server 2005数据库。系统功能特点1、操作简单、界面友好:完全控件式的页面布局,使得所有的录入、查询工作更简便; 2、即时可见:对操作的处理将立即在页面的对应栏目显示出来,达到即时发布、即时见效的功能。完整地实现了系统对各项工作的管理要求。2.2系统设计1、基于.Net技术的系统结构模型,该结构是一个三层系统:UI层、业务逻辑层和数据层,如图所示。图2.2 三层结构UI层负责与用户交互,接收用户的输入并将服务器端传
25、来的数据呈现给用户。业务逻辑层负责接收操作界面传来的请求并将请求传给数据层,同时将请求处理结果发给操作界面。数据层是通过.Net操纵数据为事务逻辑层提供数据服务,如存储数据操作结果、返回数据检索结果等。2.3系统功能结构图 汽车保险销售管理系统应该包含如下的几个功能模块:1) 车辆信息录入模块:主要用于汽车牌照,车主姓名,身份证号码,发动机号家庭住址等信息的录入2) 保单录入模块:主要用于查询录入的汽车车辆的保险费用的计算和保单的录入功能3) 退出系统模块:主要功能就是退出系统系统功能结构如图2.3所示:图2.3 系统功能结构图2.4数据库设计2.4.1数据库概念结构设计概念模型是对信息世界的
26、建模,所以概念模型应该能够方便、准确的表示出信息世界中的常用概念。实体-关系模型(Entity-Relationship Module,简称E-R图)是数据库结构设计常用的方法。E-R图提供了表示实体、属性和联系的方法。实体型:用矩形表示,矩形框内写明实体名属性:用椭圆型表示,并用无向边与其相应实体连接起来联系:用菱形表示,菱形框内写明联系名,并用无向边与其有关实体连接起来,同时在边旁边标上联系的类型(1:1,1:n或m:n)。对象类型的组成成份可以抽象为实体的属性。组成成份与对象之间是“is part of”的关系。实际上实体与属性是相对而言的,很难有截然划分的界限。同一事物,在一种应用环境
27、中作为“属性”,在另一种环境中就必须作为“实体”。一般来说,在给定的应用环境中,属性不能再具有需要描述的性质。即属性必须是不可分的数据项,不能再由另一些属性组成。属性不能与其它实体具有联系。联系只发生在实体之间。2.4.2数据库需求分析数据库是信息管理的基础。数据库结构直接关系到各种功能的实现和程序运行的效率。进行数据库设计首先必须准确了解与分析用户需求(包括数据与处理)。需求分析是整个设计过程的基础,是最困难、最耗费时间的一步。需求分析的结果是否准确地反映了用户的实际要求,将直接影响到后面各个阶段的设计,并影响到设计结果是否合理和实用。根据流程图,可以列出以下各模块记录信息所需的数据项和数据
28、结构:数据库:CarsInsurance汽车信息录入数据表:CarInfomation表2.1汽车信息录入数据表表名CarInfomation实体名称汽车信息表主键RegistMark序号字段名称字段说明类型长度属性1RegistMark汽车牌照nvarchar10非空 主键2HostName车主姓名nvarchar20非空3HostID身份证号nvarchar20非空 唯一约束4Address家庭地址nvarchar50非空5Telephone联系电话nvarchar20可空6DriveLisence驾照日期datetime非空7CarType汽车型号nvarchar30非空8Purchas
29、edDate购买日期datetime非空9CarPrice新车价格money非空10CarNo车架编号nvarchar30非空11EngineNo发动机号nvarchar30非空汽车保险录入数据表:CarInsurance表2.2 汽车保险录入数据表表名CarInsurance实体名称保单信息表主键PolicyID序号字段名称字段说明类型长度属性1PolicyID保单编号int4主键 自增12RegistMark汽车牌照nvarchar50非空 CarInfomation表外键3StartDate开始日期datetime非空4EndDate终止日期datetime非空5SignDate签发日期
30、datetime非空 默认为当天日期6PolicyPrice保费总额money非空2.4.3 数据库结构实现与存储1)汽车信息录入数据表:CarInfomation表2.3汽车信息录入表2)汽车保险录入数据表:CarInsurance表2.4汽车保险录入表由于系统在录入保单的时候需要对车辆信息进行查询,所以CarInfomation 和CarInsurance表建立了如下图的关系:表2.5汽车信息表与汽车保险表的关联关系第三章 系统功能的实现基于.Net的汽车保险销售管理系统的设计与实现的任务是对汽车保险销售管理中的工作进行集中处理。通过这个系统,可以使用户从繁杂琐碎的事情中解脱出来,专心投入
31、工作中去,提高公司工作人员的工作效率。3.1主要功能分析与实现3.1.1 整体界面该系统界面下主要具有下面几个模块:车辆信息录入模块,保单录入模块,退出模块其具体如下:3.1整体界面3.1.2 车辆信息模块的结构 车辆信息模块可以实现汽车信息的录入,如汽车牌照,车主姓名,身份证号码发动机号,车架号,型号说明,联系方式,家庭住址,新车的价格等的录入。车牌的字母没有大小写区别。 具体如下图图3.2 车辆信息录入界面1)若档案里面没有记录,需要录入新纪录时,按照要求填好信息之后,点击保存就可以。系统会以Message Box提示添加成功,如下图所示:图3.3 录入成功提示界面2)若对车辆信息进行了重
32、复的添加,当点击保存的时候系统用Message Box提示出现重复添加的提示,如下图所示图3.4 录入信息出错界面3)若操作人员漏填了某项信息而直接点击保存时,系统会用Message Box自动提示漏填的选项,并且在信息补齐了之后才能保存,如下图所示:图3.5 补全信息提示界面3.1.3 保单录入模块的结构保单录入模块可以实现对录入的汽车车辆的保单的创建,保单费用的查询。具体界面如下图所示:图3.6 保单信息录入模块1) 打开保单信息之后,输入所需要投保并且已录入档案的汽车的车牌照,输入成功之后点击计算,就会在保费信息栏出现所对应的资费信息,界面如下图所示图3.7 保单输入界面2) 汽车保单默
33、认的生效日期为创建保单的当天,若顾客指定了某天生效,则可以在生效日期栏目选择对应的生效日期。系统默认的保单有效期为一年。界面如下图所示:图3.8 日期选择界面3) 若所需要投保的汽车信息没有保存在系统中,系统则会用Message Box提示出错信息,具体如下图所示:图3.9 保单录入出错提示界面4) 若顾客对费用没有异议,则可以点击下面的保存按钮来创建保单,为简化编码,保单编号采用自动编号作为保单信息表的主键,将计算后的结果存入数据库表Car Insurance中。系统只存入保费总额。保存成功后清空保单信息窗体中所有文本框的内容和保费总额对应的标签栏内容,并恢复计算按钮和保存按钮的默认设置,窗
34、体运行效果如下图所示,并用Message Box框提示“保存成功”。:图3.10 保单录入成功提示界面3.1.4 退出模块的结构保单创建完成,并且不需要实验本系统,则可以点击退出来退出本系统。3.2 各功能模块的部分源代码3.2.1主界面模块namespace Cars public partial class frmMain : Form public frmMain() InitializeComponent(); private void 退出ToolStripMenuItem_Click(object sender, EventArgs e) Application.Exit(); p
35、rivate void 车辆信息ToolStripMenuItem_Click(object sender, EventArgs e) frmCarInfomation fcaif = new frmCarInfomation(); fcaif.MdiParent = this; fcaif.Show(); private void 添加保单ToolStripMenuItem_Click(object sender, EventArgs e) frmInsurance fin = new frmInsurance(); fin.MdiParent = this; fin.Show(); 3.2
36、.2 车辆信息录入模块 Public.conn.Open(); string sql = String.Format(insert into CarInfomation values(0,1,2,3,4,5,6,7,8,9,10), textBox1.Text.Trim(), textBox2.Text.Trim(), textBox3.Text.Trim(), textBox8.Text.Trim(), textBox7.Text.Trim(), dateTimePicker1.Value, textBox6.Text.Trim(), dateTimePicker2.Value, textB
37、ox9.Text.Trim(), textBox5.Text.Trim(), textBox4.Text.Trim(); SqlCommand comm = new SqlCommand(sql,Public.conn); int reader = comm.ExecuteNonQuery(); if (reader = 1) MessageBox.Show(添加成功!, 系统提示, MessageBoxButtons.OK, MessageBoxIcon.Information); /foreach() else MessageBox.Show(添加失败!, 系统提示, MessageBox
38、Buttons.OK, MessageBoxIcon.Information); catch (Exception ex) MessageBox.Show(ex.Message, 系统错误, MessageBoxButtons.OK, MessageBoxIcon.Stop); finally Public.conn.Close(); /判断是否为空 private void Judge() if (textBox1.Text.Trim().Length = 0) MessageBox.Show(请输入汽车牌照!, 系统提示, MessageBoxButtons.OK, MessageBoxI
39、con.Stop); textBox1.Focus(); else if (textBox2.Text.Trim().Length = 0) MessageBox.Show(请输入车主姓名!, 系统提示, MessageBoxButtons.OK, MessageBoxIcon.Stop); textBox2.Focus(); else if (textBox3.Text.Trim().Length = 0) MessageBox.Show(请输入身份证号!, 系统提示, MessageBoxButtons.OK, MessageBoxIcon.Stop); textBox3.Focus();
40、 else if (textBox4.Text.Trim().Length = 0) MessageBox.Show(请输入发动机号!, 系统提示, MessageBoxButtons.OK, MessageBoxIcon.Stop); textBox4.Focus(); else if (textBox5.Text.Trim().Length = 0) MessageBox.Show(请输入车架号!, 系统提示, MessageBoxButtons.OK, MessageBoxIcon.Stop); textBox5.Focus(); else if (textBox6.Text.Trim(
41、).Length = 0) MessageBox.Show(请输入型号说明!, 系统提示, MessageBoxButtons.OK, MessageBoxIcon.Stop); textBox6.Focus(); else if (dateTimePicker1.Text.Trim().Length = 0) MessageBox.Show(请输入驾照时间!, 系统提示, MessageBoxButtons.OK, MessageBoxIcon.Stop); else if (textBox7.Text.Trim().Length = 0) MessageBox.Show(请输入联系方式!, 系统提示, MessageBoxButtons.OK, MessageBoxIcon.Stop); textBox7.Focus(); else if (textBox8.Text.Trim().Length = 0) MessageBox.Show(请输入家庭住址!, 系统提示, MessageBoxButtons.OK, MessageBoxIcon.Stop); textBox8.Focus();
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922