《数据结构课程设计基于栈的商品货架管理的设计.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计基于栈的商品货架管理的设计.doc(20页珍藏版)》请在金锄头文库上搜索。
1、学号2014-2015学年 第一学期1308010108数据结构课程设计报告题目:基于栈的商品货架管理的设计专业:计算机科学与技术班级:姓名:学号:指导教师:成绩:计算机与信息工程系2014年 11 月 22日计算机与信息工程系 数据结构课程设计报告目 录1设计分析2 1.1设计内容2 1.2 设计任务及具体要求22概要设计2 2.1系统的功能简介2 2.2 总体程序框图33设计过程和程序代码3 3.1数据结构的设计3 3.1.1商品信息3 3.1.2商品货架(栈)3 3.1.3商品种类4 3.2算法设计4 3.2.1初始化空栈4 3.2.2上货的算法设计4 3.2.3出货(即当天的销售)的算
2、法设计4 3.2.4补货的算法设计4 3.2.5倒货4 3.2.6将货架上摆放的货物打印出来5 3.2.7模块结构及功能5 3.2.8主要模块算法描述54运行结果95小结10参考文献11附录:源程序12计算机与信息工程系 数据结构课程设计报告1设计分析1.1设计内容商店货架以栈的方式摆放商品。商品货架可以看成一个栈,栈顶商品的生产日期最早,栈底商品的生产日期最近。生产日期越接近的越靠栈底,出货时从栈顶取货。一天营业结束,如果货架不满,则需上货。入货直接将商品摆放到货架上,则会使生产日期越近的商品越靠近栈顶。这样就需要倒货架,使生产日期越近的越靠近栈底。请编写程序模拟商品销售,上架倒货架等操作。
3、(设有5种商品,每种商品至少有商品名和生产日期两个属性)1.2设计任务及具体要求设计任务:一天营业的开始,首先店主要把各个商品货架(栈)上满货物。商店内总共有5种商品,商品名为:a,b,c,d,e。补货时,店主输入第一种需要补货的商品的商品名和今天销售出去的数量。然后,输入要补上货架的商品名和生产日期并将要补上货架的商品与在货架上未销售出去的货物进行生产日期的比较。若是要补上货架的货物日期比较早就直接上货架。否则进行倒货再补货,这样就能将日期比较近的放在栈底。用另外申请的一个空栈来存储倒出的货物。第一种商品补完货后,再问店主是否还有其他商品需要补货。如需补货按第一种商品补货的程序来进行,以此类
4、推进行补货。要求:明确课程设计的目的,能根据课程设计的要求,查阅相关文献,为完成设计准备必要的知识,提高撰写技术文档的能力。并学习了解C语言程序设计的要求和方法,利用数据结构的相关算法和原理进行系统的设计分析,提高计算机语言编程的能力。2概要设计2.1系统的功能简介商品货架管理系统可以看成是栈的设计管理,栈顶的产品的日期最早,栈底的商品日期最近,上货时需要进行倒货架以实现该功能。通过基于栈的原理实现设计商品货架管理系统,使得该系统的主要功能是实现对商品货架中产品进行合理有效的管理的实现,该系统包括对商品货架进行商品的上货、出货、补货、到货等功能,实现对商品货架信息上货、出货、补货功能的管理。2
5、.2 总体程序框图主函数出货上货栈初始化补货打印栈中货物信息卸货图2.2程序的总体框图3设计过程和设计代码3.1数据结构的设计3.1.1商品信息typedef structchar b;/存储商品名/商品日期年、月、日int year;int month;int day;Data;3.1.2商品货架(栈)#define max 5typedef structData amax;/0为栈底位置int top;/栈顶Stack;3.1.3商品种类Stack *s5;/5种商品3.2算法设计3.2.1初始化空栈利用for循环为每个(商品货架)栈申请空间,并进行判断是否有申请到空间,若没有申请到空间就
6、输出提示“空间不足!”,若是有申请到空间,top指向栈顶,初始值为1,栈底是0的位置。3.2.2上货的算法设计先定义四个变量分别是字符型的k1,整型的k2,k3,k4用来存储商品名和商品的生产日期,再赋值给栈元素的各个属性,即将商品上货。再赋值前先判断top是否是最大值,若是就输出提示“栈满”并结束该上货程序。当货物上满后输出提示表示商品的货架上满了并输出此时货架上货物的数量,利用for循环进行下一个商品的上货,直至将5个商品的货架全部上满。3.2.3出货(即当天的销售)的算法设计一天的营业结束了,店主需要为有销售出去的商品进行补货。因此需要知道是哪个商品有销售出去以及其销售的数量,让店主输入
7、今天有销售出去的一种商品的商品名,若是店主输入此商店没有的商品名就输出提示,并让店主再次输入商品名,接着要输入销售的数量,程序要对销售的数量进行判断是否超出了栈的最大值(即货架上所能容纳货物的最大数量),若是超出输出提示,并请店主再次输入销售的数量。3.2.4补货的算法设计在此子函数中先定义四个变量分别是字符型的k1,整型的k2,k3,k4用来存储要补上货架的商品名和商品的生产日期,另外再初始化一个空栈L,用来存储倒出来的货物。将要补上货架的商品的生产日期与在货架上未销售出去的商品进行比较。若是日期比较早则可直接上货,否则要进行倒货再上货。每入一件货物都要进行这样的程序。3.2.5倒货为避免发
8、生入货直接将商品摆放到货架上,会使生产日期越近的商品越靠近栈顶这样的事发生,因此需要倒货。将比要补上货架的货物的生产日期要早的货物倒出放入栈L,直至将要补上货架的货物入货,则可再把栈L内的货物再放回原栈。3.2.6将货架上摆放的货物打印出来补货完成后,要将各个商品栈内的货物的商品名以及其生产日期打印出来,这样可以检验补货时是否有将日期比较近的放在栈底。3.2.7模块结构及功能int main(void) /主程序Stack *initstack() /初始化空栈Stack *onput(Stack *S) /上货void *outpush(Stack *S) /出货void backstack
9、(Stack *S,int x) /补货Stack *outstack(Stack *S,Stack *L) /倒货void Print(Stack *S) /打印商品栈内货物信息3.2.8主要模块算法描述(1)上货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);/清除缓存区sc
10、anf(%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;(2)出货void *outpush(Stack *S)printf(请店主输入今天%c这个商品销售出去的数量:,S-aS-top.b); int x,i;fflush(stdin);/清除缓存区dofflush(stdin);scanf(%d,&x);if(x
11、max)printf(该货架上没有这么多商品!请重输!n);while(xmax);for(i=1;itop-;printf(此时%c这个商品的货架的数量剩下%d件需要补上货架的数量为%dnn,S-aS-top.b,S-top+1,x);backstack(S,x);/补货(3)补货void backstack(Stack *S,int x)int i,ii;int temp;char k1;/储存商品名int k2,k3,k4;/储存生产日期分别对应年月日Stack *L;L=initstack();/重新申请一个空栈用来倒货时存放货物printf(请输入要补上货架的商品名(一个字符)空一格
12、并输入该商品生产日期(年/月/日)每上货一件以回车键结束: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;S-aS-top.day=k4;p
13、rintf(补货成功第%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(补货成功第%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=k