数据结构课程设计网上拍卖系统.docx

上传人:b****2 文档编号:24361002 上传时间:2023-05-26 格式:DOCX 页数:21 大小:102.22KB
下载 相关 举报
数据结构课程设计网上拍卖系统.docx_第1页
第1页 / 共21页
数据结构课程设计网上拍卖系统.docx_第2页
第2页 / 共21页
数据结构课程设计网上拍卖系统.docx_第3页
第3页 / 共21页
数据结构课程设计网上拍卖系统.docx_第4页
第4页 / 共21页
数据结构课程设计网上拍卖系统.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

数据结构课程设计网上拍卖系统.docx

《数据结构课程设计网上拍卖系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计网上拍卖系统.docx(21页珍藏版)》请在冰豆网上搜索。

数据结构课程设计网上拍卖系统.docx

数据结构课程设计网上拍卖系统

数据结构课程设计一网上拍卖系统

数据结构课程设计

总结报告

专业软件工程

班级软件赴日1101

学号20112271

姓名贾志远

日期2013年9月17日

东北大学软件学院

第一章需求分析

1、实验要求:

设计一个网上拍卖系统,有些类的头文件和主函数已经给出,通过头文件中定义的部分和实验中的提示来编写类的代码,从而完成拍卖系统的全部功能。

实验共分五个部分,由浅入深逐渐完善,而且只有完成了前一部分实验,才能继续进行下一部分的实验内容。

2、问题分析:

根据实验要求,可知此网上拍卖系统大致包含以下几个部分:

注册、登陆、增加广告.添加子目录.显示商品列表、査找广告、广告排序.客户竞标。

由实验己给的部分代码来看,应该有以下几个部分:

广告(Advertisement)、广告集合(Listing)>目录(Category)目录集合(Categories)^标价(bid)、客户(Client).客户组(Group),系统应围绕这些部分的关系,编写各自的函数,从而完成拍卖系统的功能。

3、实验目的:

通过实验进一步了解线性表.堆栈.队列.串.数组、广义表、树、图以及一些排序算法等数据结构内容。

培养根据用户的要求及系统提供的数据,设计或选择合适的数据结构并能编写正确的算法解决实际问题的能力

第二章系统设计

1、总体设计

a•总体思路:

先写好系统的基本骨架:

Date、Client、Advertisement这三个类,完成系统的基本功能,然后根据系统的功能需求编写相应的类完成功能拓展。

具体的类间关系为:

Categories储存多个Category,Category通过Listing类储存这个目录下的Advertisement,Listing是Advertisement的集合,而Advertisement信息中包含多个Client对自己的竞标(bid),Client又可以对多个Advertisement进行竞标并发布Advertisement,Group是Client的集合,所以包含多个Client<,其他的是过程类,由main调用processrequest类,再由processrequest调用相应的buildbidpage.buildpage>bidhistory类将结果显示在页面中。

体现在UML类图中如图所示:

 

Listing

-objects:

veclor<*\dvertisement#>object卜addiin*plr:

Advertisement)

+sort

string):

Listing+filteriinkeyword:

stringi:

Listing

Category

-number:

int

-parent:

int-name:

string-sub_categories:

vectorobject-items:

veclorobject+findOfrerings()

+fiiK10fIeringsRecursiveO

Categorks

Sobjecls:

veclorobjecl+TOP.LEVEL:

staticconstint+NO_PARENT:

staticconstintfaddiin*plr:

Category)

Adverthement

-number:

int-quantity:

int

•title:

string-seller_email:

string

•body:

siring■start:

Dale

-close:

Date

•bids:

priorityqueued>Ob>xt

tgeffiidsO:

priority_queue&objecttgelTopDutchBidsi|:

virtualvectorobject

*1#

1

Client

・fname:

siring-lname:

string-email:

siring•passed:

string-offerings:

vectocobject•bids:

vectorobject

taddBid(initem:

inti

•addOffering(initem:

int>

fverifyPasswd(inpasswd:

string!

:

boo】

Date

-month:

int

1-day:

int-year:

int

•hour:

int

•minule:

int

・second:

int

•wperalo(二nin&rt)s:

Date):

bool

Bid

-email:

string

•amount:

float

-quantity:

int-date:

Date

foperator=(in&rhs:

B汕:

bool

b•基本的数据结构:

 

数据结构除了上述分析中所定义的类,还包括Stl中的优先权队列和Vector集合。

C.各类主要操作定义如下:

♦ClassDate:

>operator==(constDate&rhs){}

>operator«(ostream&os:

constDate&date){}

>operator»(istream&,Date&){}

>operator<(constDate&left){}

♦ClassAdvertisement:

>operator==(constDate&rhs){}

>operator»(istream&stream,

Advertisement&a){}

>virtualvectorgetTopDutchBids(void)const;

♦ClassClient:

>Client(constClient&a){}

>operator»(istream&stream,Client&c){}

♦ClassListing:

>add(Advertisement*ptr){}

>operator[](constint&number"}

>virtualListingsort(stringfield);

>virtualListingfilter(stringkeyword);

♦ClassGroup:

>Client*operator[](conststring&email){}

♦ClassCategory:

>virtualvoidaddSubCategory(Category*);

>virtualvoidaddltem(int);

>virtualvoidfindOfferings(Listing:

iteratorstart,

Listing:

iteratorfinish,Listing&matches);

>virtualvoidfindOfferingsRecursive(Listing:

iteratorstart,

Listing:

iteratorfinish,Listing

&matches);

>virtualbooloperator==(constCategory&rhs);

♦ClassBid:

>virtualbooloperator<(constBid&rhs)const;

>virtualbooloperator==(constBid&rhs)const;

♦Classbidhistory:

>VoiddisplayBidHiston(ostringstream&oss,

Advertisement*ad);

2v程序设计

系统的操作对应系统的功能,共有七种,分别是:

客户注册、登陆.添加广告、添加子目录、按关键字査找广告、对广告排序.竞标。

用户在使用系统之前需进行注册,然后登陆系统后可以按提示填写广告信息发布广告,或是对已有的广告点击bid按钮进行竞标。

用户可创建目录到toplevel或其子目录下,也可通过关键字査找广告或按广告的属性对广告进行排序查看。

具体操作过程如下:

if(day

{

returntrue;

}

elseif(day==rhs.getDay())

{

if(hour

{

returntrue;

}

elseif(hour==rhs.getHour())

{

if(minute

}

else

if(minute==rhs.getMinute())

if(second

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

展开阅读全文
相关搜索

当前位置:首页 > 农林牧渔

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1