數據結構課程設計基于棧的商品貨架管理的設計_第1頁
數據結構課程設計基于棧的商品貨架管理的設計_第2頁
數據結構課程設計基于棧的商品貨架管理的設計_第3頁
數據結構課程設計基于棧的商品貨架管理的設計_第4頁
數據結構課程設計基于棧的商品貨架管理的設計_第5頁
已閱讀5頁,還剩14頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、學號2014-2015學年 第一學期1308010108數據結構課程設計報告題目:基于棧的商品貨架管理的設計專業:計算機科學與技術班級:姓名:學號:指導教師:成績:計算機與信息工程系2014年 11 月 22日計算機與信息工程系 數據結構課程設計報告目 錄1設計分析2 1。1設計內容2 1。2 設計任務及具體要求22概要設計2 2。1系統的功能簡介2 2。2 總體程序框圖33設計過程和程序代碼3 3。1數據結構的設計3 3。1。1商品信息3 3。1.2商品貨架(棧)3 3.1。3商品種類4 3。2算法設計4 3。2.1初始化空棧4 3。2.2上貨的算法設計4 3。2。3出貨(即當天的銷售)的算

2、法設計4 3。2.4補貨的算法設計4 3.2.5倒貨4 3。2。6將貨架上擺放的貨物打印出來5 3。2。7模塊結構及功能5 3.2。8主要模塊算法描述54運行結果95小結10參考文獻11附錄:源程序12計算機與信息工程系 數據結構課程設計報告1設計分析1.1設計內容商店貨架以棧的方式擺放商品。商品貨架可以看成一個棧,棧頂商品的生產日期最早,棧底商品的生產日期最近。生產日期越接近的越靠棧底,出貨時從棧頂取貨.一天營業結束,如果貨架不滿,則需上貨。入貨直接將商品擺放到貨架上,則會使生產日期越近的商品越靠近棧頂。這樣就需要倒貨架,使生產日期越近的越靠近棧底。請編寫程序模擬商品銷售,上架倒貨架等操作。

3、(設有5種商品,每種商品至少有商品名和生產日期兩個屬性)1。2設計任務及具體要求設計任務:一天營業的開始,首先店主要把各個商品貨架(棧)上滿貨物.商店內總共有5種商品,商品名為:a,b,c,d,e。補貨時,店主輸入第一種需要補貨的商品的商品名和今天銷售出去的數量。然后,輸入要補上貨架的商品名和生產日期并將要補上貨架的商品與在貨架上未銷售出去的貨物進行生產日期的比較。若是要補上貨架的貨物日期比較早就直接上貨架。否則進行倒貨再補貨,這樣就能將日期比較近的放在棧底。用另外申請的一個空棧來存儲倒出的貨物。第一種商品補完貨后,再問店主是否還有其他商品需要補貨。如需補貨按第一種商品補貨的程序來進行,以此類

4、推進行補貨.要求:明確課程設計的目的,能根據課程設計的要求,查閱相關文獻,為完成設計準備必要的知識,提高撰寫技術文檔的能力。并學習了解C語言程序設計的要求和方法,利用數據結構的相關算法和原理進行系統的設計分析,提高計算機語言編程的能力。2概要設計2。1系統的功能簡介商品貨架管理系統可以看成是棧的設計管理,棧頂的產品的日期最早,棧底的商品日期最近,上貨時需要進行倒貨架以實現該功能.通過基于棧的原理實現設計商品貨架管理系統,使得該系統的主要功能是實現對商品貨架中產品進行合理有效的管理的實現,該系統包括對商品貨架進行商品的上貨、出貨、補貨、到貨等功能,實現對商品貨架信息上貨、出貨、補貨功能的管理。2

5、。2 總體程序框圖主函數出貨上貨棧初始化補貨打印棧中貨物信息卸貨圖2。2程序的總體框圖3設計過程和設計代碼3。1數據結構的設計3.1。1商品信息typedef structchar b;/存儲商品名/商品日期年、月、日int year;int month;int day;Data;3.1。2商品貨架(棧)define max 5typedef structData amax;/0為棧底位置int top;/棧頂Stack;3。1。3商品種類Stack s5;/5種商品3.2算法設計3。2。1初始化空棧利用for循環為每個(商品貨架)棧申請空間,并進行判斷是否有申請到空間,若沒有申請到空間就輸出

