人力资源管理系统--数据库课程设计.docx

上传人:小飞机 文档编号:1897721 上传时间:2022-12-24 格式:DOCX 页数:48 大小:1.20MB
返回 下载 相关 举报
人力资源管理系统--数据库课程设计.docx_第1页
第1页 / 共48页
人力资源管理系统--数据库课程设计.docx_第2页
第2页 / 共48页
人力资源管理系统--数据库课程设计.docx_第3页
第3页 / 共48页
人力资源管理系统--数据库课程设计.docx_第4页
第4页 / 共48页
人力资源管理系统--数据库课程设计.docx_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《人力资源管理系统--数据库课程设计.docx》由会员分享,可在线阅读,更多相关《人力资源管理系统--数据库课程设计.docx(48页珍藏版)》请在三一办公上搜索。

1、第一章 绪论第一章 绪论1.1 开发背景 随着企业的信息化和体制改革的步伐,人才竞争使企业的人力资源面临前所未有的挑战。越来越多的企业不断地加大对员工的投资,从而更好地吸引、保留和发展所需要人才,是企业拥有持久的、强大的竞争优势。在过去很长一个传统的计划经济管理体制的时期中,国有企事业和公共事业单位中的人员管理一直实行着集中统一的计划管理模式,企业中人员的差异并没有构成主要的决定因素,随着市场经济的发展,市场竞争的加剧,企业的成功与其员工队伍之间的关注。而传统的手工纪录管理的模式越来越不能满足企业人力资源管理的要求,随着计算机应用的普及,采用计算机进行人力资源管理的快捷、方便、高效的优越性时企

2、业管理人员的共识。因此我们选用人力资源管理系统数据库设计作为我们的数据库课程设计的设计题目,通过人力资源会计理论为指导,将人力资源需求、人力资源招聘、人力资源审计、人力资源使用、人力资源培训、人力资源评估、人力资源二次调配等每一个动态环节编制成类似于财务报表的记录,从而完成人力资源的货币形式的衡定。以工资核算为核心、以员工的绩效考核为依据,通过建立多种数据模型辅助完成人力资源管理对企业经营决策的支持作用。 本说明书目的在于明确说明系统需求,界定系统实现功能的范围,指导系统设计以及编码。本说明书的编写为下阶段的设计、开发提供依据,为项目组成员对需求的详尽理解,以及在开发开发过程中的协同工作提供强

3、有力的保证。同时本文档也作为项目评审验收的依据之一。1.2项目背景 人力资源管理模块以经营管理为基础,采用成熟、先进的计算机软、硬件集成技术,融入科学的人事管理思想和模式,对企业及其下属公司的人事信息进行采集、储存、加工、处理和分析,使其及时准确地反映企业的人事聘用状况、人员流动情况、薪资情况等人事信息,为各层管理者提供快速准确的人事管理依据与辅助决策数据。 企业公司发展现状几十年来,企业经营单位和从业人员急速发展,人员良莠不齐,懂专业知识的少,小本经营多。面对危机与机遇,出路只有一条:通过改革和创新,提高管理能力,提高核心竞争力。通过导入规范化信息管理系统,尤其是人力资源管理系统,建立信息化

4、平台。只有在人力资源得到合理的分配,才能发挥出企业的整体实力,站稳脚跟。建立一个完善的人力资源管理系统,对一个企业的领导者在人力管理方面有着非常重要的作用。 我们的项目就是基于人力资源管理在企业发展中的重要作用而开发的,使公司能更好的管理人力资源,提高企业的整体竞争力。通过实施人力资源管理系统,提高人力资源部在日常人力资源操作性等事物的工作效率,为高层提供即时的搞笑的人力资源数据查询、分析,为高层提供决策支持。同时有利于人力资源内部流程的规范与再造优化。1.3定义1.3.1专业术语 数据流图:数据流图是结构化方法中使用的工具,它以图形的方式描绘数据在系统中流动和处理的过程,由于它只反映系统必须

5、完成的逻辑功能,所以它是一种功能模型。1.3.2主页术语定义 Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 SQL:是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系

