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