自动售货机c编程.docx

上传人:b****9 文档编号:25565496 上传时间:2023-06-09 格式:DOCX 页数:142 大小:687.04KB
下载 相关 举报
自动售货机c编程.docx_第1页
第1页 / 共142页
自动售货机c编程.docx_第2页
第2页 / 共142页
自动售货机c编程.docx_第3页
第3页 / 共142页
自动售货机c编程.docx_第4页
第4页 / 共142页
自动售货机c编程.docx_第5页
第5页 / 共142页
点击查看更多>>
下载资源
资源描述

自动售货机c编程.docx

《自动售货机c编程.docx》由会员分享,可在线阅读,更多相关《自动售货机c编程.docx(142页珍藏版)》请在冰豆网上搜索。

自动售货机c编程.docx

自动售货机c编程

 

C语言课程设计报告

自动售货机

图形模拟系统

 

题目:

自动售货机图形模拟仿真

班级:

组员:

学号:

学号:

指导教师:

上交日期:

2011.5.13

8具体函数解释及原代码……………………………………………42

一.引言

1.1背景

自动售货机是能根据投入的钱币自动付货的机器是商业自动化的常用设备,它不受时间、地点的限制,能节省人力、方便交易。

是一种全新的商业零售形式,又被称为24小时营业的微型超市。

能分为三种:

饮料自动售货机、食品自动售货机、综合自动售货机。

自动售货机是一种全新的商业零售形式,20世纪70年代自日本和欧美发展起来。

自动售货咖啡机是一种既可以出冷热咖啡也可以同时出奶茶果汁饮料的咖啡饮料自动售货机,省时方便快捷。

既可以作投资来使用,也可作为员工福利来使用。

现在,自动售货机产业正在走向信息化并进一步实现合理化。

24小时无人售货的系统可以更省力,运营时需要的资本少、面积小,有吸引人们购买好奇心的自身性能,可以很好地解决人工费用上升的问题等各项优点。

1.2编写目的

通过对自动售货机买卖商品的过程分析,建立模拟自动售货机的图形界面操作系统,对其投币、出货、统计等多个方面的功能模拟,实现模拟真实自动售货机的操作流程。

此次C语言课程设计是本专业的第一次课程设计,具有重要的意义:

通过上个学期对C语言的学习,对C语言编程有了初步的了解,获得了一定的基础但是非常缺乏实际的编程经验,无法从质上对自己的编程技巧有一个很大的提高,这次的课程设计给我们提供了一个非常好的锻炼机会。

通过二个人的分工合作,在实际中运用和训练程序设计的模块化和工程化思想和技术,努力掌握C语言精髓;同时提高自己的交流与团队合作的能力.为以后的更专业更复杂的课程设计和实践活动打好基础。

1.3任务概述

自动售货机售货9种商品,价格分别为3元,5元和7元。

顾客投入10元、5元或2元的纸币,然后选择购买9种商品之一,自动售货机吐出商品,并且找给用户零钱。

如果商品售完,或者无法找零,则给出用户一个提示,商品已售完,并且退还纸币。

程序具备以下功能:

库存查询:

检索9种商品的储存量

商品上架:

为9种商品增加

销售查询:

分别统计今天每种商品的销售量和销售额

会计查询:

打印当天的往来帐目以及剩余零钞数目

结算功能:

能够取出金额

销售界面:

顾客投入纸币,选择商品,获得商品和零钱;或者直接显示错误并退还纸币

要求以自动售货机为对象,图形化模拟投币、找零、出货的基本流程;能对售货机的商品进行管理:

补货、查询、统计等功能。

 

二.需求分析

2.1需求分析

自动售货机是一种全新的商业零售形式,20世纪70年代自日本和欧美发展起来。

它又被称为24小时营业的微型超市。

在日本,70%的罐装饮料是通过自动售货机售出的。

全球著名饮料商可口可乐公司在全世界就布有50万台饮料自动售货机。

现在,自动售货机产业正在走向信息化并进一步实现合理化。

自动售货咖啡机是一种既可以出冷热咖啡也可以同时出奶茶果汁饮料的咖啡饮料自动售货机,省时方便快捷。

既可以作投资来使用,也可作为员工福利来使用。

从自动售货机的发展趋势来看,它的出现是由于劳动密集型的产业构造向技术密集型社会转变的产物。

大量生产、大量消费以及消费模式和销售环境的变化,要求出现新的流通渠道;而相对的超市、百货购物中心等新的流通渠道的产生,人工费用也不断上升;再加上场地的局限性以及购物的便利性等这些因素的制约,无人自动售货机作为一种必须的机器便应运而生了。

