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 #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

本文来源:https://www.bwwdw.com/article/mjlv.html

Top