自动售货机c编程.docx
- 文档编号:25991577
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:143
- 大小:306.54KB
自动售货机c编程.docx
《自动售货机c编程.docx》由会员分享,可在线阅读,更多相关《自动售货机c编程.docx(143页珍藏版)》请在冰豆网上搜索。
自动售货机c编程
C语言课程设计报告
自动售货机
图形模拟系统
题目:
自动售货机图形模拟仿真班级:
学号:
组员:
学号:
指导教师:
上交日期:
1前言3
1.1售货机的背景3
1.2编写目的3
1.3任务概括4
2需求剖析4
2.1需求剖析4
2.2运转环境5
3系统设计6
3.1功能需求描绘6
3.2程序流程图6
3.3功能和操作简介(界面)6
3.4程序模块区分11
3.5程序中的名词定义及说明16
4算法剖析24
4.1中默算法剖析24
4.2其余函数算法剖析30
5程序总结38
5.1编程过程中的疑难点办理38
5.2程序不足之处41
1
642
742
842
2
一.前言
1.1背景
自动售货机是能依据投入的钱币自动付货的机器是商业自动化的常用设施,
它不受时间、地址的限制,能节俭人力、方便交易。
是一种崭新的商业零售形式,又被称为24小时营业的微型商场。
能分为三种:
饮料自动售货机、食品自动售货机、综合自动售货机。
自动售货机是一种崭新的商业零售形式,20世纪70
年代自日本和欧美发展起来。
自动售货咖啡机是一种既能够出冷热咖啡也能够同时出奶茶果汁饮料的咖啡饮料自动售货机,省时方便快捷。
既能够作投资来使用,也可作为职工福利来使用。
此刻,自动售货机家产正在走向信息化并进一步实现合理化。
24小时无
人售货的系统能够更省力,营运时需要的资本少、面积小,有吸引人们购
买好奇心的自己性能,能够很好地解决人工花费上涨的问题等各项长处。
1.2编写目的
经过对自动售货机买卖商品的过程剖析,成立模拟自动售货机的图形界面操作系统,对其投币、出货、统计等多个方面的功能模拟,实现模拟真切自动售货机的操作流程。
此次C语言课程设计是本专业的第一次课程设计,拥有重要的意义:
经过上个学期对C语言的学习,对C语言编程有了初步的认识,获取了必定的基础但是特别缺少实质的编程经验,没法从质上对自己的编程技巧有一个很大的提升,此次的
课程设计给我们供给了一个特别好的锻炼时机。
经过二个人的分工合作,在实质中运用和训练程序设计的模块化和工程化思想和技术,努力掌握C语言精华;同时提升自己的沟通与团队合作的能力.为此后的更专业更复杂的课程设计和实践活动打好基础。
3
1.3任务概括
自动售货机售货9种商品,价钱分别为3元,5元和7元。
顾客投入10元、5元或2元的纸币,而后选择购置9种商品之一,自动售货机吐出商品,并且找
给用户零钱。
假如商品售完,或许没法找零,则给出用户一个提示,商品已售完,并且退还纸币。
程序具备以下功能:
库存查问:
检索9种商品的储藏量
商品上架:
为9种商品增添
销售查问:
分别统计今日每种商品的销售量和销售额会计查问:
打印当日的来往帐目以及节余零钞数目结算功能:
能够拿出金额
销售界面:
顾客投入纸币,选择商品,获取商品和零钱;或许直接显示错误并退还纸币
要求以自动售货机为对象,图形化模拟投币、找零、出货的基本流程;能对售货机的商品进行管理:
补货、查问、统计等功能。
二.需求剖析
2.1需求剖析
自动售货机是一种崭新的商业零售形式,20世纪70年代自日本和欧美
发展起来。
它又被称为24小时营业的微型商场。
在日本,70%的罐装饮料
是经过自动售货机售出的。
全世界有名饮料商爽口可乐企业在全世界就布有
50万台饮料自动售货机。
此刻,自动售货机家产正在走向信息化并进一步实现合理化。
自动售货咖啡机是一种既能够出冷热咖啡也能够同时出奶茶果汁饮料的咖啡饮料自动售货机,省时方便快捷。
既能够作投资来使用,也可作为职工福利来使用。
4
从自动售货机的发展趋向来看,它的出现是因为劳动密集型的家产结构向技术密集型社会转变的产物。
大批生产、大批花费以及花费模式和销售
环境的变化,要求出现新的流通渠道;而相对的商场、百货购物中心等新的流通渠道的产生,人工花费也不停上涨;再加上场所的限制性以及购物的便利性等这些要素的限制,无人自动售货机作为一种一定的机器便应运而生了。
此刻,自动售货机家产正在走向信息化并进一步实现合理化。
比如推行联机方式,经过电话线路将自动售货机内的库存信息实时地传递各营业点的电脑中,进而保证了商品的发送、增补以及商品选定的顺利进行。
并且,为防备地球暖化,自动售货机的开发致力于能源的节俭,节能型清冷饮料自动售货机成为该行业的主流。
我们用TC3.0编写的C语言程序来模拟自动售货机的控制及各样操作过
程。
2.2运转环境(DOS环境)
该系统赐予tc2.0和bc31开发,合用于dos3.0以上的所有dos版本和
windows操作系统;本软件设计中加入了鼠标和键盘操作,所以操作过程一定依
赖鼠标和键盘才能实现所有功能;本软件关于显示卡无特别要求;本软件能够允
许用户自定义一些参数,拥有优秀的人机交互性。
本软件主要的输入方式是数字输入,实质操作是经过键盘或许鼠标选择我们给出的汉化菜单项选择项。
输出信息也将采纳汉化的窗口(包含弹窗)传达给用户。
除此以外无其余特别要求;
出现图形没法显示或图形显示成效差——办理方法:
检查显示卡驱动能否正常;出现某些子程序的初始化没法正常达成——办理方法:
显示初始化失败的地点,并退出程序;出现空间分派失败——办理方法:
显示为内存不够,退出程序并检查内存利用状况;
5
三.系统设计
3.1功能需求描绘
进入主界面,能够有管理员进口和顾客模式。
顾客模式先,选摘要购置的饮料。
若有库存则出货,选择投硬币和投纸币,此中纸币有2元5元10元能够供选择,选择完币值后,按键确立,在出币扣找零。
管理员模式先点击钥匙口(key),会弹出一个对话框要求输入密码确立权限,进入后可查问各样饮料的节余量和售量、销售币额以及顾客购置的时间。
管理员还能够进行密码的改正。
3.2程序流程图(见附录)
3.3功能和操作简介(界面)
菜单界面——点击“帮
助”出现如图上的界
面,按键ESC退出;
点击“退出”,则退出
系统;点击“buy”进
入售货模式;点击
“key”进入管理模式
6
点击“buy”后进
入售货模式,选择
商品,当鼠标到对
应商品时会出现
箭头提示
单击选择商品,系
统会查察选择的
商品能否还有存
货,假若有会进入投币环节,假如没有,则输出无存货,而后对销售货模式。
进入投币环节,当
鼠标移到投纸币窗
口时,会出现下拉
式菜单,用于选择投入纸币的面额,当鼠标移到投硬币的窗口单击,
会投入一元硬币,若投入,会有提示,并显示此时投入的总数。
按键ENTER表示确立。
(如单击10元,右侧会显示“投入币额:
10元”)
7
显示找零,并且会显示找出的几个硬币,几张多少面值的纸币,
而后物件从里面出来。
8
假如点击“key”,则进入管理界面,进入管理界面是会要求先输入密码,按键ENTER表示确立,假如正确就进入管理的菜单,不然退出管理模式。
进入管理菜单:
会选择对应的功能,经过售货机右中部
的小键盘
选择对应的功能。
而后系统会依据小键盘返回的值履行各个功能函数。
功能1:
制表,显示各个物件的信息。
9
功能2:
对9中商品补货,所有补齐,途中会显示loading。
。
。
。
。
。
功能3:
补单货,选择物件,对其存量补齐。
功能4:
格式化,对所有的数据格式化。
功能5:
查问每次物件卖出的时间
功能6:
做系统智能画条形图,并显示售货额最高的物件。
按键ENTER确立,显示销售额最高
的物件。
按键ESC退出功能
功能7:
改正密码。
功能8:
显示售货机里钱币的数目,并拿出必定币额。
10
退出界面
单击“退出”显示的退出动画。
按键ENTER退出此界面。
3.4程序模块区分
在程序模块的剖析中,为了方便理清函数之间的调用关系,我们采纳了函数级其余定义方式。
自顶向下级次增高,在某些模块中被多次调用的小功能函数定义为该模块的工具函数。
故main函数被定义为一级函数,在main函数中被直接调用的子函数定义为二级函数,依此类推
主函数模块:
#include"main.h"
voidmain()
{
intgdriver,gmode;
11
MENUPOSITION*pm;
gdriver=DETECT;
initgraph(&gdriver,&gmode,"c:
\\tc30\\bgi");//图形驱动
welcome();//欢迎的界面
draw();//画界面
menu(pm);//菜单函数,进入系统
}
主函数main()中除了调用welcome()函数显示欢迎画面和draw()函数画售货机界面;,主要子函数是调用的menu()函数。
menu()函数即菜单项选择择模块的根函数。
下边分别来介绍这个主要模块。
一、图形模块:
主假如界面
二、鼠标模块:
包含鼠标的图形,鼠标状态。
三、汉字模块:
中文显示
四、菜单模块:
1.顾客模式:
a.选择货物b.投币c.找零(面值优先)
2.管理员模式:
a.密码b.库存查察与增添c.取走和填充销售金额
d.商品销量统计制表制图
五、文件模块:
保留销售和库存的信息
六、时间模块:
显示时间,并记录售货的时间资料
菜单项选择择模块:
此模块用于菜单界面的显示,实现菜单按钮和鼠标的各样功能。
本模块的中心函数:
voidmenu()(属于二级函数)
本模块的三级函数:
(被voidmenu()调用)
work()中心函数,模拟自动售货机的物件买卖功能
manage()中心函数,自动售货机管理物件信息的功能函数
help()系统帮助函数
thank()界面退出函数,退出界面
bklight()设置高亮
12
此中manage()里面又有一个子菜单的函数leadmanage(),用于对
系统管理功能的选择,属于四级函数。
此中leadmanage()里的五级函数有voidinitallgoods()
voidinitsinglegoods(MOUSESTATE*pm)
voidsearch()
voidrefresh()
对物件补全货的函数
对单个物件补货的函数
画表格显示物件信息的函数
数据格式化的函数
voidsearchsold(MOUSESTATE*pm)
voidoutinformation(MOUSESTATE*pm,intn)
查问单次售货的时间
弹出信息提示的函
数
voidautodrawbargraph()智能画条形图函数
voidsuggest()显示销售额最高的商品
leadmanage()会调用function.cpp里的各样功能函数,包含一
些其余cpp文件里的函数
模拟自动售货机售货模块(中心)
voidarrow(GOODSDATE*pgc);箭头
intchoosegoods(MOUSESTATE*ps,GOODSDATE*pg);
选择物件函数
intchoosemoney(MOUSESTATE*);
投币,返回单次投币的数额
voidinsertall(MOUSESTATE*,int*);
13
经过choosemoney的循环,退出后计算总投币
voidbuy(GOODSDATE*,int);
传当选择的物件信息和总投币额,进行买卖操作的函数
voidshowinsertall(int);显示总头币额的函
数
以上的函数为work的中心调用函数,还有其余的对文件操作的函数,用于对物件信息的储藏,下边将在文件模块中说明。
此外此函数将在算法剖析中进行解说与剖析。
文件模块
voidgoodsfilesave(GOODSDATE*pg)物件信息储藏到文件
voidgoodsfileread(GOODSDATE*pg)从文件读取物件信息
voidpasswordsave(char*ps)密码文件保留
voidpasswordread(char*ps)密码从文件中读取
voidsold_file(GOODSDATE*pg,SOLDFILE*ps)
物件售货单次的信息操作存入文件
voidshowsold_file(SOLDFILE*ps,int*n)
从文件中读取物件单次操作信息的函数
voidmoneynumsave(MONEYNUM*pmn);钱币数目的储藏
voidmoneynumread(MONEYNUM*pmn);钱币数目的读取
鼠标汉字模块
voidshubiao()对鼠标初始化
14
voidcursor(inta,intb)在(a,b)点画鼠标
intread(int*x,int*y,int*buttons)
调用中止来读鼠标的状态假如鼠标不动,这向来在里面循环,直到鼠标状态改变或是按键,就退出循环
voidneyxy(int*x,int*y,int*buttons)
鼠标挪动的函数,经过read的返回值在异或的模式下,覆盖本来的鼠标和画新的鼠标。
Outtextxy(int,int,char*,int)汉字输出
动绘图形模块
voidoutgoods(intn)商品出货动画的函数
voidoutmoney(intn)吐币函数
Voidthank();退出系统的动画
Voidwelcome();进入系统的动画
协助模块
voidbklight(MENUPOSITION*p,MOUSESTATE*pms)
设置高亮
voidloading()模拟等候过程的动画函
数
intinputpassword(char*s,intn)专用于密码输入的
函数
intreadboard(MOUSESTATE*pm)小键盘的读取,返回键盘值intmouseonkey(KEYBOARD*pm)判断鼠标能否在小键盘上相应的
15
地点,假如是,返回1
voidoutinformation(MOUSESTATE*pm,intn)
弹出信息提
示的函数
voidcheckcount(intagoods[9])读取商品的售量函
数
Intmouseon(MENUPOSITION*pm)
判断鼠标能否在菜单项的
地点上
voidarrow(GOODSDATE*pgc);箭头
时间模块
voidbuytime(SOLDFILE*p)纪录购置货物的时间
读取系统的时间,并赋值到结构中的长整型变量t,以文件的
形式把结构中的数据储存下来
3.5程序中的名词定义及说明
1.对文件名(*.cpp)的解说
MAIN.CPP
主函数
BACKPH.CPP
用于画界面
BKLIGHT.CPP
鼠标高亮
BUY_TIME.CPP
读取系统时间
COUNT.CPP
条形图的显示售量
FUNCTION.CPP(中心)
附有管理员功能
GOODS.CPP
对物件的文件操作
GUANLI.CPP
进入管理员界面的menu选择
HANZI.CPP
用于中文汉字输出
HELP.CPP
系统的help功能
MENU.CPP
进入系统的menu选择
16
MOUSE.CPP对鼠标操作
OUTGOODS.CPP物件出货动画
PASSWORD.CPP对密码操作
SOLDFILE.CPP每次购置信息存盘的文件操作
THANK.CPP退出系统的动画
WELCOME.CPP进入系统的动画
WORK.CPP(中心)购置物件购置物件
MONEYNUM.CPP对钱币的数目的管理函数
2.程序中的结构定义:
typedefstruct_menu
{
intx1;
inty1;
intx2;
inty2;//四个角的坐标
intrx;
intry;//输出headline的左上点的坐标
char*headname;
}MENUPOSITION;主界面菜单栏结构
对菜单的操作时,用于鼠标点击时判断地点。
typedefstruct_mouse
{
17
intmousex;
intmousey;//鼠标的坐标点
intbuttons;//鼠标按键click的状态
}MOUSESTATE;鼠标结构
当图形界面变换时,需要传达鼠标的地点,免得留下鼠标印。
typedefstruct_soldfile
{
longt;//购置的时间,从系统中读取
intlabel;//商品的标号
char*name;//商品的名字
intprice;//商品的价钱
}SOLDFILE;已售出货物的结构
此结构用于当每次对物件操作时,保留单次记录,以存入文件中。
typedefstruct_goods
{
intlabel;//商品的标号
char*name;//商品的名字
intprice;//商品的价钱
18
intsavenum;//商品的存量
intsoldnum;//商品的售量
intgoodsincome;//商品的销售额
intx,y;//图形界面上的商品的坐标
}GOODSDATE;货物信息结构
用于对物件信息的办理。
typedefstruct_key
{
intx1;
inty1;
intx2;
inty2;//小键盘上按键的四个极点的坐标
char*str;//小键盘上键的符号
}KEYBOARD;界面小键盘按键结构
typedefstruct_moneynum
{
intvalueone;
//
一元硬币的数目
intvaluetwo;
//
两元纸币的数目
intvaluefive;
//
五元纸币的数目
intvalueten;
//
十元纸币的数目
}MONEYNUM;
钱币数目的结构
3.函数名词定义及解说
19
1.BACKPH:
包含函数
voiddraw()用于建立主菜单的图形界面
2.BKLIGHT:
包含函数
voidbklight(MENUPOSITION*p,MOUSESTATE*pms)
设置高亮
3.BUY_TIME:
包含函数
voidbuytime(SOLDFILE*p)纪录购置货物的时间
4.COUNT:
包含函数
voidcheckcount(intagoods[9])读取商品的售量函
数
voidautodrawbargraph()智能画表形图函数
voidsuggest()显示销售额最高的商
品
5.FUNCTION:
包含函数
voidinitallgoods()对物件补全货的函
数
voidinitsinglegoods(MOUSESTATE*pm)对单个物件补货的函数
voidsearch()画表格显示物件信息的
函数
voidrefresh()数据格式化的函数
voidsearchsold(MOUSESTATE*pm)查问单次售货的时间
20
voidoutinformation(MOUSESTATE*pm,intn)弹出信息提示的函
数
6.GOODS:
包含函数
voidgoodsinit(GOODSDATE*pg)
对物件信息的初始化
voidgoodsfilesave(GOODSDATE*pg)
物件信息储藏到文件
voidgoodsfileread(GOODSDATE*pg)
从文件读取物件信息
7.GUANLI:
包含函数
voidmanage(MOUSESTATE*ms)
管理界面的“主函数”
voidleadmanage(MOUSESTATE*p)
管理的界面的菜单函数
int
readboard(MOUSESTATE*pm)
小键盘的读取,返回键盘值
int
mouseonkey(KEYBOARD*pm)
判断鼠标能否在小键盘上相应的
地点,假如是,返回1
8.HANZI:
汉字库
此cpp是用作汉字输出的调用,非编者编写
9.HELP:
包含函数
voidhelp()menu中的帮助选项
10.INPUT:
包含函数
intinputpassword(char*s,intn)专用于密码输入的
函数
intinput(char*s,intn)用于一般的信息输
入
11:
LOADING:
包含函数
21
voidloading()模拟等候过程的动画函
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自动 售货 编程