《数据结构》课程设计报告_商品货架管理系统.doc
湖北第二师范学院课程设计报告课程名称:数据结构课程设计设计题目: 商品货架管理系统 系 别: 计算机科学系 专 业: 软件工程 组 别: 蔡桥利,阳乐,邱东明,郝耀峰 学生姓名: - 学 号: - 起止日期: 2013年 12 月 7 日2013年 12月21日指导教师: 宋婉娟 教研室主任: 目 录一、课程设计目的3二、问题描述3三、需求分析3四、概要设计3五、详细设计4六、测试分析7七、使用说明9八、测试数据10九、源程序清单10十、模块说明19一课程设计目的通过实习,了解并初步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、系统集成、以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。二问题描述设计、实现一个商品货架管理系统,实现商品出售,增加,查询(按商品代号,商品名字,生产日期),修改,输出过期商品,输出小于多少数量的商品。三需求分析printf("tt *n");printf("tt - 1.建立目前商品信息 -n");printf("tt - 2.添加商品 -n");printf("tt - 3.出售商品 -n");printf("tt - 4.查询商品 -n");printf("tt - 5.修改商品 -n");printf("tt - 6.显示所有商品信息 -n");printf("tt - 0.退出系统 -n");printf("tt *nn");按序号依次实现功能。四概要设计· 4.1系统用到的抽象数据类型定义:1、/定义结构体typedef struct node int n; /商品代号char name20; /商品名称int date; /生产日期int validity; /保质期(天)int num; /商品数量struct node *next;LiStack,*sqstack; 基本操作:五、详细设计/输出所有商品p的名字、生产日期、保质期。void print(sqstack p) sqstack L=(LiStack *)malloc(sizeof(LiStack);L=p->next;ifelse/增加商品sqstack push(LiStack *top)/创建一个存放商品信息的栈sqstack creat() /出售商品sqstack pop(LiStack *top)/按序号查找商品void SequenceNumberF(LiStack *top)/按商品名字查询商品void NameF(LiStack *top)/按商品生产日期查找商品void ProductionDateF(LiStack *top)/按商品数量查找商品,查找小于该数量的商品void NumberF(LiStack *top)/date加validity,并返回date,到期时间。int DateF(int date,int validity)/查询过期商品信息void OverdueF(LiStack *top)/查询商品void find(LiStack *top)/修改商品sqstack update(LiStack *top) void main()LiStack *top;char i,j;top=(LiStack *)malloc(sizeof(LiStack);top->next=NULL;printf("nntt-欢迎使用商品货架管理系统-n");while(1)printf("tt *n");printf("tt - 1.建立目前商品信息 -n");printf("tt - 2.添加商品 -n");printf("tt - 3.出售商品 -n");printf("tt - 4.查询商品 -n");printf("tt - 5.修改商品 -n");printf("tt - 6.显示所有商品信息 -n");printf("tt - 0.退出系统 -n");printf("tt *nn");printf("ttt请输入您的操作:");scanf("%s",&i);scanf("%c",&j);printf("nn");if(i = '0')printf("ttt退出成功,欢迎下次使用!n");break; else switch(i)case '1':top=creat();break;case '2':top=push(top);break;case '3':top=pop(top);break;case '4':find(top);break;case '5':top=update(top);break;case '6':print(top);break;default:printf("ttt输入错误,请选择正确的功能n"); 六测试分析 按照附录中的测试数据,得出如下测试、分析结果:1、新建商品信息。a/b/c/d2、增加商品。f。3、出售商品代号3,商品名称c,50个。4、出售商品代号2,商品名称b,200个。5、查询,按序号查询,输入1.6、查询,按商品名称查询,输入b。7、查询,按生产日期查询,输入.8、查询,输入小于数量200的商品。9、查询,输出时过期的商品。10、修改商品。修改商品代号为4的商品。11、输出货架上的所有商品。12、退出系统。七使用说明 1、建立目前商品信息。输入1,-1表示结束。按照提示依次输入商品代号、商品名称、生产日期、保质期、数量。2、添加商品。输入2,依次输入商品代号、商品名称、生产日期、保质期、数量。3、出售商品。输入3,显示所有商品,选择要出售的商品代号、数量,如果出售的数量小于等于该商品有的数量则显示出售成功。否则显示出售失败。4、查询商品。输入4,选择1、2、3则按商品代号、名称、生产日期查询商品,选择4、5,则分别输出小于该数值的商品,输出过期商品。5、修改商品信息。输入5,输入修改商品代号,按照提示输入商品名称、生产日期,保质期,数量。6、输入所有商品信息。输入6,显示所有商品信息。7、退出系统。输入0,退出系统。 八测试数据如,测分析 六九源程序清单#include<stdio.h>#include<stdlib.h>#include<string.h>/定义结构体typedef struct node int n; /商品代号char name20; /商品名称int date; /生产日期int validity; /保质期(天)int num; /商品数量struct node *next;LiStack,*sqstack;/输出所有商品p的名字、生产日期、保质期。void print(sqstack p) sqstack L=(LiStack *)malloc(sizeof(LiStack);L=p->next;if(L=NULL)printf("货架为空。n");elseprintf("代号t商品名称t生产日期tt保质期(天)tt数量(个)n");while(L!=NULL)printf("%d",L->n);printf("t%s tt",L->name);printf("%d tt",L->date);printf("%d tt",L->validity);printf("%d ttn",L->num);p=L;L=p->next;printf("t*n");/增加商品sqstack push(LiStack *top)int validity,num,n;int date;char name20;LiStack *temp=(LiStack *)malloc(sizeof(LiStack);printf("ttt-欢迎进入商品添加界面!-n");temp=(LiStack *)malloc(sizeof(LiStack);printf("t增加商品的代号是:");scanf("%d",&n);printf("t增加的商品名称是:");scanf("%s",name);printf("t生产日期(年月日,如:)是:");scanf("%d",&date);printf("t保质期(天)是:");scanf("%d",&validity);printf("t数量(个):");scanf("%d",&num);temp->date=date;strcpy(temp->name,name);temp->num=num;temp->validity=validity;temp->n=n;if(top->next=NULL) temp->next=NULL;top->next=temp;elsetemp->next=top->next; top->next=temp; printf("t商品添加成功!n");return (top);/创建一个存放商品信息的栈sqstack creat() int n,validity,num;char name20;int date;LiStack *p;LiStack *top=(LiStack *)malloc(sizeof(LiStack); top->next=NULL;while(1)printf("t请输入商品代号(int),代号为'-1'表示输入结束:"); scanf("%d",&n);if(n<0) break;else printf("t请输入%d号商品名称:",n); scanf("%s",name); printf("t请输入%d号生产日期(年月日,如):",n); scanf("%d",&date); printf("t请输入%d号保质期(天):",n); scanf("%d",&validity);printf("t请输入%d号数量(个):",n);scanf("%d",&num); p=(LiStack *)malloc(sizeof(LiStack); p->date=date; p->validity=validity; strcpy(p->name,name);p->num=num;p->n=n;if(top->next=NULL)p->next=NULL; top->next=p;elsep->next=top->next;top->next=p;return(top);/出售商品sqstack pop(LiStack *top)int n,num;LiStack *p,*L;p=(LiStack *)malloc(sizeof(LiStack);L=(LiStack *)malloc(sizeof(LiStack);printf("ttt-欢迎进入商品出售界面!-n");printf("t-目前商品有:n");print(top);printf("出售的商品代号是:");scanf("%d",&n);printf("出售的商品数量(个):");scanf("%d",&num);p=top->next;if(top->next=NULL)printf("货架为空,请先添加货物! n");elsewhile(p->next!=NULL)if(p->next->n=n)if(p->next->num<num)printf("出售商品数量小于原有数量,出售商品失败。");else if(p->next->num=num)if(p->next->next=NULL)p->next=NULL; printf("商品出售成功!"); free(L);break;elseL=p->next;p->next=L->next;free(L); printf("商品出售成功!");break; elsep->next->num-=num;printf("商品出售成功!");break;p=p->next;if(p=NULL)printf("输入的商品序号有误,请重新操作。n");return(top);/按序号查找商品void SequenceNumberF(LiStack *top)int n,x=0;LiStack *p;p=(LiStack *)malloc(sizeof (LiStack);printf("需要查询的商品代号是:");scanf("%d",&n);p=top;while(p->next!=NULL)if(p->next->n=n)printf("代号t商品名称t生产日期tt保质期(天)tt数量(个)n");printf("%d",p->next->n);printf("t%s tt",p->next->name);printf("%d tt",p->next->date);printf("%d tt",p->next->validity);printf("%d ttn",p->next->num);x=1;break;p=p->next; if(x=0&&p->next=NULL)printf("t没有您要查询的商品。n");printf("t查询成功,欢迎再次使用查询系统.n");/按商品名字查询商品void NameF(LiStack *top)char name20;int x=0;LiStack *p;p=(LiStack *)malloc(sizeof (LiStack);printf("需要查询的商品名称是:");scanf("%s",name);p=top;while(p->next!=NULL)if(strcmp(p->next->name,name)=0)printf("代号t商品名称t生产日期tt保质期(天)tt数量(个)n");printf("%d",p->next->n);printf("t%s tt",p->next->name);printf("%d tt",p->next->date);printf("%d tt",p->next->validity);printf("%d ttn",p->next->num);x=1;break;p=p->next; if(x=0&&p->next=NULL)printf("t没有您查询的商品。n");printf("t查询成功,欢迎再次使用查询系统.n");/按商品生产日期查找商品void ProductionDateF(LiStack *top)int x=0;int date;LiStack *p;p=(LiStack *)malloc(sizeof (LiStack);printf("需要查询的生产日期是:");scanf("%d",&date);p=top;printf("需要查询的生产日期%d的商品有:n",date);printf("代号t商品名称t生产日期tt保质期(天)tt数量(个)n");while(p->next!=NULL)if(date=p->next->date)printf("%d",p->next->n);printf("t%s tt",p->next->name);printf("%d tt",p->next->date);printf("%d tt",p->next->validity);printf("%d ttn",p->next->num);x=1; p=p->next; if(x=0&&p->next=NULL)printf("t没有商品的生产日期在%d之前商品。n",date);printf("t查询成功,欢迎再次使用查询系统.n");/按商品数量查找商品,查找小于该数量的商品void NumberF(LiStack *top)int num,x=0;LiStack *p;p=(LiStack *)malloc(sizeof (LiStack);printf("需要查询的商品数量是:");scanf("%d",&num);p=top;printf("商品数量低于%d的商品有:n",num);printf("代号t商品名称t生产日期tt保质期(天)tt数量(个)n");while(p->next!=NULL)if(p->next->num<=num)printf("%d",p->next->n);printf("t%s tt",p->next->name);printf("%d tt",p->next->date);printf("%d tt",p->next->validity);printf("%d ttn",p->next->num);x=1; p=p->next; if(x=0&&p->next=NULL)printf("t没有商品低于%d的商品。n",num);printf("t查询成功,欢迎再次使用查询系统.n");/date加validity,并返回date,到期时间。int DateF(int date,int validity)int i=0,j=0,k=0;int c=0;i=date/10000;j=(date-10000*i)/100;k=date-10000*i-100*j;k=k+validity;if(k>30)c=k/30;k=k%30;j=j+c;c=0;if(j>12)c=j/12;j=j%12;i=i+c;date=i*10000+j*100+k;return (date);/查询过期商品信息void OverdueF(LiStack *top)int validity,x=0;LiStack *p;int date,date2,date1;p=(LiStack *)malloc(sizeof (LiStack);printf("请输入目前的日期是:");scanf("%d",&date);p=top;printf("需要查询目前日期(%d)的过期的商品有:n",date);while(p->next!=NULL)validity=p->next->validity;date1=p->next->date;date2=DateF(date1,validity);if(date2<date)printf("代号t商品名称t生产日期tt保质期(天)tt数量(个)n");printf("%d",p->next->n);printf("t%s tt",p->next->name);printf("%d tt",p->next->date);printf("%d tt",p->next->validity);printf("%d ttn",p->next->num);x=1;p=p->next; if(x=0&&p->next=NULL)printf("t没有过期商品。n");printf("t查询成功,欢迎再次使用查询系统.n");/查询商品void find(LiStack *top)int i;printf("ttt-欢迎进入商品查询界面!-n");printf("tips:t【按 商品代号 查询输入1】t【按 名称 查询输入2】n");printf("t【按 生产日期 查询输入3】t【按 个数 查询输入4】n");printf("t【查询过期商品信息输入5】n");printf("输入按什么方式查询(1-5):");scanf("%d",&i);switch(i)case 1 :SequenceNumberF(top);break;case 2 :NameF(top);break;case 3 :ProductionDateF(top);break;case 4 :NumberF(top);break;case 5 :OverdueF(top);break;default :printf("ttt输入查询方式错误。n");/修改商品sqstack update(LiStack *top) int n,validity,num,i,x;char name20;int date;LiStack *p;p=(LiStack *)malloc(sizeof (LiStack);printf("ttt-欢迎进入商品修改界面!-n");printf("需要查询的商品代号是:");scanf("%d",&i);p=top;while(p->next!=NULL)if(p->next->n=i)printf("代号t商品名称t生产日期tt保质期(天)tt数量(个)n");printf("%d",p->next->n);printf("t%s tt",p->next->name);printf("%d tt",p->next->date);printf("%d tt",p->next->validity);printf("%d ttn",p->next->num);printf("t修改为:");n=p->next->n;printf("t请输入%d号商品名称:",n); scanf("%s",name); printf("t请输入%d号生产日期(年月日,如):",n); scanf("%d",&date); printf("t请输入%d号保质期(天):",n); scanf("%d",&validity);printf("t请输入%d号数量(个):",n);scanf("%d",&num); p->next->date=date; p->next->validity=validity; strcpy(p->next->name,name);p->next->num=num;p->next->n=n;x=1;p=p->next; if(x=0&&p->next=NULL)printf("t没有您要修改的商品。n");printf("t修改成功,欢迎再次使用查询系统.n");return (top);void main()LiStack *top;char i,j;top=(LiStack *)malloc(sizeof(LiStack);top->next=NULL;printf("nntt-欢迎使用商品货架管理系统-n");while(1)printf("tt *n");printf("tt - 1.建立目前商品信息 -n");printf("tt - 2.添加商品 -n");printf("tt - 3.出售商品 -n");printf("tt - 4.查询商品 -n");printf("tt - 5.修改商品 -n");printf("tt - 6.显示所有商品信息 -n");printf("tt - 0.退出系统 -n");printf("tt *nn");printf("ttt请输入您的操作:");scanf("%s",&i);scanf("%c",&j);printf("nn");if(i = '0')printf("ttt退出成功,欢迎下次使用!n");break; else switch(i)case '1':top=creat();break;case '2':top=push(top);break;case '3':top=pop(top);break;case '4':find(top);break;case '5':top=update(top);break;case '6':print(top);break;default:printf("ttt输入错误,请选择正确的功能n"); 十模块说明。如,测试 六 。