基于RFID的家庭智能门禁管理系统设计与实现.docx

上传人:b****5 文档编号:5051834 上传时间:2022-12-12 格式:DOCX 页数:8 大小:24KB
下载 相关 举报
基于RFID的家庭智能门禁管理系统设计与实现.docx_第1页
第1页 / 共8页
基于RFID的家庭智能门禁管理系统设计与实现.docx_第2页
第2页 / 共8页
基于RFID的家庭智能门禁管理系统设计与实现.docx_第3页
第3页 / 共8页
基于RFID的家庭智能门禁管理系统设计与实现.docx_第4页
第4页 / 共8页
基于RFID的家庭智能门禁管理系统设计与实现.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

基于RFID的家庭智能门禁管理系统设计与实现.docx

《基于RFID的家庭智能门禁管理系统设计与实现.docx》由会员分享,可在线阅读,更多相关《基于RFID的家庭智能门禁管理系统设计与实现.docx(8页珍藏版)》请在冰豆网上搜索。

基于RFID的家庭智能门禁管理系统设计与实现.docx

基于RFID的家庭智能门禁管理系统设计与实现

基于RFID的家庭智能门禁管理系统设计与实现

毕业设计方案

课题名称:

基于RFID的家庭

智能门禁管理系统设计与实现

级:

物联网

名:

指导教师:

完成日期:

20XX年X月X日

毕业设计任务书

指导老师:

一、毕业设计课题名称

基于RFID的家庭智能门禁管理系统设计与实现

二、毕业设计任务

根据培养高级技术实用人才这一目标的要求,选题从实际情况出发,选取适合于高职学生要达到的实际能力和水平,培养学生综合运用所学的知识与技能分析与解决问题的能力,并巩固和扩大学生的课堂知识与实际岗位技能相结合的专题作为毕业设计题目。

本课题是根据物联网应用技术专业所开设课程内容,设计一个中小模型的智能家居系统的方案,并实现其部分功能。

功能主要包括门禁子系统、燃气检测子系统、防火子系统、家室温度控制子系统、灯光窗帘控制子系统、防盗子系统等,大家可先对这些系统进行需求分析,然后选择1至多个子系统(至少1个)进行方案设计,并选择相关硬件设备,搭建系统硬件平台和开发环境,实现相关的功能。

最终成果系统方案和设计过程文档、系统源代码和系统模拟模型。

三、毕业设计要求1、选题要求根据物联网应用技术专业所开设课程内容,题目为智能家居系统方案设计与实现,设计一个中小模型的智能家居系统的方案,并实现其部分功能。

功能主要包括门禁子系统、燃气检测子系统、防火子系统、家室温度控制子系统、灯光窗帘控制子系统、防盗子系统等,大家可先对这些系统进行需求分析,然后选择1至多个子系统(至少1个)进行方案设计,并选择相关硬件设备,搭建系统硬件平台和开发环境,实现相关的功能。

2、方案标题要求整个方案应包括封面、毕业设计任务书(已下发)、摘要关键字、目录、毕业设计正文、结束语、致谢、参考文献;封面包括:

学校名称、专业名称、姓名、课题名称、指导老师等信息(要有图文混排)格式要求正文:

正文,中文字体用五号宋体字,英文用TimesNewRoman字体,行间距:

固定值为22磅。

(2)一级标题:

二号字,黑体,加粗,居中对齐,段上下空20磅。

(3)二级标题:

三号字,宋体,居中对齐,段上下空10磅。

(4)三级标题:

四号字,黑体,缩进两字,段上下空6磅,中间空一格。

(6)页眉:

论文所在的章节名称,居中,小五号,宋体。

封面无页眉。

(7)添加图(表)题:

为“毕业论文”第一章节中的图添加“图(表)1-1,图(表)1-2”所示的图题;第二章节的图添加“图(表)2-1,图(表)2-2”所示的图题。

选择全文的图都添加类似的图题。

要求学生在规定的时间内,经过努力可以按时完成设计,取得相应的成果。

对于有些可能超出所学知识范围的题目,应该通过自学或在实践中学习进行弥补。

