电子商务课程设计报告《校园卡设计》.doc

上传人:牧羊曲112 文档编号:4267532 上传时间:2023-04-12 格式:DOC 页数:46 大小:2.16MB
返回 下载 相关 举报
电子商务课程设计报告《校园卡设计》.doc_第1页
第1页 / 共46页
电子商务课程设计报告《校园卡设计》.doc_第2页
第2页 / 共46页
电子商务课程设计报告《校园卡设计》.doc_第3页
第3页 / 共46页
电子商务课程设计报告《校园卡设计》.doc_第4页
第4页 / 共46页
电子商务课程设计报告《校园卡设计》.doc_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《电子商务课程设计报告《校园卡设计》.doc》由会员分享,可在线阅读,更多相关《电子商务课程设计报告《校园卡设计》.doc(46页珍藏版)》请在三一办公上搜索。

1、电子商务课程设计报告项目名称 校园卡管理系统 目 录一 问题定义3二 可行性研究报告41引言42可行性研究的前提53 对现有系统的分析84 所建议的系统95可选择的其他系统方案116投资及效益分析117 社会因素方面的可行性11三 需求分析121引言122.任务概述133.需求规定134运行环境规定23四 结构化分析、设计部分23一 总体设计说明书231引言232总体设计243 接口设计254 运行设计275 系统数据结构设计276 系统出错处理设计287 数据流划分28二、详细设计291引言292 入口程序entry() 设计说明303 查询模块search() 设计说明314 消费模块pa

2、y() 设计说明325存款模块deposit() 设计说明33五、面向对象分析、设计部分341引言342对象模型344功能模型373动态模型38六、界面,代码421.权限界面422提示界面433消费界面434 学生查询界面455挂失界面466管理员界面46七、软件测试报告471引言472静态测试473动态测试47八、课程设计总结501.结构化分析、设计与面向对象分析、设计的不同502.对概念、原理和方法的体会523.参考文献和资料53一 问题定义校园卡管理系统 是一套针对大学校园食堂饮食交费,一般消费等方面的信息管理系统,它包括了同学在校内消费各方面内容:刷卡消费、查询、存款,学生信息管理等。

3、方便的对同学饭卡信息进行各项操作,定时进行数据的备份更新,保持数据的一致性和准确性,各方面的内容应该相互联系,最终产生各种查询统计报表,以供同学进行检查。校园卡卡管理系统 的主要任务就是把人们从繁琐的交费,找零工作中解放出来,用计算机实现对销售合同资料进行存款,消费,查询、修改、删除以及存储等功能。同时,用计算机能够快速准确地完成共档案资料的统计和汇总工作,迅速地打印出各种报表资料以供使用。进行数据库设计的首要任务是考虑信息要求,也就是数据库要存入什么样的数据。当然,创建数据库并非仅仅为了存储数据,更主要的目的是从中提取有用信息。所以除了要考虑数据库存储什么数据外,还应该考虑数据的存储方式、目

4、的、用途以及性能要求。1背景:用户通过系统首页面,创建饭卡,存入钱。消费时根据饭卡ID判断该用户是否是合法用户,同时进行消费操作。管理员可以对系统进行新建饭卡、注销饭卡、修改饭卡信息等操作,而学生进行消费的操作。2项目目标:建立校园卡管理系统,使管理员和拥护和客户都能够方便的进行销售合同的查询。3项目范围:硬件和软件利用现有微机和数据库等软件进行系统的开发和研制。4系统设计设想:该系统具有数据处理(饭卡信息的增加和删除)、信息修改、多种方式查询、备份、以及多种条件方式的打印。 5可行性研究:进行1天的可行性研究。二 可行性研究报告 1引言 11编写目的 进一步分析和澄清问题定义,推导出系统的逻

5、辑模型,对以后的行动方针提出建议。如果问题没有可行的解,那么花费在这项工程上的任何时间、资源、人力、经费、都是无谓的浪费。为了避免这些,我们要用最小的代价在尽可能短的时间内确定问题是否能够解决。对此项的报告即为可行性研究报告。12背景 a所建议开发的软件系统的名称:校园卡管理系统; b本项目的任务提出者:软件工程课程设计开发者:李晓晶 曲博 沈信伟 胡文国用户:刷卡消费人员13 定义:本文件中用到的专门术语的定义及外文首字母词组的原词组:(1) 系统流程图:用图形符号以黑盒子形式描绘系统的每个部件(程序,文档,数据库,人工过程)。表达数据在系统各部件之间流动的情况。(2) 数据流图(DFD):

