信息技术教学软件的设计思路与技术实现.doc

上传人:星星 文档编号:1023923 上传时间:2024-03-23 格式:DOC 页数:10 大小:580KB
下载 相关 举报
信息技术教学软件的设计思路与技术实现.doc_第1页
第1页 / 共10页
信息技术教学软件的设计思路与技术实现.doc_第2页
第2页 / 共10页
信息技术教学软件的设计思路与技术实现.doc_第3页
第3页 / 共10页
信息技术教学软件的设计思路与技术实现.doc_第4页
第4页 / 共10页
信息技术教学软件的设计思路与技术实现.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、信息技术教学软件的设计思路与技术实现奉化中学 王丰【摘要】新课程理念下的信息技术教学十分注重对学生学习的评价。评价也是在教学各环节中必不可少的一环,它的目的是检查和促进教与学。因此,在日常教学中,方便、科学、有效的评价也显得尤为重要。本文以2006年会考导引中五套试卷为例,介绍了开发具有评价功能的训练复习型教学软件的设计思路,以及如何使用VB6.0来具体实现试卷的抽取、各类试题的批改、成绩的上传和成绩的导出统计等功能。【关键词】评价 教学软件 VB6.0 批改程序 教学软件是一种根据教学目标设计、表现特定的教学内容、反映一定教学策略的计算机教学程序。它可以用来存储、传递和处理教学信息,能让学生

2、进行交互操作,并对学生的学习做出评价的教学媒体。根据多媒体教学软件的内容与作用的不同,可以将多媒体教学软件分为如下几种类型:课堂演示型、学生自主学习型、模拟实验型、训练复习型、教学游戏型、资料工具型。因为我在平时教学中编写的软件基本上都是以试题的形式出现,主要属于学生自主学习型和训练复习型,所以下面我就简单谈谈在开发这类教学软件过程中的设计思路和技术实现。一、需求分析信息技术不同于其他学科,学生的学习过程和很多的实践活动都是在计算机上完成的,而且都以操作为主。那么,作为教师,我们怎样科学有效的评价学生?怎样随时了解学生的学习情况?作为学生,怎样进行自主学习、自我测试?因此,开发具有试题批改和成

3、绩反馈功能的教学软件是十分必要的。1、对教师来说,减轻了教师工作量,方便了教师对学生学习情况的了解。信息技术学科的试题主要是以操作题为主。而在平时的课堂教学中,老师也往往都会布置相应的练习供学生测试以便了解学生的学习情况。所以老师对作业的批改和成绩的统计分析是必不可少的,面对大量的操作类试题,老师一个个打开进行查看或手动批改,再统计分析成绩,这样不仅效率低,而且长此以往,势必会给老师增加相当多的工作量。所以让计算机自动批改并统计成绩,可以减轻教师的工作量,让教师把时间和精力都用在课堂教学以及提高教学效果上。2、对学生来说,有利于学生自主学习,并激发了学习兴趣。学生往往都有重视成绩的心理,都想得

4、满分。所以,使用带有批改和成绩上传功能的教学软件容易激发学生的学习兴趣和提高学习的积极性。他们在听讲时都会全身心投入,做练习时有不懂的地方或不会做的题目都会积极的问老师问同学。就算有个别不认真学习的学生,也会很快受到环境的影响而融入其中。想着为什么这儿会丢分,哪儿为什么操作得不对,并乐此不疲。而且,如今大部分学生家里都有电脑,所以学生除了在学校学习外,他们还可以在家里进行自主学习、自我测试。二、总体设计软件常见的结构模式有:C/S结构,即Client/Server(客户机/服务器)结构。B/S结构,即Browser/Server(浏览器/服务器)结构。C/S能充分发挥客户端的处理能力,很多工作

5、可以在客户端处理后再提交给服务器。客户端响应速度快。主要适用于局域网环境,客户端都要安装客户端软件,应用程序系统扩展维护复杂。客户端需要安装专用的客户端软件。首先涉及到安装的工作量,其次任何一台电脑出问题,如病毒、硬件损坏,都需要进行安装或维护。还有,系统软件升级时,每一台客户机需要重新安装,其维护和升级成本非常高。B/S可以在任何地方进行操作而不用安装任何专门的软件。客户端只需标准的浏览器。系统的扩展非常容易,只要能上网,再由系统管理员分配一个用户名和密码,就可以使用了。采用Internet/Intranet技术,适用于广域网环境。客户端零维护。软件采用哪种结构,一般根据内容和功能来选择。这

