“全民点评APP”概要设计.doc

上传人:豆**** 文档编号:33467607 上传时间:2022-08-11 格式:DOC 页数:25 大小:134KB
返回 下载 相关 举报
“全民点评APP”概要设计.doc_第1页
第1页 / 共25页
“全民点评APP”概要设计.doc_第2页
第2页 / 共25页
点击查看更多>>
资源描述

《“全民点评APP”概要设计.doc》由会员分享,可在线阅读,更多相关《“全民点评APP”概要设计.doc(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、如有侵权,请联系网站删除,仅供学习与交流“全民点评APP”概要设计【精品文档】第 25 页“全名点评”APP 概要设计说明书组员:严骞(答辩人),卫浩(组长),季兆生,李红祥,李天宇目录1.引言31.1编写说明31.2背景31.3定义31.4参考资料42.任务概述52.1目标52.2用户的特点52.3假定与约束52.4运行环境53.总体设计63.1对功能的规定63.1.1系统设计功能层次图63.1.2功能模块简介73.2非功能性需求设计94.运行环境要求114.1设备114.2支持软件115. 接口设计115.1 HTTP接口设计115.1.1 URL接口115.1.2 搜索用户接口125.2

2、Sokect 自定义协议135.2.1 Client 部分156. 系统出错设计246.1 APK文件异常处理246.2 UI文件异常处理256.2 非软件内部问题处理措施281.引言1.1编写说明如今手机订餐、订票、订旅店的APP不胜枚举,这给我们生活带来了更多的方便,也在改变着我们的生活方式,而在云云之中选择一款方便、安全、功能强大的app则令人苦恼。因此开发这套全民点评app是非常有必要的。本需求的编写目的在于为系统的开发做好前面的部署,以便于我们可以开发出系统功能更加全面,使用户操作起来更加的方便。1.2背景随着科学与技术的发展,人们对物质生活的要求越来越高,而如何快速选择优质的社会服

3、务,也逐渐成为社会的焦点,使今天的社会进入了以计算机为核心的社会。网络的发展给我们带来了无限的商机与便利。点评类APP也同样能够发挥巨大的作用那就是APP点评。全民点评来源于人民同时也服务于人民,用户可以根据真实情况对不同店铺做出不同评价,满足不同用户需求,采用奖励制,采集优质评价。 消费者既可以实现讲出自己消费后的内心感受,同时可以得到一定的回报。最终要达到的目的是使得人们的生活更加的便利,一方面消费者在消费完之后,通过全民点评这个软件来评价此次消费,并获得一定的积分奖励,当积分到一定的程度就可以越换礼品;另一方面消费者可以通过全民点评来查看哪些地方评价较高,自己选择提供参考。此项目的主要功

4、能就是通过消费者点赞和评价,来获取积分,并为他人的消费提供一个参考作用。1.3定义本产品是为餐厅、旅店专门开发的一套点评管理系统,旨在合理化安排用户需求,给用户提供更多有效数据,同时方便消费者更加方便的就餐、住店。1.4参考资料Karl E.Wiegers、刘伟琴、 刘洪涛,软件需求(第2版) .清华大学出版社 (2004-11出版)杨丰盛Android应用开发揭秘M.北京:机械工业出版社,2010余志龙,陈昱勋,郑名杰Android SDK开发范例大M.北京:人民邮电出版社,2010郑建,贺超Android和Chrome的发展与未来J.移动通信,2010.3麦斯阿塞克(Leszek A.Ma

5、ciaszek)、马素霞、王素琴、 谢萍,需求分析与系统设计(原书第3版) .机械工业出版社 (2009-09出版) .王向辉,张国印,沈洁.Android应用程序开发.清华大学出版社,2010年3月江开耀.软件工程与开发技术(第二版).西安:电子科技大学出版社,2009.张星.网页开发三合一教程M.北京:中国宇航出版社.2009王鹏.数据库技术及其应用M.北京:人民邮电出版社.20082.任务概述2.1目标开发该软件系统的主要意图为针对当前超消费,以及网络消费市场的广大潜力和市场乱象,开发出一款新颖、透明、真实、准确的消费评价系统,真正实现线上线下的资源共享和无缝接轨,树立行业标杆,网络远程

6、整治市场乱象。与其他同类软件系统相比,本软件系统严格管控企业用户和消费者信息录入,力求录入信息最大程度的真实、有效,排除虚假信息,给人们提供更加准确的消费需求。2.2用户的特点该软件的主要是向经常使用网络的网络订餐用户提供选择的目标,主要是通过用过餐用户的点评来为自己的选择做出指导。主要的用户群体在学生,单位工作人员。2.3假定与约束在系统的开发过程中,由于系统比较庞大,系统和数据库之间的数据交互,还有就是客户端与服务器间的交互会成为一个很严重的问题。在多用户多线程同时提交信息的时候可能会导致系统出现卡顿现象,这是我们需要解决的。还有约束条件就是开发产品与硬件设备的兼容性问题。2.4运行环境A

7、ndroid 4.0及以上版本智能手机3.总体设计3.1对功能的规定3.1.1系统设计功能层次图图3-1系统功能总图图3-2总体流程图3.1.2功能模块简介该系统分为登录页面、首页界面、赏析页面、我的界面四大模块。其中登录页面主要包括用户登录、用户注册以及找回密码。首页页面主要包括每日签到、发布信息、店铺评价信息、城市切换等快捷方式。赏析界面主要包括用户评价。我的界面主要包括个人信息的查看与修改、进行每日签到、发布信息、删除已发布信息和积分。(1)主界面模块主控界面是顾客打开APP时,最先呈献给用户的,在功能布局进入界面是城市用GPS定位所在的城市,还可以切换到其他的城市(现开放城市:沛县、丰

8、县、邳州、新沂、徐州、睢宁)、登录模块、主控模块、赏析功能和账号功能等功能模块。模块的分布还是很合理的。主控制模块上面主要是签到等功能。每个模块之间可以方便的切换。登录成功后,即进入首页界面,即主控模块,主按模块主要用以下子功能1.城市定位当您点击城市按钮时,跳转到城市切换界面上,来选择该城市的消费评价信息,2.活动发布这是我们一些活动的图片,您可以通过左右滑动来查看我们的活动图片 ,当您点击图片是会自动访问网站相应活动页面,使用webview组件显示相应的内容。3.签到签到功能将提交用户ID到网站程序,由网站程序判断当日是否已经签到,如果没有签到,即对积分加1,并更新时间,最后返回APP相应

9、的信息;如果已经签到,即不对积分处理,并返回相应的信息。4.最新消费评价信息显示当前最新消费评价信息,当您对此消费信息感兴趣时,您可以点击进入进一步了解此店铺,觉得是否消费。点击店铺介绍时,会显示该店铺的一些信息,为了使您更加了解该店铺。点击店铺评价时,你会看见评价界面的所有信息框架;你可以获取其他消费者的点评信息。(2)注册登录模块顾客在下载点击APP后可以很方便的进行用户的注册,点击注册之后,填好用户名和密码,通过手机短信的验证来实现用户的注册,这样可以防止用户的恶意注册,在注册完成之后,就可以直接登录了,十分的方便,一般注册过程不超过20秒,这样免去了很多的麻烦也留住了很多的客户。注册完

10、成之后就可以进入主控制界面。(3)赏析界面模块这个模块是最主要的模块,我们主要做的就是赏析这个功能,这个功能就是在我们消费完之后,用户可以登录我们的app,选择相应的店铺,里面有评分和说明,我们可以拍照上传进行评论。这个模块有一个非常方便的功能,就是我们在评论的地方有个定位功能,我们可以直接定位到这家店铺,然后进行评论。(3)账户管理模块当您点击我的时,跳转到我的界面 ,界面中间是您的姓名和您注册时的城市,下面分别是个人信息、签到、发布、信息删除和积分。1.帐户信息维护当您第一次使用点评app时 您的姓名是没有的,你可以点击个人信息,完善个人的基本信息列表,在输入你的姓名时,该文本框不为空,若

11、为空则跳出提示框告诉你该用户名姓名不可以修改;否则可以修改,这必须要点击保存信息后 事件才能告诉你,若是修改成功,自动跳转到我的界面,并且把中间部分的姓名与所在地更改。如图3-10所示2.积分记录主要显示相应的用户积分,显示你在什么情况下获取到积分的,获得的积分是多少,以及积分的消费情况。3.签到与主模块的“签到”功能一致。4.发布评价信息发布你已消费的店铺的评价信息。5.删除曾经评价记录6.在用户界面我们可以修改密码,在输入旧密码之后就可以修改新的密码(4)管理员后台管理模块1、管理员在后台登录后,可以创建其它权限不同的管理员。2、管理员可以对餐厅全民点评app上的菜单进行添加、删除和修改,

12、比如更改菜单的图片,价格,菜单的描述,更换新品,添加新菜等。3、管理员对每个菜品的评价信息进行更新和重置等等3.2非功能性需求设计(1)方便操作,操作流程合理尽量从用户角度出发,以方便使用本产品。如:新增用户信息时,是使用自己的手机号码来获取验证码,设置自己的登录密码和所在的省市等等。(2)支持Android手机版本4.0以上版本。并且获取评价信息很简单。(3)容错能力系统具有一定的容错和抗干扰能力,必须在有网络或无线网下,系统能够保证正常运行,并有足够的提示信息帮助用户有实现。(5)操作完成时有统一规范的提示信息(6)服务器稳定性:保证系统的服务器具有良好的稳定性,需要实现 7*24小时不停

13、的运作。(7)服务器稳定性:保证系统的服务器具有良好的稳定性,需要实现 7*24小时不停的运作。(8)数据完整准确:录入数据采用表格方式,限制录入数据类型及取值范围以保证数据的完整性及准确性。系统具有部分反悔修改功能,系统备有的修改功能均可反悔。(9)系统安全:用户在身份认证、授权控制、私密性等方面的要求。(10)系统易用:系统操作界面美观、简便,通俗,便于操作。(11)系统可维护:系统在出现故障时可以及时维修,使其数据恢复。以下列表是描述Android手机端要显示的功能模块:模块子模块详细介绍登陆个人可以根据手机号码登陆。注:登陆一次下次使用无需再次登陆,默认上次登陆的会员注册个人可用手机号

14、+短息验证+城市选择进行个人注册,注册成功跳转至个人信息完善和修改的页面。找回密码输入手机号码,发送短息验证码,修改新密码下菜单首页,赏析,账户主控模块城市切换进入界面是城市用GPS定位所在的城市,还可以切换到其他的城市(现开放城市:无锡,南京,苏州,常州)活动图片展示放置最新活动,点击可查看详情推荐评价列表最新的评价信息展示赏析店铺评价评价信息用户点赞点赞情况用户评价评价信息账户中心个人中心主页展示欢迎图片+快捷入口超链接信息查看修改查看个人信息可修改签到签到,一天一次,签一次+1积分发布信息发布评价信息删除评价信息删除已发布评价信息积分明细积分明细3.3需求分析详情请参照需求分析文档4.运

15、行环境要求4.1设备外围设备:手机;编译程序:Android studio;操作系统:Android操作系统;数据库支持:SQLServer20084.2支持软件服务器端:tomcat系统平台:WindowsXP或更高版本的操作系统计算机语言:Java,SQL语言,网络通信协议:TCP/IP开发工具:Android studio5. 接口设计5.1 HTTP接口设计5.1.1 URL接口(1)URL的组成:基本的网络地址 分支节点http:/127.0.0.1:8080/chat 为 基本的网络地址/login 为 分支节点http:/127.0.0.1:8080/chat/login 组成完

16、整的 URL当前统一的基本网络地址为 http:/127.0.0.1:8080/ChatServer请求方式:POST、GET、PUT(2)请求消息头:键值对(key value形式)(3)请求参数:键值对(key value形式)(4)响应的状态码:统一的返回码为: 200 (注:只要访问服务器成功,一律返回200)(5)响应的格式:flag:true, data:.成功的标记为 flag 为 true(6)根据具体的请求,如果需要返回值 data节点 包含的是 返回结果不需要需要返回值 ,则没有data节点(6)失败:flag:false,errorCode:1,errorString:错

17、误原因失败的标记为flag为false,flag为false时,必然返errorCode和errorString节点(7) errorCode说明了错误编码,errorString说明错误原因。5.1.2 搜索用户接口(1)分支节点 : /user/search(2)请求方式 : POST(3)请求消息头 :key类型说明accountString用户的账号tokenString用户的唯一标识(4)请求参数 :key类型说明searchString搜索的账号(5)响应结果 :成功: flag: true, data: account: zhangsan, name: 张三, icon: /a/

18、b/zhangsan.png, sign: 我的个性签名, area: 徐州失败:errorCodeerrorString200用户不存在5.2Sokect 自定义协议1.协议的定义(1)传输格式为json(2)协议分为请求和响应(3)传输方向: client - server : 发送消息server - client : 推送消息(4)发送消息发送过程包含的两个过程:求 : client发送消息到server响应 : server响应lient的这次消息请求两个过程 都完成才算当前消息发送成功(5)推送消息推送过程包含的两个过程:请求 : server发送消息到client响应 : cli

19、ent响应server的这次消息请求两个过程都完成才算当前消息发送成功(6)消息必备格式请求部分: sequence: 9f4c696e-9ab5-46cf-959c-b1e2e35200d2, type: request, action: text响应部分: sequence: 9f4c696e-9ab5-46cf-959c-b1e2e35200d2, type: response, flag: truesequece : 标记请求和响应,用来表明响应是针对哪次请求的type : 用来标记是请求还是响应action : 请求发送方的发送类型,由具体请求决定取值。5.2.1 Client 部分

20、1.Auth认证(1)Action : auth(2)请求的 key-Valuekey类型说明typeString请求:requestsequenceString请求的序列号actionString请求的行为:authsenderString发送者账号tokenString发送者token标志(3)请求的json 格式: sequence: 9f4c696e-9ab5-46cf-959c-b1e2e35200d2, type: request, action: auth, sender:xxxx, token:xxxxsequence:1,type:request,action:auth,se

21、nder:iphone1,token:0dce6f76ac1a29d276c0c6dabe60519c(4)响应的json 格式:成功 : sequence: 9f4c696e-9ab5-46cf-959c-b1e2e35200d2, type: response, flag: true,失败 : sequence: 9f4c696e-9ab5-46cf-959c-b1e2e35200d2, type: response, flag: false, errorCode:, errorString:(5)发送邀请Action : invitation(6)请求的 key-Valuekey类型说明

22、typeString请求:requestsequenceString请求的序列号actionString请求的行为:invitationsenderString发送者账号tokenString发送者token标志receiverString接收者的账号(7)请求的json 格式: sequence: 9f4c696e-9ab5-46cf-959c-b1e2e35200d2, type: request, action: invitation, token:xxxx, sender:xxxx, receiver:xxxx, content:xxxxxx(8)响应的json 格式:成功 : seq

23、uence: 9f4c696e-9ab5-46cf-959c-b1e2e35200d2, type: response, flag: true,失败 : sequence: 9f4c696e-9ab5-46cf-959c-b1e2e35200d2, type: response, flag: false, errorCode:, errorString:(9)发送文本消息Action : text请求的 key-Valuekey类型说明typeString请求:requestsequenceString请求的序列号actionString请求的行为:invitationsenderString

24、发送者账号tokenString发送者token标志receiverString接收者的账号contentString邀请的文本内容(10)请求的json 格式: sequence: 9f4c696e-9ab5-46cf-959c-b1e2e35200d2, type: request, action: text, token:xxxx, sender:xxxx, receiver:xxxx, content:xxxxxx(11)响应的json 格式:成功 : sequence: 9f4c696e-9ab5-46cf-959c-b1e2e35200d2, type: response, fla

25、g: true,失败 : sequence: 9f4c696e-9ab5-46cf-959c-b1e2e35200d2, type: response, flag: false, errorCode:, errorString:2.Server 部分(1)推送用户邀请action : invitation(2)请求的 key-Valuekey类型说明typeString请求:requestsequenceString请求的序列号actionString请求的行为:invitationsenderString发送者账号receiverString接收者的账号invitor_nameString邀

26、请者的名字invitor_iconString邀请者的头像contentString邀请的文本内容(3)请求的json 格式: sequence:3, type:request, action:invitation, sender:iphone1, receiver:iphone2, invitor_name:iphone2, invitor_icon:/icon/iphone2.png, content:hehe(4)响应的json 格式:成功 : sequence: 3, type: response, flag: true,失败 : sequence: 3, type: response

27、, flag: false, errorCode:, errorString:(5)推送用户接受邀请action : reinvitation请求的 key-Valuekey类型说明typeString请求:requestsequenceString请求的序列号actionString请求的行为:reinvitationsenderString发送者账号receiverString接收者的账号nameString接受邀请者的名字iconString接受邀请者的头像contentString邀请的文本内容(6)请求的json 格式: sequence:3, type:request, actio

28、n:text, sender:iphone1, receiver:iphone2, name:iphone1, icon,/icon/iphone1.png, content:hehe(7)响应的json 格式:成功 : sequence: 3, type: response, flag: true,失败 : sequence: 3, type: response, flag: false, errorCode:, errorString:(8)推送文本消息action : text请求的 key-Valuekey类型说明typeString请求:requestsequenceString请求

29、的序列号actionString请求的行为:textsenderString发送者账号receiverString接收者的账号contentString邀请的文本内容(9)请求的json 格式: sequence:3, type:request, action:text, sender:iphone1, receiver:iphone2, content:hehe(10)响应的json 格式:成功 : sequence: 3, type: response, flag: true,失败 : sequence: 3, type: response, flag: false, errorCode:

30、, errorString:(11)推送用户名变更action : nameChange请求的 key-Valuekey类型说明typeString请求:requestsequenceString请求的序列号actionString请求的行为:nameChangesenderString发送者账号receiverString接收者的账号nameString发送者变更后的名字(12)请求的json 格式: sequence:3, type:request, action:text, sender:iphone1, receiver:iphone2, content:hehe(13)响应的json

31、 格式:成功 : sequence: 3, type: response, flag: true,失败 : sequence: 3, type: response, flag: false, errorCode:, errorString:6. 系统出错设计6.1 APK文件异常处理1.更换安卓项目的库文件(即使库文件代码相同),运行工程闪退。 解决方法:将原来的app卸载再运行2.R文件丢失:(一般是资源文件有错,特别是clean之后) 原因:res文件夹的xml文件(不仅是layout,还包括其他)缺少了必要的属性或者添加了错误的属性。3.导入library文件没有生成“private b

32、raries”. 可能原因“v4包重复。(特别是在新项目导入基础库的时候)4.断点调试 can not findDexFile:解决方法:把断点全部去掉重新添加断点。5.http的post或者patch请求如果显示请求类型错误 解决方法:添加一个请求头:Content-Type,值为对应的请求体类型。6.eclipse项目从svn检出后无法运行 原因:项目提交不全(首次提交全部文件,以后可忽略classpath,bin等不需要提交的文件)7.在写入缓存文件的操作中一定要加上读写外部文件的权限。8.在一个水平LinearLayout中,有Button和Spinner,Button放在Spinne

33、r的左边在执行Activity的findviewById就会奔溃。换成右边就不会。原因未知。9.将Android项目提交svn后如果改包名或者类名,提交文件会报Illegal target的错误。 解决方法:彻底断开svn连接(删除svn元信息),重连之后,将原来包名或者类的东西删除。 6.2 UI文件异常处理对于已经受svn源代码管理的文件或者文件夹,若想修改名字,可以这样操作:1.选中文件或者文件夹右键TortoiseSVN改名。2.SVN提交。3.不同的布局文件的控件id尽量不要重复,不然在eclipse容易发生控件选取混乱。4.使用evenbus记得要添加onEvent方法。5.使用a

34、ndroid.graphics.Color不可以画图表折线的颜色。(原因未知,只知道对应的数值为负数)6.在类定义成员变量如下GlobalDataManager.getInstance().getSettingDataShowDay(getActivity()不能执行,原因可能是成员变量的定义先于构造函数执行,导致无法执行getActivity();7.侧滑菜单有控件空指针,执行到返回主界面的fragment就奔溃。(原因未知,可能是slidingMenu的设计关联了主界面fragment?)8.在一个LinearLayout中有两个控件,都是设置height为0dp,weight为1,其中一

35、个可见一个为gone。在代码中设置不可见的为visible,不可见的仍然不可见。(可能是设置了权重就不可设置可见了。解决方案为动态设置布局控件的属性才为两个控件设置权重)9.ScrollView的控件的height属性要为确切数字。(不然ScrollView不能为其安排确切的大小)10.有时候修改xml布局文件后出现控件类型转换错误。 解决方法:clean一下工程一般可以解决。11.eclipse安卓工程创建没反应没提示。 原因:在项目的创建目录有重复的工程名。12.viewPager放fragment,fragment从fragment集合中删除,再添加fragment到fragment集合

36、,结果viewPager仍然显示删掉的fragment。 原因:fragmentmanager将删掉的fragment保存起来,又重新显示出来。13.带CheckBox的ListView,CheckBox要添加的属性: android:clickable=false android:focusable=false 当ListView项被按下的时候,notifyDataSetChanged()刷新整个ListView,传入的参数刷新。如果没有加这两属性,仅仅打钩CheckBox并没有点击到ListView。(抢了ListView的焦点)14.eclipse复制一个xml布局文件后,在视图中修改其

37、中一个文件控件的id,会同时修改到另一个文件对应控件的id。15.eclipse无法连接手机,出现Adb connection Error:远程主机强迫关闭了一个现有的连接 错误。解决方法:DDMS中restart adb。16.如果计算机连接的是(可能是选择了自动获取ip)外网ip,则会导致svn无法连接内网服务器。17.NetworkInfo activeInfo = manager.getActiveNetworkInfo(); activeInfo.isAvailable();(1)在广播onReceive()方法外activeInfo获取不到。(2)在网络开启的时候可以使用,在网络关

38、闭的时候程序挂掉(但放在判断语句中就可以用)。原因未知。18.在铺满Activity的ImageView中加一张尺寸足够的图片无法铺满?加渐变效果有异常跳动? 原因未知。19.尺寸比宽度小的按钮沾满屏幕宽度?原因:图片的分辨率属于xhdpi,将图片移动到xhdpi文件夹就可以。20.如果setContentView找不到新创建的layout文件,clean之后R文件丢失。原因:可能是layout使用的资源文件的命名有问题,详细看console。21.将Bitmap加载到ImageView失败。 可能原因:开启了硬件加速。 解决方法:在manifest中的application标签设置硬件加速标

39、签:android:hardwareAccelerated设置为false22.ExpandableListView随意点击一级标题展开收起,会出现重影。 解决办法:将ExpandableListView的高和宽设置为matchparent。(不要wrapcontent)23.Java.lang.UnsupportedOperationException: Cant convert to dimension:type=0x2Xml文件布局属性有错误(互相间有冲突)。24.一旦有控件被gone了,要注意RelativeLayout中以它为尺寸相对标准的控件的位置会受影响。25.监听网络状态的变化

40、时一次断开或者连接网络可能会接收到多次广播(产生若干个广播对象),所以加个标识符防止重复调用onReceive()。26.将ListView的android:layout_height设置成wrap_content的话,adapter中的getview会执行两次,要让getview不执行两次只执行一次的话,可以将android:layout_height设置成fill_parent。27.使用系统自带的LocationManager,有些机型不能定位。原因:可能是一些机型没有注入谷歌的LocationManager需要的库。28.捕获到jsonException却显示jsonException

41、对象时null?原因未知。29.安卓工程编译成功,也显示运行在手机上了,但是没看到程序的界面。原因:可能是没有标明要启动的Activity。30.有的手机locationManager.getProviders(true);返回的定位方式有误。没开网络状态下仍返回有网络定位。31.ListView的高度如果设置wrapcontent,Adapter的getView()会被调用多次,改为matchParent即可。原因未知。32.在eclipse的项目property中添加外部jar包,jar包会添加到reference library,在程序中可以引用里面的类,但是运行报错can not find class.。解决方法:要将jar包复制到工程的lib文件夹中才可以导入private library,从而可以正常使用。6.2 非软件内部问题处理措施1.重新安装APK2.更新Android版本

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

当前位置:首页 > 教育专区 > 家庭教育

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