1、商品货架管理数据结构课程设计洛 阳 理 工 学 院课 程 设 计 说 明 书课程名称 数据结构 设计课题 商品货架管理 专 业 计算机科学与技术 班 级 xxx 学 号 xxx 姓 名 xxx 完成日期 2014年6月14日 课 程 设 计 任 务 书设计题目: 商品货架管理 _设计内容与要求:小四号宋体,行间距固定值12磅每段缩进两个字符注:如果题目太长行间距可以缩小,总之,这一页不可以分成两页。商品货架管理设计内容:商品货架可以看成一个栈,栈顶商品的生产日期最早,栈底商品的生产日期最近。上货时,需要倒货架,以保证生产日期较近的商品在较下的位置。设计要求:针对一种特定商品,实现上述管理过程。
2、 指导教师:王伟静 2014 年 6 月5日课 程 设 计 评 语成绩: 指导教师: 年 月 日【问题描述】商品货架可以看成一个栈,栈顶商品的生产日期最早,栈底商品的生产日期最近。上货时,需要倒货架,以保证生产日期较近的商品在较下的位置。【基本要求】针对一种特定商品,实现上述管理过程。【测试数据】小四宋体,行间距单倍行距,每段缩进两个字符【算法思想】第一:先定义数据日期的结构体里面包括年、月、日第二:写进栈、出栈函数第三:写倒货函数 基本思想就是借助三个一维数组分别装载年(a)、月(b)、日(c),然后出栈并将所有元素放到这三个数组中,一个生产日期的年、月、日数组的下标必须必须相同否则就乱了。
3、再将数组中元素按生产日期较近进行排序,最后一步将数组中的元素压到原来的栈中即可。第四:函数输出,输出只是单纯的输出,不要求出战,故需要另写一个函数第五:主函数因为可以循环使用,故用switchcase 语句即可实现【模块划分】进栈、出栈、倒货、输出和主函数【数据结构】栈:程序中使用的是链栈,链栈的好处是只要还有存储空间就会存储,结构体的next域指向下一个数据域,它的存储空间是随意的,可以连续,也可以不连续。数组:数组的存储方式是连续的物理空间,下标即为存储位置,可以高效的运行【测试情况】小四宋体,行间距单倍行距重点内容,每个功能抓图并且给予文字解释【心得】通过此次的课程设计让我深刻的了解到了
4、数据结构是很难的,刚开始的写的时候,结构体定义就出错了,以至于后边的函数功能都出错了,就连输入都有错误,我刚开始以为是我的函数写错了呐!把进栈、出栈函数照着教材上的又重新写了一会,结果发现还是不行,后来请教班里学的比较还好的同学,发现我结构体定义的有问题,我年份用的是int类型,月、日用的是char类型,char类型只能接收一个字符,第二个就不能接收不了,所我的输入总有问题,后来我改成int类型的就没有这种情况了。后来又想边比较边压栈,弄了一段时间,后来由于时间关系就没实现,就借助数组实现的。也是一种遗憾。以后有时间写出来。此次的课程设计,让我对栈有了更加深入的理解,因为结构体出错时写了好几遍
5、,同时也感谢帮助我的老师和同学们,谢谢给我的帮助,才是顺利的完成此次课程设计。【源程序】5号,Times NewRoman字体#include #include #define FALSE 0#define TRUE 1#define SIZE 3#define NUM 100/日期结构体定义typedef struct Date int year; int month; int day; Date,*DATE;/链栈结构体定义typedef struct Node Date date; struct Node *next;linkstacknode,*linkstack;/链栈初始化void
6、 initstack(linkstack *S) *S=(linkstacknode*)malloc(sizeof(linkstacknode); (*S)-next=NULL;/链栈进栈int push(linkstacknode *S,Date date) linkstacknode *temp; temp=( linkstacknode *)malloc(sizeof(linkstacknode); if(temp=NULL) return(FALSE); temp-date.year=date.year; temp-date.month=date.month; temp-date.da
7、y=date.day; temp-next=S-next; S-next=temp; return (TRUE); /链栈出栈int Pop(linkstacknode *S,Date *date) linkstacknode *temp; temp=S-next; if(temp=NULL) return 0; S-next=temp-next; date-year=temp-date.year; date-month=temp-date.month; date-day=temp-date.day; free(temp); return 1;/链栈输出void show_Date_links
8、tacknode(linkstacknode *S) linkstacknode *p=NULL; p=S-next; while(p!=NULL) printf(%d:%d:%d:n,p-date.year,p-date.month,p-date.day); p=p-next; /删除void delet(linkstacknode *S,Date *date) int i=0,j=0,n=0;/temp0,temp1,temp2, int aNUM=0; int bNUM=0; int cNUM=0; Date *date0 = NULL; date0= (Date *)malloc(si
9、zeof(Date); while(S-next!=NULL)/将栈中元素放在数组中 Pop(S,date); ai=date-year; bi=date-month; ci=date-day; i+; /删除元素与栈中元素比较并覆盖删除 for(j=0;jyear) if(bj=date-month) if(cj=date-day) for(;ji;j+) aj=aj+1; bj=bj+1; cj=cj+1; /将排好的数组中元素压入到栈中 for(n=0;ndate.year = an; S-date.month = bn; S-date.day = cn; push(S,S-date);
10、 /an=S-date.year; /bn=S-date.month; /cn=S-date.day; / push(S,S-date); /排序压栈void shuru(linkstacknode *S) int i=0,j=0,n=0,temp0,temp1,temp2; int aNUM=0;/日期年 数组 int bNUM=0;/日期月 数组 int cNUM=0;/日期日 数组 Date *date = NULL; date= (Date *)malloc(sizeof(Date); while(S-next!=NULL)/将栈中元素放在数组中 Pop(S,date); ai=dat
11、e-year; bi=date-month; ci=date-day; i+; /从大到小排序 for(j=0;ji;j+) if(ajaj+1) /将年从大到小排序 temp0=aj+1; temp1=bj+1; temp2=cj+1; aj+1=aj; bj+1=bj; cj+1=cj; aj=temp0; bj=temp1; cj=temp2; else if(bjbj+1) /将月从大到小排序 temp0=aj+1; temp1=bj+1; temp2=cj+1; aj+1=aj; bj+1=bj; cj+1=cj; aj=temp0; bj=temp1; cj=temp2; else
12、 if(cjcj+1) /将日从大到小排序 temp0=aj+1; temp1=bj+1; temp2=cj+1; aj+1=aj; bj+1=bj; cj+1=cj; aj=temp0; bj=temp1; cj=temp2; /将排好的数组中元素压入到栈中 for(n=0;ndate.year = an; S-date.month = bn; S-date.day = cn; push(S,S-date); void menu() printf(*n); printf(* 可 口 可 乐 *n); printf(*n); printf(n); printf(* 日期(年月日)之间用空格隔开
13、 *n); printf(* 一个日期(年月日)完成后按回车 *n); printf(n); printf(*1:产品输入*n); printf(*2:产品输入*n); printf(*3:产品输出*n); printf(*4:退出*n); printf(n);void main() char i=0,flag=1,cloise=0; int m=0; linkstacknode *S=NULL; /*S=(linkstacknode*)malloc(sizeof(linkstacknode) Date *date = NULL; Date *date1 = NULL; initstack(&
14、S); flushall(); date= (Date *)malloc(sizeof(Date); date1= (Date *)malloc(sizeof(Date); while(flag) menu(); printf(请输入选择项:n); scanf(%d,&cloise); switch(cloise) case 1: printf(请安输入商品个数:n); scanf(%d,&m); printf(请输入日期(年月日):n); for(i=0;iyear,&date-month,&date-day); push(S,*date); break; case 2: printf(请输入日期(年 月 日):n); scanf(%d%d%d,&date1-year,&date1-month,&date1-day); delet(S,date1); break; case 3: printf(上货后的日期如下:n); shuru(S); show_Date_linkstacknode(S); break; case 4: flag=0; break; .忽略此处.
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2