c语言自动售货机实验报告.docx

上传人:b****1 文档编号:21001109 上传时间:2023-04-25 格式:DOCX 页数:17 大小:251.25KB
下载 相关 举报
c语言自动售货机实验报告.docx_第1页
第1页 / 共17页
c语言自动售货机实验报告.docx_第2页
第2页 / 共17页
c语言自动售货机实验报告.docx_第3页
第3页 / 共17页
c语言自动售货机实验报告.docx_第4页
第4页 / 共17页
c语言自动售货机实验报告.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

c语言自动售货机实验报告.docx

《c语言自动售货机实验报告.docx》由会员分享,可在线阅读,更多相关《c语言自动售货机实验报告.docx(17页珍藏版)》请在冰豆网上搜索。

c语言自动售货机实验报告.docx

c语言自动售货机实验报告

 

 

课程设计

 

课程名称C语言高级程序设计

 

学院xxx

 

小组成员1XXX

 

小组成员2XXX

 

小组成员3XXX

 

任课教师XXX

 

2016——2017学年第1学期

一.所选题目与要求

自动售货机

问题情景:

分析学校教学楼自动售货机的功能,设计一个自动售货系统。

功能要求:

1.系统能提供所售商品的清单(编号,名称,单价,数量)

2.客户输入商品编号与购买数量,系统显示应付的金额,输入客户实付的钱数,系统计算应找的钱数系统如果没有足够的库存或零钱时,现实应返还客户已付的金额。

(不考虑用支付宝付款的情况)

3.可增加商品种类,增加商品库存,查询商品库存,查询商品销售量与销售额。

成果要求:

通过网络教学平台中的“研究型教学”建立分组,每组2-3人,通过小组讨论,确定每人的分工,并确定系统设计方案。

各小组成员在网络教学平台上进行讨论、并完成最终的报告,整个过程作为小组与个人工作评价的重要依据。

各小组成员根据系统设计方案分模块进行编程,在系统各模块编码完成后集成调试,并最终完成整个系统的测试。

根据下面的报告模板完成综合实验总结报告,并打印成纸质报告,作为大作业课程结束时上交。

附:

综合实验总结报告应包含的容:

1.系统功能说明2.程序结构程序结构说明重要数据说明函数清单/* 每个函数的书写格式 */函数名:

所在文件名函数功能参数说明   算法描述或程序代码3.系统运行结果4.系统设计难点与其解决方法5.不足之处6.人员分工说明

二.问题分析与算法设计

主函数

voidmain()//主函数模块

{

do{

system("pause");

show();//显示屏幕函数,商品清单

loop1:

printf("现在你有%.1f元\n你可以选择商品序号开始选购或按0退出\n",M);

input();//输入函数

if(M-goods[n-1].price>v){t=0;printf("对不起,售货机没有足够的零钱了\n光临!

退还%.1f元\n",M);break;}//判断售货机是否有足够的零钱,0表无

if(n==0){//确认用户是选择离开还是买东西开始购买

t=1;

change(M);}//找零函数

else{

loop2:

sell(n,M,1,1);//购买函数

if(A==0)//货没有了怎么办

input();//输入函数

 

………………………………………………………………………..

if(n==0)//没货离开

change(M);//找钱函数

else//继续购买其它商品

{

……………………………………………

gotoloop2;返回至购买函数

}//else

}//if

elseif(B==0)//没钱了怎么办

{

…………………………………..

if(m1==0)//离开

change(M);返回至找零函数

else//加钱

{

…………………………………………..

gotoloop1;返回至再次购买

}//else

}//elseif

else//有钱又有货,继续选

gotoloop1;返回至购买程序

}//else

}while

(1);

}//main

 

结构体定义

structgoods//定义物品清单

{

intnumber;

charname[10];

floatprice;

intquantity;

}goods[9]={{1,"可口可乐",3,5},{2,"拿铁咖啡",4,5},{3,"橙汁",3,5},{4,"奶茶",4,5},{5,"雪碧",2.5,5},

{6,"矿泉水",2,5},{7,"椰子汁",2.5,5},{8,"格瓦斯",3,5}};

 

structmoney//定义钱的种类,数量用于记录找零的某值数

{

floatmoneys;

intmount;

}money[2]={{1,0},{0.5,0}};

 

被调用的函数

floatshow()//显示模块--屏幕

{

……………………………

}

intinput()//输入模块

{

…………………………..

}

}

intsell(intn,floatm,inta,intb)//出售模块n为序号,m钱,

{

……………………………

if(goods[i].quantity>0)//表示有货

{

………………………………..

}

else

A=0;//表示没货了

}

else

B=0;//表示没钱了

if(M==0)B=0;//判断出钱已用光

return(a);

return(b);

}

 

voidchange(floatm)//找钱模块

{

……………………………

switch(a){

case1花光…………………………………….

case2:

找零………………………………………

……………………………………}

}

三.程序源代码

#include

#include

floatM;//M为投入的钱数

intA=1,B=1,t;//A为数量标记,B为金钱标记,1表示有,0表示没有,t用于标记售货机是否能完成退款

inti,n,v=100;//i用于循环显示商品列表,n用于记录输入的货号,v用于保存售货机可以找零的钱数,初设为v=100

//结构体定义

structgoods//定义物品清单

{

intnumber;

charname[10];

floatprice;

intquantity;

}goods[9]={{1,"可口可乐",3,5},{2,"拿铁咖啡",4,5},{3,"橙汁",3,5},{4,"奶茶",4,5},{5,"雪碧",2.5,5},

{6,"矿泉水",2,5},{7,"椰子汁",2.5,5},{8,"格瓦斯",3,5}};

 