6、数据库系统。 甘特图:它是以图式的方式通过活动列表和时间刻度形象地表示出任何特定的活动顺序与持续时间。48第二章 任务概述第二章 任务概述2.1目标 传统的企业人力资源管理已不能满足现代化管理的需要。因此,对企业人力资源的信息处理实行计算机化这一需要就显得越来越重要。要对人力资源中人员甑选、人员录用、员工培训、人员调整、考勤管理、人事评议、人事档案管理,实现全面、科学、系统的管理; 提高工作效率、增强交流与协作、提高辅助决策、有效地提高管理水平、完善人力资源管理活动中诸多不足之处就成为SYSWAYHR的设计目标。 充分利用网络资源,根据企业实际需求,进一步优化和再造管理流程:使人力资源的管理更

7、为高效和科学,数据更为准确。 完善人力资源决策支持系统,及时提供相关数据和报表:使基于人力资源系统数据的决策更为直观和精确。 增强员工自助服务的功能,简化人力资源事务性的管理流程:使人力资源部门的人员有更多的时间和精力用于人力资源的战略规划。 完善人力资源系统的业务管理功能,建立流程引擎和角色管理机制:使得达到降低成本,提高效率,合理利用人才,改进员工服务模式的目的。2.2 运行环境开发环境:Microsoft Visual Studio 2008 Microsoft SQL Server2005运行平台:Windows XP操作系统附加功能:IIS 6.0应用平台:Bea Weblogic

8、8.1客户端软件:MS IE 6.0语种:简体中文或英文 硬件环境:列出运行该软件所需要的硬设备。说明其中的新型设备及其专门功能,包括: 1处理器型号及内存容量; 2外存容量、联机或脱机、媒体及其存储格式,设备的型号及数量; 3输入及输出设备的型号和数量,联机或脱机; 4数据通信设备的型号和数量; 5功能键及其他专用硬件例如:设备名称用途配置信息备注应用和数据库服务器数据存储和处理1CPU:P4 2.20G无 整个系统相关人员有:系统管理人员,人力资源管理员,普通员工,应聘人员以及财务的后勤人员。 人力资源管理员可以利用该系统好好利用公司人力资源,普通员工可以及时查询相关信息并更新自己的信息2

9、.3 条件限制 由于系统用户层次广,用户面宽,所以用户对于电脑,网络知识的掌握不一,可能有尚未接触过电脑的,可能有软件使用高手故应该考虑根据调查用户实际设计出使用方便,统一,简易尽量多可视化的系统,提高用户的可操作性,减少用户培训。 同时由于不同层次的用户有不同的系统使用管理权限,健全安全机制,完善系统安全监控审计功能也是很重要的。第四章逻辑设计第三章 需求分析3.1 功能划分我们的人力资源管理将要完成招聘入职管理管理,薪资管理,出勤统计,员工奖惩管理,保险管理,合同管理,培训管理等功能,经过划分为以下五个子系统。如下图是我们的功能结构图。在后续设计中,我主要负责人事关系管理子系统,因此,在此

10、只反映人事管理的二级结构分类。人力资源管理系统人事管理招聘管理培训管理社会关系管理薪资管理离职管理升降管理员工基本信息维护转正处理凭调处理图3.1 功能结构图3.1.1 招聘入职子系统由人事主管部门制定招聘计划,并且负责人员的面试工作,并且对面试及招聘过程中员工的信息加以记录,流程从员工登记开始一直到面试通过进入实习期为止。3.1.2 培训管理子系统在该子系统中,集中管理通过面试进入培训阶段的员工信息,记录员工在培训期间的业绩表现,平时考核以及结课考试成绩,作为入职转正的标准。3.1.3 人事管理子系统在该子系统中,负责员工的日常关系管理,包括人员凭调,升降变动,转正审批,离职等级等人事业务3

11、.1.4 社会关系子系统在该子系统中,主要管理员工的个人合同,保险,以及公积金,业务包括合同续签及审核,保险关系转入转出缴纳,公积金转入转出缴纳3.1.5 薪资管理子系统 在该子系统中,主要包括员工考勤,奖惩统计,员工工资统计,系统将根据该月员工出勤及加班违纪情况自动统计员工薪资3.2 个人模块 在该项目中,我负责的是人事管理模块,按照要求,在下面的数据库设计中,我将按照概念设计逻辑设计物理设计的步骤来进行阐述。 在我的人事管理模块中,人事专员负责员工的各项人事业务管理,可以发起对一个员工的调动申请,并且指定审批的上级领导,上级领导审批后,人事管理员根据审批结论修改员工信息。当员工试用期满后,

