算法与数据结构的商品货架管理课程设计报告(还有程序源代码)

合集下载

商品货架管理实验报告

商品货架管理实验报告

商品货架管理实验报告篇一:商品货架管理实验报告西安郵電學院数据结构课内实验报告题目:商品货架管理院系名称:计算机学院专业名称:软件工程专业班级:学生姓名:学号(8位):一. 需求分析商品货架管理:把商品货架看成一个栈,栈顶商品的生产日期最早,栈底商品的生产日期最近,上货时,需要倒货价,以保证生产日期较近的商品在较下的位置。

(1) 输入的形式和输入值的范围:输入商品名称和日期如:aa XX0505 (2) 输出的形式:商品名称和生产日期如:bb XX0606(3)程序所能达到的功能:商品上货时,需要倒货价,以保证生产日期较近的商品在较下的位置。

(4)测试数据:(5)输入:aaXX0808 bb XX0707 cc XX0505 输出:cc XX0505 bb XX0707 aaXX0808二. 概要设计数据类型的定义:struct information /*定义商品信息*/ {char name[10]; /*名称*/long date; /*生产日期*/};typedef struct/*定义顺序栈*/ {struct information sp[size];int top;}seqstack;(1)int push(seqstack *s1):进栈s1栈从栈顶top=0开始,按商品日期从近到晚输入,如先输入XX0808再输入XX0707然后输入XX0606,再输出结果;流程图:(2)int cmp(seqstack *s1,seqstack *s2,int TOP) 插入新商品,输入新商品名字和日期,1)旧:0707,0808,新0909,比较新旧商品的生产日期,当s1不为空栈和新商品的日期大于s1栈顶的日期如:XX0909-XX0707>0时,把s1栈顶的内容出栈,并进栈道s2,依次进行比较,比较结束后,把新产品的数据进栈s1,然后把s2的数据依次从栈顶进展到s2,。

如图:新商品0909 s12)旧0707,0808,新0606,因为0606-0707>0,直接将新商品进入s1栈;3)旧0606,0909.新0707,流程图:s1s1(3) void pop(seqstack *s1,int TOP)输出插入新商品后的货架商品顺序。

商品库存系统c语言课程设计

商品库存系统c语言课程设计

商品库存系统c语言课程设计一、教学目标本课程旨在通过C语言编程教学,使学生掌握商品库存系统的开发方法,培养学生的编程能力、问题解决能力和团队合作能力。

具体的教学目标如下:知识目标:使学生掌握C语言的基本语法、数据结构和算法,能够运用C语言进行程序设计。

技能目标:培养学生能够使用C语言独立编写和调试程序,具备基本的软件开发能力。

情感态度价值观目标:培养学生对编程的兴趣和热情,培养学生的创新意识和团队合作精神。

二、教学内容本课程的教学内容主要包括C语言的基本语法、数据结构、算法和程序设计。

具体的教学内容如下:1.C语言的基本语法:包括变量、数据类型、运算符、控制语句等。

2.数据结构:包括数组、链表、栈和队列等。

3.算法:包括排序算法、查找算法、递归算法等。

4.程序设计:包括模块化设计、面向对象设计等。

三、教学方法本课程的教学方法主要包括讲授法、案例分析法、实验法等。

具体的教学方法如下:1.讲授法:通过讲解C语言的基本语法、数据结构、算法和程序设计等内容,使学生掌握相关知识。

2.案例分析法:通过分析实际的商品库存系统案例,使学生了解和掌握程序设计的方法和技巧。

3.实验法:通过实验课的形式,使学生亲自动手编写和调试程序,培养学生的实际编程能力。

四、教学资源本课程的教学资源包括教材、实验设备、多媒体资料等。

具体的教学资源如下:1.教材:选用权威、实用的C语言教材,为学生提供系统的学习材料。

2.实验设备:提供计算机实验室,使学生能够进行实际编程和调试。

3.多媒体资料:制作课件、教学视频等,丰富教学手段,提高教学质量。

五、教学评估为了全面、公正地评估学生在商品库存系统C语言课程中的学习成果,我们将采用多种评估方式相结合的方法。

具体包括:1.平时表现:通过学生在课堂上的参与度、提问回答、小组讨论等表现,评估其学习态度和理解程度。

2.作业:布置与课程内容相关的编程作业,评估学生对C语言编程的掌握情况。

3.考试:包括期中考试和期末考试,以笔试形式评估学生的知识掌握和编程能力。

《数据结构》课程设计报告--商品货架管理系统

《数据结构》课程设计报告--商品货架管理系统

课程设计报告课程名称:数据结构课程设计设计题目:商品货架管理系统系别:计算机科学系专业:软件工程组别:学生姓名: -- 学号: --起止日期: 2013年 12 月 7 日~2013年 12月21日指导教师:教研室主任:目录一、课程设计目的 (3)二、问题描述 (3)三、需求分析 (3)四、概要设计 (3)五、详细设计 (4)六、测试分析 (7)七、使用说明 (9)八、测试数据 (10)九、源程序清单 (10)十、模块说明 (19)一.课程设计目的通过实习,了解并初步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、系统集成、以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。

二.问题描述设计、实现一个商品货架管理系统,实现商品出售,增加,查询(按商品代号,商品名字,生产日期),修改,输出过期商品,输出小于多少数量的商品。

三.需求分析printf("\t\t ******************************************\n");printf("\t\t ----------- 1.建立目前商品信息--------\n");printf("\t\t ----------- 2.添加商品--------\n");printf("\t\t ----------- 3.出售商品--------\n");printf("\t\t ----------- 4.查询商品--------\n");printf("\t\t ----------- 5.修改商品--------\n");printf("\t\t ----------- 6.显示所有商品信息--------\n");printf("\t\t ----------- 0.退出系统--------\n");printf("\t\t ******************************************\n\n");按序号依次实现功能。

【最新精选】《数据结构》课程设计报告_商品货架管理系统

【最新精选】《数据结构》课程设计报告_商品货架管理系统