通过毕业设计,提高学生的专业知识和岗位技能,培养学生的文献检索能力、开发设计能力、创新思维能力、独立工作能力与协作工作能力、培养学生严谨务实的科学作风与奉献精神,使学生受到科学研究、专业设计和撰写技术报告的基本训练。

四、毕业设计过程及进度计划课题总体规划与方案设计阶段(二周):

确定所要实现的功能内容;设计制作阶段(六周);修改完备阶段(二周);撰写完善毕业设计方案阶段(一周);毕业答辩(一周)五、毕业设计论文格式要求毕业设计方案或报告主要包括以下部分:

(1)封面

(2)毕业设计任务书(3)摘要与关键词(4)目录(5)引言(6)正文(7)参考文献六、毕业设计答辩程序及准备要求1、答辩程序

(1)介绍毕业设计情况及本人主要完成的设计内容,时间为5分钟

(2)答辩老师提出2-3个问题,由答辩人回答,回答问题时间为10分钟2、准备要求

(1)答辩时必须提供光盘、毕业设计论文或报告。

本模块主要实现的功能有:

登记信息、刷卡开门、挂失、取消挂失、注销等功能,其功能描述如下:

登记信息功能:

将PC和ISO15693读写器用串口连接,并正确打开串口;正确打开串口后系统将控制ISO15693读写器开始循环读卡;当看到界面上显示了读到的卡号后输入姓名、性别、身份证号和权限,系统将登记的信息保存到数据库中。

挂失功能:

输入身份证号,系统检测数据库中对应的表中是否存在该身份证号对应的身份信息,若存在则将该身份证对应的卡设置为不能使用。

取消挂失功能:

输入身份证号,系统检测数据库中对应的表中是否存在该身份证号对应的身份信息,若存在则将该身份证对应的卡恢复使用。

刷卡开门功能:

选择需要打开的门,建立PC和网关的连接通道,检查通道是否建立成功,若成功则进行下一步;打开串口,若串口成功打开则开启线程,使用线程读卡和判断权限;若所选择的门和刷到的卡的权限相匹配则打开电磁门五秒。

关键字:

WSNRFID物联网门禁系统目录第一章 引言11.1项目背景11.2RFID门禁系统的优势11.3相关技术介绍21.3.1C#编程语言21.3.2.NetFramework平台21.3.3SQLServer200831.3.4无线传感器网络31.3.5ISO15693协议4第二章 系统需求分析和概要设计52.1系统需求功能52.2系统功能模型52.2.1功能图52.2.2系统功能描述52.2.3系统流程图62.2.4性能需求7第三章 系统设计与实现83.1系统软硬件、公共类介绍83.1.1系统软硬件介绍83.1.2公共类介绍93.2系统实现103.2.1登录模块103.2.2登记信息模块113.2.3挂失和取消挂失模块133.2.4刷卡开门模块143.2.5注销模块17第四部分 系统功能测试与评价194.1测试概述194.2系统功能测试194.3系统评价22结束语23致谢24参考文献25第一章 引言1.1项目背景门禁系统就是对出入口通道进行管制的系统,它是在传统的门锁基础上发展而来的。

传统的机械门锁仅仅是单纯的机械装置,无论结构设计多么合理,材料多么坚固,人们总能通过各种手段把它打开。

在出入人员很多的通道(象办公大楼、酒店客房)钥匙的管理很麻烦,钥匙丢失或人员更换都要把锁和钥匙一起更换。

为了解决这些问题,就出现了电子磁卡锁,电子密码锁,这两种锁的出现从一定程度上提高了人们对出入口通道的管理程度,使通道管理进入了电子时代,但随着这两种电子锁的不断应用,它们本身的缺陷就逐渐暴露,磁卡锁的问题是信息容易复制,卡片与读卡机具之间磨损大,故障率高,安全系数低。

密码锁的问题是密码容易泄露,又无从查起,安全系数很低。

同时这个时期的产品由于大多采用读卡部分(密码输入)与控制部分合在一起安装在门外,很容易被人在室外打开锁。

这个时期的门禁系统还停留在早期不成熟阶段,因此当时的门禁系统通常被人称为电子锁,应用也不广泛。

市场急需一种新型的门禁系统,RFID门禁系统应运而生。