12、由员工个人发起转正申请,人事专员受理后指定审批领导。审批后根据审批结论修改员工状态。员工离职后,人事专员记录该员工离职信息及其原来所在部门。因此,在我的模块中,我主要分以下几个功能进行设计:1. 人员基本信息管理2. 人员凭调处理3. 人员转正处理4. 人员升迁降职处理5. 离职记录登记我们的人力资源管理系统的全局数据流图如图4.1所示:图3-1 全局数据流图由上图进行进行分析,与我的人事管理产生交集的模块是培训模块,在一个员工通过面试后,进入实习状态,而要转正的话,是由人事部门根据该员工在实习期的业绩进行评估,达到转正标准的,将由人事专员发起转正申请。也就是说,可以发起转正申请的人员信息来自

13、于培训模块。同时,在员工的升迁降职中,人事部门要统计员工的业绩,根据业绩判断该员工是否到达升迁降职的标准,并且发起调动,由上级批准,即就是,升迁降职将参考效绩模块的数据。在下描述的过程中,如有用到其他模块的数据的功能,将有所提及,但不做深入讲解,如有疑问,可以参考其他模块的具体设计。3.3 数据流图1.内部调动图3-2 内部调动E-R图 人事专员可以发起对一名员工的调动申请,申请包括该员工现在部门职位和将要调往的部门职位,发起的申请存入系统,然后交由上级领导审批,上级审批后,产生的审批记录存入系统。2.升迁降职处理 图3-3 升迁降职E-R图 人事专员可以根据员工入职以后的个人业绩针对员工发起

14、升迁降职申请,由上级批准后,升迁降职信息存入系统3.离职登记图3-4 离职登记数据流图4. 员工转正图3-5 员工转正E-R图人事专员根据员工在实习期间的表现决定是否可以对该员工发起转正,如果调价达到,则该员工发起转正,并且对该员工产生转正记录,记录的转正时间,从次月起对员工缴纳保险和公积金。与社会关系管理模块契合。第四章 概念结构设计4.1 数据字典数据文件:调动申请表文件组成:调动编号,员工编号,现在部门,现在岗位,调动部门,调动岗位,申请日期,上级编号序号列名数据类型长度小数位标识主键允许空默认值说明1调动编号int40是是否2员工编号varchar500否3现在部门varchar500

15、否4现在岗位varchar500否5调动部门int40否6调动岗位int40否7申请日期int40否数据文件:调动审批表文件组成:审批编号,调动编号,审批日期,审批评语,审批结论,上级编号序号列名数据类型长度小数位标识主键允许空默认值说明1审批编号int40是是否2调动编号varchar500否3审批日期date500否4审批评语varchar40否5审批结论varchar40否6审批人varchar40否数据文件:升迁降职表文件组成:编号,员工编号,现在部门,现在岗位,变动部门,变动岗位,变动日期,上级编号序号列名数据类型长度小数位标识主键允许空默认值说明1编号int40是是否2员工编号va

16、rchar500否3现在部门varchar500否4现在岗位varchar500否5变动部门int40否6变动岗位int40否7变动日期int40否8审批人Int40否数据文件:离职登记表文件组成:离职编号,员工编号,离职原因,离职时间序号列名数据类型长度小数位标识主键允许空默认值说明1离职编号int40是是否2员工编号varchar500否3离职原因varchar40否4离职时间int40否数据文件:转正申请表文件组成:申请编号,员工编号,培训编号,部门编号,岗位编号,申请时间,审批人编号序号列名数据类型长度小数位标识主键允许空默认值说明1转申编号int40是是否2员工编号varchar50