6、没有任何具体的物理部件,描绘信息流和数据从输入移动到输出的过程中经受的变换。(3) 数据字典(DD):是对数据流图中包含的所有元素的定义的集合。其内容为数据流、数据元素、数据存储、处理。2可行性研究的前提 21要求a功能:1实现消费使用卡片扣钱(取代现金);2在固定保险的地方存钱;3有消费记录功能;4有挂失功能。b性能;1刷卡消费时,要求快速,准确,可撤销;2在查询消费记录时,达到一般的查询速度。c. 输出:在刷卡器上,每次消费时:1存额2此次消费额3剩余额刷卡器上,额外的信息如:1出错信息2锁卡信息3剩余不多提示信息报单:1每学年或者每月,可选择性的(需学生主动要求)输出消费记录报单。详细程

7、度可由使用者,自行定义。2存款时,可选择性的(需学生主动要求)输出存款记录报单。3注销卡时,返还剩余额(钱)。d输入:刷卡器上,每次消费时:1卡ID(可由读卡器自动读入)2消费额3操作符(确认,撤消,后退,计算(加减乘除),存款(有权限限制),其他功能)数据库管理电脑上:1输入学生信息2学生存款额(由读卡器端输入器完成)3查询,修改,删除功能输入 e在安全与保密方面的要求:1使用者之间的ID号不能重复;2 ID号不被他人轻易知道;3即便知道也能有快速相应的机制,予以弥补;4有使用追踪功能,可以让用户了解,自己使用的情况。f完成期限:2007年7月18日之前完成.22目标 主要开发目标: a处理

8、速度的提高;b安全系统的改进;c用户使用上的便捷。23条件、假定和限制 a所建议系统的运行寿命的最小值:1年; b进行系统方案选择比较的时间:1天; c经费、投资方面的来源和限制:无; d法律和政策方面的限制:无; e硬件、软件、运行环境和开发环境方面的条件和限制:无; f可利用的信息和资源:图书馆;24进行可行性研究的方法 从以下几个方面研究解法的可行性:(1)经济可行性分析:从开发软件系统所需的总时间,总费用,及其中可行性研究所需的费用,以及系统软件开发完成后,所能预计的市场占有率等方面进行考虑,看该软件系统是否能达到一定的经济效益。(2)技术可行性分析:由于新的系统需要对变化的数据进行动

9、态的存贮,即数据库中数据要随着管理员对系统的操作来随时更新,并且具有定时数据备份功能。因此要从技术角度方面研究者性功能是否可以是实现。(3)操作可行性分析:要分析设计出的系统在用户的操作上是否简便,这一点很重要,因为它会影响到用户对该系统的反应。3 对现有系统的分析分析现有系统的目的是为了进一步阐明建议中的开发新系统或修改现有系统的必要性。(因为本身开发的系统就是想尽量接近于现有系统。所以对于这次试验,这一步没有什么实际意义) 31处理流程和数据流程 现有系统的基本的处理流程和数据流程。此部分请浏览4. 2中的数据流程图32工作负荷 人工操作频繁加减存款。工作繁琐,枯燥,容易出错,完成工作所需

10、要的时间较长,工作效率比较低。33费用开支 由于运行现有系统所引起的费用开支,如人力、设备、空间、支持性服务、材料等项开支以及开支总额。(由于缺房相关调查,此处从略)34人员 由于现有系统的技术性含量比较低,操作不便,工作量大,因此需要较多的人才能完成工作。而新系统将具有较高的技术操作性,但它确使工作变得较为简便,因此只需要少量的高素质人才就可完成。35设备 1,读卡器(带输入器)2,中央电脑(数据库)36局限性人工处理的主要局限性表现在系统依赖于大量的人力和物质投入,工作效率较低和成本较高。4 所建议的系统 用来说明所建议系统的目标和要求将如何被满足。41对所建议系统的说明 使用饭卡可以快速

