數(shù)據(jù)結構課程設計基于棧的商品貨架管理的設計參考模板_第1頁
數(shù)據(jù)結構課程設計基于棧的商品貨架管理的設計參考模板_第2頁
數(shù)據(jù)結構課程設計基于棧的商品貨架管理的設計參考模板_第3頁
數(shù)據(jù)結構課程設計基于棧的商品貨架管理的設計參考模板_第4頁
數(shù)據(jù)結構課程設計基于棧的商品貨架管理的設計參考模板_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、學號2014-2015學年 第一學期1308010108數(shù)據(jù)結構課程設計報告題目:基于棧的商品貨架管理的設計專業(yè):計算機科學與技術班級:姓名:學號:指導教師:成績:計算機與信息工程系- 0 - / 222014年 11 月 22日目 錄1設計分析2 1.1設計內容2 1.2 設計任務及具體要求22概要設計2 2.1系統(tǒng)的功能簡介2 2.2 總體程序框圖33設計過程和程序代碼3 3.1數(shù)據(jù)結構的設計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出貨(即當天的銷售)的算法設計4 3.2.4

2、補貨的算法設計4 3.2.5倒貨4 3.2.6將貨架上擺放的貨物打印出來5 3.2.7模塊結構及功能5 3.2.8主要模塊算法描述54運行結果95小結10參考文獻11附錄:源程序121設計分析1.1設計內容商店貨架以棧的方式擺放商品。商品貨架可以看成一個棧,棧頂商品的生產(chǎn)日期最早,棧底商品的生產(chǎn)日期最近。生產(chǎn)日期越接近的越靠棧底,出貨時從棧頂取貨。一天營業(yè)結束,如果貨架不滿,則需上貨。入貨直接將商品擺放到貨架上,則會使生產(chǎn)日期越近的商品越靠近棧頂。這樣就需要倒貨架,使生產(chǎn)日期越近的越靠近棧底。請編寫程序模擬商品銷售,上架倒貨架等操作。(設有5種商品,每種商品至少有商品名和生產(chǎn)日期兩個屬性)1.

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

4、查閱相關文獻,為完成設計準備必要的知識,提高撰寫技術文檔的能力。并學習了解C語言程序設計的要求和方法,利用數(shù)據(jù)結構的相關算法和原理進行系統(tǒng)的設計分析,提高計算機語言編程的能力。2概要設計2.1系統(tǒng)的功能簡介商品貨架管理系統(tǒng)可以看成是棧的設計管理,棧頂?shù)漠a(chǎn)品的日期最早,棧底的商品日期最近,上貨時需要進行倒貨架以實現(xiàn)該功能。通過基于棧的原理實現(xiàn)設計商品貨架管理系統(tǒng),使得該系統(tǒng)的主要功能是實現(xiàn)對商品貨架中產(chǎn)品進行合理有效的管理的實現(xiàn),該系統(tǒng)包括對商品貨架進行商品的上貨、出貨、補貨、到貨等功能,實現(xiàn)對商品貨架信息上貨、出貨、補貨功能的管理。2.2 總體程序框圖主函數(shù)出貨上貨棧初始化補貨打印棧中貨物信息

5、卸貨圖2.2程序的總體框圖3設計過程和設計代碼3.1數(shù)據(jù)結構的設計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循環(huán)為每個(商品貨架)棧申請空間,并進行判斷是否有申請到空間,若沒有申請到空間就輸出提示“空間不足!”,若是有申請到空間,top指向棧頂,初

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

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

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

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