1.使用安全机械锁因为部分在外,通过钥匙或其他工具可以轻易开锁进入。

而RFID门禁系统是通过传递加密的数字信息,由网关给协调器发送命令通过继电器控制电磁门的开与闭。

2.管理安全机械锁的钥匙非常容易遗失或流出,为了安全,须将锁更换。

而RFID门禁系统只需将遗失的卡挂失或注销即可。

3.使用方便一张卡可以代替钥匙,只要对一张卡授相应的权限,该卡即可通行授权进出指定的区域。

不必携带一大串钥匙,开门时寻找钥匙的麻烦。

4.管理方便。

省去了配置钥匙、分配钥匙的麻烦。

只需通过权限设置,轻松规划人员出入权限通过管理软件随时查看各区域人员进出情况。

1.3相关技术介绍1.3.1C#编程语言C#是本方案实现过程中主要使用的编程开发语言之一。

C#是微软公司发布的一种面向对象的、运行于.NETFramework之上的高级程序设计语言。

并定于在微软职业开发者论坛(PDC)上登台亮相。

C#是微软公司研究员AndersHejlsberg的最新成果。

C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。

但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司.NETwindows网络框架的主角。

C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。

它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。

C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。

C#是面向对象的编程语言。

它使得程序员可以快速地编写各种基MICROSOFT.NET平台的应用程序,MICROSOFT.NET提供了一系列的工具和服务来最大程度地开发利用计算与通讯领域。

C#使得C++程序员可以高效的开发程序,且因可调用由C/C++编写的本机原生函数,因此绝不损失C/C++原有的强大的功能。

因为这种继承关系,C#与C/C++具有极大的相似性,熟悉类似语言的开发者可以很快的转向C#。

1.3.2.NetFramework平台Microsoft.NETFramework是用于Windows的新托管代码编程模型。

它将强大的功能与新技术结合起来,用于构建具有视觉上引人注目的用户体验的应用程序,实现跨技术边界的无缝通信,并且能支持各种业务流程。

SQLServer2008允许使用Microsoft.NET和VisualStudio开发的自定义应用程序中使用数据,在面向服务的架构(SOA)和通过MicrosoftBizTalkServer进行的业务流程中使用数据。

信息工作人员可以通过日常使用的工具直接访问数据。

1.3.4无线传感器网络微机电系统(Micro-Electro-MechanismSystem,MEMS)、片上系统(SystemonChip,SoC)、无线通信和低功耗嵌入式技术的飞速发展,孕育出无线传感器网络(WirelessSensorNetworks,WSN),并以其低功耗、低成本、分布式和自组织的特点带来了信息感知的一场变革,无线传感器网络是由部署在监测区域内大量的廉价微型传感器节点,通过无线通信方式形成的一个多跳自组织网络。

WSN是wirelesssensornetwork的简称,即无线传感器网络。

无线传感器网络就是由部署在监测区域内大量的廉价微型传感器节点组成,通过无线通信方式形成的一个多跳的自组织的网络系统,其目的是协作地感知、采集和处理网络覆盖区域中被感知对象的信息,并发送给观察者。

传感器、感知对象和观察者构成了无线传感器网络的三个要素。

  无线传感器网络所具有的众多类型的传感器,可探测包括地震、电磁、温度、湿度、噪声、光强度、压力、土壤成分、移动物体的大小、速度和方向等周边环境中多种多样的现象。

基于MEMS的微传感技术和无线联网技术为无线传感器网络赋予了广阔的应用前景。

这些潜的应用领域可以归纳为:

军事、航空、反恐、防爆、救灾、环境、医疗、保健、家居、工业、商业等领域。

(2)先进性工程的整体方案及各子系统方案将保证具有明显的先进特征。

考虑到电子,信息技术的迅速发展,本设计在技术上将适度超前,所采用的设备,产品和软件不仅成熟而且能代表当前行业领先的技术水平。

以便该系统在尽可能长的时间内与社会发展相适应。

(3)标准化本系统设计及其实施将按照国家和地方的有关标准进行。

我们所选用的系统手段和软件将尽可能符合工业标准或主流模式。

