算法与数据结构的商品货架管理课程设计报告(还有程序源代码).doc

上传人:scccc 文档编号:14450094 上传时间:2022-02-06 格式:DOC 页数:16 大小:149.50KB
返回 下载 相关 举报
算法与数据结构的商品货架管理课程设计报告(还有程序源代码).doc_第1页
第1页 / 共16页
算法与数据结构的商品货架管理课程设计报告(还有程序源代码).doc_第2页
第2页 / 共16页
算法与数据结构的商品货架管理课程设计报告(还有程序源代码).doc_第3页
第3页 / 共16页
算法与数据结构的商品货架管理课程设计报告(还有程序源代码).doc_第4页
第4页 / 共16页
亲,该文档总共16页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《算法与数据结构的商品货架管理课程设计报告(还有程序源代码).doc》由会员分享,可在线阅读,更多相关《算法与数据结构的商品货架管理课程设计报告(还有程序源代码).doc(16页珍藏版)》请在三一文库上搜索。

1、精品文档福建工程学院课程设计课程:算法与数据结构题目:商品货架管理专业:计算机类班级:1102座号:3110307201姓名:郑桂萍2012年6月26日.精品文档一、要解决的问题商店货架以栈的方式摆放商品。商品货架可以看成一个栈,栈顶商品的生产日期最早,栈底商品的生产日期最近。 生产日期越接近的越靠栈底,出货时从栈顶取货。一天营业结束,如果货架不满,则需上货。入货直接将商品摆放到货架上,则会使生产日期越近的商品越靠近栈顶。这样就需要倒货架, 使生产日期越近的越靠近栈底。请编写程序模拟商品销售,上架倒货架等操作。(设有 5 种商品,每种商品至少有商品名和生产日期两个属性)二、算法基本思想描述:一

2、天营业的开始,首先店主要把各个商品货架(栈)上满货物。商店内总共有 5 种商品,商品名为: a,b,c, d, e。一一将每个商品的货架上满货物。接着一天的营业结束了, 店主要将今天有销售出去的商品所对应的货架补满。 让店主输入第一种需要补货的商品的商品名和今天销售出去的数量。 然后,输入要补上货架的商品名和生产日期并将要补上货架的商品与在货架上未销售出去的货物进行生产日期的比较。 若是要补上货架的货物日期比较早就直接上货架。 否则进行倒货再补货, 这样就能将日期比较近的放在栈底。 用另外申请的一个空栈来存储倒出的货物。第一种商品补完货后,再问店主是否还有其他商品需要补货。如需补货按第一种商品

3、补货的程序来进行。以此类推进行补货。三、设计1. 数据结构的设计( 1)商品信息:typedef structchar b;/存储商品名/商品日期年、月、日int year;int month;int day;Data;( 2)商品货架(栈)#define max 5typedef structData amax;/0 为栈底位置int top;/栈顶Stack;( 3)商品种类:Stack *s5;/5 种商品2.算法设计:(1)初始化空栈:利用 for 循环为每个(商品货架)栈申请空间,并进行判断是否有申请到空间,若没有申请到空间就输出提示 “空间不足!”,若是有申请到空间, top 指向

4、栈顶,初始值为 1,栈底是 0 的位置。( 2)上货的算法设计:.精品文档先定义四个变量分别是字符型的 k1,整型的 k2, k3,k4 用来存储商品名和商品的生产日期, 再赋值给栈元素的各个属性, 即将商品上货。 再赋值前先判断 top 是否是最大值,若是就输出提示“栈满”并结束该上货程序。当货物上满后输出提示表示商品的货架上满了并输出此时货架上货物的数量,利用 for 循环进行下一个商品的上货,直至将 5 个商品的货架全部上满。( 3)出货(即当天的销售)的算法设计:一天的营业结束了, 店主需要为有销售出去的商品进行补货。 因此需要知道是哪个商品有销售出去以及其销售的数量, 让店主输入今天

5、有销售出去的一种商品的商品名,若是店主输入此商店没有的商品名就输出提示, 并让店主再次输入商品名,接着要输入销售的数量, 程序要对销售的数量进行判断是否超出了栈的最大值(即货架上所能容纳货物的最大数量) ,若是超出输出提示,并请店主再次输入销售的数量。( 4)补货的算法设计:在此子函数中先定义四个变量分别是字符型的k1,整型的 k2,k3,k4 用来存储要补上货架的商品名和商品的生产日期,另外再初始化一个空栈L ,用来存储倒出来的货物。将要补上货架的商品的生产日期与在货架上未销售出去的商品进行比较。若是日期比较早则可直接上货,否则要进行倒货再上货。 每入一件货物都要进行这样的程序。( 5)倒货