11、便捷的进行消费。中央电脑-数据库对饭卡的操作相应至关重要。在高峰时刻,也能保证,存款,消费无错误,并且可记录,撤销操作。42处理流程和数据流程系统的处理流程数据流程43改进之处 相对于原有系统,新系统较大的方便了管理员的工作。比原先系统效率更高,功能更全。44影响 1对设备的影响 设备不变 2对软件的影响 新系统使用具有较高技术的软件(例如数据库软件等)2对对象的影响:新系统要求对客户、合同、操作人员有较为详细地记录,在其它方面没有什么带大的变化。3对系统运行过程的影响:系统的运行更加高速、有效。4对开发的影响:新系统的开发环境要求不高,只需要现有设备就可以完成,且不会在开发过程中影响到现有系

12、统的使用。5对地点和设施的影响:开发新系统不用考虑地点等方面的问题。6技术条件方面的可能性开发新系统的技术虽较现有系统比较先进,但总的来看,这些技术均已比较成熟,因此新系统的俄开发在技术方面应该不会有带大的困难。45局限性 因为时间有限,软件局限性很大。46技术条件方面的可行性 a在当前的限制条件下,该系统的功能目标能够达到; b利用现有的技术,该系统的功能能实现; c对开发人员的数量和质量的要求能满足; d在规定的期限内,本系统的开发能够完成。5可选择的其他系统方案 没有供选择的系统方案可考虑。6投资及效益分析 新系统开发完成后,只需要23面管理员,大大减少的人员方面的开支,同时由于数据冗余

13、度也大大降低,在物质方面也降低了开销,因此会有较好的市场效益。7 社会因素方面的可行性 71法律方面的可行性 软件完全合法72使用方面的可行性 完全可行A8 结论通过技术、经济、具体操作等方面的研究可知,新系统可开发风险较低,可以开始进行具体的开发工作。三 需求分析1引言 1.1编写目的需求分析是软件系统生存期中定义阶段的最后一个步骤。这个阶段的任务不是具体解决问题,而是准确确定为解决问题系统必须具备哪些功能。这个阶段的一个重要任务是用正式的文档准确地记录目标系统的需求。该文档将最终交给软件具体的开发人员进行具体的开发。1.2 背景开发的软件系统的名称: 饭卡管理系统本项目的任务提出者:软件工

14、程课程设计开发者:李杜松实现该软件的计算站:图书馆计算机中心1.3 定义本文件中用到的专门术语的定义和外文首字母词组的原词组。实体联系图(E-R图):包含实体(即数据对象)、关系和属性。作为用户与分析员之间有效交流的工具。状态转换图:通过描绘系统的状态及引起系统的状态转换的事件来表示系统的行为。提供行为建模机制。层次方框图:用树形结构的一系列多层次的矩形框描绘数据的层次结构。输入-处理-输出图(IPO图):方便描绘输入数据、对数据的处理和输出数据之间的关系。1.4 参考资料同可行性研究报告处2.任务概述2.1目标主要开发目标是能够对饭卡信息进行查询和更新管理,且具有反映敏捷准确。2.2用户的特

15、点由于系统的界面清晰、美观,操作简单、方便,所以操作人员只需要具备一定的电脑操作技能即可。管理员(维护人员)不需要任何数据库专业技能知识。本系统可以极大的提高工作效率,预期使用频度较高。2.3假定和约束系统的规模较小,适于Windows和操作系统,SQL数据库系统。3.需求规定3.1对功能的规定(1)更准确的系统流程图(2)更准确的数据流程图-0层-1层-2层-3层- (3)IPO图(4)状态变化图(5)层图(6)动态数据动态数据包括程序运行时输入和输出的数据,具体是数据库的各个表的各个不同元组与属性值,就查阅信息。数据库描述本系统的实体有:学生信息、卡信息它们之间的关系是一对一的。卡信息和卡

16、历史是一对多的。E-R图如下:(4)更准确的数据字典数据字典1学生信息:学生学号 = 数字|字母卡ID = 数字|字母学生姓名 = 汉字性别 = 男|女|null电话号码 = 数字地址 = 汉字|数字|字母2 卡信息卡ID = 数字|字母余额= 数字锁=true|false3 卡历史卡ID = 数字|字母时间=时间格式款额=数字操作=存款|消费|其他数据元素的数据字典卡片: 学生信息名字:学生信息 别名:描述:记录学生相关信息定义:学生信息=学生学号+卡ID+学生姓名+性别+电话号码+地址位置:数据库卡信息名字:卡信息 别名:描述:记录卡的信息定义:卡信息 =卡ID+余额+锁位置:数据库卡历史

