算法与数据结构的商品货架管理课程设计报告(还有程序源代码)_第1页
算法与数据结构的商品货架管理课程设计报告(还有程序源代码)_第2页
算法与数据结构的商品货架管理课程设计报告(还有程序源代码)_第3页
算法与数据结构的商品货架管理课程设计报告(还有程序源代码)_第4页
算法与数据结构的商品货架管理课程设计报告(还有程序源代码)_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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 5 typedef structData amax;/0 为栈底位置int top;/ 栈顶Stack;(3)商品种类:Stack *s5;/5 种商品2. 算法设计:(1)初始化空栈:利用 for 循环为每个(商品货架)栈申请空间, 并进行判断是否有申请到空间, 若没有申请到空间就输出提示 “空间不足!

4、”,若是有申请到空间, top 指向栈顶, 初始值为 1,栈底是 0 的位置。(2)上货的算法设计:商品的生产日期,再赋值给栈元素的各个属性,即将商品上货。再赋值前先判断 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 *outpush(Stack *S)/5) void backstack(Stack *S,int x)

7、/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);/打印货物所在的栈数/ 输入商品名和生产日期 fflush(stdin);/ 清除缓存区scanf(%c

8、 %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(此时该商品的货架上共有c个商品nn,S-top+1);return S;出货:/ 出货void *outpush(Stack *S)printf(请店主输入今天c这个商品销售出去的数量:,S-aS-top.b);int x,i;fflush(stdin);/ 清除缓存区do fflush(stdin); scanf(%d,&x);if(xm

9、ax)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;/ 储存生产日期分别对应年月日Stack *L;L=initstack();/ 重新申请一个空栈用来倒货时存放货物printf( 请输入要补上货架的商品名

10、 (一个字符 ) 空一格并输入该商品生产 日期(年/月/日) 每上货一件以回车键结束: 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)/若生产年份要补上货架的比货架上的早则直接上货架S-top+;S-aS-top.b=k1;S-aS-top.year=k2;S-aS-top.month=k3

11、;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-aS-top.b=k1;S-aS-top.year=k2;S-aS-top.month=k3;S-aS-top.day=k4;printf(补货

12、成功第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=k3;S-aS-top.day=k4;printf(补货成功第d牛! n,i);printf(此时的栈顶数为: %dn,S-top);temp=1;if(t

13、emp=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(补货成功第d牛! n,i);printf(此时的栈顶数为: %dn,S-top);while(L-top-1)/ 将存储在 L 栈中的商品上架 S-top+; S-aS-top=L-a

14、L-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#define max 5typedef structchar b;/ 存储商品名/ 商品日期年、月、日int year;int month;int day;Data;typedef s

15、tructData 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 *S)printf(%c 这 个 商 品 的 货 架 上 摆 放 了 %d 个 货 物 : n,S-aS-top.b,S-top+1);while(S-top-1)prin

16、tf(%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);/ 栈满不能入栈 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-

17、top.year=k2;S-aS-top.month=k3; S-aS-top.day=k4;printf(该商品的货架满了! n);printf(此时该商品的货架上共有c个商品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(倒货一次! nn);return L;/ 补货void backstack(Stack *S,int x)int i,ii;int temp;char k1;/ 储存商品名

18、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);elseif(k2a

19、S-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(补货成功第 %c件! 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) / 若生产月份要补上货的比货架

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

21、S-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.month=k3;S-aS-top.day=k4;printf( p

22、rintf(补货成功第d牛! n,i); 此时的栈顶数为: %dn,S-top);while(L-top-1)/ 将存储在 L 栈中的商品上架S-top+;S-aS-top=L-aL-top-;L=initstack();补货完成! nn);printf(Print(S);/ 出货void *outpush(Stack *S)printf( 请店主输入今天c这个商品销售出去的数量:,S-aS-top.b);int x,i;fflush(stdin);dofflush(stdin);scanf(%d,&x);if(xmax)printf( 该货架上没有这么多商品!请重输! n);while(xm

23、ax);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班 郑桂萍 学号: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;dofflush(stdin);printf( 请店主输入今天有销售出去一个商品的商品名: n);fflush(stdin);scanf(%c,&c);switch(c)case a:outpush(s0);break;case b:outpush(s1);break;case c: outpush(s2); break;case d: outpush(s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论