自驾游信息管理系统的设计与实现_第1页
自驾游信息管理系统的设计与实现_第2页
自驾游信息管理系统的设计与实现_第3页
自驾游信息管理系统的设计与实现_第4页
自驾游信息管理系统的设计与实现_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章概述1.1问题的提出面对国内经济形式的迅速崛起,国内旅游业也处于飞速发展阶段。在经济发展的促进下,大部分人也开始了自己的自驾游旅行。碍于交通不便利,且景点信息不健全等因素,自驾游的发展也受到了阻碍。针对于国内的现状,我国的自驾游并不为大多数人所接受,原因归结于几点:(1)游客可能没有车或者车的油耗过高,不能接受自驾游的成本问题。(2)游客无处可自驾的状态,即游客不知哪里好玩,大家都去哪里玩的状态。(3)大型的自驾游网站可能存在欺客的行为,例如某猪旅行,则存在杀熟的行为。这些极大的程度限制了游客想自驾游的期望。针对于以上原因,则诞生了我们的自驾游系统,且集成了旅游、酒店预定、租车和线上支付等功能,且不收取手续费。解决了如上的杀熟、自驾游油耗及车、和不知去哪里玩的问题。为自驾游游客提供了方便,极大的降低了自驾游的时间成本和经济成本。1.2目的及意义针对于游客,自驾游系统集成了众多的景点信息,让全国各景点的特点一目了然,省去可游客搜集信息的烦恼,减轻了出游的压力。与此同时,平台提供相应的优惠补贴,为出游的人们省去了部分的开销。对于没车的游客,我们提供了附近租车服务,游客针对性的搜索附近的车源,也节省了时间上的开销。酒店在平台上也是一应俱全,无论是大床房还是单人间,我们都有明确的分类,免去可一一查看的烦恼。而对于旅行社和旅游业的商家而言,不同于实体店铺,它减轻资金压力,它免去了实体店的房租,且让租车和酒店的商家少了宣传费,也少了经营实体店的繁琐过程。并且它提供了清新脱俗、友好的界面,让用户体验得到提升。同时,也避免杀熟,供游客放心使用。对于商家来讲,商家只需查看后台是否有人预定酒店(或者)车即可,不用在找人宣传。同时,网站会提供一些优惠活动,使游客爱上平台。他会促进自驾游的消费,也让旅行社的服务得到方便。1.3国内外研究现状及应用现状20世纪以后,中国旅游业迅速崛起。但我国景点少,景点挤,景点乱等情况并未得到改善。而一些山清水秀,更好玩,更值得去的景点并没有游客去游玩,这使得旅游业发展不均,造成了有些地方人挤人,有些地方则荒无人烟的景象。我国旅游产业仍然基础薄弱,管理手段滞后,信息化程度较低,企业效益较差;旅游行政管理部门的管理方式落后,缺乏信息化管理手段。面对困难和挑战,我国旅游业必须转变观念,创新思维,以信息化建设为突破口和新手段,整合各种资源,从而实现整个行业的新跨越。本文拟设计并实现的系统,能够改变旅游企业的传统经营模式,降低工作成本,加大宣传力度,提高信息实效性;能够满足游客的个性化需求,提高旅游服务质量。自驾游管理的网络化,将会进一步壮大自驾游支柱产业,提升旅游产业整体信息化水平,优化产业结构和资源配置,完善产业链,进而带动众多相关产业发展,拉动内需,扩大就业,对经济发展起到积极的推动作用,从而提高整个旅游产业素质。1.4本文安排第一章:即为本章,概述了自驾游的国内外现状,介绍了CC自驾游系统的诞生意义以及诞生的目的,也阐述可系统为旅行社带来的方便;第二章:为需求分析章节,主要描述了本系统的功能性需求和非功能性需求;第三章:为系统的概要设计部分,主要描述系统的结构和设计风格;第四章:为系统的详细设计部分,主要写了系统内各个模块的详细设计和设计原理以及设计的意义;第五章:为编码测试部分,主讲了对系统内各个模块的测试方式方法,测试用例,还附有单元测试的源码。第六章:为文章总结,总结了文章的书写意义和对系统内容的结论看法。第二章需求分析2.1概述这个章节拟采用软件工程和网络工程的方法,对自驾游系统实现线上管理,并对系统进行详细的分析(数据流图分析法)。接着再进行功能性的需求分析以及非功能性的需求分析。功能性需求分析中,采用ER图进行数据需求的分析。系统的非功能性需求分析主要有以下几方面:安全性、容错性、维护性、可移植性、风格统一。2.2系统目标2.2.1总体目标系统结合自驾游的需求,采用了python的Django框架,以python为主要的开发语言、采用django内嵌的SQLite数据库作为后台数据库,结合了软件的项目管理、数据库的设计、系统的分析与设计等有关理论,完成了自驾游信息管理的系统分析、设计以及程序开发工作。为游客提供一个实时的信息;提高旅行社经营管理效率,减少管理工作上的重复操作。2.2.2具体目标本系统前台主要实现用户注册、用户登录、个人信息修改、与人聊天、查找附近的车和酒店,评论敏感信息过滤、浏览酒店信息、预定酒店、浏览、点赞、评论和发表旅游攻略和订单查询等功能。后台的管理包括了酒店、车的管理、用户信息管理、攻略的管理、个人订单的管理以及酒店预定状态的管理等功能。通过后台对数据库的控制与管理,管理员可实现对前台的系统化管理。界面设计友好、管理方便、可用性强、可维护性高,经过测试系统运行稳定,能够满足系统工作的需要,提高工作效率。2.3功能需求系统需要具备五大功能:对附近的人、车和酒店进行推荐对订单进行在线支付用户之间进行在线聊天对攻略评价内容进行敏感字符的过滤用户获取并使用优惠券下面具体阐述以上功能的详细信息通过百度地图定位API,获取用户的精确经纬度信息(43.452312,45.455555),以勾股定理,实现对用户距离的计算,再展示附近的人和产品。用户需让管理员帮助充值余额,再用其余额进行在线抵扣以购买产品,余额为虚拟货币,不可提现。使用websocket技术,进行广播式聊天,内置各种表情,实现多色彩的在线聊天互动。用有向连接图的数据结构,对敏感信息进行收集并存储为文件,当敏感信息出现时,将敏感字转换为字符*。用户可通过主页的轮播图获取相应的优惠券,而券有类别之分,如时间,适用范围等。用户获取到的可能是跑车优惠,则所有的跑车均可使用。简单的模块就不一一赘述,简要的可分为登录、注册、注销、修改用户信息、查找订单等小的功能模块。在此通过该用例图(图2-1),对系统的功能进行大体的概述,本文将详细讲解系统功能的详细实现。图2-1自驾游信息管理系统用例图2.5数据需求在清楚了功能需求后,使用数据流图来展现数据在系统中流动和处理的情况,数据流图是一种简单且常用的方法。图2-2列出了在分析过程中常用的基本符号及其解释。图2-2数据流图基本符号采用抽象到具体整体到局部的方式,本系统绘制出的三层数据流图,如下图2-3的图集所示:图2-3-1自驾游信息管理系统1层数据图2-3-2自驾游信息管理系统2层数据流图图2-3-3自驾游信息管理系统3层数据流图在对系统功能进行了需求的详细分析之后,明确了要处理的数据,分别为用户、管理员、酒店、租车、攻略、广告、点赞、评论等,每个数据都有相对应的属性,数据与对应属性如表2-1所示。表2-1数据属性表数据属性用户用户名、邮箱、密码、余额、性别、年龄、经纬度、头像、是否在线管理员用户名、密码酒店酒店名、房间型号、价格、描述、是否被预定车车名、车型号、价格、描述、是否被预定攻略发布人、图片、发表时间、描述广告图片,链接,标题点赞点赞人,攻略,时间评论评论人,攻略,时间粉丝被follow的人、follower车的订单时间、是否被支付、车、预定人酒店的订单时间、是否被支付、酒店、预定人聊天内容发送方、接收方、时间、内容在清楚了数据与数据之间的关系、数据与属性之间的关系后,采用ER图来表示,在ER图中的实体为用户、管理员、酒店、车、攻略、广告、订单、聊天内容等,系统的ER图如图2-4所示:图2-4自驾游信息管理系统ER图2.6非功能性需求对于一个完备且优秀的大电商系统而言,性能需求分析超级重要,性能需求都包括系统界面风格统一、安全性高可靠性强、系统的可操作性强、系统兼容性好、系统的可维护性高。具体要求如下:系统界面风格统一:系统配色美观,按钮位置有规律等。系统的安全性与可靠性:csrf的配置要和数据统一,以防跨站伪造数据。系统的可操作性:系统上手简单,做到每个人都会使用。系统的兼容性:适用于各主流系统以及各主流浏览器。系统的可维护性:API接口规范统一以及代码书写规范统一。2.7环境需求电脑环境要求:2.1GHz以上处理器、16G内存及以上软件环境要求:本系统是在macOS平台下开发的,采用的语言是python2.7,数据库为Django-SQLite,服务器为Django分辨率:2560*1600语言种类:简体中文2.8将来可能提出的需求随着系统规模的增大,用户急剧增多,将会有如下可能提出的需求:对拼团活动的产品上架,系统的速度需要大幅度提高。当用户大并发聊天时,系统的处理速度。当网络状况不佳情况下,静态网页的数目应该增加。第三章系统概要设计3.1概述本章围绕着Django模型和它的请求原理和收到请求时它的内部处理过程展开深入研究。对于常规Web框架,它的请求过程无非MVC模型,而对于Django而言,MTV才是他真正的面目结构。到底MVC和MTV有什么关系,又有什么不同?为何Django不使用MVC模型?当Django收到外部的请求时,它的内部究竟做了什么?请带着疑问往下看。3.2系统遵循的原则及方法自驾游信息管理系统以B/S的结构进行设计,B/S设计结构模式的好处在于用户不必下载客户端,只要在浏览器输入正确的网址即可访问,也节省了设备的空间。此系统采用python的DjangoWeb框架。Django以极速架站著称,Django还自带管理后台,节省了开发的时间,提升开发速率。Django框架里,虽然极速是他的的第一特性,但是响应速度一点也不逊色与大型的web框架,他的响应时间非常快,以至于可以忽略响应时间。在并发上,可能是他的弱点,但是我们可以在算法上作出响应的优化,以提升并发访问时的效率。Django框架主要以MTV模式进行开发,下面带大家主要了解下MTV模式。顾名思义,MTV中的M为model,即为持久化层,他负责存储数据,为页面中的数据进行渲染,“T”即为template(模版),即为显示页面的html代码,每一个页面的html均可继承而来,不必为每页都写上重复而又冗余的代码。“V”就是views,他就是服务器的控制器,负责为每个请求的URL做一些跳转、渲染、展示等动作。至于MTV的工作和响应流程,正是我们下一节的主要内容。3.3结构设计在MTV模式中:模型:与MVC模式中的模型解释一样,它也与数据之间的接口或关系具有相同的位置,并且包含与数据访问和验证相关的所有内容。模板:这与MVC模式中的视图相关,因为它是一个表示层,处理框架中的表示逻辑,基本上控制应该显示什么以及应该如何显示给用户。视图:这部分与MVC模式中的控制器相关,并处理所有业务逻辑,这些业务逻辑将被抛出到各自的模板中。它充当模型和模板之间的桥梁。Django建议视图应该包括业务逻辑,而不是像标准MVC模式和模板中那样单独处理所有表示逻辑,而MVC模式不包括模板co,这是所有这些内容中最令人困惑的部分。完全是组件。因此,与标准MVC模式相比,Django的设计也被称为模型模板视图+控制器,控制器经常被忽略,因为它已经是框架的一部分。图3-1自驾游信息管理系统功能模块图3.4系统功能模块图系统主要分为5大块功能模块,分别是用户信息模块,负责用户信息的存储,用户等级和权限的划分。租车车源信息模块主要负责车源信息的发布,删除和对车辆信息的修改等操作。酒店信息模块负责酒店信息的发布、删除、修改和查看的操作,旅游攻略信息模块主要负责对攻略信息的发表、删除、修改和查看的操作,优惠券信息模块主要对优惠券信息的增加、修改、删除和查看的操作。图3-2自驾游信息管理系统功能模块图3.5数据库设计根据上述自驾游信息管理系统的E-R图和系统的数据需求,完成了数据库关系模式的设计,具体描述如下:用户关系模式(账户名、邮箱、密码、余额、性别、年龄、经纬度、是否在线)管理员关系模式(账户名、密码)酒店关系模式(酒店名、价格、图片、描述、是否被预定)车辆关系模式(车名、价格、图片、描述、是否被预定)攻略关系模式(发布人、图片、睡觉、描述)广告关系模式(标题、链接、图片)点赞关系模式(点赞人、点赞的攻略、点赞时间)评论关系模式(评论人、评论的攻略、评论时间)粉丝关系模式(follower、followed)车订单关系模式(是否支付、预定人、预定的车辆、时间)酒店订单关系模式(是否支付、预定人、预定的房间、时间)聊天关系模式(发送方、接收、时间、内容)下面给出关系数据库的设计结果:(1)用户基本信息表,该表存储了用户信息的相关数据,包括账户名、邮箱、密码、余额、性别、年龄等,结构如表3-1所示。表3-1用户基本信息表字段名称数据类型必填字段是否为空说明usernamechar是否邮箱,unique=Truepasswordchar是否密码moneyint是否余额,default=0emailchar是否邮箱sexchar是否性别ageint是否年龄longitudefloat否否经度latitudefolate否否纬度imagechar是否头像isactivitybool是否是否在线(2)酒店基本信息表,该表存储了酒店的相关数据,包括酒店名、价格、图片、描述、是否被预定等,结构如表3-2所示。表3-2酒店基本信息表字段名称数据类型必填字段是否为空说明priceint是否价格namechar是否名称issuedbool是否是否被预定descchar是否描述imagechar是否图片(3)车辆基本信息表,该表存储了车辆的相关数据,包括车名、价格、图片、描述、是否被预定,结构如表3-3所示。表3-3车辆基本信息表字段名称数据类型必填字段是否为空说明priceint是否价格namechar是否名称issuedbool是否是否被预定descchar是否描述priceint是否价格(4)管理员基本信息表,该表存储了管理员的相关数据,包括用户名、密码,结构如表3-4所示。表3-4管理员基本信息表字段名称数据类型必填字段是否为空说明usernamechar是否用户名passwordchar是否密码(5)攻略基本信息表,该表存储了攻略的相关数据,包括标题、内容、发布人、时间等,结构如表3-5所示。表3-5攻略基本信息表字段名称数据类型必填字段是否为空说明titlechar是否标题contentchar是否内容owneruser是否发布人timedata是否时间广告基本信息表,该表存储了广告的相关数据,包括图片、标题、链接等,结构如表3-6所示。表3-6广告基本信息表字段名称数据类型必填字段是否为空说明imagechar是否图片titlechar是否标题urlchar是否链接(7)点赞信息表,该表存储了点赞的相关数据,包括点赞人、点赞的攻略、点赞时间,结构如表3-7所示。表3-7点赞基本信息表字段名称数据类型必填字段是否为空说明likeruser是否用户基本信息表的外键likedblog是否攻略基本信息表的外键timedata是否时间(8)评论信息表,该表存储了评论的相关数据,包括评论人、评论的攻略、评论时间,结构如表3-8所示。表3-8评论基本信息表字段名称数据类型必填字段是否为空说明commenteruser是否用户基本信息表的外键commentedblog是否攻略基本信息表的外键timedata是否时间contentchar是否内容(9)粉丝信息表,该表存储了粉丝的相关数据,包括follower、followed,结构如表3-9所示。表3-9粉丝基本信息表字段名称数据类型必填字段是否为空说明followeruser是否用户基本信息表的外键followeduser是否用户基本信息表的外键(10)车订单信息表,该表存储了车订单的相关数据,包括是否支付、预定人、预定的车辆、时间,结构如表3-9所示。表3-9车订单基本信息表字段名称数据类型必填字段是否为空说明priceint是否价格timedata是否时间ispaybool是否是否支付owneruser是否用户基本信息表的外键carcar是否车基本信息表的外键(11)酒店订单信息表,该表存储了酒店订单的相关数据包括是否支付、预定人、预定的房间、时间,结构如表3-10所示。表3-10酒店订单基本信息表字段名称数据类型必填字段是否为空说明priceint是否价格timedata是否时间ispaybool是否是否支付owneruser是否用户基本信息表的外键roomroom是否酒店基本信息表的外键(12)聊天信息表,该表存储了聊天信息的相关数据包括发送方、接收、时间、内容,结构如表3-11所示。表3-11聊天基本信息表字段名称数据类型必填字段是否为空说明chateruser是否用户基本信息表的外键timedata是否时间chateduser是否用户基本信息表的外键contentchar是否聊天内容第四章系统的详细设计及实现4.1系统的复杂问题与设计针对系统具体内容的实现,出现了一些在实现上较为复杂的模块,具体模块如下:预定车辆模块:租车模块主要是展示所有车源展示给用户,用户可以根据价格,使用范围和距离该车源的距离等几个维度对车源信息进行筛选。用户可点击车源查看该车源的详细信息,譬如价格、店铺、租车声明等。商家也会在后台对车源信息进行发布、修改和查看删除。用户可以在线进行对车源的支付,支付中,如若用户事先领取了该车可用的优惠券,用户即可以等价现金的方式使用该抵用券(或选择不实用代金券)。如果已经有其他用户对该车完成了支付,那么当用户点击支付时,系统提示该车源已经被预定的提示,如果余额不足,则提示余额不足的提醒。该模块为复杂模块,在支付过程中,要判断用户是否有可用优惠券,(判断券的类型,使用范围和使用截止日期等)。再以HttpResponse的形式渲染给html。html再做展示,显示可以用的券,并再让用户做进一步的选择。同时,附近的车也需要结合用户的经纬度和车行的经纬度进行勾股定理的计算,在服务器请求并发大的情况下,很难做到即使响应,而我以ajax异步请求的形式,对response的content进行await,再对距离进行计算和展示。关键代码如下:try:r=room.objects.get(id=id)ifr.be_used:returnHttpResponse("using")username=SearchObject.CheakOnlineStatus(request)u=user.objects.get(username__exact=username)b=bookroom(room=r,booker=u,is_pay=True)u.money-=r.pricer.be_used=ureturnHttpResponse("ok")exceptExceptionase:returnHttpResponse("error")r.save()u.save()b.save()图4-1车辆预定截图图4-2车辆确认预定截图领取&使用优惠券模块:用户可在系统web界面的轮播图中点击获取优惠券(前提是用户并未获取过优惠、还有剩余优惠券且用户处于以登录状态下)。商家在后台对优惠券信息进行发布、修改、删除和查看。优惠券的面值,使用范围和使用日期为后台管理员以及优惠券的数量所设置,用户领取的券可以在租车模块中使用,当用户租的车的类型为券可抵用范围内,用户可以选定该券进行抵用。该模块也是负责模块。券的使用,需要结合上一个页面提交的car_type进行比对,再以car_id检索到具体的car,car的金额还要满足券的要求,使用券过程中,还要和当前日期进行比较,来看是否券以及过期。逻辑上的判断和for循环对模块有重大的意义。关键代码如下defgetticketmessage(request,id):try:t=AdjectiveTicket.objects.get(id=int(id))returnHttpResponse(t.noun+"/"+str(t.rest)+"/"+t.title+"/"+t.desc+"/"+str(t.fromTime)[:19]+"/"+str(t.toTime)[:19]+"/"+str(t.money)+"/"+str(t.id))except:returnHttpResponse("error")defgetticket(request,tid):try:username=SearchObject.CheakOnlineStatus(request)u=user.objects.get(username__exact=username)except:returnHttpResponse("logout")try:t=AdjectiveTicket.objects.get(id=tid)tmp=int(t.rest)except:tmp=0returnHttpResponse("error")iftmp==0:returnHttpResponse("ticketnull")s=ticket.objects.filter(tickets=t,owner=u)ifs:returnHttpResponse("ticketexist")else:ticket(owner=u,tickets=t).save()returnHttpResponse("ok")图4-3优惠券截图图4-4优惠券领取成功截图评论攻略中的敏感信息过滤模块:用户可以对他人发布的旅行攻略进行评论,但为优化客户体验,我们对所禁止的敏感信息进行收集,并对敏感的字符转化为“*”。该模块为具有复杂度的模块。首先我们需要建立敏感字符集,再以代码的方式对字符集进行转化,将其转化为有向连接图,再对用户所提交的话的每两个字符进行比对,如果这两个字符在连接图中是一条路径,那么两个字符向右移,知道路径不通为止,此时,最后一次右移之前的串即为敏感信息串,将其标记再进行下次的敏感字查找。当所有的查找完毕,再将标记的敏感字变为“*”。关键代码如下:classGraph(object):def__init__(self,source):f=File(source)self.graph=f.getter()defconv(self,word):res=[]print(word)foriinrange(len(word)):ifword[i]inself.graph.keys()andi<=len(word)-2:ifword[i+1]inself.graph[word[i]]:res.append(i)elifword[i]notinself.graph.keys()andword[i-1]inself.graph.keys()andword[i]inself.graph[word[i-1]]:res.append(i)foriinres:word=word[:i]+"*"+word[i+1:]returnword图4-5敏感信息过滤后截图图4-6敏感信息过滤之前截图聊天模块:根据系统需求,用户可能需要自行组团出游,于是出现了聊天模块。此模块为复杂模块。用户可以选择聊天的对象,聊天中,可以发送表情和文字。若聊天的对象未上线,可以当他/她上线时查阅消息,若对方在线,如果他未在查看消息界面,则系统将提示某人给你发了一段话,否则会直接收到消息而没有提示。该模块主要以websocket库为核心。用户打开web页面即开始使用websocket对象,websocket为单例模式所产生,即所有人通用一个websocket。主动聊天方以socket形式发送广播,再以redis技术存入缓存,且将聊天内容存入数据库中。内容为{“receive”:”receiverId”,”Content”:”聊天内容”,time:”聊天时间”},所有用户均需收到消息并且解析消息,拿到receiverId再和登录账户的ID比对,如果消息是发给自己的,则展示,否则忽略该消息。当用户聊天中断后,再次登录或打开聊天会话框时,消息不会消失,因为数据库会再次打开并把之前的聊天内容进行展示关键代码如下:fromasgiref.syncimportasync_to_syncfromchannels.generic.websocketimportWebsocketConsumerimportjsonclassChatConsumer(WebsocketConsumer):defconnect(self):self.room_name=self.scope['url_route']['kwargs']['username']self.room_group_name='chatter_%s'%self.room_name#Joinroomgroupasync_to_sync(self.channel_layer.group_add)(self.room_group_name,self.channel_name)self.accept()print("connected")defdisconnect(self,close_code):#Leaveroomgroupasync_to_sync(self.channel_layer.group_discard)(self.room_group_name,self.channel_name)#ReceivemessagefromWebSocketdefreceive(self,text_data):text_data_json=json.loads(text_data)fro=text_data_json['from']to=text_data_json['to']message=text_data_json['message']#Sendmessagetoroomgroupasync_to_sync(self.channel_layer.group_send)(self.room_group_name,{'type':'chat_message','message':message,'from':fro,'to':to,})#Receivemessagefromroomgroupdefchat_message(self,event):message=event['message']fro=event['from']to=event['to']#SendmessagetoWebSocketself.send(text_data=json.dumps({'message':message,'from':fro,'to':to,}))图4-7用户发送聊天截图图4-8用户发送聊天截图4.2系统界面的设计与实现系统主要分为9个页面,分别为系统的首页,登录页,注册页,发布攻略页,查看所有租车车源页,查看酒店页,查看攻略页和查看订单页以及聊天页。每个页面都继承base.html页面。系统中用到的javascript和css布局均在alljs.js文件和style.css文件中。其中,购买汽车,为汽车付款等小功能都以js弹出框形式给出,用户获取优惠劵也是在页面弹出的,而并非单独的html文件。除此之外,base.html也调用了所有页面都会用到的JavaScript,这样保证了其他页面在继承base时不需要重复调用。下面将分别说明主要功能模块的设计:(1)查看历史订单模块:购买产品后,用户可能想要查阅自己曾经购买了什么,如何购买的以及购买时间等信息。应对此场景,历史订单模块满足了如上需求。用户可以在历史订单中检索商品,可以查看商品的购买时间,消费金额和商品名称等。此为小模块,用户对商品检索功能只是关键字搜索,并非模糊搜索,用户登录后,controller自动检索用户所有的消费记录,并以时间为条件排序完毕,再以HttpResponse的形式传给js,js的函数拿到请求的data后对其整理,生成了对应的历史订单。关键代码如下:bookings1=bookroom.objects.filter(booker=u)bookings2=bookcar.objects.filter(booker=u)bookings=""foriinbookings1:bookings+=(+","+str(i.time)[:19]+","+str(i.room.price)+",")foriinbookings2:bookings+=(+","+str(i.time)[:19]+","+str(i.car.price)+",")图4-9查看订单截图图4-10检索订单截图对用户定位的模块:系统当用户查看所有的车源的时候,JS中百度定位的API将自动reload一个获取定位的函数(repos),这个函数将更新User(用户表)的经纬度字段(lo,la),再根据车商的经纬度,以勾股定理的形式计算出二者间的直线距离,js中的过滤模块再按照二者间的距离进行显示。用户注册模块:当注册用户点开注册界面时,屏幕的焦点会在username上,onblur函数触发时,会自动触发isusernameexist函数,判断username是否可用(因为username为unique=True字段)。然后在进行email的判断,同理,若email已经注册过,也会有alert的提示,并重新停留焦点在email上,获取验证码后,会根据email,发送相应的四位数随机验证码。发送验证码后,系统将存储验证码为request中的session,当用户提交验证码后,该session再和验证码的code进行比对,最终完成注册功能。如下图片为程序运行的截图。图4-11用户注册界面图4-11用户接收到验证码界面第五章编码与测试5.1系统测试概述为确保自驾游信息管理系统可以稳定运行,在发布之前非常有必要进行一次系统的测试。本论文主要对系统进行了黑盒测试与白盒测试。黑盒测试不考虑系统的内部结构,主要通过使用系统,来验证是否满足了详细设计当中的各项功能。本次测试主要使用了UI测试、边界值测试、兼容性测试、易用性测试等。白盒测试要考虑系统的内部逻辑结构,通过编写python脚本,调用requests模块对系统的逻辑路径进行测试。5.2测试的方法、计划测试在软件的生命周期中有着不可或缺的位置,一个小bug可以导致系统崩溃,也可以导致用户财产受到损失,所以进行充分的测试是十分必要的。本次测试主要进行了黑盒测试与白盒测试,在进行黑盒测试时,主要采用了功能测试、UI测试、兼容性测试、易用性测试等方法。下面分别说明这些方法的测试重点:功能测试:判断系统是否实现了需求分析中的功能;UI测试:判断点击链接是否会跳转到正确的页面;按钮功能是否正常;兼容性测试:判断自驾游信息管理系统在不同使用环境下是否能正常运行;易用性测试:系统提示清晰,使用简单,容易上手;白盒测试:使用python脚本遍历所有路径,查看是否有功能测试未发现的bug。进行本次测试环境为macOS系统,浏览器主要使用谷歌浏览器。本次系统测试,通过的条件为:执行所有的测试用例;发现的bug修改完成,并且没有引发新的bug;系统不存在严重bug;细小功能bug修复率在50%以上。5.3测试的数据、结论表5-1登录模块测试用例用例编号1.1.1所测模块登录模块用例名称测试是否能正常登录测试步骤访问自驾游信息管理系统展开左侧导航栏,点击登录输入正确的用户名以及对应的密码点击登录按钮预期结果登录成功,展开左侧导航栏后显示用户名实际结果登录成功,展开左侧导航栏后显示用户名优先级高表5-2登录模块测试用例用例编号1.1.2所测模块登录模块用例名称不存在的用户名或错误的密码测试步骤1.访问自驾游信息管理系统2.展开左侧导航栏,点击登录3.输入不存在的用户名或错误的密码4.点击登录按钮预期结果登录失败,重新弹出登录框,且登录信息清空实际结果登录失败,重新弹出登录框,且登录信息清空优先级中表5-3登录模块测试用例用例编号1.1.3所测模块登录模块用例名称取消登录测试步骤1.访问自驾游信息管理系统2.展开左侧导航栏,点击登录3.点击右下方取消按钮,或右上角的X预期结果登录失败,登录框关闭实际结果登录失败,登录框关闭优先级中表5-4登录模块测试用例用例编号1.1.4所测模块登录模块用例名称测试登录页面注册链接跳转情况测试步骤1.访问自驾游信息管理系统2.展开左侧导航栏,点击登录3.点击“还没有账号?快去注册!”预期结果跳转到注册页面实际结果跳转到注册页面优先级中表5-5注册模块测试用例用例编号1.2.1所测模块注册模块用例名称密码小于6位测试步骤1.访问自驾游信息管理系统2.展开左侧导航栏,点击登录3.点击“还没有账号?快去注册!”4.在用户名后输入1235.在密码后输入小于6位的密码,例如12345预期结果无法通过点击或Tab进行下一内容的输入实际结果无法通过点击或Tab进行下一内容的输入优先级高表5-6注册模块测试用例用例编号1.2.2所测模块注册模块用例名称密码与确认密码不一致测试步骤进入注册页面输入密码123456输入确认密码654321预期结果注册框上方黄色部分提示:两次密码输入不同!实际结果注册框上方黄色部分提示:两次密码输入不同!优先级高表5-7注册模块测试用例用例编号1.2.3所测模块注册模块用例名称使用已注册过的邮箱注册账号测试步骤进入注册页面输入已注册过的邮箱,如1804842134@预期结果注册框上方黄色部分提示:邮箱已经被注册!实际结果注册框上方黄色部分提示:邮箱已经被注册!优先级高表5-8帖子模块测试用例用例编号1.3.1所测模块我的帖子用例名称未登录查看左侧导航栏我的帖子测试步骤访问自驾游信息管理系统,不进行登录点击左侧导航栏中“我的帖子”预期结果弹出登录框实际结果弹出登录框优先级中表5-9帖子模块测试用例用例编号1.3.2所测模块我的帖子用例名称已登录状态查看左侧导航栏我的帖子测试步骤访问自驾游信息管理系统,并进行登录点击左侧导航栏中“我的帖子”预期结果下拉框展示我发表过的帖子名称,以及收到的点赞数实际结果下拉框展示我发表过的帖子名称,以及收到的点赞数优先级中表5-10钱包模块测试用例用例编号1.4.1所测模块我的钱包用例名称查看余额测试步骤1.访问自驾游信息管理系统,并进行登录2.点击左侧导航栏中“我的钱包”3.点击下方“我的余额”预期结果出现提示框,正确输入密码后显示余额实际结果出现提示框,正确输入密码后显示余额优先级中表5-11钱包模块测试用例用例编号1.4.2所测模块我的钱包用例名称查看历史订单测试步骤1.访问自驾游信息管理系统,并进行登录2.点击左侧导航栏中“我的钱包”3.点击下方“历史订单”预期结果弹出框展示租车订单和酒店订单,展示物品名称,订单日期时间,用户名,价格实际结果弹出框展示租车订单和酒店订单,展示物品名称,订单日期时间,用户名,价格优先级中表5-12钱包模块测试用例用例编号1.4.3所测模块我的钱包用例名称搜索订单测试步骤1.访问自驾游信息管理系统,并进行登录2.点击左侧导航栏中“我的钱包”3.点击下方“历史订单”4.在左上角搜索框输入物品名称5.点击查询按钮预期结果展示符合输入条件的订单信息实际结果展示符合输入条件的订单信息优先级中表5-13钱包模块测试用例用例编号1.4.4所测模块我的钱包用例名称关闭历史订单测试步骤1.访问自驾游信息管理系统,并进行登录2.点击左侧导航栏中“我的钱包”3.点击下方“历史订单”4.点击下方“关闭”按钮预期结果历史订单框关闭实际结果历史订单框关闭优先级高表5-14租车模块测试用例用例编号1.5.1所测模块租车模块用例名称预定已经被预定的车测试步骤访问自驾游信息管理系统,并进行登录查看租车商城的车辆信息点击预定点击确认预定预期结果系统提示:已经被预定了!!实际结果系统提示:已经被预定了!!优先级高表5-15租车模块测试用例用例编号1.5.2所测模块租车模块用例名称余额充足预定未被预定的车测试步骤1.访问自驾游信息管理系统,并进行登录2.查看租车商城的车辆信息3.点击预定4.点击确认预定预期结果系统提示:支付成功!!;历史订单增加一条租车订单记录实际结果系统提示:支付成功!!;历史订单增加一条租车订单记录优先级高表5-16用例编号1.5.3所测模块租车模块用例名称余额不足预定未被预定的车测试步骤1.访问自驾游信息管理系统,并进行登录2.查看租车商城的车辆信息3.点击预定4.点击确认预定预期结果系统提示:余额步足!!!请充值!!!实际结果系统提示:余额步足!!!请充值!!!优先级高表5-17租车模块测试用例用例编号1.5.4所测模块租车模块用例名称首次领取优惠券测试步骤访问自驾游信息管理系统,并进行登录滑动首页广告轮播图在优惠券处点击立即领取按钮预期结果领取成功,系统提示:领取成功!!!实际结果领取成功,系统提示:领取成功!!!优先级中表5-18租车模块测试用例用例编号1.5.5所测模块租车模块用例名称重复领取优惠卷测试步骤1.访问自驾游信息管理系统,并进行登录2.滑动首页广告轮播图3.在优惠券处点击立即领取按钮预期结果领取失败,系统提示:您已经领取过了~不要太贪心哦~~实际结果领取失败,系统提示:您已经领取过了~不要太贪心哦~~优先级中白盒测试部分代码如下:importrequestsclassTestCase():'''args=(status,data)'''def__init__(self,name,url,method,*args,**kwargs):self.args=args=nameurl=":8000/"+urlifmethod=="GET":self.request=requests.get(url)else:self.request=requests.post(url,kwargs)self.content=str(self.request.content,encoding="utf8")print(len(args[1][:-1]))foriinargs[1]:print(i)ifstr(self.request.status_code)==str(args[0])andstr(self.content)instr(args[1]):self.Tpass="Pass"else:self.Tpass="UnPass"defWrite(self,path="result.txt"):self.request.status_code=str(self.request.status_code)f=open(path,"a+",enco

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论