1、 题目 : 点餐系统的设计与实现 学 号 2015122103498 姓 名: 巩金明( 40%) 专 业: 15 信管 一班 负责内容:大部分代码编写(含关键部分) 学 号 2015122103523 姓 名:楼轩宇 ( 30%) 专 业: 15信管 一班 负责内容:需求分析以及总体设计 学 号 2015122103539 姓 名: 郭新波( 30%) 专 业: 15 信管 一班 负责内容:详细设计以及小部分代码编写 论文完成日期:二 一七 年六月 四日 1、 系统需求分析 客户端功能需求分析: 登录、注册:使用者想要运行系统必须登录 ,如果未申请账号能够通过注册模块申请 ; 菜谱查询:查询
2、目前餐厅店菜单列表数据 ; 详情查询:可以查询一个菜的全部数据 ,有价格、介绍和数量 ; 在线点餐:支持用户在线下单点餐 ; 选择座位:支持使用者在 Android 手机上选座位 ; 我的订单:支持使能够查看自己已经下单的数据,能够删掉自己的订单 ; 人工服务:客户端可以呼叫服务员 ; 服务端功能分析: 登录模块:管理员登录使用系统 ; 菜谱管理:管理员能够查看当前界面的数据 ,能够添加、 修改或者删除一个菜谱数据 ; 用户管理:管理员能够查看到当前系统已经存在的用户信息 ,能够删掉一个用户信息 ; 原材料管理:管理员可以查看当前系统的原材料信息 ,可以添加、修改或者删除一个原材料信息 ,原材
3、料库存较低时会警报 ; 订单管理:管理员可以查看到当前的所有订单信息 ,可以修改订单状态 ,例如把一个进行中的订单修改为已经完成 ; 具体的系统 功能 全部作用如 下图 : 2、目标 可行性分析 智能手机的出现减少了很多方面的限制,具有很多优势,人们可以随时随地的传递信息,订购商品,不论时间不论地点,正是这个优点使得智能手机能 够受到越来越多人是喜爱,比如,用户智能手机点餐速度迅速比传统的点餐要快的多,大大提高了效率。 1.经济可行性 由于世界经济水平的突飞猛进,科技水平得到了前所未有的巨大发展,社会正步入一个崭新的网路信息时期。因为社会持续发展的生活与工作水平,人们的非物质需求正在逐渐增加,
4、伴随出现的就是网络技术的持续进步,当代社会网络应用变得愈加广泛,人们之间的相互沟通日趋广泛、交流也愈加简便,所有这些,使得人们的生产生活方式发生了巨大转变。是故,由于网络技术的进步,电商领域逐渐发展,极大程度上改变了人们的购物方式。在如今这个 年代,几乎所有计算机使用者都能够进行网上购物的操作,而且往往乐此不疲。从长久的角度来想,安卓点餐系统的开发与应用还是存在很大的经济前景。 2.技术可行性 点餐系统 后台部分 前台部分 点餐 个人信息 我的订单 人工服务 登录注册 人工服务管理 菜谱管理 订单管理 用户信息管理 原材料管理 登录退出 技术可行性一般是因为现在已经存在的的技术因素而控制的,比
5、如,是否可以进行平稳的功能开发,软、硬件功能会不会达到系统所规定的条件。如今这个时代,是网络资源化的时代,网络资源爆发式增长,这引起了所有其他相关技术的进步,所以对于技术条件来说是能够实现的。本系统单个用 java 语言,使用 ssh 技术与 MySQL 数据库进行开发,上述技术在现在已经很广泛且很成熟,已经无 数次被应用于软件与系统研究中,所有,这个系统对科学水平来说是能够实现的。 3、 系统流程分析 为了使得完成的软件能够平稳运行,完善了系统流程的所有环节。对每个流程要用到的关键技术也做了充分准备 ,如下图: 4、 总体设计 4.1 系统设计原则 系统设计和系统编码是一个统一的整体,每一部
6、分都不可缺少。在系统设计中制定良好的编码规范和开发流程,能够确保无二义性,使得开发顺利进行,这也能提高开发这的开发效率。此外,在进行系统设计过程中,还应该遵循的主要原则如下。 1、适用性原则 好的系统开发出来首先要能够完成基本的功 能,即满足用户的要求,这是软件开发的首要目的。如果开发出来的软件不能满足用户的需求,那么此软件注定是失败的开发。在此基础上还要考虑软件的的操作性,要能保证软件在运行环境下没有 bug,能让用户操作起来简单,明了,还要功能全面易用化。不应该只考虑软件的收益,否则必将面临很大的问题。 2、可靠性安全性原则 随着计算机网络的发展,网络除了带人人们便利之外也带开了很多安全隐
7、患,如,隐私安全、个人财产安全等等,虽然此次开发的系统简单,但是安全问题是每个系统都必须考虑的问题。网上订餐系统中既要保护用户个人信息的安全,保证 不被泄露,还要保证他们的财产安全。只有具备安全措施的系统才能够让用户放心。 3、可扩展性原则 现在的科技发展速度之快,不仅是研发的快,更新换代的速度也令人惊讶,科技技术不断退陈旧新,因此,为了适应时代的发展速度,系统的可扩展能力也是开发过程中要考虑的事情。 那么如何提高系统的可扩展性呢 ?这里就充分体现了设计在开发中的重要作用。在软件设计的过程中,将网上订餐系统划分成不同的功能模块,并降低模块之间的耦合度来提高系统的扩展性。 4.2 系统设计目标
8、在系统开发之前要对系统进行需求分析,功能概括,难点解析等等的工 作,之后对于系统大概要完成什么目标,系统的界面和设计等问题的思考来满足用户的要求。系统设计过程中将系统分解为很多不同的小的系统 ,然后对分成的小的系统的功能、技术进行分析讨论,制定规定,在之后的开发中,先开发小的系统之后进行整合,逐步完成开发。 本系统是设计目标是建立一个基于 Android 技术的点餐系统,可以满足用户对手机订餐的需求。 根据需求分析还有自己的生活体会,在线点餐系统一定要有以下基本的要求。 ( 1)界面看着新颖活力、大方美观,吸引用户。 ( 2)具有易调试性和没有 bug 性。 ( 3)用户能够方便的查看 所有的
9、食品信息和单个用户的详细信息内容。 ( 4)具有操作方便、功能完善的管理功能。 4.3 系统总体结构设计 系统的总体结构设计是在软件开发之前必须要做好的一件基本工作,作为一个优秀的程序员不仅要有很强的编码能力,对于系统的总体结构的设计也要很精通。做好系统的总体结构设计会让系统开发顺利进行,做到事半功倍。 在此次系统的总体结构设计过程中,系统分为客户端和服务端,客户端是可以在安卓智能手机上使用的,服务端采用 Servlet 提供服务,持久化层采用MySQL,因为 MySQL 的安装和配置都适合小型的系统。在进行 系统的总体设计之后紧接着就是数据库的需求设计。 系统整体框架采用 C/S 模式,即客
10、户端 /服务器模式,其中客户端一方面与用户交互,提供良好的用户界面,另一方面与服务器端进行数据交换。服务器端向客户端提供数据。管理员可以对数据进行增,删,改,查等操作。 5、 系统详细设计与实现 5.1 登模块的实现 本系统使用前用户需要登录验证,在登录界面中 ,通过继承一个 Activity 来实现 ,界面上的控件用到了 EditText、 Button 和 CheckBox 等等组件 , EditText主要用来实现用户帐号和密码的输入。 登 录过程中用户需要输入账号与密码,并且经由登录按钮来表达登录意图 ,意图表达完成,系统会经由 HTTP 的过程将帐号与密码发送到服务器端验证,并返回服
11、务端的验证结果,如果验证正确那么提示使用者登录完成,然后自行转入主界面;如果错误,那么提示使用者登录失败。 该界面具有保存密码成功,假如使用者在登录时勾选了“保存密码”复选框,则下次再进入到本界面用户将不需要再次输入密码,而只需要点击登录按钮即可实现登录操作,记住密码的过程是通过 Android 平台提供的 SharedPreferences来实现的。 当然如果用户还没有登 录账号 ,则能够通过“注册”选项链接到用户注册界面,从而注册一个新号码 ; 具体的实现效果如图所示: 实现的核心代码如下 : loginActivity 的 doInBackground 的方法发起 url 请求,发送用户
12、名,密码 protected String doInBackground(String. params) String urlString = AppConstant.getUrl(getApplicationContext() + “ServletService?Action=login“; urlString += “ String json = httpHelper.HttpRequest(urlString); return json; loginActivity 的 onPostExecute 的方法 获取服务器返回 json,验证密码是否正确 loginActivity 的 dea
13、lLogin 是 当 密 码 验 证 成 功 后 跳转到DishesListActivity OnLineUser model = new OnLineUser(); /设置登陆成功的用户属性 model.setId(jsonObject.getInt(“id“); model.setLoginid(etLoginID.getText().toString(); model.setName(jsonObject.getString(“name“); application.setLoginUser(model); /弹出提示框 toastUtil.show(model.getName() +
14、“,登录成功 “); /跳转到登陆成功页面 intent = new Intent(LoginActivity.this, DishesListActivity.class); startActivity(intent); 5.2 菜谱模块的实现 用户成功登陆进入系统之后可以查看到当前系统所有菜谱信息,包括菜谱的图片、名称、单价和详细介绍信息 ,系统用了一个 ListView 组件来显示系统的菜谱信息 ,同时用户也可以通过界面 左上角的搜索按钮来搜索菜谱信息,用户点击一条信息之后可以查看一个菜谱的详细介绍。 具体的实现效果如图所示: 实现的核心代码如下: /请求获取列表数据的代码 Overri
15、de protected String doInBackground(String. params) String json = null; serverUrl = AppConstant.getUrl(getApplicationContext() + “ServletService?Action=getdisheslist BaseUtil.LogII(serverUrl); json = httpHelper.HttpRequest(serverUrl); return json; /解析列表数据,并设置适配器的代码 list = new ArrayList(); if (!TextUt
16、ils.isEmpty(result.trim() list = gson.fromJson(result, new TypeToken() .getType(); else toastUtil.show(“没有数据 “); adapter = new DishesAdapter(DishesListActivity.this, list); listview1.setAdapter(adapter); 点击 listview 中的一项,会跳转到详情页面,这其中会根据 id 去调用webservice 查询数据库获取到详情数据 /界面点击跳转的代码 listview1.setOnItemCli
17、ckListener(new OnItemClickListener() Override public void onItemClick(AdapterView parent, View view, int position, long id) intent = new Intent(DishesListActivity.this, GoodDetailActivity.class); intent.putExtra(“id“, list.get(position).getId(); startActivity(intent); ); menu 的实现,设置 menu 按键的弹出事件 pub
18、lic boolean onCreateOptionsMenu(Menu menu) super.onCreateOptionsMenu(menu); menu.add(0, 99, 0, “ 人工服务“).setIcon(R.drawable.icon_application); menu.add(0, 100, 0, “ 注销登录“).setIcon(R.drawable.icon_application); menu.add(0, 101, 0, “ 个人信息“).setIcon(R.drawable.icon_application); menu.add(0, 106, 0, “ 我的
19、订单“).setIcon(R.drawable.icon_application); menu.add(0, 102, 0, “ 退出“).setIcon(R.drawable.icon_application); return true; menu 选中触发的事件参考 onOptionsItemSelected 方法 选中 人工服务 按钮后,会执行 humanServices 方法 private void humanServices() final String arg = new String6; for (int i = 0; i arg.length; i+) argi = (i +
20、 1) + “号桌 “; new AlertDialog.Builder(this).setTitle(“ 选择 服 务 桌 号“).setItems(arg, new DialogInterface.OnClickListener() Override public void onClick(DialogInterface dialog, int which) new loadhumanServicesAsyncTask().execute(argwhich); ).show(); 分类按钮点击的代码处理,使用 AlertDialog 弹出框实现 tvTopTitleRight.setOnC
21、lickListener(new OnClickListener() Override public void onClick(View v) new AlertDialog.Builder(DishesListActivity.this).setTitle(“选择分类 “) .setSingleChoiceItems(s, curIndex, new DialogInterface.OnClickListener() Override public void onClick(DialogInterface dialog, int which) curIndex = which; dialog.dismiss(); shopid = listShop.get(curIndex).getId(); new loadAsyncTask().execute(); ).setNegativeButton(“ 取消 “, null).show(); ); 5.3 在线下单模块的实现 用户在餐厅菜谱列表当中点击一个 Item 可以进入到详细的介绍页面,该页面详细描述了所选择的的餐厅菜式信息,包括图片、介绍和价格等信息。 同时用户可以在该界面进行下单,下单前需要输入数量 ,然后点击“提交”按钮来提交订单 ; 具体的实现效果如图所示: