




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
福 建 工 程 学 院课程设计课 程: 算法与数据结构 题 目: 商品货架管理 专 业: 计算机类 班 级: 1102 座 号: 3110307201 姓 名: 郑桂萍 2012年 6月 26 日一、要解决的问题商店货架以栈的方式摆放商品。商品货架可以看成一个栈,栈顶商品的生产日期最早,栈底商品的生产日期最近。生产日期越接近的越靠栈底,出货时从栈顶取货。一天营业结束,如果货架不满,则需上货。入货直接将商品摆放到货架上,则会使生产日期越近的商品越靠近栈顶。这样就需要倒货架,使生产日期越近的越靠近栈底。请编写程序模拟商品销售,上架倒货架等操作。(设有5种商品,每种商品至少有商品名和生产日期两个属性)二、算法基本思想描述:一天营业的开始,首先店主要把各个商品货架(栈)上满货物。商店内总共有5种商品,商品名为:a,b,c,d,e。一一将每个商品的货架上满货物。接着一天的营业结束了,店主要将今天有销售出去的商品所对应的货架补满。让店主输入第一种需要补货的商品的商品名和今天销售出去的数量。然后,输入要补上货架的商品名和生产日期并将要补上货架的商品与在货架上未销售出去的货物进行生产日期的比较。若是要补上货架的货物日期比较早就直接上货架。否则进行倒货再补货,这样就能将日期比较近的放在栈底。用另外申请的一个空栈来存储倒出的货物。第一种商品补完货后,再问店主是否还有其他商品需要补货。如需补货按第一种商品补货的程序来进行。以此类推进行补货。三、设计1. 数据结构的设计(1)商品信息:typedef struct char b;/存储商品名 /商品日期年、月、日 int year; int month; int day;Data;(2)商品货架(栈)#define max 5typedef struct Data amax;/0为栈底位置 int top;/栈顶Stack;(3)商品种类:Stack *s5;/5种商品2.算法设计: (1)初始化空栈: 利用for循环为每个(商品货架)栈申请空间,并进行判断是否有申请到空间,若没有申请到空间就输出提示“空间不足!”,若是有申请到空间,top指向栈顶,初始值为1,栈底是0的位置。(2)上货的算法设计: 先定义四个变量分别是字符型的k1,整型的k2,k3,k4用来存储商品名和商品的生产日期,再赋值给栈元素的各个属性,即将商品上货。再赋值前先判断top是否是最大值,若是就输出提示“栈满”并结束该上货程序。当货物上满后输出提示表示商品的货架上满了并输出此时货架上货物的数量,利用for循环进行下一个商品的上货,直至将5个商品的货架全部上满。(3)出货(即当天的销售)的算法设计:一天的营业结束了,店主需要为有销售出去的商品进行补货。因此需要知道是哪个商品有销售出去以及其销售的数量,让店主输入今天有销售出去的一种商品的商品名,若是店主输入此商店没有的商品名就输出提示,并让店主再次输入商品名,接着要输入销售的数量,程序要对销售的数量进行判断是否超出了栈的最大值(即货架上所能容纳货物的最大数量),若是超出输出提示,并请店主再次输入销售的数量。(4)补货的算法设计:在此子函数中先定义四个变量分别是字符型的k1,整型的k2,k3,k4用来存储要补上货架的商品名和商品的生产日期,另外再初始化一个空栈L,用来存储倒出来的货物。将要补上货架的商品的生产日期与在货架上未销售出去的商品进行比较。若是日期比较早则可直接上货,否则要进行倒货再上货。每入一件货物都要进行这样的程序。(5)倒货:为避免发生入货直接将商品摆放到货架上,会使生产日期越近的商品越靠近栈顶这样的事发生,因此需要倒货。将比要补上货架的货物的生产日期要早的货物倒出放入栈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) /补货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 %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; 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;/储存商品名 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(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-) 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; 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=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-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#define max 5typedef 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; else 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);/栈满不能入栈 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-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)/此时货架上无商品可以直接上货 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); 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) /若生产月份要补上货的比货架上的早则直接上货 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; 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.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这个商品销售出去的数量:,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班 郑桂萍 学号: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(stdin); scanf(%c,&c); switch(c) case a: outpush(s0); break; case b: outpush(s1); break; case c: outpush(s2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 2608-2025硅砖
- 2025年慈善总会会计考试题库
- 2025年婚姻家庭咨询师初级笔试题库
- 2025年工业安全工程师面试题
- 2025年安全生产安全生产考试题库
- 2025年宁夏安全员考试重点题库及答案
- 2025年树葬行业应用与生态礼仪师考试预测题
- 2025年托育保健医生考试重点题解析
- 2025年山西C类安全员考试答案解析
- 2025年食堂安全管理员笔试冲刺题
- 动漫人物欣赏课件
- 医院新技术、新项目准入申报表
- 项目经理安全目标考核表
- 《HSK标准教程1》第3课课件
- 三级安全教育考试试题及(全)
- 中国古代文学史《第二章:诗经》PPT课件(完整版)
- 云南省地质灾害群测群防手册
- 高级催乳师培训课程讲义
- 第三届韬奋杯全国出版社青编校大赛校对试题(已编辑)
- 关于BT项目主要法律规定
- 银发【2007】246号
评论
0/150
提交评论