【最新精选】《数据结构》课程设计报告_商品货架管理系统05级普本《数据结构课程设计》――《交通咨询系统》设计报告湖北第二师范学院课程设计报告课程名称:数据结构课程设计设计题目: 商品货架管理系统系别: 计算机科学系专业: 软件工程组别: 蔡桥利,阳乐,邱东明,郝耀峰学生姓名: -- 学号: --起止日期: 2013年 12 月 7 日~2013年 12月21日指导教师: 宋婉娟教研室主任:第 1 页共 30 页05级普本《数据结构课程设计》――《交通咨询系统》设计报告目录一、课程设计目的...................................................................... ............................... 3 二、问题描述...................................................................... ...................................... 3 三、需求分析...................................................................... ...................................... 3 四、概要设计............................................................................................................ 3 五、详细设计...................................................................... .. (4)六、测试分析...................................................................... ...................................... 7 七、使用说明...................................................................... ...................................... 9 八、测试数据...................................................................... (10)九、源程序清单 ..................................................................... ................................. 10 十、模块说明...................................................................... (19)第 2 页共 30 页05级普本《数据结构课程设计》――《交通咨询系统》设计报告一(课程设计目的通过实习,了解并初步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、系统集成、以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。

数据结构课内实验报告模板-商品货架问题

数据结构课内实验报告模板-商品货架问题

*******数据结构课内实验报告题目:商品货架管理院系名称:计算机学院专业名称:软件工程专业班级:0901班学生姓名:*****学号(8位):*********一.需求分析程序设计的任务:商品货架可以看成是一个栈,栈顶产品的生产日期最早,栈底商品的生产日期最近。

上货时,需要倒货架,以保证生产日期较近的商品在较下的位置。

用队列和栈作为周转,实现上述管理过程。

(1)输入的形式和输入值的范围;输入的形式:请输入商品货物名称:请输入商品上架时间:是否继续输入(Y/N):请输入新增商品货物名称:请输入新增商品上架时间:是否继续输入(Y/N):输入值的范围:名称:字符串日期:整数(2)输出的形式;倒货架后商品的信息为:商品名称生产日期(3) 程序所能达到的功能;将商品信息顺序的放在一个栈中,新增商品放入另一个栈中,然后通过队列来进行一个倒货架的一个过程。

(3)测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。

二. 概要设计本题采用了栈和队列数据结构,共采用二个栈和一个队列,实现了倒货架。

栈:先进后出队列:先进先出功能模块图以及各个模块的功能描述:重要函数:1.int add_goods(stack *add); 初始化新栈2.int push(stack *top); 入栈3.void Initstack(stack *top); 初始化一个带头结点的栈4.queue* enterqueue(stack *add,stack *top); // 将栈中元素入队列5.int Initqueue(queue *Q); 初始化队列6.void destroy(stack *add); 销毁栈,释放空间7.void enterstack(queue *newlinkqueue,stack * start,stack *top); // 将队列元素入栈8.void printgoods(stack *top); 打印栈中元素9.stack * printqueue(queue *Q); 打印队列中的元素,并将队列的队头指针,然后传参三.详细设计栈和队列的数据类型定义:#define N sizeof(stack)typedef struct goods_stack { //构造堆栈结构体long int date;char goods[80];struct goods_stack *next;}stack;typedef struct //队列{stack * front;stack * rear;}queue;核心算法:// 将栈中元素入队列queue * enterqueue(stack *add,stack *top){queue * new1;stack *temp;new1 = (queue *)malloc(sizeof(queue));Initqueue(new1);add = add->next;while(add)// 将add 中所有元素入队列queue 中去{temp = (stack *)malloc(N);strcpy(temp->goods,add->goods);temp->date = add->date;add = add->next;new1->rear->next =temp;new1->rear = temp;}destroy(&add); //销毁add栈中元素add =(stack *)malloc(N);Initstack(add);top = top->next;while(top)//将top栈中元素全部入栈到add 栈{temp = (stack *)malloc(N);strcpy(temp->goods,top ->goods);temp->date = top->date;top = top->next;temp ->next = add->next;//头插法入栈add ->next = temp;}add = add->next;while(add)//再次将add 中所有元素入队列queue 中去{temp = (stack *)malloc(N);strcpy(temp->goods,add->goods);temp->date = add->date;add = add->next;new1->rear->next =temp;new1->rear = temp;}// destroy(&top);//销毁top栈中元素;// destroy(&add);//销毁add栈中元素return new1;}// 将队列元素入栈void enterstack(queue *new1,stack * start,stack *top) {stack *temp;temp=(stack *)malloc(N);while(start!= new1->rear){strcpy(temp->goods,start->next->goods);temp->date=start->next->date;temp->next = top->next;//头插法入栈top->next = temp;start = start->next;temp=(stack *)malloc(N);}}四.时间复杂度分析本程序的时间复杂度:O(n)五.测试数据及运行结果1、正确的输入及其输出结果:以下是各商品的信息:倒货架后商品的信息为:2、错误的输入及其输出结果:输入时间时必须是数字,否则出错;输出数据时,必须按栈的顺序,否则结果混乱~~~六.调试情况,设计技巧及体会1.对自己的设计进行评价,指出合理和不足之处,提出改进方案;本设计达到了题目的要求,用了2个栈,1个队列,倒货到了好多次,实现了倒货架的过程。

商品货架管理—数据结构课程设计报告

商品货架管理—数据结构课程设计报告

商品货架管理—数据结构课程设计报告商品货架管理 1、需求分析:设计一个算法,每一次上货后始终保持生产日期越近的商品越靠近栈底。

求货架上剩余货物M、每天销售件数N、员工每天上货工作时间T,三者之间有何关系及T的最小值。

2、源程序:#include<iostream.h> #include"string.h"#include"stdio.h"const int maxsize=100; const int k=10;#define elemtype char typedef struct{int Month;int Day;int Year;}DATE;typedef struct{int num;DATE date;} Node;class seqstack{public:Node stack[maxsize]; int top;void inistack(){top=0;}void push(int x,int day,int month,int year) {if(top==maxsize)cout<<"货架已满"<<endl;else{top++;stack[top].num=x; stack[top].date.Day=day; stack[top].date.Month=month;stack[top].date.Year=year;}}void pop(){if(top==0)cout<<"货架已空"<<endl; elsetop--;}elemtype gettop() {if(top==0)cout<<"货架已空"<<endl; elsereturn top;}bool empty(){return top==0; }};void main(){seqstack c[k+1]; //存放k种商品的数组,用c[0]来做中介货架int Txq[k+1]; //第i种取货用的时间 int Txs[k+1]; //第i种上货用的时间 int Nx[k+1]; //第i种每天的销售数量 int N=0; //每天销售总量int Tx[k+1]; //第i种每天上货的总时间 int T=0; //每天上货用的总时间char yn='Y';for(int i=1;i<=k;i++){cout<<" ******************************"<<endl;cout<<" 商品货架管理系统"<<endl;cout<<" ******************************"<<endl;Node store[20];char year,month;int count; //货架上第i种商品的数目int x,d,m,y; //x为第i种商品的序号cout<<"请输入货架上第"<<i<<"种货物的详细信息:"<<endl; cout<<"(序号,生产日期(年、月、日如2006.2.13),现在货架上的存货数目,上货用时和取货用时)"<<endl;cin>>x>>y>>year>>m>>month>>d>>count>>Txs[i]>>Txq[i];Nx[i]=maxsize-count;cout<<"货架上还需上"<<i<<"货物"<<Nx[i]<<"件"<<endl;Tx[k]=Txs[i]*(maxsize+count)+2*Txq[i]*count;cout<<"该货架满货需要用时"<<Tx[k]<<endl;cout<<"是否要上货?(Y/N)"<<endl;cin>>yn;if(yn=='Y'||yn=='y'){int numbers,nian,yue,ri;cout<<"请输入要上货物的数目及生产日期(年、月、日)"<<endl; //上的是同一日期生产的货物cin>>numbers>>nian>>yue>>ri;if(numbers>maxsize-count){cout<<"要上的货物数目超出了货架的最大容量,请重新输入"<<endl; cin>>numbers>>nian>>yue>>ri;}for(int j=1;j<=numbers;j++){}}N+=Nx[i];T+=Tx[i];}cout<<"每天销售总量为:"<<N<<endl; cout<<"每天上货用的总时间为:"<<T<<endl; }3、测试结果:谢谢品读~。

商品货架管理--C++数据结构

商品货架管理--C++数据结构

商品货架管理--C++数据结构商品货架管理--C++数据结构一、介绍商品货架管理系统是用于管理商店货架上商品的一套软件系统。

本文档将介绍该系统的设计和实现,以及使用C++数据结构来实现该系统的方法。

主要包括以下几个方面内容。

二、需求分析在设计商品货架管理系统前,首先需要进行需求分析,明确系统的功能和目标。

需求分析包括以下几个方面:1.管理商品信息:包括商品的名称、价格、库存等信息。

2.管理货架信息:包括货架的编号、位置以及关联的商品。

3.添加和删除商品:能够通过系统添加新的商品,并且能够删除不再销售的商品。

4.购买和库存管理:用户能够购买商品,系统能够自动更新库存信息。

三、系统设计基于需求分析的结果,我们设计了如下的系统结构和数据结构。

1.商品类(Item):包含商品的名称、价格、库存等属性。

2.货架类(Shelf):包含货架的编号、位置等属性,以及关联的商品信息。

3.商品管理类(ItemManager):负责管理商品的增删查改等操作。

4.货架管理类(ShelfManager):负责管理货架的增删查改等操作。

5.库存管理类(InventoryManager):负责管理商品库存的增减等操作。

6.用户交互界面类(UserInterface):提供用户交互界面,接收用户的输入并调用相应的管理类。

四、系统实现根据系统设计,我们使用C++语言来实现商品货架管理系统。

以下是具体的实现步骤:1.定义商品类(Item):定义商品的属性和方法,包括名称、价格、库存等。

可以使用C++的类来实现。

2.定义货架类(Shelf):定义货架的属性和方法,包括编号、位置等。

可以使用C++的类来实现。

3.定义商品管理类(ItemManager):定义对商品进行增删查改等操作的方法。

可以使用C++的类来实现。

4.定义货架管理类(ShelfManager):定义对货架进行增删查改等操作的方法。

可以使用C++的类来实现。

5.定义库存管理类(InventoryManager):定义对商品库存进行增减等操作的方法。

数据结构课程设计 商品货架管理系统

数据结构课程设计 商品货架管理系统

#include"stdio.h"#include"stdlib.h"#include"string.h"struct goods { long int num; char name[20];char category[20]; long int count;float price; }goods[200];void menu(); void input();void save(int m); int load();void scan(); void search();void purchase(); void sell();void add(); void edit();void dele(); void correct();void sort_num();void sort_name();void sort_category();void save();int m;int main() /*主函数*/{ menu();int n,flag;char a;do{printf("请选择你需要操作的步骤(1--7):");scanf("%d",&n);if(n>=0&&n<=7){ flag=1;break;}else{flag=0;printf("您输入有误,请重新选择!");}}while(flag==0);while(flag==1){switch(n){case 1:printf(" \n◆◆◆输入商品信息◆◆◆\n"); printf("\n");input();break;case 2:printf(" \n◆◆◆浏览商品信息◆◆◆\n");printf("\n");scan();break;case 3:printf(" \n◆◆◆查询商品信息◆◆◆\n");printf("\n");search();break;case 4:printf(" \n◆◆◆添加或删除商品◆◆◆\n");printf("\n");edit();break;case 5:printf(" \n◆◆◆修改商品信息◆◆◆\n");printf("\n");correct();break;case 6:printf(" \n◆◆◆进货管理◆◆◆\n");printf("\n");purchase();break;case 7:printf(" \n◆◆◆售货管理◆◆◆\n");printf("\n");sell();break;case 0:exit(0);break;default :break;}printf("\n");printf("是否继续进行(y or n):\n");scanf("%c",&a);if(a=='y'){flag=1;system("cls"); /*清屏*/menu(); /*调用菜单函数*/printf("请再次选择你需要操作的步骤(1--7):\n");scanf("%d",&n);printf("\n");}else exit(0);}}void menu() /*菜单函数*/{printf("\n\t************欢迎进入商品销售管理系统**********\n");printf("\n\t\t1.录入商品信息");printf("\t\t2.浏览商品信息\n");printf("\t\t3.查询商品信息");printf("\t\t4.添加或删除商品\n");printf("\t\t5.修改商品信息");printf("\t\t6.进货管理\n");printf("\t\t7.售货管理\n");printf("\t\t0.退出\n");printf("\n");printf("\n"); }void input() /*输入商品信息并保存*/{int i;printf ("\n 请输入需要建立新库存的商品种类数量:");scanf ("%d",&m);for (i=0; i<m; i++) /*用循环实现输入m 个商品*/{printf ("\n\t 请输入商品的编号:");scanf("%ld",&goods[i].num);printf ("\n\t 请输入商品的名称:");scanf("%s",goods[i].name);printf ("\n\t 请输入商品的种类:");scanf ("%s",goods[i].category);printf ("\n\t 请输入商品的数量:");scanf("%d",&goods[i].count);printf ("\n\t 请输入商品的单价:");scanf ("%f",&goods[i].price);printf("\n"); }save(m);return; /*返回主界面*/}void display(){int i;printf ("商品编号\t 商品名称\t 商品类别\t 商品数量\t 商品价格\n") ;/*输出商品信息*/ for(i=0;i<m;i++)printf("%ld\t\t%s\t\t%s\t\t%1d%\t\t%.2f\n",goods[i]. num,goods[i].name, goods[i].category, goods[i]. count, goods[i]. price);}void scan() /*浏览商品信息*/{int k;m=load();printf ("按商品编号浏览,请按l\t按商品名称浏览,请按2\t按商品类别浏览,请按3\n"); printf ("请选择浏览方式:");scanf ("%d",&k);switch (k) /*方式的选择*/{ case 1:sort_num();break;case 2:sort_name();break;case 3:sort_category();break;}return; /*返回主界面*/}void sort_num() /*⑴:按编号排序*/{long temp;char p1[30], p2[30];for (int k=0; k<m-1; k++)for (int i=0; i<m-k-1; i++) /* 用起泡法排序*/if (goods [i].num>goods[i+1]. num) /*按编号由小到大排序*/{temp=goods[i].num;goods[i].num=goods[i+1].num;goods[i+1].num=temp;strcpy (p1,goods[i].name);strcpy (goods[i].name, goods[i+1]. name);strcpy (goods[i+1].name, p1);strcpy (p2,goods[i].category);strcpy (goods[i].category, goods[i+1].category);strcpy (goods[i+1].category, p2);}display();return; /*返回主界面*/}void sort_name() /*(2):按商品名称排序*/{long temp;char p1[30], p2[30];for (int k=0;k<m-1;k++)for(int i=0;i<m-k-1;i++)if(strcmp(goods[i].name, goods[i+1].name)>0){strcpy(p1, goods[i].name);strcpy(goods[i].name, goods[i+1].name);strcpy(goods[i+1].name, p1);temp=goods[i].num;goods[i].num=goods[i+1].num;goods[i+1].num=temp;strcpy (p2,goods[i].category);strcpy (goods[i].category, goods[i+1].category);strcpy (goods[i+1].category, p2);}display();return; /*返回主界面*/}void sort_category() /*(3):按商品类别排序*/{long temp;char p1[30], p2[30];for (int k=0; k<m-1; k++)for (int i=0; i<m-k-1; i++) /* 用起泡法排序*/if(strcmp(goods[i].category, goods[i+1].category)>0){strcpy (p2, goods[i].category);strcpy(goods[i].category, goods[i+1].category);strcpy (goods[i+1].category, p2);temp=goods[i].num;goods[i].num=goods[i+1].num;goods[i+1].num=temp;strcpy (p1,goods[i].name);strcpy (goods[i].name, goods[i+1].name);strcpy (goods[i+1].name, p1);}display();return; /*返回主界面*/}void search_num ()/*(1):按商品编号查找*/{int long temp,i;printf ("\n 请输入要查询的商品编号:");scanf ("%ld",&temp);for(i=0;i<m;i++){if(temp==goods[i].num){printf ("\n 商品编号\t 商品名称\t 商品类别\t 商品数量\t 商品价格\n");printf("%1d\t\t%s\t\t%s\t\t%1d\t\t%.2f\n",goods[i].num, goods[i]. name, goods[i].category, goods[i]. count, goods[i]. price);}}}void search_name ()/*(2):按商品名称查找*/{int i;char temp[20];printf ("\n\n 请输入要查询的商品名称:");scanf("%s",temp);for (i=0;i<m;i++){if (strcmp (temp, goods[i].name)==0){printf ("商品编号\t 商品名称\t 商品类别\t 商品数量\t 商品价格\n");printf("\t\t%1d\t\t%s\t\t%s\t\t%1d\t\t%.2f\n",goods[i].num, goods[i]. name, goods[i].category, goods[i]. count, goods[i]. price);}}if(i>m)printf("无此商品");return ;}void search_category ()/*(3):按商品类别查找*/{int i;char temp[20];printf ("\n\n 请输入要查询的商品类别:");scanf("%s",temp);printf ("\t 商品编号\t 商品名称商品类别\t 商品数量\t 商品价格");for(i=0;i<m;i++){if(strcmp(temp, goods[i].category)==0)printf("\t\t%1d\t\t%s\t\t%s\t\t%1d\t\t%.2f",goods[i].num, goods[i]. name, goods[i].category, goods[i]. count, goods[i].price);}}void search () /*查询商品信息*/{int k; /*定义局部变量*/m=load();printf ("\n 按商品编号查询3 请按l,\t 按商品名称查询请按2,\t 按商品类别查询请按3\n");printf ("\n\请输入查询方式:");scanf ("%d",&k);switch (k) /*查询方式的选择*/{case 1:search_num();break;/*按商品编号查询*/case 2:search_name();break;/*按商品名称查询*/case 3:search_category();break;/*按商品类别查询*/ }printf("\nPress any key to enter menu.....");getchar ();return; /*返回主界面*/}void purchase() /*进货商品信息*/{long temp; /*定义临时变量表示刚进货的商品编号*/int j;m=load();printf ("\n\t 请输入刚进货的商品编号:");scanf("%ld",&temp);printf ("\n\t 请输入刚进货的商品数量:");scanf("%d",&j);printf ("\n\t 输出进货后的商品信息:\n");for (int i=0;i<m;i++) /*循环,寻找与进货相同的商品信息*/if(temp==goods[i]. num) goods[i].count=goods[i].count+j; /* 自动更改商品数量*/display();save(m);printf("\n\n\t\tPress any key to enter menu.....");getchar() ;/*返回功能选择界面*/return;}void sell() /*销售商品信息*/{long temp; /*定义临时变量temp 表示刚销售的商品编号*/int j;m=load();printf ("\n 请输入刚销售的商品编号:");scanf("%ld",&temp);printf ("\n 请输入刚销售的商品数量:");scanf("%d",&j);for(int i=0;i<m;i++) /*循环,找到刚销售的商品信息*/{if(temp==goods[i].num){for(;j>goods[i].count;) /*如果销售额大于库存量,则出现错误提示*/{printf ("\t 售出数量大于商品原有数量,出现错误,请重新输入:");scanf("%d",&j);}goods [i].count=goods[i].count-j; /*完成自动更改商品数量的功能*/ }}display();printf ("\n\tpress any key to contiue.....");getchar();return; /*返回功能选择界面*/}void edit() /*添加或删除商品信息*/{int k;void add (); /*声明子函数*/void dele();printf ("\n\t1.添加商品信息;2.删除商品信息;\n");printf ("\n 请输入1 或2 继续:");scanf ("%d",&k);switch (k) /*用switch 语句实现功能选择*/{case 1: add();break;case 2: dele();break;}printf ("\n\tpress any key to contiue......");getchar ();return; /*返回主菜单*/}void add () /*添加商品*/{FILE *fp;int count,i;if ((fp=fopen("goods_list","ab"))==NULL){printf ("cannot open file\n");exit(0);}printf("\n 请输入增加的商品数目:");scanf("%d",&count);for(i=0;i<count;i++){printf ("\n 请输入所添加商品的商品编号:");scanf("%ld",&goods[i]. num);printf ("\n 请输入所添加商品的名称:");scanf("%s",goods[i]. name);printf ("\n 请输入所添加商品的类别:");scanf("%s",goods[i].category);printf ("\n 请输入所添加商品的数量:");scanf("%d",&goods[i].count);printf ("\n 请输入所添加商品的价格:");scanf("%f",&goods[i].price);}for (i=0;i<count;i++) /*将新增的商品信息输出到磁盘文件中去*/ if (fwrite(&goods[i],sizeof(struct goods),1,fp)!=1)printf("file write error\n");printf("\n 添加完毕!\n");fclose(fp);printf("\n");}void dele() /*删除商品信息*/{int temp;m=load();display();printf ("\n 请输入要删除的商品编号:");scanf("%ld", &temp);printf ("\n");for(int i=0;i<m;i++){if(temp==goods[i].num){for(int j=i;j<m;j++){goods[j].num=goods[j+1].num;strcpy(goods[j].name, goods[j+1].name);strcpy (goods[j].category, goods[j+1].category);goods[j].count=goods[j+1].count;goods[j].price=goods[j+1].price;}}}m=m-1; /*商品总库存量减少*/save(m);display();printf ("Please press any key to continue.....");getchar();return; /*返回主界面*/}void correct() /*修改商品信息*/{long temp; /*定义局部变量*/m=load();display();printf ("\n\t 请输入要修改的商品的编号:");scanf ("%ld",&temp) ; /*输入新的商品信息*/for (int i=0; i<m; i++) /*保存新的商品信息*/{if(temp==goods[i].num){printf ("\n\t 请输入新的商品的名称:");scanf("%s",goods[i].name);printf("\n\t 请输入新的商品的类别:");scanf("%s",goods[i].category);printf("\n\t 请输入新的商品价格:");scanf("%f",&goods[i].price);printf("\n");}}save(m);display();printf ("Please press any key to continue......") ; /* 返回功能选择界面*/ getchar(); return; /*返回主菜单*/ }int load() /*导入函数*/{FILE*fp;int n=0;if((fp=fopen("goods_list","rb"))==NULL){printf ("cannot open file\n");exit(0);}else{do{fread(&goods[n],sizeof(struct goods),1,fp);n++;}while(feof(fp)==0);}fclose(fp);return(n-1);}void save(int m) /*保存文件函数*/{int i;FILE*fp;if ((fp=fopen("goods_list","wb"))==NULL){printf ("cannot open file\n");exit(0);}for (i=0;i<m;i++) /*将内存中的商品信息输出到磁盘文件中去*/ if (fwrite(&goods[i],sizeof(struct goods),1,fp)!=1)printf("file write error\n");fclose(fp);}。

商品货架管理数据结构课程设计

商品货架管理数据结构课程设计

【问题描述】商品货架可以看成一个栈,栈顶商品的生产日期最早,栈底商品的生产日期最近。

上货时,需要倒货架,以保证生产日期较近的商品在较下的位置。

【基本要求】针对一种特定商品,实现上述管理过程。

【测试数据】小四宋体,行间距单倍行距,每段缩进两个字符【算法思想】第一:先定义数据日期的结构体——里面包括年、月、日第二:写进栈、出栈函数第三:写倒货函数基本思想就是借助三个一维数组分别装载年(a[])、月(b[])、日(c[]),然后出栈并将所有元素放到这三个数组中,一个生产日期的年、月、日数组的下标必须必须相同否则就乱了。

再将数组中元素按生产日期较近进行排序,最后一步将数组中的元素压到原来的栈中即可。

第四:函数输出,输出只是单纯的输出,不要求出战,故需要另写一个函数第五:主函数因为可以循环使用,故用switch—case 语句即可实现【模块划分】进栈、出栈、倒货、输出和主函数【数据结构】栈:程序中使用的是链栈,链栈的好处是只要还有存储空间就会存储,结构体的next域指向下一个数据域,它的存储空间是随意的,可以连续,也可以不连续。

数组:数组的存储方式是连续的物理空间,下标即为存储位置,可以高效的运行【测试情况】小四宋体,行间距单倍行距重点内容,每个功能抓图并且给予文字解释【心得】通过此次的课程设计让我深刻的了解到了数据结构是很难的,刚开始的写的时候,结构体定义就出错了,以至于后边的函数功能都出错了,就连输入都有错误,我刚开始以为是我的函数写错了呐!把进栈、出栈函数照着教材上的又重新写了一会,结果发现还是不行,后来请教班里学的比较还好的同学,发现我结构体定义的有问题,我年份用的是int类型,月、日用的是char类型,char类型只能接收一个字符,第二个就不能接收不了,所我的输入总有问题,后来我改成int类型的就没有这种情况了。

后来又想边比较边压栈,弄了一段时间,后来由于时间关系就没实现,就借助数组实现的。

也是一种遗憾。

算法与数据结构课程设计 产品进销存管理系统

算法与数据结构课程设计 产品进销存管理系统

实习报告题目:编制一个产品进销存管理系统的程序一、需求分析1.针对食品这一行业,对其进行库房的产品进销存管理,选择线性顺序表来存储产品类,选择线性链表来存储属于此产品类的产品,并将产品链挂接到相应的产品类上。

其中存储产品时还应将属于此产品的一些信息如产品的进货总量,进货日期,销出数量,销售时间等进行相应存储。

2.能够对此库房产品进销存管理系统进行产品类的添加、产品的添加、产品数量的添加。

3.能够用一定的查询方法查询库房每种产品的总量、进货日期、销出数量、销售时间等4.本演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的操作命令;相应的操作结果显示在其后。

二、概要设计1. 设定顺序表挂接链表的抽象数据类型定义:ADT sqmountlink{数据对象:D={ai|a i∈kindlist,i=1,2,…,n,n≥0}数据关系:R={<ai-1,ai>|ai-1,a i∈D,i=2,3,…,n}基本操作:InitMountList(&L)操作结果:构造一个空的顺序表挂接链表L。

DestroyMountList(&L)初始条件:顺序表挂接链表L已存在。

操作结果:销毁顺序表挂接链表L。

CreatMountList(&L)初始条件:顺序表挂接链表L不存在。

操作结果:创建一个顺序表挂接链表L,并将L返回。

KindInsert(&L,n)初始条件:顺序表挂接链表L已存在。

操作结果:向顺序表挂接链表L中添加n个产品类。

ProductInsert(&L,i,n)初始条件:顺序表挂接链表L已存在且要将产品插入的产品类i已存在。

操作结果:向顺序表挂接链表L中的产品类i中添加n种产品。

ProQuantity_add(&L,i,e,n)初始条件:顺序表挂接链表L已存在且需添加数量的产品及产品所属的类也已存在。

数据结构课程设计报告-超市商品管理

数据结构课程设计报告-超市商品管理

1.需求分析在某个大型生活服务区内,有三个超市,每个超市中的商品包括:商品号,商品名称,商品价格,库存数量,每种商品总数,生产日期等基本信息,假设三个超市的商品信息分别是用单链L1,L2, L3取存储的,请写一个程序实现下列任务要求:知识点:线性表操作【任务要求】1.当超市有新的商品购入是能添加到单链表中;2.能查找出三个超市中具有相同商品名称的商品信息;3.在超市商品信息L1中删除那些与其他两个超市都有的商品信息;4.能修改各超市商品基本信息,如价格等。

5.能查找比较超市中相同商品的销售情况,能统计每个超市中每种商品的销售量及销售额。

6.能输出每个超市的所有商品信息;【测试数据】自行设定,注意测试将活区删空等特殊情况。

2.概要设计2.1必要算法1.当超市有新的商品购入是添加到单链表中算法概要:运用单链表的基本操作——插入一个新结点,即分配一个新的储存空间,然后依次输入结点所含的数据,再插入到原结点的尾部即可。

此算法时间复杂度为O(1)。

2.查找出三个超市中具有相同商品名称的商品信息算法概要:1.寻找相同商品名称算法:先比较前两个链表(超市)l1,l2,运用比较字符串的strcmp()方法找出两个链表中含有相同的商品名称,然后将两个链表中具有相同商品名称的商品信息存储到新建链表fs中,再比较链表fs和l3,重复上述步骤,找出链表l1,l2,l3中都具有相同商品名称的商品,将其商品信息存储在链表fs中。

此算法时间复杂度为O(n)。

2.输出相同商品的商品信息:访问fs中每个结点中的商品名称,根据商品名称分别遍历原链表l1,l2,l3的商品信息找出原结点,然后将其信息输出。

此算法时间复杂度为O(n)。

3.在超市商品信息L1中删除那些与其他两个超市都有的商品信息算法概要:首先运用上述的寻找相同商品名称算法,找出l1中那些与其他两个超市都有的商品名称,再根据其名称遍历链表l1,找出其结点删除并释放——单链表的基本操作。

C++课程设计仓库管理系统报告

C++课程设计仓库管理系统报告

目录第一章、设计题目 (1)第二章、问题分析 (2)2。

1问题描述 (2)2.2需求分析 (2)第三章、总体设计 (4)1、功能分析 (4)2、数据抽象 (4)3、结构关系 (4)第四章、详细设计 (6)一、头文件定义 (6)二、仓库管理员类 (6)三、仓库货架类 (6)四、电器类 (6)五、管理组合类 (7)六、仓库电器类默认构造函数 (7)七、仓库货架类默认构造函数 (7)八、仓库管理员类默认构造函数 (8)九、仓库管理组合类默认构造函数 (8)第五章、功能测试 (9)一、录入、保存、显示、读取测试: (9)二、运行界面: (13)小结 (14)参考文献 (15)致谢 (15)附录:源代码清单 (16)第一章、设计题目仓库管理程序功能设计:1.建立文件(1)存储文件可以使用默认文件名或指定文件名。

(2)可以不保存输出记录,但需要确认是否保存输入记录.(3)如果已经有文件,只能在其后追加。

(4)新增的记录继续存入原文件中。

2.文件的存取和显示(1)可以单独存取文件.(2)可以随时显示内存中记录的全部内容。

(3)可以直接存取指定文件3.删除记录(1)可以按“商品名称"方式删除(报损)并且将记录修改更新.(2)能给出被删除记录的信息。

(3)如果库存已经是空的,删除(报损)时应给出提示信息并返回主菜单。

(4)如果没有要删除的这个商品信息,输出没有找到的提示信息(5)删除操作仅限于内存,只有执行存记录操作时,才能覆盖原记录。

4.查询记录(1)可以按“商品名称”、“商品价格”或“商品种类”三种方式查询记录。

(2)能给出查询记录的信息。

(3)如果查询的信息不存在,输出“没有找到”的信息。

5、使用菜单实现功能的正确选择6、测试程序(1)应列出测试大纲对程序进行测试(2)应保证测试用例能测试到程序的各种边缘情况。

编写此程序至少要用二个以上的下列面向对象工具:类继承与派生友元函数构造函数虚函数模板文件输入输出通过设计一个较为简单的《商场库存货物管理系统》,进一步熟悉C++中类的概念、类的封装、继承的实现方式。

商品库存管理系统课程设计报告

商品库存管理系统课程设计报告

目录引言2一、系统分析2(一)选题的背景2(二)系统需求分析3(三)系统的开发及功能描述4(四)系统逻辑模型5二、系统设计6(一)系统总体结构设计6(二)数据库设计6(三)系统功能模块的详细设计7三、系统实现11四、系统开发总结16参考文献16附录171引言随着我国市场经济的蓬勃发展和人们对物质水平需求的增加,各行各业都处于一个飞速发展的时期,行业的快速发展必然导致各企业之间的竞争更加激烈,为了使自己的企业在竞争中能够站稳脚跟,不被激烈的竞争环境所压倒,必然要求企业加强对自身的管理,提高企业的经营效率。

本库存管理系统的开发主要包括前端应用程序以及后台数据库的建立和维护两个方面。

经过分析,我选用myeclipse来开发系统,利用其提供的各种面向对象的开发工具,来操纵数据库。

本论文正文分为五部分。

第一部分介绍了开发库存管理系统的必要性以及如何开发,并简要概述了myeclipse和SQL Server 2000。

第二部分介绍系统开发前的准备,包括系统的需求说明及系统总体结构设计和详细设计。

第三部分并着重阐述了系统主要功能模块的具体实现。

第四部分是系统开发的后期工作,讲到了该系统的不完善之处及本次系统开发过程中一些切身的感受与想法,是我做这次课程设计的心得体会一、系统分析(一)选题的背景企业的库存物资管理往往是很复杂、很繁琐的。

由于所掌握的物资种类众多,订货、管理、发放的渠道各有差异,各个企业之间的管理体制不尽相同,各类统计报表繁多,因此仓库的库存管理必须编制一套库存管理信息系统,实现计算机化操作,而且必须根据企业的具体情况制定相应的方案。

由于超市的行业特殊性,产品种类繁多,业务量巨大,若仍然采用人工记账的方式,必然不能满足企业的需求,企业需要利用计算机来进行库存管理,因此需要构造一个库存管理系统。

一个完整的企业物资供应管理系统应包括采购计划管理,合同收托管理、仓库库存管理、定额管理、统计管理、财务管理等模块。

《数据结构》课程设计报告--商品货架管理系统

《数据结构》课程设计报告--商品货架管理系统

课程设计报告课程名称:数据结构课程设计设计题目:商品货架管理系统系别:计算机科学系专业:软件工程组别:学生姓名: -- 学号: --起止日期: 2013年 12 月 7 日~2013年 12月21日指导教师:教研室主任:目录一、课程设计目的 (3)二、问题描述 (3)三、需求分析 (3)四、概要设计 (3)五、详细设计 (4)六、测试分析 (7)七、使用说明 (9)八、测试数据 (10)九、源程序清单 (10)十、模块说明 (19)一.课程设计目的通过实习,了解并初步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、系统集成、以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。

二.问题描述设计、实现一个商品货架管理系统,实现商品出售,增加,查询(按商品代号,商品名字,生产日期),修改,输出过期商品,输出小于多少数量的商品。

三.需求分析printf("\t\t ******************************************\n");printf("\t\t ----------- 1.建立目前商品信息--------\n");printf("\t\t ----------- 2.添加商品--------\n");printf("\t\t ----------- 3.出售商品--------\n");printf("\t\t ----------- 4.查询商品--------\n");printf("\t\t ----------- 5.修改商品--------\n");printf("\t\t ----------- 6.显示所有商品信息--------\n");printf("\t\t ----------- 0.退出系统--------\n");printf("\t\t ******************************************\n\n");按序号依次实现功能。

商品货架管理实验报告(3篇)

商品货架管理实验报告(3篇)

第1篇一、实验目的1. 了解商品货架管理的基本概念和原则。

2. 掌握商品货架管理的方法和技巧。

3. 培养实践操作能力,提高对商品货架管理的认识。

二、实验内容1. 实验背景随着市场竞争的加剧,商品货架管理在零售业中扮演着越来越重要的角色。

合理的商品货架管理能够提高商品陈列效果,吸引顾客眼球,增加销售机会。

本实验以超市为例,探讨商品货架管理的方法和技巧。

2. 实验内容(1)商品货架布局1)货架分区:根据商品种类、销售量、顾客购买习惯等因素,将货架划分为不同的区域。

如食品区、日用品区、家电区等。

2)货架排列:货架排列要遵循“黄金分割”原则,使顾客在行走过程中能够自然地浏览到商品。

