版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
I引言选题的目的和现实意义在现如今的大学生教育环境中,大学生竞赛随着时代政策的发展俨然成为了教育的一项重要组成部分,而同时大学生竞赛也是全国各个高校培养创新性人才的重要途径之一。虽然现如今的国内大学生可以通过学校或者网上的一些途径接触到各类比赛,但从各类比赛的角度来看,由于各类比赛对于参赛名额、作品申报、获奖比例、缺少关注等因素的限制,大学生在各种竞赛中的参与程度非常低。以湘潭大学原信息工程学院“信息文化节之创意网页与软件设计大赛”为例,据统计参与人数只有109人,并且无其他院系学生,而原信息工程学院的学生人数超过3000。由此可见学生的参与程度只有仅仅的3%。从可参赛的大学生的角度来看,由一项关于大学生参与学科竞赛的调查问卷分析文章[1]中可得知,影响学生参加竞赛的主要因素就是大部分学生们会受到自身性格因素或是参赛信息的缺失等这样内在和外在的阻碍。为了提高学生参与比赛的积极性,为学生创造更多的比赛机会。设计并实现这个基于WEB的微赛事社交平台,将比赛和社交融合在一起,为比赛增添趣味性,吸引更多的人参与到比赛当中是很有必要的。同时也区别于以往的赛事标准,降低门槛,小到班级内部的竞争,大到国家级比赛,都可以在网站中找到并根据自身条件和兴趣选择性参加。而当学生们体会到参与比赛的兴趣所在以及参与其中的良好体验之后,大多数学生们都会进一步去了解更深层次的高校赛事领域,开拓眼界、提升能力。对于学生来说,有更多的自由来选择自己感兴趣的赛事,有了发挥个性,寻求创新的空间。无论是能力很强的优秀学生还是刚刚入门的初学者,都可以找到适合自己的比赛。特别是拥有小众爱好的人,极其需要一个官方平台以承载群体的交流。以豆瓣网为例,豆瓣网独特的“圈子”文化,以传播“小众文化”为特色,建立了“豆瓣小组”这一概念。而微赛事平台区别于普通的社交平台的地方就在于它的竞赛元素,通过竞赛的方法,促进用户的交流,快速地为参与赛事的普通学生们建立起一个社交圈。对于赛事主办方来说,低门槛的规则为普通人创造了更多的便利,创办一个比赛不再繁琐,无论是几个人,一个部门,一个院系,都可以在网站中发布讯息,创建比赛。而微赛事这样一个平台,也是宣传和管理赛事的一个天然平台,完全能够摒弃以往小型赛事的筹办弊端,想要参赛的人只需要点击比赛链接就可以浏览赛事,报名参加,并接收参与赛事的各项通知。在这样一个机遇和挑战并存的时代,信息化、数字化建设,无疑是每一个时代弄潮儿需要拥有的眼界和勇气。国内外设计现状目前在国内很少见到微型比赛资讯网站,而如“赛氪网”、“我爱竞赛网”等大学生专用比赛网站,都是汇聚了各个高校的顶尖赛事,参与门槛高,学生兴趣较低。虽然在其中也有创建赛事的功能,但这些功能的权限都集于各个高校的管理人员,要想基于学生的个人身份去创建兴趣赛事是不能够做到的。且网站定位单一,咨询更新需要管理员更新,比赛信息不完善,浏览赛事不够快捷,只能通过推荐栏获得不同类型的比赛信息,否则需要自己通过搜索关键词的功能自行查看。而网站提供的大部分比赛也是国家级或者各大企业的大型赛事,对于参赛人员的要求较高。而高等院校的小型赛事还停留在依靠主办方工作人员下寝、摆点宣传的低效率阶段。日常生活中能够获取比赛信息的途径通常是:赛事主办方宣传、网络上自行搜索、老师朋友告知。这些消息途径都存在着许多的缺点,例如:不够方便,不够全面,缺少时效性等。微赛事社交平台,它能很好的解决上述的问题,改变传统的比赛宣传与参与的方式,采用信息化的方式,便捷了学生和指导老师,提高了工作效率。总的来说,开发这样一个赛事网站,是十分必要的。与经济、环境及法律法规的相关性本课题设计在经济、环境、法律法规等多方面因素里有所涉及。在经济方面,本课题设计可以通过向网站的赛事报名用户收取一定的赛事报名费用产生经济效应。在环境方面,本课题设计可以通过网上赛事的开展、宣传与报名而减少更多的纸质资料的使用,有利于环境保护的积极宣传与发展。在法律法规方面,本课题设计考虑到了赛事的主办方的隐私和赛事版权的问题,并加入了主办方用户的数据库设计。技术路线设计对整个网站的功能规划进行制定,采用传统的基于三层的B/S结构[2];接着在整体功能规划的基础上,对网站用户进行需求分析;接着在功能规划和用户需求分析的基础上,基于php的后台脚本技术以及MySQL数据库技术,对整个系统进行设计,包括前端界面设计、前端的功能模块设计、相关数据库设计,最后是系统的实现,然后就是对系统的测试[18],如图1.1所示。图SEQ图\*ARABIC1.1技术路线图本文组织结构本文开头为中英文摘要部分,概括了设计主题、目的、实现方法等内容;第一章为本设计说明书的引言部分,主要交代了本系统设计的选题目的与意义和国内外设计现状及技术路线;第二章为技术概述,介绍相关的技术背景和开发环境及使用的脚本语言,即对整个系统的技术进行概述;第三章为系统的分析与设计,主要介绍系统的功能及定位,对系统数据库结构进行了设计,推荐算法的设计;第四章为系统实现,主要介绍了有关数据库的实现、前台后端的功能的实现,还介绍了推荐算法的实现,展示了主要功能的测试效果;第五章为总结部分,总结所做的所有工作和其中的不足之处。
技术概括2.1PHP技术简介PHP,一种运行在服务器端的HTML脚本编程语言,是一种开源的、简单的、面向对象的、解释型、健壮型、安全的、性能非常之高的、独立于架构的、可移植的动态的脚本语言,尤其适合Web开发并可以嵌入HTML的多用途脚本语言,他的语法接近于C、Java和Perl,可以让Web人员快速的书写动态生成的网页[16,17]。PHP作为脚本语言,主要应用在Web开发领域,且在动态网页开发中占优势,因为PHP的特点是简易、高性能、面向对象、可移植、动态[3,8-12]。简易是指PHP语言非常便捷,比较基础,利于开发,易上手,可以直接将代码嵌入HTML中来实现动态网站的开发;高性能是指其消耗的系统资源相对而言比较少;而且面向对象的思想可以运用于PHP,而其面向对象的改进可以适应大型网站的需求;可移植指它的运行可以在不同平台上满足,如Windows、Linux。PHP现在支持兼容基本上所有的数据库,所有的主流服务器如MySQL、SQLServe、Oracle等。和Java不同的是,用户可以在Web上直接使用命令代码,不需要另外使用虚拟机和运行库[13,14]。2.2MySQL技术简介MySQL作为目前最流行的开放源码数据库服务器之一,MySQL一般特制完整的MySQLRDBMS,是一个开源的关系型数据库管理系统(RelationalDatabaseManagementSystem),由瑞典MySQLAB公司开发,后来被Sun公司收购,Sun公司后来⼜被Oracle公司收购,现在属于Oracle公司。随着MySQL功能的不断完善,性能不断提高,又有开源免费的优势,越来越多的企业选择使用MySQL,而放弃商用收费的Oracle,其具有真正多用户、多线程的特点,简单易用。进一步了解MySQL,总结其特性为:第一,由C/C++开发,并使⽤了多种编译器进⾏测试,保证源代码的可移植性;第二,⽀持多种操作系统;第三,为C、C++、Python、PHP、Ruby等许多的编程语言提供了多种多样形式的API;第四,⽀持多线程,能够充分的利⽤CPU资源;第五,其优化的SQL查询算法可以很明显的提高查询的速度;第六,采用B树加密和索引的磁盘表管理技术,便于快速访问数据;第七,性能卓越服务稳定,很少出现异常宕机;第八,开放源代码且无版权制约,自主性强、使用成本低;第九,支持定长记录和变长记录;第十,历史悠久致使其社区及用户非常活跃,所以一旦在使用或者学习中遇到问题,便可以很快获取到帮助;第十一,完备灵活的权限系统,密码加密传送,并且允许主机端验证密码;第十二,软件体积小,安装使用简单,并且易于维护,安装及维护成本低;第十三,完全支持多种字符集。2.3B/S结构介绍B/S(Browser/Server)就是浏览器和服务器结构,是目前主流的一种网络结构模式,它由C/S(Client/Server)结构变化改进而来。B/S结构软件随着Internet技术兴起,是对C/S架构的一种改进架构。又有分布性特点,可以随时进行查询、业务处理等操作,开发简单,共享性强。业务扩展简单方便:通过增加网页即可增加服务器功能;维护简单方便:只需要改变网页,即可实现所有用户的同步更新[4],所以它的开发和管理都集中于服务器,这样就可以减轻一些在维护方面的工作量,也可以方便用户使用。用户在客户端浏览器地址栏中输入URL访问Web服务器,然后Web服务器会根据用户的请求将获得的结果以HTML等形式返回给客户端浏览器。用户的操作完全通过浏览器实现,一部分事务逻辑在前端实现,主要事务逻辑在服务器端实现,大大简化了客户端电脑负荷,降低了用户总体成本。软件系统的改进和升级越来越频繁,B/S架构的产品明显体现着更为方便的特性。对一个稍微大一点的单位来说,系统管理人员如果需要在几百甚至上千部电脑之间来回奔跑,效率和工作量是可想而知的,但B/S架构的软件只需要管理服务器就行了,所有的客户端只是浏览器,根本不需要做任何的维护。无论用户的规模有多大,有多少分支机构都不会增加任何维护升级的工作量,所有的操作只需要针对服务器进行;如果是异地,只需要把服务器连接专网即可,实现远程维护、升级和共享。但是,应用服务器运行数据负荷较重,一旦发生服务器“崩溃”等问题,后果不堪设想。可以采用数据库存储服务器,以防万一。2.4Bootstrap框架简介Bootstrap是美国Twitter公司的设计师MarkOtto和JacobThornton合作基于HTML、CSS、JavaScript开发的简洁、直观、强悍的前端开发框架,使得Web开发更加快捷。Bootstrap提供了优雅的HTML和CSS规范,它即是由动态CSS语言Less写成。Bootstrap一经推出后颇受欢迎,一直是GitHub上的热门开源项目,包括NASA的MSNBC(微软全国广播公司)的BreakingNews都使用了该项目。国内一些移动开发者较为熟悉的框架,如WeX5前端开源框架等,也是基于Bootstrap源码进行性能优化而来。它具有以下优点:第一,移动设备优先:自Bootstrap3起,框架包含了贯穿于整个库的移动设备优先的样式。第二,浏览器支持:所有的主流浏览器都支持Bootstrap。第三,容易上手:只要您具备HTML和CSS的基础知识,您就可以开始学习Bootstrap。第四,响应式设计:Bootstrap的响应式CSS能够自适应于台式机、平板电脑和手机。第五,为开发人员创建接口提供了一个简洁统一的解决方案。第六,包含了功能强大的内置组件,易于定制,还提供了基于Web的定制。第七,也是最关键的一点,它是开源的。总得来说大大的节省了前端的开发时间,如果项目需要响应式布局那么在这个网站五两分钟即可做好一个页面的框架,只需要去开发工具里面修改文字内容即可。2.5技术方案由于Windows是自己较为熟悉的操作系统,再加上PHP语言因为其跨平台性而对操作系统没有特殊的要求,所以采用了Windows10系统。PHPMyAdmin是一个使用PHP开发,基于Web的图形界面的MySQL数据库管理工具。由于基于Web,因此安装简单,操作容易,是最常用的MySQL管理工具[5]。最常见的PHP运行环境是LAMP。LAMP由Linux操作系统、Apache服务器、MySQL数据库和PHP组成,被称为Web建设的黄金组合,是最常用的PHP运行环境。WampServer(Apache+MySQL+PHP)是一款ApacheWeb服务器、PHP解释器以及MySQL数据库的整合软件包。免去了开发人员将时间花费在繁琐的配置环境过程,从而腾出更多精力去做开发。它可以在Windows、Linux、Solaris三种操作系统下安装使用,该软件对于搭建LAMP很方便。综合以上本系统是在Windows10操作系统下,使用WampServer集成开发环境开发的系统程序,使用PHPMyAdmin4.8.4数据库管理工具管理MySQL数据库,使用DreamweaverCS5设计页面模板。整个系统在WAMP(Windows10+Apache2.4.37+MySQL5.7.24+PHP7.2.14)环境下调试[6,15]。
需求分析系统可行性分析可行性分析的主要目的就是遵循对系统用户负责的原则用最小的代价和最短的时间对任务完成分析研究,以确定此网站的开发过程是否具备合适且完善的资源条件,避免在开发过程中盲目立项而造成不必要的拖延与损失。3.1.1经济可行性分析经济可行性即为对可供选择的技术方案和建设条件进行经济分析和评价来判断系统在经济上是否合理。而通过了解国内外关于赛事平台网站的背景和发展趋势可以看出,在关于赛事创办与参与这方面还有很大的发展空间。且采用此系统可以完成大多数学生的创建比赛与参与比赛的需求,在赛事的举办过程中,也可以为赛事举办者和赛事参与者带来收益。所以本系统在经济上具有可行性。3.1.2技术可行性分析本系统采用了当前主流的B/S模式开发PHP技术,基于WAMP的支持,使用Dreamweaver作为开发工具,MySQL作为数据库工具,实现了系统的基本功能和管理,且因为基于WAMP的支持,开发较迅速、简单,且具有良好的扩展能力。所以本系统在技术上具有可行性。功能需求分析1)前台功能:微赛事平台作为一款可以实现低门槛创建与参与赛事的平台,需要前台具有普通咨询网站的大致功能。(1)首页信息展示模块:信息通过首页展示,首页汇聚了网站中正在进行的各项赛事,可跳转至比赛详情页面。(2)赛事页面模块:分为两部分,一部分微兴趣相关赛事,一部分为网站自动推荐赛事。已登录用户可以在此浏览自己兴趣相关的赛事和网站推荐赛事;未登录用户可以在此浏览网站推荐赛事,若想浏览兴趣相关赛事则需要登录填写兴趣标签。(3)创建赛事页面模块:已登录用户可以填写赛事基本信息包括赛事名称、比赛开始结束时间、赛事相关描述和赛事相关标签等信息;未登录用户则需要先登录或是注册登录。(4)个人界面模块:只面向登录用户,未登录用户则需要先注册登录。已登录用户可以在此了解到自己正参与的赛事,以及发布的赛事和参加过的赛事。2)后台功能:包括用户/管理员模块管理,用户登录等后台操作。(1)用户登录注册模块:主要运用PHP连接MySQL数据库实现登录注册功能并将用户登录日志写入数据库,登录,即为对数据库中的内容给予查询,并验证html中的信息与数据库是否匹配;注册,即为对数据库中的内容进行插入,注册帐号与密码;修改密码,即为对数据库中的内容进行修改。(2)管理员模块:登录管理员账号即可以查看并管理当前网站的所有赛事。(3)兴趣赛事推荐模块:通过赛事标签和用户兴趣标签给用户进行符合用户兴趣的赛事推荐。(4)赛事信息提交模块:主要运用PHP连接MySQL数据库实现,最后返给赛事举办个人单位,对参赛报名信息进行处理。数据库需求分析1)用户表:主要存放用户信息;2)赛事表:主要存放赛事相关信息;3)赛事主办方表:存放赛事主办人的信息;4)兴趣标签表:主要存放赛事和用户所需要的标签;5)参赛用户表:是用户表与赛事表的联立,存放参加赛事用户的信息;6)用户兴趣标签map表:用于联立用户信息和兴趣标签;7)赛事兴趣标签map表:用于联立赛事信息和兴趣标签。总体设计4.1总体功能设计基于3.2的功能需求,为微赛事社交平台的前后端总体设计架构如图4.1所示。概括起来,总共功能分为两大类,一类为赛事推荐,一类为赛事参加,操作主要是注册登录,发布赛事、参与赛事、赛事管理。图4.1前后端总体设计架构4.2总体数据库设计本设计涉及到的数据库的实体属性和总体内容属性是整个数据库的关键,而其具体的概念结构与其内容组成了整个数据库模型。下文介绍具体的数据库总体ER图和数据库实体属性图。4.2.1数据库ER图数据库中主要包括用户信息、赛事信息、兴趣标签信息、赛事主办方信息和参赛者信息。各表之间的数据库ER图如图4.2所示。图4.2数据库ER图4.2.2数据库实体属性图1)用户信息实体属性如图4.3所示。包含用户的一些基本信息,在用户注册时通过php连接数据库将数据信息写入数据库中。图4.3用户信息实体属性图2)赛事信息实体属性如图4.4所示。包含赛事的相关信息,通过创建 赛事的操作将具体赛事存入数据库中。图4.4赛事信息实体属性图3)兴趣标签信息实体属性如图4.5所示。包含用户的兴趣标签与赛事 的兴趣标签,兴趣信息先直接写入数据库,分别通过用户注册操作和赛事创建操作将兴趣标签读取出与用户兴趣表和赛事兴趣表联立。图4.5兴趣标签信息实体属性图4)赛事主办方信息实体属性如图4.6所示。包含赛事主办方的相关信 息,在创建赛事的操作时连接数据库写入。图4.6赛事主办方信息实体属性图5)参赛者信息实体属性如图4.7所示。包含参赛者的具体相关信息, 在注册用户执行参与赛事操作时连接数据库写入信息。图4.7参赛者信息实体属性图4.3推荐算法设计在用户完成登录后,可以查看有关自己兴趣标签的赛事推荐,而此推荐是基于Tag的相似匹配来进行推荐,如果用户兴趣Tag与赛事Tag比较相似,即可推荐用户最感兴趣的赛事,这里使用Jaccard相似度[3]的最基本应用来计算它们的相似度。jaccard相似度:给定两个集合A,B,Jaccard系数定义为A与B交集的大小与A与B并集的大小的比值[7],定义如式4.1所示:(式4.1)假设用户A的兴趣Tags为[A,B,C,D,E];赛事B的兴趣Tags为[A,D,E,G,I];赛事C的兴趣Tags为[C,K,M,N,Y,];通过计算可得JA,B=0.429,JA,C=0.111,这样就可以知道用户对于赛事所以首先应事先建立好一个tag表,用于存放所有tag的名称,用Evetag_map来建立兴趣tag与赛事的映射关系,用Usertag_map来建立兴趣tag与赛事的映射关系,然后做兴趣推荐时,需要用到两个tagmap表,来对用户的兴趣标签与赛事的兴趣标签进行联立。而用户兴趣tag与赛事兴趣tag分别在用户执行注册操作时和赛事创建操作时写入相关数据库表中。具体实现可以先用SQL语句一次性查询所有的赛事和其对应的所有tag,然后在php将tags变成数组,再查询用户和其对应的所有tag,在将其变成数组,接着用Jaccard相似度来对指定的用户ID进行赛事tag相似度计算来返回前n条相关赛事ID,再从数据库把赛事相关信息查询出来即可。详细设计5.1功能模块设计1)注册登录模块在注册界面,需要用户填写用户名、密码、真实姓名、手机号码和5个有关兴趣标签才可以注册完成,此兴趣标签用于赛事推荐使用,如有填写的错误,网站会有错误警告提醒,即注册信息表单填写界面脚本初步检测用户输入的注册信息。注册处理模块检测注册信息是否符合要求。检测用户名是否已存在。将注册信息写入数据表,注册成功,注册成功后直接进入网站首页。注册流程图如图5.1所示。图5.1注册流程图登录界面,在执行注册登录操作后才可以完整使用平台系统的所有功能,需要正确填写已注册的用户名及密码,登录表单界面javascript脚本初步检测用户输入的登录信息。登录模块将用户输入信息与数据库数据进行核对。登录信息正确,则提示登录成功,将用户设置为登录状态(session)。登录信息不正确,则提示登录失败,用户可以再次尝试登录。登录流程图如图5.2所示。图5.2登录流程图赛事推荐模块在赛事推荐界面,需要先判断用户登录状态(session),若已有用户登录,则通过php脚本从MySQL调用符合用户Tag的赛事信息显示在界面上,若没有用户登录信息,则从数据库中调用赛事ID前n条信息显示在界面上。创建赛事模块在创建赛事界面,需要判断用户登录状态(session),若已有用户登录,则可以通过填写表单信息来创建相关赛事信息,最后点击创建,将表单信息输入数据库中,完成赛事创建。创建赛事流程图如图5.3所示。图5.3创建赛事流程图个人中心模块在个人中心界面,需要判断用户登录状态(session),若已有用户登录,则会从MySQL调用当前用户ID显示当前用户所有参与的赛事和所有当前用户创建的赛事,若没有用户登录,则跳转到用户登录界面。在此页面,用户可以对当前赛事进行管理,包括所有参与赛事的退赛Delete以及当前所有创建过的赛事的编辑Edit和删除Delete。个人中心模块流程图如图5.4所示。图5.4个人中心模块流程图5.2数据库二维表设计本节为微赛事社交平台设计了七个二维表,各表的结构如下:1)User表(用户表):包含网站赛事平台的注册用户信息,如表5.1所示。表5.SEQ表\*ARABIC1User表的结构与说明列名称用途类型长度不是nullUser_id用户ID(主键)int8√Username用户名varchar20√Password密码varchar20√Realname真实姓名varchar20Phonenumber手机号码int202)Event表(赛事表):包含赛事的相关具体信息,如表5.2所示。表5.SEQ表\*ARABIC2Event表的结构与说明列名称用途类型长度不是nullEvent_id赛事ID(主键)int8√Eve_name赛事名varchar60√Evedetail赛事详情varchar100√Host_id主办方IDint8√3)Hostdetail表(赛事主办方表):包含赛事的主办方的相关信息,如表5.3所示。表5.SEQ表\*ARABIC3Hostdetail表的结构与说明列名称用途类型长度不是nullHost_id主办方ID(主键)int8√Host_name主办方名varchar30√Host_email主办方邮箱varchar30√4)Tag表(兴趣标签表):包含涉及用户和赛事的兴趣标签的相关信息,如表5.4所示。列名称用途类型长度不是nullTag_id标签ID(主键)int8√Tag_name标签名varchar20√表5.SEQ表\*ARABIC4Tag表的结构与说明5)Player表(参赛用户表):包含参与赛事的用户的具体信息,如表5.5所示。表5.SEQ表\*ARABIC5Player表的结构与说明列名称用途类型长度不是nullEve_id赛事ID(主键)int8√User_id用户IDint8√Player_email参赛者邮箱varchar30√6)Usertag_map表(用户兴趣标签map表):此表主要作用为将兴趣标签表与用户表进行连接。如表5.6所示。表5.SEQ表\*ARABIC6Usertag_map表的结构与说明列名称用途类型长度不是nullId1ID(主键)int8√User_id用户IDint8√Tag_id标签IDint8√7)Evetag_map表(赛事兴趣标签map表):此表主要作用为将兴趣标签表与赛事表进行连接。如表5.7所示。表5.7Evetag_map表的结构与说明列名称用途类型长度不是nullId2ID(主键)int8√Eve_id赛事IDint8√Tag_id标签IDint8√系统实现6.1系统开发环境6.1.1硬件环境CPU:Intel(R)Core(TM)i5-6300HQCPU@2.30GHz2.30GHz;系统版本:Windows10x64;RAM:12.0GB;ROM:1T;软件:WAMP(Windows10+Apache2.4.37+MySQL5.7.24+PHP7.2.14)、PHPMyAdmin4.8.4;NavicatforMySQL11.1.13。6.1.2软件环境编程语言:PHP,JavaScript,HTML;开发集成环境:WAMP(Windows10+Apache2.4.37+MySQL5.7.24+PHP7.2.14);测试环境:GoogleChorme;数据可视化工具:NavicatforMySQL11.1.13企业版。6.2数据库实现MySQL提供了创建数据库和二维表的方法,比较常用的有输入SQL语句和用可视化工具这两种,本文使用的是可视化工具Navicat。它有一个类似浏览器的图形使用者界面,支援多重连线到本地和远端数据库。它的设计合乎各种使用者的需求,从数据库管理员、程序员到各种为客户服务并与合作伙伴共享信息的不同企业或公司。首先利用创建Database的功能创建了数据库,命名为year2project,再利用Navicat创建表的功能创建各个表。6.3系统功能模块实现本小节选出一些具有代表性的页面截图与源码来体现微赛事平台的实现效果。6.3.1网站首页模块浏览器输入提前在Apache中设置好的域名mic.cy就可以进入网站首页,在首页可以浏览大致赛事信息,点击查看更多即可进入赛事详情,导航栏包括首页、赛事、兴趣赛事推荐和创建赛事。如图6.1所示。图6.1首页实现效果图6.3.2赛事详情模块赛事详情界面,如图6.2所示。在此页面可以浏览赛事的详细信息,界面右侧有赛事兴趣相关标签,界面上部有“我要报名”按钮,点击后即可输入详细信息报名。图6.2赛事详情效果图6.3.3赛事推荐模块赛事推荐界面,如图6.3所示。在此界面可以浏览官方推荐赛事,点击右导航栏下方的创建赛事按钮则可以进入创建赛事界面,再输入相关信息则可以成功创建私人赛事。图6.3赛事推荐界面效果图6.3.4创建赛事模块创建赛事界面,在此界面可以创建自己的赛事,输入赛事名称,赛事描述和相关标签等信息后即可创建完相关赛事,并在自己的个人中心界面中看到自己已经创建的赛事信息,如图6.4所示。图6.4创建赛事界面实现效果图6.3.5登录注册模块登录界面,在执行注册登录操作后才可以完整使用平台系统的所有功能,需要正确填写已注册的用户名及密码,登录表单界面javascript脚本初步检测用户输入的登录信息。登录模块将用户输入信息与数据库数据进行核对。登录信息正确,则提示登录成功,将用户设置为登录状态(session)。登录信息不正确,则提示登录失败,用户可以再次尝试登录。如图6.5所示。图6.5登录界面实现效果图在注册界面,需要用户填写用户名、密码、真实姓名、手机号码和5个有关兴趣标签才可以注册完成,此兴趣标签用于赛事推荐使用,如有填写的错误,网站会有错误警告提醒,即注册信息表单填写界面javascript脚本初步检测用户输入的注册信息。注册处理模块检测注册信息是否符合要求。检测用户名是否已存在。将注册信息写入数据表,注册成功,注册成功后直接进入网站首页。如图6.6所示。图6.6注册界面实现效果图6.3.6个人模块个人中心界面,此界面需在登录之后才可以执行查看,再此页面中可以查看注册用户已经参加的赛事和已创建的赛事,点击view即可进入赛事相关详情界面,点击Delete可以删除当前此项赛事,点击Edit可以修改赛事信息,在赛事信息下方有创建赛事的按钮,点击可跳转到赛事创建页面。如图6.7所示。图6.7个人中心界面实现效果图系统测试一个系统的测试是保证其可靠与稳定的关键步骤,在系统完成设计实现后,在使用过程中都会出现意想不到的问题。所以系统测试是为了寻找程序错误和运行bug而进行的一项必要的环节,在确定了运行环境、运行软件、硬件、网络等外部因素后,对整个系统进行测试,验证系统是否满足相关功能逻辑,并在测试结束后,对相关错误结构进行修正与完善。7.1功能测试本平台测试是基于WAMP的服务器软件环境,GoogleChrome浏览器作为前后台环境进行样例测试,主要包括用户的登陆注册,注销;赛事详情,赛事参加,赛事创建的功能,测试用例及结果如表7.1、7.2所示。表7.1登录测试用例及结果用例编号Login功能描述用户输入正确的用户名、密码,登录系统用例目的检查系统登录功能是否完善,能不能判断出不合规范的登录名或密码不输入用户名点击登录提示“用户名密码不能为空”不输入密码点击登录提示“用户名密码不能为空”用户名密码都不输入点击登录提示“用户名密码不能为空”输入错误用户名点击登录提示“用户名或密码错误”输入错误密码输入正确用户名点击登录提示“用户名或密码错误”输入错误密码输入错误用户名点击登录提示“用户名或密码错误”输入正确密码输入正确用户名点击登录成功登陆系统输入正确密码表7.2Register测试用例及结果用例编号Register功能描述用户注册输入正确样例用例目的检查系统注册功能是否完善全部不输入点击注册提示“用户名不合法!请输入6-16位用户名”输入用户名,其他不输入点击注册提示“密码不合法!请输入6-16位密码”输入用户名和手机号码,不输入密码和确认密码、真实姓名输入用户名和手机号码、真实姓名,不输入密码和确认密码除了密码其他都输入输入用户名密码,但确认密码与密码不同,其他都输入点击注册提示“两次输入的密码不一致!”输入用户名、密码、真实姓名,但确认密码与密码不同,输入用户名、密码、真实姓名、手机号码,但确认密码与密码不同,输入用户名密码,确认密码,不输入真实姓名点击注册提示“请输入真实姓名”全都输入,不输入手机号码点击注册提示“手机号码不合法!请输入11位手机号”以上为部分具体测试样例及方法,下面简单介绍几个测试用例及结果。1)创建赛事功能预期结果:点击创建赛事button,进入创建赛事页面,在创建赛事界面输入赛事名称,赛事描述,比赛开始时间,比赛兴趣标签,赛事举办方姓名,赛事方邮箱信息后,完成赛事的创建,并在自己的个人界面中可见。测试结果:与预期一致,成功跳转到创建赛事界面,完成赛事创建。2)参加赛事功能预期结果:点击我要报名button,进入赛事参加界面,在参加界面中输入自己的基本个人信息和联系方式,完成赛事的报名,并在自己的个人界面中可见。测试结果:与预期一致,成功跳转到赛事报名页面,并填写信息后完成赛事的报名操作。3)赛事推荐功能预期结果:点击登录注册后,成为系统注册用户,进入推荐界面,可以查看到与自己兴趣相关的赛事。测试结果:与预期一致,成功完成兴趣相关赛事推荐。7.2测试总结经过对系统各个功能模块的测试,此系统基本满足了系统设计的要求和目标需求,但在赛事推荐功能上,由于样本较少,所以只能基于简单的兴趣标签进行推荐,但对于整体的网站功能性需求都得到了基本的满足。
总结与展望8.1设计总结本项目通过Web平台的前台和后台的管理,和前台后台数据调用、相互链接。通过参赛报名或是浏览使用该平台的各单位个人组织所创办的微赛事,可以让高校学生或是学习组织单位更自由地选择自己感兴趣的赛事,不仅可以锻炼自身能力,还可借其平台实现兴趣交友的目的。在网站搭建过程中,对网站进行了深入的需求分析与设计,构建了分析设计模型,并一步步完成了系统前台界面的设计开发和后台数据库的建立,最终设计了一个基于兴趣的微赛事社交平台。8.2未来展望由于本次设计的部分的技术我还是第一次接触,很多技术都还了解的不够深刻,就已经应用于本网站的搭建上,导致本网站的相关功能上还不够完善,尤其对于前台的搭建和数据库搭建的掌握依然较为浅显,因此在系统前台界面的设计布局方面,不能够做到足够的美观,且在前后端的连接交互数据上还不能够做到完善;今后还应进一步对PHP,数据库原理等相关技术进行学习和研究。而通过这次毕业设计,我也学到了许多新的知识,了解了PHP的各种框架搭建如Yii、Ci等,也对我的编程能力有了很大的提高。因时间有限,本网站只完成了前端设计以及后端的部分功能。在将来,项目还可以扩展为商业性的竞赛和小型兴趣赛事的集合平台,对功能进行优化,并为赛事主办方提供更多的数据支撑和管理功能。因此,对于本系统的进一步优化扩展,也是未来努力和发展的一个重要方向。致谢时光荏苒,四年的大学时光转瞬即逝,在这样一个疫情席卷的六月,我即将离开湘潭大学。完成毕业设计后,回想过去的学习生活,一时感概万千。在这四年我认识了很多人,经历了很多事,这些或愉悦或痛苦的经历丰富了我的人生,学习到很多生活经验,在此我要感谢我身边的所有人,是你们让我变成更好的自己。在此,我首先向龙赛琴老师致以我最诚挚的感谢,感谢她对我的耐心指导,让我能够在这么一个形势严峻的疫情期间,完成我的毕业设计,顺利毕业。同时我还要感谢我的父母和朋友,能在我最艰辛的时候给我最贴心的关怀和问候,当然还要感谢和我四年朝夕相伴的室友,有你们的陪伴,大学四年的时光从来就没有多孤独。最后的最后,我要衷心感谢湘潭大学!在湘大的四年,会是我生命中最宝贵的财富!感谢学校提供这么好的平台,让我成长,让我飞的更高!我也不会辜负湘潭大学对我栽培,一定会尽力为社会做出我的一份贡献。
参考文献[1]石梅,石莉,葛方振.基于问卷调查的大学生参与学科竞赛影响因素分析湖北第二师范学院学报.2019,36-12[2]陈伟斌,基于B/S模式的在线考试系统的设计与实现[J].计算机与数字程,2005(08):148-150.[3]康贤昆.PHP开发框架的研究与实现[D].天津:天津大学图书馆,2007.[4]尹楠,陈操.基于B/S和C/S架构的学生信息管理系统的设计[J].信息系统工程,2012(07):65-67+77.[5]阮志敏,陈福集.电子商务环境下协作型CRM系统模型研究[J]计算机与数字工程,2005,33:56-60[6]尹雯,梅中义等.基于数据仓库的企业客户关系管理系统(CRM)[J].航空工程与维修,2002,(6)[7]Paul,Jaccard.THEDISTRIBUTIONOFTHEFLORAINTHEALPINEZONE.1912.2[8]黄锦仁.PHP在动态网站开发中的优势与具体应用[J].信息与电脑(理论版),2018(22):82-83.[9]赵鹤芹.设计动态网站的最佳方Apache+PHP+MySQL[J].计算机工程与设计,2007(04):1-2[10]赵启志.PHP4+MySQL完整自学方案[M].中国铁道出版社,2011(09):2-53[11](美)赞德斯彻.深入PHP:面向对象、模式与实践(第3版)[M].人民邮电出版社,2011(07):10-44[12](澳)威利,(澳)汤姆森.PHP和MySQLWe开发(原书第4版)[M].机械工业出版社,2009:30-44[13]张建忠.基于WEB的客户关系管理系统的分析、设计与实现[D].山东大学硕士学位论文,2012[14]萨师煊,王珊.数据库系统概论[M].北京:高等教育出版社,2003.[15]Karayaz,G.,Keating,C.B.,Henrie,M.DesigningProjectManagementSystems(C).SystemSciences(HICSS),Hawii,USA,2011:1-10.[16]Patrick.ExpertPHPandMySQLGalbraith[M].WROXPR/PEERINFORMATIOINC,2010(03):21-23[17]GolamMd.MuradulBashir,AbuSayedMd.LatifulHoque,BipulChandraDevNath.E-learningofPHPbasedonthesolutionsofreal-lifeproblems[M]JournalofComputersinEducation,2016:12-33[18]张子丰.基于PHP的商务网站设计与实现.电子科技大学硕士学位论文.2015[19]StephenWalther.ASP.NETUNLEASHED[M].SamsPublishing,2004.
附录部分代码如下:Login:$username=isset($_POST['username'])?$_POST['username']:"";$password=isset($_POST['password'])?$_POST['password']:"";$remember=isset($_POST['remember'])?$_POST['remember']:"";//判断用户名和密码是否为空if(!empty($username)&&!empty($password)){//建立连接$conn=mysqli_connect('localhost:3307','root','970224','userdb');$conn=mysqli_connect('localhost:3306','root','970224','eve_all');//准备SQL语句$sql_select="SELECTusername,passwordFROMUserWHEREusername='$username'ANDpassword='$password'";//执行SQL语句$ret=mysqli_query($conn,$sql_select);$row=mysqli_fetch_array($ret);//判断用户名或密码是否正确if($username==$row['username']&&$password==$row['password']){//选中“记住我”if($remember=="on"){//创建cookiesetcookie("cy",$username,time()+7*24*3600);}//开启sessionsession_start();//创建session$_SESSION['user']=$username;//写入日志$ip=$_SERVER['REMOTE_ADDR'];$date=date('Y-m-dH:m:s');$info=sprintf("当前访问用户:%s,IP地址:%s,时间:%s\n",$username,$ip,$date);$sql_logs="INSERTINTOLogs(username,ip,date)VALUES('$username','$ip','$date')";fwrite($f,$info);fclose($f);//跳转到index页面header("Location:index.html");//关闭数据库mysqli_close($conn);}else{//用户名或密码错误,赋值err为1header("Location:login.php?err=1");}}else{//用户名或密码为空,赋值err为2header("Location:login.php?err=2");}Register:<?php$username=$_POST['username'];$password=$_POST['pass'];$realname=$_POST['realname'];$phonenumber=$_POST['phonenumber'];$link=mysqli_connect('localhost:3306','eve_all','root','970224');if($_POST['submit']){if(mysqli_query($link,"insertintouser(username,password,realname,phonenumber)values('$username','$password','$realname','$phonenumber')")){setcookie("uname",$username,time()+7200);echo"<script>alert('successfully');window.location='index.html';</script>";}else{echo"<script>alert('failed');history.go(-1)</script>";}}include('register.html');?>Commend:publicfunctiongetAllGroupByEveId(){//缓存查询数据if($cache=CacheHelper::getCache()){return$cache;}$query_result=$this->query('selectEve_id,GROUP_CONCAT(tag_id)astagsfromevetag_mapGROUPBYeve_id');$result=[];foreach($query_resultas$key=>$value){//用eve_id做key,值是该id下的所有tagID数组。$result[$value['eveid']]=explode(",",$value['tags']);}CacheHelper::setCache($result,86400);return$result;}functiongeteveRecommend($eve_id,$top=5){if($cache=CacheHelper::getCache()){return$cache;}try{$eveid=intval($eve_id);$m=newTagMapModel();$all_tags=$m->getAllGroupByeve_Id();//调用上面的函数返回所有比赛的tags$finded=$all_tags[$eveid];unset($all_tags[$eve_id]);//把当前比赛从数组中删除$jaccard_arr=[];//用于存相似度foreach($all_tagsas$key=>$value){$intersect=array_intersect($finded,$value);//计算交集$union=array_unique(array_merge($finded,$value));//计算并集$jaccard_arr[$key]=(float)(count($intersect)/count($union));}arsort($jaccard_arr);$jaccard_keys=array_keys($jaccard_arr);array_splice($jaccard_keys,$top);//获取前N条推荐//查询$eveModels=new\Api\Model\eveModel();$recommendeves=$eveModels->getRecommendByTag($jaccard_keys);CacheHelper::setCache($recommendeves,604800);return$recommendeves;}catch(\Exception$e){thrownew\Exception("error");}}<?phprequire_once'Event.php';header("Content-Type:text/html;charset=utf-8");classEventTableGateway{private$connect;publicfunction__construct($c){$this->connect=$c;}publicfunctiongetEvents(){//executeaquerytogetallevents$sqlQuery="SELECTevent.*,tag.*"."FROMevent,tag"."whereevent.Tag_id=tag.Tag_id";$statement=$this->connect->prepare($sqlQuery);$status=$statement->execute();if(!$status){die("Couldnotretrieveeventdetails1");}return$statement;}publicfunctiongetEventsByHostId(){//executeaquerytogetallevents$sqlQuery="SELECTe.*"."FROMEvente,HOSTh"."WHEREh.User_id='".$_SERVER["user_id"]."'ande.Host_id=h.Host_id;";//////////$statement=$this->connect->prepare($sqlQuery);$status=$statement->execute($params);if(!$status){die("Couldnotretrieveeventdetails2");}return$statement;}publicfunctiongetEventsByPlayer(){//executeaquerytogetaneventwiththespecifiedid$sqlQuery="SELECTe.*FROMEvente,PlayerpWHEREp.User_id=1ande.Event_id=p.Event_id";//////////$statement=$this->connect->prepare($sqlQuery);/*$params=array("id"=>$id);*/$status=$statement->execute($params);if(!$status){die("CouldnotretrieveEventID");}return$statement;}publicfunctioninsert($p){$sql="INSERTINTOevents(Event_name,Evedetail,StartDate,EndDate,Cost,Tag_ID,Host_id)"."VALUES(:Event_name,:Evedetail,:StartDate,:EndDate,:Cost,:Tag_ID,:Host_id)";$statement=$this->connect->prepare($sql);$params=array("Event_name"=>$p->getEventName(),"Evedetail"=>$p->getEvedetail(),"StartDate"=>$p->getStartDate(),"EndDate"=>$p->getEndDate(),"Cost"=>$p->getCost(),"Tag_ID"=>$p->getTagID(),"Host_ID"=>$p->getHostID());echo"<pre>";print_r($p);print_r($params);echo"</pre>";$status=$statement->execute($params);if(!$status){die("Couldnotinsertevent");}$id=$this->connect->lastInsertId();return$id;}publicfunctionupdate($p){$sql="UPDATEEventSET"."Event_name=:Event_name,"."Evedetail=:Evedetail,"."StartDate=:StartDate,"."EndDate=:EndDate,"."Cost=:Cost,"."Tag_ID=:Tag_ID,"."Host_ID=:Host_ID,"."WHEREEvent_id=:id";$statement=$this->connect->prepare($sql);$params=array("Event_name"=>$p->getEventName(),"Evedetail"=>$p->getEvedetail(),"StartDate"=>$p->getStartDate(),"EndDate"=>$p->getEndDate(),"Cost"=>$p->getCost(),"Tag_ID"=>$p->getTagID(),"Host_ID"=>$p->getHostID(),"id"=>$p->getEventID());echo"<pre>";print_r($p);print_r($params);print_r($statement);echo"</pre>";$status=$statement->execute($params);if(!$status){die("Couldnotupdateeventdetails");}}publicfunctiondelete($id){$sql="DELETEFROMeventWHEREEvent_id=:id";$statement=$this->connect->prepare($sql);$params=array("id"=>$id);$status=$statement->execute($params);if(!$status){die("Couldnotdeleteevent");}}}<?phprequire_once'User.php';classUserTable{private$link;publicfunction__construct($connection){$this->link=$connection;}publicfunctioninsert($user){if(!isset($user)){thrownewException("Userrequired");}$sql="INSERTINTOusers(Username,Password,Realname,Phonenumber)"."VALUES(:Username,:Password,:Realname,:Phonenumber)";$params=array('Username'=>$user->getUsername(),'Password'=>$user->getPassword(),'Realname'=>$user->getgetRealname(),'Phonenumber'=>$user->getPhonenumber());$stmt=$this->link->prepare($sql);$status=$stmt->execute($params);if($status!=true){$errorInfo=$stmt->errorInfo();thrownewException("Couldnotsaveuser:".$errorInfo[2]);}$id=$this->link->lastInsertId('users');return$id;}publicfunctiondelete($user){if(!isset($user)){thrownewException("Userrequired");}$id=$user->getId();if($id==null){thrownewException("Useridrequired");}$sql="DELETEFROMUserWHEREUser_id=:User_id";$params=array('id'=>$user->getUserID());$stmt=$this->link->prepare($sql);$status=$stmt->execute($params);if($status!=true){$errorInfo=$stmt->errorInfo();thrownewException("Couldnotdeleteuser:".$errorInfo[2]);}}publicfunctionupdate($user){if(!isset($user)){thrownewException("Userrequired");
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- YY/T 2001-2026体外诊断检验系统定性检测试剂企业参考品设置要求
- 新店开业活动营销方案(3篇)
- 春晚舞蹈活动方案策划(3篇)
- 河道复堤施工方案(3篇)
- 深基坑施工方案封皮(3篇)
- 砂浆罐安装施工方案(3篇)
- 策划活动运营方案模板(3篇)
- 网卡营销活动策划方案(3篇)
- 节能工程专程施工方案(3篇)
- 蔷薇艺术活动策划方案(3篇)
- 再生资源绿色回收分拣中心项目投资计划书
- 2026智能物流仓储自动化升级与REITs融资模式研究
- 2026年内部审计师考试试卷及答案
- 四川省自然资源投资集团有限责任公司2026年上半年公开招聘考试备考试题及答案解析
- 2025年成都市网格员笔试试题及答案
- 2026年初级社会工作者《社会工作综合能力》通关模拟卷及参考答案详解(突破训练)
- (2026版)铁路货物运输规则课件
- 小学语文综合性学习课题设计
- 水利隐蔽工程验收记录表(示例版)
- XJJ013-2012 新疆维吾尔自治区城市规划管理技术规定
- 中海油校招笔试题库和答案
评论
0/150
提交评论