6、里我以2006年编写的会考导引练习软件作为例子。本软件采用C/S模式,软件结构如图所示:主界面各部分试题试卷内容答题批改收卷程序接收成绩保存成绩上传成绩输入姓名、服务器IP学生机教师机选择试卷统计分析开发工具采用Visual Basic6.0(简称VB)。一是因为VB适合快速开发,相对于VC等开发软件更易于上手,而且开发的效率高、周期短。二是因为word、excel等office软件里的宏都是VBA,而VBA是VB的一个子集,两者可以很好的结合。而且利用宏可以帮助我们快速有效的写出批改程序。三、详细设计1界面设计与文件结构因为VB6毕竟是win98时代的产物,所以在界面设计上,VB6的窗体和控

7、件都是win98风格,不美观、缺乏时代感。虽然用vb2003/vb2005来开发可以做出XP风格的界面,但生成的应用程序都需要.net framework平台,脱离了这个环境则无法运行,不适合在学校机房使用。所以,在使用VB6开发时应尽可能自己编写一些用户控件来设计界面(当然,如果只是以功能为主,那么可以不考虑这些)。在我编写的这些软件里,为了使用界面更加清新时尚,能让学生眼前一亮,所以整个软件的界面颜色、按钮样式均模仿QQ窗口(界面风格如图所示)。采用了网上免费的QQFrom和QQButton这两个用户控件,使用方法和VB里的From、Button控件一样。 (图一) (图二)界面设计:按照

8、上面的软件结构图设计好界面。(对于功能相似的控件可以使用控件数组,以提高程序开发效率。)文件结构:设计好每一套试卷的试题,并建立好相应的目录。题目少可以用文本文件来存储。为保证文本文件中信息的安全性,防止学生打开直接查看,可以改变文本文件的扩展名、改变文本文件中答案的顺序、或对答案进行加密等。题目多可以用Access数据库来存储。这样只要给数据库设置个密码就可以保证题库的安全性了。2抽题设计好界面和题目后就可以编写各功能模块的代码了。(下面主要介绍操作类试题的抽取、批改,选择题部分较简单,在此不作讨论,网上也有很多的选择题实例可供大家参考)当学生选择某一套试卷后,就要执行抽题操作。抽题也就是根

9、据学生的选择将软件目录下的题目复制到考试文件夹下。主要是对文件和文件夹进行复制。对文件和文件夹进行操作需要使用FSO(File System Object)对象模型,FSO的功能非常强大,它能创建、改变、移动、删除文件/文件夹;能检测文件/文件夹是否存在,文件/文件夹的路径;能获取文件/文件夹的信息,如:名称、创建日期等。要使用FSO,首先必须在工程中引用Microsoft Scripting Runtime。抽题主要使用了FSO复制文件和复制文件夹这两个方法,及CopyFile和CopyFolder。部分代码如下:Public Ex(5) As String 定义一个字符串数组用于存放试卷名

10、Public fso As New FileSystemObject 定义一个fso对象Private Sub Form_Load() 窗体显示时初始化Ex()数组中的值Ex(1) = 试卷一Ex(2) = 试卷二Ex(3) = 试卷三Ex(4) = 试卷四Ex(5) = 试卷五End Sub因为每一个抽题按钮的功能都是类似的,唯一不同的就是所抽取的试题名称不一样,所以可以将抽题按钮做成按钮控件数组,以提高程序开发效率,也便于以后的源程序维护。这样,将试题的文件名用数组变量来表示,就可以用一段程序来实现所有按钮的抽题功能。Private Sub Button1_Click(Index As I

11、nteger) 当点击某一套的按钮后执行抽题操作fso.CreateFolder(“c :考生文件夹”) 在c盘下建立考生文件夹,路径和目录名可自已设定。fso.CopyFile App.Path & “xxjshkexcel” & Ex(index) & “.xls”, “C :考生文件夹” & Ex(index) & “.xls” 复制excel试题文件fso.CopyFolder App.Path & xxjshkWebDo, “C :考生文件夹WebDo” 复制网页试题文件夹End Sub上述程度中主要以复制excel试题和网页试题为例,复制其它试题方法类似。软件中还有一些其它地方也会

