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

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

举报
开通vip

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

算法与数据结构的商品货架管理课程设计报告(还有程序源代码)
..福建 工程 路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理 学院课程设计课程:算法与数据结构题目:商品货架管理专业:计算机类班级:1102座号:3110307201姓名:郑桂萍2012年6月26日..一、要解决的问题商店货架以栈的方式摆放商品。商品货架可以看成一个栈,栈顶商品的生产日期最早,栈底商品的生产日期最近。生产日期越接近的越靠栈底,出货时从栈顶取货。一天营业结束,如果货架不满,则需上货。入货直接将商品摆放到货架上,则会使生产日期越近的商品越靠近栈顶。这样就需要倒货架,使生产日期越近的越靠近栈底。请编写程序模拟商品销售,上架倒货架等操作。〔设有5种商品,每种商品至少有商品名和生产日期两个属性二、算法基本思想描述:一天营业的开始,首先店主要把各个商品货架〔栈上满货物。商店内总共有5种商品,商品名为:a,b,c,d,e。一一将每个商品的货架上满货物。接着一天的营业结束了,店主要将今天有销售出去的商品所对应的货架补满。让店主输入第一种需要补货的商品的商品名和今天销售出去的数量。然后,输入要补上货架的商品名和生产日期并将要补上货架的商品与在货架上未销售出去的货物进行生产日期的比较。若是要补上货架的货物日期比较早就直接上货架。否则进行倒货再补货,这样就能将日期比较近的放在栈底。用另外申请的一个空栈来存储倒出的货物。第一种商品补完货后,再问店主是否还有其他商品需要补货。如需补货按第一种商品补货的程序来进行。以此类推进行补货。三、设计1.数据结构的设计〔1商品信息:typedefstruct{charb;//存储商品名//商品日期年、月、日intyear;intmonth;intday;}Data;〔2商品货架〔栈#definemax5typedefstruct{Dataa[max];//0为栈底位置inttop;//栈顶}Stack;〔3商品种类:Stack*s[5];//5种商品2.算法设计:〔1初始化空栈:利用for循环为每个〔商品货架栈申请空间,并进行判断是否有申请到空间,若没有申请到空间就输出提示"空间不足!",若是有申请到空间,top指向栈顶,初始值为-1,栈底是0的位置。〔2上货的算法设计:先定义四个变量分别是字符型的k1,整型的k2,k3,k4用来存储商品名和商品的生产日期,再赋值给栈元素的各个属性,即将商品上货。再赋值前先判断top是否是最大值,若是就输出提示"栈满"并结束该上货程序。当货物上满后输出提示 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示商品的货架上满了并输出此时货架上货物的数量,利用for循环进行下一个商品的上货,直至将5个商品的货架全部上满。〔3出货〔即当天的销售的算法设计:一天的营业结束了,店主需要为有销售出去的商品进行补货。因此需要知道是哪个商品有销售出去以及其销售的数量,让店主输入今天有销售出去的一种商品的商品名,若是店主输入此商店没有的商品名就输出提示,并让店主再次输入商品名,接着要输入销售的数量,程序要对销售的数量进行判断是否超出了栈的最大值〔即货架上所能容纳货物的最大数量,若是超出输出提示,并请店主再次输入销售的数量。〔4补货的算法设计:在此子函数中先定义四个变量分别是字符型的k1,整型的k2,k3,k4用来存储要补上货架的商品名和商品的生产日期,另外再初始化一个空栈L,用来存储倒出来的货物。将要补上货架的商品的生产日期与在货架上未销售出去的商品进行比较。若是日期比较早则可直接上货,否则要进行倒货再上货。每入一件货物都要进行这样的程序。〔5倒货:为避免发生入货直接将商品摆放到货架上,会使生产日期越近的商品越靠近栈顶这样的事发生,因此需要倒货。将比要补上货架的货物的生产日期要早的货物倒出放入栈L,直至将要补上货架的货物入货,则可再把栈L内的货物再放回原栈。〔6将货架上摆放的货物打印出来:补货完成后,要将各个商品栈内的货物的商品名以及其生产日期打印出来,这样可以检验补货时是否有将日期比较近的放在栈底。〔7模块结构及功能:1intmain//主程序2Stack*initstack<>//初始化空栈3Stack*onput//上货4void*outpush//出货5voidbackstack//补货6Stack*outstack//倒货7voidPrint//打印商品栈内货物信息〔8主要模块算法描述:上货:Stack*onput{intj;chark1;//储存商品名intk2,k3,k4;//储存商品生产日期年、月、日for{iftop==max-1>//判断栈满{printf<"栈满!\n">;//栈满不能入栈returnS;}S->top++;printf<"栈数%d",S->top>;//打印货物所在的栈数//输入商品名和生产日期fflush;//清除缓存区scanf<"%c%d/%d/%d",&k1,&k2,&k3,&k4>;//输入商品信息S->a[S->top].b=k1;S->a[S->top].year=k2;S->a[S->top].month=k3;S->a[S->top].day=k4;}printf<"该商品的货架满了!\n">;printf<"此时该商品的货架上共有%d个商品\n\n",S->top+1>;returnS;}出货://出货void*outpush{printf<"请店主输入今天%c这个商品销售出去的数量:",S->a[S->top].b>;intx,i;fflush;//清除缓存区do{fflush;scanf<"%d",&x>;ifmax>printf<"该货架上没有这么多商品!请重输!\n">;}whilemax>;forS->top--;printf<"此时%c这个商品的货架的数量剩下%d件需要补上货架的数量为%d\n\n",S->a[S->top].b,S->top+1,x>;//补货backstack;}补货://补货voidbackstack{inti,ii;inttemp;chark1;//储存商品名intk2,k3,k4;//储存生产日期分别对应年月日Stack*L;L=initstack<>;//重新申请一个空栈用来倒货时存放货物printf<"请输入要补上货架的商品名<一个字符>空一格并输入该商品生产日期<年/月/日>每上货一件以回车键结束:\n">;for{//输入商品名和生产日期fflush;//清除缓存区scanf<"%c%d/%d/%d",&k1,&k2,&k3,&k4>;iftop==-1>//此时货架上无商品可以直接上货{S->top++;S->a[S->top].b=k1;S->a[S->top].year=k2;S->a[S->top].month=k3;S->a[S->top].day=k4;printf<"补货成功第%d件!\n",i>;printf<"此时的栈顶数为:%d\n",S->top>;}else{ifa[S->top].year>//若生产年份要补上货架的比货架上的早则直接上货架{S->top++;S->a[S->top].b=k1;S->a[S->top].year=k2;S->a[S->top].month=k3;S->a[S->top].day=k4;printf<"补货成功第%d件!\n",i>;printf<"此时的栈顶数为:%d\n",S->top>;temp=1;}else{fortop;ii>-1&&S->top!=-1;ii-->{temp=0;//用来标记是否有货物上架ifa[S->top].year>//若生产年份要补上货架的与货架上的一样则比较月份{ifa[S->top].month>//若生产月份要补上货的比货架上的早则直接上货{S->top++;S->a[S->top].b=k1;S->a[S->top].year=k2;S->a[S->top].month=k3;S->a[S->top].day=k4;printf<"补货成功第%d件!\n",i>;printf<"此时的栈顶数为:%d\n",S->top>;temp=1;ifbreak;}else{ifa[S->top].month>//若生产月份要补上货架的与货架上的一样则比较生产当天日期{ifa[S->top].day>//若生产当天日期要补上货的比货架上的早或是相同则直接上货否则要倒货重新上货架{S->top++;S->a[S->top].b=k1;S->a[S->top].year=k2;S->a[S->top].month=k3;S->a[S->top].day=k4;printf<"补货成功第%d件!\n",i>;printf<"此时的栈顶数为:%d\n",S->top>;temp=1;ifbreak;}else{//倒货L=outstack;}}else{//倒货L=outstack;}}}ifS->a[S->top].year>////此时生产年份要补上货架的比货架上的近{L=outstack;//倒货}}if{S->top++;S->a[S->top].b=k1;S->a[S->top].year=k2;S->a[S->top].month=k3;S->a[S->top].day=k4;printf<"补货成功第%d件!\n",i>;printf<"此时的栈顶数为:%d\n",S->top>;}whiletop>-1>//将存储在L栈中的商品上架{S->top++;S->a[S->top]=L->a[L->top--];}L=initstack<>;}}}printf<"补货完成!!\n\n">;Print;}倒货://倒货Stack*outstack{L->top++;L->a[L->top]=S->a[S->top];S->top--;printf<"此时的栈顶数为:%d\n",S->top>;printf<"倒货一次!\n\n">;returnL;}四、源程序清单:#include#include#include#definemax5typedefstruct{charb;//存储商品名//商品日期年、月、日intyear;intmonth;intday;}Data;typedefstruct{Dataa[max];//0为栈底位置inttop;//栈顶}Stack;//初始化空栈Stack*initstack<>{Stack*S;S=malloc>;//申请空间//判断是否申请到栈空间if{printf<"空间不足!\n">;returnNULL;}else{S->top=-1;returnS;}}//将货架上摆放的货物打印出来voidPrint{printf<"%c这个商品的货架上摆放了%d个货物:\n",S->a[S->top].b,S->top+1>;whiletop>-1>{printf<"%c%d/%d/%d\n",S->a[S->top].b,S->a[S->top].year,S->a[S->top].month,S->a[S->top].day>;S->top--;}}//上货Stack*onput{intj;chark1;intk2,k3,k4;for{iftop==max-1>{printf<"栈满!\n">;//栈满不能入栈returnS;}S->top++;printf<"栈数%d",S->top>;//输入商品名和生产日期fflush;//清除缓存区scanf<"%c%d/%d/%d",&k1,&k2,&k3,&k4>;S->a[S->top].b=k1;S->a[S->top].year=k2;S->a[S->top].month=k3;S->a[S->top].day=k4;}printf<"该商品的货架满了!\n">;printf<"此时该商品的货架上共有%d个商品\n\n",S->top+1>;returnS;}//倒货Stack*outstack{L->top++;L->a[L->top]=S->a[S->top];S->top--;printf<"此时的栈顶数为:%d\n",S->top>;printf<"倒货一次!\n\n">;returnL;}//补货voidbackstack{inti,ii;inttemp;chark1;//储存商品名intk2,k3,k4;//储存生产日期分别对应年月日Stack*L;L=initstack<>;//重新申请一个空栈用来倒货时存放货物printf<"请输入要补上货架的商品名<一个字符>空一格并输入该商品生产日期<年/月/日>每上货一件以回车键结束:\n">;for{//输入商品名和生产日期fflush;//清除缓存区scanf<"%c%d/%d/%d",&k1,&k2,&k3,&k4>;iftop==-1>//此时货架上无商品可以直接上货{S->top++;S->a[S->top].b=k1;S->a[S->top].year=k2;S->a[S->top].month=k3;S->a[S->top].day=k4;printf<"补货成功第%d件!\n",i>;printf<"此时的栈顶数为:%d\n",S->top>;}else{ifa[S->top].year>//若生产年份要补上货架的比货架上的早则直接上货架{S->top++;S->a[S->top].b=k1;S->a[S->top].year=k2;S->a[S->top].month=k3;S->a[S->top].day=k4;printf<"补货成功第%d件!\n",i>;printf<"此时的栈顶数为:%d\n",S->top>;temp=1;}else{fortop;ii>-1&&S->top!=-1;ii-->{temp=0;//用来标记是否有货物上架ifa[S->top].year>//若生产年份要补上货架的与货架上的一样则比较月份{ifa[S->top].month>//若生产月份要补上货的比货架上的早则直接上货{S->top++;S->a[S->top].b=k1;S->a[S->top].year=k2;S->a[S->top].month=k3;S->a[S->top].day=k4;printf<"补货成功第%d件!\n",i>;printf<"此时的栈顶数为:%d\n",S->top>;temp=1;ifbreak;}else{ifa[S->top].month>//若生产月份要补上货架的与货架上的一样则比较生产当天日期{ifa[S->top].day>//若生产当天日期要补上货的比货架上的早或是相同则直接上货否则要倒货重新上货架{S->top++;S->a[S->top].b=k1;S->a[S->top].year=k2;S->a[S->top].month=k3;S->a[S->top].day=k4;printf<"补货成功第%d件!\n",i>;printf<"此时的栈顶数为:%d\n",S->top>;temp=1;ifbreak;}else{//倒货L=outstack;}}else{//倒货L=outstack;}}}ifS->a[S->top].year>////此时生产年份要补上货架的比货架上的近{L=outstack;//倒货}}if{S->top++;S->a[S->top].b=k1;S->a[S->top].year=k2;S->a[S->top].month=k3;S->a[S->top].day=k4;printf<"补货成功第%d件!\n",i>;printf<"此时的栈顶数为:%d\n",S->top>;}whiletop>-1>//将存储在L栈中的商品上架{S->top++;S->a[S->top]=L->a[L->top--];}L=initstack<>;}}}printf<"补货完成!!\n\n">;Print;}//出货void*outpush{printf<"请店主输入今天%c这个商品销售出去的数量:",S->a[S->top].b>;intx,i;fflush;do{fflush;scanf<"%d",&x>;ifmax>printf<"该货架上没有这么多商品!请重输!\n">;}whilemax>;forS->top--;printf<"此时%c这个商品的货架的数量剩下%d件需要补上货架的数量为%d\n\n",S->a[S->top].b,S->top+1,x>;//补货backstack;}intmain{Stack*s[5];//5种商品inti;printf<"计算机类1102班郑桂萍__3110307201\n\n">;printf<"商店共有5种商品,分别是a,b,c,d,e\n\n">;for{s[i]=initstack<>;//初始化栈printf<"请输入要上货的第%d种商品名<一个字符>空一格并输入该商品生产日期<年/月/日>每上货一件以回车键结束:\n",i+1>;s[i]=onput;//将商品入栈〔上货}charc,yes_no;do{fflush;printf<"请店主输入今天有销售出去一个商品的商品名:\n">;fflush;scanf<"%c",&c>;switch{case'a':outpush;break;case'b':outpush;break;case'c':outpush;break;case'd':outpush;break;case'e':outpush;break;default:printf<"商店无%c此商品!输入错误!\n",c>;}do{fflush;printf<"请问店主还有销售出去的商品么?如果有请按Y,否则按N\n">;yes_no=getchar<>;if{printf<"输入错误!!!\n\n">;}}while;}while;return0;}五、测试数据及测试结果:测试数据:5个商品货架上货:a2012/1/1a2012/1/1a2011/2/2a2011/1/1a2011/1/1b2012/2/2b2012/2/2b2012/2/2b2012/2/2b2012/2/2c2012/2/2c2012/2/2c2012/2/2c2012/2/2c2012/2/2d2012/2/2d2012/2/2d2012/2/2d2012/2/2d2012/2/2e2012/2/2e2012/2/2e2012/2/2e2012/2/2e2012/2/出货:今天有销售出去的商品的商品名:a销售数量:2补货:a2014/2/2a2009/12/2测试结果:商品栈内的货物信息:a2009/12/2a2011/2/2a2012/1/1a2012/1/1a2014/2/2是否还有需要补货的商品:N六、课程设计 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf 心得体会 决胜全面小康心得体会学党史心得下载党史学习心得下载军训心得免费下载党史学习心得下载 :通过此次课程设计,我更深刻地体会到编写一个程序之前首先要分析它,知道它的功能,要做什么等等,如何实现它,这些需要我们认真的思考,分析。划分整体成各个模块,再逐一的实现它是一种很好的解决方法。在调试程序的过程中我们需要细心和耐心。
本文档为【算法与数据结构的商品货架管理课程设计报告(还有程序源代码)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: ¥22.0 已有0 人下载
最新资料
资料动态
专题动态
机构认证用户
爱分享
通信工程;电信工程;电子工程;光线传输系统;移动通信;数字传输设备;信息网络及传真;工程监理;弱电设计安装;设备安装;
格式:doc
大小:52KB
软件:Word
页数:14
分类:建设工程
上传时间:2022-01-30
浏览量:1