1、数据结构课程设计网上拍卖系统数据结构课程设计一网上拍卖 系统数据结构课程设计总结报告专 业 软件工程班 级 软件赴日1101学 号 20112271 姓 名 贾志远 日 期 2013年9月17日东北大学软件学院第一章需求分析1、 实验要求:设计一个网上拍卖系统,有些类的头文件和主函数已经给出,通过头文件 中定义的部分和实验中的提示来编写类的代码,从而完成拍卖系统的全部功能。 实验共分五个部分,由浅入深逐渐完善,而且只有完成了前一部分实验,才能 继续进行下一部分的实验内容。2、 问题分析:根据实验要求,可知此网上拍卖系统大致包含以下几个部分:注册、登陆、 增加广告.添加子目录.显示商品列表、査找
2、广告、广告排序.客户竞标。由 实验己给的部分代码来看,应该有以下几个部分:广告(Advertisement)、广 告集合(Listing) 目录(Category)目录集合(Categories) 标价(bid)、客 户(Client).客户组(Group),系统应围绕这些部分的关系,编写各自的函数, 从而完成拍卖系统的功能。3、 实验目的:通过实验进一步了解线性表.堆栈.队列.串.数组、广义表、树、图以 及一些排序算法等数据结构内容。培养根据用户的要求及系统提供的数据,设 计或选择合适的数据结构并能编写正确的算法解决实际问题的能力第二章系统设计1、总体设计a总体思路:先写好系统的基本骨架:D
3、ate、Client、Advertisement这三个类,完成系 统的基本功能,然后根据系统的功能需求编写相应的类完成功能拓展。具体的类间关系为:Categories储存多个Category, Category通过Listing 类储存这个目录下的Advertisement, Listing是Advertisement的集合,而 Advertisement信息中包含多个Client对自己的竞标(bid), Client又可以对多 个Advertisement进行竞标并发布Advertisement, Group是Client的集合,所 以包含多个Client bidhistory 类将结果显示
4、 在页面中。体现在UML类图中如图所示:Listing-objects: veclor object 卜 addiin *plr: Advertisement)+sortin field: string): Listing +filteriin keyword: string i: ListingCategory-number: int-parent: int -name: string -sub_categories: vectorCategory object -items: veclor object +findOfrerings()+fiiK10fIeringsRecursiveOCa
5、tegorksSobjecls: veclorobjecl +TOP.LEVEL: static const int +NO_PARENT: static const int faddiin * plr: Category)Adverthement-number: int -quantity: inttitle: string -seller_email: stringbody: siring start: Dale-close: Datebids: priority queuedObxttgeffiidsO: priority_queue& object tgelTopDutchBidsi
6、|: virtual vector object* 1 # 1Client fname: siring -lname: string -email: siring passed: string -offerings: vectoc object bids: vector objecttaddBid(in item: intiaddOffering(in item: intf verify Passwd( in passwd: string!: boo】Date-month: int1 -day: int -year: inthour: intminule: int second: intwpe
7、ralo(二nin &rt)s: Date): boolBid-email: stringamount: float-quantity: int -date: Datefoperator=(in &rhs: B 汕:boolb基本的数据结构:数据结构除了上述分析中所定义的类,还包括Stl中的优先权队列和 Vector 集合。C.各类主要操作定义如下: Class Date:operator=(const Date &rhs) operator (ostream& os: const Date& date) operator(istream&, Date&)operatoroperator=(c
8、onst Date &rhs) operator(istream &stream,Advertisement &a)virtual vector getTopDutchBids (void) const;Class Client :Client (const Client &a) operator(istream &stream, Client &c)Class Listing:add(Advertisement*ptr) operator(const int& numbervirtual Listing sort(string field);virtual Listing filter(st
9、ring keyword);Class Group:Client *operator(const string& email)Class Category:virtual void addSubCategory(Category*);virtual void addltem(int);virtual void findOfferings (Listing: iterator start,Listing: iterator finish,Listing &matches);virtual void findOfferingsRecursive (Listing: iterator start,L
10、isting: iterator finish, Listing&m atches);virtual bool operator=(const Category& rhs);Class Bid:virtual bool operatorvirtual bool operator= (const Bid &rhs) const;Class bidhistory:Void displayBidHiston(ostringstream &oss,Advertisement* ad);2v程序设计系统的操作对应系统的功能,共有七种,分别是:客户注册、登陆.添加 广告、添加子目录、按关键字査找广告、对广
11、告排序.竞标。用户在使用系统 之前需进行注册,然后登陆系统后可以按提示填写广告信息发布广告,或是对 已有的广告点击bid按钮进行竞标。用户可创建目录到top level或其子目录下, 也可通过关键字査找广告或按广告的属性对广告进行排序查看。具体操作过程如下:if(dayrhs.getDay()return true;else if(day=rhs.getDay()if(hourrhs.getHour()return true;else if(hour=rhs.getHour()if(minuterhs.getMinute() return true;elseif(minute=rhs.getM
12、inute()if(secondrhs.getSecond()return true;return false;复杂度:0(1)b.Group类重载,返回有特定email地址的用户指针:算法:遍历objects集合,并判断集合中元素的email地址是否和传入的参 数相同,如果相同返回此Client指针,否则返回null。关键代码如下:Client* Group: operator (const string &email)for(int i=0;igetEmail()=email)return objects.at(i);return 0;复杂度:O(N)c.Advertisement类重载,
13、从输入中读入信息给Advertisement属性赋值: 算法:用getline函数和stream为advertisement属性赋值,为了保证能将空格和回车全部保留,用一个while循环一行读body并用“vbr”标签将结果 进行连接,直到读到空行为止。关键代码如下: istream &operate(istreain &stream, Advertisement &a)string str;Date dat;int qua;getline(stream,str);a.setTitle(str);streamstr;a.setEmail(str);streamqua;a.setQuantity
14、(qua); streamdat; a.setStart(dat); streamdat;a.setClose(dat); streamstr; a.setBody(str); return stream;复杂度:O(N)d. Category类的findOfferingsRecursive函数,用递归遍历子目录内容: 算法:递归调用 findOfferingsRecursive 和 findOfferings,先用 findOfferlngs 找到本层目录中满足条件的广告加入到matches中,然后再遍历子目录集合, 调用自身函数将子目录中满足条件的广告加入到matches中.关键代码如下:
15、 void Category:findOfferingsRecursive (Listin君:iterator starts Listing:iterator finish. Listing &matches)for(Listing: iterator is=start ;is! =finish ;is+) if(*is)-getNumber()=number)matches.add(*is); for(vector:iteratorss=sub_categ ories.begin();ss!=sub_categories.end() ;ss+)(ss)-findOfferingsRecurs
16、ive(start,finish,ma tches);复杂度:O(N) e. Listing类的sort函数,通过使用stl的sort函数实现对广告的排序功能。 算法:定义四个内部函数,再定义sort函数的排序逻辑,然后在sort函数 中,以函数指针作为参数传给so函数。关键代码如下:bool lessQuantity(Advertisement*aAdvertisement* b)return a-getQuantity() getQuantity();bool lessStart(Advertisement*a,Advertisement* b)return a-getStart() ge
17、tStart();bool lessClose(Advertisement*a,Advertisement* b)return a-getClose() getClose();bool lessEmail(Advertisement*aAdvertisement* b)return a-getEmail() getEmail();Listing Listing: sort (string field)Listing is(*this);if(field=nemailn)std:sort( is.begin() ,is.end(),lessEmail); if(field=1 Quantity
18、n)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); return is;复杂度:O(N)f. Listing类的Alter函数,通过使用stl的find函数实现对广告的査找功 能。算法:总体思想是在所有的广告集合中找到包含输入关键字的广告,然后 将之加入,从而显示满足条件的广告,最后返回这个列表。关键代码如下:
19、Listing Listing: filter (string keyword)Listing is;for(int i=0;igetTitle().find(keyword);string: size_type i2objects.at (i)-getBody ().find(key word);if (il != string:nposll i2 != string:npos)is.add(objects.at(i);return is;复杂度:O(N)g. Advertisement类的getTopDutchBids函数,用以获得竞标成功的bid集 合。算法:芬标成功的bids是指按价位
20、由高到低排,累积竞标的数量和大于等 于广告商品本省的数量时停止。因此,需用一个result变重用以统计bids的竞 标数量和,遍历广告本身己经排好序的bids集合,依次将bids内的bid出栈, 并将出栈的bid数量加到result中,知道result的值大于等于广告的quantity为 止,这时,一般情况会多加一个bid,也就是说多加的这个bid内的quantity 加上前面的bid的quantity值会大于广告本身的quantity,也就是鼠 这个bid 并不会得到它所要求的广告的数量,而是广告的quantity减去前面bid所有 quantity剩下的值。关键代码如下:vector Ad
21、vertisement: :getTopDutchBids (void) constvector vb;priority_queue bid(bids); int all=number;while( !bid.empty() & all0)vb.push_back(bid.top(); all-=bid.top().getQuantity(); bid.pop();return vb;复杂度:O(N)第四章系统测试测试方法:利用Apache运行程序,设置几组测试用例,分别考虑到一般情况和特殊情 况,观察测试结果的正确性。测试用例(应该给出几组具有不同特征的数据进行测试):Client名称数量内
22、容描述天数最终竞价竞标数量赵光明奶粉1很棒儿 童产品 1-2岁放心TopLevel5Y31张三洗衣 粉3家庭TopLevel/zhang531小王冰红 茶15好喝TopLevel/zhang / wang752测试结果:a.验证广告描述和题目读入空格和回车的结果iCarncgie Auctions|By clor* dsi- vFind jG&wgory: 9 “陀】| Tap Only |EcarxxtMb.按目录显示结果分二种情况:1. TopOnly:ioBy close date xzFindCategory:BidTop Only | | Re cursive奶粉Posted by:
23、光明,赵Posted: 9/21/2013 8:31:22Closes: 9/26/2013 8:31:28Quantity: 1Number of bids: 0 彳艮棒儿童产品1-2岁放心2. Recursive:巧 close dale v| Find ICategory: | 7cp Lcvc15 | Tof 0!:门Recursive妬粉Posted by:光耳赵Posted: 9/21/2013 8:31:28Closes: 9/26/2013 8:31:28Quantity; 1Nuirber of bids; 0 很棒儿童产品-2岁放心林粉Posted by:=,张Posted
24、: 9/21/2013 8:32:43Closes: 9/26/2013 8:32:43Quantity: 3Nunber of bids: 0 家庭 冰红茶Posted by:二,hPosted: 9/21/2013 8:34:7Closes: 9/22/2013 8:34:7Quantity: IBIimrber of bids: 0好喝c按close date排序结果:奶粉Posted by:光明,赵Posted: 9/21/2013 8:31:28Closes: 9/26/2013 8:31:28 Quantity: 1Number of bids: 0很棒儿童产品1-2岁歆心 洗衣粉
25、 _Posted by:三,张Posted: 9/21/2013 8:32:43Closes: 9/26/2013 8:32:43 Qu.ant i. ty: 3Number of bids: 0冰红茶Posted by:王.小囤Posted: 9/21/2013 8:34:7Closes: 9/20013 :34:7 Quantity: 15Number of bids: 0 好喝d按start date排序结果:奶粉Posted by:光明赵Posted: 9/21/2013 8:31:28Closes: 9/26/2013 8:31:28Quantity: 1Nimber of bids
26、: 0很棒儿童产品-2岁放心洗衣粉Posted by:二,张Posted: 9/21/2013 8:32:438:32:43Closes: 9/26/2013Quantity! 3Number of bids: 0家庭冰红茶Posted by:王小Posted: 9/21/2013 8:34:7Closes: 9/28/2013 8:34:7Quantity: 15Number of bids: 0 好喝e按seller email排序结果:奶粉Posted by:光明,赵Posted: 9/21/2013 8:31:28Closes: 9/26/2013 8:31:28Quantity: 1
27、Number of bids: 0很棒儿童产品1-2岁放心洗衣粉 _Posted by:三,张Posted: 9/21/2013 8:32:43Closes: 9/26/2013 8:32:43Quantity: 3Number of bids: 0冰红茶Posted by:王,小rz-7i Posted: 9/21/2013 8:34:7u Closes: 9/28/2013 8:34:7Quantity: 15Number of bids: 0g按highest bid排序结果:期粉Posted by:光明,赵Posted: 9/21/2013 8:31:28Closes: 9/26/20
28、.13 8:31:28Quantity-: 1Number of bids: 1High bid: $3 很棒儿童产品1边岁放心洗衣粉 _Posted by:二,张Posted: 9/21/20.13 8:32:43Closes: 9/26/2013 8:32:43Quantity-:Number of bids: 1High bid: $3家庭冰红茶Posted by:王9 小Posted: 9/21/2013 8:34:7Closes: 9/28/2013 8:34:7Quantity: 15Number of bids: 2High bld: $5好喝i.wingbid的测试结果:itamcyic MuvuuiidPlace Bidseller: 123qq, con 3pest date: 9/21/2013 8:32:43 finish date: 9/2G/2013 8:52:43
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1