




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于Android客户端的食堂订餐系统的毕业设计一、引言1(一)开发背景1(二)系统设计的意义1(三)开发工具的介绍2二、需求分析2(一)经济可行性2(二)技术可行性2(三)功能需求分析2三、系统设计3(一)系统设计的体系结构3(二)系统流程图3(三)系统功能图4(四)系统活动图5四、数据库表设计7(一)系统E-R图7(二)系统数据表设计7五、系统功能的具体实现11(一)网站首页11(二)食品查询13(三)用户注册13(四)用户信息修改界面14(五)后台管理登陆界面15(六)后台管理主界面17(七)用户管理18(八)管理员维护界面19(九)订餐管理界面20六、系统调试与测试21七、结论23基于Android客户端的食堂订餐系统的设计与实现摘要:在网络技术快速发展的今天,原先普通的电话预定餐厅已经不能满足的功能需求。网络越来越贴近生活,本产品通过网络订餐方便商家客户互动。用户通过注册登陆的方式能及时看到餐饮商家更新的信息,包括餐厅环境,菜肴信息,菜价等,反馈饭菜的好吃与否。商家可及时更新信息,处理订单,通知客户订单确认。系统管理员可以维护更新发布消息,还可以推荐食品(根据反馈),菜谱管理等一些辅助功能。关键词:Android;客户端;订餐一、引言(一)开发背景在网络技术快速发展的今天,原先普通的电话预定餐厅已经不能满足的功能需求。网络越来越贴近生活,本产品通过网络订餐方便商家客户互动。用户通过注册登陆的方式能及时看到餐饮商家更新的信息,包括餐厅环境,菜肴信息,菜价等,反馈饭菜的好吃与否。商家可及时更新信息,处理订单,通知客户订单确认。系统管理员可以维护更新发布消息,还可以推荐食品(根据反馈),菜谱管理等一些辅助功能。(二)面向对象 学校内的学生,教师(三)开发工具的介绍 以下是对食物信息管理系统的开发环境进行阐述:操作系统: Windows XP数据库:Mysql8.2开发工具:Eclipse二、需求分析1用户注册用户使用androidAPP进行注册或登录。若未注册可选择注册,只有注册用户方可点餐。未注册用户:只能登陆查询餐厅菜肴信息,不能订餐;注册用户:注册提供用户名,密码邮箱,短号或其他联系方式,学号或工号。可以查询信息,可以订餐。2登陆客户端登陆进行点餐,服务端登陆进行管理。3查看餐厅信息显示餐厅的各种信息,包括餐厅名称,ID图片文字说明。用户找到自己喜欢的餐厅后,点击餐厅图片进入此餐厅信息页面,可同构点击菜肴信息进入订餐。4查看菜肴信息用户再点击进入菜肴信息后,可以查看所有菜肴信息,包括名称、图片、价格、餐厅等,找到自己喜欢的菜肴可以点击确定,还可以根据就餐爱好,分类查询,动态搜索。5订餐确认用户在选择餐厅菜肴后,可点击确定,系统根据用户选择会自动生成订单信息,包括订单ID,用户名,学号或工号,餐厅ID,餐厅名称,菜肴ID,菜肴名称,菜式剩余数量,到餐时间,取货地点,联系方式等。用户查看又不满意可以取消订单或者更换菜肴,直至满意。然后点击订单确认,此订单生成,订单信息系统自动存储。6商家确认订单生成在用户生成订单后,餐厅查看,并确认。7商家更新信息商家根据实体店近期信息,可选择更新餐厅信息,包括菜肴信息及优惠信息等。更新菜肴信息:包括名称、口味、图片、编号、价格等,更新优惠信息。更新结束后,点击确认,信息生成并保存在服务端。三、系统设计(一)系统设计的体系结构本系统的设计及开发采用了流行的B/S(浏览器/服务器)模式的数据库体系,用户端主要负责人机交互,包括一些与数据和应用关系的图形和界面运用。Web服务器主要负责对客户端应用程序的集中管理。应用服务器主要负责应用系统的逻辑结构和数据关系,即事务处理。应用服务器又可以根据其处理的具体业务不同而分为多个。数据服务器则主要负责数据的存储和组织、分布式管理、备份和同步等等。(二)系统流程图根据食物网站设计的特点,将其分为两大模块:前台用户模块和后台管理员模块。1.前台模块流程图如图3-1所示:图3-1 前台模块流程图2.后台模块流程图如图3-2所示:图3-2 后台模块流程图(三)系统功能图绘制系统结构图的过程,实际上就是对系统功能模块进行分解设计的过程,即合理地将数据流程图转变为所需要的系统结构图。系统结构图将会使读者和用户能直观的了解系统的结构模式,理解系统的各个功能的结构,能很好地方便用户使用和理解整个系统。根据上述分析,按照结构化程序设计的需求,得到系统模块图,如图3-3所示:四、数据库表设计(一)系统E-R图E-R图由实体、实体的属性以及实体之间的关系三部分组成,实体是具有相同的性质并且彼此之间可以相互区分的现实世界对象的集合;属性是实体所具有的特征,它是描述实体或者关系的性质的数据项;实体之间的关系通常是指不同实体之间的关系。图4-1 E-R图 (二)系统数据表设计数据库在物理设备上的存储结构与存取方法被称为数据库的物理结构,它依赖与给定的计算机系统。为一个给定的逻辑数据模型选取一个最合适应用要求的物理结构。根据上面的实体关系分析以及ER图,设计系统的数据库表。1管理员信息表(t_admin),用来记录管理员的姓名及密码的信息。表4-1 管理员信息表序号列名数据类型标识主键允许空说明1userIdInt是是否管理员编号2userNamevarchar(50)否否是管理员姓名3userPwvarchar(50)否否是管理员密码2. 站内公告信息表(t_gonggao),主要记录了站内公告的标题、内容、日期和公告发布者,公告删除则是在数据库表中显示公告是否已被删除。表4-2站内公告信息表序号列名数据类型标识主键允许空说明1gonggao_idInt是是否公告编号2gonggao_titlevarchar(50)否否是公告标题3gonggao_contentvarchar(8000)否否是公告内容4gonggao_datavarchar(50)否否是公告日期5gonggao_fabuzheVarchar(50)否否是发布者6gonggao_delVarchar(50)否否是公告删除7gonggao_one1varchar(50)否否是公告18gonggao_one2varchar(50)否否是公告29gonggao_one3varchar(50)否否是公告310gonggao_one4varchar(50)否否是公告411gonggao_one5datetime(0)否否是公告512gonggao_one6datetime(0)否否是公告613gonggao_one7Int(11)否否是公告714gonggao_one8Int(11)否否是公告83.食物信息表(t_Food),该表主要用来记录食物的名称、所在地址、食物价格和食物的详情,并且可以在数据库表中查看到食物信息是否被删除,其中食物编号是表中的外键。 表4-3食物信息表序号列名数据类型标识主键允许空说明1IdInt是是否食物编号2namevarchar(50)否否是食物名称3addressvarchar(50)否否是地址4menpiaoInt否否是送餐5xiangqingvarchar(5000)否否是详情6delchar(10)否否是删除4.订单信息表(t_jiudian),用来记录客人的名称、地址以及客人的号码、联系人和订餐的一些标准,其中食物编号是信息表中的外键。 表4-4 酒店信息表 序号列名数据 类型标识主键允许空说明1IdInt是是否食堂编号2namevarchar(50)否否是食物名称3addresschar(10)否否是送餐地址4telchar(10)否否是送餐号码5lianxirenchar(10)否否是联系人6biaozhunchar(10)否否是标准7Food_idint否否是食物编号8delchar(10)否否是删除 表4-5 食物信息表序号列名数据类型标识主键允许空说明1IdInt是是否食物编号2namevarchar(50)否否是食物名称3addressvarchar(5000)否否是内容4telvarchar(50)否否是联系方式5lianxirenvarchar(50)否否是联系人6jianjievarchar(50)否否是简介7delvarchar(50)否否是删除6.订餐信息表(t_foods),用来记录订餐的标、内容以及订餐的日期。表4-6 订餐信息表 序号列名数据类型标识主键允许空说明1foods_idInt是是否订餐编号2foods_titlevarchar(50)否否是订餐标题3foods_contentvarchar(5000)否否是订餐内容4foods_datevarchar(50)否否是订餐日期5foods_one1varchar(50)否否是订餐16foods_one2varchar(50)否否是订餐27foods_one3varchar(50)否否是订餐38foods_one4varchar(50)否否是订餐49foods_one5Int否否是订餐57网友投票信息表t_toupiao),通过投票的方式得知用户是如何评价每一种食物的,该表记录了投票的名称和投票的日期。 表4-7 网友投票信息表序号列名数据类型标识主键允许空说明1toupiao_idInt是是否投票编号2toupiao_namevarchar(50)否否是投票名称3toupiao_datevarchar(5000)否否是投票日期8用户信息表(t_user),用来记录用户名、密码、用户类型、用户的真实姓名及用户的地址、性别、用户的联系方式、邮箱和QQ。 表4-8 用户信息表 序号列名数据类型标识主键允许空说明1user_idInt是是否用户编号2user_namevarchar(50)否否是用户名3user_pwvarchar(5000)否否是用户密码4user_typeInt否否是用户类型5user_realnamevarchar(50)否否是用户真实姓名6user_addressvarchar(50)否否是用户住址7user_sexvarchar(50)否否是性别8user_telvarchar(50)否否是用户联系方式9user_emailvarchar(50)否否是用户邮箱10user_qqvarchar(50)否否是用户QQ五、系统功能的具体实现(一)网站首页在食物资源管理网站首页可查看发布的订餐资讯、发布的食物公告信息、可按关键字查询食物信息、可进行投票调查等功能,用户登录之后即可进入网站首页,首页如下图5-1所示:图5-1网站首页图主要代码如下:package food.test.zqz.util;import java.io.InputStream;import .HttpURLConnection;import .URL;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.message.BasicNameValuePair;import tocol.HTTP;import org.apache.http.util.EntityUtils;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.util.Log;import android.widget.ImageView;import food.test.domain.Food;/* * * author zhuqiuzhu 从服务器获取有关主界面的所有数据 * */public class GetNetWorkData /菜品图片资源定位符public final static String URL = :8080/DestineFoodServer/images;public final static String URL_AllFood = :8080/DestineFoodServer/GetAllFoodServlet;/* * * param url * 服务器端的URI地址 * param params * 发给服务端的请求参数,以键值对的形式封装名字和对应的值, * * 其中params的名字键位应该跟服务端保持一致 * * return */public final static StringBuffer getConnectionPost(String url,HashMap params) StringBuffer sb = new StringBuffer();HttpPost request = null;HttpResponse response = null;try if (url != null) /*-请求-*/request = new HttpPost(url);List list = new ArrayList();for (Map.Entry entry : params.entrySet() String name = entry.getKey();String value = entry.getKey();list.add(new BasicNameValuePair(name, value);request.setEntity(new UrlEncodedFormEntity(list, HTTP.UTF_8);/*-响应-*/response = new DefaultHttpClient().execute(request);if (response.getStatusLine().getStatusCode() = 200) String temp = EntityUtils.toString(response.getEntity();if (temp.trim().length() 0) sb.append(temp); else sb.append(error response data length); else sb.append(error response code:).append(response.getStatusLine().getStatusCode(); else / url为空return null; catch (Exception e) e.printStackTrace();return sb;/ end of getConnectionPost()/* * * 对服务器端的响应数据进行“解码” * * 解码规则:约定服务器端传送的数据为字符串类型,格式为 * name=value;name=value;.,name=value;., * 注意=两端无空格,必须以开头,以结束 * * * param sb * 服务器端的响应数据 * return 一个以键值对形式存储的服务端响应数据 */public final static ArrayList decodeResponseData(String sb) ArrayList resData = new ArrayList();String itemStr = ;String name = ;String value = ;Food food;do int a = sb.indexOf(,);if (a = -1) itemStr = sb;/ decode(resData,initResponse);food = new Food();/ 一个while语句对应一个Food对象,等等还要重构while (true) int n_last = itemStr.indexOf(=);name = itemStr.substring(1, n_last);System.out.println(name);int v_first = itemStr.indexOf(=);itemStr = itemStr.substring(v_first);int v_last = itemStr.indexOf(;);if (v_last = -1) v_last = itemStr.indexOf();value = itemStr.substring(1, v_last);System.out.println(value);if (name.equals(foodId) & name != null) food.foodId = Integer.parseInt(value); else if (name.equals(foodPrice) & name != null) food.foodPrice = Float.parseFloat(value); else if (name.equals(foodType) & name != null) food.foodType = Integer.parseInt(value); else if (name.equals(foodDescri) & name != null) food.foodDescri = value; else if (name.equals(foodImage) & name != null) food.foodImage = value; else if (name.equals(foodName) & name != null) food.foodName = value; else Log.e(-, error params);itemStr = itemStr.substring(v_last);if (itemStr.trim().startsWith()| itemStr.trim().length() = 2) break;/ end of whileresData.add(food);break;itemStr = sb.substring(0, a );/ decode(resData,itemStr);food = new Food();while (true) int n_last = itemStr.indexOf(=);name = itemStr.substring(1, n_last);System.out.println(name);int v_first = itemStr.indexOf(=);itemStr = itemStr.substring(v_first);int v_last = itemStr.indexOf(;);if (v_last = -1) v_last = itemStr.indexOf();value = itemStr.substring(1, v_last);System.out.println(value);Log.e(name + name, value + value);if (name.equals(foodId) & name != null) food.foodId = Integer.parseInt(value); else if (name.trim().equals(foodPrice) & name != null) Log.e(GetNet test, - + name);food.foodPrice = Float.parseFloat(value); else if (name.equals(foodType) & name != null) Log.e(GetNet test, - + value);food.foodType = Integer.parseInt(value); else if (name.equals(foodDescri) & name != null) food.foodDescri = value; else if (name.equals(foodImage) & name != null) food.foodImage = value; else if (name.equals(foodName) & name != null) Log.e(GetNet test, - + value);food.foodName = value; else Log.e(-, error params);itemStr = itemStr.substring(v_last);if (itemStr.trim().startsWith()| itemStr.trim().length() = 2) break;/ end of whileresData.add(food);sb = sb.substring(a + 1); while (true);return resData;/ end of decodeResponseData()/* * 对图片的接收还要等等 */public static ArrayList decode(ArrayList resData, String itemStr) String name = ;String value = ;Food food = new Food();while (true) int n_last = itemStr.indexOf(=);name = itemStr.substring(1, n_last);System.out.println(name);int v_first = itemStr.indexOf(=);itemStr = itemStr.substring(v_first);int v_last = itemStr.indexOf(;);if (v_last = -1) v_last = itemStr.indexOf();value = itemStr.substring(1, v_last);System.out.println(value);itemStr = itemStr.substring(v_last);if (itemStr.trim().startsWith() | itemStr.trim().length() = 2) break;if (name.equals(foodId) & name != null) food.foodId = Integer.parseInt(value); else if (name.equals(foodPrice) & name != null) food.foodPrice = Float.parseFloat(value); else if (name.equals(foodType) & name != null) food.foodType = Integer.parseInt(value); else if (name.equals(foodDescri) & name != null) food.foodDescri = value; else if (name.equals(foodImage) & name != null) food.foodImage = value; else if (name.equals(foodName) & name != null) food.foodName = value; else Log.e(-, error params);resData.add(food);food = new Food();/ end of whilereturn resData;/ end of decode()/*/ * / * 根据所传参数设定订餐的所有菜品的图片/ * / * param allImageInfo/ * 封装了所有要显示的图片信息url+foodImageView / * url即对应服务器端资源地址(对于本方法资源即图片,同下), 可由link# setFoodBitmapUrl()/ * 设定。/ * foodImageView订餐系统界面的UI元素/ */public static void setFoodBitMap(/ArrayListHashMap allImageInfo) / 网络协议中的URL对象/URL imageUrl = null;/ 管理HTTP连接/HttpURLConnection conn = null;/try /if (url != null) /imageUrl = new URL(url);/ 根据URL打开一个可以双向通信的连接/conn = (HttpURLConnection) imageUrl.openConnection();/ 设置连接可以输入/conn.setDoInput(true);/ 根据之前配置建立连接,建立后不能再设配置/conn.connect();/ 获取指定URL资源/InputStream in = conn.getInputStream();/Bitmap bitmap = BitmapFactory.decodeStream(in);/if (foodImageView != null) /foodImageView.setImageBitmap(bitmap);/ else /Log.e(url-, 为空);/ catch (Exception e) /e.printStackTrace();/ end of setFoodBitMapByType()/* * * param foodType * 菜品类型 * param location * 对应资源的位置 * param foods * 服务端所有的菜品信息 对应的资源名称,详细设定见link food.test.domain.Food类 * return 对应菜品类型所有资源的URL的字符串 */public static ArrayList getAllFoodBitmapUrl(int foodType, String location,ArrayList foods) / 存储所有指定菜品的定位字符串ArrayList urls = new ArrayList();while (foods.iterator().hasNext() / 若该菜品属于指定foodType类型if (foodType = foods.iterator().next().foodType) / 暂时存一个URLString url = ;if (location.endsWith(/) url = location + foods.iterator().next().foodImage; else url = location + / + foods.iterator().next().foodImage;urls.add(url);/ end of ifreturn urls;/ end of getAllFoodBitmapUrl()/* * 获取指定资源的具体位置 * param location 资源集的URL * param foodImage 服务端某个的菜品信息 对应的资源名称,详细设定见link food.test.domain.Food类 * return */public static String getAssignedFoodBitmapUrl(String location,String foodImage)String url = ;if (location.endsWith(/) url = location + foodImage; else url = location + / + foodImage;return url;/ end of getAssignedFoodBitmapUrl()/* * * param url 对应服务器端资源地址(对于本方法资源即图片,同下), 可由link# getAssignedFoodBitmapUrl() * 获取。 * param foodImageView foodImageView订餐系统界面的UI元素 */public static void setAssignedFoodBimapView(String url, ImageView foodImageView)/ 网络协议中的URL对象URL imageUrl = null;/ 管理HTTP连接HttpURLConnection conn = null;try if (url != null) imageUrl = new URL(url);/ 根据URL打开一个可以双向通信的连接conn = (HttpURLConnection) imageUrl.openConnection();/ 设置连接可以输入conn.setDoInput(true);/ 根据之前配置建立连接,建立后不能再设配置conn.connect();/ 获取指定URL资源InputStream in = conn.getInputStream();Bitmap bitmap = BitmapFactory.decodeStream(in);if (foodImageView != null) foodImageView.setImageBitmap(bitmap); else Log.e(url-, 为空); catch (Exception e) e.printStackTrace();finallyconn.disconnect();/ end of GetNetWorkData(二)食物查询可在网站上按关键词进行查询相关食物,食物查询如下图5-2所示:图5-2 食物查询主要代码如下:package food.test.hyl;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.List;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.message.BasicNameValuePair;import tocol.HTTP;import food.test.R;import food.test.util.DButil;import food.test.wjf.ShopCart;import food.test.wjf.ShopCartShowAll;import android.app.Activity;import android.app.AlertDialog;import android.app.Dialog;import android.content.DialogInterface;import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class OrderListActivity extends Activity private DButil db;private TextView tvname_show;/客户的名字显示private TextView tvid_show;/客户的Id显示private EditText etaddress;/客户的地址private EditText ete_mail;/客户的Emailprivate EditText ettelephone;/客户的电话号码private EditT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新品推广合同
- 工程私人协议合同范本
- 建材购货合同范本简易
- 小产权借款合同范本
- 社区医院劳务合同范本
- 潍坊劳务用工合同范本
- 网页制作定制合同范本
- 影楼员工入股合同范本
- 统借统还借款合同范本
- 矿山资质转让合同范本
- 2024年云南省临沧市遴选公务员笔试真题及解析
- 教育机构运营管理流程手册
- 运用PDCA循环管理提高手卫生依从性
- 金属非金属露天矿山及尾矿库重大事故隐患判定标准解读
- 应征公民政治考核表(含各种附表)
- 跨文化沟通障碍原因分析及解决方法
- 福建省泉州市五中七中等七校联合2022-2023学年八年级上学期期末教学质量检测数学试题
- 2022室外排水设施设计与施工-钢筋混凝土化粪池22S702
- 2022版义务教育(道德与法治)课程标准(附课标解读)
- 《礼仪与修养》01 目录
- 解读性激素六项培训课件
评论
0/150
提交评论