算法與數(shù)據(jù)結(jié)構(gòu)的商品貨架管理課程設(shè)計報告_第1頁
算法與數(shù)據(jù)結(jié)構(gòu)的商品貨架管理課程設(shè)計報告_第2頁
算法與數(shù)據(jù)結(jié)構(gòu)的商品貨架管理課程設(shè)計報告_第3頁
算法與數(shù)據(jù)結(jié)構(gòu)的商品貨架管理課程設(shè)計報告_第4頁
算法與數(shù)據(jù)結(jié)構(gòu)的商品貨架管理課程設(shè)計報告_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、福建工程學(xué)課程設(shè)計課程:算法與數(shù)據(jù)結(jié)構(gòu)題目:商品貨架管理專業(yè):計算機類班級:1102座號:3110307201姓名:鄭桂萍2012年6月26日一、要解決的問題商店貨架以棧的方式擺放商品。商品貨架可以看成一個棧,棧頂商品的生產(chǎn)日期最早,棧底商品的生產(chǎn)日期最近。生產(chǎn)日期越接近的越靠棧底,出貨時從棧頂取貨。一天營業(yè)結(jié)束,如果貨架不滿,則需上貨。入貨直接將商品擺放到貨架上,則會使生產(chǎn)日期越近的商品越靠近棧頂。這樣就需要倒貨架,使生產(chǎn)日期越近的越靠近棧底。請編寫程序模擬商品銷售,上架倒貨架等操作。(設(shè)有5種商品,每種商品至少有商品名和生產(chǎn)日期兩個屬性)二、算法基本思想描述:一天營業(yè)的開始,首先店主要把各

2、個商品貨架(棧)上滿貨物。商店內(nèi)總共有5種商品,商品名為:a,b,c,d,e。一一將每個商品的貨架上滿貨物。接著一天的營業(yè)結(jié)束了,店主要將今天有銷售出去的商品所對應(yīng)的貨架補滿。讓店主輸入第一種需要補貨的商品的商品名和今天銷售出去的數(shù)量。然后,輸入要補上貨架的商品名和生產(chǎn)日期并將要補上貨架的商品與在貨架上未銷售出去的貨物進行生產(chǎn)日期的比較。若是要補上貨架的貨物日期比較早就直接上貨架。否則進行倒貨再補貨,這樣就能將日期比較近的放在棧底。用另外申請的一個空棧來存儲倒出的貨物。第一種商品補完貨后,再問店主是否還有其他商品需要補貨。如需補貨按第一種商品補貨的程序來進行。以此類推進行補貨。三、設(shè)計1. 數(shù)

3、據(jù)結(jié)構(gòu)的設(shè)計(1)商品信息:typedefstructcharb;/存儲商品名/商品日期年、月、日intyear;intmonth;intday;Data;(2)商品貨架(棧)#definemax5typedefstructDataamax;/0為棧底位置inttop;/棧頂Stack;(3)商品種類:Stack*s5;/5種商品2. 算法設(shè)計:(1)初始化空棧:利用for循環(huán)為每個(商品貨架)棧申請空間,并進行判斷是否有申請到空間,若沒有申請到空間就輸出提示“空間不足!”,若是有申請到空間,top指向棧頂,初始值為1,棧底是0的位置。(2)上貨的算法設(shè)計:先定義四個變量分別是字符型的k1,整

4、型的k2,k3,k4用來存儲商品名和商品的生產(chǎn)日期,再賦值給棧元素的各個屬性,即將商品上貨。再賦值前先判斷top是否是最大值,若是就輸出提示“棧滿”并結(jié)束該上貨程序。當(dāng)貨物上滿后輸出提示表示商品的貨架上滿了并輸出此時貨架上貨物的數(shù)量,利用for循環(huán)進行下一個商品的上貨,直至將5個商品的貨架全部上滿。(3)出貨(即當(dāng)天的銷售)的算法設(shè)計:一天的營業(yè)結(jié)束了,店主需要為有銷售出去的商品進行補貨。因此需要知道是哪個商品有銷售出去以及其銷售的數(shù)量,讓店主輸入今天有銷售出去的一種商品的商品名,若是店主輸入此商店沒有的商品名就輸出提示,并讓店主再次輸入商品名,接著要輸入銷售的數(shù)量,程序要對銷售的數(shù)量進行判斷

