數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告超市商品管理樣本_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告超市商品管理樣本_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告超市商品管理樣本_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告超市商品管理樣本_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告超市商品管理樣本_第5頁(yè)
已閱讀5頁(yè),還剩56頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1.需求分析在某個(gè)大型生活服務(wù)區(qū)內(nèi),有三個(gè)超市,每個(gè)超市中商品涉及:商品號(hào),商品名稱,商品價(jià)格,庫(kù)存數(shù)量,每種商品總數(shù),生產(chǎn)日期等基本信息,假設(shè)三個(gè)超市商品信息分別是用單鏈L1,L2,L3取存儲(chǔ),請(qǐng)寫一種程序?qū)崿F(xiàn)下列任務(wù)規(guī)定:知識(shí)點(diǎn):線性表操作【任務(wù)規(guī)定】當(dāng)超市有新商品購(gòu)入是能添加到單鏈表中;能查找出三個(gè)超市中具備相似商品名稱商品信息;在超市商品信息L1中刪除那些與其她兩個(gè)超市均有商品信息;能修改各超市商品基本信息,如價(jià)格等。能查找比較超市中相似商品銷售狀況,能記錄每個(gè)超市中每種商品銷售量及銷售額。能輸出每個(gè)超市所有商品信息;【測(cè)試數(shù)據(jù)】自行設(shè)定,注意測(cè)試將活區(qū)刪空等特殊狀況。2.概要設(shè)計(jì)2.1必要算法1.當(dāng)超市有新商品購(gòu)入是添加到單鏈表中算法概要:運(yùn)用單鏈表基本操作——插入一種新結(jié)點(diǎn),即分派一種新儲(chǔ)存空間,然后依次輸入結(jié)點(diǎn)所含數(shù)據(jù),再插入到原結(jié)點(diǎn)尾部即可。此算法時(shí)間復(fù)雜度為O(1)。2.查找出三個(gè)超市中具備相似商品名稱商品信息算法概要:1.尋找相似商品名稱算法:先比較前兩個(gè)鏈表(超市)l1,l2,運(yùn)用比較字符串strcmp()辦法找出兩個(gè)鏈表中具有相似商品名稱,然后將兩個(gè)鏈表中具備相似商品名稱商品信息存儲(chǔ)到新建鏈表fs中,再比較鏈表fs和l3,重復(fù)上述環(huán)節(jié),找出鏈表l1,l2,l3中都具備相似商品名稱商品,將其商品信息存儲(chǔ)在鏈表fs中。此算法時(shí)間復(fù)雜度為O(n)。2.輸出相似商品商品信息:訪問(wèn)fs中每個(gè)結(jié)點(diǎn)中商品名稱,依照商品名稱分別遍歷原鏈表l1,l2,l3商品信息找出原結(jié)點(diǎn),然后將其信息輸出。此算法時(shí)間復(fù)雜度為O(n)。3.在超市商品信息L1中刪除那些與其她兩個(gè)超市均有商品信息算法概要:一方面運(yùn)用上述尋找相似商品名稱算法,找出l1中那些與其她兩個(gè)超市均有商品名稱,再依照其名稱遍歷鏈表l1,找出其結(jié)點(diǎn)刪除并釋放——單鏈表基本操作。此算法時(shí)間復(fù)雜度為O(n)。4修改各超市商品基本信息,如價(jià)格等算法概要:一方面交互輸入需要修改信息商品號(hào),排除超市中沒(méi)有商品后,定位到改商品結(jié)點(diǎn),然后選取需要修改信息,例如價(jià)格,庫(kù)存數(shù)量等,或者所有修改即可修改信息。此算法時(shí)間復(fù)雜度為O(1)。5.查找比較超市中相似商品銷售狀況,記錄每個(gè)超市中每種商品銷售量及銷售額。算法概要:一方面通過(guò)尋找相似商品名稱算法找出相似商品,若沒(méi)有相似商品,則返回,若有(各種)相似商品,通過(guò)交互輸入商品號(hào)分別定位到3個(gè)鏈表中相應(yīng)結(jié)點(diǎn)然后輸出其銷售信息,涉及銷售量和銷售額,記錄每個(gè)超市中每種商品銷售量及銷售額是在輸出程序中一并輸出。此算法時(shí)間復(fù)雜度為O(n)。6.輸出每個(gè)超市所有商品信息算法概要:遍歷3個(gè)鏈表所有結(jié)點(diǎn),然后分別輸出每個(gè)結(jié)點(diǎn)所有信息。此算法時(shí)間復(fù)雜度為O(n)。2.2輔助程序1.單鏈表存儲(chǔ)構(gòu)造:為3個(gè)超市分別創(chuàng)立單鏈表,鏈表中每個(gè)結(jié)點(diǎn)具有7個(gè)數(shù)據(jù),分別是:整型商品號(hào),字符數(shù)組型商品名稱,整型庫(kù)存數(shù)量,整型商品總數(shù),整型生產(chǎn)日期,整型銷售數(shù)量。尚有一種next指針。2.超市商品信息初始化:在每個(gè)鏈表當(dāng)中交互輸入每個(gè)結(jié)點(diǎn)所有信息作為超市商品信息初始化。3.銷售算法:銷售算法為了以便記錄銷售信息而存在,實(shí)現(xiàn)思路是:輸入賣出商品編號(hào)定位到鏈表中相應(yīng)結(jié)點(diǎn),然后輸入銷售數(shù)量保存但結(jié)點(diǎn)中,同步該結(jié)點(diǎn)庫(kù)存數(shù)量相應(yīng)地減少。此算法時(shí)間復(fù)雜度為O(1)。2.3主程序主程序概要:主程序中一方面創(chuàng)立3個(gè)鏈表然后初始化,再輸出所需操作信息供選取,通過(guò)交互式輸入選取所要進(jìn)行操作,直到輸入退出程序按鈕。詳細(xì)設(shè)計(jì)3.1必要算法1.當(dāng)超市有新商品購(gòu)入時(shí)添加到單鏈表中l(wèi)inklist*purchase(linklist*l,ints)//超市有新商品購(gòu)入是添加到單鏈表中{ linklist*p,*q,*r,*head; intn; head=l; r=l; p=l->next; //輸入購(gòu)入商品基本信息 q=(linklist*)malloc(sizeof(linklist)); printf("請(qǐng)依次輸入超市%d本次購(gòu)入新商品商品號(hào)、商品名稱、(出售)價(jià)格、購(gòu)入量、生產(chǎn)日期:\n",s); scanf("%d",&q->gno); scanf("%s",&q->name); scanf("%f",&q->price); scanf("%d",&q->amount); scanf("%d",&q->date); q->QuantityInStock=q->amount; q->sold=0; printf("購(gòu)入成功!\n"); //將新結(jié)點(diǎn)插入到表尾 q->next=NULL; while(p!=NULL){ r=p; p=p->next; } r->next=q; r=r->next; returnhead;}2.查找出三個(gè)超市中具備相似商品名稱商品信息算法1:尋找3個(gè)鏈表中具備相似商品名稱商品linklist*findSame(linklist*l1,linklist*l2,linklist*l3)//尋找3個(gè)鏈表中具備相似商品名稱商品{ linklist*p1=l1->next,*p2,*p3,*fs,*q,*p; fs=(linklist*)malloc(sizeof(linklist));//分派一種新存儲(chǔ)空間用來(lái)保存相似商品信息 fs->next=NULL; q=fs; intflag; //尋找l1,l2中具備相似商品名稱商品 while(p1){ p2=l2->next; while(p2){ flag=strcmp(p1->name,p2->name); if(flag==0){ p=(linklist*)malloc(sizeof(linklist)); strcpy(p->name,p1->name); p->next=NULL; q->next=p; q=q->next; } p2=p2->next; } p1=p1->next; } //尋找l2,l3中具備相似商品名稱商品 p=fs; while(p->next){ p3=l3; while(p3->next){ flag=strcmp(p->next->name,p3->next->name); if(flag==0)break; if(p3->next==NULL){ q=p->next; p->next=q->next; } p3=p3->next; } p=p->next; } returnfs;}算法2:輸出3個(gè)鏈表中具備相似商品名稱商品信息voidoutputSame(linklist*l1,linklist*l2,linklist*l3)//輸出3個(gè)鏈表中具備相似商品名稱商品信息{ linklist*p1=l1->next,*p2=l2->next,*p3=l3->next,*fs,*p; intflag; fs=findSame(l1,l2,l3); p=fs->next; printf("************************************3個(gè)超市中具備相似名稱商品信息***********************************\n"); while(p){ //遍歷鏈表l1 while(p1){ flag=strcmp(p1->name,p->name); if(flag==0){ printf("商品號(hào)\t商品名稱\t商品價(jià)格\t庫(kù)存數(shù)量\t商品總數(shù)\t售出數(shù)量\t生產(chǎn)日期\n"); printf("超市1:%d\t%s\t\t%5.2f\t\t%d\t\t%d\t\t%d\t\t%d\n", p1->gno,p1->name,p1->price,p1->QuantityInStock,p1->amount,p1->amount-p1->QuantityInStock,p1->date); } p1=p1->next; } //遍歷鏈表l2 while(p2){ flag=strcmp(p2->name,p->name); if(flag==0){ printf("超市2:%d\t%s\t\t%5.2f\t\t%d\t\t%d\t\t%d\t\t%d\n", p2->gno,p2->name,p2->price,p2->QuantityInStock,p2->amount,p2->amount-p2->QuantityInStock,p2->date); } p2=p2->next; } //遍歷鏈表l3 while(p3){ flag=strcmp(p3->name,p->name); if(flag==0){ printf("超市3:%d\t%s\t\t%5.2f\t\t%d\t\t%d\t\t%d\t\t%d\n", p3->gno,p3->name,p3->price,p3->QuantityInStock,p3->amount,p3->amount-p3->QuantityInStock,p3->date); } p3=p3->next; } p=p->next; } }3.在超市商品信息L1中刪除那些與其她兩個(gè)超市均有商品信息voiddelSame(linklist*l1,linklist*l2,linklist*l3)//L1中刪除那些與其她兩個(gè)超市均有商品信息{ intflag; linklist*p,*s,*q,*fs; fs=findSame(l1,l2,l3); p=fs; while(p->next){ q=l1; while(q->next){ flag=strcmp(q->next->name,p->next->name); if(flag==0){ s=q->next; q->next=s->next; free(s); printf("\n成功刪除超市1中與其她兩個(gè)超市均有商品信息!"); return; } q=q->next; } p=p->next; }}4.能修改各超市商品基本信息,如價(jià)格等voidupdate(linklist*l)//修改商品信息{linklist*p=l,*q=l,*s=l->next;intgno,m,price,QuantityInStock,amount,date,n=0,location=0,flag=0;if(l==NULL){//鏈表為空printf("鏈表為空!\n");return;}printf("請(qǐng)輸入需要修改價(jià)格商品號(hào):");scanf("%d",&gno); while(s){ if(s->gno==gno){ flag=1; } s=s->next; } if(!flag){//找不到此商品 printf("沒(méi)有此商品!\n"); return; } while(q->gno!=gno){ location++; q=q->next; } printf("請(qǐng)選取需要修改商品信息:\n"); printf("1.商品價(jià)格2.庫(kù)存數(shù)量3.商品總數(shù)4.生產(chǎn)日期5.所有修改\n"); //選取需要修改信息 scanf("%d",&m); switch(m){ case1: printf("請(qǐng)輸入新價(jià)格:"); scanf("%d",&price); while(p){ if(location==n){ p->price=price; return; } else{ p=p->next; n++; } } break; case2: printf("請(qǐng)輸入新庫(kù)存數(shù)量:"); scanf("%d",&QuantityInStock); while(p){ if(location==n){ p->QuantityInStock=QuantityInStock; return; } else{ p=p->next; n++; } } break; case3: printf("請(qǐng)輸入新商品總數(shù):"); scanf("%d",&amount); while(p){ if(location==n){ p->amount=amount; return; } else{ p=p->next; n++; } } break; case4: printf("請(qǐng)輸入新生產(chǎn)日期:"); scanf("%d",&date); while(p){ if(location==n){ p->date=date; return; } else{ p=p->next; n++; } } break; case5: printf("請(qǐng)輸入新價(jià)格:"); scanf("%d",&price); printf("請(qǐng)輸入新庫(kù)存數(shù)量:"); scanf("%d",&QuantityInStock); printf("請(qǐng)輸入新生產(chǎn)日期:"); scanf("%d",&date); printf("請(qǐng)輸入新商品總數(shù):"); scanf("%d",&date); while(p){ if(location==n){ p->price=price; p->QuantityInStock=QuantityInStock; p->amount=amount; p->date=date; return; } else{ p=p->next; n++; } } break; }}5.查找比較超市中相似商品銷售狀況voidsoldInformation(linklist*l1,linklist*l2,linklist*l3)//查找比較超市中相似商品銷售狀況{ linklist*q1=l1,*p1=l1,*q2=l2,*p2=l2,*q3=l3,*p3=l3,*s;intgno,n1=0,location1=0,n2=0,location2=0,n3=0,location3=0;s=findSame(l1,l2,l3);if(s->next==NULL){ printf("3個(gè)超市沒(méi)有相似商品!"); return; }printf("請(qǐng)輸入需要查詢銷售信息商品號(hào):");scanf("%d",&gno);while(q1->gno!=gno){ location1++; q1=q1->next; } //遍歷l1 while(p1){if(location1==n1){while(q2->gno!=gno){ location2++; q2=q2->next; } //遍歷l2 while(p2){ if(location2==n2){ while(q3->gno!=gno){ location3++; q3=q3->next; } //遍歷l3 while(p3){ if(location3==n3){ printf("************商品%s銷售信息**************\n",q1->name); printf("\t商品\t銷售量\t銷售額\n"); printf("\t超市1:%s\t%d\t%5.0f\n",q1->name,q1->sold,q1->sold*q1->price); printf("\t超市2:%s\t%d\t%5.0f\n",q2->name,q2->sold,q2->sold*q2->price); printf("\t超市3:%s\t%d\t%5.0f\n",q3->name,q2->sold,q3->sold*q3->price); return; } else{ p3=p3->next; n3++; } } if(!p3){ printf("沒(méi)有此商品!"); return; } } else{ p2=p2->next; n2++; } } if(!p2){ printf("沒(méi)有此商品!"); return; }}else{p1=p1->next;n1++;}}if(!p1){ printf("沒(méi)有此商品!"); return; }}6.輸出每個(gè)超市所有商品信息(涉及銷售量、銷售額)voidoutput(linklist*l)//輸出每個(gè)超市所有商品信息(涉及銷售量、銷售額){linklist*p; p=l->next; printf("*********************************************商品信息輸出***************************************************\n"); printf("商品號(hào)\t商品名稱\t商品價(jià)格\t庫(kù)存數(shù)量\t商品總數(shù)\t銷售量\t銷售額\t生產(chǎn)日期\n"); while(p){ printf("%d\t%s\t\t%5.2f\t\t%d\t\t%d\t\t%d\t%5.2f\t%d\n", p->gno,p->name,p->price,p->QuantityInStock,p->amount,p->sold,p->sold*p->price,p->date); p=p->next; }}4.調(diào)試分析 4.1初始數(shù)據(jù)圖1調(diào)試過(guò)程分析:直接分別按順序輸入每個(gè)超市每個(gè)商品商品號(hào)、商品名稱、商品價(jià)格、庫(kù)存數(shù)量、生產(chǎn)日期即可存在問(wèn)題:在這里遇到問(wèn)題在于輸入數(shù)據(jù)時(shí)候非常繁瑣,一不小心輸入錯(cuò)誤就要重新運(yùn)營(yíng)程序重新輸入,并且一下子輸入商品所有信息容易浮現(xiàn)類型錯(cuò)誤或者不能相應(yīng)上相應(yīng)信息。改進(jìn)設(shè)想:本來(lái)想改成一次輸入一種數(shù)據(jù),但是這樣在初始化數(shù)據(jù)時(shí)會(huì)有很長(zhǎng)一段程序,于與否決了這個(gè)想法。4.2各模塊測(cè)試1.當(dāng)超市有新商品購(gòu)入時(shí)添加到單鏈表中圖2圖3調(diào)試過(guò)程分析:當(dāng)有新商品購(gòu)入時(shí),如圖2所示,對(duì)超市1進(jìn)行操作,依次輸入其信息并保存在鏈表末尾,再顯示超市1中所有商品信息,如圖3所示,新購(gòu)入商品已添加進(jìn)超市1中。存在問(wèn)題:這里所說(shuō)問(wèn)題是背面所有調(diào)試程序中都存在問(wèn)題,就是每次操作中都所有操作選項(xiàng)都會(huì)浮現(xiàn),這樣會(huì)占用大量位置,顧客體驗(yàn)不佳。改進(jìn)設(shè)想:在主程序中選取需要操作時(shí)不帶上操作選項(xiàng),操作選項(xiàng)僅在第一次浮現(xiàn)。2.查找出三個(gè)超市中具備相似商品名稱商品信息圖4調(diào)試過(guò)程分析:依照初始數(shù)據(jù),3個(gè)超市中具備相似商品名稱是a,因而如圖4所示,分別顯示了3個(gè)超市名為a商品商品信息。存在問(wèn)題:無(wú)改進(jìn)設(shè)想:無(wú)3.在超市商品信息L1中刪除那些與其她兩個(gè)超市均有商品信息調(diào)試過(guò)程分析:選取刪除l1中那些與其她兩個(gè)超市均有商品信息選項(xiàng),即可完畢操作,如圖5,這里l1中已刪除商品a。圖5存在問(wèn)題:無(wú)改進(jìn)設(shè)想:無(wú)4.修改各超市商品基本信息,如價(jià)格等。圖6調(diào)試過(guò)程分析:如圖6,在超市1中修改商品號(hào)為2商品信息,在這里僅修改價(jià)格,再顯示超市1中商品信息,可見(jiàn)2號(hào)商品價(jià)格已經(jīng)變化。存在問(wèn)題:這個(gè)算法非常冗長(zhǎng),每一種修改信息都占據(jù)幾行代碼。改進(jìn)設(shè)想:構(gòu)建一種函數(shù)專門用于修改一種信息,這樣每次修改信息之需調(diào)用該函數(shù)即可,但是暫時(shí)未能實(shí)現(xiàn)此想法。5查找比較超市中相似商品銷售狀況圖7圖8圖9圖10調(diào)試過(guò)程分析:一方面需要對(duì)每個(gè)超市進(jìn)行售出操作,圖7,8,9分別是對(duì)超市1,2,3進(jìn)行售出,售出是商品號(hào)為1,即商品a。再顯示每個(gè)超市中商品a銷售量和銷售信息,如圖10所示。存在問(wèn)題:輸出需要查詢銷售信息商品號(hào)時(shí)并不懂得有哪些商品是3個(gè)超市均有,一旦有許多商品時(shí)容易混亂。改進(jìn)設(shè)想:在此算法中插入輸出3個(gè)超市具備相似商品商品信息算法即可解決,但考慮到這里所測(cè)試信息量少,沒(méi)有插入必要。6輸出每個(gè)超市所有商品信息,記錄每個(gè)超市中每種商品銷售量及銷售額。圖11調(diào)試過(guò)程分析:對(duì)超市1進(jìn)行操作,選取輸出所有商品信息選項(xiàng),即可顯示所有商品信息,涉及銷售量和銷售額。存在問(wèn)題:無(wú)改進(jìn)設(shè)想:無(wú)5.總結(jié)5.1課程設(shè)計(jì)過(guò)程收獲當(dāng)我決定選取超市商品解決這個(gè)題目時(shí),一開(kāi)始想運(yùn)用3個(gè)鏈表及指針來(lái)完畢,但是在慢慢揣摩之后,覺(jué)得完全可以用一種鏈表即可,只要3個(gè)超市在初始化商品時(shí)調(diào)用一種函數(shù)即可。尚有就是主程序中用了諸多循環(huán),因而對(duì)于循環(huán)控制要十分小心,糾結(jié)了好久用while還是do—while,最后選取用while,由于邏輯簡(jiǎn)樸,固然缺陷就是每次都會(huì)浮現(xiàn)所有操作選項(xiàng),顯得冗長(zhǎng)繁瑣。這次程序?qū)嵲O(shè)計(jì)實(shí)驗(yàn)是對(duì)咱們進(jìn)入大學(xué)以來(lái)學(xué)習(xí)程序設(shè)計(jì)語(yǔ)言成果一次大檢查。自己動(dòng)手,自己發(fā)現(xiàn)和解決問(wèn)題。發(fā)現(xiàn)了自己許多局限性。平時(shí)沒(méi)有掌握好知識(shí)在這次實(shí)驗(yàn)中徹底暴露出來(lái),最重要就是單鏈表頭結(jié)點(diǎn)和尾結(jié)點(diǎn)鑒定,通過(guò)不斷思考,不斷查閱資料和上機(jī)運(yùn)營(yíng),解決其中大某些問(wèn)題,固然還存在某些問(wèn)題沒(méi)有解決。我相信在后來(lái)學(xué)習(xí)可以解決好它們??倎?lái)說(shuō),收獲還是不小,我不但對(duì)C語(yǔ)言操作有了進(jìn)一步掌握,還理解到了程序設(shè)計(jì)書寫風(fēng)格及其注釋格式,可以說(shuō),這是我第一次為程序?qū)懽⑨尅?.2程序調(diào)試能力思考在程序調(diào)試方面,這次課程設(shè)計(jì)中,我最重要是感悟到了一種調(diào)試程序辦法,就是逐行分析,原理很簡(jiǎn)樸,在浮現(xiàn)錯(cuò)誤函數(shù)中插入一種printf語(yǔ)句,從頭開(kāi)始,一行一行或者在每個(gè)循環(huán)中插入printf語(yǔ)句,如果printf語(yǔ)句信息沒(méi)有顯示,闡明此循環(huán)浮現(xiàn)問(wèn)題了,并且在這個(gè)課題中,編譯時(shí)錯(cuò)誤解決不難,難是邏輯上錯(cuò)誤,在這里程序調(diào)試最大問(wèn)題就是不懂得問(wèn)題出在哪里了,因此這不失為一種好辦法。5.3對(duì)數(shù)據(jù)構(gòu)造課程結(jié)識(shí)與思考這個(gè)學(xué)期數(shù)據(jù)構(gòu)造重要學(xué)習(xí)了,線性構(gòu)造(涉及棧和隊(duì)列)、樹(shù)形構(gòu)造、圖狀構(gòu)造。線性構(gòu)造涉及順序表、鏈表、棧、隊(duì)列等,棧和隊(duì)列是操作受限線性表,表中數(shù)據(jù)元素自身也是一種數(shù)據(jù)構(gòu)造。除了線性表以外,棧是重點(diǎn),由于棧和遞歸緊密相連,遞歸是程序設(shè)計(jì)中很重要一種工具。樹(shù)狀構(gòu)造中重點(diǎn)自然是二叉樹(shù)和哈弗曼樹(shù)了。對(duì)于二叉樹(shù)諸多操作都是基于對(duì)二叉樹(shù)遍歷,掌握了如何遍歷,諸多問(wèn)題也就迎刃而解了,例如對(duì)二叉樹(shù)結(jié)點(diǎn)查找訪問(wèn)、記錄二叉樹(shù)中葉子結(jié)點(diǎn)數(shù)目、求二叉樹(shù)深度等。哈弗曼編碼也有著很廣泛應(yīng)用。對(duì)于圖狀構(gòu)造,重要學(xué)習(xí)圖存儲(chǔ)構(gòu)造及圖遍歷。要學(xué)好數(shù)據(jù)構(gòu)造,最重要就是要注重對(duì)算法掌握。對(duì)于一種算法,如果咱們不是很理解話,可以手動(dòng)將算法走一遍,慢慢理解該算法思想。學(xué)習(xí)這門課程最后目,還是要學(xué)會(huì)如何設(shè)計(jì)算法,這需要咱們長(zhǎng)期練習(xí)和思考。數(shù)據(jù)構(gòu)造是一門既注重理論,又注重實(shí)踐課程,而在我學(xué)習(xí)中,理論占了絕大多數(shù)時(shí)間,在更多時(shí)候,我過(guò)度注重某些算法實(shí)現(xiàn)原理,但是卻很少自己編寫算法,這點(diǎn)在這次課程設(shè)計(jì)中就暴露了許多問(wèn)題。因而后來(lái)學(xué)習(xí)數(shù)據(jù)構(gòu)造時(shí)候一定要舉一反三,對(duì)一種算法,不但僅只弄懂這個(gè)算法是怎么來(lái),也要思考用其她辦法實(shí)現(xiàn)此算法功能,這樣才會(huì)讓自己編程能力和解決問(wèn)題能力得到提高。6.程序源代碼#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<string.h>#defineMAXNUM20typedefstructnode{ intgno; charname[MAXNUM]; floatprice; intQuantityInStock; intamount; intdate; intsold; structnode*next;}linklist;linklist*create(ints)//初始化商品信息{ linklist*head,*p,*r; inti,n; head=(linklist*)malloc(sizeof(linklist)); head->next=NULL; r=head; printf("\n*********************超市%d商品初始化**********************\n",s); printf("\n請(qǐng)輸入超市%d初始商品種類數(shù):",s); scanf("%d",&n); for(i=0;i<n;i++){ p=(linklist*)malloc(sizeof(linklist)); printf("請(qǐng)依次輸入超市%d初始商品%d商品號(hào)、商品名稱、(出售)價(jià)格、庫(kù)存數(shù)量、生產(chǎn)日期:\n",s,i+1); scanf("%d",&p->gno); scanf("%s",&p->name); scanf("%f",&p->price); scanf("%d",&p->amount); scanf("%d",&p->date); p->QuantityInStock=p->amount; p->sold=0; p->next=NULL; r->next=p; r=r->next; } returnhead;}linklist*purchase(linklist*l,ints)//超市有新商品購(gòu)入是添加到單鏈表中{ linklist*p,*q,*r,*head; intn; head=l; r=l; p=l->next; //輸入購(gòu)入商品基本信息 q=(linklist*)malloc(sizeof(linklist)); printf("請(qǐng)依次輸入超市%d本次購(gòu)入新商品商品號(hào)、商品名稱、(出售)價(jià)格、購(gòu)入量、生產(chǎn)日期:\n",s); scanf("%d",&q->gno); scanf("%s",&q->name); scanf("%f",&q->price); scanf("%d",&q->amount); scanf("%d",&q->date); q->QuantityInStock=q->amount; q->sold=0; printf("購(gòu)入成功!\n"); //將新結(jié)點(diǎn)插入到表尾 q->next=NULL; while(p!=NULL){ r=p; p=p->next; } r->next=q; r=r->next; returnhead;}voidsold(linklist*l){ linklist*p=l,*q=l;intgno,sold,n=0,location=0;if(l==NULL){printf("鏈表為空!\n"); return;}printf("請(qǐng)輸入售出商品號(hào):");scanf("%d",&gno);while(q->gno!=gno){ location++; q=q->next; } printf("請(qǐng)輸入售出數(shù)量:"); scanf("%d",&sold); if(p->QuantityInStock<=sold){ printf("此商品庫(kù)存量局限性!"); return; } while(p){if(location==n){p->sold+=sold;p->QuantityInStock-=sold;printf("售出成功!\n");return;}else{p=p->next;n++;}if(p->QuantityInStock==0){ printf("此物品已售完!"); return; }}}linklist*findSame(linklist*l1,linklist*l2,linklist*l3)//尋找3個(gè)鏈表中具備相似商品名稱商品{ linklist*p1=l1->next,*p2,*p3,*fs,*q,*p; fs=(linklist*)malloc(sizeof(linklist));//分派一種新存儲(chǔ)空間用來(lái)保存相似商品信息 fs->next=NULL; q=fs; intflag; //尋找l1,l2中具備相似商品名稱商品 while(p1){ p2=l2->next; while(p2){ flag=strcmp(p1->name,p2->name); if(flag==0){ p=(linklist*)malloc(sizeof(linklist)); strcpy(p->name,p1->name); p->next=NULL; q->next=p; q=q->next; } p2=p2->next; } p1=p1->next; } //尋找l2,l3中具備相似商品名稱商品 p=fs; while(p->next){ p3=l3; while(p3->next){ flag=strcmp(p->next->name,p3->next->name); if(flag==0)break; if(p3->next==NULL){ q=p->next; p->next=q->next; } p3=p3->next; } p=p->next; } returnfs;}voidoutputSame(linklist*l1,linklist*l2,linklist*l3)//輸出3個(gè)鏈表中具備相似商品名稱商品信息{ linklist*p1=l1->next,*p2=l2->next,*p3=l3->next,*fs,*p; intflag; fs=findSame(l1,l2,l3); p=fs->next; printf("************************************3個(gè)超市中具備相似名稱商品信息***********************************\n"); while(p){ //遍歷鏈表l1 while(p1){ flag=strcmp(p1->name,p->name); if(flag==0){ printf("商品號(hào)\t商品名稱\t商品價(jià)格\t庫(kù)存數(shù)量\t商品總數(shù)\t售出數(shù)量\t生產(chǎn)日期\n"); printf("超市1:%d\t%s\t\t%5.2f\t\t%d\t\t%d\t\t%d\t\t%d\n", p1->gno,p1->name,p1->price,p1->QuantityInStock,p1->amount,p1->amount-p1->QuantityInStock,p1->date); } p1=p1->next; } //遍歷鏈表l2 while(p2){ flag=strcmp(p2->name,p->name); if(flag==0){ printf("超市2:%d\t%s\t\t%5.2f\t\t%d\t\t%d\t\t%d\t\t%d\n", p2->gno,p2->name,p2->price,p2->QuantityInStock,p2->amount,p2->amount-p2->QuantityInStock,p2->date); } p2=p2->next; } //遍歷鏈表l3 while(p3){ flag=strcmp(p3->name,p->name); if(flag==0){ printf("超市3:%d\t%s\t\t%5.2f\t\t%d\t\t%d\t\t%d\t\t%d\n", p3->gno,p3->name,p3->price,p3->QuantityInStock,p3->amount,p3->amount-p3->QuantityInStock,p3->date); } p3=p3->next; } p=p->next; } }voiddelSame(linklist*l1,linklist*l2,linklist*l3)//L1中刪除那些與其她兩個(gè)超市均有商品信息{ intflag; linklist*p,*s,*q,*fs; fs=findSame(l1,l2,l3); p=fs; while(p->next){ q=l1; while(q->next){ flag=strcmp(q->next->name,p->next->name); if(flag==0){ s=q->next; q->next=s->next; free(s); printf("\n成功刪除超市1中與其她兩個(gè)超市均有商品信息!"); return; } q=q->next; } p=p->next; }}voidupdate(linklist*l)//修改商品信息{linklist*p=l,*q=l,*s=l->next;intgno,m,price,QuantityInStock,amount,date,n=0,location=0,flag=0;if(l==NULL){//鏈表為空printf("鏈表為空!\n");return;}printf("請(qǐng)輸入需要修改價(jià)格商品號(hào):");scanf("%d",&gno); while(s){ if(s->gno==gno){ flag=1; } s=s->next; } if(!flag){//找不到此商品 printf("沒(méi)有此商品!\n"); return; } while(q->gno!=gno){ location++; q=q->next; } printf("請(qǐng)選取需要修改商品信息:\n"); printf("1.商品價(jià)格2.庫(kù)存數(shù)量3.商品總數(shù)4.生產(chǎn)日期5.所有修改\n"); //選取需要修改信息 scanf("%d",&m); switch(m){ case1: printf("請(qǐng)輸入新價(jià)格:"); scanf("%d",&price); while(p){ if(location==n){ p->price=price; return; } else{ p=p->next; n++; } } break; case2: printf("請(qǐng)輸入新庫(kù)存數(shù)量:"); scanf("%d",&QuantityInStock); while(p){ if(location==n){ p->QuantityInStock=QuantityInStock; return; } else{ p=p->next; n++; } } break; case3: printf("請(qǐng)輸入新商品總數(shù):"); scanf("%d",&amount); while(p){ if(location==n){ p->amount=amount; return; } else{ p=p->next; n++; } } break; case4: printf("請(qǐng)輸入新生產(chǎn)日期:"); scanf("%d",&date); while(p){ if(location==n){ p->date=date; return; } else{ p=p->next; n++; } } break; case5: printf("請(qǐng)輸入新價(jià)格:"); scanf("%d",&price); printf("請(qǐng)輸入新庫(kù)存數(shù)量:"); scanf("%d",&QuantityInStock); printf("請(qǐng)輸入新生產(chǎn)日期:"); scanf("%d",&date); printf("請(qǐng)輸入新商品總數(shù):"); scanf("%d",&date); while(p){ if(location==n){ p->price=price; p->QuantityInStock=QuantityInStock; p->amount=amount; p->date=date; return; } else{ p=p->next; n++; } } break; }}voidsoldInformation(linklist*l1,linklist*l2,linklist*l3)//查找比較超市中相似商品銷售狀況{ linklist*q1=l1,*p1=l1,*q2=l2,*p2=l2,*q3=l3,*p3=l3,*s;intgno,n1=0,location1=0,n2=0,location2=0,n3=0,location3=0;s=findSame(l1,l2,l3);if(s->next==NULL){ printf("3個(gè)超市沒(méi)有相似商品!"); return; }printf("請(qǐng)輸入需要查詢銷售信息商品號(hào):");scanf("%d",&gno);while(q1->gno!=gno){ location1++; q1=q1->next; } //遍歷l1 while(p1){if(location1==n1){while(q2->gno!=gno){ location2++; q2=q2->next; } //遍歷l2 while(p2){ if(location2==n2){ while(q3->gno!=gno){ location3++; q3=q3->next; } //遍歷l3 while(p3){ if(location3==n3){ printf("************商品%s銷售信息**************\n",q1->name); printf("\t商品\t銷售量\t銷售額\n"); printf("\t超市1:%s\t%d\t%5.0f\n",q1->name,q1->sold,q1->sold*q1->price); printf("\t超市2:%s\t%d\t%5.0f\n",q2->name,q2->sold,q2->sold*q2->price); printf("\t超市3:%s\t%d\t%5.0f\n",q3->name,q3->sold,q3->sold*q3->price); return; } else{ p3=p3->next; n3++; } } if(!p3){ printf("沒(méi)有此商品!"); return; } } else{ p2=p2->next; n2++; } } if(!p2){ printf("沒(méi)有此商品!"); return; }}else{p1=p1->next;n1++;}}if(!p1){ printf("沒(méi)有此商品!"); return; }}voidoutput(linklist*l)//輸出每個(gè)超市所有商品信息(涉及銷售量、銷售額){linklist*p; p=l->next; printf("***************************************商品信息輸出********************************************\n"); printf("商品號(hào)\t商品名稱\t商品價(jià)格\t庫(kù)存數(shù)量\t商品總數(shù)\t銷售量\t銷售額\t生產(chǎn)日期\n"); while(p){ printf("%d\t%s\t\t%5.2f\t\t%d\t\t%d\t\t%d\t%5.2f\t%d\n", p->gno,p->name,p->price,p->QuantityInStock,p->amount,p->sold,p->sold*p->price,p->date); p=p->next; }}intmain(){ ints,c; linklist*L1,*L2,*L3,*same; //初始化3個(gè)鏈表 L1=create(1); L2=create(2); L3=create(3); while(1){ printf("\n請(qǐng)選取你要管理超市序號(hào)(1/2/3):"); scanf("%d",&s); switch(s){ //管理超市1 case1: printf("\n********************超市%d商品管理***********************\n",s); printf("|------------------------------------------------------|\n"); printf("|1.購(gòu)入商品|\n"); printf("|2.售出商品|\n"); printf("|3.查找3個(gè)超市中具備相似商品名稱商品信息|\n"); printf("|4.刪除l1中與其她兩個(gè)超市均有商品信息|\n"); printf("|5.修改商品信息|\n"); printf("|6.比較各超市相似商品銷售狀況|\n"); printf("|7.輸出超市所有商品信息|\n"); printf("|8.退出程序|\n"); printf("|------------------------------------------------------|\n"); printf("請(qǐng)輸入你選?。?); scanf("%d",&c); switch(c){ case1: L1=purchase(L1,1); break; case2: sold(L1); break; case3: outputSame(L1,L2,L3); break; case4: delSame(L1,L2,L3); break; case5: update(L1); break; case6: soldInformation(L1,L2,L3); break; case7: output(L1); break; case8: exit(0); default: printf("選取錯(cuò)誤,請(qǐng)重新選取\n!"); } break; //管理超市2 case2: printf("\n********************超市%d商品管理

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論