12、用到抽题操作。继续答题:比如学生在练习的过程中不小心关闭了软件,那么下次进入之后当然希望继续答题而不是重新答题。所以这种情况需要判断考生文件夹中试题是否存在,存在则不抽题,不存在则抽题。判断文件或文件夹是否存在通常使用fso的FileExists()和FolderExists()方法。重做:及从考生文件夹中删除要重做的试题,然后再抽题。删除文件或文件夹主要使用fso的DeleteFile()和DeleteFolder()方法。3批改功能的实现学生做完练习题后,需要点击“批改”按钮来反馈成绩。信息技术教学中常见的操作试题类型有:windows操作题、word操作题、Excel操作题、Intern

13、et操作题、Frontpage操作题。下面分别介绍每一类操作题的批改原理。l Windows操作题的批改没有编写过练习软件的老师可能会觉得很难,我们怎么知道学生有没有对文件执行新建、复制、剪切等操作呢?其实我们根本没必要去知道,我们不可能去写大量的代码来截取捕捉鼠标和键盘事件,看学生有没有执行这些操作,这样有些小题大做了。其实windows操作题的批改非常的简单,原理如下: 新建、删除、重命名、复制、剪切、创建快捷方式 就是判断该文件或文件夹是否存在。新建文件或文件夹 在该目录下存在删除文件或文件夹 在该目录下不存在重命名改名前的文件或文件夹在该目录下不存在,并且改名后的存在复制文件或文件夹

14、在源目录下存在,并且在目的目录下也存在剪切文件或文件夹 在源目录下不存在,并且在目的目录下存在判断文件夹是否存在:fso.FolderExists判断文件是否存在:fso.FileExists例如:If fso.FolderExists(C:试卷二WinWorkFlowerBmp) = True Then score = score + 5If fso.FileExists(C:试卷一WinWorkNoipa.pas) = True Then score = score + 5设置墙纸、屏保 主要就是读取注册表中相关的键值。VB读取注册表:可以使用API函数RegOpenKeyEx、RegQu

15、eryValueEx、RegCloseKey来对注册表进行打开、查询等操作,并通过读取相对应的键值来判断墙纸、屏保的设置。墙纸在注册表中的路径为:HKEY_CURRENT_USER Control PanelDesktop Wallpaper屏保在注册表中的路径为:HKEY_CURRENT_USER Control PanelDesktop SCRNSAVE.EXEl Excel/Word操作题的批改Excel和Word同属于OFFICE,所以它们的批改方法也类似,这里以Excel为例。对于Excel练习题的批改其实就是VB在后台打开Excel工作表,并使用内置的VBA函数对Excel工作表中

16、的对象进行判断。为了能在VB中调用Excel对象,首先必须在VB工程中引用“Microsoft Excel 11.0 Object Library”(如果是word,则引用“Microsoft word 11.0 Object Library”)。一般可以通过如下的顺序来对EXCEL文件进行批改:打开Excel设置当前工作表选择一个单元格或区域进行判断关闭Excel比如要打开C盘下“练习1.xls”:Workbooks.Open (C:练习1.xls) 比如设置Sheet1为当前活动工作表:Sheets(Sheet1).Activate单元格的表示:Range(“列号行号”) 例:Range(

17、A1)区域的表示:Range(“列号行号:列号行号) 例:Range(A1:D5)选择一个单元格或区域:select 例:Range(A1:D5).Select,则以后就可以用Selection来表示Range(A1:D5)。Workbooks.Close例如:判断C:练习1.xls 文件Sheet1工作表中的A1:D5单元格中的文字是否为宋体:Workbooks.Open (C:练习1.xls)Sheets(Sheet1).Activate Range(A1:D5).SelectIf Selection. Font. Name = 宋体 Then score = score + 5了解了工作