10、fflush(stdin);/清除緩存區(qū)scanf("%c %d/%d/%d",&k1,&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("此時該商品的貨架上共有%d個商品nn",S->top+1); return S;(2)出貨void *outpush(St

11、ack *S)printf("請店主輸入今天%c這個商品銷售出去的數(shù)量:",S->aS->top.b); int x,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-

12、>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;/儲存生產(chǎn)日期分別對應年月日Stack *L;L=initstack();/重新申請一個空棧用來倒貨時存放貨物printf("請輸入要補上貨架的商品名(一個字符)空一格并輸入該商品生產(chǎn)日期(年/月/日)每上貨一件以回車鍵結束:n");for(i=1;i<=x;i+)/輸入商品名和生產(chǎn)日期fflush(stdin);/清除緩存區(qū)

13、scanf("%c %d/%d/%d",&k1,&k2,&k3,&k4);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("補貨成功第%d件!n",i);printf("此時的棧頂數(shù)為:%dn",S->top);elseif(k2<S->aS-&

14、gt;top.year)/若生產(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;elsefor(ii=S->top;ii>-1&&S->top!=-1;ii-)temp=0;/用來標記是否有貨物

15、上架if(k2=S->aS->top.year)/若生產(chǎn)年份要補上貨架的與貨架上的一樣則比較月份if(k3<S->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;i

16、f(temp=1)break;elseif(k3=S->aS->top.month)/若生產(chǎn)月份要補上貨架的與貨架上的一樣則比較生產(chǎn)當天日期if(k4<=S->aS->top.day)/若生產(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("此

17、時的棧頂數(shù)為:%dn",S->top);temp=1;if(temp=1)break;elseL=outstack(S,L);/倒貨elseL=outstack(S,L);/倒貨if(k2>S->aS->top.year)/此時生產(chǎn)年份要補上貨架的比貨架上的近 L=outstack(S,L);/倒貨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("補貨

18、成功第%d件!n",i);printf("此時的棧頂數(shù)為:%dn",S->top);while(L->top>-1)/將存儲在L棧中的商品上架S->top+;S->aS->top=L->aL->top-;L=initstack();printf("補貨完成!nn");Print(S);(4)倒貨:Stack *outstack(Stack *S,Stack *L)L->top+;L->aL->top=S->aS->top;S->top-;printf("

19、;此時的棧頂數(shù)為:%dn",S->top); printf("倒貨一次!nn");return L;4運行結果程序測試數(shù)據(jù)如下:(1) 上貨:圖(1)上貨程序測試(2)補貨及出貨圖(2)補貨及出貨測試5小結通過此次課程設計,我更深刻地體會到編寫一個程序之前首先要分析它,知道它的功能,要做什么等等,如何實現(xiàn)它,這些需要我們認真的思考,分析。劃分整體成各個模塊,再逐一的實現(xiàn)它是一種很好的解決方法。在調試程序的過程中我們需要細心和耐心。通過這次商品貨架管理的上機實習,我對于棧有了更多的認識,對棧的運用更加的熟練,對于棧的具體進出有了很深入的認識,尤其在輸出棧的具體

20、的進出操作過程中,在輸出形式上費了很大的功夫,還有在插入新商品時,比較商品日期,開始的時候沒有考慮全面,只考慮到新商品日期比所有的舊商品日期近,最后經(jīng)過完善,又增加了比所有的商品日期早,和新商品日期在舊商品中間,最后才得到比較滿意的結果。總之,經(jīng)過本次專業(yè)課程設計,讓我掌握了開發(fā)應用軟件的基本流程,運用所學編程技能的基本技巧,也讓我初步了解了軟件設計的基本方法,提高進行工程設計的基本技能及分析、解決實際問題的能力,為以后畢業(yè)設計和工程實踐等打下良好的基礎。相信通過這次的課程設計,我對所學的數(shù)據(jù)結構(C語言版)和各種編程語言都有了一個全新的認識。我也會積極吸取本次課程設計的經(jīng)驗,繼續(xù)研究數(shù)據(jù)結構

21、和所學的各種編程語言。參考文獻1蘇小紅等. C語言大學實用教程.(第二版)M. 北京:北京工業(yè)出版社,2008.2吳文虎. 程序設計基礎(第二版)M. 北京:清華大學出版社,2004.3譚浩強. C程序設計教程M.北京:清華大學出版社,2008. 4嚴蔚敏、吳偉民著.數(shù)據(jù)結構(C語言版).北京:清華大學出版社,2007附錄:源程序#include<stdio.h>#include<stdlib.h>#include<conio.h>#define max 5typedef structchar b;/存儲商品名/商品日期年、月、日int year;int m

22、onth;int day;Data;typedef structData amax;/0為棧底位置int top;/棧頂Stack;/初始化空棧Stack *initstack()Stack *S;S=(Stack *)malloc(sizeof(Stack);/申請空間 /判斷是否申請到??臻gif(!S)printf("空間不足!n");return NULL;elseS->top=-1;return S;/將貨架上擺放的貨物打印出來void Print(Stack *S) printf(“這個商品的貨架上擺放了%d個貨物n",S->aS->t

23、op.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)int j;char k1;int k2,k3,k4;for(j=0;j<max;j+)if(S->top=max-1)printf("棧滿!n");/棧滿不能入棧return S

24、;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->top.month=k3;S->aS->top.day=k4;printf("該商品的貨架滿了!n");printf("此時該商品的貨架上共有%d個商品n

25、n",S->top+1);return S;/倒貨Stack *outstack(Stack *S,Stack *L)L->top+;L->aL->top=S->aS->top;S->top-;printf("此時的棧頂數(shù)為:%dn",S->top);printf("倒貨一次!nn");return L;/補貨void backstack(Stack *S,int x)int i,ii;int temp;char k1;/儲存商品名int k2,k3,k4;/儲存生產(chǎn)日期分別對應年月日Stack

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

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

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

29、->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)當天日期if(k4<=S->aS->top.day)/若生產(chǎn)當天日期要補上貨的比貨架上的早或是相同則直接上貨否則要倒貨重新上

30、貨架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/倒貨L=outstack(S,L);if(k2>S->aS->top.year)/此時生產(chǎn)年份要補上貨架的比貨

31、架上的近 L=outstack(S,L);/倒貨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("補貨成功第%d件!n",i);printf("此時的棧頂數(shù)為:%dn",S->top);while(L->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); int x,i;fflush(stdin);dofflush(stdin);scanf("%d",&x);if(x>max)

溫馨提示

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

評論

0/150

提交評論