软件工程课设.docx
《软件工程课设.docx》由会员分享,可在线阅读,更多相关《软件工程课设.docx(20页珍藏版)》请在冰豆网上搜索。
软件工程课设
软件代码开发技术课程设计报告
互联网快捷服务平台
学院计算机学院
专业软件工程
年级班别
姓名
学号
指导教师崔
2017年11月
1.问题域的描述
1.1问题引言
随着科学技术的高速发展,人们的生活水平越来越高,生活的节奏也越来越快,因此简单快捷的生活方式成为大家的首选.所以在人们紧凑的生活节奏中,难免有一些事情我们可以做,但是因为各种原因,我们没有时间去完成,特别是身在校园中的我们,总会有时候没有时间去做我们应该及时完成的任务。
这个时候我们便想到如果有人在这个时间段帮我们去完成我们要做的事情就好了,所以便有这个快捷服务平台,我们可以把我们要完成的但没时间去做或没有特定能力去做的任务发布到这个快捷服务平台中,让有时间或相关的能力的人去替我们完成这个紧急的任务,发布服务者要给完成服务者适当的费用,这样,有时间或有相关能力的人就可以接收这些任务来更好的利用自己的时间和能力。
这样,在我们快节奏的生活中,我们可以更加合理的应用我们的时间和能力来获取更高的经济效益.
1.2具体问题描述
这个平台主要是面向高校学生,在高校中的学生高效率利用他们的时间资源和技能能力是非常重要的,这对于他们将来的职业发展也是很重要的。
快捷服务平台,一个兼具O2O与C2C众包模式的校园“共享服务”平台,用户可以发出各种个性化需求任务,自定小费;还可以成为服务者,利用空余的时间参与抢单,赚取报酬;平台采取订单智能推送,高效抢单模式。
同时,服务者也可以在平台发布自己的技能服务,供有需求的用户选择购买。
我们的快捷服务平台应该可以应对以下不等的日常生活中的问题。
比如在收快递的问题上,我们并不是所有时间段都可以有时间去领取我们的快递,而在学校中肯定有学生在那个时间段是有时间的,那么我们便可以通过这个快捷服务平台,发布有偿任务,让时间的人去帮我们那快递,而我们在那个时间段就可安心的做正在做的事情,这样就不会两头都个不到了,加快了我们的做事效率。
还有当我们有一份文件要打印而没有时间去打印时,我们同样可以通过这个平台让别人帮我们完成打印,必要的话还可以让对方把文件直接送到我们所在的地方,这样我们就省去了不必要的等待时间,可以更好的完成自己手头上的工作.
因为我们的大学生活是比较繁忙的,所以并不是所有的人都有很多连续的时间段去做兼职,而我们的快捷服务平台就可以提供给这些学生短时间的有偿服务任务,让他们即使在很短的时间内也可以做兼职,当然也有比较长时间的任务,这个主要取决于任务发出的要求,这样,学生有时候在顺路顺手做一些任务就可以得到丰厚的报酬。
当然我们的快捷服务平台远不止可以解决这些问题,还可以解决更多的问题.通过这个平台我们就可以将学生们的技能与时间资源整合起来,将会创造出很高的商业价值。
在给一些人创造时间,同时给一些人创造价值。
不仅如此,该平台还致力于让我们更好的融入到这个越来越快生活的节奏,解决我们生活中的各种问题。
2.问题清单
2.1发布任务问题清单见表2-1
问题序号
问题描述
备注
1
在收快递的问题上,我们并不是所有时间段都可以有时间去领取我们的快递,而在学校中肯定有学生在那个时间段是有时间的,那么我们便可以通过这个快捷服务平台,发布有偿任务,让时间的人去帮我们那快递,而我们在那个时间段就可安心的做正在做的事情,这样就不会两头都个不到了,加快了我们的做事效率。
代拿快递
2
在打印的问题上,当我们有一份文件要打印而没有时间去打印时,我们同样可以通过这个平台让别人帮我们完成打印,必要的话还可以让对方把文件直接送到我们所在的地方,这样我们就省去了不必要的等待时间,可以更好的完成自己手头上的工作。
代打印
3
在购买物品的问题上,如果我们没有时间去超市买东西,而刚好很需要需,我们只需要将要要买的东西发布到快捷服务品台,就会有刚好在超市的或将要去超市的人接单帮忙我们将我们需要的东西买回来,只要我们支付一点跑路费就可以了,不仅省了时间,也不必专门去一趟了.
代买
4
在课程服务问题是上,当我们在课程上遇到困难时,我们可以通过快捷服务平台,让学霸帮助我们解决学习上的问题,提高我们的课程成绩.
课程服务
5
在早餐宵夜的问题上,我们可以通过快捷服务平台让在是食堂的同学帮我们带宵夜早餐,这样就不用上美团等定外卖了,更何况那些平台定外卖都要挺久才能送到。
代码宵夜、早餐
表2—1
2.2接单问题清单见表2—2
问题序号
问题描述
备注
1
在短时间兼职的的问题上,因为我们的大学生活是比较繁忙的,所以并不是所有的人都有很多连续的时间段去做兼职,而我们的快捷服务平台就可以提供给这些学生短时间的有偿服务任务,让他们即使在很短的时间内也可以做兼职
短时兼职
2
在长时间兼职的的问题上,有比较长时间的任务,这个主要取决于任务发出的要求,这样,当接单者有比较长的一段时间时,他就可以接比较需要较长时间的任务,担任相应的报酬也就会比较丰富。
长时兼职
表2—2
3.解题模型
3。
1业务模型
3.1。
1角色责任表
角色
责任
协作者
任务发布人
设定任务内容
②设定任务时间
③制定任务费用
④支付任务服用
⑤发布任务
⑥与接单人协商任务细节
⑦进行售后评价
⑧撤回订单
⑨订单投诉
⑩系统建议
⑪登录注册
后台管理员
接单人
接单人
浏览任务
②接收订单
③与任务发布人协商任务细节
④完成订单内容
⑤得到报酬
⑥订单投诉
⑦系统建议
⑧登录注册
后台管理员
任务发布人
后台管理员
显示任务到系统界面
②维护系统稳定
③处理投诉
④处理建议
⑤推送任务给接单人
⑥登录
任务发布人
接单人
表3。
1。
1角色责任表
3。
1.2用例图
图3。
1.2用例图
3。
1。
3用例脚本图
1)用户注册用例脚本图如图3。
1。
3-1所示
图3。
1.3-1用户注册用例脚本图
2)登录用例脚本图如图3.1.3-2所示
图3。
1。
3—2登录用例脚本图如图
3)发布任务用例脚本图如图3。
1.3-3所示
图3。
1。
3—3发布任务用例脚本图
4)接收订单用例脚本图如图3。
1.3-4所示
图3。
1。
3—4接收订单用例脚本图
3。
2数据模型
3。
2。
1类图
图3。
2.1类图
3。
2。
2状态图
图3。
2.2状态图
3。
3功能模型
3.3。
1数据流图
1)初步数据流程
图3.3。
1—1初步数据流程
2)最终数据流图
图3.3。
1-2最终数据流图
4.应用场景
4。
1核心数据结构
4。
1.1数据结构引言
数据结构对于一个系统是非常重要的,同样我们的互联网快捷服务平台也拥有一套严谨高效的数据结构,这可以让我们的系统平台更加的稳定高效的运行.
数据结构是计算机存储、组织数据的方式。
数据结构是指相互之间存在一种或多种特定关系的数据元素的集合.通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率.数据结构往往同高效的检索算法和索引技术有关。
数据的逻辑结构:
指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关.逻辑结构包括:
1.集合:
数据结构中的元素之间除了“同属一个集合"的相互关系外,别无其他关系;
2。
线性结构:
数据结构中的元素存在一对一的相互关系;
3.树形结构:
数据结构中的元素存在一对多的相互关系;
4.图形结构:
数据结构中的元素存在多对多的相互关系.
数据的物理结构:
指数据的逻辑结构在计算机存储空间的存放形式。
数据的物理结构是数据结构在计算机中的表示(又称映像),它包括数据元素的机内表示和关系的机内表示。
由于具体实现的方法有顺序、链接、索引、散列等多种,所以,一种数据结构可表示成一种或多种存储结构。
一般认为,一个数据结构是由数据元素依据某种逻辑联系组织起来的。
对数据元素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机内存储,数据的存储结构是数据结构的实现形式,是其在计算机内的表示;此外讨论一个数据结构必须同时讨论在该类数据上执行的运算才有意义.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率。
在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素.许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构.许多时候,确定了数据结构后,算法就容易得到了。
有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。
不论哪种情况,选择合适的数据结构都是非常重要的.
可见一个好的数据结构对我们的互联网快捷服务平台是多么重要,接下来我们就讲讲该平台所使用的数据结构。
4.1。
2Item数据结构
名称
类型
是否隐私
描述
iid
String
N
任务id
detail_url
String
N
任务url
num_iid
String
N
任务数字id
title
String
N
任务标题,不能超过60字节
nick
String
N
任务发布人昵称
type
String
N
任务类型(fixed:
一口价;auction:
拍卖)注:
注明任务长度
cid
String
N
任务所属的叶子类目id
seller_cids
String
N
任务所属的发布人自定义类目列表
props
String
N
任务属性格式:
pid:
vid;pid:
vid
input_pids
String
N
用户自行输入的类目属性ID串。
结构:
”pid1,pid2,pid3",如:
”20000”注:
通常一个类目下用户可输入的关键属性不超过1个。
input_str
String
N
用户自行输入的子属性名和属性值,结构:
”父属性值;一级子属性名;一级子属性值;二级子属性名;自定义输入值,。
。
..”,如:
“耐克;耐克系列;科比系列;科比系列;2K5",input_str需要与input_pids一一对应,注:
通常一个类目下用户可输入的关键属性不超过1个。
所有属性别名加起来不能超过3999字节.
desc
String
N
任务描述,字数要大于5个字节,小于25000个字节
pic_path
String
N
任务主图片地址
num
String
N
任务数量
valid_thru
String
N
有效期,3或者7(默认是3天)
list_time
String
N
任务发布时间(格式:
yyyy-MM—ddHH:
mm:
ss)
delist_time
String
N
任务撤回时间(格式:
yyyy—MM-ddHH:
mm:
ss)
stuff_status
String
N
任务新旧程度(全新:
new,闲置:
unused,)
location
Location
N
任务执行地点
price
String
N
任务价格,格式:
5.00;单位:
元;精确到:
分
add_fee
String
N
追加费用,格式:
5.00;单位:
元;精确到:
分
has_discount
String
N
支持会员打折,true/false
freight_payer
String
N
执行任务所需费用,seller(卖家承担),buyer(买家承担)
has_invoice
String
N
是否有发票,true/false
has_showcase
String
N
系统推送,true/false
modified
String
N
任务修改时间(格式:
yyyy—MM—ddHH:
mm:
ss)
increment
String
Y
任务加价幅度。
如果为0,代表系统代理幅度
auto_repost
String
Y
任务自动重发,true/false
approve_status
String
N
任务上传后的状态。
Onsale发布中,instock推送中
product_id
String
Y
任务所属产品的id(可能为空).该字段可以通过kjfw.products。
search得到
auction_point
String
N
返点比例
property_alias
String
N
属性值别名
itemimg。
position
ItemImg[]
N
任务图片列表(包括主图)
propimg.position
propImg[]
N
任务属性图片列表
sku.modified
sku[]
N
SKU列表
outer_id
String
N
任务发布人外部编码
is_virtural
String
N
虚拟任务的状态字段
is_taobao
String
N
是否在接单人显示
video.modified
Video[]
N
任务视频列表(目前只支持单个视频关联)
4.1。
3具体数据结构列表
操作名
所用数据结构
说明
显示任务列表
队列
这里的任务列表是从后台服务器中下载下来的,所以使用队列的数据结构是比较合适的,因为当有新的任务时,可以将新任务插在队列后面,简单得实现更新,完成的任务也可直接出列
编辑任务
链表
任务发布人编辑自己的任务,用链表的数据结构是比较合适和高效的,因为任务发布人可以高效得实现任务的插入和删除。
显示订单列表
队列
这个跟显示任务列表是比较相似的,用的数据结构也是队列,这是显示给接单人看的订单列表,新接的单可以直接插在队列的后面而完成的订单可以直接出列.
投诉列表
队列
这是后台管理人员看的列表,用的数据结构是队列,新接到的投诉可以直接插到队列后面等待处理,而处理完的投诉可以处理。
4.2核心算法
4。
2。
1前言
好的算法对一个庞大的系统是非常必要的,好的算法就像这个系统的心脏一样,决定这该系统能不能高效、稳定运行。
而我们的互联网快捷服务平台也有一套高效稳定的算法支撑着系统的日常运行.
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。
也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出.如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。
不同的算法可能用不同的时间、空间或效率来完成同样的任务.一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
算法中的指令描述的是一个计算,当其运行时能从一个初始状态和(可能为空的)初始输入开始,经过一系列有限而清晰定义的状态,最终产生输出并停止于一个终态.一个状态到另一个状态的转移不一定是确定的.随机化算法在内的一些算法,包含了一些随机输入。
所以鉴于算法的在整个系统中的重要性,我们对该系统使用的算法经过了多次的改进,让这套算法运行的更有效率.
4.2。
2核心算法介绍
本系统中最重要的算法是任务搜索算法和任务推送算法,任务搜索算法是接单人搜索适合自己当时去完成的任务,而任务推送算法是系统将任务推送到合适接该任务的接单人的平台上,这样精确的点对点就可以让任务发布人所发布的任务可以更快更高效的完成,节约了任务发布人和接单人的金钱和时间,也可让我们的系统更加高效稳定的运行。
1)任务搜索算法
从技术上来说,就是在用户输入关键词匹配到的商品中,把最符合用户需求的任务排到第一位,其它的依次排在后续相应的位置.为了更好的实现这个目标,算法排序系统基本按三个方面来推进:
一、算法模型
当用户输入关键词进行搜索的时候,系统依据算法模型来给匹配到的每个任务进
时的计算,并按照分数的大小对任务进行排序。
对于好的算法模型,首先需要考虑我们能够有哪些特征因子可以应用。
比如在网页搜索中,算法模型基本就是按网页的重要性和相关性给网页计算一个分数,然后进行排序。
这里的相关性,和重要性就是网页排序模型中两个重要的因子。
具体来说相关性因子是指搜索关键字在文档中出现的度数,当这个度数越高时,则认为该文档的相关程度越高。
重要度因子比如Google的Pagerank,可以理解为一个网页入口超级链接的数目:
一个网页被其他网页引用得越多,则该网页就越有价值。
特别地,一个网页被越重要的网页所引用,则该网页的重要程度也就越高。
搜索的时候,有些特征因子是很容易能想到的,比如:
A、文本的相关性:
关键词和商品的匹配,匹配的程度,是否重要词的匹配,匹配词之间的距离等,都可能影响相关性。
B、类目热点:
系统数据的一个重要特质是每个商品都挂靠在类目属性体系下面,每个商品都做了一个很好的分类。
在搜索过程中,同一搜索词的大量用户行为数据很容易聚焦到相应的热点类目.
C、任务指标:
任务搜索算法中任务指标是扮演者重要角色的,其中包括任务的性质,时间,时限,地点,费用的都是接单人搜索的关键内容,所以搜索算法是在此基础上建立起来的。
二、线下评估
算法模型的评估一般分为线下的评估和线上的评估,线下的评估很多都体现在搜索中常用的相关性(Relevance)指标.相关性的定义可以分为狭义相关性和广义相关性两方面,狭义相关性一般指检索结果和用户查询的相关程度。
而从广义的层面,相关性可以理解为用户查询的综合满意度。
当用户在搜索框输入关键词,到需求获得满足,这之间经历的过程越顺畅,越便捷,搜索相关性就越好。
三、线上测试
为了真实验证一个算法模型的好坏,需要有一个系统能提供真实的流量来检验。
系统搜索实现的BTS(BucketTestingSystem)系统就是这样的一个环境,在用户搜索时,由搜索系统根据一定的策略来自动决定用户的分组号(Bucketid),保证自动抽取导入不同分组的流量具有可对比性,然后让不同分组的用户看到的不同算法模型提供的结果。
用户在不同模型下的行为将被记录下来,这些行为数据通过数据分析形成一系列指标,而通过这些指标的比较,最后就形成了不同模型之间孰优孰劣的结论。
只要分组的流量达到一定的程度,数据指标从统计意义上就具有可比性。
2)任务推送算法
关于任务的推送算法,我觉得以下几个因素比较重要:
①人--用户是一个什么样的人?
②任务—-用户之前执行过什么任务?
这三个事情应该是循序渐进的,他们一起才能决定用户可能可以接受什么样的任
务。
所以我们从人的角度出发应该做这么一件事情:
划分用户群体,从性别,年级,角色等一些特征来划分群体。
具体的划分可能要通过分析数据才能得到结论,比如大一和大二的用户,差别可能不大,但大一跟大四的用户,可以接受的任务的差异性则比较大了,这个具体的区间可以对用户可接受的任务来做一个比较,最终的划分可能是大一、大二、大三、大四等等这样的一个年龄复合性别的划分.用户的角色,比如作为普通学生,或是社团的人员或是帮干部,这些应该都是可以分析到的。
根据用户的群体划分,结合对应群体的购买行为,推荐群体契合度高的商品.
我们从用户之前执行过什么任务出发,我们可以划分任务的类型,从任务的性质,执行任务的时间段,任务的费用分段等将符合接单人的相关的任务推送给接单人。
比如有的接单人他们可以在下午的时间段比较有时间,所以我们就可以将在下午的任务推送给这些人。
而有的接单人比较适合做力量型的任务,我们也就可以将力量性质的任务推送给这部分人,实现任务的精确推送。