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

上传人:g****s 文档编号:86012213 上传时间:2023-04-13 格式:PDF 页数:30 大小:1.25MB
返回 下载 相关 举报
算法与数据结构的商品货架管理课程设计报告(还有程序源代码).pdf_第1页
第1页 / 共30页
算法与数据结构的商品货架管理课程设计报告(还有程序源代码).pdf_第2页
第2页 / 共30页
点击查看更多>>
资源描述

《算法与数据结构的商品货架管理课程设计报告(还有程序源代码).pdf》由会员分享,可在线阅读,更多相关《算法与数据结构的商品货架管理课程设计报告(还有程序源代码).pdf(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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

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

3、否还有其他商品需要补货。如需补货按第一种商品补货的程序来进行。以此类推进行补货。三、设计 1.数据结构的设计(1)商品信息:typedef struct 精品 感谢下载载 char b;/存储商品名 /商品日期年、月、日 int year;int month;int day;Data;(2)商品货架(栈)#define max 5 typedef struct Data amax;/0 为栈底位置 int top;/栈顶 Stack;(3)商品种类:Stack*s5;/5 种商品 2.算法设计:(1)初始化空栈:利用 for 循环为每个(商品货架)栈申请空间,并进行判断是否有申请到空间,若没有

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

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

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

7、ck*onput(Stack*S)/上货 4)void*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;

8、S-top+;printf(栈数%d,S-top);/打印货物所在的栈数 /输入商品名和生产日期 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 这个商品销

9、售出去的数量:,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);补货:/补货 精品 感谢下载载 void backstack(Stack*S,int x)int i,ii;int temp;char k1;/储存商品名

10、 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-top.month=k3;精品 感谢下载载 S-aS-top.day=k4;printf(补货成功第%d 件!n,i);printf(此时的栈顶数为:%dn,S-top);else if(k

11、2aS-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-)temp=0;/用来标记是否有货物上架 精品 感谢下载载 if(k2=S-aS-top.year)/若生产年份要补上货架的与货架上的一样则比较月份 if(k3aS-top.month)/若生产月份

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

13、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)/此时生产年份要补上货架的比货架上的近 L=outstack(S,L);/倒货 if(temp=0)S-top+;S-aS-top.b=k1;S-aS-top.year=k2;S-aS-top.mon

14、th=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);倒货:/倒货 Stack*outstack(Stack*S,Stack*L)L-top+;L-aL-top=S-aS-top;S-top-;printf(此时的栈顶数为:%dn,S-top);printf(倒货一次!nn);return L;精品 感谢

15、下载载 四、源程序清单:#include#include#include#define max 5 typedef struct char b;/存储商品名 /商品日期年、月、日 int year;int month;int day;Data;typedef struct Data amax;/0 为栈底位置 int top;/栈顶 Stack;/初始化空栈 Stack*initstack()精品 感谢下载载 Stack*S;S=(Stack*)malloc(sizeof(Stack);/申请空间 /判断是否申请到栈空间 if(!S)printf(空间不足!n);return NULL;els

16、e S-top=-1;return S;/将货架上摆放的货物打印出来 void Print(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)int j;char k1;int k2,k3,k4;for(j=0;jtop=max-1)printf(栈满!n);

17、/栈满不能入栈 return S;S-top+;printf(栈数%d,S-top);/输入商品名和生产日期 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;/倒货 Stack*outstack(Stack*S,Stack*L)L-top+;L-aL-top=S

18、-aS-top;S-top-;printf(此时的栈顶数为:%dn,S-top);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;itop=-1)/此时货架上无商品可以直接上

19、货 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);else if(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);te

20、mp=1;else for(ii=S-top;ii-1&S-top!=-1;ii-)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;

21、else if(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=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=ou

22、tstack(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(补货成功第%d 件!n,i);printf(此时的栈顶数为:%dn,S-top);while(L-top-1)/将存储在 L 栈中的商品上架 精品 感谢下载载 S-top+;S-aS-top=L-aL-top-;L=initstack();printf(补货完成

23、!nn);Print(S);/出货 void*outpush(Stack*S)printf(请店主输入今天%c 这个商品销售出去的数量:,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)

24、Stack*s5;/5 种商品 int i;printf(计算机类 1102 班 郑桂萍 学号:3110307201nn);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;do fflush(stdin);printf(请店主输入今天有销售出去一个商品的商品名:n);fflush(

25、stdin);scanf(%c,&c);switch(c)case a:outpush(s0);break;case b:outpush(s1);break;case c:outpush(s2);break;case d:outpush(s3);break;精品 感谢下载载 case e:outpush(s4);break;default:printf(商店无%c 此商品!输入错误!n,c);do fflush(stdin);printf(请问店主还有销售出去的商品么?如果有请按Y,否则按Nn);yes_no=getchar();if(yes_no!=Y&yes_no!=N)printf(输入

26、错误!nn);while(yes_no!=Y&yes_no!=N);while(yes_no=Y);return 0;五、测试数据及测试结果:测试数据:5 个商品货架上货:精品 感谢下载载 a 2012/1/1 a 2012/1/1 a 2011/2/2 a 2011/1/1 a 2011/1/1 b 2012/2/2 b 2012/2/2 b 2012/2/2 b 2012/2/2 b 2012/2/2 c 2012/2/2 c 2012/2/2 c 2012/2/2 c 2012/2/2 c 2012/2/2 d 2012/2/2 d 2012/2/2 d 2012/2/2 d 2012/

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

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 文案大全

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