17、信息名字:卡历史信息 别名:描述:记录卡历史的信息定义:客户信息=卡ID+时间+款额+操作位置:数据库学生信息库(student_info)列名数据类型学生学号stu_numint卡IDidint学生姓名nameChar(20)性别maleboolean电话号码telChar(20)地址addressChar(50)卡信息(card_info)列名数据类型卡IDidint余额sumfloat锁lockboolean卡历史(card_his)列名数据类型卡IDidint时间daytimedaytype款额sumfloat操作opChar(20)3.2对性能的规定3.2.1精度输入数据:查询最大查

18、询范围1年内;卡ID合法性;客户信息合法性;输出数据:余额以 213.12的形式最多小数点后两位,即到分为止显示。(小于的部分不可能出现)3.2.2时间特性要求刷卡响应时间不超过1秒;查询响应时间不超过5秒;3.3故障处理要求 刷卡响应时间超过1秒后,自动提出警告。要求重新刷卡。查询超过5秒,要显示查询时间长的提示信息。以免误认为死机。当计算机突然死机、重启、断电时自动存储备份数据。即便没有存上。也有备份数据库,供恢复。3.4其他专门要求普通学生只能刷卡消费,系统管理员还可以进入管理员界面;刷卡服务员可以操作刷卡器。界面清晰、美观,操作简单、方便。所有数据存储在学校服务器端,数据存储安全可靠。

19、4运行环境规定4.1设备a. 中央电脑,要求容量大,CPU能够满足查询的。b. 刷卡器,要求读取ID敏捷,准确。c. 要求刷卡器与中央电脑连接。通信量要满足查询精度和速度。d. 刷卡器上的功能建,要求显示明确,意思表达精确。四 结构化分析、设计部分一 总体设计说明书1引言1.1编写的目的总体设计的主要任务是设计程序的体系结构,也就是确定程序有哪些模块组成以及模块计的关系。总体设计过程首先寻找实现目标系统的各种不同的方案,需求分析阶段得到的数据流图是设想各种可能方案的基础。然后分析员从这些供选择的方案中选取若干个合理的方案,为每个合理的方案都准备一份系统流程图,列出组成系统的所有物理元素,进行成

20、本/效益分析,并且制定实现这个方案的进度计划。分析员应该综合分析比较这些合理的方案,从中选出一个最佳方案向用户和使用部门负责人推荐。如果用户和使用部门的负责人接受了推荐的方案,分析员应该进一步为这个最佳方案设计软结构,通常,进行必要的数据库设计,确定测试要求并且是定测试计划。1.2定义总体设计又叫概要设计,主要是确定系统的具体实施方案和确定软件结构。2总体设计IPO图并不能得到很好的体现出H图(层次图),所以在下面增添了一个HIPO图以及后边的层次图,以方便突出不同的重点。HIPO图(层次图加输入/处理/输出图),为了能使HIPO图具有可追踪性。IPO图:在H图(层次图)离除了最顶层的方框之外

21、,每个方框都加了编号如下:3 接口设计3.1用户接口(1) 用户类别:1有提供学生查阅的学生界面。2 提供管理员操作的管理员界面。3 提供刷卡的刷卡服务员界面。(2) 管理员界面菜单1 状态1.1登陆;1.2注销;2 新建-新建学生信息界面;3 查询更新3.1 学生消费历史3.2 学生信息4 挂失4.1 加锁4.2 解锁5 注销卡(3)学生查询菜单1 状态1.1登陆;1.2注销;2 查询历史3 查询学生信息 (4)刷卡界面1 状态1.1登陆;1.2注销;2 消费方式2.1 正常2.2 定价3 显示上次输出3.2外部接口说明本系统同外界的所有接口的安排包括软件与硬件之间的接口、本系统与各支持软件