现在,自动售货机产业正在走向信息化并进一步实现合理化。

例如实行联机方式,通过电话线路将自动售货机内的库存信息及时地传送各营业点的电脑中,从而确保了商品的发送、补充以及商品选定的顺利进行。

并且,为防止地球暖化,自动售货机的开发致力于能源的节省,节能型清凉饮料自动售货机成为该行业的主流。

我们用TC3.0编写的C语言程序来模拟自动售货机的控制及各种操作过程。

2.2运行环境(DOS环境)

该系统给予tc2.0和bc31开发,适用于dos3.0以上的所有dos版本和windows操作系统;本软件设计中加入了鼠标和键盘操作,因此操作过程必须依赖鼠标和键盘才能实现所有功能;本软件对于显示卡无特殊要求;本软件可以允许用户自定义一些参数,具有良好的人机交互性。

本软件主要的输入方式是数字输入,实际操作是通过键盘或者鼠标选择我们给出的汉化菜单选项。

输出信息也将采用汉化的窗口(包括弹窗)传递给用户。

除此之外无其他特殊要求;

出现图形无法显示或图形显示效果差——处理办法:

检查显示卡驱动是否正常;出现某些子程序的初始化无法正常完成——处理办法:

显示初始化失败的位置,并退出程序;出现空间分配失败——处理办法:

显示为内存不够,退出程序并检查内存利用情况;

 

三.系统设计

3.1功能需求描述

进入主界面,可以有管理员入口和顾客模式。

顾客模式先,选择要购买的饮料。

如有库存则出货,选择投硬币和投纸币,其中纸币有2元5元10元可以供选择,选择完币值后,按键确定,在出币扣找零。

管理员模式先点击钥匙口(key),会弹出一个对话框要求输入密码确定权限,进入后可查询各种饮料的剩余量和售量、销售币额以及顾客购买的时间。

管理员还可以进行密码的修改。

3.2程序流程图(见附录)

3.3功能和操作简介(界面)

菜单界面——点击“帮助”出现如图上的界面,按键ESC退出;点击“退出”,则退出系统;点击“buy”进入售货模式;点击“key”进入管理模式

点击“buy”后进入售货模式,选择商品,当鼠标到对应商品时会出现箭头提示

单击选择商品,系统会查看选择的商品是否还有存货,如果有会进入投币环节,如果没有,则输出无存货,然后对出售货模式。

进入投币环节,当鼠标移到投纸币窗口时,会出现下拉式菜单,用于选择投入纸币的面额,当鼠标移到投硬币的窗口单击,会投入一元硬币,若投入,会有提示,并显示此时投入的总额。

按键ENTER表示确定。

(如单击10元,右边会显示“投入币额:

10元”)

显示找零,并且会显示找出的几个硬币,几张多少面值的纸币,

然后物品从里面出来。

如果点击“key”,则进入管理界面,进入管理界面是会要求先输入密码,按键ENTER表示确定,如果正确就进入管理的菜单,否则退出管理模式。

进入管理菜单:

会选择对应的功能,通过售货机右中部

的小键盘

选择对应的功能。

然后系统会根据小键盘返回的值执行各个功能函数。

功能1:

制表,显示各个物品的信息。

功能2:

对9中商品补货,全部补齐,途中会显示loading。

功能3:

补单货,选择物品,对其存量补齐。

功能4:

格式化,对所有的数据格式化。

功能5:

查询每次物品卖出的时间

功能6:

做系统智能画条形图,并显示售货额最高的物品。

按键ENTER确定,显示销售额最高的物品。

按键ESC退出功能

功能7:

更改密码。

功能8:

显示售货机里钱币的数量,并取出一定币额。

退出界面

单击“退出”显示的退出动画。

按键ENTER退出此界面。

3.4程序模块划分

在程序模块的分析中,为了方便理清函数之间的调用关系,我们采用了函数级别的定义方式。

自顶向下级次增高,在某些模块中被多次调用的小功能函数定义为该模块的工具函数。

故main函数被定义为一级函数,在main函数中被直接调用的子函数定义为二级函数,依此类推

主函数模块:

#include"main.h"

voidmain()

{

intgdriver,gmode;

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()设置高亮

其中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*);

通过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()对鼠标初始化

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)判断鼠标是否在小键盘上相应的位置,如果是,返回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选择

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

{

intmousex;

intmousey;//鼠标的坐标点

intbuttons;//鼠标按键click的状态

}MOUSESTATE;鼠标结构

当图形界面转换时,需要传递鼠标的位置,以免留下鼠标印。

typedefstruct_soldfile

