c语言自动售货机实验报告
更新时间:2023-11-12 15:15:01 阅读量: 教育文库 文档下载
课程设计
课程名称
C语言高级程序设计
xxx XXX XXX XXX XXX
学
院
小组成员1
小组成员2
小组成员3
任课教师
2016——2017学年 第1学期
1
一. 所选题目与要求
自动售货机 问题情景:
分析学校教学楼自动售货机的功能,设计一个自动售货系统。
功能要求:
1.系统能提供所售商品的清单(编号,名称,单价,数量)
2.客户输入商品编号及购买数量,系统显示应付的金额,输入客户实付的钱数,系统计算应找的钱数系统如果没有足够的库存或零钱时,现实应返还客户已付的金额。(不考虑用支付宝付款的情况)
3.可增加商品种类,增加商品库存,查询商品库存,查询商品销售量及销售额。
成果要求:
通过网络教学平台中的“研究型教学”建立分组,每组2-3人,通过小组讨论,确定每人的分工,并确定系统设计方案。
各小组成员在网络教学平台上进行讨论、并完成最终的报告,整个过程作为小组及个人工作评价的重要依据。
各小组成员根据系统设计方案分模块进行编程,在系统各模块编码完成后集成调试,并最终完成整个系统的测试。
根据下面的报告模板完成综合实验总结报告,并打印成纸质报告,作为大作业课程结束时上交。
附:综合实验总结报告应包含的内容: 1. 系统功能说明 2. 程序结构 ? 程序结构说明 ? 重要数据说明 ? 函数清单
/* 每个函数的书写格式 */ 函数名:所在文件名 函数功能
2
参数说明
算法描述或程序代码 3. 系统运行结果
4. 系统设计难点及其解决方法 5. 不足之处 6. 人员分工说明
二. 问题分析及算法设计
主函数
void main() //主函数模块 { do{ system(\
show(); //显示屏幕函数,商品清单
loop1:printf(\现在你有%.1f元\\n你可以选择商品序号开始选购或按 0 退出\\n\
input(); //输入函数
if(M-goods[n-1].price>v) {t=0;printf(\对不起,售货机没有足够的零钱了\\n谢谢
光临!退还%.1f元\\n\判断售货机是否有足够的零钱,0表无
if(n==0){ //确认用户是选择离开还是买东西开始购买
t=1;
change(M);} //找零函数
else {
loop2:sell(n,M,1,1); //购买函数
if(A==0)//货没有了怎么办 input(); //输入函数
………………………………………………………………………..
3
if(n==0) //没货离开
change(M); //找钱函数
else //继续购买其它商品
{
…………………………………………… goto loop2;返回至购买函数 } //else } //if
else if(B==0)//没钱了怎么办
{
………………………………….. if(m1==0) //离开
change(M);返回至找零函数
else //加钱
{
………………………………………….. goto loop1;返回至再次购买 } //else } //else if
else//有钱又有货,继续选
goto loop1;返回至购买程序
} //else }while(1); } //main
结构体定义
struct goods //定义物品清单 { int number;
char name[10];
4
float price; int quantity;
}goods[9]={{1,\可口可乐\拿铁咖啡\橙汁\奶茶\雪碧\
{6,\矿泉水\椰子汁\格瓦斯\
struct money //定义钱的种类,数量用于记录找零的某值张数 { float moneys; int mount;
}money[2]={{1,0},{0.5,0}};
被调用的函数
float show() //显示模块--屏幕 {
…………………………… }
int input() //输入模块 {
………………………….. } }
int sell(intn,floatm,inta,int b) //出售模块n为序号,m钱, {
……………………………
if(goods[i].quantity>0) //表示有货 {
……………………………….. } else
5
}
} else
A=0; //表示没货了
B=0; //表示没钱了
if(M==0) B=0;//判断出钱已用光 return(a); return(b);
void change(float m) //找钱模块 {
…………………………… switch(a){
case 1花光……………………………………. case 2:找零………………………………………
}
…………………………………… }
三. 程序源代码
#include
float M;//M为投入的钱数
int A=1,B=1,t; //A为数量标记,B为金钱标记,1表示有,0表示没有,t用于标记售货机是否能完成退款
inti,n,v=100; //i用于循环显示商品列表,n用于记录输入的货号,v用于保存售货机内可以找零的钱数,初设为v=100
//结构体定义
struct goods //定义物品清单 {
int number;
6
char name[10]; float price; int quantity;
}goods[9]={{1,\可口可乐\拿铁咖啡\橙汁\奶茶\雪碧\
{6,\矿泉水\椰子汁\格瓦斯\
struct money //定义钱的种类,数量用于记录找零的某值张数 {
float moneys; int mount;
}money[2]={{1,0},{0.5,0}};
float show() //显示模块--屏幕 {
system(\ putch('\\n');
for(i=0;i<8;i++){ printf(\ |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\\n\ printf(\ |%d%8s%7.1f元...剩
余}|\\n\ printf(\ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\n\
printf(\购买东西前,请投入money!(支持1元,5元,10元和20元)\\n《温馨提示,投入money过多可能无法完成退币》\\n\ scanf(\ return M;}
int input() //输入模块 {
for(;;){
scanf(\ if(n<0||n>8) printf(\输入错误,请重新输入商品序号开始选购或按 0 退出\\n\ else {return n;break;} } }
int sell(intn,floatm,inta,int b) //出售模块 n为序号,m钱, {
7
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元...剩
余}|\\n\ printf(\ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\n\ printf(\你的商品 %d %s 已经出货了\\n\ } else A=0; //表示没货了 } else B=0; //表示钱了
if(M==0) B=0;//判断出钱已用光 return(a); return(b); }
void change(float m) /钱模块 {
inti,a;//用于辅助输出 if(m==0) a=1;
if(m!=0.0&&t!=1) a=2; switch(a){ case 1:printf(\钱用光了哦\\n谢谢光临!\ case 2:{for(i=0;i<2;i++) if(money[i].moneys<=m) {m=m-money[i].moneys; money[i].mount++; i--;}//继续检索当前的面额是否符合条件,才会有相同面值出现 printf(\ 谢谢光临!\\n找零\\n\
8
for(i=0;i<2;i++) if(money[i].mount>0) printf(\张%.1f元
\\t\\n\ money[0].mount=0;break; } }
void main() //主函数模块 {
do{
int t=1; //用于标记售货机是否能完成退款,1表能 float m1; //m1用于记录用户再次加的钱 show(); //显示--屏幕
loop1:printf(\现在你有%.1f元\\n你可以选择商品序号开始选购或按 0 退出\\n\
input(); //输入函数
if(M-goods[n-1].price>v) {t=0;printf(\对不起,售货机没有足够的零钱了\\n谢谢光临!退还%.1f元\\n\判断售货机是否有足够的零钱,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\ input(); //输入函数 if(n==0) change(M); /钱函数 else {A=1;
B=1;//要将标记归位 goto loop2; } //else } //if
9
else if(B==0)//没钱了怎么办
{printf(\噢,,,没钱了,你可以继续投入money购买,或按 0 离开\\n\ scanf(\ if(m1==0) change(M); else
{M=M+m1; A=1;
B=1;//标记要归位 goto loop1; } //else } //else if
else//有钱又有货,继续选 goto loop1; } //else }while(1); } //main
四. 系统功能及运行效果图
一, 系统提供商品清单,并提示购买前投入money
二, 如果用户投入的money过多,售货机无足够硬币完成退币,10
自
动退还用户已付金额
三, 用户投入money购买,确定购买商品后,系统显示如下
11
四, 如果不想继续购买,则按0退出,系统自动完成找零
五, 想继续购买,则直接输入商品序号,当商品已售完时,系统自
12
动提示如下
六,
若不想退出,则可以继续购买其它商品,直到剩余钱不足时
13
七,
想继续购买,则直接加钱后购买,钱全部花完时,系统提示如
14
五. 研究总结
1.研究过程
接到研究型学习任务后,我们三个同学组成了小组进行探究。 首先我们先详细分析讨论了整个系统需要完成的功能细节,并考虑了实现的方法。 一开始我们的方法不够优化,我们通过查阅一些资料,得到了新的方法,拓宽了思路, 并且再次进行了讨论。讨论完毕后进行了组员的分工,大家在一周内进行了代码的编写和模块化调试,最后所有模块合在一起进行了总的调试。调试过程中又发现了不少问题,我们又一一加以修改,最后形成了现在这个较为完善的程序。
2.小组分工
王宗德—组长,编写主程序,排版,划分模块,负责调试合成整个代码等。 何硕—负责收集资料,负责部分子模块程序的编写,撰写实验报告。 刘泳—检查程序错误及部分程序设计,完善实验报告。
15
3.收获
经过本次研究型学习任务,我们小组深刻意识到了分工合作的重要性。大家在探究过程中各司其职,相互帮助。除此以外,我们也加深了对课上所学知识的理解,比如字符串、数组与指针、结构体使用等。我们意识到实践是提高知识水平和专业技能的重要途径。
16
17
正在阅读:
c语言自动售货机实验报告11-12
放手也是一种爱作文1000字06-21
温室大樱桃种植技术04-11
2018-2024年中国面部护理品行业发展前景预测研究报告(目录)05-02
电脑维修队简介07-04
从一道高考题看等效平衡04-18
工程经济大作业(2)03-09
cihui06-16
《黑客帝国》系列电影特效分析04-22
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 自动售货机
- 语言
- 实验
- 报告
- 高代选讲讲义1章(1)
- 机械设计基础总复习
- 106届广交会买家
- 全套企业培训体系建设方案
- 五年级数学质量分析材料
- 2013年湖北省对口升学高考语文模拟试题及答案
- 论问题意识在科研过程中的作用
- BP美国德州炼油厂火灾爆炸事故 - 图文
- 2010年全美大学排名 - 图文
- 银行授信业务尽职调查报告(2014年版)
- 最高人民法院关于人民法院审理事业单位人事争议案件若干问题的规定
- 黑龙江省联通公司4G校园套餐
- 数据库考试模拟题(1)
- 河南省紧急避险系统验收标准和评分办法(豫煤安避险1号)
- UPS三进单出GES15K使用说明书
- 桩功的千古不传之秘
- 职业技能鉴定-风力发电运行检修员题库 - 图文
- 中国食品及饲料添加剂行业市场运行动态与发展战略分析报告2016-2021年
- 四川省有机认证企业名单
- 电场能的性质