17、0否3申请内容varchar500否6申请时间int40否7审批人编号Int40否数据文件:转正审批表文件组成:申请编号,员工编号,转申编号,审批日期,审批评语,审批结论,审批人序号列名数据类型长度小数位标识主键允许空默认值说明1审批编号int40是是否2员工编号varchar500否3转申编号varchar500否4审批日期varchar500否5审批评语int40否6审批结论int40否7审批人varchar40否4.2 E-R图1. 员工调动申请ER图 一个员工可以有多个调动申请,一个人事专员可以发起多个凭调申请4-1 员工调动申请ER图2. 员工调动申请审批ER图调动审批是对凭调申请的

18、回复,一条凭调申请可以有一个或零个调动审批4-2 员工调动审批ER图3. 转正申请ER图4-3 员工转正申请ER图4. 转正审批ER图4-4 员工转正审批ER图5.员工离职5-5 员工离职ER图6.人员升降4-6 员工升迁降职ER图第五章 逻辑设计第五章 逻辑设计5.1 关系模式从上面的概念设计中,可以得出以下的关系模式:1. 凭调申请(申请编号,员工编号,原来部门,调动部门,原来岗位,调动岗位,申请时间)2. 调动审批(审批编号,申请编号,审批评语,审批结论,审批时间,审批人)3. 转正申请(申请编号,员工编号,申请内容,申请时间,人事专员编号,审批人)4. 转正审批(审批编号,审批评语,审

19、批结论,审批时间,申请编号)5. 离职信息(离职编号,员工编号,离职时间,离职原因,原来部门)6. 升降记录(变动编号,变动时间,调动部门,调动岗位,上级编号)5.2 关系模式分析1.凭调申请关系模式凭调申请(申请编号,员工编号,原来部门,调动部门,原来岗位,调动岗位,申请时间)在关系模式中,审请编号是主属性。申请编号-(员工编号,原来部门,调动部门,原来岗位,调动岗位,申请时间)其中,每一个数据项都单一,满足1NF,并且,主属性是申请编号,不存在非主属性对主属性的部分依赖。满足第二范式。同时,主属性是申请编号,不存在非主属性对主属性的传递依赖。满足第三范式。因此:凭调申请3NF2.调动审批关

20、系模式 调动审批(审批编号,申请编号,审批评语,审批结论,审批时间,审批人) 在关系模式中,审批编号是主属性。审批编号-(申请编号,审批评语,审批结论,审批时间,审批人)其中,每一个数据项都单一,满足1NF,并且,主属性是审批编号,不存在非主属性对主属性的部分依赖。满足第二范式。同时,主属性是审批编号,不存在非主属性对主属性的传递依赖。满足第三范式。因此:凭调申请3NF 3.转正申请关系模式 转正申请(申请编号,员工编号,申请内容,申请时间,人事专员编号,审批人) 在关系模式中,申请编号是主属性。申请编号-(申请编号,员工编号,申请内容,申请时间,人事专员编号,审批人)其中,每一个数据项都单一

21、,满足1NF,并且,主属性是申请编号,不存在非主属性对主属性的部分依赖。满足第二范式。同时,主属性是申请编号,不存在非主属性对主属性的传递依赖。满足第三范式。因此:凭调申请3NF4.转正审批关系模式 转正审批(审批编号,审批评语,审批结论,审批时间,申请编号) 在关系模式中,审批编号是主属性。审批编号-(审批评语,审批结论,审批时间,申请编号)其中,每一个数据项都单一,满足1NF,并且,主属性是审批编号,不存在非主属性对主属性的部分依赖。满足第二范式。同时,主属性是审批编号,不存在非主属性对主属性的传递依赖。满足第三范式。因此:凭调申请3NF5.离职信息关系模式 离职信息(离职编号,员工编号,

22、离职时间,离职原因,原来部门) 在关系模式中,离职编号是主属性。离职编号-(员工编号,离职时间,离职原因,原来部门)其中,每一个数据项都单一,满足1NF,并且,主属性是离职编号,不存在非主属性对主属性的部分依赖。满足第二范式。同时,主属性是离职编号,不存在非主属性对主属性的传递依赖。满足第三范式。因此:凭调申请3NF6.升降记录关系模式 升降记录(变动编号,变动时间,调动部门,调动岗位,上级编号) 在关系模式中,变动编号是主属性。变动编号-(变动时间,调动部门,调动岗位,上级编号)其中,每一个数据项都单一,满足1NF,并且,主属性是变动编号,不存在非主属性对主属性的部分依赖。满足第二范式。同时