{

longt;//购买的时间,从系统中读取

intlabel;//商品的标号

char*name;//商品的名字

intprice;//商品的价格

}SOLDFILE;已售出货物的结构

此结构用于当每次对物品操作时,保存单次记录,以存入文件中。

typedefstruct_goods

{

intlabel;//商品的标号

char*name;//商品的名字

intprice;//商品的价格

intsavenum;//商品的存量

intsoldnum;//商品的售量

intgoodsincome;//商品的销售额

intx,y;//图形界面上的商品的坐标

}GOODSDATE;货品信息结构

用于对物品信息的处理。

typedefstruct_key

{

intx1;

inty1;

intx2;

inty2;//小键盘上按键的四个顶点的坐标

char*str;//小键盘上键的符号

}KEYBOARD;界面小键盘按键结构

typedefstruct_moneynum

{

intvalueone;//一元硬币的数量

intvaluetwo;//两元纸币的数量

intvaluefive;//五元纸币的数量

intvalueten;//十元纸币的数量

}MONEYNUM;钱币数量的结构

3.函数名词定义及解释

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)查询单次售货的时间

voidoutinformation(MOUSESTATE*pm,intn)弹出消息提示的函数

6.GOODS:

包含函数

voidgoodsinit(GOODSDATE*pg)对物品信息的初始化

voidgoodsfilesave(GOODSDATE*pg)物品信息储存到文件

voidgoodsfileread(GOODSDATE*pg)从文件读取物品信息

7.GUANLI:

包含函数

voidmanage(MOUSESTATE*ms)管理界面的“主函数”

voidleadmanage(MOUSESTATE*p)管理的界面的菜单函数

intreadboard(MOUSESTATE*pm)小键盘的读取,返回键盘值

intmouseonkey(KEYBOARD*pm)判断鼠标是否在小键盘上相应的位置,如果是,返回1

8.HANZI:

汉字库

此cpp是用作汉字输出的调用,非编者编写

9.HELP:

包含函数

voidhelp()menu中的帮助选项

10.INPUT:

包含函数

intinputpassword(char*s,intn)专用于密码输入的函数

intinput(char*s,intn)用于一般的信息输入

11:

LOADING:

包含函数

voidloading()模拟等待过程的动画函数

12.MAIN:

Voidmain()主函数

13.MENU:

包含函数

voidmenu(MENUPOSITION*pm)初始化菜单中的选项

voidchoose(MENUPOSITION*pm)菜单选择函数

intmouseon(MENUPOSITION*pm)判断鼠标是否在菜单项的位置上

14:

MOUSE:

鼠标函数

voidshubiao()对鼠标初始化

voidcursor(inta,intb)在(a,b)点画鼠标

intread(int*x,int*y,int*buttons)

调用中断来读鼠标的状态如果鼠标不动,这一直在里面循环,直到鼠标状态改变或是按键,就退出循环

voidneyxy(int*x,int*y,int*buttons)

鼠标移动的函数,通过read的返回值在异或的模式下,覆盖原来的鼠标和画新的鼠标。

15:

OUTGOODS:

包含函数

voidoutgoods(intn)商品出货动画的函数

voidoutmoney(intn)吐币函数

16:

PASSWORD:

包含函数

voidout_text(int);password中人机对话的函数

voidpasswordsave(char*ps)密码文件保存

voidpasswordread(char*ps)密码从文件中读取

voidpasswordmodefy()修改密码的功能

intpassword()进入管理界面时判断输入密码是否正确

17:

SOLDFILE:

包含函数

voidsold_file(GOODSDATE*pg,SOLDFILE*ps)

物品售货单次的信息操作存入文件

voidshowsold_file(SOLDFILE*ps,int*n)

从文件中读取物品单次操作信息的函数

18:

THANK:

Voidthank();退出系统的动画

19:

WELCOME:

Voidwelcome();进入系统的动画

20:

WORK:

voidarrow(GOODSDATE*pgc);箭头

intchoosegoods(MOUSESTATE*ps,GOODSDATE*pg);

选择物品函数

intchoosemoney(MOUSESTATE*);

投币,返回单次投币的数额

voidinsertall(MOUSESTATE*,int*);

通过choosemoney的循环,退出后计算总投币

voidbuy(GOODSDATE*,int);

传入选择的物品信息和总投币额,进行买卖操作的函数

voidshowinsertall(int);显示总头币额的函数

voidwork(MOUSESTATE*ps)核心函数

21:

MONEYNUM:

voidinitmoneynum(MONEYNUM*pmn);初始化钱币的数量

voidmoneynumsave(MONEYNUM*pmn);钱币数量的储存

voidmoneynumread(MON

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

当前位置:首页 > 医药卫生 > 基础医学

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

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