6、提示“空間不足!”,若是有申請到空間,top指向棧頂,初始值為1,棧底是0的位置。3。2。2上貨的算法設計先定義四個變量分別是字符型的k1,整型的k2,k3,k4用來存儲商品名和商品的生產日期,再賦值給棧元素的各個屬性,即將商品上貨。再賦值前先判斷top是否是最大值,若是就輸出提示“棧滿”并結束該上貨程序.當貨物上滿后輸出提示表示商品的貨架上滿了并輸出此時貨架上貨物的數量,利用for循環進行下一個商品的上貨,直至將5個商品的貨架全部上滿.3。2.3出貨(即當天的銷售)的算法設計一天的營業結束了,店主需要為有銷售出去的商品進行補貨。因此需要知道是哪個商品有銷售出去以及其銷售的數量,讓店主輸入今天

7、有銷售出去的一種商品的商品名,若是店主輸入此商店沒有的商品名就輸出提示,并讓店主再次輸入商品名,接著要輸入銷售的數量,程序要對銷售的數量進行判斷是否超出了棧的最大值(即貨架上所能容納貨物的最大數量),若是超出輸出提示,并請店主再次輸入銷售的數量。3。2.4補貨的算法設計在此子函數中先定義四個變量分別是字符型的k1,整型的k2,k3,k4用來存儲要補上貨架的商品名和商品的生產日期,另外再初始化一個空棧L,用來存儲倒出來的貨物.將要補上貨架的商品的生產日期與在貨架上未銷售出去的商品進行比較.若是日期比較早則可直接上貨,否則要進行倒貨再上貨。每入一件貨物都要進行這樣的程序。3.2。5倒貨為避免發生入