22、之间的接口关系。3.3内部接口 查询和更新都要调用数据库的操作。4 运行设计4.1运行模块组合具体软件的运行模块组合为程序多窗口的运行环境,各个模块在软件运行过程中能较好的交换信息,处理数据。4.2运行控制软件运行时有比较友好的用户界面,基本能够实现用户的数据处理要求。4.3运行时间 系统的运行时间基本可以达到用户所提出的要求。5 系统数据结构设计5.1物理结构设计系统的物理结构具体由数据库来设计与生成,此处略。5.2数据结构与程序的关系 系统的数据结构由标准数据库语言SQL生成。6 系统出错处理设计6.1出错信息1 在学生刷卡后,卡ID被锁,将会出现错误信息:“Kard Locked”2 学

23、生卡信息丢失,查询时或者消费-存款时,不认卡情况3 存款额大于999.99元,刷卡器只显示小于等于999,99元部分4 消费时消费额大于存款额。系统将会提示错误,不作其他任何操作。6.2措施(号码对应)1 只能解卡锁2 有备份数据库,随时可以恢复3 只能更换刷卡器4 计时充钱7 数据流划分7.1 变换型输入流:有合法性判断得出的合法数据变换中心:查询输出流:查询结果数据按照 输入变换输出 的时间顺序流动。左图DFD可以看出典型的变换型数据流。7.2 事务型事务中心:存款-消费数据流以“事务中心”为核心。当时数据沿通路到达事务存储消费时,根据输入数据的类型在存款、消费中选择一个执行。具体上是根据

24、按键,分消费和存钱按键。二、详细设计1引言 1.1编写目的详细设计阶段的任务就是把解法具体化,解决具体应怎样实现这个系统。也称为模块设计,详细地设计每个模块,确定实现模块所需的功能需要的算法和数据结构。1.2 定义在软件具体设计阶段的专用术语有:程序流程图、盒图(NS图)、判定表、判定树、PAD图2 入口程序entry() 设计说明2.1程序描述提供管理员和学生用户,刷卡服务三种环境,限制用户对系统的使用权限。特点:非常驻内存;单独的一个程序;顺序处理。2.2输入项权限:三个单选项。Level。管理员用户名:字符串类型,user,长度不超过20,可以是数字(不能开头)和字母、汉字;管理员密码

25、:字符串类型,pass, 长度不超过20, 可以是数字和字母,区分大小写2.3输出项 欢迎或者提示错误信息。2.4流程逻辑 1程序流程图2盒图3 查询模块search() 设计说明3.1程序描述完成对系统(数据库)的查找。3.2输入项 学生卡信息,时间信息,消费信息等。3.3输出项 查找结果。3.4流程逻辑PAD图4 消费模块pay() 设计说明4.1程序描述完成消费部分。对输入和消费额,进行合法性验证。4.2输入项 卡ID,定价与否,消费额。4.3输出项卡余额,错误提示。4.4流程逻辑 判断树5存款模块deposit() 设计说明5.1程序描述完成存款部分。对输入和存款额,进行合法性验证。5

26、.2输入项 卡ID,存款额。5.3输出项卡余额,错误提示。5.4流程逻辑 判断表学生代号12345678读卡成功NYNNYYNY卡没有锁NNYNYNYY存款成功NNNYNYYY显示余额显示不可能不可能显示不可能不可能显示题是错误提示不可能不可能不可能不可能显示存款成功信息不显示不显示不可能不可能不显示不可能不可能显示显示存款失败信息不显示显示不可能不可能显示不可能不可能不显示五、面向对象分析、设计部分1引言 面向对象分析首要的工作,是建立问题域的对象模型,这个模型描述了现实世界中的“类于对象”以及它们之间的关系,表示了目标系统的静态数据结构。其中对象是对问题域中有意义的事务的抽象,他们既可能是

27、物理实体, 也可能是抽象概念。要确定类和对象,我们先要找出候选的类于对象,然后在从中筛选出正确的类于对象。2对象模型1有四个类:(1) 类名:学生帐户属性:学号,卡ID,余额,锁 方法:创建(学生,卡,历史),更新属性,更新数据库,注销(学生,卡,历史),返回(学号,卡ID,余额,锁),消费,存款,设定(号,卡ID,余额,锁),撤销历史,显示历史(2) 类名:读卡器属性:卡ID方法:读取ID,确认卡,警告,设定ID(3) 类名:输入器属性:值,临时值1,临时值2方法:读入,加法,减法,乘法,等于,定价,常用,最后一次输入,取消卡,消费(4) 类名:屏幕属性:值1,值2,值3,定价方法:显示当前