货架排列要整齐、美观、有序。

(2)商品陈列1)商品摆放:根据商品特点、销售量等因素,合理摆放商品。

畅销商品应放在显眼位置,易取商品应放在低处,贵重商品应放在高处。

2)商品陈列方式:采用“面朝顾客、上重下轻、上大下小”的原则进行陈列。

同时,注意商品的色彩搭配、形状搭配,提高陈列效果。

(3)商品货架管理1)货架清洁:保持货架清洁,有利于提高顾客购物体验。

定期对货架进行清洁,去除灰尘、污渍。

2)货架维护:定期检查货架,确保货架稳固、无破损。

如有问题,及时进行维修或更换。

3)库存管理:根据销售情况,及时调整商品库存。

避免库存过多或过少,影响销售。

4)商品更新:定期对货架上的商品进行更新,淘汰滞销商品,引入新品,提高顾客购物兴趣。

三、实验步骤1. 观察超市货架布局,分析其优缺点。

2. 按照实验内容,对超市货架进行布局调整。

3. 对货架上的商品进行陈列,确保陈列效果。

4. 定期对货架进行清洁、维护,检查库存,调整商品更新。

5. 分析实验结果,总结经验教训。

四、实验结果与分析1. 实验结果通过实验,我们掌握了商品货架管理的基本方法和技巧,提高了对商品货架管理的认识。

