汽车租赁管理系统,(DOC38页).doc

上传人:牧羊曲112 文档编号:2092264 上传时间:2023-01-09 格式:DOC 页数:38 大小:248KB
返回 下载 相关 举报
汽车租赁管理系统,(DOC38页).doc_第1页
第1页 / 共38页
汽车租赁管理系统,(DOC38页).doc_第2页
第2页 / 共38页
汽车租赁管理系统,(DOC38页).doc_第3页
第3页 / 共38页
汽车租赁管理系统,(DOC38页).doc_第4页
第4页 / 共38页
汽车租赁管理系统,(DOC38页).doc_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《汽车租赁管理系统,(DOC38页).doc》由会员分享,可在线阅读,更多相关《汽车租赁管理系统,(DOC38页).doc(38页珍藏版)》请在三一办公上搜索。

1、海量资源,欢迎共阅长沙学院课程设计说明书题目汽车租赁管理系统学院计数院专业(班级)软件工程姓名学号指导教师杨刚、潘怡起止日期2017/5/29-2017/6/29课程设计任务书课程名称:数据库系统原理课程设计设计题目:汽车租赁管理系统。已知技术参数和设计要求:题目:汽车租赁管理系统1、 某汽车租赁公司汽车租赁管理系统需要如下信息:工作人员信息包括:工号、姓名、性别、联系电话等。客户信息包括:身份证号、姓名、性别、所在单位、联系电话等。车辆信息包括:车牌号、品牌、颜色、座位数、日租价格、日租超公里价格、月租价格、租赁状态、购入日期等。车辆类别信息包括:分类号,库存数。其业务规则描述如下:一个工作

2、人员可以对很多辆车辆进行管理,一辆车也可以被多个工作人员管理;一辆车只能属于一种车辆类别,而一种车辆类别可以包含多辆车;一个客户可以租多辆不同的车。2、系统功能的基本要求:可以实现对车辆、租赁客户的查询,可以查询汽车、客户租赁历史记录。可以按类别统计汽车的租赁金额和剩余的库存数,可以统计某一年龄客户群体对某类汽车的租赁喜好,能模拟客户对汽车的租借、归还业务。各阶段具体要求:1、需求分析阶段l 定义数据项的含义和取值l 定义目标系统的数据流2、概念结构设计阶段l 画出实体模型E-R图3、逻辑结构设计阶段l 将实体模型转化为关系模型l 给出每个关系的主关键字和函数依赖集l 分析你所设计的关系数据库

3、模式是否属于3NF4、物理设计阶段l 确定所有字段的名称、类型、宽度、小数位数及完整性约束l 确定数据库及表的名称及其组成l 确定索引文件和索引关键字5、数据库安全及维护设计阶段l 设计一个适合的数据库安全策略(用户身份认证、访问权限、视图)l 为了实现复杂的数据完整性约束,设计适当的触发器l 设计一个适合的数据库备份策略6、实施阶段l 要求所有操作必须在查询分析器中用SQL语句或系统存储过程完成。设计工作量:(1)软件设计:完成问题陈述中所提到的所有需求功能。(2)论文:要求撰写不少于3000个文字的电子文档,详细说明各阶段具体要求。工作计划:安排两周时间进行课程设计,软件开发步骤如下,第一

4、周完成14,第二周完成58,论文同步进行;1)选定题目2)需求分析3)概念结构设计4)逻辑结构设计5)物理设计6)数据库安全及维护设计7)数据库上机实现8)答辩计划时间指导老师班级1516周潘怡、杨刚15软件1班1516周潘怡、杨刚15软件2班1516周卓琳、田清龙15软件3班1516周卓琳、田清龙15软件4班1516周张肖霞、马丽15软件5班1516周张肖霞、马丽15软件6班注意事项n 提交电子文档 长沙学院课程设计任务书(每学生1份) 长沙学院课程设计论文(每学生1份) 长沙学院课程设计鉴定表(每学生1份)指导教师签名:日期:教研室主任签名:日期:院长签名:日期:长沙学院课程设计鉴定表姓名

