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

下載本文檔

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

文檔簡介

1、-PAGE . z*2014-2015學(xué)年 第一學(xué)期1308010108數(shù)據(jù)構(gòu)造課程設(shè)計報告題目:基于棧的商品貨架管理的設(shè)計專業(yè):計算機科學(xué)與技術(shù)班級:*:指導(dǎo)教師:成績:計算機與信息工程系2014年 11 月 22日-. z目 錄TOC o 1-3 h u TOC * MERGEFORMAT 1設(shè)計分析 PAGEREF _Toc25469 2 1.1設(shè)計容 PAGEREF _Toc25444 2 1.2 設(shè)計任務(wù)及具體要求 PAGEREF _Toc11038 22概要設(shè)計 PAGEREF _Toc10390 2 2.1系統(tǒng)的功能簡介 PAGEREF _Toc29035 2 2.2 總體程序框

2、圖 PAGEREF _Toc21921 33設(shè)計過程和程序代碼 PAGEREF _Toc9612 3 3.1數(shù)據(jù)構(gòu)造的設(shè)計 PAGEREF _Toc22037 3 3.1.1商品信息 PAGEREF _Toc25038 3 3.1.2商品貨架棧3 3.1.3商品種類 PAGEREF _Toc29817 4 3.2算法設(shè)計 PAGEREF _Toc5753 4 3.2.1初始化空棧 PAGEREF _Toc11358 4 3.2.2上貨的算法設(shè)計 PAGEREF _Toc28533 4 3.2.3出貨即當天的銷售的算法設(shè)計 PAGEREF _Toc28301 4 3.2.4補貨的算法設(shè)計4 3.

3、2.5倒貨4 3.2.6將貨架上擺放的貨物打印出來 PAGEREF _Toc24185 5 3.2.7模塊構(gòu)造及功能 PAGEREF _Toc29943 5 3.2.8主要模塊算法描述54運行結(jié)果95小結(jié) PAGEREF _Toc24156 10參考文獻11附錄:源程序12-. z1設(shè)計分析1.1設(shè)計容商店貨架以棧的方式擺放商品。商品貨架可以看成一個棧,棧頂商品的生產(chǎn)日期最早,棧底商品的生產(chǎn)日期最近。生產(chǎn)日期越接近的越靠棧底,出貨時從棧頂取貨。一天營業(yè)完畢,如果貨架不滿,則需上貨。入貨直接將商品擺放到貨架上,則會使生產(chǎn)日期越近的商品越靠近棧頂。這樣就需要倒貨架,使生產(chǎn)日期越近的越靠近棧底。請編

4、寫程序模擬商品銷售,上架倒貨架等操作。設(shè)有5種商品,每種商品至少有商品名和生產(chǎn)日期兩個屬性1.2設(shè)計任務(wù)及具體要求設(shè)計任務(wù):一天營業(yè)的開場,首先店主要把各個商品貨架棧上滿貨物。商店總共有5種商品,商品名為:a,b,c,d,e。補貨時,店主輸入第一種需要補貨的商品的商品名和今天銷售出去的數(shù)量。然后,輸入要補上貨架的商品名和生產(chǎn)日期并將要補上貨架的商品與在貨架上未銷售出去的貨物進展生產(chǎn)日期的比擬。假設(shè)是要補上貨架的貨物日期比擬早就直接上貨架。否則進展倒貨再補貨,這樣就能將日期比擬近的放在棧底。用另外申請的一個空棧來存儲倒出的貨物。第一種商品補完貨后,再問店主是否還有其他商品需要補貨。如需補貨按第一

