1. 首页 > 科技

数据结构课程设计——商品货架管理,一、问题描述 商品货架可以看成一个栈,栈顶商品的生产日期最早,栈?

数据结构课程设计——商品货架管理,一、问题描述 商品货架可以看成一个栈,栈顶商品的生产日期最早,栈?

C语言数据结构题,商品货架管理

apps.hi.baidu/share/detail/19838161

商品货架可以看成一个栈,栈顶商品的生产日期最早,栈底商品的生产日期最近。 上货时,需要倒货架,以保证生产日期较近的商品在较下的位置。

#include<stdio.h>

#include<string.h>

#define size 4

struct data/*定义商品信息*/

{

char name[6]; /*商品名称*/

long int date; /*商品生产日期*/

};

typedef struct/*定义顺序栈*/

{

struct data sp[size];

int top;

}seqstack;

int push1(seqstack *s1)

{

int i=0;

for(s1->top=0;s1->top<size-1;s1->top++)

{

printf("请输入第%d件商品名称:",s1->top+1);

scanf("%s",s1->sp[s1->top].name);

printf("请输入生产日期:");

scanf("%d",&s1->sp[s1->top].date);

printf("\n");

}

return(--s1->top);

}

int cmp(seqstack *s1,seqstack *s2,int TOP)

{

struct data new;

s1->top=TOP;

s2->top=-1;

printf("请输入新商品名称:");

scanf("%s",new.name);

printf("请输入生产日期:");

scanf("%d",&new.date);

while(s1->top!=-1&&new.date-s1->sp[s1->top].date>0)

/*比较新旧商品的生产日期*/

{

s2->top++;

strcpy(s2->sp[s2->top].name,s1->sp[s1->top].name);

s2->sp[s2->top].date=s1->sp[s1->top].date;

s1->top--;

}

s1->top++;/*将新商品插入货架*/

strcpy(s1->sp[s1->top].name,new.name);

s1->sp[s1->top].date=new.date;

for(;s2->top>-1;s2->top--)

{

s1->top++;

strcpy(s1->sp[s1->top].name,s2->sp[s2->top].name);

s1->sp[s1->top].date=s2->sp[s2->top].date;

}

return(s1->top);

}

void pop(seqstack *s1,int TOP)/*输出插入新商品后的货架商品顺序*/

{

printf("更新商品后的货架商品顺序为:\n");

printf("商品名称 生产日期:\n");

for(s1->top=TOP;s1->top>=0;s1->top--)

{

printf(" %s ",s1->sp[s1->top].name);

printf("%d\n",s1->sp[s1->top].date);

}

printf("over");

}

void main()

{

int TOP=0;

seqstack A,B;

TOP=push1(&A);

TOP=cmp(&A,&B,TOP);

pop(&A,TOP);

}

做一个超市货架管理系统。 要求: 1.使用数据结构思想,以栈为存储结构,按生产日

C语言的方法,相信你改成C++的类肯定也没问题:

#include

#define MAXSIZE 100

void push(int a[] ,int &count)

{

if(count==MAXSIZE)

{

printf("对不起,该栈已满!");

}

else{

printf("请输入第%d入栈的值:\n",count+1);

scanf("%d",&a[count]);

count++;

}

}

int pop(int a[],int &count)

{

if(count==0)

{

printf("对不起,此栈是空栈");

}

else{

printf("第%d个数出栈成功,数值为:%d\n",count,a[count-1]);

return a[--count];

}

}

int main()