5、学号专业班级设计题目指导教师指导教师意见:评定等级:教师签名:日期:答辩小组意见:评定等级:答辩小组长签名:日期:教研室意见:教研室主任签名:日期:学院意见:院长签名:日期:说明课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;目录一、引言71.1编写目的71.2参考资料7二、需求规约72.1业务描述72.2需求分析8三、数据库环境说明8四、数据库的命名规则83.1数据库对象命名规则83.2数据项编码规则9五、逻辑设计105.1创建与数据库相关的那部分实体关系图(ERD)、表及关系图105.2创建数据库系统的关系模型12六、物理设计126.1表汇总126.2存储过程176.3触发器2

6、1七、安全性设计287.1防止用户直接操作数据库的方法287.2角色与权限28八、数据库管理与维护说明29九、附录:源代码30一、引言1.1 编写目的本文档是汽车租赁系统设计文档的组成部分,编写数据库设计文档的目的是:明确数据库的表名、字段名等数据信息,用来指导后期的数据库脚本的开发。本文档的读者对象是需求人员、系统设计人员、开发人员、测试人员。1.2 参考资料资料名称作者文件编号、版本数据库系统概论王珊、萨师煊2006年5月第4版二、 需求规约2.1业务描述该数据库建立于sqlserver2008r2,环境为windows7系统名称:汽车租赁管理系统。系统的开发者:小组成员系统的用户:租车客

7、户以及租赁公司的工作人员。2.1.2数据库系统要完成的业务流程及工作内容首先完成需求分析,根据需求关系画出ER-图,并写出关系模式。根据ER图用SQLserver创建与数据库相关的表,视图,存储过程以及触发器。系统的功能要求基本实现对车辆,租赁客户的查询。可以查询客户租赁的历史记录。可以查看汽车价格、库存,可以查看汽车的租借、归还、以及费用。2.1.3揭示该数据库的资源需求和设计约束2.2需求分析(1) 车辆管理主要是表示管理员可以对租赁公司现有的汽车的具体信息进行管理,修改汽车基本信息,包括车牌号、汽车颜色、购入日期、类别及租赁状态等,也可以添加新购进来的汽车基本信息,以便更快的投入租赁市场

8、,方便客户了解最新车辆信息以及做出更好的租赁选择。(2)业务管理主要提供对汽车的日常业务进行管理,如查询指定汽车的租赁状态,被租赁的车的车牌号,所生成的订单号,所租车的种类,租车时间、归还时间及租赁金额,查询租车客户的基本信息,以便于管理员更好的管理车辆系统,保障系统安全性。三、 数据库环境说明数据库实例数据库系统数据库部署环境数据库设计工具数据库存放位置说明汽车租赁Sqlserver2008r2Windows7Sqlserver2008r2Microsoftofficevisio2003E:sqlSQL实例用途说明四、 数据库的命名规则3.1数据库对象命名规则:数据库对象命名规则备注表英文命

9、名例如:car汽车表存储过程proc_功能描述字符串例如:proc_car汽车查询的存储过程触发器功能命名例如:delete_car删除汽车视图View_功能描述字符串例如:view_rent查看租借信息表3.2数据项编码规则:数据项命名规则数据类型长度范围备注汽车编号所在地+字母号+数字Varchar类型10位租赁状态TrueorfalseBit类型订单号流水号Varchar类型10位客户号字母+数字编号Varchar类型10位工作人员编号数字Varchar类型10位汽车类型号字母Varchar类型10位五、 逻辑设计5.1创建与数据库相关的那部分实体关系图(ERD)、表及关系图表custo

10、mersCusNoPYVarchar(10)NOTNullCusNameVarchar(10)NOTNullCusSexVarchar(2)NOTNullCusAgeVarchar(4)NOTNullCusPhoneVarchar(10)CusCompanyVarchar(10)NOTNullCusIdentityVarchar(10)NOTNull表rentRecordPYVerchar(10)NotnullRentDatedateNotnullReturnDatedateNotnullCusNoVerchar(10)NotnullCarNoVerchar(10)NotnullRecordc