8、貨直接將商品擺放到貨架上,會使生產日期越近的商品越靠近棧頂這樣的事發生,因此需要倒貨。將比要補上貨架的貨物的生產日期要早的貨物倒出放入棧L,直至將要補上貨架的貨物入貨,則可再把棧L內的貨物再放回原棧.3.2。6將貨架上擺放的貨物打印出來補貨完成后,要將各個商品棧內的貨物的商品名以及其生產日期打印出來,這樣可以檢驗補貨時是否有將日期比較近的放在棧底。3。2.7模塊結構及功能int main(void) /主程序Stack initstack() /初始化空棧Stack onput(Stack S) /上貨void outpush(Stack *S) /出貨void backstack(Stack

9、 *S,int x) /補貨Stack outstack(Stack *S,Stack L) /倒貨void Print(Stack S) /打印商品棧內貨物信息3。2.8主要模塊算法描述(1)上貨Stack *onput(Stack S)int j;char k1;/儲存商品名int k2,k3,k4;/儲存商品生產日期年、月、日for(j=0;j<max;j+)if(S->top=max1)/判斷棧滿printf(”棧滿!n”);/棧滿不能入棧return S;S-top+;printf(”棧數%d ",S-top);/打印貨物所在的棧數/輸入商品名和生產日期fflu

10、sh(stdin);/清除緩存區scanf(”c %d/d/%d”,&k1,&k2,k3,&k4);/輸入商品信息S-aStop。b=k1;S-aStop.year=k2;S>aS->top。month=k3;S-aS->top。day=k4;printf(”該商品的貨架滿了!n”);printf(”此時該商品的貨架上共有d個商品nn",Stop+1); return S;(2)出貨void *outpush(Stack *S)printf(”請店主輸入今天%c這個商品銷售出去的數量:”,S>aStop.b); int x,i;fflu

11、sh(stdin);/清除緩存區dofflush(stdin);scanf(”d”,x);if(x>max)printf(”該貨架上沒有這么多商品!請重輸!n");while(xmax);for(i=1;i=x;i+)Stop-;printf(”此時c這個商品的貨架的數量剩下%d件需要補上貨架的數量為dnn”,SaS-top.b,S-top+1,x);backstack(S,x);/補貨(3)補貨void backstack(Stack *S,int x)int i,ii;int temp;char k1;/儲存商品名int k2,k3,k4;/儲存生產日期分別對應年月日Sta

12、ck L;L=initstack();/重新申請一個空棧用來倒貨時存放貨物printf(”請輸入要補上貨架的商品名(一個字符)空一格并輸入該商品生產日期(年/月/日)每上貨一件以回車鍵結束:n”);for(i=1;i=x;i+)/輸入商品名和生產日期fflush(stdin);/清除緩存區scanf(”%c %d/%d/d”,&k1,k2,k3,k4);if(Stop=1)/此時貨架上無商品可以直接上貨S->top+;S-aS>top.b=k1;SaStop。year=k2;SaS>top。month=k3;S>aS->top.day=k4;printf(

13、”補貨成功第d件!n”,i);printf("此時的棧頂數為:%dn”,Stop);elseif(k2<SaS-top。year)/若生產年份要補上貨架的比貨架上的早則直接上貨架S->top+;SaStop.b=k1;S>aS->top。year=k2;SaS->top。month=k3;S-aStop。day=k4;printf(”補貨成功第d件!n”,i);printf(”此時的棧頂數為:dn",S>top);temp=1;elsefor(ii=Stop;ii>-1&S-top!=-1;ii-)temp=0;/用來標記是

14、否有貨物上架if(k2=SaS-top.year)/若生產年份要補上貨架的與貨架上的一樣則比較月份if(k3SaStop。month) /若生產月份要補上貨的比貨架上的早則直接上貨S>top+;S>aStop。b=k1;S-aStop。year=k2;S>aStop。month=k3;S->aS-top.day=k4;printf(”補貨成功第%d件!n”,i);printf("此時的棧頂數為:dn",Stop);temp=1;if(temp=1)break;elseif(k3=SaS-top。month)/若生產月份要補上貨架的與貨架上的一樣則比較

15、生產當天日期if(k4=S->aS->top。day)/若生產當天日期要補上貨的比貨架上的早或是相同則直接上貨否則要倒貨重新上貨架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("此時的棧頂數為:dn",Stop);temp=1;if(temp=1)break;elseL=outstack(S,L);/倒貨elseL=outstack(S,L);/倒貨if(k2>SaSt

16、op.year)/此時生產年份要補上貨架的比貨架上的近 L=outstack(S,L);/倒貨if(temp=0)Stop+;S->aStop。b=k1;SaStop。year=k2;SaStop。month=k3;S-aS-top。day=k4;printf("補貨成功第d件!n",i);printf(”此時的棧頂數為:dn”,S-top);while(Ltop1)/將存儲在L棧中的商品上架S-top+;S>aStop=L->aL-top-;L=initstack();printf(”補貨完成!nn");Print(S);(4)倒貨:Stack

17、 outstack(Stack S,Stack *L)L->top+;LaLtop=S>aS-top;S->top-;printf(”此時的棧頂數為:dn",Stop); printf("倒貨一次!nn”);return L;4運行結果程序測試數據如下:(1) 上貨:圖(1)上貨程序測試(2)補貨及出貨圖(2)補貨及出貨測試5小結通過此次課程設計,我更深刻地體會到編寫一個程序之前首先要分析它,知道它的功能,要做什么等等,如何實現它,這些需要我們認真的思考,分析。劃分整體成各個模塊,再逐一的實現它是一種很好的解決方法。在調試程序的過程中我們需要細心和耐心。通

18、過這次商品貨架管理的上機實習,我對于棧有了更多的認識,對棧的運用更加的熟練,對于棧的具體進出有了很深入的認識,尤其在輸出棧的具體的進出操作過程中,在輸出形式上費了很大的功夫,還有在插入新商品時,比較商品日期,開始的時候沒有考慮全面,只考慮到新商品日期比所有的舊商品日期近,最后經過完善,又增加了比所有的商品日期早,和新商品日期在舊商品中間,最后才得到比較滿意的結果。總之,經過本次專業課程設計,讓我掌握了開發應用軟件的基本流程,運用所學編程技能的基本技巧,也讓我初步了解了軟件設計的基本方法,提高進行工程設計的基本技能及分析、解決實際問題的能力,為以后畢業設計和工程實踐等打下良好的基礎。相信通過這次

19、的課程設計,我對所學的數據結構(C語言版)和各種編程語言都有了一個全新的認識。我也會積極吸取本次課程設計的經驗,繼續研究數據結構和所學的各種編程語言.參考文獻1蘇小紅等。 C語言大學實用教程.(第二版)M. 北京:北京工業出版社,2008.2吳文虎。 程序設計基礎(第二版)M。 北京:清華大學出版社,2004。3譚浩強。 C程序設計教程M。北京:清華大學出版社,2008。 4嚴蔚敏、吳偉民著.數據結構(C語言版)。北京:清華大學出版社,2007附錄:源程序include<stdio。h>includestdlib。h#includeconio.h#define max 5typed

20、ef structchar b;/存儲商品名/商品日期年、月、日int year;int month;int day;Data;typedef structData amax;/0為棧底位置int top;/棧頂Stack;/初始化空棧Stack initstack()Stack *S;S=(Stack )malloc(sizeof(Stack));/申請空間 /判斷是否申請到棧空間if(!S)printf("空間不足!n”);return NULL;elseStop=-1;return S;/將貨架上擺放的貨物打印出來void Print(Stack S) printf(“這個商品

21、的貨架上擺放了%d個貨物n”,SaS>top.b,S>top+1); while(S-top>1)printf(”cd/d/%dn”,S->aStop。b,SaS->top.year,SaStop。month,SaS-top。day);S-top;/上貨Stack onput(Stack S)int j;char k1;int k2,k3,k4;for(j=0;jmax;j+)if(Stop=max-1)printf(”棧滿!n”);/棧滿不能入棧return S;S-top+;printf("棧數d ”,S-top);/輸入商品名和生產日期fflush

22、(stdin);/清除緩存區scanf("%c d/%d/%d",k1,k2,k3,k4);S->aS-top。b=k1;SaStop。year=k2;SaStop.month=k3;S>aS->top。day=k4;printf(”該商品的貨架滿了!n”);printf(”此時該商品的貨架上共有%d個商品nn",S>top+1);return S;/倒貨Stack outstack(Stack *S,Stack L)L->top+;LaL>top=SaS>top;Stop;printf("此時的棧頂數為:%dn

23、”,Stop);printf(”倒貨一次!nn");return L;/補貨void backstack(Stack S,int x)int i,ii;int temp;char k1;/儲存商品名int k2,k3,k4;/儲存生產日期分別對應年月日Stack L;L=initstack();/重新申請一個空棧用來倒貨時存放貨物printf(”請輸入要補上貨架的商品名(一個字符)空一格并輸入該商品生產日期(年/月/日)每上貨一件以回車鍵結束:n");for(i=1;i=x;i+)/輸入商品名和生產日期fflush(stdin);/清除緩存區scanf(”c %d/%d/d

24、",&k1,k2,&k3,k4);if(S->top=1)/此時貨架上無商品可以直接上貨S->top+;SaS-top。b=k1;S>aS-top。year=k2;S-aS->top。month=k3;SaS-top。day=k4;printf(”補貨成功第%d件!n”,i);printf(”此時的棧頂數為:dn”,Stop);elseif(k2<S->aS>top.year)/若生產年份要補上貨架的比貨架上的早則直接上貨架S->top+;S-aStop.b=k1;S-aS->top。year=k2;SaStop。

25、month=k3;SaS>top.day=k4;printf(”補貨成功第d件!n”,i);printf("此時的棧頂數為:dn",Stop);temp=1;elsefor(ii=Stop;ii1Stop!=1;ii)temp=0;/用來標記是否有貨物上架if(k2=S>aStop。year)/若生產年份要補上貨架的與貨架上的一樣則比較月份if(k3S-aS>top.month) /若生產月份要補上貨的比貨架上的早則直接上貨Stop+;SaS>top。b=k1;SaS-top。year=k2;S->aS>top。month=k3;SaS-

26、top.day=k4;printf(”補貨成功第%d件!n”,i);printf("此時的棧頂數為:dn”,S>top);temp=1;if(temp=1)break;elseif(k3=SaS>top。month)/若生產月份要補上貨架的與貨架上的一樣則比較生產當天日期if(k4<=SaStop.day)/若生產當天日期要補上貨的比貨架上的早或是相同則直接上貨否則要倒貨重新上貨架Stop+;S-aS>top.b=k1;SaStop。year=k2;SaS-top.month=k3;SaStop.day=k4;printf(”補貨成功第d件!n”,i);pri

27、ntf(”此時的棧頂數為:dn”,Stop);temp=1;if(temp=1)break;else/倒貨L=outstack(S,L);else/倒貨L=outstack(S,L);if(k2>S-aS-top。year)/此時生產年份要補上貨架的比貨架上的近 L=outstack(S,L);/倒貨if(temp=0)S-top+;SaS>top.b=k1;S-aS>top.year=k2;S->aS->top。month=k3;SaStop。day=k4;printf(”補貨成功第d件!n",i);printf("此時的棧頂數為:dn”,S>top);while(L-top1)/將存儲在L棧中的商品上架Stop+;S-aS->top=L-aLtop-;L=initstack();printf("補貨完成!!nn");Print(S);/出貨void outpush(Stack S)printf("請店主輸入今天c這個商品銷售出去的數量:”,S>aS->top.b); int x,i;fflush(stdin);dofflush(stdi

溫馨提示

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

評論

0/150

提交評論