18、表、单元格、区域的表示方式后,我们就能写出EXCEL中各种常见操作的批改程序了。可是Excel中的对象以及它们的方法、属性都非常多,我们怎能都记住呢?其实我们完全没必要都记下来,我们可以借助对象浏览器来查看Excel对象的方法、属性(在VB中选择菜单视图对象浏览器Excel库)。这样,以后要用到哪个属性或者方法只需要到对象浏览器中查找就可以了。下面再介绍一下EXCEL里常见的两个操作(公式/函数、排序)的批改方法。n 公式/函数 中的数值为相对当前单元格的位置(R:行的相对位置)上,下 +(C:列的相对位置)左,右 +单元格公式/函数的表示:Range(列行). FormulaR1C1 =公式

19、/函数公式/函数中单元格的表示:R C 例如:下面表格中F3单元格的求总分公式和函数可表示为:Range(“F3).FormulaR1C1 = =SUM(RC-4:RC-1) Range(“F3).FormulaR1C1 = = RC-4+RC-3+ RC-2+ RC-1 了解了F3单元格的公式和函数的表示后,其他几个单元格是否也要一一列出呢?其实可以直接用一个for循环来实现:For i = 3 To 7 If Range(“F & i).FormulaR1C1 = =SUM(RC-4:RC-1) Then score = score + 1Nextn 排序:也就是将相邻的两个单元格进行两两

20、比较。例:将上面的学生成绩表按语文成绩从高到低排序:Dim flag As BooleanFlag = True For i = 3 To 6 If Val(Range(“B & i).Text)Val(Range(“B & i+1).Text) Then Flag = False Exit For End IfNextIf Flag = True Then score = score +5小技巧EXCEL里还有很多的操作,比如:数据筛选、分类汇总、建立图表等,这些操作的批改程序也相对复杂一些,我们不会写怎么办呢?其实没关系,我们可以利用EXCEL的宏来帮助我们快速的写出批改程序。首先打开要写

21、批改程序的EXCEL文件,并录制一个新宏,然后把所有的试题做完,完成后停止录制并查看生成的宏。这时我们会发现,我们做题的过程已全部被录制到宏里面了,现在我们只需要把宏里自动生成的VBA语句稍作修改就能直接复制到VB程序中使用。对于office里的其它的软件(比如:Word、PowerPoint)的批改都可以使用这种方法。l IE操作题的批改下载图片、文字、文件方法与windows操作题中文件操作的判断类似,也就是判断这些图片、文本等文件在该目录下是否存在。为使批改更加精确,也为了防止学生在做题时投机取巧,可以在此基础上再判断该图片的大小和文本文件里的文字内容,从而判断出这些图片和文本文件是否来

22、自该网页。设置IE主页、历史记录天数通过读取注册表里键值来判断,方法和屏保、墙纸的判断类似。例:判断IE主页是否是“”就是判断HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerMainStart Page的键值是否是“”。l FrontPage网页制作操作题的批改要对网页进行批改,首先必须了解网页文件,网页到底是什么文件?通过查看源文件我们会发现网页其实就是文本文件,只不过里面的内容都是用html标记来显示的。学生对网页的操作都会反映在html源文件里。所以要批改网页文件,只要像读取文本文件那样读取整个网页源文件,然后分析里面的html代码就

23、可以了。读取文件既可以用传统的I/O语句也可以用FSO对象模型来读取,这里以FSO为例,例如要读取C:试卷一WebDo index.htm,则可以用下列程序: p = c:试卷一WebDo index.htm Set fil = fso.GetFile(p) Set ts = fil.OpenAsTextStream(ForReading) fpstr = ts.ReadAll ts.Close这样就可以把整个网页文件读取,而要判断网页源文件里的某一步操作,则必须定位到此操作所对应的这段html代码。定位通常要用到字符串查找函数InStr。例如:判断表格边框粗细是否为0。 Fpstr1 = b

