课程设计
课 程: 算法数结构
题 目: 商品货架理
专 业: 计算机类
班 级:
座 号:
姓 名:
2012年 X月 X 日
解决问题
商店货架栈方式摆放商品商品货架成栈栈顶商品生产日期早栈底商品生产日期生产日期越接越栈底出货时栈顶取货天营业结束果货架满需货入货直接商品摆放货架会生产日期越商品越栈顶样需倒货架生产日期越越栈底请编写程序模拟商品销售架倒货架等操作(设5种商品种商品少商品名生产日期两属性)
二算法基思想描述:
天营业开始首先店商品货架(栈)满货物商店总5种商品商品名:abcde商品货架满货物接着天营业结束店天销售出商品应货架补满店输入第种需补货商品商品名天销售出数量然输入补货架商品名生产日期补货架商品货架未销售出货物进行生产日期较补货架货物日期较早直接货架否进行倒货补货样日期较放栈底外申请空栈存储倒出货物第种商品补完货问店否商品需补货需补货第种商品补货程序进行类推进行补货
三设计
1 数结构设计
(1)商品信息:
typedef struct
{
char b存储商品名
商品日期年月日
int year
int month
int day
}Data
(2)商品货架(栈)
#define max 5
typedef struct
{
Data a[max]0栈底位置
int top栈顶
}Stack
(3)商品种类:
Stack *s[5]5种商品
2算法设计:
(1)初始化空栈:
利for循环(商品货架)栈申请空间进行判断否申请空间没申请空间输出提示空间足申请空间top指栈顶初始值-1栈底0位置
(2)货算法设计:
先定义四变量分字符型k1整型k2k3k4存储商品名商品生产日期赋值栈元素属性商品货赋值前先判断top否值输出提示栈满结束该货程序货物满输出提示表示商品货架满输出时货架货物数量利for循环进行商品货直5商品货架全部满
(3)出货(天销售)算法设计:
天营业结束店需销售出商品进行补货需知道商品销售出销售数量店输入天销售出种商品商品名店输入商店没商品名输出提示店次输入商品名接着输入销售数量程序销售数量进行判断否超出栈值(货架容纳货物数量)超出输出提示请店次输入销售数量
(4)补货算法设计:
子函数中先定义四变量分字符型k1整型k2k3k4存储补货架商品名商品生产日期外初始化空栈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 *Sint x) 补货
6)Stack *outstack(Stack *SStack *L) 倒货
7)void Print(Stack *S) 印商品栈货物信息
(8)模块算法描述:
货:
Stack *onput(Stack *S)
{
int j
char k1储存商品名
int k2k3k4储存商品生产日期年月日
for(j0j
if(S>topmax1)判断栈满
{
printf(栈满\n)栈满入栈
return S
}
S>top++
printf(栈数d S>top)印货物栈数
输入商品名生产日期
fflush(stdin)清缓存区
scanf(c ddd&k1&k2&k3&k4)输入商品信息
S>a[S>top]bk1
S>a[S>top]yeark2
S>a[S>top]monthk3
S>a[S>top]dayk4
}
printf(该商品货架满\n)
printf(时该商品货架d商品\n\nS>top+1)
return S
}
出货:
出货
void *outpush(Stack *S)
{
printf(请店输入天c商品销售出数量:S>a[S>top]b)
int xi
fflush(stdin)清缓存区
do{
fflush(stdin)
scanf(d&x)
if(x>max)
printf(该货架没商品请重输\n)
}while(x>max)
for(i1i
printf(时c商品货架数量剩d件需补货架数量d\n\nS>a[S>top]bS>top+1x)
补货
backstack(Sx)
}
补货:
补货
void backstack(Stack *Sint x)
{
int iii
int temp
char k1储存商品名
int k2k3k4储存生产日期分应年月日
Stack *L
Linitstack()重新申请空栈倒货时存放货物
printf(请输入补货架商品名(字符)空格输入该商品生产日期(年月日)货件回车键结束:\n)
for(i1i
输入商品名生产日期
fflush(stdin)清缓存区
scanf(c ddd&k1&k2&k3&k4)
if(S>top1)时货架商品直接货
{
S>top++
S>a[S>top]bk1
S>a[S>top]yeark2
S>a[S>top]monthk3
S>a[S>top]dayk4
printf(补货成功第d件\ni)
printf(时栈顶数:d\nS>top)
}
else{
if(k2
{
S>top++
S>a[S>top]bk1
S>a[S>top]yeark2
S>a[S>top]monthk3
S>a[S>top]dayk4
printf(补货成功第d件\ni)
printf(时栈顶数:d\nS>top)
temp1
}
else
{
for(iiS>topii>1&&S>top1ii)
{
temp0标记否货物架
if(k2S>a[S>top]year)生产年份补货架货架样较月份
{
if(k3
{
S>top++
S>a[S>top]bk1
S>a[S>top]yeark2
S>a[S>top]monthk3
S>a[S>top]dayk4
printf(补货成功第d件\ni)
printf(时栈顶数:d\nS>top)
temp1
if(temp1)break
}
else
{
if(k3S>a[S>top]month)生产月份补货架货架样较生产天日期
{
if(k4
{
S>top++
S>a[S>top]bk1
S>a[S>top]yeark2
S>a[S>top]monthk3
S>a[S>top]dayk4
printf(补货成功第d件\ni)
printf(时栈顶数:d\nS>top)
temp1
if(temp1)break
}
else
{
倒货
Loutstack(SL)
}
}
else
{
倒货
Loutstack(SL)
}
}
}
if(k2>S>a[S>top]year)时生产年份补货架货架
{
Loutstack(SL)倒货
}
}
if(temp0)
{
S>top++
S>a[S>top]bk1
S>a[S>top]yeark2
S>a[S>top]monthk3
S>a[S>top]dayk4
printf(补货成功第d件\ni)
printf(时栈顶数:d\nS>top)
}
while(L>top>1)存储L栈中商品架
{
S>top++
S>a[S>top]L>a[L>top]
}
Linitstack()
}
}
}
printf(补货完成\n\n)
Print(S)
}
倒货:
倒货
Stack *outstack(Stack *SStack *L)
{
L>top++
L>a[L>top]S>a[S>top]
S>top
printf(时栈顶数:d\nS>top)
printf(倒货次\n\n)
return L
}
四源程序清单:
#include
#include
#include
#define max 5
typedef 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>top1
return S
}
}
货架摆放货物印出
void Print(Stack *S)
{
printf(c商品货架摆放d货物:\nS>a[S>top]bS>top+1)
while(S>top>1)
{
printf(c ddd\nS>a[S>top]bS>a[S>top]yearS>a[S>top]monthS>a[S>top]day)
S>top
}
}
货
Stack *onput(Stack *S)
{
int j
char k1
int k2k3k4
for(j0j
if(S>topmax1)
{
printf(栈满\n)栈满入栈
return S
}
S>top++
printf(栈数d S>top)
输入商品名生产日期
fflush(stdin)清缓存区
scanf(c ddd&k1&k2&k3&k4)
S>a[S>top]bk1
S>a[S>top]yeark2
S>a[S>top]monthk3
S>a[S>top]dayk4
}
printf(该商品货架满\n)
printf(时该商品货架d商品\n\nS>top+1)
return S
}
倒货
Stack *outstack(Stack *SStack *L)
{
L>top++
L>a[L>top]S>a[S>top]
S>top
printf(时栈顶数:d\nS>top)
printf(倒货次\n\n)
return L
}
补货
void backstack(Stack *Sint x)
{
int iii
int temp
char k1储存商品名
int k2k3k4储存生产日期分应年月日
Stack *L
Linitstack()重新申请空栈倒货时存放货物
printf(请输入补货架商品名(字符)空格输入该商品生产日期(年月日)货件回车键结束:\n)
for(i1i
输入商品名生产日期
fflush(stdin)清缓存区
scanf(c ddd&k1&k2&k3&k4)
if(S>top1)时货架商品直接货
{
S>top++
S>a[S>top]bk1
S>a[S>top]yeark2
S>a[S>top]monthk3
S>a[S>top]dayk4
printf(补货成功第d件\ni)
printf(时栈顶数:d\nS>top)
}
else{
if(k2
{
S>top++
S>a[S>top]bk1
S>a[S>top]yeark2
S>a[S>top]monthk3
S>a[S>top]dayk4
printf(补货成功第d件\ni)
printf(时栈顶数:d\nS>top)
temp1
}
else
{
for(iiS>topii>1&&S>top1ii)
{
temp0标记否货物架
if(k2S>a[S>top]year)生产年份补货架货架样较月份
{
if(k3
{
S>top++
S>a[S>top]bk1
S>a[S>top]yeark2
S>a[S>top]monthk3
S>a[S>top]dayk4
printf(补货成功第d件\ni)
printf(时栈顶数:d\nS>top)
temp1
if(temp1)break
}
else
{
if(k3S>a[S>top]month)生产月份补货架货架样较生产天日期
{
if(k4
{
S>top++
S>a[S>top]bk1
S>a[S>top]yeark2
S>a[S>top]monthk3
S>a[S>top]dayk4
printf(补货成功第d件\ni)
printf(时栈顶数:d\nS>top)
temp1
if(temp1)break
}
else
{
倒货
Loutstack(SL)
}
}
else
{
倒货
Loutstack(SL)
}
}
}
if(k2>S>a[S>top]year)时生产年份补货架货架
{
Loutstack(SL)倒货
}
}
if(temp0)
{
S>top++
S>a[S>top]bk1
S>a[S>top]yeark2
S>a[S>top]monthk3
S>a[S>top]dayk4
printf(补货成功第d件\ni)
printf(时栈顶数:d\nS>top)
}
while(L>top>1)存储L栈中商品架
{
S>top++
S>a[S>top]L>a[L>top]
}
Linitstack()
}
}
}
printf(补货完成\n\n)
Print(S)
}
出货
void *outpush(Stack *S)
{
printf(请店输入天c商品销售出数量:S>a[S>top]b)
int xi
fflush(stdin)
do{
fflush(stdin)
scanf(d&x)
if(x>max)
printf(该货架没商品请重输\n)
}while(x>max)
for(i1i
printf(时c商品货架数量剩d件需补货架数量d\n\nS>a[S>top]bS>top+1x)
补货
backstack(Sx)
}
int main(void)
{
Stack *s[5]5种商品
int i
printf(计算机类1102班 郑桂萍 学号:3110307201\n\n)
printf(商店5种商品分abcde\n\n)
for(i0i<5i++)
{
s[i]initstack()初始化栈
printf(请输入货第d种商品名(字符)空格输入该商品生产日期(年月日)货件回车键结束:\ni+1)
s[i]onput(s[i])商品入栈(货)
}
char cyes_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商品输入错误\nc)
}
do
{
fflush(stdin)
printf(请问店销售出商品?果请Y否N\n)
yes_nogetchar()
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 201211
a 201211
a 201122
a 201111
a 201111
b 201222
b 201222
b 201222
b 201222
b 201222
c 201222
c 201222
c 201222
c 201222
c 201222
d 201222
d 201222
d 201222
d 201222
d 201222
e 201222
e 201222
e 201222
e 201222
e 20122
出货:
天销售出商品商品名:
a
销售数量:2
补货
a 201422
a 2009122
测试结果:
商品栈货物信息:
a 2009122
a 201122
a 201211
a 201211
a 201422
否需补货商品:
N
六课程设计总结心体会:
通次课程设计更深刻体会编写程序前首先分析知道功做什等等实现需认真思考分析划分整体成模块逐实现种解决方法调试程序程中需细心耐心
福 建 工 程 学 院
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档