6、:为避免发生 入货直接将商品摆放到货架上,会使生产日期越近的商品越靠近栈顶这样的事发生,因此需要倒货。将比要补上货架的货物的生产日期要早的货物倒出放入栈L,直至将要补上货架的货物入货,则可再把栈L 内的货物再放回原栈。( 6)将货架上摆放的货物打印出来:补货完成后,要将各个商品栈内的货物的商品名以及其生产日期打印出来,这样可以检验补货时是否有将日期比较近的放在栈底。( 7)模块结构及功能:主程序栈初始化上货出货补货倒货打印栈中货物信息1)int main(void)/主程序2)Stack *initstack()/初始化空栈3)Stack *onput(Stack *S)/上货4)void *

7、outpush(Stack *S)/出货5)void backstack(Stack *S,int x)/补货6)Stack *outstack(Stack *S,Stack *L)/ 倒货.精品文档7)void Print(Stack *S)/打印商品栈内货物信息( 8)主要模块算法描述:上货:Stack *onput(Stack *S)int j;char k1;/储存商品名int k2,k3,k4;/储存商品生产日期年、月、日for(j=0;jtop=max-1)/判断栈满printf(栈满! n);/栈满不能入栈return S;S-top+;printf(栈数 %d ,S-top);

8、/打印货物所在的栈数/ 输入商品名和生产日期fflush(stdin);/清除缓存区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;出货:/出货void *outpush(Stack *S)printf( 请店主输入今天 %c 这个商品销售出去的数量: ,S-aS-top.b); int x,i;

9、fflush(stdin);/ 清除缓存区dofflush(stdin);scanf(%d,&x);if(xmax)printf( 该货架上没有这么多商品!请重输!n);while(xmax);for(i=1;itop-;printf( 此时 %c 这个商品的货架的数量剩下%d 件需要补上货架的数量.精品文档为 %dnn,S-aS-top.b,S-top+1,x); /补货backstack(S,x);补货:/补货void backstack(Stack *S,int x)int i,ii;int temp;char k1;/储存商品名int k2,k3,k4;/ 储存生产日期分别对应年月日S

10、tack *L;L=initstack();/ 重新申请一个空栈用来倒货时存放货物printf( 请输入要补上货架的商品名( 一个字符 )空一格并输入该商品生产日期 (年/ 月/日 )每上货一件以回车键结束: 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( 此时的栈顶数为: %dn,S-top);elseif(k2aS-top.year)/ 若生产年份要补上货架

11、的比货架上的早则直接上货架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,S-top);temp=1;.精品文档elsefor(ii=S-top;ii-1&S-top!=-1;ii-)temp=0;/用来标记是否有货物上架if(k2=S-aS-top.year)/ 若生产年份要补上货架的与货架上的一样则比较月份if(k3aS-top.month) /若生产月份要补上货的比货架上的早则直接上货S-top+;S-

12、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,S-top);temp=1;if(temp=1)break;elseif(k3=S-aS-top.month)/ 若生产月份要补上货架的与货架上的一样则比较生产当天日期if(k4aS-top.day)/ 若生产当天日期要补上货的比货架上的早或是相同则直接上货否则要倒货重新上货架S-top+;S-aS-top.b=k1;S-aS-top.year=k2;S-aS-top.month

13、=k3;S-aS-top.day=k4;printf( 补货成功第 %d 件! n,i);printf( 此时的栈顶数为: %dn,S-top);temp=1;if(temp=1)break;else/倒货L=outstack(S,L);.精品文档else/倒货L=outstack(S,L);if(k2S-aS-top.year)/ 此时生产年份要补上货架的比货架上的近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( 补货成功第

14、 %d 件! n,i);printf( 此时的栈顶数为: %dn,S-top);while(L-top-1)/ 将存储在 L 栈中的商品上架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( 此时的栈顶数为: %dn,S-top);printf( 倒货一次! nn);return L;四、源程序清单:#include#include#include

15、#define max 5typedef 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;elseS-top=-1;return S;/将货架上摆放的货物打印出来void Print(Stack

16、*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-a S-top.day);S-top-;/上货Stack *onput(Stack *S)int j;char k1;int k2,k3,k4;for(j=0;jtop=max-1)printf( 栈满! n);/ 栈满不能入栈return S;S-top+;printf( 栈数 %d ,S-top);/输入商品名和生产日期ff

