returntrue;
}
}
}
}
}
returnfalse;
}
复杂度:
0
(1)
b.Group类重载,返回有特定email地址的用户指针:
算法:
遍历objects集合,并判断集合中元素的email地址是否和传入的参数相同,如果相同返回此Client指针,否则返回null。
关键代码如下:
Client*Group:
:
operator[](conststring&
email)
{
for(inti=0;i<(int)objects.size();i++)
{
if(objects.at(i)->getEmail()==email)
{
returnobjects.at(i);
}
}
return0;
}
复杂度:
O(N)
c.Advertisement类重载>>,从输入中读入信息给Advertisement属性赋值:
算法:
用getline函数和stream为advertisement属性赋值,为了保证能将
空格和回车全部保留,用一个while循环一行读body并用“vbr>”标签将结果进行连接,直到读到空行为止。
关键代码如下:
istream&operate»(istreain&stream,Advertisement&a)
{
stringstr;
Datedat;
intqua;
getline(stream,str);
a.setTitle(str);
stream»str;
a.setEmail(str);
stream»qua;
a.setQuantity(qua);stream»dat;a.setStart(dat);stream»dat;
a.setClose(dat);stream»str;a.setBody(str);returnstream;
}
复杂度:
O(N)
d.Category类的findOfferingsRecursive函数,用递归遍历子目录内容:
算法:
递归调用findOfferingsRecursive和findOfferings,先用findOfferlngs找到本层目录中满足条件的广告加入到matches中,然后再遍历子目录集合,调用自身函数将子目录中满足条件的广告加入到matches中.关键代码如下:
voidCategory:
:
findOfferingsRecursive(Listin君:
:
iteratorstartsListing:
iteratorfinish.Listing&matches)
{
for(Listing:
:
iteratoris=start;is!
=finish;is++){
if((*is)->getNumber()==number)
{
matches.add((*is));
}
}for(vector:
:
iteratorss=sub_categories.begin();ss!
=sub_categories.end();ss++)
(^ss)->findOfferingsRecursive(start,finish,matches);
}
复杂度:
O(N)e.Listing类的sort函数,通过使用stl的sort函数实现对广告的排序功能。
算法:
定义四个内部函数,再定义sort函数的排序逻辑,然后在sort函数中,以函数指针作为参数传给so"函数。
关键代码如下:
boollessQuantity(Advertisement*
a^Advertisement*b)
{
returna->getQuantity()<
b->getQuantity();
}
boollessStart(Advertisement*
a,Advertisement*b)
{
returna->getStart()getStart();
}
boollessClose(Advertisement*
a,Advertisement*b)
{
returna->getClose()getClose();
}
boollessEmail(Advertisement*
a^Advertisement*b)
{
returna->getEmail()getEmail();
}
ListingListing:
:
sort(stringfield)
{
Listingis(*this);
if(field==nemailn)
{
std:
:
sort(is.begin(),is.end(),
lessEmail);
}if(field==1'Quantityn)
{
std:
:
sort(is.begin(),is.end(),lessQuantity);
}
if(field==nStartn)
{
std:
:
sort(is.begin(),is.end(),lessStart);
}
if(field==nClosen)
{
std:
:
sort(is.begin(),is.end(),lessClose);
}returnis;
}
复杂度:
O(N)
f.Listing类的Alter函数,通过使用stl的find函数实现对广告的査找功能。
算法:
总体思想是在所有的广告集合中找到包含输入关键字的广告,然后将之加入,从而显示满足条件的广告,最后返回这个列表。
关键代码如下:
ListingListing:
:
filter(stringkeyword)
{
Listingis;
for(inti=0;i<(int)objects.size();i++)
{
string:
:
size_typeil=
objects.at(i)->getTitle().find(keyword);
string:
:
size_typei2
objects.at(i)->getBody().find(keyword);
if(il!
=string:
:
nposlli2!
=string:
:
npos)
is.add(objects.at(i));
}
}
returnis;
}
复杂度:
O(N)
g.Advertisement类的getTopDutchBids函数,用以获得竞标成功的bid集合。
算法:
芬标成功的bids是指按价位由高到低排,累积竞标的数量和大于等于广告商品本省的数量时停止。
因此,需用一个result变重用以统计bids的竞标数量和,遍历广告本身己经排好序的bids集合,依次将bids内的bid出栈,并将出栈的bid数量加到result中,知道result的值大于等于广告的quantity为止,这时,一般情况会多加一个bid,也就是说多加的这个bid内的quantity加上前面的bid的quantity值会大于广告本身的quantity,也就是鼠这个bid并不会得到它所要求的广告的数量,而是广告的quantity减去前面bid所有quantity剩下的值。
关键代码如下:
vectorAdvertisement:
:
getTopDutchBids(void)const
vectorvb;
priority_queuebid(bids);intall=number;
while(!
bid.empty()&&all>0)
vb.push_back(bid.top());all-=bid.top().getQuantity();bid.pop();
}
returnvb;
}
复杂度:
O(N)
第四章系统测试
测试方法:
利用Apache运行程序,设置几组测试用例,分别考虑到一般情况和特殊情况,观察测试结果的正确性。
测试用例(应该给出几组具有不同特征的数据进行测试):
Client
名称
数量
内容描述
天数
最终竞价
竞标数量
赵光明
奶粉
1
很棒儿童产品1-2岁放心
TopLevel
5
Y3
1
张三
洗衣粉
3
家庭
TopLevel/zhang
5
¥3
1
小王
冰红茶
15
好喝
TopLevel/zhang/wang
7
¥5
2
测试结果:
a.验证广告描述和题目读入空格和回车的结果
iCarncgieAuctions
|Byclor*dsi-v
Findj
G&wgory:
]9“陀】
|TapOnly|
E«carxxtM
b.按目录显示结果分二种情况:
1.TopOnly:
io
Byclosedatexz
Find
Category:
Bid
TopOnly||Recursive
奶粉
Postedby:
光明,赵
Posted:
9/21/20138:
31:
22
Closes:
9/26/20138:
31:
28
Quantity:
1
Numberofbids:
0彳艮棒儿童产品1-2岁放心
2.Recursive:
巧closedalev
|FindI
Category:
|7cpLcvc1
5|Tof0"!
■:
门
Recursive
妬粉
Postedby:
光耳赵
Posted:
9/21/20138:
31:
28
Closes:
9/26/20138:
31:
28
Quantity;1
Nuirberofbids;0很棒儿童产品-2岁放心
林粉
Postedby:
=,张
Posted:
9/21/20138:
32:
43
Closes:
9/26/20138:
32:
43
Quantity:
3
Nunberofbids:
0家庭冰红茶
Postedby:
二,[h
Posted:
9/21/20138:
34:
7
Closes:
9/22/20138:
34:
7
Quantity:
IB
I'imrberofbids:
0
好喝
c•按closedate排序结果:
奶粉
Postedby:
光明,赵
Posted:
9/21/20138:
31:
28
Closes:
9/26/20138:
31:
28Quantity:
1
Numberofbids:
0
很棒儿童产品1-2岁歆心洗衣粉_
Postedby:
三,张
Posted:
9/21/20138:
32:
43
Closes:
9/26/20138:
32:
43Qu.anti.ty:
3
Numberofbids:
0
冰红茶
Postedby:
王.小
囤
Posted:
9/21/20138:
34:
7
Closes:
9/20013§:
34:
7Quantity:
15
Numberofbids:
0好喝
d•按startdate排序结果:
奶粉
Postedby:
光明」赵
Posted:
9/21/20138:
31:
28
Closes:
9/26/20138:
31:
28
Quantity:
1
Ni^mberofbids:
0
很棒儿童产品-2岁放心
洗衣粉
Postedby:
二,张
Posted:
9/21/20138:
32:
43
8:
32:
43
Closes:
9/26/2013
Quantity!
3
Numberofbids:
0
家庭
冰红茶
Postedby:
王」小
Posted:
9/21/20138:
34:
7
Closes:
9/28/20138:
34:
7
Quantity:
15
Numberofbids:
0好喝
e•按selleremail排序结果:
奶粉
Postedby:
光明,赵
Posted:
9/21/20138:
31:
28
Closes:
9/26/20138:
31:
28
Quantity:
1
Numberofbids:
0
很棒儿童产品1-2岁放心
洗衣粉_
Postedby:
三,张
Posted:
9/21/20138:
32:
43
Closes:
9/26/20138:
32:
43
Quantity:
3
Numberofbids:
0
冰红茶
Postedby:
王,小
rz-7iPosted:
9/21/20138:
34:
7
uCloses:
9/28/20138:
34:
7
Quantity:
15
Numberofbids:
0
g•按highestbid排序结果:
期粉
Postedby:
光明,赵
Posted:
9/21/20138:
31:
28
Closes:
9/26/20.138:
31:
28
Quantity-:
1
Numberofbids:
1
Highbid:
$3很棒儿童产品1边岁放心
洗衣粉_「
Postedby:
二,张
Posted:
9/21/20.138:
32:
43
Closes:
9/26/20138:
32:
43
Quantity-:
Numberofbids:
1
Highbid:
$3
家庭
冰红茶
Postedby:
王9小
Posted:
9/21/20138:
34:
7
Closes:
9/28/20138:
34:
7
Quantity:
15
Numberofbids:
2
Highbld:
$5
好喝
i.wingbid的测试结果:
itamcyicMuvuuiid
PlaceBid
seller:
123>qq,con3
pestdate:
9/21/20138:
32:
43finishdate:
9/2G/20138:
52:
43