资源描述
摘 要随着经济水平的提高,人们开始追求灵活、方便、快捷以及自助式服务,这使得自动售货机得以迅猛的发展。自动售货机吸引了大量的顾客,人们可以利用自动售货机购买饮料,零食等商品。在发达国家,自动售货机已经成为零售业不可分割的一部分,这种前卫的消费方式吸引了众多客户。并且,针对地球暖化,新型自动售货机的开发致力于能源的节省。本论文涉及到自动化、节能和计算机软件的开发,该软件可以更加方便的应用在自动售货机中。本文对用Java语言设计自动售货机进行了系统的研究,利用Java语言实现自动售货机的硬币识别,币值累加,自动售货,自动找钱功能。该软件的程序代码具有灵活性和可扩展性,它可以重复使用,而且当整个系统实施一些新的特点时,对现有代码的影响较小。关键词:自动售货机;Java设计模式;J2SEAbstractWith the improvement of economic level, people began to pursue a flexible, convenient, efficient, and self-service. A kind of machine which is called vending machine emerges and attracts quantities of customers to use it to buy drinks, snacks and similar products. In developed countries, the vending machine has become an integral part of the retail industry, this avant-garde way of consumption attracted many customers. And, in view of global warming, new development of vending machine is committed to energy saving. This paper involves the automation, energy efficiency and computer software development, which can be more convenient application in the vending machine. This thesishas asystemicstudyof the design of vending machine in the Java language. The system can achieve the functions such as coin recognition,currency accumulate, vending machines, automatically change by using Java language. The software program code has the flexibility and extensibility, soit can be repeated use, and when the entire system to implement some new characteristics, there will be less impact on existing code.Key words: Vending Machine; Java Design Patterns; J2SE目 录目 录I第1章 概 述11.1 研究的背景和意义11.2 自动售货机产业的现状11.3 本论文主要研究的内容2第2章 Java语言介绍32.1 Java语言的特点32.2 Java的发展42.3本章小结7第3章 开发环境概述83.1 系统硬件环境概述83.2 系统软件环境概述103.3系统开发环境及其开发工具103.4 本章小结11第4章 环境搭建124.1安装JDK124.2设置环境变量124.3 本章小结15第5章 系统软件设计165.1 总体设计165.2 系统详细设计与性能分析165.3 系统实现185.4 本章小结27结 论28参考文献29致 谢30附 录3137第1章 概 述1.1 研究的背景和意义自动售货机是一种全新的商业零售形式。20世纪70年代自日本和欧美发展起来。它又被称为24小时营业的微型超市。在日本,70%的罐装饮料是通过自动售货机售出的;全球著名饮料商可口可乐公司在全世界就布有50万台饮料自动售货机1。在中国,售货机从1999年开始进入中国市场。如今,在机场、地铁、商场、公园等客流量较大的场所也不难发现自动售货机的身影。从自动售货机的发展趋势来看,它的出现是由劳动密集型的产业构造向技术密集型社会转变的产物。大量生产、大量消费以及消费模式和销售环境的变化要求出现新的流通渠道;而相对的超市、百货购物中心等新的流通渠道的产生,人工费用也不短上升;再加上场地的局限性以及购物的便利性等因素的制约,无人自动售货机作为一种必须的机器便应运而生了。自动售货机可以充分补充人力资源的不足,适应消费环境和消费模式的变化,24小时无人售货的系统可以更省力,运营时需要的资本少、面积小,有吸引人们购买好奇心的自身性能,可以很好地解决人工费用上升的问题等各项优点。自动售货机解放了人力,方便了生活,创造了效益,方便广大的市民。实践和直觉告诉我们,自动售货机在中国的横空出世,必将为国内的食品、香烟、饮料等诸多行业带来新的契机,中国的现代文明又将以自动售货机的应用和普及开创一个新的时代。所以设计自动售货机是非常必要的。1.2 自动售货机产业的现状首先,我们来看一下发达国家的现状。日本:各种自动售货机保有量超过600万台,平均20人一台,世界普及率第一。1990 年通过自动售货机实现的销售额已达到5兆日元(约3000亿人民币)。美国:总的机器保有量大致和日本相当,2000年通过自动售货机实现的销售额达到250亿美元,其中OCS(Office Coffee Service)的销售额排第六位。 韩国: 自动售货机的使用历史要远短于其它发达国家,仅有25年,据2001年的统计,总保有量已超过80万台。在2001年韩国生产的自动售货机中OCS占32.7%,排第一位,咖啡自动售货机占18.1%,排第三位,仅次于18.6% 的充电自动售货机。瓶罐饮料自动售货机和复合型自动售货机(同机销售瓶罐饮料和热咖啡)都仅占8.6%,并列第四位。下面,我们来看一下我国的现状2。自动售货机在我国的安放和使用,也已经有10多年的时间,但一直没有全面普及。中国自1993年开始从日、韩等国引进自动售货机并投放中国市场。1995年第一台国产自动售货机在北京诞生。1999年国产自动售货机形成规模生产并批量投放市场。相对于日本、美国等发达国家,中国目前市场运营的自动售货机数量还很少。至2000年初,中国自动售货机研发、制造和运营的企业有10多家,天津南开戈德集团规模最大。在自动售货机运营商方面,主要是由制造企业的关联或下属企业运营,如戈德集团的戈德移动商务公司、澳珂玛集团的澳鸿自动商务公司等,中国目前还没有产生独立的运营商。自动售货机这种全新的零售方式已逐渐被国人所接受和信赖。随着我国商品市场的不断繁荣和城市现代化程度的不断提高,自动售货机也已悄然步入了我国的大中城市。自动售货机在北京、上海、大连、沈阳、西安开始出现,成为不少年轻人时髦的购物选择。在国家相关政府部门的大力支持下,中国的自动售货机产业以超常规的速度迅猛发展,并带动了一批新的服务业、物流运输配送业的快速发展,丰富了中国的商业产业结构,开创了一个全新的自动销售和自助服务的时代3。1.3 本论文主要研究的内容本论文主要研究用Java语言进行自动售货机控制系统软件部分的设计,即自动售货机的主控制系统。可以实现硬币识别,币值累加,自动售货,自动找零的功能。该设计提高了自动售货机的可靠性和执行效率,且系统维护容易,维修简单,有一定的市场推广价值。本论文的主要研究工作如下:第1章 ,概述。简要介绍了本次毕业设计的背景,阐述了自动售货机的产业现状,介绍研究本课题的目的、意义和内容。第2章 ,Java语言介绍。主要介绍了Java语言的特点及其发展历程。第三章,系统环境概述。介绍了本设计的硬件系统环境及其软件系统环境。 第四章,环境搭建的介绍。主要讲解如何运行Java程序。第五章,利用Java语言进行详细设计。包括总体结构设计与性能分析,主要操作的流程图,具体详细设计以及功能实现。并介绍了本设计的两个创新点。最后是总结,对本次的研究工作作出总结,阐明研究出的一些规律,说明了本次工作的重难点。第2章 Java语言介绍2.1 Java语言的特点Java是1995年6月有Sun公司引进到这个世界的革命性的编程语言,它被美国的著名杂志PC Magazine评为1995年十大优秀科技产品。之所以称Java为革命性编程语言,是因为传统的软件往往与具体的实现环境有关,一旦环境有所变化就需要对软件进行一番改动,耗时费力,而Java编写的软件能在执行码上兼容。这样,只要计算机提供了Java解释器,Java编写的软件就能在其上运行4。自从1946年世界上第一台电子计算机问世以来,计算模式的发展经历了三个阶段:集中计算模式、分散计算模式和网络计算模式。Internet的出现,为在网络计算模式下的科学计算和信息处理提供了良好平台。然而,要充分利用网络计算模式的功能与效益,平台的运行环境是个制约因素,而Java语言和Java技术则是解决这一问题的最佳途径。Java语言具有以下特点:1、Java语言是简单的。Java语言的语法与C语言和C+语言很接近,使得大多数程序员很容易学习和使用Java。另一方面,Java丢弃了C+中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧。2、Java语言是一个面向对象的。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制。Java语言全面支持动态绑定,而C+语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。3、Java语言是分布式的。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口,它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI机制也是开发分布式应用的重要手段。4、Java语言是健壮的。Java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。5、Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制,如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制让Java应用设置安全哨兵。 6、Java语言是体系结构中立的。Java程序在Java平台上被编译为体系结构中立的字节码格式,然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。7、Java语言是可移植的。这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSIC实现的。8、Java语言是解释型的。如前所述,Java程序在Java平台上被编译为字节码格式,然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。9、Java是高性能的。与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C+。 10、Java语言是多线程的。在Java中,线程是一种特殊的对象,它必须由Thread类或其子类来创建。通常有两种方法来创建线程:其一,使用型构为Thread(Runnable)的构造子将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象,即为线程。Thread类已经实现了Runnable接口,因此,任何线程均有它的run方法,而run方法中包含了线程要运行的代码。线程的活动由一组方法来控制。Java语言支持多个线程的同时执行,并提供多线程之间的同步机制。11、Java语言是动态的。Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查5。 2.2 Java的发展Java自正式问世以来已经历了数年的历程,其发展极快。一年一度在美国旧金山召开的世界Java One语言开发者大会(Java One Developer Conference)盛况空前正说明了这一点。四年中每年的Java One大会,既是了解Java最新技术动态、应用成果和下一步发展趋势的最好场所,又是推动下一年Java快速发展的重要动力。首届Java One大会于1996年召开,各届简况如下: 1996年5月29-31日,第一届,出席会议者6500余人,来自工业界的超过一半。有人评价说:“这是近年计算机界最光辉的一次盛会”。工业界相当看好Java语言,认为它的使用将会引起一场软件革命:从软件的设计风格、设计方法、设计目标到设计过程,都会产生彻底的变革,“甚至会改变此星球的生活方式”。1997年,第二届,出席会议者10000人。Java的追随者不断增加,应用开发迅速起步。1998年3月24-27日,第三届,出席会议者14000余人,注册门票售价1195美元,否则1395美元,即使如此,仍有不少人不惜工本,挤入会场。本次会议除了软件巨头微软未参加会议外,几乎所有的计算机公司都参加了。展厅内设300多个展台,先后举行了90场专题讨论会,每场参加的人数从千人至五六千人不等。会议的主题是:通过Java的培训来带动Java软件的开发和技术研究,从而发展生产力,获取高额利润,提高生活质量,推动信息产业的进步。会议展出的内容大致如下:Java开发工具软件,如:JMF、JDK、Symantec Visual Cafe、Java Dynamic Management Kit、JFC、JNDI、Java Studio等; 企业信息管理解决方案软件,如:EJB; 基于Java技术的信息家电,如:机顶盒、Java电话等; 个人信息综合服务、社会信息综合查询亭; 电子商务软件、智能卡、Java Card API 等; 网络计算环境下的Java服务器软件、远程方法调用、基于Java技术的移动计算设备; JMS用于出版、票据订阅的软件; JOS、基于Java技术的NC和Java Station。 随着Internet的飞速发展,企业计算模式正摒弃C/S结构而采用Web-Browser结构,此即瘦客户端/胖服务器、大容量数据库的3层或N层体系结构。由于Java的特点,使得它在开发服务器端的应用程序方面有着得天独厚的优势,面向服务器端的J2EE为当今逐渐流行的N层体系结构提供了一个标准的Java计算平台:界面一致、工具简易、丰富、Web页面互联便捷,从而能大大加速和简化各种应用系统的开发。Java语言的出现和发展,得到了IT业界的青睐,它像一面大旗,凝聚了世界众多的厂商与Sun公司一道,结成了对抗微软垄断的联盟。许多知名厂商纷纷购买Java许可证,目前已有90多万个软件开发商加入了Java阵营,1亿个Java最终用户,几千种Java应用软件产品,1500余种Java书籍。IBM公司提出“高举Java大旗,全力以赴”的口号,它在全世界的11个国家有28个实验室,集聚了2500余名技术人员,全天侯24小时进行全方位开发;芯片巨人Intel提出“抓住时机,占领Java阵地”决心使Intel芯片系统成为开发Java应用运行的最佳平台;Novell则宣称“Java是Novell的未来,未来是服务器端Java的市场”;作为Java发明者的Sun公司,坚持“保卫Java大旗,发展Java之路”的方针,从而占领市场。此外,HP、Oracle、Apple、Sybase、Netscape、Informix、3Com、Motorola等公司均是Sun的坚强同盟。 在中国,Java的开发可以说是“人才济济,成果累累”。如清华大学王克宏教授带领的课题组面向全国,自96年开始举办了多期Java培训班和讲座,开设了数期本科生、研究生Java课程,出版了“Java系列丛书”10余册,承担了国家“九五”攻关项目“基于Java技术的交互式远程教学系统”,并与日本就Java开发进行了国际合作,成绩斐然;东大阿派下属的宝钢东软软件技术研究中心是国内是首屈一指的Java研发骨干企业,该中心从95年起就开始了Java的研发,目前,已掌握了Personal Java的核心移植技术,并成功地将JVM移植到汽车导航平台。此外,他们还开发出支持Jini协议的即插即用网络打印机软件,以及一套Jini信息家电网络的可视化演示环境,完成了基于JavaBeans的组件化软件开发及运行支持环境等多项成果;在台湾,22家知名计算机公司成立了“Java联盟”,并在台北建立了“Java开发中心”,新竹建立了“Java语言实验室”;在香港,举行了全岛Java杯比赛,掀起了学习Java的热潮。Java的浪潮汹涌澎湃,席卷全球。Java发展至今日,已不仅仅是一种编程语言,实际上已形成了一门技术。其内容包括:1、Java软件包Java语言及其编程技术、JavaOS、Java开发环境与工具、Java语言的各种软件包、数据库接口JDBC等。2、Java虚拟机及其规范3、Java嵌入技术1999年8月2日,Sun公司宣布名为MAJC的专门为Java语言设计的的芯片优化研制成功,欲与Intel试比高低。该芯片在设计时采用了模块式高性能计算引擎,实质为一种芯片级并行处理机,能以更有效的方式分解计算任务,特别适合处理多媒体数据。Sun公司希望通过MAJC芯片的发布催生出一个基于Java语言的微处理器家族,与Intel公司竞争。设想中的Java处理器将应用在从低价消费电子产品到高端因特网服务器领域。4、Java计算基于Java技术的企业Internet/Intranet信息系统以及其他应用系统。5、Jini技术1999年初正式发布后,立刻得到业界的广泛支持。Jini的出现为Java网络连接提供了公共标准,使得任何Java设备都可以连入网络中被自动识别,并可充分利用网络上已有的各种资源。它把网络上的各类设备(包括消费类电子设备如移动电话、PDA、DTV、HPC、NC、游戏机、电冰箱、智能卡等等)和各种软件组合成一个单一、动态的分布式系统,使网络更易于操纵、易于管理,具有更高的可配置性。Jini将使网络具有自发性,它的出现大大扩展了“计算”和“计算机”的含义,极大地简化了网络操作,对家庭用户来说,使用网上设备即插即用,就像使用电话一样方便。Java和Jini不仅可以不依赖于Windows为代表的操作系统,而且引导着信息产业的潮流,使Sun公司能在未来的、非PC类电子产品的数字化市场中强占制高点。6、Jiro平台异质网络环境中安装的存储系统的多样性和分布性,给存储管理带来了巨大的挑战。用户和开发人员都希望能有一种技术,能更好地促进企业存储管理方案的开发。而Jiro平台正是解决此问题的革命性方案。Jiro平台实现了Java和Jini技术,它是一个便于用户管理异质网络上由各种服务器、存储和设备组成的混合环境的开放式存储管理平台。它对操作系统是中立的。Jiro为跨异质存储局域网(SAN)的管理服务和设备提供了一个开放平台,允许服务器、存储和联网设备在异质网络环境中无缝地协同工作。Jiro平台为开发者带来的好处有:允许开发者利用各种实现管理存储网络的目标功能创建应用;提供了一个可以在各种应用、服务和设备之间交互操作的组件模型;允许设备易被增加、删除;允许应用或服务被自动更新。 1999年7月,Sun发布了正式的Jiro规范草案,供公众讨论、修改。目前,Jiro平台的团体成员已超过25家,支持Jiro平台的厂商超过300家。有眼光的厂商纷纷加入到这些组行列,从而加快了Jiro的发展6。2.3本章小结本章介绍了Java语言。从Java语言的特点及其Java语言的发展历程进行介绍。第3章 开发环境概述3.1 系统硬件环境概述自动售货机是集光、机、电一体化的独立机构,它只需要顾客投币和按键购物选择即可自动售货及退钱找零,其工作程序如下图所示:顾客投币选择商品取出商品取出余币机器自动计数机器送出选定商品 机器将余币送出 图3-1 自动售货机工作时序图自动售货机的工作原理是:首先,从投币口送入货币,然后通过传感器采集数据、识别器判断货币的真伪并判别面值。然后,识别器把信息数据传送给通信模块。通信模块与售货机的主控制系统通信,主控系统显示面值,启动售货机的面板键,显示出哪个货道有货,哪个货道已经售完,并等待顾客选择商品。顾客选择商品后,售货机自动把商品送出,等待顾客取走。在交易过程中,如果金额足够多,顾客可以将找回的零钱取回,完成交易;如果款额不足,则不能进行交易。下面结合图3-2对本自动售货机做进一步描述:如图3-2示,这种具备商品信息和健康建议功能的自动售货机包括机身1、商品收容室2、货物传送装置、中央处理器,机身1上有商品取出口3、货币投入口4,商品收容器、货物传送装置、中央处理器均设置在机身内,从货币投入口4投入货币后,如需找零,剩余的货币从退币口5退出,购买的商品从商品取出口3传送出来;机身1上还设置有商品健康信息触摸显示器6,商品健康信息触摸显示器6连接中央处理器,中央处理器连接商品健康信息存储器。商品健康信息触摸显示器6设置在货币投入口4的上面。图3-2 自动售货机图3-3是自动售货机的硬件原理图,如图所示,人们在通过触摸的方式操作商品健康信息触摸显示器6后,商品健康信息触摸显示器6会将此信息传送给中央处理器,中央处理器从商品健康信息存储器中查找到相关信息后,从商品健康信息触摸显示器6显示出来,供人们查阅。 主控制系统DTU/DEI 接口MDB接口扩展存储器实时时钟人机模块电机阵列驱动接口信号检测串行通信 并行总线 I/O口货币识别器制冷控制板触摸显示器货物传送装置图3-3 硬件原理图 综上所述,自动售货机控制系统可以分为三部分组成,即自动售货机的主控制系统、通讯系统、硬币及纸币识别系统。其中主控制系统是本设计的研究重点。下面将着重介绍。3.2 系统软件环境概述本设计是利用Java语言设计的,下面将分别介绍本系统的运行平台及运行环境。目前Java运行平台主要分为下列3个版本。1、 J2SE:称为Java标准版或Java标准平台。J2SE提供了标准的SDK开发平台(以前称为JDK开发平台)。利用该平台可以开发Java桌面应用程序和低端的服务器应用程序,也可以开发Java Applet程序。2、 J2EE:称为Java企业版或Java企业平台。使用J2EE可以构建企业级的服务器应用程序,J2EE平台包含了J2SE平台,并增加了附加类库,以便支持目录管理、交易管理和企业级消息处理等功能。3、 J2ME:称为Java微型版或Java小型平台。J2ME是一种很小的Java运行环境,用于嵌入式的消费产品中,如移动电话、掌上电脑或其它无线设备等。本系统的运行平台是J2SE。同时,本系统的运行环境是Java7。Java7具有以下特性:首先,Java7采用了模块的划分方式来提速,一些不是必须的模块并没有下载和安装,因此在使用全新的Java7的虚拟机的时候会发现真的很快,当虚拟机需要用到某些功能的时候,再下载和启用相应的模块,这样使得最初需要下载的虚拟机大小得到了有效的控制。同时对启动速度也有了很大的改善。其次是多语言支持,Java7的虚拟机对多种动态程序语言增加了支持,比如:Rubby、Python等等。对这些动态语言的支持极大地扩展了Java虚拟机的能力。第三是开发者的开发效率得到了改善,Java7通过多种特性来增强开发效率。通过注解增强程序的静态检查。提供了一些新的API用于文件系统的访问、异步的输入输出操作、Socket通道的配置与绑定、多点数据包的传送等等。最后是执行效率的提高,Java7压缩了64位的对象指针,通过对对象指针由64位压缩到与32位指针相匹配的技术使得内存和内存带块的消耗得到了很大的降低因而提高了执行效率。此外还提供了新的垃圾回收机制(G1)来降低垃圾回收的负载和增强垃圾回收的效果。G1垃圾回收机制拥有更低的暂停率和更好的可预测性。3.3系统开发环境及其开发工具开发环境:JDK 开发工具:Myeclipse3.4 本章小结本章主要介绍了本次设计的主要系统环境,其中包括硬件系统和软件系统。着重介绍了本系统的运行环境及运行平台,同时还介绍了Java语言的开发平台以及相关的开发工具的介绍。第4章 环境搭建4.1安装JDK1、打开“http/ 系统属性2、选择“高级”选项,如图4-2所示,并单击“环境变量”按钮,弹出“环境变量”对话框,如图4-3所示。图4-2“高级”界面图4-3 “环境变量”对话框3、在“系统变量”对话框里找到变量名“Path”,并选出,再单击“编辑”按钮进入“编辑系统变量”对话框,如图4-4所示。图4-4 “编辑系统变量”对话框4、在所有的变量值前面输入“C:Program FilesJavajdk1.7.0_21”,注意有分号,路径根据情况进行设置。5、在“系统变量”对话框里点击“新建”按钮,弹出“新建系统变量”对话框,如图4-5所示。图4-5 “新建系统变量”对话框6、设置变量名为“CLASSPATH”,变量值为“.;%JAVA_HOME%lib;%JAVA_HOME%libtools.jar”,路径根据情况进行设置,如图4-6所示。图4-6 填入新值配置完成后,需要测试是否配置正确。下面给出了详细的测试步骤,按照这个步骤操作可以很轻松地完成测试。1、单击“开始”按钮,在弹出的开始菜单中再单击“运行”菜单项,将出“运行”对话框。在“运行”对话框里输入“cmd”,并单击“确定”按钮,如图4-7所示。图4-7 “运行”对话框2、在命令提示符窗口里输入“javac”和“java”,观察是否出现javac或java的用法提示,如图4-8所示。图4-8 配置正确的环境变量信息4.3 本章小结本章详细的介绍了Java运行环境的安装过程,包括安装JDK以及如何设置环境变量。正确的设置环境变量是整个程序能否运行的关键。第5章 系统软件设计5.1总体设计只要的使用者有两类人,一类是顾客,另一类是管理员。如下图所示,在顾客操作模式下,顾客可以利用前触屏,投币口,以及分配渠道三个部分通过内部网连接到控制系统,控制端通过内部网将商品信息以及币值总而发送到信息数据库。在管理员模式中,管理员利用内部显示屏以及内部键盘和鼠标通过内部网连接控制端,以此输入信息等8,9。顾客前触摸屏投币口分配通道管理员内部显示屏内部键盘和鼠标控制系统信息数据库图5-1 总体设计框图5.2 系统详细设计与性能分析1. 获取库存当顾客选择一个商品时,该商品信息会通过机器控制模块发送到商品识别模块,从而获取商品的库存信息。如果库存充足,机器控制模块会给操作模块发送一个消息,并将界面改成付款界面。流程图如图5-2所示。操作模块机器控制模块商品识别模块所选商品所选商品反馈库存更改界面 图5-2库存获取流程图 2. 密码验证 操作 模块 机器控制 模块模块 管理员 账户模块 输入 密码 传送 密码 反馈 信息 更改 模式图5-3 密码验证流程图 如图5-3所示,管理员进入操作模式时,需要输入密码。操作模块将输入的密码发送到机器控制模块,再传送到管理员账户模块。通过核对密码,将信息反馈到机器控制模块,机器控制模块判断输入的密码是否正确。在机器可以判断输入的密码是否正确之前,机器的内部需要存储一个密码。因此,一旦输入的密码错误,系统将会提示警告信息,并阻止接下来的操作,更改到服务模式下10。3. 记录更改设置如图5-4所示,管理员可以通过操作模式进行更改,如添加新的商品、更改库存、更改商品价格等。更改的信息将传送到机器控制模块,将更改的信息发送到机器中。机器收到更改信息后,生成信息的具体的实体值,并将信息发送到存储模块,进行存储记录。 操作模块 机器控制模块 存储模块 更改 存储图5-4 信息更改流程图4. 数据存储 如图5-5所示,如果系统中出现修改,将会出现提示窗口。如果确定修改,系统将重新存储数据。机器控制模块对信息生成新的文件,并存储数据,最终发送到文件系统中,生成新的文件。如果数据错误,将重新复位。机器控制模块文件系统复位设置新的数值存储图5-5 数值存储流程图 5. 硬币计数变化如图5-6所示,如果管理员利用操作模块对硬币的库存,以及各类硬币的现有值进行更改,机器控制模块将信息发送到硬币模块,硬币模块根据更改信息进行整合,然后把当前库存显示出来。操作模块机器控制模块硬币模块传递参数参数图5-6 计数变化流程图 5.3 系统实现5.3.1顾客购买操作实现 当打开该软件时,进入购物模式,出现如图5-7所示界面。在这一界面我们能够看到商品提示的购买建议。图5-7 用户购买界面购买界面中出现五种商品,并且有每种商品对应的名称及价格,还有当地操作时间。以下以购买可口可乐为例。点击可口可乐下面的“购买”按钮,出现图5-8界面。该界面会出现提示信息,提示顾客选择的商品是“可乐”。顾客通过“+1”“+5”“+10”选择购买可乐的数量。选择完毕后,点击“确认”。若想删除之前的选择,点击“删除”,若想返回上一页重新选择,点击“返回”。图5-8 购买可乐(1)以选择一瓶为例,选择完毕后,出现图5-9界面。提示用户选择了一瓶可乐,总金额3元。点击“付款”投入货币。图5-9 购买可乐(2)然后开始投币,如图5-10所示。该系统可以接受的硬币为0.5元、1元、2元、5元以及10元和20元。如果先投入1元,系统提示还需继续投入2元。图5-10 可乐购买(3)如果再投入2元,则出现图5-11界面。图5-11 可乐购买(4) 当投入的金额大于等于商品要求金额,则可继续进行购买,点击“确认”。出现如图5-12界面。这一界面,用于信息确认,显示顾客购买的商品及商品数量,投入的硬币总额以及需要退还的零钱。如果想取消购买,则点击“取消”。图5-12 可乐购买(5)确认信息无误后,点击“确认”,出现5-13界面。该界面用于提示顾客应该获得的零钱多少。图5-13 可乐购买(6) 点击“完成”,完成交易。出现5-14界面。如果顾客需要打印发票,则可以点击“打印发票”进行发票打印;如不需要则可以点击“退出”。图5-14 可乐购买(7)5.3.2管理员操作实现如果想进入到管理员模式,则可以点击图5-7中的“更换模式”进行更改操作模式11,12。点击后,出现如图5-15界面。该界面提示管理员需要输入密码,才可以进行操作。该程序设置的初始密码为“1234”。图5-15 管理员输入密码输入密码后,进入操作员操作模式,如图5-16。在这一界面中,我们可以看到出售的产品以及商品的库存。初始设置每种饮品的库存为20瓶,由于之前的演示中,多次购买了可乐,所以可乐的当前库存为15瓶。同时,在这一界面中,我们可以看到管理员可以进行如下操作:增加一款新商品、雇主复位、设置现金水平、更改密码、设置库存水平、更改价格。接下来,我们对各个功能进行一一演示。图5-16管理员操作(1)当管理员需要增加新的商品时,点击“增加一款新产品”。出现如图5-17界面。管理员可以填写商品的名称、价格以及库存。点击“保存修改”,完成商品添加。图5-17管理员操作(2)点击“雇主重置”,出现5-18提示界面。如果确认复位,点击“是”,否则点击“否”。图5-18管理员操作(3)想要更改售货机中现金时,点击“设置现金水平”,出现5-19界面。该界面显示了当前售货机中各类硬币的数量13。图5-19管理员操作(4)如果管理员想要更改密码,点击“更改密码”,出现如图5-20所示界面。管理需要先输入原密码,然后才能更改密码。图5-20 管理员操作(5)如果想要设置库存,则点击“设置库存水平”,出现5-21界面。图5-21 管理员操作(6)点击“更改价格”,出现5-22界面,管理员可以进行商品价格的更改。图5-22 管理员操作(7)在管理员操作这一部分,管理员可以通过我编写的程序,看到哪种商品销量最好。这是本设计的另一个创新点。如图5-23所示。指出了哪种商品销量最好。由于之前我们演示,都以可乐为例,所以可乐的销量最好。图5-23 购买情况统计文档5.4 本章小结本章主要介绍本次毕业设计的总体思路,以及其功能的实现过程。其中包括系统的总体设计、系统的详细设计、系统实现与性能分析等。本章详细介绍了本设计中的两大核心部分:管理员操作模式设计和顾客操作模式设计。通过图片以及文字,清晰的展示了两种模式的操作过程。并且介绍了本设计的创新之处。结 论计算机的出现,使科技文明的发展跨入到了一个新的时代,计算机软件的应用,使人们的工作效率成倍提高。人们从复杂、繁重的工作中解脱出来,拥有了更加舒适、快捷、方便的工作方式和更多的自由时间。本次毕业设计的多功能自动售货机控制系统方便快捷,操作简单,大大提高了运行速度,节省了运行时间。本次毕业设计完成了自动售货机的硬币识别、币值累加、自动售货、自动找零的功能。通过编写这个程序,使我将学习的Java语言融会贯通,提高了我使用编写程序的能力。同时作为Java语言的初学者,我还有很多技术方面的知识掌握的不够全面,这个程序的功能也不是十分的完善,因此我将在今后继续学习,提高Java语言的编程能力,不断地完善自动售货机的程序,为操作者提供更加方便的使用体验。本次设计的自动售货机控制系统可以实现购买统计分析,并且能够对购买者提出合理化的购买建议。并且已经获得了相关的专利。参考文献1 李代万,李金平,孙亮亮.人民币识别器与自动售货机通信的设计与实现J.北方交通大学学报,2002,26(6):80-82.2 许瀚文,王仲娴,李梓豪.浅谈国内自动售货机的发展J.中国科技博览, 2012(22):267.3 余世明,晁岳磊,缪仁将.自动售货机研究现状及展望J.中国工程科学.2008(07).4 李卫华. Java语言课程双语教学探索J.广东工业大学学报,2008, (3):15-22.5 张红旭.浅谈Java的发展及特点M.硅谷出版社,2010.6 王子君,范学峰,张志浩.Java编码问题研究与应用J.计算机工程,2003,(3): 18-23.7 D.Alur,J.Crupi,D.Malks.Best Practices and Design StrategiesJ.Core J2EE Patterns, 2008,9(1):23-30.8 L.W.M.Verhoef. Decision making of vending machine usersJ.Applied Ergonomics, 1988,19(2):103-109.9 张建龙.自动售货机节能设计与实现J.机电工程2010(4).10 郑大宇,张立惠,秦芳.网络自动售货机数据库系统的设计J.哈尔滨商业大学学报(自然科学版),2003,(05):20-25.11 T.Mori.Fatigue Damage Monitoring Sensor Using Crack Propagation in Stainless Steel Sheet.China-Japan Joint Seminar on Steel and Composite Bridges.2007.12 曹利红,叶杨.自动售货机的实时监控设计与实现J.北京工商大学学报(自然科学版),2007(02).13 J.Anderru.Vandalism of vending machines: Factorsthat attract professionals and amateursJ. Journal of Criminal Justice,2003,(15):35-40.致 谢在本次毕业设计设计中,我深切体会到无论理论知识再好,都需要用实践去检验,实践是理论运用的最好的检验工具。本次设计是对我四年所学知识的一次综合性检测和考验,无论是动手能力还是理论知识运用能力都得到了提高,同时加深了我对网络资源的认识,大大提高了查阅资料的能力和效率。感谢我的指导教师,本论文是在她的悉心指导下完成的。赵老师渊博的知识,严谨的治学态度和孜孜不倦的工作热情给我留下了非常深刻的印象。赵老师思维敏锐、经验丰富,激励我在今后的工作和学习中积极上进。这份深厚的师生情谊,必将成为难忘的回忆。与此同时,在本次毕业设计中过程中,得到了许多同学的帮助,借鉴了他们的一些经验,并且从他们身上学到了很多东西,尤其在相互的讨论和学习中,增加了周围学习的气氛,在这样的氛围中学习和工作,使我感到非常庆幸。在此对他们表示感谢。附 录附录1 售货机购买实现的程序代码:/package desktopapplication2;/*This class is to control the all activities of customer interface and his action. * author Huang Ying */public class VMC_Control Stock stockinfo=new Stock(); Cash coinsinfo=new Cash(); CustomerTransaction cusinfo= new CustomerTransaction(); /* This method is to get the products name from the Stock class. * */ public String getstockname() return stockinfo.productName; /* This method is to get the products price from the Stock class. * */ public double getstockprice() return stockinfo.Price; /* This method is to get the products stock level of each products from the Stock class. * */ public int getstock() return stockinfo.Stock; /* This method is to get the coins level from the Cash class. * */ public int getcoinsinfo() return coinsinfo.cashLevel; /* This method is to convert the price into pound or penny. *param money The double number to storage the money. * return money the double number which is converted. */ public double money(double money) if(money1.0) return money*100; return money; /* This method is to decorate the pound or the penny. *param price The double array to storage the price. * return p The string array to storage the decorated stocks price. */ public String decpri(double price) String p=new String5; for(int i=0;i5;i+) if(pricei1.0) pricei=pricei*100; pi=String.valueOf(int)pricei)+p; else pi=u00a3+String.valueOf(pricei); return p; /* This method is to count the change of each coins. *param clicknum The int array to how many of each coins the customer inserts. */ public void calculateCoins(int clicknum) for(int i=0;i6;i+) coinsinfo.cashLeveli=coinsinfo.cashLeveli+clicknumi; /* This method is to compute the changes . *param money2 The double number to storage the has-paid money. */ public int computeChange(double money2,double m) java.text.NumberFormatformate= java.text.NumberFormat.getNumberInstance(); formate.setMaximumFractionDigits(2); int coinsnum=coinsinfo.cashLevel; int change=Integer.valueOf(formate.format(100*(money2-m);/change to be returned int changetype=new int6; changetype5 = change/200; change= change-change/200*200; changetype4 = change/100;
展开阅读全文