第三章 系统设计与实现3.1系统软硬件、公共类介绍3.1.1系统软硬件介绍本系统使用的软件开发工具有:

visualstudio2010、SQLServer2008硬件:

北京京胜世纪物联网综合实验台,如图3-1所示:

图3-1北京京胜世纪物联网综合实验台系统工作原理图如图3-2所示:

图3-2系统工作原理图3.1.2公共类介绍1.ISO15693Reader.cs类说明:

该类提供了与ISO15693读写器的串口连接方法、通讯方法以及对ISO15693卡片读卡操作的方法。

主要方法:

(1)OpenSerailPort(StringportName)方法说明:

该方法的作用为:

用来打开指定的串口号,返回值为Byte类型,打开成功返回0x00,否则返回其他。

(2)CloseSerialPort()方法说明:

该方法用来关闭串口,返回值为Byte类型,关闭成功返回0x00,否则返回其他。

(3)Inventory(ModulateMethodmm,InventoryModelim,refInt32TagCount,refString[]TagNumber)方法说明:

该方法是读卡方法。

ModulateMethod参数是枚举类型,用于选择调制方式为ASK或FSK;InventoryModel参数是枚举类型,用于选择读卡方式,读单卡为Single,读多卡为Multiple;TagCount参数用于存储读到卡片的数量;TagNumber参数用来存储读到的卡号。

返回值类型为Byte类型,若读取卡号成功,这返回0x00。

2.sqlHelper.cs类说明:

该类提供了系统和数据库的连接方法和系统对数据库进行增删改查等操作的方法主要方法:

(1)ReportTheLoss(stringCardID)方法说明:

该方法是挂失方法,CardID参数是字符串类型,用于传递身份证号。

(2)Insert(stringCardNumber,stringName,stringSex,stringIdentity,stringJurisdiction)方法说明:

该方法是登记信息方法,该方法所有参数都是字符串类型,CardNumber参数用于传递卡号;Name参数用于传递用户姓名;Sex参数用于传递用户姓名;Identity参数用于传递身份证号;Jurisdiction参数用于传递用户权限。

(3)CancelReportTheLoss(stringCardID)方法说明:

该方法是取消挂失方法,用于恢复被挂失卡的使用,参数CardID是字符串类型,用于传递身份证号。

3.2系统实现3.2.1登录模块登录界面如图3-3所示图3-3 登录界面本模块流程图如图3-4所示图3-4登录功能流程图本模块需使用的数据库表:

管理员用户表(tb_Administrator),如表3-1所示表3-1管理员用户表列名含义类型及大小是否允许为空A_UserName用户名VARCHAR(20)否A_Password密码VARCHAR(20)否管理员用户表是用于在门禁系统登陆时进行验证,只有用户名和密码与此表中的信息相匹配,才能验证成功。

功能实现流程如下:

(1)获得用户输入的登录信息。

(2)建立和数据库服务器的连接,在数据库中验证登陆信息是否正确。

(3)将返回的查询结果缓存在数据集中。

(4)判断登录是否成功,若成功则提示登录成功然后进入门禁管理界面,若失败则提示“登录失败”。

3.2.2登记信息模块登记信息界面如图3-5所示:

图3-5 登记信息界面本模块流程图如图3-6所示:

图3-6登记信息流程图本模块需使用的数据库表:

人员信息表(tb_UserInfo),如表3-2所示表3-2人员信息表列名含义类型及大小是否允许为空U_CardNumber卡号VARCHAR(40)否U_Name姓名VARCHAR(20)否U_Sex性别VARCHAR

(2)否U_Identity身份证号码VARCHAR(18)否U_jurisdiction权限(门的权限)VARCHAR(10)否U_Status状态VARCHAR(20)否在登记信息时,登记的用户信息都会存储在此表中。

功能实现流程如下:

(1)调用ISO15693Reader类中OpenSerialPort方法的打开串口(必须打开正确的串口,否则可能导致出现错误),若打开成功提示“串口成功打开”,若失败则提示“串口打开失败”。

(3)输入姓名、性别、身份证号、选择权限,单击登记信息按钮触发单击事件,在登记信息按钮的单击事件中调用sqlHelper类中的Insert()方法将登记的信息存储到数据库中的tb_UserInfo表中。