{

int count=0;

int arr[MAXSIZE];

push(arr ,count);

push(arr ,count);

pop(arr ,count);

pop(arr ,count);

急求 数据结构 商品货架管理编程

商店货架以栈的方式摆放商品。商品货架可以看成一个栈,栈顶商品的生产日期最早,栈底商品的生产日期最近。生产日期越接近的越靠栈底,出货时从栈顶取货。一天营业结束,如果货架不满,则需上货。入货直接将商品摆放到货架上,则会使生产日期越近的商品越靠近栈顶。这样就需要倒货架,使生产日期越近的越靠近栈底。请编写程序模拟商品销售,上架操作。(设有5种商品,每种商品至少有商品名和生产日期两个属性);

本人的失败作品:

include "stdio.h"

#include "stdlib.h"

#include "conio.h"

#define MAXSIZE 5

#define Esc 27

/*商品结构体*/

struct Goods

{

int num;

int date;

};

/*栈结构体*/

typedef struct

{

struct Goods data[MAXSIZE];

int top;

}SeqStack;

/***************函数声明***************/

SeqStack *Init_SeqStack(); //置空栈

int Empty_SeqStack(SeqStack *s); //判栈空

int Push_SeqStack(SeqStack *s,struct Goods x); //入栈

int Pop_SeqStack(SeqStack *s,struct Goods *x); //出栈

int Max_date(struct Goods a[], int count); //找日期最大值

void Goods_arrange(struct Goods a[], int count);//选择排序

void Goods_print(SeqStack *s); //打印商品信息

void Goods_in(SeqStack *s); //商品上架

void Goods_out(SeqStack *s); //商品出售

void main_menu(); //主菜单

void Push_menu(); //入架菜单

void Pop_menu(); //销售菜单

void print_menu(); //查看菜单

int main(); //主函数

/************************************************/

//置空栈

SeqStack *Init_SeqStack()

{

SeqStack *s;

s=(SeqStack *)malloc(sizeof(SeqStack));

s->top=-1;

return s;

}

//判栈空

int Empty_SeqStack(SeqStack *s)

{

if(s->top==-1) return 1;

else return 0;

}

//入栈

int Push_SeqStack(SeqStack *s,struct Goods x)

{

if(s->top==MAXSIZE-1) return 0;

else

{

s->top++;

s->data[s->top] = x;

return 1;

}

}

//出栈

int Pop_SeqStack(SeqStack *s,struct Goods *x)

{

if (Empty_SeqStack(s)) return 0;

else

{

*x = s->data[s->top];

s->top--;

return 1;

}

}

/*找日期最大值*/

int Max_date(struct Goods a[], int count)

{

int k = 0;

int i;

for(i = 1; i < count; i++)

{

if(a[k].date > a[i].date)

k = i;

}

return k;

}

//选择排序

void Goods_arrange(struct Goods a[], int count)

{

int i, j;

struct Goods temp;

for(i = count; i > 1; i--)

{

j = Max_date(a, i);

temp = a[j];

a[j] = a[i-1];

a[i-1] = temp;

}

}

/*打印商品信息*/

void Goods_print(SeqStack *s)

{

int i;

int count;

count=s->top+1;

if(count==0)

printf("\n货架上共有%d件商品。\n\n",count);

else

{

printf("\n货架上共有%d件商品。\n\n",count);

printf("\t*********************\n");

printf("\t* 编号 * 生产日期 *\n");

printf("\t*********************\n");

for(i=count-1;i>=0;i--)

{

printf("\t* %d * %d *\n",s->data[i].num,s->data[i].date);

printf("\t*********************\n");

}

}

}

/*商品上架*/

void Goods_in(SeqStack *s)

{

char choice;

struct Goods Gd;

do

if(s->top==MAXSIZE-1)

{printf("对不起,货架已满。\n");

return;

}

else

{

printf("请输入商品编号:");

scanf("%d",&Gd.num);

do

{

printf("请输入生产日期(1-12整数):");

scanf("%d",&Gd.date);

}

while(Gd.date<1 || Gd.date>12);

Push_SeqStack(s,Gd); //商品入架

Goods_arrange(s->data,s->top+1); //按时间排序

printf("\n\t商品入架成功\n");

printf("是否继续商品入架?\n(1.继续,任意键否):");

scanf("%s",&choice);

}

while(choice=='1');

}

/*商品出售*/

void Goods_out(SeqStack *s)

{

char choice;

struct Goods Gd;

do

if(Empty_SeqStack(s))

{

printf("\n对不起,货架已经无商品.\n");

return;

}

else

{

system("cls");

Pop_SeqStack(s,&Gd);

printf("卖出商品的信息:\n");

printf("\t*********************\n");

printf("\t* 编号 * 生产日期 *\n");

printf("\t*********************\n");

printf("\t* %d * %d\n",Gd.num,Gd.date);

printf("\t*********************\n");

printf("货架信息:\n");

Goods_print(s);

printf("是否继续销售商品?\n(1.继续;任意键否):");

scanf("%s",&choice);

}

while(choice=='1');

}

void main_menu()

{

printf("\t***************商品货架管理系统*****************\n\n");

printf("\t* 1.商品入架 *\n");

printf("\t* 2.商品销售 *\n");

printf("\t* 3.货架查看 *\n");

printf("\n\t************************************************\n");

}

void Push_menu()

{

printf("\t***************商品入架*****************\n\n");

printf("\t* 1.奶糖 *\n");

printf("\t* 2.牛肉干 *\n");

printf("\t* 3.龙岩花生 *\n");

printf("\t* 4.三鹿奶粉 *\n");

printf("\t* 5.雪津啤酒 *\n");

printf("\n\t****************************************\n");

}

void Pop_menu()

{

printf("\t***************商品销售*****************\n\n");

printf("\t* 1.奶糖 *\n");

printf("\t* 2.牛肉干 *\n");

printf("\t* 3.龙岩花生 *\n");

printf("\t* 4.三鹿奶粉 *\n");

printf("\t* 5.雪津啤酒 *\n");

printf("\n\t****************************************\n");

}

void print_menu()

{

printf("\t***************货架查看*****************\n\n");

printf("\t* 1.奶糖 *\n");

printf("\t* 2.牛肉干 *\n");

printf("\t* 3.龙岩花生 *\n");

printf("\t* 4.三鹿奶粉 *\n");

printf("\t* 5.雪津啤酒 *\n");

printf("\n\t****************************************\n");

}

int main()

{

SeqStack *s1,*s2,*s3,*s4,*s5;

char flag;

int choice1,choice2,choice3,choice4;

s1=Init_SeqStack();

s2=Init_SeqStack();

s3=Init_SeqStack();

s4=Init_SeqStack();

s5=Init_SeqStack();

while(flag!=Esc)

{

main_menu();

do

{

printf("请选择(1-3):");

scanf("%d",&choice1);

}

while(choice1<1||choice1>3);

switch(choice1)

{

case 1:system("cls");

Push_menu();

do

{

printf("请选择您要入架的商品(1-5):");

scanf("%d",&choice2);

}

while(choice2<1||choice2>5);

if(choice2==1)Goods_in(s1);

if(choice2==2)Goods_in(s2);

if(choice2==3)Goods_in(s3);

if(choice2==4)Goods_in(s4);

if(choice2==5)Goods_in(s5);

break;

case 2:system("cls");

Pop_menu();

do

{

printf("请选择您要销售的商品(1-5):");

scanf("%d",&choice3);

}

while(choice3<1||choice3>5);

if(choice3==1) Goods_out(s1);

if(choice3==2) Goods_out(s2);

if(choice3==3) Goods_out(s3);

if(choice3==4) Goods_out(s4);

if(choice3==5) Goods_out(s5);

break;

case 3: system("cls");

print_menu();

do

{

printf("请选择您要查看的商品的货架(1-5):");

scanf("%d",&choice4);

}

while(choice4<1||choice4>5);

if(choice4==1)

{

system("cls");

Goods_print(s1);

}

if(choice4==2)

{

system("cls");

Goods_print(s2);

}

if(choice4==3)

{

system("cls");

Goods_print(s3);

}

if(choice4==4)

{

system("cls");

Goods_print(s4);

}

if(choice4==5)

{

system("cls");

Goods_print(s5);

}

break;

}

printf("\n\n\t\t任意键返回,Esc键退出!");

flag=getch();

if(flag==Esc) break;

system("cls");

}

}

数据结构编程-商品货架管理模拟

#include "stdio.h"

#define MAX 100 //定义最大

struct stack //栈

{

long int number[MAX];

int top; //记录栈顶

}

struct queue //队列

{

long int number[MAX];

int front; //队头

int rear; //队尾

}

void buy(stack *p,queue *p1) //转换函数

{

p1->front=0; //将队列头设置为0;

p1->rear=p->top; //根据栈的大小设置队列尾

int i;

for(i=0;i<top;i++)

p1->number[i]=p->number[i]; //依次赋值

}

就这么写就可以实现你想要的功能,对数据结构的理解要灵活一点,我们只是人为的限制了结构体的访问方式,从而使访问方式类似一种现象。不明白请追问,或M我,724973040