5、是否超出了棧的最大值(即貨架上所能容納貨物的最大數(shù)量),若是超出輸出提示,并請店主再次輸入銷售的數(shù)量。(4)補貨的算法設(shè)計:在此子函數(shù)中先定義四個變量分別是字符型的k1,整型的k2,k3,k4用來存儲要補上貨架的商品名和商品的生產(chǎn)日期,另外再初始化一個空棧L,用來存儲倒出來的貨物。將要補上貨架的商品的生產(chǎn)日期與在貨架上未銷售出去的商品進行比較。若是日期比較早則可直接上貨,否則要進行倒貨再上貨。每入一件貨物都要進行這樣的程序。(5)倒貨:為避免發(fā)生入貨直接將商品擺放到貨架上,會使生產(chǎn)日期越近的商品越靠近棧頂這樣的事發(fā)生,因此需要倒貨。將比要補上貨架的貨物的生產(chǎn)日期要早的貨物倒出放入棧L,直至將要

6、補上貨架的貨物入貨,則可再把棧L內(nèi)的貨物再放回原棧。(6)將貨架上擺放的貨物打印出來:補貨完成后,要將各個商品棧內(nèi)的貨物的商品名以及其生產(chǎn)日期打印出來,這樣可以檢驗補貨時是否有將日期比較近的放在棧底。(7)模塊結(jié)構(gòu)及功能:主程序初始化空棧上貨出貨補貨倒貨1) intmain(void)/2) Stack*initstack()/3) Stack*onput(Stack*S)/4) void*outpush(Stack*S)/5) voidbackstack(Stack*S,intx)/6) Stack*outstack(Stack*S,Stack*L)/7) voidPrint(Stack*S

7、)/打印商品棧內(nèi)貨物信息(8)主要模塊算法描述:上貨:Stack*onput(Stack*S)intj;chark1;/儲存商品名intk2,k3,k4;/儲存商品生產(chǎn)日期年、月、日for(j=0;j<max;j+)if(S->top=max-1)/判斷棧滿printf("棧滿!n");/棧滿不能入棧returnS;S->top+;printf("棧數(shù)%d",S->top);/打印貨物所在的棧數(shù)/輸入商品名和生產(chǎn)日期fflush(stdin);/清除緩存區(qū)scanf("%c%d/%d/%d",&k1,&

8、amp;k2,&k3,&k4);/輸入商品信息S->aS->top.b=k1;S->aS->top.year=k2;S->aS->top.month=k3;S->aS->top.day=k4;printf("該商品的貨架滿了!n");printf("此時該商品的貨架上共有於商品nn",S->top+1);returnS;出貨:/出貨void*outpush(Stack*S)printf("請店主輸入今天c這個商品銷售出去的數(shù)量:",S->aS->top.

9、b);intx,i;fflush(stdin);/清除緩存區(qū)dofflush(stdin);scanf("%d",&x);if(x>max)printf("該貨架上沒有這么多商品!請重輸!n");while(x>max);for(i=1;i<=x;i+)S->top-;printf("此時%c這個商品的貨架的數(shù)量剩下%d件需要補上貨架的數(shù)量為%dnn",S->aS->top.b,S->top+1,x);/補貨backstack(S,x);補貨:/補貨voidbackstack(Stac

10、k*S,intx)inti,ii;inttemp;chark1;/儲存商品名intk2,k3,k4;/儲存生產(chǎn)日期分別對應(yīng)年月日Stack*L;L=initstack();/重新申請一個空棧用來倒貨時存放貨物printf("請輸入要補上貨架的商品名(一個字符)空一格并輸入該商品生產(chǎn)日期(年/月/日)每上貨一件以回車鍵結(jié)束:n");for(i=1;i<=x;i+)/輸入商品名和生產(chǎn)日期fflush(stdin);/清除緩存區(qū)scanf("%c%d/%d/%d",&k1,&k2,&k3,&k4);if(S->top

11、=-1)/此時貨架上無商品可以直接上貨S->top+;S->aS->top.b=k1;S->aS->top.year=k2;S->aS->top.month=k3;S->aS->top.day=k4;printf("補貨成功第出牛!n",i);printf("此時的棧頂數(shù)為:%dn",S->top);elseif(k2<S->aS->top.year)/若生產(chǎn)年份要補上貨架的比貨架上的早則直接上貨架S->top+;S->aS->top.b=k1;S->a