11、ostVerchar(100NotNull表carCarNoPYVerchar(10)NotnullCarColorVerchar(10)NotnullCarDatedateNotnullCarClassNoFYVerchar(10)NotnullCarStatebitNotnull表carclassCarClassNoPYVerchar(10)NotnullCarClassCntVarchar(10)NotnullCarClassDayPriceVerchar(10)NotnullCarClassDayPriceExceedVerchar(100NotnullCarClassMonthPri

12、ceVerchar(10)NotnullCarClassSeatVerchar(10)Notnull表workerWorkNoPYVerchar(10)NotnullWorkPassWordVerchar(10)NotnullWorkNameVerchar(10)NotnullWorkSexVerchar(2)NotnullWorkPhoneVerchar(10)表manageWorkNoPYVerchar(10)NotnullCarNoPYVerchar(10)Notnull5.2创建数据库系统的关系模型1.工作人员(工号、密码、姓名、性别、联系电话)2.客户信息(身份证号、密码、姓名、性别

13、、所在单位、联系电话)、3.车辆信息(车牌号、品牌、座位数、颜色、租赁状态、购入日期、分类号)4车辆类别(分类号、库存数、日租价格、日租超公里价格、月租价格、月租超公里价格、品牌)5.管理(工号、车牌号)备注:(工号和车牌号共同作为管理表的主键,同时也是外键)6.租赁(订单号、身份证号、车牌号、租赁日期、归还日期、租赁总金额)六、 物理设计6.1表汇总表名功能说明car存储车辆信息carclass存储车辆类别的信息rent存储租赁的信息customers存储客户信息worker存储工作人员的信息manage存储工作人员和车辆之间的关系表名car数据库用户Car_rent主键CarNo索引字段C

14、arClassNo序号字段名称数据类型允许为空Y/N唯一Y/N区别度默认值约束条件/说明1CarNovarchar(10)NY高无主键2CarClassNovarchar(10)NN高无外键3CarStatebit(2)NN低00租赁状态4CardatedateNN低无购入日期5CarColorvarchar(10)NN低无汽车颜色sql脚本DROPTABLEIFEXISTScar;CREATETABLEcar(CarNovarchar(10)NOTNULL,CarColorvarchar(10)NOTNULL,CarDatedateNOTNULL,CarStabit(10)NOTNULL,C

15、arClassNovarchar(10)NOTNULL,PRIMARYKEY(CarNo),KEYCarClassNo(CarClassNo),CONSTRAINTCarClassNoFOREIGNKEY(CarClassNo)REFERENCEScarclass(CarClassNo)表名carclass数据库用户Car_rent主键CarClassNo序号字段名称数据类型允许为空Y/N唯一Y/N区别度默认值约束条件/说明1CarClassNovarchar(10)NY高无主键2CarClassCntvarchar(10)NN低无库存数3CarClassSeatbit(2)NN低无座位数4C

16、arClassDayPrice2dateNN低无日租价格5CarClassDayPrice1varchar(10)NN低无日租超公里价格6CarClassMonthPricevarchar(10)NN低无月租价格7CarClassBrandvarchar(10)NN低无车辆品牌sql脚本DROPTABLEIFEXISTScarclass;CREATETABLEcarclass(CarClassNovarchar(10)NOTNULL,CarClassCntvarchar(10)NOTNULL,CarClassDayPrice1varchar(10)NOTNULL,CarClassDayPric

17、e2varchar(10)NOTNULL,CarClassMonthPricevarchar(10)NOTNULL,CarClassBrandvarchar(10)NOTNULL,CarClassseatvarchar(10)NOTNULL,PRIMARYKEY(CarClassNo)表名customer数据库用户Car_rent主键CusNo序号字段名称数据类型允许为空Y/N唯一Y/N区别度默认值约束条件/说明1CusNovarchar(10)NY高无主键2CusPasswordvarchar(10)NN高无登录密码3CusNamevarchar(10)NN低无客户姓名4CusSexvarc

18、har(10)NN低无客户性别5CusAgevarchar(10)NN低无客户年龄6CusPhonevarchar(10)NN低无客户电话7CusCompanyvarchar(10)NN低无公司sql脚本DROPTABLEIFEXISTScustomer;CREATETABLEcustomer(CusNovarchar(10)NOTNULL,CusNamevarchar(10)NOTNULL,CusSexvarchar(2)NOTNULL,CusAgevarchar(4)NOTNULL,CusPhonevarchar(20)NOTNULL,CusCompanyvarchar(20)NOTNUL

19、L,CusPasswordvarchar(10)NOTNULL,PRIMARYKEY(CusNo)表名worker数据库用户Car_rent主键WorkNo序号字段名称数据类型允许为空Y/N唯一Y/N区别度默认值约束条件/说明1WorkNovarchar(10)NY高无主键2WorkPasswordvarchar(10)NN低无密码3WorkNamevarchar(10)NN低无姓名4WorkSexvarchar(10)NN低无性别5WorkPhonevarchar(10)NN低无电话sql脚本DROPTABLEIFEXISTSworker1;CREATETABLEworker1(WorkNo

20、varchar(10)NOTNULLDEFAULT,WorkPasswordvarchar(10)DEFAULTNULL,WorkNamevarchar(10)DEFAULTNULL,WorkSexvarchar(10)DEFAULTNULL,WorkPhonevarchar(10)DEFAULTNULL,PRIMARYKEY(WorkNo)表名rent数据库用户Car_rent主键RecordNo索引CarNo、CusNo序号字段名称数据类型允许为空Y/N唯一Y/N区别度默认值约束条件/说明1RecordNovarchar(10)NY高无主键2CarNovarchar(10)NN高无外键3C

21、usNovarchar(10)NN低无外键4RecordCostvarchar(10)NN低无总金额5RecordRentDatevarchar(10)NN低无租赁时间6RecordReturnDatevarchar(10)NN低无归还时间sql脚本DROPTABLEIFEXISTSrent;CREATETABLErent(RecordNovarchar(10)NOTNULL,RecordRentDatedatetimeNOTNULL,RecordReturnDatedatetimeNOTNULL,CusNovarchar(10)NOTNULL,CarNovarchar(10)NOTNULL,

22、RecordCostvarchar(10)DEFAULTNULL,PRIMARYKEY(RecordNo),KEYCusNo(CusNo),KEYCarNo(CarNo),CONSTRAINTCarNoFOREIGNKEY(CarNo)REFERENCEScar(CarNo),CONSTRAINTCusNoFOREIGNKEY(CusNo)REFERENCEScustomer(CusNo)表名Wmanage数据库用户Car_rent主键CarNo、WorkNo索引CarNo序号字段名称数据类型允许为空Y/N唯一Y/N区别度默认值约束条件/说明1WorkNovarchar(10)NY高无主键2C

23、arNovarchar(10)NN高无主键sql脚本DROPTABLEIFEXISTSmanege;CREATETABLEmanege(WorkNovarchar(10)NOTNULLDEFAULT,CarNovarchar(10)NOTNULLDEFAULT,PRIMARYKEY(WorkNo,CarNo),KEYCarNo(CarNo),CONSTRAINTmanege_ibfk_1FOREIGNKEY(CarNo)REFERENCEScar(CarNo),CONSTRAINTWorkNoFOREIGNKEY(WorkNo)REFERENCESworker1(WorkNo)6.2 存储过程

24、6.2.1 查询每辆车的状态和库存数关键代码usecar_rentgoCREATEPROCEDUREproc_carasselectcar.CarNo,car.CarState,carclass.CarClassCntfromcar,carclasswherecar.CarClassNo=carclass.CarClassNo6.2.2查询所输入客户账号的租赁历史记录关键代码usecar_rentgocreateprocedureproc_customers(CusNovarchar(10)asselectrent.Record,rent.RentData,rent.RetunDate,ren

25、t.RecordCost,rent.CusNo,car.CarNo,carclass.CarClassBrandfromrent,car,carclasswhereCusNo=CusNoandrent.CarNo=car.CarNoandcar.CarClassNo=carclass.CarClassNo;执行execproc_customersA016.2.3查询输入客户账号的租赁历史记录关键代码usecar_rentgocreateprocedureproc_car_rent(CarNovarchar(10)asselectrent.Record,rent.RentData,rent.Re

26、tunDate,rent.CarNo,rent.CusNo,rent.RecordCostfromrentwhererent.CarNo=CarNo;执行execproc_car_rent湘A88886.2.4查询通过输入订单号查询订单信息关键代码usecar_rentgocreateprocedureproc_record(Recordvarchar(10)asselectrent.Record,rent.RentData,rent.RetunDate,rent.CusNo,rent.RecordCostfromrentwhererent.Record=Record;执行execproc_r

27、ecord16.2.5通过输入类别统计汽车的租赁金额和剩余的库存数关键代码usecar_rentgocreateprocedureproc_carclassno(carclassnovarchar(10)asselectcarclass.CarClassDayPrice1,carclass.CarClassCntfromcarclasswherecarclass.CarClassNo=carclassno;执行execproc_carclassnoA6.2.6删除一辆车关键代码usecar_rentgocreateprocedureproc_delete_car(carnovarchar(10

28、)asdeletefromcarwherecar.CarNo=carno执行execproc_delete_car湘B88886.2.7删除一条记录关键代码usecar_rentgocreateprocedureproc_delete_rent(recordvarchar(10)asdeletefromrentwhererent.Record=record执行execproc_delete_rent26.2.8还车(修改还车日期,默认没还车前,还车日期等于借车日期,只有当没还过车的时候才能修改还车日期)关键代码usecar_rentgocreateprocedureproc_return_ca

29、r(recordvarchar(10),returndatedate)asupdaterentsetRetunDate=returndatewherereturndaterent.RetunDateandDATEDIFF(DAY,rent.RentData,rent.RetunDate)=0执行execproc_return_car1,2016-8-176.3触发器6.3.1输入新的车牌号及信息,此车辆所对应车辆类别的库存数自动增加关键代码usecar_rentgoCreateTriggeradd_newcarOncarafterinsertAsUPDATEcarclassSETCarClas

30、sCnt=CarClassCnt+1WHEREcarclass.CarClassNoIN(SELECTCarClassNofromINSERTEDi)GO6.3.2删除车牌号及信息,此车辆所对应车辆类别的库存数自动减少关键代码usecar_rentgoCreateTriggerdelete_carOncarafterdeleteAsUPDATEcarclassSETCarClassCnt=CarClassCnt-1WHEREcarclass.CarClassNoIN(SELECTCarClassNofromdeletedi)GO6.3.3:当产生一个新的订单时,订单中所预订车辆所对应车辆类别的

31、库存数自动减少。(借车时)关键代码usecar_rentgoCreateTriggerrent_carOnrentafterinsertAsUPDATEcarclassSETCarClassCnt=CarClassCnt-1whereCarClassNoin(selectCarClassNofromcarwhereCarNoin(selectCarNofromrentwhereCarNoin(selectCarNofrominserted)GO6.3.4修改订单还车日期时时,订单中所预订车辆所对应车辆类别的库存数自动增加。(还车时)关键代码usecar_rentgoCreateTriggerr

32、eturn_carOnrentafterupdateAsUPDATEcarclassSETCarClassCnt=CarClassCnt+1whereCarClassNoin(selectCarClassNofromcarwhereCarNoin(selectCarNofromdeleted)Go6.3.5当产取消一个订单时,订单中所预订车辆所对应车辆类别的库存数自动增加关键代码usecar_rentgoCreateTriggerdelete_rent_carOnrentafterdeleteAsUPDATEcarclassSETCarClassCnt=CarClassCnt+1whereCa

33、rClassNoin(selectCarClassNofromcarwhereCarNoin(selectCarNofromdeletedwherecar.CarState=false)GO6.3.6当产生一个新的订单时,订单中所预订车辆的租赁状态由空闲状态(ture)变为预订状态(false)(借车时)关键代码usecar_rentgoCreateTriggerrent_state_carOnrentafterinsertAsupdatecarsetCarState=falsewhereCarNoin(selectCarNofromrentwhereCarNoin(selectCarNofr

34、ominserted);GO6.3.7改订单还车日期时时,订单中所预订车辆的租赁状态由预订状态(false)变为空闲状态(ture)。(还车时)关键代码usecar_rentgoCreateTriggerreturn_state_carOnrentafterupdateAsUPDATEcarsetCarState=truewhereCarClassNoin(selectCarClassNofromcarwhereCarNoin(selectCarNofromdeleted)Go6.3.8当取消一个新的订单时,订单中所预订车辆的租赁状态由空闲状态(false)变为预订状态(ture)关键代码us

35、ecar_rentgoCreateTriggerdelete_rent_state_carOnrentafterdeleteAsupdatecarsetCarState=truewhereCarNoin(selectCarNofromdeletedwherecar.CarState=false);GO6.3.9修改订单还车日期时时,更新实际花费。(还车时)关键代码usecar_rentgoCreateTriggerreturn_car_priceOnrentafterupdateAsdeclarepricevarchar(10)selectprice=(selectCarClassDayPri

36、ce1fromCarClasswhereCarClassNoin(selectCarClassNofromCarwhereCarNoin(selectinserted.CarNofrominserted,deletedwhereinserted.Record=deleted.Record)UPDATErentSETRecordCost=price*(DATEDIFF(DAY,rent.RentData,rent.RetunDate)+1)whereRecordin(selectinserted.Recordfrominserted,deletedwhereinserted.Record=del

37、eted.Record)Go七、 安全性设计7.1防止用户直接操作数据库的方法关键代码execsp_addlogin1,123456,car_rent-worker管理员execsp_grantdbaccess1,workerexecsp_addloginA01,123456,car_rent-customers用户execsp_grantdbaccessA01,customers7.2角色与权限关键代码worker拥有所有权限grantalloncartoworkerwithgrantoptiongrantalloncarclasstoworkerwithgrantoptiongrantal

38、lonrenttoworkerwithgrantoptiongrantallonworkertoworkerwithgrantoptiongrantallonmanagetoworkerwithgrantoptiongrantalloncustomerstoworkerwithgrantoption用户拥有查看customer和car的权限grantallonselect_customerstocustomersgrantallonselect_cartocustomers角色可以访问的表与列操作权限Worker可访问所有表完全控制权限Customers查看客户表视图查看查看汽车表视图查看查看

39、租赁表视图查看八、 数据库管理与维护说明要保证数据库的安全和可靠就需要对其日常管理进行全面的掌控和及时的维护,以此获得更加安全的数据库环境。具体的做法有以下几点:(1)定期对用户和密码进行维护前面提及的管理的安全性是十分重要的,因此对数据库的用户和密码应当进行定期的维护和管理,借助动态化的变更来获得安全性的提高。为了保证系统的安全性,系统管理人员应当按照系统运行的实际情况,对系统进行强制性的维护,执行一系列的安全保证措施。其中定期修改用户密码就是一种较为有效的措施,操作是通过调用系统过程中的sp-password来完成的。通过这个操作对原有的老的密码进行更换,并形成新的密码供用户使用。在完成一

40、个SQLServer的安装后,就会有一个对应的管理员用户sa出现,其拥有的是最高的管理权限,通常为系统的管理人员拥有,这个sa的重要性前面已经提及,所以在管理中对sa级别的密码也应当注意定期的修改。(2)授权给信息表用户设置密码和用户验证的手段是控制用户访问数据库的合法性,而为每个数据库中的信息表用户进行授权就是为了保证用户的合法权利,即对不同的信息表用户划定某种访问的特权。所以给信息表用户授权是一种实时化确定访问用户权限的措施,是有效的提高系统安全性的重要手段。同时也是系统管理员需要进行的一项日常管理工作。(3)对数据库数据资料的维护数据库随着计算机技术的发展而变得越来越庞大,同时在与网络相

41、结合实现了网络连接和访问的功能,数据的备份和恢复工作就成为了数据库数据资料管理的重要内容。因为数据资料是数据库的核心,对其保护和备份显然是数据库管理的核心。1)数据库备份管理每个数据库都应当在创建后就进行卸出,从而提供一个装入度的基点。在此后就会按照一定的时间点进程周期表卸出。除了按照计划的卸出管理之外,还应当对每次运行没有日志的操作后进行卸出数据库的操作。这是保证数据库资料得到及时备份的重要操作过程,也是对日常管理的要求2)数据库事务日志的备份在系统管理中,事务日志的备份空间要远远小于备份数据库的资源空间,因此在对其进行备份的时候,操作频率要大于对数据库的备份,即频繁操作是其突出特征,以此便于随时掌控访问的记录,减少丢失数据的可能性。通常都是采用DUMPTRAN的命令来执行单独备份日志3)数据库系统恢复管理数据库在完成各项操作和功能的时候,就会涉及到数据库重装,然后在装入前完成卸出日志。对数据库的备份和事务日志备份,就是为了防止出现意外的时候,可以完整的恢复数据库。当出现意外发生时,已经完成操作的数据和日志都

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号