在实验过程中,我们对超市货架进行了优化,提高了商品陈列效果,增强了顾客购物体验。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

福建工程学院课程设计课程:算法与数据结构题目:商品货架管理专业:计算机类班级: 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 a[max];//0为栈底位置int top;//栈顶}Stack;(3)商品种类:Stack *s[5];//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;j<max;j++){if(S->top==max-1)//判断栈满{printf("栈满!\n");//栈满不能入栈return S;}S->top++;printf("栈数%d ",S->top);//打印货物所在的栈数//输入商品名和生产日期fflush(stdin);//清除缓存区scanf("%c %d/%d/%d",&k1,&k2,&k3,&k4);//输入商品信息S->a[S->top].b=k1;S->a[S->top].year=k2;S->a[S->top].month=k3;S->a[S->top].day=k4;}printf("该商品的货架满了!\n");printf("此时该商品的货架上共有%d个商品\n\n",S->top+1);return S;}出货://出货void *outpush(Stack *S){printf("请店主输入今天%c这个商品销售出去的数量:",S->a[S->top].b); int x,i;fflush(stdin);//清除缓存区do{fflush(stdin);scanf("%d",&x);if(x>max)printf("该货架上没有这么多商品!请重输!\n");}while(x>max);for(i=1;i<=x;i++)S->top--;printf("此时%c这个商品的货架的数量剩下%d件需要补上货架的数量为%d\n\n",S->a[S->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;i<=x;i++){//输入商品名和生产日期fflush(stdin);//清除缓存区scanf("%c %d/%d/%d",&k1,&k2,&k3,&k4);if(S->top==-1)//此时货架上无商品可以直接上货{S->top++;S->a[S->top].b=k1;S->a[S->top].year=k2;S->a[S->top].month=k3;S->a[S->top].day=k4;printf("补货成功第%d件!\n",i);printf("此时的栈顶数为:%d\n",S->top);}else{if(k2<S->a[S->top].year)//若生产年份要补上货架的比货架上的早则直接上货架{S->top++;S->a[S->top].b=k1;S->a[S->top].year=k2;S->a[S->top].month=k3;S->a[S->top].day=k4;printf("补货成功第%d件!\n",i);printf("此时的栈顶数为:%d\n",S->top);temp=1;}else{for(ii=S->top;ii>-1&&S->top!=-1;ii--){temp=0;//用来标记是否有货物上架if(k2==S->a[S->top].year)//若生产年份要补上货架的与货架上的一样则比较月份{if(k3<S->a[S->top].month) //若生产月份要补上货的比货架上的早则直接上货{S->top++;S->a[S->top].b=k1;S->a[S->top].year=k2;S->a[S->top].month=k3;S->a[S->top].day=k4;printf("补货成功第%d件!\n",i);printf("此时的栈顶数为:%d\n",S->top);temp=1;if(temp==1)break;}else{if(k3==S->a[S->top].month)//若生产月份要补上货架的与货架上的一样则比较生产当天日期{if(k4<=S->a[S->top].day)//若生产当天日期要补上货的比货架上的早或是相同则直接上货否则要倒货重新上货架{S->top++;S->a[S->top].b=k1;S->a[S->top].year=k2;S->a[S->top].month=k3;S->a[S->top].day=k4;printf("补货成功第%d件!\n",i);printf("此时的栈顶数为:%d\n",S->top);temp=1;if(temp==1)break;}else{//倒货L=outstack(S,L);}}else{//倒货L=outstack(S,L);}}}if(k2>S->a[S->top].year)////此时生产年份要补上货架的比货架上的近{L=outstack(S,L);//倒货}}if(temp==0){S->top++;S->a[S->top].b=k1;S->a[S->top].year=k2;S->a[S->top].month=k3;S->a[S->top].day=k4;printf("补货成功第%d件!\n",i);printf("此时的栈顶数为:%d\n",S->top);}while(L->top>-1)//将存储在L栈中的商品上架{S->top++;S->a[S->top]=L->a[L->top--];}L=initstack();}}}printf("补货完成!!\n\n");Print(S);}倒货://倒货Stack *outstack(Stack *S,Stack *L){L->top++;L->a[L->top]=S->a[S->top];S->top--;printf("此时的栈顶数为:%d\n",S->top);printf("倒货一次!\n\n");return L;}四、源程序清单:#include<stdio.h>#include<stdlib.h>#include<conio.h>#define max 5typedef struct{char b;//存储商品名//商品日期年、月、日int year;int month;int day;}Data;typedef struct{Data a[max];//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->a[S->top].b,S->top+1);while(S->top>-1){printf("%c %d/%d/%d\n",S->a[S->top].b,S->a[S->top].year,S->a[S->top]. month,S->a[S->top].day);S->top--;}}//上货Stack *onput(Stack *S){int j;char k1;int k2,k3,k4;for(j=0;j<max;j++){if(S->top==max-1){printf("栈满!\n");//栈满不能入栈return S;}S->top++;printf("栈数%d ",S->top);//输入商品名和生产日期fflush(stdin);//清除缓存区scanf("%c %d/%d/%d",&k1,&k2,&k3,&k4);S->a[S->top].b=k1;S->a[S->top].year=k2;S->a[S->top].month=k3;S->a[S->top].day=k4;}printf("该商品的货架满了!\n");printf("此时该商品的货架上共有%d个商品\n\n",S->top+1);return S;}//倒货Stack *outstack(Stack *S,Stack *L){L->top++;L->a[L->top]=S->a[S->top];S->top--;printf("此时的栈顶数为:%d\n",S->top);printf("倒货一次!\n\n");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;i<=x;i++){//输入商品名和生产日期fflush(stdin);//清除缓存区scanf("%c %d/%d/%d",&k1,&k2,&k3,&k4);if(S->top==-1)//此时货架上无商品可以直接上货{S->top++;S->a[S->top].b=k1;S->a[S->top].year=k2;S->a[S->top].month=k3;S->a[S->top].day=k4;printf("补货成功第%d件!\n",i);printf("此时的栈顶数为:%d\n",S->top);}else{if(k2<S->a[S->top].year)//若生产年份要补上货架的比货架上的早则直接上货架{S->top++;S->a[S->top].b=k1;S->a[S->top].year=k2;S->a[S->top].month=k3;S->a[S->top].day=k4;printf("补货成功第%d件!\n",i);printf("此时的栈顶数为:%d\n",S->top);temp=1;}else{for(ii=S->top;ii>-1&&S->top!=-1;ii--){temp=0;//用来标记是否有货物上架if(k2==S->a[S->top].year)//若生产年份要补上货架的与货架上的一样则比较月份{if(k3<S->a[S->top].month) //若生产月份要补上货的比货架上的早则直接上货{S->top++;S->a[S->top].b=k1;S->a[S->top].year=k2;S->a[S->top].month=k3;S->a[S->top].day=k4;printf("补货成功第%d件!\n",i);printf("此时的栈顶数为:%d\n",S->top);temp=1;if(temp==1)break;}else{if(k3==S->a[S->top].month)//若生产月份要补上货架的与货架上的一样则比较生产当天日期{if(k4<=S->a[S->top].day)//若生产当天日期要补上货的比货架上的早或是相同则直接上货否则要倒货重新上货架{S->top++;S->a[S->top].b=k1;S->a[S->top].year=k2;S->a[S->top].month=k3;S->a[S->top].day=k4;printf("补货成功第%d件!\n",i);printf("此时的栈顶数为:%d\n",S->top);temp=1;if(temp==1)break;}else{//倒货L=outstack(S,L);}}else{//倒货L=outstack(S,L);}}}if(k2>S->a[S->top].year)////此时生产年份要补上货架的比货架上的近{L=outstack(S,L);//倒货}}if(temp==0){S->top++;S->a[S->top].b=k1;S->a[S->top].year=k2;S->a[S->top].month=k3;S->a[S->top].day=k4;printf("补货成功第%d件!\n",i);printf("此时的栈顶数为:%d\n",S->top);}while(L->top>-1)//将存储在L栈中的商品上架{S->top++;S->a[S->top]=L->a[L->top--];}L=initstack();}}}printf("补货完成!!\n\n");Print(S);}//出货void *outpush(Stack *S){printf("请店主输入今天%c这个商品销售出去的数量:",S->a[S->top].b);int x,i;fflush(stdin);do{fflush(stdin);scanf("%d",&x);if(x>max)printf("该货架上没有这么多商品!请重输!\n");}while(x>max);for(i=1;i<=x;i++)S->top--;printf("此时%c这个商品的货架的数量剩下%d件需要补上货架的数量为%d\n\n",S->a[S->top].b,S->top+1,x);//补货backstack(S,x);}int main(void){Stack *s[5];//5种商品int i;printf("计算机类1102班郑桂萍学号:3110307201\n\n");printf("商店共有5种商品,分别是a,b,c,d,e\n\n");for(i=0;i<5;i++){s[i]=initstack();//初始化栈printf("请输入要上货的第%d种商品名(一个字符)空一格并输入该商品生产日期(年/月/日)每上货一件以回车键结束:\n",i+1);s[i]=onput(s[i]);//将商品入栈(上货)}char c,yes_no;do{fflush(stdin);printf("请店主输入今天有销售出去一个商品的商品名:\n");fflush(stdin);scanf("%c",&c);switch(c){case 'a':outpush(s[0]);break;case 'b':outpush(s[1]);break;case 'c':outpush(s[2]);break;case 'd':outpush(s[3]);break;case 'e':outpush(s[4]);break;default:printf("商店无%c此商品!输入错误!\n",c);}do{fflush(stdin);printf("请问店主还有销售出去的商品么?如果有请按Y,否则按N\n");yes_no=getchar();if(yes_no!='Y'&&yes_no!='N'){printf("输入错误!!!\n\n");}}while(yes_no!='Y'&&yes_no!='N');}while(yes_no=='Y');return 0;}五、测试数据及测试结果:测试数据:5个商品货架上货:a 2012/1/1a 2012/1/1a 2011/2/2a 2011/1/1a 2011/1/1b 2012/2/2b 2012/2/2b 2012/2/2b 2012/2/2b 2012/2/2c 2012/2/2c 2012/2/2c 2012/2/2c 2012/2/2c 2012/2/2d 2012/2/2d 2012/2/2d 2012/2/2d 2012/2/2d 2012/2/2e 2012/2/2e 2012/2/2e 2012/2/2e 2012/2/2e 2012/2/出货:今天有销售出去的商品的商品名:a销售数量:2补货:a 2014/2/2a 2009/12/2测试结果:商品栈内的货物信息:a 2009/12/2a 2011/2/2a 2012/1/1a 2012/1/1a 2014/2/2是否还有需要补货的商品:N六、课程设计总结及心得体会:通过此次课程设计,我更深刻地体会到编写一个程序之前首先要分析它,知道它的功能,要做什么等等,如何实现它,这些需要我们认真的思考,分析。

相关文档
最新文档