3.2.3挂失和取消挂失模块挂失和取消挂失界面设计如图3-7所示:

图3-7 挂失和取消挂失界面设计本模块流程图如图3-8所示:

图3-8挂失及取消挂失功能流程图本功能实现流程如下:

输入身份证号,若需要挂失则单击挂失按钮,在挂失按钮的单击事件中调用sqlHelper类中的ReportTheLoss方法进行挂失,若成功提示“挂失成功”,失败则提示“挂失失败”。

若需要取消挂失(即将被挂失的卡恢复使用),则单击取消挂失按钮,在取消挂失按钮的单击事件中调用sqlHelper类中的CancelReportTheLoss方法取消挂失,若成功提示“取消挂失成功”,失败这提示“取消挂失失败”。

本模块用到的数据库表:

人员信息表(tb_UserInfo)。

3.2.4刷卡开门模块刷卡开门界面如图3-9所示:

图3-9 刷卡开门界面设计本模块流程如图3-10所示:

图3-10刷卡开门功能流程图本模块需使用的数据库表:

刷卡记录表(tb_OpenDoorRecord),如表3-3所示:

表3-3刷卡记录表列名含义类型及大小是否允许为空O_CardNumber卡号VARCHAR(20)否O_Time时间DATATIME(20)否O_door被开启的门VARCHAR(20)否表功能:

刷卡开门时,用于存储刷卡开门的记录。

本功能实现的前置条件:

建立通道和Ping建立通道:

建立由本系统向网关发起并建立的连接通道:

管理配置通道(T1),在该通道由系统发起命令请求,网关反馈命令响应,建立反馈命令响应通道:

数据上报通道(T2),命令执行的结果由网关通过数据上报通道(T2)来回传给系统;命令与命令响应之间实行同步操作,即发送完一个命令之后,必须等待接收到命令响应后才能下发下一个命令。

建立通道是使用Socket(套接字)通信技术实现的。

Ping:

Ping指令是链路检测命令,用于检测通道是否建立成功,并且上报节点信息。

注:

通道是使用Socket套接字进行建立的,建立通道成功后才能使用通道给协调器发送命令控制继电器打开电磁门,建立通道是本功能实现的必要条件。

建立通道实现:

(1)实例化套接字对象

(2)设置要发送的消息头和消息体(访问网关的用户名和密码)(3)调用GetSendMessage()方法将消息头和消息体都存储在数组中(4)调用SendMsg()方法使用套接字发送消息(5)调用RecvMsg()方法接收消息(6)调用GetReciveMessage()方法将接收到的消息头和消息体存储在数组中(7)根据接收到的消息判断建立通道是否成功,若成功提示“xx通道Connect指令执行成功!

”,否则提示“T1通道Connect指令执行失败!

“Ping实现(Ping的前置条件是建立通道成功)

(1)调用WSN_GRIP_DLL.dll中的GetSequenceID()获取消息流水号

(2)设置要发送的消息头和消息体(网关IP地址和指定端口)(3)调用GetSendMessage()方法将消息头和消息体都存储在数组中(4)调用SendMsg()方法使用套接字发送消息(5)调用RecvMsg()方法接收消息(6)调用GetReciveMessage()方法将接收到的消息头和消息体存储在数组中(7)根据接收到的消息判断Ping是否成功,若成功则提示“Ping指令成功!

”,失败则提示“Ping指令失败!

”实现步骤:

(1)选择需要打开的门,打开串口,调用ISO15693Reader类中OpenSerialPort方法的打开串口(必须打开正确的串口,否则可能导致出现错误),若打开成功提示“串口成功打开”,若失败则提示“串口打开失败”。

(2)串口成功打开后程序开启线程,在线程中调用searchCard()方法循环读卡,若读卡成功则在界面上显示读取到的卡号,若失败则提示“搜索卡片操作失败!

”。

(3)读卡成功后调用SwipingCard()方法判断该卡是否存在,判断该卡是否可以使用,检查刷到的卡的权限和选择的门是否匹配,若匹配则调用SensorWriteLights()方法打开门,十秒后门自动关闭若不匹配则提示相应的门打开失败。