24、order=0 n1 = InStr(1, fpstr, table, 1) n2 = InStr(1, fpstr, tr, 1) fp1 = Mid$(fpstr, n1, n2 - n1) If InStr(1, fp1, fpstr1, 1) Then score = score + 5但是,如果我们要查找的字符在html中有多个,我们该怎样定位呢?通常可以使用下列两种方法来定位。逐步求精法通过分析网页源文件,逐步缩小定位的范围并读取该操作所对应的部分html代码。例如:判断是否在表格的第3行第1列的单元格里插入图片hu.jpg(因为网页源文件里有很多tr、td标记,所以可以通过一个f

25、or循环来定位到第3行第1列单元格)。 n = 1 For i = 1 To 3 n = InStr(n + 4, fpstr, tr, 1) Next n1 = InStr(n, fpstr, td, 1) n2 = InStr(n, fpstr, , 1) fp3 = Mid$(fpstr, n, n2 - n1 + 5) fpstr1 = img fpstr2 = hu.jpg If InStr(1, fp3, fpstr1, 1) And InStr(1, fp3, fpstr2, 1) Then score = score + 5 当网页中的内容很多或页面设计很复杂时,那么使用逐步求

26、精法会显得较繁琐。这时我们可以使用注释法来进行html定位。 注释法因为在网页源文件里添加注释不会对网页产生任何影响,所以我们可以在需要定位的html代码前后加上一段注释,然后通过读取注释来定位(html中的注释符为)。如前面的例子:判断是否在表格的第3行第1列的单元格里插入图片hu.jpg。首先可以在第3行第1列的单元格所对应的html代码前后随便加上一些注释,假设分别加上和 n1 = InStr(1, fpstr, , 1) n2 = InStr(1, fpstr, , 1) fp3 = Mid$(fpstr, n1, n2 - n1) fpstr1 = img If InStr(1, f

27、p3, fpstr1, 1) And InStr(1, fp3, fpstr2, 1) Then score = score + 5 通过这个例子我们可以看出,使用注释法可以快速精确的定位,比逐步求精法方便且效率高。但学生在操作网页的过程中有可能会在不知情的情况下将注释删掉从而导致批改程序找不到注释而无法正确批改。两种方法各有利弊,可根据网页实际情况来选择相应的方法。试题批改是整个教学软件的核心内容,编写批改程序的工作量也是相当大的。所以,写好的程序必须反复调试,而且因为学生对一道题目可能有不同的做法,所以还必须对不同的做法分别写出相对应的批改程序,充分考虑到所有可能的情况。4成绩上传功能的实

28、现当学生点击上传成绩按钮时,可以将学生机的计算机名、IP地址、学生姓名、分数这四个信息发送到教师机。要实现局域网中数据通信,需要用到Winsock控件。Winsock是windows提供的网络编程接口,它提供了基于TCP/IP(传输控制协议/网间协议)协议的接口实现方法。TCP/IP协议提供两种通信方式:TCP方式和UDP方式。TCP是一种面向连接的服务,它在两个主机之间建立连接,提供双向、有序且无重复的数据流服务,以及流量控制、差错检测和纠错等服务,保证数据的可靠传输。UDP是一种双向的无连接数据服务,它把数据发送出去但并不进行差错控制和检查,所以不能保证数据的可靠性,因而一般只用于少量数据

29、的传输。采用哪种协议,通常可以考虑以下几点:n 在收发数据过程中是否需要对方确认或应答?n 数据是否很多?数据传输质量要求是否很高?n 数据发送是间歇的还是一次会话?因考虑到流量小、资源占用少,可以采用UDP协议。在窗体上添加一个Winsock控件(Winsock1),在其属性中设置为UDP协议,并对Winsock1的本地端口、远程主机端口、远程主机IP地址进行初始化。为什么要设置IP和端口号呢?因为通过网络进行数据通信,需要用地址来标识网络中的主机,这样才能保证数据正确的发送到主机。TCP/IP协议使用IP地址作为网络中的标识,从而实现通过IP地址建立彼此之间的联系。通常情况下,由于每台主机