5、種商品補貨的程序來進展,以此類推進展補貨。要求:明確課程設(shè)計的目的,能根據(jù)課程設(shè)計的要求,查閱相關(guān)文獻,為完成設(shè)計準備必要的知識,提高撰寫技術(shù)文檔的能力。并學(xué)習(xí)了解C語言程序設(shè)計的要求和方法,利用數(shù)據(jù)構(gòu)造的相關(guān)算法和原理進展系統(tǒng)的設(shè)計分析,提高計算機語言編程的能力。2概要設(shè)計2.1系統(tǒng)的功能簡介商品貨架管理系統(tǒng)可以看成是棧的設(shè)計管理,棧頂?shù)漠a(chǎn)品的日期最早,棧底的商品日期最近,上貨時需要進展倒貨架以實現(xiàn)該功能。通過基于棧的原理實現(xiàn)設(shè)計商品貨架管理系統(tǒng),使得該系統(tǒng)的主要功能是實現(xiàn)對商品貨架中產(chǎn)品進展合理有效的管理的實現(xiàn),該系統(tǒng)包括對商品貨架進展商品的上貨、出貨、補貨、到貨等功能,實現(xiàn)對商品貨架信息

6、上貨、出貨、補貨功能的管理。2.2 總體程序框圖主函數(shù)出貨上貨棧初始化補貨打印棧中貨物信息卸貨圖2.2程序的總體框圖3設(shè)計過程和設(shè)計代碼3.1數(shù)據(jù)構(gòu)造的設(shè)計3.1.1商品信息typedef structchar b;/存儲商品名/商品日期年、月、日int year;int month;int day;Data;3.1.2商品貨架棧#define ma* 5typedef structData ama*;/0為棧底位置int top;/棧頂Stack;3.1.3商品種類Stack *s5;/5種商品3.2算法設(shè)計3.2.1初始化空棧利用for循環(huán)為每個商品貨架棧申請空間,并進展判斷是否有申請到空

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

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

9、2.5倒貨為防止發(fā)生入貨直接將商品擺放到貨架上,會使生產(chǎn)日期越近的商品越靠近棧頂這樣的事發(fā)生,因此需要倒貨。將比要補上貨架的貨物的生產(chǎn)日期要早的貨物倒出放入棧L,直至將要補上貨架的貨物入貨,則可再把棧L的貨物再放回原棧。3.2.6將貨架上擺放的貨物打印出來補貨完成后,要將各個商品棧的貨物的商品名以及其生產(chǎn)日期打印出來,這樣可以檢驗補貨時是否有將日期比擬近的放在棧底。3.2.7模塊構(gòu)造及功能int main(void) /主程序Stack *initstack() /初始化空棧Stack *onput(Stack *S) /上貨void *outpush(Stack *S) /出貨void ba

10、ckstack(Stack *S,int *) /補貨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;/儲存商品生產(chǎn)日期年、月、日for(j=0;jtop=ma*-1)/判斷棧滿printf(棧滿!n);/棧滿不能入棧return S;S-top+;printf(棧數(shù)%d ,S-top);/打印貨物所在的棧數(shù)/輸入商品名和生產(chǎn)日期fflush(stdin);/去除緩