structmoney//定义钱的种类,数量用于记录找零的某值数

{

floatmoneys;

intmount;

}money[2]={{1,0},{0.5,0}};

 

floatshow()//显示模块--屏幕

{

system("pause");

putch('\n');

for(i=0;i<8;i++){

printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");

printf("|%d%8s%7.1f元...剩余%7d|\n",goods[i].number,goods[i].name,goods[i].price,goods[i].quantity);}

printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");

printf("购买东西前,请投入money!

(支持1元,5元,10元和20元)\n《温馨提示,投入money过多可能无法完成退币》\n");

scanf("%f",&M);

returnM;}

intinput()//输入模块

{

for(;;){

scanf("%d",&n);

if(n<0||n>8)

printf("输入错误,请重新输入商品序号开始选购或按0退出\n");

else{returnn;break;}

}

}

intsell(intn,floatm,inta,intb)//出售模块n为序号,m钱,

{

inti=0;

while(n!

=goods[i].number)i++;

if(m>=goods[i].price)

{if(goods[i].quantity>0)

{goods[i].quantity--;

M=m-goods[i].price;

for(i=0;i<8;i++){

printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");

printf("|%d%8s%7.1f元...剩余%7d|\n",goods[i].number,goods[i].name,goods[i].price,goods[i].quantity);}

printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");

printf("你的商品%d%s已经出货了\n",goods[n-1].number,goods[n-1].name);

}

else

A=0;//表示没货了

}

else

B=0;//表示钱了

if(M==0)B=0;//判断出钱已用光

return(a);

return(b);

}

 

voidchange(floatm)/钱模块

{

inti,a;//用于辅助输出

if(m==0)a=1;

if(m!

=0.0&&t!

=1)a=2;

switch(a){

case1:

printf("钱用光了哦\n光临!

");break;

case2:

{for(i=0;i<2;i++)

if(money[i].moneys<=m)

{m=m-money[i].moneys;

money[i].mount++;

i--;}//继续检索当前的面额是否符合条件,才会有一样面值出现

printf("光临!

\n找零\n");

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

if(money[i].mount>0)

printf("%d%.1f元\t\n",money[i].mount,money[i].moneys);m=0;M=0;};

money[0].mount=0;break;

}

}

 

voidmain()//主函数模块

{

do{

intt=1;//用于标记售货机是否能完成退款,1表能

floatm1;//m1用于记录用户再次加的钱

show();//显示--屏幕

loop1:

printf("现在你有%.1f元\n你可以选择商品序号开始选购或按0退出\n",M);

input();//输入函数

if(M-goods[n-1].price>v){t=0;printf("对不起,售货机没有足够的零钱了\n光临!

退还%.1f元\n",M);break;}//判断售货机是否有足够的零钱,0表无

if(n==0){//确认用户是选择离开还是买东西开始购买

t=1;

change(M);}/零函数

else{

loop2:

sell(n,M,1,1);

if(A==0)//货没有了怎么办

{printf("可惜了,商品%d已卖完了\n你还有%.1f元\n你可以买其它商品(直接输入商品序号)或按0离开\n",n,M);

input();//输入函数

if(n==0)

change(M);/钱函数

else

{A=1;

B=1;//要将标记归位

gotoloop2;

}//else

}//if

elseif(B==0)//没钱了怎么办

{printf("噢,,,没钱了,你可以继续投入money购买,或按0离开\n");

scanf("%f",&m1);

if(m1==0)

change(M);

else

{M=M+m1;

A=1;

B=1;//标记要归位

gotoloop1;

}//else

}//elseif

else//有钱又有货,继续选

gotoloop1;

}//else

}while

(1);

}//main

四.系统功能与运行效果图

一,系统提供商品清单,并提示购买前投入money

二,如果用户投入的money过多,售货机无足够硬币完成退币,自动退还用户已付金额

三,用户投入money购买,确定购买商品后,系统显示如下

四,如果不想继续购买,则按0退出,系统自动完成找零

五,想继续购买,则直接输入商品序号,当商品已售完时,系统自动提示如下

六,若不想退出,则可以继续购买其它商品,直到剩余钱不足时

七,想继续购买,则直接加钱后购买,钱全部花完时,系统提示如

五.研究总结

1.研究过程

接到研究型学习任务后,我们三个同学组成了小组进行探究。

首先我们先详细分析讨论了整个系统需要完成的功能细节,并考虑了实现的方法。

一开始我们的方法不够优化,我们通过查阅一些资料,得到了新的方法,拓宽了思路,并且再次进行了讨论。

讨论完毕后进行了组员的分工,大家在一周进行了代码的编写和模块化调试,最后所有模块合在一起进行了总的调试。

调试过程中又发现了不少问题,我们又一一加以修改,最后形成了现在这个较为完善的程序。

2.小组分工

王宗德—组长,编写主程序,排版,划分模块,负责调试合成整个代码等。

何硕—负责收集资料,负责部分子模块程序的编写,撰写实验报告。

泳—检查程序错误与部分程序设计,完善实验报告。

3.收获

经过本次研究型学习任务,我们小组深刻意识到了分工合作的重要性。

大家在探究过程中各司其职,相互帮助。

除此以外,我们也加深了对课上所学知识的理解,比如字符串、数组与指针、结构体使用等。

我们意识到实践是提高知识水平和专业技能的重要途径。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1