还剩17页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
南京航空航天大学《数据结构》上机实验报告年第学期第次上机上机日期年月日班号学号姓名
(一)题目:提醒源代码请联微信xgwl8379327971获取购物网站信息管理(必做)(线性表)[问题描述]设计一个程序,对商铺信息管理,商铺信息包括商铺编号,商铺名,信誉度(R5),(商品名称1,价格1,销量1)(,商品名称2,价格2,销量2)(,商品名称3,价格3,销量3)・・・商品名称包括(毛巾,牙刷,牙膏,肥皂,洗发水,沐浴露等6种以上商品),每个商铺具有其中事先确定若干商品及价格,由文件输入,销量初始为Oo[基本要求]
(1)建立一个单向链表存储所有商铺信息(至少30个),以编号为序,编号从1开始递增,从文件中读取数据,并能将数据存储在文件商铺信息结点的数据结构自行设计
(2)可以增、删商铺增加商铺,编号自动加一,插入链表尾部;删除商铺,以编号为准,并修改后续结点的编号,保持编号连续性可增、删商品
(3)查询某一种商品名称,建立一个双向循环链表,结点信息是包含该商品的所有商铺编号、商铺名、信誉度、商品名称、价格、销量,以信誉度从高至低,并按销量排序,并逐一显示
(4)购买某一商铺的商品,修改单向链表中商品的信息的销量⑸建立一个顺序结构,按商品名Hash分配地址,存储当前每种商品总销量并输出
(6)任何的商铺信息变化,实现文件存储
(二)算法思想.增加商铺1定义指针,使其走到链表的尾部,进行插入结点即可P()Status ListInsert_L LinkList L,int numFILE*fp,*fpl;L.elem[num]=count;}return OK;Status DestroyList_SqSqList LfreeL.elem;L.elem=NULL;return OK;Status SaleCommoditySqListL请输入您想要查询销量的商品名称
1.towel
2.toothbrush
3.toothpaste
4.soap二()int iHash name,19;销量为return OK;}
(三)运行结果以及结果分析:增加商铺(原先有个商铺)
1.
30.增加商铺1除商铺
2.1K荏询商品
3.,购买陆砧
4.蕾曲商品用量5坦出
0.出愉人您的珞择1请雅人需要瑞E商铺的数量1增加商铺后所有商铺信息如下冏铺序号商铺名称商铺信用I A5商品匕称商品价格商品箱吊:t owel10商品名称商品价格商且用看toothbrush10商品称商品格格商品的Z toothpaste1fih0商品名仇商品价格一新品辆影soap0商幺除]商讨价格商侑琳S shampoo।1M0曲目幺称商品折格佃岛新后bodyrash10商使序2商修名称B商储信用,5阳商昌名towel商乩价格2商丛箱SL0程晶名toothbrush商晶价格20程商用名toothpaste商品价格2商品的量0soap商品价格2新品辆量0shanpoo商品价格2商品钠早0bodywash精品价格2商品新阳商晶名母0根商晶名限品觞锚序号新铺名称商铺信用x3C5油品名称]向品价格曲总箱量,商品丫工:“商品价格商品名卡眄晶祢商品价格%品钠晶冏品名towei30।toothpaste280Z sodp280j球育豆价格商品梢景,品名称商品价格商品死嫡shampoo।280bodyvash280他铺序小面铺林商铺信用29Z C11国品名依商品价格商品梢j towel29lb0四岛/祢信防价格的品销吊:商砧幺祢商后母品曲品的toothbmsh290x toothpaste29E0网品名依商价格新品销量球品幺除品务格前而后此从名称*确砧价格确从伯j soapfii290shampoo ti290bodywash r29th0麻铺序号曲铺名称商铺信用30D11网品名称商价格商品俯:towel M30♦0用品名祢商丛价格同丛俯呈网品名称商乱价格商品销靖声品名称商船价格商品铜闻■toothbrush x30J0toothpaste300soap300血幺祢育品价格血shampoo30MfflR0风总名你商品彳介修商品保区bodywash3010油铺序号商铺名称商铺信用31E10时品幺称商品价格商品箱俄towel310苗标商价格商怖品名称曲旦价格标精展阿品商品价格;曲品钠吊I gtoothbrush31Hm0toothpaste31a0Z:soap310商品名珠商价格品的国商品幺称]曲福价版的砧笛%shampoo Hi31iQj0bodywash
310.删除商铺2MA Z%初铺Mjaszg商而商商商加加除询买询出炯增的唐退请输入您的选择2请触入与想要副除商铺的编号I“除商铺后所有商辅信息如卜商铺序号商钝名称】商铺信用1B5初品名称商品价格商品销to”l20商品幺祢新*价格*商砧辆量商用为祢商价格?商品晒盘商品名称toothbrush20toothpaste B20两乩价格爵必帕依商名称而从价格,商乩销敏商品名称商丛soap20M shanpoo20bodywash价格商用倘母20商铺序号商铺名称商铺信用2C5商品幺徐商品价格:商区销俄towel330商品幺铢:商乱价格商品第商(名踪商品价格两必钠量:画品幺toothbrush3fit0i toothpaste30称稿品价格商品销量曲品名称商品价格商品销家商幺称soap30shampoo i30H bodywash同乩椅格商品的K3Q0商铺序号商铺名称商铺信用3D5商晶与的•称几位!;匕一心悄*t J4M♦_q____株;荔加尚嘉伊格;丁商砧括量;崩扁幺称商扃价格商跄销食船名称]0toothpaste28jflL0商品价格烈品的片角砧名祢】新乩价格新乩伴量*泰>名称soap280shanpoo28I0bodyrash商品价格商品精里280商铺序号,初铺名称商辅信用28C1I商品名构商丛价格前品销A tgel29fh0商品价格悬船幺祢商船价格曲必俯屈商乂名称,■A Kft:toothbrush29MAMft:0toothpaste290soap商丛价格商用的量育超幺称商分格商血馅依商品幺京高晶价格290shampoo290bodyvash新品桶吊290生29商铺名林D1商铺信用1序制新晶价格商晶销商品价格商品钠展商用价格towel30Sh0toothbrush300toothpaste品名粗商品的最商品价格商品钠面品价格商配>销量300soap30U0shampoo300bodyvash制俑品价格病品由家300陶品新铺名称]曲铺信用商品价格商品销量同品价格商品名30E10torel310toothbrush x31销沛工问价格曲砧钠早商品价格商品销量前0toothpaste Ax310soap310shampoo品价格]商品怕信:问价格商从销风?310bodyrash t310铺序号品名称品名林查询商品
3.丛名称品称品名称品名称C1MHlillpnnAnumaZgggz»:»:tfMnt地加新铺L除商铺
2.IH.商谢商3M.利买育品4盘询商精量
5.M,退出0箱「入您的选作I3否输入您要件找的商品名称
1.tore
12.toothbrush
3.toothpaste
4.soap
5.shaapoo
6.bodynshowel能所查找的商砧信息如,F序号:商船名称商铺信用商品H・1B5towel商品名称:价格商船伯什20埼铺序号:商品名称商铺信用新品2C5towel品名称:价格商品傍*W30曲铺序号:商品名林前悔信用佛品3D5towel用品名称:价格商砧俏*:40商品称商铺信用商品48E5towel价格商晶俏敢50崎铺序号:5商品名称F商铺信用5稻品名林商品价格商品铺最tovel60fk铺Fp号•21||«品名M:V而铺信用•2h品名称】towel商品宿格:22商品褚口fii情序号,22商品Z称I towel商铺信用2殖心名称:丽晶价格:商品销量2323商船名称X商铺信用2而砧价格:towel商乩怕量:24楠序号:24商品名称Y品名称:towel商价格:H芹甘25商品名称Z商情信用126品名南商品价格:商品销towel SL商铺序号商品名称26A1用品名称[gel商品价格:商铺信用1商用销量:27糖27商品Z称]B1商辅信用1商品价格:towel商品销《28h舞;商铺序号,28款品名称C1前铺信用,1而品称,而岳价格:Z towel商品销量29序小商船名称‘hM29D1商品销品名称?商价格30fihD tsel8T商楠信用:0商丛销员:31序号名称丛名由商丛价格:hM30aAA E13towel购买商品
4.本系统可实现以功能2^**M*#******^*0**F加商L・fit制除商铺2,.杏询商品3,购买陆片4•查询商品精量5,退出0请输入罐的选择,4请输入你想购物商店的序号(「30):1谙输入与期购买的幅品名称lovol
2.toothbrush
3.toothpaste
4.soap
5.shaapoo
6.bodyvash toothbrush恭喜您!购买成功!按任意槌返回!查询商品销量
5.廿本系统可实现以力傅**♦F J♦».**“M».”a**增加新倚L,制除商铺2•吉询初品3,购买新丛4西询商品价殳
5..退出0卜输入您的选择(S情输入您想要专曲的曲仁林m82L tcxel
2.toothbrush
3.toothpaste
4.soap
5.shaapoo
6.bodywash tovel「销为owel St:0依任意惯返WH
(四)小结:这一题综合考察了线性表-顺序表、单向链表、双向循环链表在做完这题后,说真的有点升华的感觉,我不仅对线性表的种种操作变得更加熟练,而且懂得了对变化数据进行实时存储与读取其实这题最难的一个步骤就是对变化数据的掌控,因为在增加、删除、购买商品时都会导致数据发生变化,如果各个线性表无法进行数据对接,那这题是无法做成功的第页(共页)1515whilenum-LinkList p=L;int j=0;whilepjListLength_LLp=p-next;j++;LinkList S;MallocList_LS;S-shop.num=ListLength_LL+1;=for0;j6;j++opmodity[j].sale;p-next=S;S-next=NULL;二p L-next;whilep=for0;j6;j++%d;e二p p-next;}}fclosefp;fclosefpl;return OK;删除商铺
2.与单向链表的删除一样,删除节点,如果被删除结点后面还有结点,则进行左移StatusListDelete_LLinkList L,int iLinkList p,q;二p L;int j=0;whilepji-lp=p-next;j++;}if!p-next returnERROR;q=p-next;p-next=q-next;freeq;二P L;forj=0;jListLength_LL;j++p=p-next;p-shop.num=j+1;p=L-next;FILE*fp;whilep=for0;j6;j++%d%d;ep=p-next;}fclosefp;return OK;查询商品
3.对存有商品的双向循环链表进行排序操作,在按商铺信用从高到低的前提下,按照查询该商品销量从高到低进行排序然后挨次输出每一个结点即可Status SortList_DLDuLinkList L,int n{intij;Shop el,e2;int length=ListLength_DLL;DuLinkList p;fori=0;ilength-1;i++{二p L-next;forj=0;jlength-1-i;j++{el=p-Dshop;e2=p-next-Dshop;if el.credite
2.credit{p-Dshop=e2;p-next-Dshop=el;}=二ifel.credit e
2.creditifelmodity[n].salee2modity[n].salep-Dshop=e2;p-next-Dshop=el;p=p-next;}}Status FindCommodityDuLinkListDLint n,num;whilel{请输入您要查找的商品名称
1.towel
2.toothbrush
3.toothpaste
4.soapnum=Hashname,19;ifnum==5||num==10||num==14||num==12||num==13||num==4break;else没有此商品,请重新输入!continue;}switchnumcase5:n=0;break;case10:n=1;break;case14:n=2;break;case12:n=3;break;case13:n=4;break;case4:n=5;break;}SortList_DLDL,n;您所查找的商品信息如下TListTraverse_DLDL,n,TVisit_DL;return OK;购买商品
4.输入要购买的商店(即找到对应结点),购买需要购买的物品,修改该结点的值域(即修改该物品销量Status BuyCommodityLinkListL int num,n,j;请输入您想购物商店的序号l-%dLinkList p=L;whilel L=L-next;ifL-shop.num==num break;whilel请输入您想购买的商品名称
1.towel
2.toothbrush
3.toothpaste
4.soapnum=Hashname,19;ifnum==5||num==10||num==14||num==12||num==13||num==4break;else没有此商品,请重新输入!continue;switchnumcase5:n=O;break;case10:n=1;break;case14:n=2;break;case12:n=3;break;case13:n=4;break;case4:n=5;break;L-shopmodity[n].sale++;FILE*fp;L=p-next;whileL!=NULLforj=0;j6;j++%d%d;eL=L-next;fclosefp;恭喜您!购买成功!查询商品销量
5.将每种商品销量存入顺序表中,依据哈希表分配地址,哈希表根据每种商品的名称码作ASCII modl9为关键字构造哈希表输入商品名称,输出对应顺序表结点的值即可Status InitList_SqSqList L,LinkListL1L.elem=int*mallocLIST_INIT_SIZE*sizeofint;if!L.elem exitOVERFLOW;L.length=0;L.listsize=LIST_INIT_SIZE;int i,j,count;intn=ListLength_LL1;LinkList p;fori=0;i6;i++{count=0;p=Ll-next;forj=0;jn;j++{+二count p-shopmodity[i].sale;p=p-next;}二switchi intnum Hashname,19;。