30、上运行不止一个应用程序,所以为使应用程序间建立连接,还需要一个地址标识,也就是端口号。在TCP/IP协议中使用端口来作为主机上运行的应用程序的标识号。因此,TCP/IP协议中一个有效的网络地址包括IP地址和端口地址。如图:IP地址端口地址标识主机标识主机上的应用程序Winsock1.Protocol = sckUDPProtocolWinsock1.RemoteHost = “192.168.0.1”Winsock1.RemotePort = 4022其中本地和远程主机端口可自由设定(1-65535),但不要使用一些系统默认的端口(比如:80(http),21(FTP),110(电子邮件POP

31、3)和常用端口(比如:QQ聊天软件端口8000、8080等),以免冲突。使用Winsock的SendData方法即可实现数据发送。上传的各个数据之间用#号来连接,那么服务器端程序接收到这些数据后就可以按#来分割出每个信息。sendtxt = Winsock1.LocalIP & # & Winsock1.LocalHostName & # & UserName & # & UserScoreWinsock1.SendData sendtxt5教师机收卷程序的实现在VB中新建一工程,并设计好用来显示学生成绩的界面。并添加一个Winsock控件(Winsock1),设置其传输协议为UDP协议,并设

32、置Winsock1的本地端口(此处的本地端口应和学生端中的Winsock1的远程主机端口一致)。Winsock1.Protocol = sckUDPProtocolWinsock1.LocalPort = 4022Winsock1.Bind 4022并定义全局变量数组用于存放接受到的消息。总共能接受200人的成绩。(数组长度可自定)Private ip_str(200) As StringPrivate name_str (200) As StringPrivate username_str (200) As StringPrivate score_str (200) As StringPri

33、vate i As Integer当有消息来临时,会触发Winsock1_DataArrival事件。在Winsock1_DataArrival事件里输入如下代码用来接收并显示相关的信息:学生机器名、IP、姓名、分数(效果如图三)。Winsock1.GetData rec, vbStringstinfo = Split(rec, #)text1.text = stinfo(0) + stinfo(1) + stinfo(2) + stinfo(3) + Chr(10) + Chr(13)i = i + 1ip_str(i)= stinfo(0)name_str (i)= stinfo(1)us

34、ername_str (i)= stinfo(2)score_str (i)= stinfo(3)(图三)教师端程序之所以要接收并显示学生机机器名和IP,是因为常有学生会不小心写错名字,那么我们就可以通过学生机机器名或IP地址来确认并作修改。保存成绩分为两种格式:.txt文本文件和.xls电子表格文件。将成绩保存为.txt文本文件其实就是创建一上文本文件并向其中写入数据,具体不再叙述。.xls电子表格格式的成绩表可以方便教师统计分析成绩,具体实现为:Workbooks.Open (App.Path & 成绩表.xls) For j = 1 To i Sheets(Sheet1).Range(A

35、 & j) = ip_str(j) Sheets(Sheet1).Range(B & j) = name_str (j) Sheets(Sheet1).Range(C & j) = username_str (j) Sheets(Sheet1).Range(D & j) = score_str (j)NextWorkbooks.Application.SaveWorkspaceWorkbooks.Close6打包发布VB自带有打包程序,可制作安装程序,但界面不美观。可以使用一些专业打包软件,比如:InstallShield、Setup Factory等,我用的是Setup Factory,它有

36、制作安装程序向导,操作简单,方便初级用户使用,而且制作出来的安装程序界面美观、专业。打包可以把学生端程序和教师端的收卷程序打包在一起,也可以分别打包,因为两个程序都是使用的UDP协议,没有严格的客户端和服务器端之分,所以,局域网中的任何一台电脑都可作为教师机来运行收卷程序,学生只需要在课件的服务器IP文本框中输入这台电脑的IP地址即可。四、结语这些教学软件在实际教学中效果良好,特别是学生对学习的兴趣有所提高,对每一堂课的练习题都是迫不及待的想去完成,学习热情高涨,对批改中显示做错的题目,他们都会表现出一种刨根问底的精神,问同学、问老师,直到把问题解决。这些带有批改试题和成绩上传功能的教学软件发布到网上后,得到了很多老师的肯定。很多老师也在QQ上或发EMAIL询问这些软件的开发过程。于是我将这类软件的设计思路和技术实现写出来供大家参考,仅作抛砖引玉。特别是随着新课程的实施,非常缺少选修部分的教学类、练习类软件(比如多媒体模块中的FLASH、PHOTOSHOP等),所以也期望着大家能开发出更多优秀、实用的软件,一起为信息技术教育事业尽一份力。【参考文献】1 张军征多媒体教学软件设计原理与方法科学出版社,20072 张树兵Visual Basic 6.0入门与提高清华大学出版社,20023 北京博彦科技Office VBA 编程高手北京大学出版社,2000

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 技术资料 > 其他资料

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922