3.2.5注销模块注销模块界面如图3-11所示图3-11注销模块界面本模块流程图如图3-12所示:

图3-12注销模块流程图输入身份证号,单击注销按钮,在注销按钮的单击事件中调用sqlHelper类中的IsExisted()方法检测数据库中是否有与说输入身份证号对应的记录,若存在记录,则调用sqlHelper类中的CloseAccount()方法进行注销,注销成功提示“注销成功!

”,注销失败提示“注销失败!

”。

本模块用到的数据库表:

人员信息表(tb_UserInfo)。

第四部分 系统功能测试与评价随着人们对软件质量的重视越来越高,软件测试在软件开发中的地位越来越重要。

而软件测试是目前用来检测软件是否能完成预期功能唯一有效的方法。

其目标是充分利用有限的人力、物力和财力资源,高效率、高质量地进行测试。

4.1测试概述在软件实现过程中,程序员不仅要编写规范化的程序代码,而且要对程序代码进行单元测试,即模块测试或部件测试。

之后,再由测试人员进行集成测试和验收测试。

除了单元测试可以借用较成熟的测试工具外,其他测试仍然较难实现自动化。

全球IT界对软件的测试,至今仍然以人工的黑盒测试为主,白盒测试为辅。

通常的做法是:

宏观上采取黑盒子方法,微观上采取白盒子方法;大的功能模块采用黑盒测试,小的构件采用白盒测试。

我们在开发“基于RFID的家庭智能门禁管理系统”的时候,每增加一个构件,都用白盒子测试。

通过白盒子测试后,才把构件集成到系统中。

当所有的构件都集成完毕,再用黑盒测试。

通过了黑盒测试后才发布该系统。

若卡存在,且能正常使用,且所选择的门和卡的权限相匹配则打开电磁门,否则提示失败信息。

这次做论文的尽力也会使我终身受益,我感受到做论文是要真真正正用心去做的一件事情,是真正的自己学习的过程和研究的过程,没有学习就不可能有研究的能力,没有自己的研究,就不会又说突破,那也就不叫论文了。

希望这次的经历能让我在以后学习中激励我继续进步。

致谢在论文即将完成之际,回顾紧张但又充实的毕业设计和开发过程,本人在此向所有关心我及帮助我的老师和同学们致以最真诚的感谢。

三年的大学生活,所收获的不仅仅是愈加丰厚的知识,更重要的是在阅读、实践中所培养的思维方式和表达能力。

很庆幸这些年来我遇到了许多恩师益友,无论在学习上、生活上还是工作上都给予了我无私的帮助和热心的照顾。

对他们的感激之情难以用语言量度,谨以我最朴实的话语致以最真挚的谢意。

在这里首先要感谢我的导师——专业负责人X老师。

他认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我受益匪浅。

他无论在理论上还是在实践中,都给与我很大的帮助,从确定项目、制定计划、系统分析、系统设计、总体设计和详细设计到系统调试,让我懂得了整个软件开发的全过程同时也加深了我对编程的理解,熟悉了visualstudio2010应用开发工具,使我在思考问题、分析问题、解决问题和综合运用专业知识的能力上大大提高。

这对于我以后的工作和学习都有一种巨大的帮助,在此感谢他耐心的辅导。

在撰写论文阶段,X老师几次审阅我们的论文,提出了许多宝贵意见,没有他的指导,我们就不能较好的完成课题设计的任务,除了敬佩老师们的专业水平外,他们严谨的治学态度,精益求精的工作作风,诲人不倦的高尚师德,严以律己、宽以待人的崇高风范,朴实无华、平易近人的人格魅力也对我影响深远。

谨此向颜老师表示衷心的感谢和崇高的敬意。

同时我也感谢我的同组同学在这次毕业设计中的支持和帮助。

参考文献1.霍尔顿、杨浩.《C#入门经典第三版》[M].清华大学出版社2.内格尔、BillEvjen.《C#高级编程第8版》[M].清华大学出版社3.夏普、周靖.《VisualC#2010从入门到精通》[M].清华大学出版社4.王小科、王军.《C#开发实战1200例第1卷》[M].清华大学出版

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

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1