28、输入,显示卡余额,清屏,定价, 2 类间关系无直接关系3 细化对象模型,生成Java代码框架/=(1)学生帐户=public class StudentInfo private Integer stu_num; private Integer card_id; private Double sum; private Boolean lock; public StudentInfo() public void createStuInfo(Integer stu_num, Integer card_id, String name, Boolean male, Integer tel, String

29、 address) public void createCardInfo(Integer id) public void createCardHis(Integer id) public void updateAttr() public void updateDB() public void deposit(Double value) public void delCardHis() public void delCardInfo() public void delStuInfo() public void spend(Double value) public void unDoHis() p

30、ublic void printHis() public Integer getStu_num() return null; public Integer getCard_id() return null; public Double getSum() return null; public Boolean getLock() return null; /=(2)读卡器=public class CardReader private Integer card_id; public CardReader() public Integer readId() return null; public

31、Boolean judgeId() return null; public void alarm() public Integer getCard_id() return null; public void setCard_id(Integer id) /=(3)输入器=public class Inputer private Double value = 0; private Double temp = 0; public Inputer() public Double read() return null; public Double plus() return null; public

32、Double minus() return null; public Double multiply() return null; public void equal() public void fixPrice() public void commonUse() public void lastVal() public void denyCard() public void spend() /=(4)屏幕=public class Screen private Integer value1; private Boolean fixlight; public Screen() public v

33、oid printNow() public void printSum() public void cls() public void setFix(Boolean state) 4功能模型1用例图表示从用户角度对系统的要求。2经济用例图表示从管理者(服务者)的角度的功能。3动态模型1脚本刷卡人员与学生,刷卡消费过程。n (学生本日第一次刷卡)n 学生输入卡IDn 卡被正确输入则进行下一步,如果没有正确输入,则提示错误。n 系统检测卡的合法性和是否被锁。n 进入消费界面n 如果是定价,直接消费,并显示余额,退出。n 如果不是等待输入消费额n 刷卡服务员计算消费额n 确认消费n 显示卡余额n 如

34、果在10秒内不进行操作,自动清屏n 退出 2 状态图3 事件跟踪图(1)Collaboration框图框图中,对象表示为矩形,角色用简图表示。Collaboration框图不参照时间显示对象与角色的互交。并且其中直接通信的对象之间有一条直线,没有画线的对象之间不直接通信。因此Collaboration框图显示的信息与下面的Sequence框图类似,但本框图具有不同的作用。(2)Sequence框图他显示使用案例的过程流程。框图定不相识了设计的角色和对象。每个箭头表示角色与对象或者对象与对象之间为完成所需的功能而传递的信息。六、界面,代码1.权限界面1数据库联接公共部分public static

35、 Connection conn = null; public static Statement state = null; public static void odbc() String DBDriver = sun.jdbc.odbc.JdbcOdbcDriver; String connectionStr = jdbc:odbc:myodbc; try Class.forName(DBDriver); catch(java.lang.ClassNotFoundException e)System.err.println(DBconnecton:+e.getMessage(); try

36、conn = DriverManager.getConnection(connectionStr,); state = conn.createStatement(); catch(SQLException ex) System.err.println(aq.executeQuery:+ex.getMessage(); 2 刷卡选择部分/= 刷卡界面= if(this.jRadioButton2.isSelected() this.setVisible(false); JOptionPane.showMessageDialog(null,欢迎进入刷卡界面!); Spend.main(null);

37、 /= 管理员界面= if(this.jRadioButton1.isSelected() String nstr,pstr,sql; nstr = this.jTextField1.getText(); pstr = this.jTextField2.getText(); sql = select * from admin where name like +nstr+; ResultSet rs =null; try rs = Main.state.executeQuery(sql); if(rs.next() if(pareTo(rs.getString(pass)=0) this.setVisible(false); JOptionPane.showMessageDialog(null,欢迎进入管理员界面!); Admin.main(null); else JOptionPane.showMessageDialog(null,密码错误); elseJOptionPane.showMessageDialog(null,用户名错误); catch(SQLException ex) System.err.pri

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号