23、,主属性是变动编号,不存在非主属性对主属性的传递依赖。满足第三范式。因此:凭调申请3NF第六章 物理设计第六章 物理设计6.1 类图 在我负责的业务模块中,有人事专员,调动申请,申请审批,升迁降职,离职记录,转正申请,和转正审批,他们之间的关系如下图6-1 类图6.2 功能设计6.2.1 员工凭调人事专员发起对一个员工的调动申请,由上级领导审批后,人事专员根据审批结果修改员工状态,如果审批结果未通过,则不变化,只产生申请审批记录,如果通过,则修改员工信息即新的岗位好和部门号。如下图的活动图:图6-2 员工凭调活动图图6-3 员工凭调时序图6.2.2 员工转正 在培训阶段的培训成绩合格后,员工可

24、以自己发起自己的转正申请,人事专员受理后,指定审批领导,由上级领导审批后,人事专员根据审批结果修改员工状态,如果审批结果未通过,则不变化,只产生申请审批记录,如果通过,则修改员工信息即状态为正式员工。如下图的活动图:图6-4 转正活动图图7-5 转正用例图图6-5 转正时序图6.2.3 员工升迁降职 人事专员可以发起一条员工的升迁降职记录申请,由上级领导审批后,人事专员根据审批结果确定该员工是否可以升迁或降职,然后修改修改员工状态。然后新增一条升迁降职记录,记录该员工何时由谁审批从何位置调往何职位。 图6-6 升迁降职活动图图6-7 转正用例图6.2.4 员工离职 当一个员工离职后,人事专员负

25、责记录该员工的离职信息,包括离职时间和离职原因,而员工离职后,并不将该员工从员工综合记录中删除,而是将其状态置为离职,即就是执行逻辑删除,然后在以后的在职员工操作过程中,该员工将不再查询范围之内。图6-8 员工离职活动图图6-9 员工离职时序图6.2.5员工信息维护1,员工信息查询 员工成功登录人力资源管理系统,输入相关信息条件,进行员工信息查询。其流程如图所示:图6-10 员工信息查询时序图 员工对于自己的相关基本信息进行查看,以及相关人员查看员工的信息。流程中主要涉及的业务实体以及它们之间的关系如图所示:图6-11 员工信息查询类图在这个业务流程中,有两个直接与系统交互的用户:系统管理员,

26、员工,涉及的业务活动如图所示:图6-12 员工信息查用例图2. 员工信息修改人力资源管理部门等相关人员根据情况对员工信息进行修改更新与维护,员工自身对于自己的信息的更正等。整个流程如图所示:图6-13 员工信息修改活动图流程中涉及的的业务实体在上图的基础上增加了人力资源部门的员工,它们之间的关系如图所示:图6-14 员工信息修改类图这个业务流程中有三个直接与系统交互的用户:系统管理员,员工,人力资源部门人员,他们涉及的业务活动如图所示:图6-15 员工信息修改用例图3.新员工信息添加当公司招聘进新的员工时,需要将新员工的信息存进系统中。其流程如图所示:图6-16 员工信息添加活动图这个业务流程

27、中涉及的业务实体同上面信息修改。其系统直接交互用户也包括系统管理员,员工,人力资源部门人员,在上面的业务活动的基础上,人力资源部门人员涉及的业务活动添加了添加员工信息第七章 测试实现第七章 测试实现7.1用户界面 在用户界面部分,根据需求分析的结果,用户需要一个用户友善界面。在界面设计上,应做到简单明了,易于操作,并且要注意到界面的布局,应突出的显示重要以及出错信息。外观上也要做到合理化,考虑到用户多对WINDOW 风格较熟悉,应尽量向这一方向靠拢。在设计语言上,已决定使用 Delphi 进行编程,在界面上可使用Delphi 所提供的可视化组件,向WINDOWS 风格靠近。其中服务器程序界面要

