c语言自动售货机实验报告Word下载.docx
- 文档编号:1077716
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:17
- 大小:251.25KB
c语言自动售货机实验报告Word下载.docx
《c语言自动售货机实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《c语言自动售货机实验报告Word下载.docx(17页珍藏版)》请在冰点文库上搜索。
*/函数名:
所在文件名函数功能参数说明
算法描述或程序代码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;
对不起,售货机没有足够的零钱了\n光临!
退还%.1f元\n"
break;
}//判断售货机是否有足够的零钱,0表无
if(n==0){//确认用户是选择离开还是买东西开始购买
t=1;
change(M);
}//找零函数
else{
loop2:
sell(n,M,1,1);
//购买函数
if(A==0)//货没有了怎么办
………………………………………………………………………..
if(n==0)//没货离开
change(M);
//找钱函数
else//继续购买其它商品
{
……………………………………………
gotoloop2;
返回至购买函数
}//else
}//if
elseif(B==0)//没钱了怎么办
{
…………………………………..
if(m1==0)//离开
返回至找零函数
else//加钱
…………………………………………..
gotoloop1;
返回至再次购买
}//elseif
else//有钱又有货,继续选
gotoloop1;
返回至购买程序
}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<
stdio.h>
conio.h>
floatM;
//M为投入的钱数
intA=1,B=1,t;
//A为数量标记,B为金钱标记,1表示有,0表示没有,t用于标记售货机是否能完成退款
inti,n,v=100;
//i用于循环显示商品列表,n用于记录输入的货号,v用于保存售货机可以找零的钱数,初设为v=100
//结构体定义
putch('
\n'
for(i=0;
i<
8;
i++){
printf("
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n"
|%d%8s%7.1f元...剩余%7d|\n"
goods[i].number,goods[i].name,goods[i].price,goods[i].quantity);
printf("
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"
购买东西前,请投入money!
(支持1元,5元,10元和20元)\n《温馨提示,投入money过多可能无法完成退币》\n"
scanf("
%f"
&
M);
returnM;
for(;
;
){
%d"
n);
if(n<
0||n>
8)
输入错误,请重新输入商品序号开始选购或按0退出\n"
else{returnn;
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;
printf("
你的商品%d%s已经出货了\n"
goods[n-1].number,goods[n-1].name);
//表示钱了
voidchange(floatm)/钱模块
inti,a;
//用于辅助输出
if(m==0)a=1;
if(m!
=0.0&
&
t!
=1)a=2;
case1:
钱用光了哦\n光临!
"
case2:
{for(i=0;
2;
i++)
if(money[i].moneys<
=m)
{m=m-money[i].moneys;
money[i].mount++;
i--;
}//继续检索当前的面额是否符合条件,才会有一样面值出现
光临!
\n找零\n"
for(i=0;
if(money[i].mount>
printf("
%d%.1f元\t\n"
money[i].mount,money[i].moneys);
m=0;
M=0;
};
money[0].mount=0;
}
do{
intt=1;
//用于标记售货机是否能完成退款,1表能
floatm1;
//m1用于记录用户再次加的钱
//显示--屏幕
if(n==0){//确认用户是选择离开还是买东西开始购买
t=1;
}/零函数
{printf("
可惜了,商品%d已卖完了\n你还有%.1f元\n你可以买其它商品(直接输入商品序号)或按0离开\n"
n,M);
if(n==0)
/钱函数
{A=1;
B=1;
//要将标记归位
噢,,,没钱了,你可以继续投入money购买,或按0离开\n"
m1);
if(m1==0)
{M=M+m1;
A=1;
//标记要归位
四.系统功能与运行效果图
一,系统提供商品清单,并提示购买前投入money
二,如果用户投入的money过多,售货机无足够硬币完成退币,自动退还用户已付金额
三,用户投入money购买,确定购买商品后,系统显示如下
四,如果不想继续购买,则按0退出,系统自动完成找零
五,想继续购买,则直接输入商品序号,当商品已售完时,系统自动提示如下
六,若不想退出,则可以继续购买其它商品,直到剩余钱不足时
七,想继续购买,则直接加钱后购买,钱全部花完时,系统提示如
五.研究总结
1.研究过程
接到研究型学习任务后,我们三个同学组成了小组进行探究。
首先我们先详细分析讨论了整个系统需要完成的功能细节,并考虑了实现的方法。
一开始我们的方法不够优化,我们通过查阅一些资料,得到了新的方法,拓宽了思路,并且再次进行了讨论。
讨论完毕后进行了组员的分工,大家在一周进行了代码的编写和模块化调试,最后所有模块合在一起进行了总的调试。
调试过程中又发现了不少问题,我们又一一加以修改,最后形成了现在这个较为完善的程序。
2.小组分工
王宗德—组长,编写主程序,排版,划分模块,负责调试合成整个代码等。
何硕—负责收集资料,负责部分子模块程序的编写,撰写实验报告。
泳—检查程序错误与部分程序设计,完善实验报告。
3.收获
经过本次研究型学习任务,我们小组深刻意识到了分工合作的重要性。
大家在探究过程中各司其职,相互帮助。
除此以外,我们也加深了对课上所学知识的理解,比如字符串、数组与指针、结构体使用等。
我们意识到实践是提高知识水平和专业技能的重要途径。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 自动 售货 实验 报告