




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGE1嵌入式开发期末作业院系:计算机与信息工程学院院系:计算机与信息工程学院班级:软件技术一班姓名:学号:无线点餐系统的设计与实现摘要今天我们生活在充满数字的时代,随着GPRS、CDMA1X、蓝牙、WLAN等无线技术的突飞猛进,移动生活、移动办公逐渐由概念转为现实,信息数据随手可及。特别是广域无线数据传输技术的成熟,运营商的大力推广,WLAN的应用日渐普及,逐步渗透到金融、公安、教育、物流、商贸等行业中,并日益影响到人们生活的方方面面,种种梦想化为现实成为了可能。对于传统的餐饮业而言,也在潜移默化中感受到无线网络的无穷魅力。通常情况,餐厅点餐、送单、结账都采用人工传递,这种工作流程效率低下,而且在就餐高峰期人员繁杂的情况下,服务员在快速手写点餐、人工送单中可能还会增加误操作的几率,造成客人投诉,影响到服务质量,甚至有损餐厅的美誉度。随着WLAN技术的普及,一些规模较大的酒楼餐厅开始考虑利用这种最为先进、最具时尚潮流的网络技术来建设一套灵活、快捷的信息管理系统,以优化管理流程,使酒店的服务和管理得到实质性的提升,提高品牌形象和行业核心竞争力。本设计主要讲述了点餐系统的基本功能和数据库的设计方法。设计最终达成了包括用户登录模块、点菜管理功能模块、并台管理功能模块、转台管理功能模块、查台管理功能模块、结台管理功能模块、更新管理功能模块、注销功能模块、设置功能模块等。并且系统能够正常运行,各个界面交互性较好。在系统规划中先后用数据流程图,系统功能结构图分析了系统所需的各种数据,详细的展示了系统的各个功能模块,并给出了主要功能运用界面图。
目录175621绪论 4147581.1研究的背景及意义 443821.2研究的目的 4316292设计原理和方法 4275632.1架构概述 4182462.2关键技术简介 5168982.3开发工具及环境 6135223数据库设计 7205553.1数据库需求分析 729033.2数据库的逻辑设计 8138884系统实现 9215174.1客户端设计思路 9181694.2主菜单界面 9208414.2.1功能描述 9286554.2.2登录界面的设计 9257384.3服务器各模块设计 10146304.3.1登录 10315504.3.2更新 1012194结论 1013088参考文献 111绪论1.1研究的背景及意义餐饮传统的点菜方式是纯人工操作,由服务员记录顾客点的菜,在具体工作中容易出现以下问题:手写单据字迹潦草从而导致上错菜、传菜分单出错现象严重、加菜和查账程序较繁琐。处理特殊口味有遗漏和偏差、客人催菜遗忘现象较频繁、计算账单易出错、不方便人员管理等等。正因如此,无线点餐模式应运而生。它不仅可以有效地提高餐饮业的工作效率,更可以规范服务体系,提高整体服务质量和管理水平,并为规模化经营提供了坚实的技术基础。我们生活在一个充斥着数字技术的世界里,数字技术几乎侵入到我们生活的每个细节。点餐系统在使用上不及Wi-Fi点餐系统便利:服务员依然使用手持终端为顾客点餐,当消费者点完餐后,服务员将存储在手持终端内的点餐信息,对准布置在餐厅各个位置的红外接收端进行发射,接收端会将点餐信息通过网线传送到前台计算机。前台计算机会对点餐信息进行分类处理,然后将点餐信息分别发送给收银台和厨房。1.2研究的目的本文介绍了无线点餐系统的开发过程。遵循软件工程的方法,论文详尽论述了从需求分析、系统分析、概要设计、详细设计、以及测试与调试的整个开发过程。首先系统地研究了无线点餐系统的背景和意义,分析了当今点餐系统的特点和共性,从而得出设计本系统的思路和方法。接着介绍了实现系统开发的Android平台环境,数据库用MySQL实现。同时简要介绍了以上工具的功能和方法。概要设计分成后台数据库管理操作设计和客户端操作设计,同时介绍了数据库的建立和维护。详细设计主要阐述了点菜管理、并台管理、查台管理,转台管理,注销等以及后台管理功能的实现,并给出了系统的部分设计代码。最后,对每个功能模块和整个系统进行了测试,测试结果表明:系统基本具备了的功能以及快速的响应速度。2设计原理和方法2.1架构概述本设计主要讲述了无线点餐系统的基本功能和基于Android平台的软件开发、数据库的设计方法。设计最终达成了用户登录、点菜管理、桌位管理,收费管理,等点餐系统的基本功能。并且系统能够正常运行,各个页面交互性较好。在整个设计中基本运用基础的Android进行功能编程,也运用到了一些前端控件来控制输入信息,对输入信息进行验证,通过JDBC连接数据库。在系统规划中先后用数据流程图、系统功能结构图分析了系统所需的各种数据,详细的展现了系统的各个功能模块并给出了主要功能运行界面图。该点餐系统目前已有比较完善的管理与使用功能。开发点餐系统是为了满足酒店管理的需要,以现代化的创新思维模式去工作。无线点餐系统主要用到的采用模型-视图-控制器MVC架构的设计模式。MVC架构是"Model-View-Controller"的缩写,中文翻译为"模型-视图-控制器"。MVC应用程序总是由这三个部分组成。Event(事件)导致Controller改变Model或View,或者同时改变两者。只要Controller改变了Models的数据或者属性,所有依赖的View都会自动更新。类似的,只要Controller改变了View,View会从潜在的Model中获取数据来刷新自己。MVC架构最早是smalltalk语言研究团提出的,应用于用户交互应用程序中。smalltalk语言和java语言有很多相似性,都是面向对象语言,很自然的SUN在宠物店事例应用程序中就推荐MVC架构作为开发Web应用的架构模式。MVC架构是一种架构,其实需要其他模式协作完成。在J2EE模式目录中,通常采用servicetoworker模式实现,而servicetoworker模式可由集中控制器模式,派遣器模式和PageHelper模式组成。而Struts只实现了MVC的View和Controller两个部分,Model部分需要开发者自己来实现,Struts提供了抽象类Action使开发者能将Model应用于Struts框架中。2.2关键技术简介JDBCJDBC(JavaDataBaseConnectivity,java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯JavaAPI编写数据库应用程序,同时,JDBC也是个商标名。有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。换言之,有了JDBCAPI,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问Informix数据库又编写另一个程序等等,程序员只需用JDBCAPI写一个程序就够了,它可向相应数据库发送SQL调用。同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是Java语言“编写一次,处处运行”的优势。Java数据库连接体系结构是用于Java应用程序连接数据库的标准方法。JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。作为API,JDBC为程序开发提供标准的接口,并为数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准方法。JDBC使用已有的SQL标准并支持与其它数据库连接标准,如ODBC之间的桥接。JDBC实现了所有这些面向标准的目标并且具有简单、严格类型定义且高性能实现的接口。移动终端界面设计用于移动终端技术领域,提供了一种移动终端界面显示方法、装置以及移动终端,所述方法包括以下步骤:接收用户的界面显示模式设置;将用户的界面显示模式设置进行存储;根据用户的需要控制移动终端界面进入用户设置的界面显示模式。本发明实施例通过将用户的界面显示模式设置进行存储,根据获取的移动终端运行指令控制界面进入用户设置的界面显示模式,使得移动终端的用户能够方便的根据自己的需要对显示界面进行设置,譬如设置字体的大小、设置某个应用程序的高亮状态等,拓展了移动终端的功能,方便了用户的使用。2.3开发工具及环境EclipseEclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentTools,JDT)。Eclipse最初是由IBM公司开发的替代商业软件VisualAgeforJava的下一代IDE开发环境,2021年11月贡献给开源社区,现在它由非营利软件供应商联盟Eclipse基金会(EclipseFoundation)管理。2021年,Eclipse3.0选择OSGi服务平台规范为运行时架构。2021年6月,稳定版3.3发布。2021年6月发布代号为Ganymede的3.4版。2021年7月发布代号为GALILEO的3.5版。Eclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,但是目前亦有人通过插件使其作为其他计算机语言比如C++和Python的开发工具。Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。Eclipse的主要构成Eclipse是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。它主要由Eclipse项目、Eclipse工具项目和Eclipse技术项目三个项目组成,具体包括四个部分组成——EclipsePlatform、JDT、CDT和PDE.JDT支持Java开发、CDT支持C开发、PDE用来支持插件开发,EclipsePlatform则是一个开放的可扩展IDE,提供了一个通用的开发平台。它提供建造块和构造并运行集成软件开发工具的基础。EclipsePlatform允许工具建造者独立开发与他人工具无缝集成的工具从而无须分辨一个工具功能在哪里结束,而另一个工具功能在哪里开始。EclipseSDK(软件开发者包)是EclipsePlatform、JDT和PDE所生产的组件合并,它们可以一次下载。这些部分在一起提供了一个具有丰富特性的开发环境,允许开发者有效地建造可以无缝集成到EclipsePlatform中的工具。EclipseSDK由Eclipse项目生产的工具和来自其它开放源代码的第三方软件组合而成。Eclipse项目生产的软件以GPL发布,第三方组件有各自自身的许可协议。Tomcat服务器Tomcat很受广大程序员的喜欢,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;而且它还在不断的改进和完善中,任何一个感兴趣的程序员都可以更改它或在其中加入新的功能。Tomcat是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache服务器,可利用它响应对HTML页面的访问请求。实际上Tomcat部分是Apache服务器的扩展,但它是独立运行的,所以当你运行tomcat时,它实际上作为一个与Apache独立的进程单独运行的。这里的诀窍是,当配置正确时,Apache为HTML页面服务,而Tomcat实际上运行JSP页面和Servlet。另外,Tomcat和IIS、Apache等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。3数据库设计3.1数据库需求分析无线点餐系统以酒店服务信息为主体,因此在这个系统中必须要有一个保存菜单信息的表。所以用编号做主键。负责登录终端系统的服务人员应该有保存服务人员信息的表,这个表中也是包括一些基本信息。并且以服务人员的编号作为主键。在一个点餐系统中,不可避免的要有桌位的编号。这样的话就必须有一个桌号表,该表保存桌位信息。顾客可以按照自己的喜好,在酒店布置的桌号中选择自己喜欢的位置。另外既然是酒店就必须要有一个订单表,该表中包括订单号,点餐时间,用户ID,桌号,人数,是否结账等基本信息。这样也就还需要一个订单详细表用于存储顾客所点的菜品信息等等。原准备再弄一个菜品分类表用于区分凉菜,热菜等。3.2数据库的逻辑设计数据库的逻辑设计,即把概念设计得到的概念数据库模式变为逻辑数据模式,它依赖于DBMS。根据无线点餐系统的需求分析及数据库的感念设计,得到以下的数据库表和表的相关说明如下:(1)桌号表桌号表的结构及相关说明如表5-1所示。表5-1桌号表序号字段名称字段含义类型宽度备注1Id编号Int4Primarykey2number桌位号Int43flag状态位Int44description描述varchar16(2)订单表订单表的结构及相关说明如表5-2所示。表5-2订单表序号字段名称字段含义类型宽度备注1Id订单号Int4Primarykey2orderTime下订单时间Int43userID服务员号varchar164tableId桌位号Int4Foreignkey5personNum顾客人数Int46isPay是否付款varchar167remark备注varchar16(3)订单详细表订单详细表的结构及相关说明如表5-3所示。表5-3订单详细表序号字段名称字段含义类型宽度备注1Id编号Int4Primarykey2orderId下订单号varchar16Foreignkey3menuId菜谱号Int4Foreignkey4number点菜数Int45remark备注varchar164系统实现4.1客户端设计思路移动终端是使用者最直接接触的东西,包括是否能够让客户很轻松、方便的使用,操作响应时间、主机连接时间、图片综合质量、首页布局质量、首页信息类型等。一般来说,一个界面主要由下面几个因素构成:(1)文字:文字元素是信息传达的主体部分。界面中的文字主要包括标题、信息、文字链接几种主要形式。标题和传统媒体中信息传达的基本作用相同,是内容的简概说明一般比较醒目、优先编排。文字作为占据页面重要比率的元素,同时又是信息重要载体,它的字体、大小、颜色和排布对页面整体设计影响极大。(2)图形:图形在界面中具有重要作用。合理的运用图形,可以生动直观、形象地表现设计主题。网页中常用的图形格式包括jpg和gif,这两种格式压缩比高,得到了Android平台的支持,图形元素包括标题、背景、主图、链接图标四种。(3)界面版式:版式是界面设计的重要组成部分,它将文字、图形等视觉元素进行组合配置,使页面整体视觉效果美观和谐,便于阅读,操作,实现信息传达的最佳效果。终端系统的界面设计也是综合了文字,图形等元素。使每一个功能有文字与图片的共同描述,达到看图就大概知道此键是什么功能的目的,最终的目的还是为了使用者能够快速上手,不至于因为操作的不得当而放弃此系统。4.2主菜单界面4.2.1功能描述主菜单界面包含点菜管理、并台管理、转台管理、查台管理、结台管理、更新管理、注销、设置等八个功能模块。每个功能模块提供一种服务,包含一组功能操作,界面简单明了方便服务人员操作。4.2.2登录界面的设计登录界面主要是由服务人员来操作的,所以要简单明了易操作。利用数据库对用户信息进行核对,核对正确后利用界面跳转到主菜单界面。每一位服务人员有自己单独的一个账号密码用来登录,这样可以责任到人,不至于出现混乱,否则出现错误都不知道是哪个环节的问题。4.3服务器各模块设计4.3.1登录当服务器访问loginservlet的时候,服务器得到用户的登录名和密码,该servlet的任务就是通过查询数据库,如果没有该用户或者密码不对返回0;如果有,并且密码正确,则返回一段有规则的字符串,包括用户id和名字。4.3.2更新更新的Servlet主要有两个,一个是更新菜谱,另一个是更新桌子。主要是考虑到饭店的菜谱和桌子不可能一成不变,将软件的扩展性增强。当饭店的菜谱或者桌子更新的时候,操作员就可以将的数据库SQLITE和服务器的数据库的数据同步。这两个Servlet的工作原理就是查询table表和menu表组成一个xml文件并且返回给客户端。结论经过近几个月的代码及论文书写,毕业设计也随之进入收尾阶段,点餐系统的基本功能也逐个完成。
在这次毕业设计中,通过学习与思考并实践,使本人对GoogleAndroid开发及Java等相关的技术初步了解,同时,由于本人做的是一套无线点餐系统,从起初资料的查询,让本人在有限的时间内丰富了对无线开发的认知,积累了理论上的知识。需求分析,可行性分析,再到后来的Java配置环境,书写代码及其调试,让本人作为一个用户对该类系统的需求和软件运行的环境有了一定了解。将之前学过的数据库知识跟Java技术结合在一起,理论联系实际,在实践中锻炼了本人分析处理问题的能力并激发了这方面的兴趣。经过这几个月来的毕业设计和对相关资料的收集,我清楚的感到随着网络的不断发展和网络的广泛应用,使我们的生活离不开它了。网络它以自己的独特的优点征服了我们。随着用户方便的需求越来越高,订餐系统方面的工作量将会越来越大,并且其工作是一件十分烦琐和容易出错的事情。在这样的情况下有一个运行良好的无线点餐系统是有其必然性的,如果能做出一个完善的系统就使各类人员的工作量减少很多。
这次毕业设计的过程中,还让本人巩固了并加深了对软件工程这门学科的认识,尤其让本人在使用工程流程的各个阶段有了进一步的了解,并相对独立地完成各个阶段的任务。通过这次设计还让我明白了需求分析和总体设计是系统真正开发的关键,它规划出系统的大致模块和业务接口,流程转换以及模块之间的关系。如果总体设计规划不科学,将会导致之后的详细设计工作出现冗余,目标不明确甚至失去方向。虽然在开发过程中受水平和时间所限,在设计中还有些欠缺或考虑不周全的地方,但这次毕业设计的经历将对本人今后的学习和工作产生重大意义。参考文献[1]谭浩强.Java语言程序设计(第三版)[M].北京:清华大学出版社,2021.[2]张孝祥.Java就业培训教程[M].北京:清华大学出版社,2021[3]王珊、萨师煊.数据库系统概论(第四版)[M].北京:高等教育出版社,2021.[4]李春儒.守望互联网经济—电子商务发展现状与趋势[OL].,2021.[5]李飞,最新实用网络技术教程[M].西安:西安电子科技大学出版社.69~70,124~126.[6]史斌星,史佳.Java基础编程贯通教程[M].北京:清华大学出版社,2021.[7]马海军,杨继萍.Java2实用教程[M].北京:清华大学出版社,2021.1~63.[8]余志龙,陈小凤,郑名杰.AndroidSDK开发范例大全[M].北京:人民邮电出版社,2021.[9]高焕堂.Android应用框架原理与程式设计36(第三版)[M].北京:清华大学出版社,2021.1[10]Smego.Android应用程序设计基础./viewtopic,2021.1~63.[11]E2ECloud.深入浅出Android程序设计[OL].北京:人民邮电出版社,2021.8~63.[12]Smego.AndroidAProgrammersGuide[OL]./viewtopic.php?f=2,2021.9~63.[13]盖索林.Android开发入门指南[M].北京:人民邮电出版社,2021.11~63.[14]杨丰盛.Android应用开发揭秘[M].西安:机械工业出版社,2021.1~63.[15]张利国,龚海平,王植萌.Android移动开发入门与进阶[M].北京:人民邮电出版社,2021.12~63.预订餐桌:packagecom.amaker.wlo;importjava.io.UnsupportedEncodingException;importjava.text.SimpleDateFormat;importjava.util.ArrayList;importjava.util.Date;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importorg.apache.http.NameValuePair;importorg.apache.http.client.entity.UrlEncodedFormEntity;importorg.apache.http.client.methods.HttpPost;importorg.apache.http.message.BasicNameValuePair;importtocol.HTTP;importandroid.app.Activity;importandroid.app.AlertDialog;importandroid.content.ContentResolver;importandroid.content.DialogInterface;importandroid.content.SharedPreferences;importandroid.database.Cursor;import.Uri;importandroid.os.Bundle;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.LinearLayout;importandroid.widget.ListView;importandroid.widget.SimpleAdapter;importandroid.widget.SimpleCursorAdapter;importandroid.widget.Spinner;importandroid.widget.TextView;importandroid.widget.Toast;importcom.amaker.util.HttpUtil;publicclassOrderActivityextendsActivity{ //桌号下拉列表 privateSpinnertableNoSpinner; //开桌、点菜和下单按钮 privateButtonorderBtn,addBtn,startBtn; //人数编辑框 privateEditTextpersonNumEt; //点菜列表 privateListViewlv; //开桌生成的订单Id privateStringorderId; //点菜列表中绑定的数据 privateListdata=newArrayList(); //点菜列表中具体的数据项 privateMapmap; //ListView的Adapter privateSimpleAdaptersa; //ListView中显示的数据项 privateString[]from={"id","name","num","price","remark"}; //引用的TextViewDrawableID privateint[]to=newint[5]; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); //为Activity设置界面布局 setContentView(R.layout.order); //实例化Spinner tableNoSpinner=(Spinner)findViewById(R.id.tableNoSpinner); //为桌号下拉列表Spinner绑定数据 setTableAdapter(); //实例化开桌按钮 startBtn=(Button)findViewById(R.id.startButton02); //为开桌按钮添加监听器 startBtn.setOnClickListener(startListener); //实例化点菜按钮 addBtn=(Button)findViewById(R.id.addMealButton01); //为点菜按钮添加监听器 addBtn.setOnClickListener(addListener); //实例化下单按钮 orderBtn=(Button)findViewById(R.id.orderButton02); //为下单按钮添加监听器 orderBtn.setOnClickListener(orderListener); //实例化人数编辑框 personNumEt=(EditText)findViewById(R.id.personNumEditText02); //实例化ListView lv=(ListView)findViewById(R.id.orderDetailListView01); //为点菜列表ListView绑定数据 setMenusAdapter(); } //为点菜列表ListView绑定数据 privatevoidsetMenusAdapter(){ //显示点菜项的TextView引用 to[0]=R.id.id_ListView; to[1]=R._ListView; to[2]=R.id.num_ListView; to[3]=R.id.price_ListView; to[4]=R.id.remark_ListView; //实例化点菜列表ListViewAdapter sa=newSimpleAdapter(this,data,R.layout.listview,from,to); //为ListView绑定数据 lv.setAdapter(sa); } //为桌号下拉列表Spinner绑定数据 privatevoidsetTableAdapter(){ //访问本地SQLite数据库中桌号表的Uri Uriuri=Uri.parse("content://vider.TABLES/table"); //要选择桌号表中的列 String[]projection={"_id","num","description"}; //查询放回游标 Cursorc=managedQuery(uri,projection,null,null,null); //实例化桌号下拉列表Spinner的Adapter SimpleCursorAdapteradapter2=newSimpleCursorAdapter(this, android.R.layout.simple_spinner_item,c, newString[]{"_id"},newint[]{android.R.id.text1}); //为桌号Spinner绑定数据 tableNoSpinner.setAdapter(adapter2); } //开桌监听器 privateOnClickListenerstartListener=newOnClickListener(){ @Override publicvoidonClick(Viewv){ Datedate=newDate(); SimpleDateFormatsdf=newSimpleDateFormat("yy:mm:ddhh:MM"); //开桌时间 StringorderTime=sdf.format(date); //开桌用户,从登陆配置文件中获得 SharedPreferencespres=getSharedPreferences("user_msg", MODE_WORLD_READABLE); StringuserId=pres.getString("id",""); //桌号 TextViewtv=(TextView)tableNoSpinner.getSelectedView(); StringtableId=tv.getText().toString(); //人数 StringpersonNum=personNumEt.getText().toString(); //请求参数列表 List<NameValuePair>params=newArrayList<NameValuePair>(); //添加请求参数 params.add(newBasicNameValuePair("orderTime",orderTime)); params.add(newBasicNameValuePair("userId",userId)); params.add(newBasicNameValuePair("tableId",tableId)); params.add(newBasicNameValuePair("personNum",personNum)); UrlEncodedFormEntityentity1=null; try{ entity1=newUrlEncodedFormEntity(params,HTTP.UTF_8); }catch(UnsupportedEncodingExceptione){ e.printStackTrace(); } //请求服务器url Stringurl=HttpUtil.BASE_URL+"servlet/StartTableServlet"; //获得请求对象HttpPost HttpPostrequest=HttpUtil.getHttpPost(url); //设置查询参数 request.setEntity(entity1); //获得响应结果 Stringresult=HttpUtil.queryStringForPost(request); //将开桌生成的订单Id,赋值给全局orderId orderId=result; Toast. makeText(OrderActivity.this,result,Toast.LENGTH_LONG).show(); } }; //添菜监听器 privateOnClickListeneraddListener=newOnClickListener(){ @Override publicvoidonClick(Viewv){ //调用点菜方法 addMeal(); } }; //添菜方法 privatevoidaddMeal(){ //获得LayoutInflater实例 LayoutInflaterinflater=LayoutInflater.from(this); //实例化在弹出对话框中添加的视图 finalViewv=inflater.inflate(R.layout.order_detail,null); //获得视图中的Spinner对象,菜单下拉列表 finalSpinnermenuSpinner=(Spinner)v.findViewById(R.id.menuSpinner); //获得视图中的EditText对象,数量 EditTextnumEt=(EditText)v.findViewById(R.id.numEditText); //获得视图中的EditText实例,备注 EditTextremarkEt=(EditText)v.findViewById(R.id.add_remarkEditText); //访问本地SQLite数据库中MenuTbl表的Uri Uriuri=Uri.parse("content://vider.MENUS/menu1"); //查询列 String[]projection={"_id","name","price"}; //获得ContentResolver实例 ContentResolvercr=getContentResolver(); //查询放回游标 Cursorc=cr.query(uri,projection,null,null,null); //实例化SimpleCursorAdapter SimpleCursorAdapteradapter2=newSimpleCursorAdapter(this, R.layout.spinner_lo,c, newString[]{"_id","price","name"},newint[]{ R.id.id_TextView01,R.id.price_TextView02, R._TextView03,}); //为点菜下拉列表Spinner绑定数据 menuSpinner.setAdapter(adapter2); //获得AlertDialog.Builder实例 AlertDialog.Builderbuilder=newAlertDialog.Builder(this); builder //设置标题 .setMessage("请点菜:") //设置自定义视图 .setView(v) //设置确定按钮 .setPositiveButton("确定",newDialogInterface.OnClickListener(){ //确定按钮事件 publicvoidonClick(DialogInterfacedialog,intid){ //获得ListView中的自定义视图LinearLayout LinearLayoutv1=(LinearLayout)menuSpinner .getSelectedView(); //获得TextView,菜编号 TextViewid_tv=(TextView)v1 .findViewById(R.id.id_TextView01); //获得TextView,菜价格 TextViewprice_tv=(TextView)v1 .findViewById(R.id.price_TextView02); //获得TextView,菜名称 TextViewname_tv=(TextView)v1 .findViewById(R._TextView03); //获得EditText,菜数量 EditTextnum_et=(EditText)v .findViewById(R.id.numEditText); //获得EditText,菜备注 EditTextremark_et=(EditText)v .findViewById(R.id.add_remarkEditText); //菜编号值 StringidStr=id_tv.getText().toString(); //菜价格值 StringpriceStr=price_tv.getText().toString(); //菜名称值 StringnameStr=name_tv.getText().toString(); //菜数量值 StringnumStr=num_et.getText().toString(); //菜备注值 StringremarkStr=remark_et.getText().toString(); //封装到Map中 map=newHashMap(); map.put("id",idStr); map.put("name",nameStr); map.put("num",numStr); map.put("price",priceStr); map.put("remark",remarkStr); //添加到ListView data.add(map); //关联的TextView to[0]=R.id.id_ListView; to[1]=R._ListView; to[2]=R.id.price_ListView; to[3]=R.id.remark_ListView; //实例化SimpleAdapter sa=newSimpleAdapter(OrderActivity.this,data, R.layout.listview,from,to); //为ListView绑定数据 lv.setAdapter(sa); } }).setNegativeButton("取消",null); AlertDialogalert=builder.create(); alert.show(); } //下单监听器 privateOnClickListenerorderListener=newOnClickListener(){ @Override publicvoidonClick(Viewv){ //遍历点菜列表 for(inti=0;i<data.size();i++){ //获得其中点菜map Mapmap=(Map)data.get(i); //获得点菜项 StringmenuId=(String)map.get("id"); Stringnum=(String)map.get("num"); Stringremark=(String)map.get("remark"); StringmyOrderId=orderId; //封装到请求参数中 List<NameValuePair>params=newArrayList<NameValuePair>(); //添加到请求参数中 params.add(newBasicNameValuePair("menuId",menuId)); params.add(newBasicNameValuePair("orderId",myOrderId)); params.add(newBasicNameValuePair("num",num)); params.add(newBasicNameValuePair("remark",remark)); UrlEncodedFormEntityentity1=null; try{ entity1=newUrlEncodedFormEntity(params,HTTP.UTF_8); }catch(UnsupportedEncodingExceptione){ e.printStackTrace(); } //请求服务器Servlet的url Stringurl=HttpUtil.BASE_URL+"servlet/OrderDetailServlet"; //获得HttpPost对象 HttpPostrequest=HttpUtil.getHttpPost(url); //为请求设置参数 request.setEntity(entity1); //获得返回结果 Stringresult=HttpUtil.queryStringForPost(request); Toast. makeText(OrderActivity.this,result,Toast.LENGTH_LONG).show(); finish(); } } };}付款:packagecom.amaker.wlo;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.webkit.WebView;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.Toast;importcom.amaker.util.HttpUtil;publicclassPayActivityextendsActivity{ //显示点餐信息WebView privateWebViewwv; //查询点餐信息按钮和结算按钮 privateButtonqueryBtn,payBtn; //订单编号 privateEditTextorderIdEt; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); //设置当前Activity的界面布局 setContentView(R.layout.pay); //获得WebView实例 wv=(WebView)findViewById(R.id.pay_webview); //实例化查询按钮 queryBtn=(Button)findViewById(R.id.pay_query_Button01); //实例化结算按钮 payBtn=(Button)findViewById(R.id.pay_Button01); //实例化订单编号编辑框 orderIdEt=(EditText)findViewById(R.id.pay_order_number_EditText01); //添加查询点餐信息监听器 queryBtn.setOnClickListener(queryListener); //添加结算息监听器 payBtn.setOnClickListener(payListener); } //查询点餐信息监听器 OnClickListenerqueryListener=newOnClickListener(){ @Override publicvoidonClick(Viewv){ //获得订单编号 StringorderId=orderIdEt.getText().toString(); //请求服务器url Stringurl=HttpUtil.BASE_URL+"servlet/PayServlet?id="+orderId; //将返回信息在WebView中显示 wv.loadUrl(url); } }; //结算监听器 OnClickListenerpayListener=newOnClickListener(){ @Override publicvoidonClick(Viewv){ //获得订单编号 StringorderId=orderIdEt.getText().toString(); //请求服务器url Stringurl=HttpUtil.BASE_URL+"servlet/PayMoneyServlet?id="+orderId; //获得查询结果 Stringresult=HttpUtil.queryStringForPost(url); //显示结算结果 Toast.makeText(PayActivity.this,result,Toast.LENGTH_LONG).show(); //使结算按钮失效 payBtn.setEnabled(false); } };}更新:packagecom.amaker.wlo;importjava.io.InputStream;import.URL;import.URLConnection;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importorg.w3c.dom.Document;importorg.w3c.dom.NodeList;importandroid.app.AlertDialog;importandroid.app.ListActivity;importandroid.content.ContentResolver;importandroid.content.ContentValues;importandroid.content.DialogInterface;import.Uri;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.ArrayAdapter;importandroid.widget.ListAdapter;importandroid.widget.ListView;importvider.Menus;importcom.amaker.util.HttpUtil;/****@author郭宏志*实现数据同步功能*/publicclassUpdateActivityextendsListActivity{ @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); //设置标题 setTitle("掌中宝无线订餐系统-数据同步"); //获得ListView实例 ListViewlistView=getListView(); //声明ListView要绑定的数据 String[]items={"更新菜谱表数据[MenuTbl]","更新餐桌表数据[TableTbl]"}; //实例化adapter ListAdapteradapter=newArrayAdapter<String>(this, android.R.layout.simple_list_item_1,items); //为ListView设置adapter listView.setAdapter(adapter); } @Override protectedvoidonListItemClick(ListViewl,Viewv,intposition,longid){ super.onListItemClick(l,v,position,id); switch(position){ //更新菜谱表数据 case0: confirm(1); break; //更新桌位表数据 case1: confirm(2); break; default: break; } } //确认对话框 privatevoidconfirm(finalintitem){ AlertDialog.Builderbuilder=newAlertDialog.Builder(this); builder.setMessage("你真的要更新吗?").setCancelable(false).setPositiveButton( "确定",newDialogInterface.OnClickListener(){ publicvoidonClick(DialogInterfacedialog,intid){ if(item==1){ //更新菜谱表数据 updateMenu(); }else{ //更新桌位表数据 updateTable(); } } }).setNegativeButton("取消", newDialogInterface.OnClickListener(){ publicvoidonClick(DialogInterfacedialog,intid){ dialog.cancel(); } }); AlertDialogalert=builder.create(); alert.show(); } //更新菜谱表 privatevoidupdateMenu(){ //访问服务器url StringurlStr=HttpUtil.BASE_URL+"servlet/UpdateServlet"; try{ //实例化URL对象 URLurl=newURL(urlStr); //打开连接 URLConnectionconn=url.openConnection(); //获得输入流 InputStreamin=conn.getInputStream(); //实例化DocumentBuilderFactory DocumentBuilderFactoryfactory=DocumentBuilderFactory .newInstance(); //实例化DocumentBuilder DocumentBuilderbuilder=factory.newDocumentBuilder(); //获得Document Documentdoc=builder.parse(in); //获得节点列表 NodeListnl=doc.getElementsByTagName("menu"); //获得访问数据接口ContentResolver ContentResolvercr=getContentResolver(); //访问数据的Uri Uriuri1=Menus.CONTENT_URI; //删除本地SQLite数据库中菜谱表中的数据 cr.delete(uri1,null,null); //循环将数据保存到菜谱表 for(inti=0;i<nl.getLength();i++){ //实例化ContentValues ContentValuesvalues=newContentValues(); //解析XML文件获得菜单id intid=Integer.parseInt(doc.getElementsByTagName("id") .item(i).getFirstChild().getNodeValue()); //名称 Stringname=doc.getElementsByTagName("name").item(i) .getFirstChild().getNodeValue(); //图片路径 Stringpic=doc.getElementsByTagName("pic").item(i) .getFirstChild().getNodeValue(); //价格 intprice=Integer.parseInt(doc.getElementsByTagName("price") .item(i).getFirstChild().getNodeValue()); //分类编号 inttypeId=Integer.parseInt(doc .getElementsByTagName("typeId").item(i).getFirstChild() .getNodeValue()); //备注 Stringremark=doc.getElementsByTagName("remark").item(i) .getFirstChild().getNodeValue(); //添加到ContenValues对象 values.put("_id",id); values.put("name",name); values.put("price",price); values.put("pic",pic); values.put("typeId",typeId); values.put("remark",remark); //插入到数据库 cr.insert(uri1,values); } }catch(Exceptione){ e.printStackTrace(); } } privatevoidupdateTable(){ }}
中南民族大学学生课程设计报告课程名称:C程序设计语言选题名称:通讯录管理年级:专业:信息管理与信息系统学号:姓名:指导教师:完成地点:管理学院综合实验室完成日期:1.课程设计的目的为了熟练掌握C语言的语法特点、及其数据结构,提高自身编写程序的能力。通过课程设计实现理论知识与实际情况的结合,使所学知识能够在现实社会中起到一定的作用,防止所编写的程序脱离实际,让程序可以更好的发挥作用,以便减轻实际工作中所遇到的繁琐步骤,提高现实工作中的效率。此外通过课程设计提高逻辑思考能力和解决实际问题的能力。程序设计是公认的、最能直接有效地训练学生的创新思维,培养分析问题、解决问题能力的学科之一。其次课程设计有利于治学态度的培养。程序设计中,语句的语法和常量变量的定义都有严格的要求,有时输了一个中文标点、打错了一个字母,编译就不通过,程序无法正常运行。因此,程序设计初学阶段,学生经常会犯这样的错误,可能要通过几次乃至十多次的反复修改、调试,才能成功,但这种现象会随着学习的深入而慢慢改观。这当中就有一个严谨治学、一丝不苟的科学精神的培养,又有一个不怕失败、百折不挠品格的锻炼。通讯录信息管理系统是生活中不可缺少的部分编写了一个通讯录信息管理系统是十分必要的。本程序设计具有通讯信息的录入,进行保存、查找、删除等功能,操作界面简洁美观,易于操作。程序用了条件、循环、指针、结构体等知识点,综合了文件的打开和保存编写的。可运用于小的管理软件。软件运用菜单实现交互式管理,用户轻松的按键既可实现对软件的操作,操作简单易懂,功能丰富,可以很好的满足的需要。通过对通讯录管理系统的设计,进一步理解和掌握C语言这门课程的知识点,能够熟练的调用各种函数,把各种C语句有机的结合起来,提高自己C语言程序设计的能力,为今后解决实际问题打下良好基础。2.设计方案论证2.1设计思路建立一个函数,用来添加、显示、删除、查询通讯录等信息,完成通讯录的功能。主函数可以调用六个子函数,分别完成添加记录、显示记录、删除记录、查询记录、退出系统等功能。在主函数中可以以1、2、3、4、0数字键分别可以执行某个功能模块。退出程序删除记录查询记录显示退出程序删除记录查询记录显示记录添加记录通讯录管理系统 2.2程序设计2.2.1根据图1定义数据类型建立函数typedefstruct { charscore;/*编号*/ charname[10];/*姓名*/ charnum[15];/*号码*/ charemail[20]; /*邮箱*/ charage[8]; /*年龄*/ charadds[20]; /*住址*/ }Person;2.2.2主函数及其流程图Y定义主函数main()和一系列的功能函数,只有通过这些函数才可实现程序的功能。每次使用都会调用主函数。主函数主要是利用switch语句对数据进行处理,流程图如下:Y添加记录选择1开始N选择2YYYYNNNN退出系统查询记录删除记录显示记录选择0选择4选择3添加记录选择1开始N选择2YYYYNNNN退出系统查询记录删除记录显示记录选择0选择4选择3结束结束PAGE2PAGE1PAGE12.2.3增加函数及其流程图.添加通讯录记录流程图:.显示通讯录记录流程图:.删除通讯录记录流程图:.查询通讯录记录流程图:2.3源程序#include<stdio.h>#include<stdlib.h>#include<string.h>typedefstruct { charscore;/*编号*/ charname[10];/*姓名*/ charnum[15];/*号码*/ charemail[20]; /*邮箱*/ charage[8]; /*年龄*/ charadds[20]; /*住址*/ }Person;Personpe[80];intmenu_select() { charc; do{ system("cls"); printf("\t\t*****通讯录*****\n"); printf("\t\t┌───────┐\n"); printf("\t\t│1.添加记录│\n"); printf("\t\t│2.显示记录│\n"); printf("\t\t│3.删除记录│\n"); printf("\t\t│4.查询记录│\n"); printf("\t\t│0.退出程序│\n"); printf("\t\t└───────┘\n"); printf("\t\t请您选择(0-4):"); c=getchar(); }while(c<'0'||c>'4'); return(c-'0'); }intInput(Personper[],intn){ inti=0; charsign,x[10]; while(sign!='n'&&sign!='N') { printf("\t编号:"); scanf("\t%d",&per[n+i].score);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/CARD 038.2-2023辅助器具互联网基本公共服务平台第2部分:服务指南
- T/CAPE 11005-2023光伏电站光伏组件清洗技术规范
- 盗取高考试题及答案
- 定量决策考试题及答案
- 安全舆论面试题及答案
- vue面试题题及答案
- 技术专栏面试题及答案
- 广告运营面试题及答案
- 点评题目面试题及答案
- 财务人员的工作总结
- 国家开放大学电大《水利水电工程建筑物》期末题库及答案
- 【培训课件】管理沟通
- 2024-2030年中国外资医院行业发展现状及投资管理模式分析报告
- 停车场环境卫生保洁方案
- 管道直饮水项目可行性研究报告
- 《公路桥梁挂篮设计与施工技术指南》
- 期中复习-首字母填空精练100题 2024-2025学年人教版英语八年级上册
- 临床富血小板血浆介绍、分类、制备技术及质量控制要点
- 2024年地铁施工负责人安全考试题库-判断题
- 人教版历史2024年第二学期期末考试七年级历史试卷(含答案)
- 大药房《质量管理体系文件》-管理制度
评论
0/150
提交评论