11、存區(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(Stack *S)printf(請店主輸入今天%c這個商品銷售出去的數(shù)量:,S-aS-top.b); int *,i;fflush(stdin);/去除緩存區(qū)dofflush(stdin);scanf(%d,&*);if

12、(*ma*)printf(該貨架上沒有這么多商品!請重輸!n);while(*ma*);for(i=1;itop-;printf(此時%c這個商品的貨架的數(shù)量剩下%d件需要補上貨架的數(shù)量為%dnn,S-aS-top.b,S-top+1,*);backstack(S,*);/補貨3補貨void backstack(Stack *S,int *)int i,ii;int temp;char k1;/儲存商品名int k2,k3,k4;/儲存生產(chǎn)日期分別對應(yīng)年月日Stack *L;L=initstack();/重新申請一個空棧用來倒貨時存放貨物printf(請輸入要補上貨架的商品名(一個字符)空一格

13、并輸入該商品生產(chǎn)日期(年/月/日)每上貨一件以回車鍵完畢:n);for(i=1;itop=-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(k2aS-top.year)/假設(shè)生產(chǎn)年份要補上貨架的比貨架上的早則直接上貨架S-top+;S-aS-top.b=k1;S-aS-top.year=k2;S-aS-top.month=k3;S-aS-top.day=k4;

14、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)/假設(shè)生產(chǎn)年份要補上貨架的與貨架上的一樣則比擬月份if(k3aS-top.month) /假設(shè)生產(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(此時的棧

15、頂數(shù)為:%dn,S-top);temp=1;if(temp=1)break;elseif(k3=S-aS-top.month)/假設(shè)生產(chǎn)月份要補上貨架的與貨架上的一樣則比擬生產(chǎn)當天日期if(k4aS-top.day)/假設(shè)生產(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;elseL=outst

16、ack(S,L);/倒貨elseL=outstack(S,L);/倒貨if(k2S-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(補貨成功第%d件!n,i);printf(此時的棧頂數(shù)為:%dn,S-top);while(L-top-1)/將存儲在L棧中的商品上架S-top+;S-aS-top=L-aL-top-;L=initstack();printf(補貨完成

17、!nn);Print(S);4倒貨: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;4運行結(jié)果程序測試數(shù)據(jù)如下:上貨:圖1上貨程序測試(2)補貨及出貨圖2補貨及出貨測試5小結(jié)通過此次課程設(shè)計,我更深刻地體會到編寫一個程序之前首先要分析它,知道它的功能,要做什么等等,如何實現(xiàn)它,這些需要我們認真的思考,分析。劃分整體成各個模塊,再逐一的實現(xiàn)它是一種很好的解決方法。在調(diào)試程序的過程中我們需要細心和耐心。通過這次商

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

19、計,我對所學(xué)的數(shù)據(jù)構(gòu)造C語言版和各種編程語言都有了一個全新的認識。我也會積極吸取本次課程設(shè)計的經(jīng)歷,繼續(xù)研究數(shù)據(jù)構(gòu)造和所學(xué)的各種編程語言。參考文獻1小紅等. C語言大學(xué)實用教程.第二版M. :工業(yè),2008.2吳文虎. 程序設(shè)計根底第二版M. :清華大學(xué),2004.3譚浩強. C程序設(shè)計教程M.:清華大學(xué),2008. 4嚴蔚敏、吳偉民著.數(shù)據(jù)構(gòu)造C語言版.:清華大學(xué),2007附錄:源程序#include#include#include#define ma* 5typedef structchar b;/存儲商品名/商品日期年、月、日int year;int month;int day;Data

20、;typedef structData ama*;/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-top.b,S-top+1); while(S-top-1)printf(%c%d/%d/%dn,

21、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;jtop=ma*-1)printf(棧滿!n);/棧滿不能入棧return S;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=

22、k3;S-aS-top.day=k4;printf(該商品的貨架滿了!n);printf(此時該商品的貨架上共有%d個商品nn,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 *)int i,ii;int temp;char k1;/儲存商品名int k2,k3,k4;/儲存生產(chǎn)日期分別對應(yīng)年月日Stack

23、*L;L=initstack();/重新申請一個空棧用來倒貨時存放貨物printf(請輸入要補上貨架的商品名(一個字符)空一格并輸入該商品生產(chǎn)日期(年/月/日)每上貨一件以回車鍵完畢:n);for(i=1;itop=-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(k2aS-top.year)/假設(shè)生產(chǎn)年份要補上貨架的比貨架上的早則直接上貨架S-top+;S-

24、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;/用來標記是否有貨物上架if(k2=S-aS-top.year)/假設(shè)生產(chǎn)年份要補上貨架的與貨架上的一樣則比擬月份if(k3aS-top.month) /假設(shè)生產(chǎn)月份要補上貨的比貨架上的早則直接上貨S-top+;S-aS-top.b=k1;S-aS-top.year=k2;S-a

25、S-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)/假設(shè)生產(chǎn)月份要補上貨架的與貨架上的一樣則比擬生產(chǎn)當天日期if(k4aS-top.day)/假設(shè)生產(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,

26、i);printf(此時的棧頂數(shù)為:%dn,S-top);temp=1;if(temp=1)break;else/倒貨L=outstack(S,L);else/倒貨L=outstack(S,L);if(k2S-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(補貨成功第%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

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論