12、S->top.year=k2;S->aS->top.month=k3;S->aS->top.day=k4;printf("補貨成功第d牛!n",i);printf("此時的棧頂數(shù)為:%dn",S->top);temp=1;elsefor(ii=S->top;ii>-1&&S->top!=-1;ii-)temp=0;/用來標(biāo)記是否有貨物上架if(k2=S->aS->top.year)/若生產(chǎn)年份要補上貨架的與貨架上的一樣則比較月份if(k3<S->aS->t

13、op.month)/若生產(chǎn)月份要補上貨的比貨架上的早則直接上貨S->top+;S->aS->top.b=k1;S->aS->top.year=k2;S->aS->top.month=k3;S->aS->top.day=k4;printf("補貨成功第d牛!n",i);printf("此時的棧頂數(shù)為:%dn",S->top);temp=1;if(temp=1)break;elseif(k3=S->aS->top.month)/若生產(chǎn)月份要補上貨架的與貨架上的一樣則比較生產(chǎn)當(dāng)天日期if(

14、k4<=S->aS->top.day)/若生產(chǎn)當(dāng)天日期要補上貨的比貨架上的早或是相同則直接上貨否則要倒貨重新上貨架S->top+;S->aS->top.b=k1;S->aS->top.year=k2;S->aS->top.month=k3;S->aS->top.day=k4;printf("補貨成功第d牛!n",i);printf("此時的棧頂數(shù)為:%dn",S->top);temp=1;if(temp=1)break;else/倒貨L=outstack(S,L);else/倒

15、貨L=outstack(S,L);if(k2>S->aS->top.year)/上的近L=outstack(S,L);/倒貨此時生產(chǎn)年份要補上貨架的比貨架if(temp=0)S->top+;S->aS->top.b=k1;S->aS->top.year=k2;S->aS->top.month=k3;S->aS->top.day=k4;printf("printf("補貨成功第推!n”,i);此時的棧頂數(shù)為:%dn",S->top);while(L->top>-1)/將存儲在L

16、棧中的商品上架S->top+;S->aS->top=L->aL->top-;L=initstack();printf("補貨完成!nn");Print(S);倒貨:/倒貨Stack*outstack(Stack*S,Stack*L)L->top+;L->aL->top=S->aS->top;S->top-;printf("此時的棧頂數(shù)為:%dn",S->top);printf("倒貨一次!nn");returnL;四、源程序清單:#include<stdio

17、.h>#include<stdlib.h>#include<conio.h>#definemax5typedefstructcharb;/存儲商品名/商品日期年、月、日intyear;intmonth;intday;Data;typedefstructDataamax;/0為棧底位置inttop;/棧頂Stack;/初始化空棧Stack*initstack()Stack*S;S=(Stack*)malloc(sizeof(Stack);/申請空間/判斷是否申請到??臻gif(!S)printf("空間不足!n");returnNULL;elseS

18、->top=-1;returnS;/將貨架上擺放的貨物打印出來voidPrint(Stack*S)printf("%c這個商品的貨架上擺放了%d個貨物n",S->aS->top.b,S->top+1);while(S->top>-1)printf("%c%d/%d/%dn",S->aS->top.b,S->aS->top.year,S->aS->top.month,S->aS->top.day);S->top-;/上貨Stack*onput(Stack*S)intj

19、;chark1;intk2,k3,k4;for(j=0;j<max;j+)if(S->top=max-1)printf("棧滿!n");/棧滿不能入棧returnS;S->top+;printf("棧數(shù)%d",S->top);/輸入商品名和生產(chǎn)日期fflush(stdin);/清除緩存區(qū)scanf("%c%d/%d/%d",&k1,&k2,&k3,&k4);S->aS->top.b=k1;S->aS->top.year=k2;S->aS->to

20、p.month=k3;S->aS->top.day=k4;printf("該商品的貨架滿了!n");printf("此時該商品的貨架上共有於商品nn",S->top+1);returnS;/倒貨Stack*outstack(Stack*S,Stack*L)L->top+;L->aL->top=S->aS->top;S->top-;printf("此時的棧頂數(shù)為:%dn",S->top);printf("倒貨一次!nn");returnL;/補貨voidba