17、lush(stdin);/ 清除缓存区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;/倒货Stack *outstack(Stack *S,Stack *L)L-top+;L-aL-top=S-aS-top;S-top-;printf( 此时的栈顶数为: %dn,S-top);printf( 倒货一次!

18、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;itop=-1)/ 此时货架上无商品可以直接上货S-top+; S-aS-top.b=k1; S-aS-top.year=k2; S-aS-t

19、op.month=k3; S-aS-top.day=k4;printf( 补货成功第 %d 件! n,i);printf( 此时的栈顶数为: %dn,S-top);elseif(k2aS-top.year)/ 若生产年份要补上货架的比货架上的早则直接上货架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,S-top);temp=1;else.精品文档for(ii=S-top;ii-1&S-top!=-1;ii-

20、)temp=0;/用来标记是否有货物上架if(k2=S-aS-top.year)/ 若生产年份要补上货架的与货架上的一样则比较月份if(k3aS-top.month) /若生产月份要补上货的比货架上的早则直接上货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,S-top);temp=1;if(temp=1)break;elseif(k3=S-aS-top.month)/ 若生产月份要补上货架的与货架上的一样则

21、比较生产当天日期if(k4aS-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,S-top);temp=1;if(temp=1)break;else/倒货L=outstack(S,L);else.精品文档/倒货L=outstack(S,L);if(k2S-aS-top.year)/ 此时生产年份要补上货架的比货架上的

22、近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( 此时的栈顶数为: %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 这个商品

23、销售出去的数量:,S-aS-top.b);int x,i;fflush(stdin);do.精品文档fflush(stdin);scanf(%d,&x);if(xmax)printf( 该货架上没有这么多商品!请重输!n);while(xmax);for(i=1;itop-;printf( 此时 %c 这个商品的货架的数量剩下%d 件需要补上货架的数量为 %dnn,S-aS-top.b,S-top+1,x); /补货backstack(S,x);int main(void)Stack *s5;/5 种商品int i;printf( 计算机类 1102 班 郑桂萍 学号: 3110307201n

24、n); printf( 商店共有 5 种商品,分别是 a,b,c,d,enn); for(i=0;i5;i+)si=initstack();/ 初始化栈printf( 请输入要上货的第 %d 种商品名 (一个字符 )空一格并输入该商品生产日期 (年/ 月/日 )每上货一件以回车键结束: n,i+1);si=onput(si);/ 将商品入栈(上货)char c,yes_no;dofflush(stdin);printf( 请店主输入今天有销售出去一个商品的商品名:n);fflush(stdin);scanf(%c,&c);switch(c)case a:outpush(s0);break;ca

25、se b:outpush(s1);break;case c:outpush(s2);break;.精品文档case d:outpush(s3);break;case e:outpush(s4);break;default:printf( 商店无 %c 此商品!输入错误! n,c);dofflush(stdin);printf( 请问店主还有销售出去的商品么?如果有请按Y ,否则按 Nn);yes_no=getchar();if(yes_no!=Y&yes_no!=N)printf( 输入错误!nn);while(yes_no!=Y&yes_no!=N);while(yes_no=Y);retu

26、rn 0;五、测试数据及测试结果:测试数据:5 个商品货架上货 :a 2012/1/1a 2012/1/1a 2011/2/2a 2011/1/1a 2011/1/1b 2012/2/2b 2012/2/2b 2012/2/2b 2012/2/2b 2012/2/2c 2012/2/2c 2012/2/2c 2012/2/2c 2012/2/2c 2012/2/2d 2012/2/2.精品文档d 2012/2/2d 2012/2/2d 2012/2/2d 2012/2/2e 2012/2/2e 2012/2/2 e 2012/2/2 e 2012/2/2e 2012/2/出货:今天有销售出去的商品的商品名: a销售数量: 2 补货 :a 2014/2/2a 2009/12/2测试结果:商品栈内的货物信息:a 2009/12/2 a 2011/2/2 a 2012/1/1 a 2012/1/1 a 2014/2/2是否还有需要补货的商品:N六、课程设计总结及心得体会:通过此次课程设计, 我更深刻地体会到编写一个程序之前首先要分析它, 知道它的功能,要做什么等等,如何实现它,这些需要我们认真的思考,分析。划分整体成各个模块, 再逐一的实现它是一种很好的解决方法。 在调试程序的过程中我们需要细心和耐心。.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1