28、做到操作简单,易于管理。在设计上采用下拉式菜单方式,在出错显示上可调用Delphi 库中的错误提示函数。总的来说,系统的用户界面应作到可靠性、简单性、易学习和使用。图7-1 系统运行主界面 进入员工信息管理后,可以对员工信息进行维护,并且发起对员工的各项人事业务 进入员工信息的管理界面,可以浏览全部员工的基本信息,如图8-2所示图7-2 系统运行主界面 在该页面,可以对员工进行基本的操作,如下图所示,就是删除员工记录的操作过程。图7-3 员工操作界面 点击添加员工按钮,进入添加员工页面,输入员工信息,就能将员工信息录入系统。图7-4 添加员工界面 点击添加修改信息按钮,进入修改员工页面,重新输

29、入员工信息,就能将员工信息录入系统。图7-5 添加员工界面7.2 代码展示-员工基本类-public class Employee implements java.io.Serializable / Constructors/* default constructor */public Employee() /* minimal constructor */public Employee(Integer id, String name, String password) this.id = id;this.name = name;this.password = password;/* full

30、 constructor */public Employee(Integer id, String name, String password, String sex,String tel, String address, String birthday, String content) this.id = id;this.name = name;this.password = password;this.sex = sex;this.tel = tel;this.address = address;this.birthday = birthday;this.content = content

31、;-员工控制类-SuppressWarnings(serial)public class EmpManager extends ActionSupport private EmpService empService = null; private Employee employee = null; private String birthday;public Employee getEmployee() return employee;public void setEmployee(Employee employee) this.employee = employee;public void

32、setEmpService(EmpService empService) this.empService = empService;public void setBirthday(String birthday) this.birthday = birthday; /* * 显示员工主界面 * return success */public String main()return success;/过滤查询功能public void list() try JSONObject root = new JSONObject();PageList list = empService.list(lik

33、e, (page - 1) * rows,rows);int count = list.getRows();root.put(page, page);root.put(total, count / rows + (count % rows) 0 ? 1 : 0);root.put(records, count);JSONArray rows = new JSONArray();for (Employee s : list) rows.add(s, JsonUtil.config();root.put(rows, rows);ServletActionContext.getResponse().

34、setCharacterEncoding(utf-8);root.write(ServletActionContext.getResponse().getWriter(); catch (Throwable e) e.printStackTrace();public String add() throws ModelException empService.add(employee);return success;public String modify() try empService.modify(employee);return success; catch (ModelExceptio

35、n e) / TODO Auto-generated catch blocke.printStackTrace();return error;public void load() try JSONObject root = new JSONObject();Employee emp = empService.load(id);root.element(employee, emp, JsonUtil.config();ServletActionContext.getResponse().setCharacterEncoding(utf-8);root.write(ServletActionCon

36、text.getResponse().getWriter(); catch (Throwable e) / TODO Auto-generated catch blocke.printStackTrace();-员工服务类-public class EmpServiceImpl implements EmpService private EmpDao empDao = null;/该模块对应的DAOpublic void setEmpDao(EmpDao empDao) this.empDao = empDao;public Employee add(Employee employee) th

37、rows ModelException int a = 10000000;int aid = (int) (System.currentTimeMillis()%1000000);employee.setId(new Integer(a+aid);empDao.add(employee);return null;public PageList list(Employee employee, int skip, int size)throws ModelException return empDao.list(employee, skip, size);public Employee load(

38、int id) throws ModelException return empDao.load(id);public void modify(Employee employee) throws ModelException empDao.modify(employee);-员工数据访问类-public class EmpDaoImpl extends HibernateDaoSupport implements EmpDao SuppressWarnings(unchecked)public PageList list(final Employee employee, final int s

39、kip,final int size) throws ModelException try PageList list = (PageList) this.getHibernateTemplate().execute(new HibernateCallback()public Object doInHibernate(Session session)throws HibernateException, SQLException Criteria query = session.createCriteria(Employee.class);/组合条件if(employee.getName()!=null)query.add(Restrictions.like(name, employee.getName(),MatchMode.ANYWHERE);/统计行数query.setProjection(Projections.rowCount();Long count = (Long) query.uniqueResult();/查询结果query.setProjection(null);query.addOrder(Order.asc(id);query.setFirstResult(skip);query.setMaxRe

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号