21、ckstack(Stack*S,intx)inti,ii;inttemp;chark1;/儲存商品名intk2,k3,k4;/儲存生產(chǎn)日期分別對應(yīng)年月日Stack*L;L=initstack();/重新申請一個空棧用來倒貨時存放貨物printf("請輸入要補上貨架的商品名(一個字符)空一格并輸入該商品生產(chǎn)日期(年/月/日)每上貨一件以回車鍵結(jié)束:n");for(i=1;i<=x;i+)/輸入商品名和生產(chǎn)日期fflush(stdin);/清除緩存區(qū)scanf("%c%d/%d/%d",&k1,&k2,&k3,&k4);

22、if(S->top=-1)/此時貨架上無商品可以直接上貨S->top+;S->aS->top.b=k1;S->aS->top.year=k2;S->aS->top.month=k3;S->aS->top.day=k4;printf("補貨成功第出牛!n",i);printf("此時的棧頂數(shù)為:%dn",S->top);elseif(k2<S->aS->top.year)/若生產(chǎn)年份要補上貨架的比貨架上的早則直接上貨架S->top+;S->aS->top.

23、b=k1;S->aS->top.year=k2;S->aS->top.month=k3;S->aS->top.day=k4;printf("補貨成功第d牛!n",i);printf("此時的棧頂數(shù)為:%dn",S->top);temp=1;elsefor(ii=S->top;ii>-1&&S->top!=-1;ii-)temp=0;/用來標(biāo)記是否有貨物上架if(k2=S->aS->top.year)/若生產(chǎn)年份要補上貨架的與貨架上的一樣則比較月份if(k3<S-

24、>aS->top.month)/若生產(chǎn)月份要補上貨的比貨架上的早則直接上貨S->top+;S->aS->top.b=k1;S->aS->top.year=k2;S->aS->top.month=k3;S->aS->top.day=k4;printf("補貨成功第d牛!n",i);printf("此時的棧頂數(shù)為:%dn",S->top);temp=1;if(temp=1)break;elseif(k3=S->aS->top.month)/若生產(chǎn)月份要補上貨架的與貨架上的一樣

25、則比較生產(chǎn)當(dāng)天日期if(k4<=S->aS->top.day)/若生產(chǎn)當(dāng)天日期要補上貨的比貨架上的早或是相同則直接上貨否則要倒貨重新上貨架S->top+;S->aS->top.b=k1;S->aS->top.year=k2;S->aS->top.month=k3;S->aS->top.day=k4;printf("補貨成功第d牛!n",i);printf("此時的棧頂數(shù)為:%dn",S->top);temp=1;if(temp=1)break;else/倒貨L=outstack

26、(S,L); else /倒貨L=outstack(S,L);if(k2>S->aS->top.year)/ 上的近L=outstack(S,L);/倒貨此時生產(chǎn)年份要補上貨架的比貨架if(temp=0) S->top+;S->aS->top.b=k1;S->aS->top.year=k2;S->aS->top.month=k3;S->aS->top.day=k4;printf("printf("補貨成功第推! n”,i);此時的棧頂數(shù)為:%dn",S->top);while(L->

27、;top>-1)/將存儲在L 棧中的商品上架S->top+;S->aS->top=L->aL->top-;L=initstack();printf("補貨完成!nn");Print(S);/出貨void*outpush(Stack*S)printf("請店主輸入今天c這個商品銷售出去的數(shù)量:",S->aS->top.b);intx,i;fflush(stdin);dofflush(stdin);scanf("%d",&x);if(x>max)printf("該貨架

28、上沒有這么多商品!請重輸!n");while(x>max);for(i=1;i<=x;i+)S->top-;printf("此時%c這個商品的貨架的數(shù)量剩下%d件需要補上貨架的數(shù)量為%dnn",S->aS->top.b,S->top+1,x);/補貨backstack(S,x);intmain(void)Stack*s5;/5種商品inti;printf("計算機類1102班鄭桂萍學(xué)號:3110307201nn");printf("商店共有5種商品,分別是a,b,c,d,enn");for(i=0;i<5;i+)si=initstack();/初始化棧printf("請輸入要上貨的第種商品名(一個字符)空一格并輸入該商品生產(chǎn)日期(年/月/日)每上貨一件以回車鍵結(jié)束:n",i+1);si=onput(si);/將商品入棧(上貨)charc,yes_no;dofflush(stdin);printf("請店主輸入今天有銷售出去一個商品的商品名:n");fflush(stdin);scanf("%c",&c);switch(c)cas

溫馨提示

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

評論

0/150

提交評論