从零开始学习Android(二)从架构开始说起
我们刚开始学新东西的时候,往往希望能从一个实例进行入手学习。接下来的系列连载文章也主要是围绕这个实例进行。这个实例原形是从电子书《Android应用开发详解》得到的,我们在这里对其进行详细的解释,并对Android的一些基础知识穿插进去,并对该例子进行一些新的扩充。
本节说阐述的很多内容可能与Android相关性并不大,但是本节确实之后的基础,也是想从一个系统架构方面来体现Anroid在一个系统之后所担当的职责。在我现在的理解之中,Android在一系统之中,其承担的职责是前端的展示以及一些逻辑的简单处理,就好比是一个浏览器,包括IOS所负责的也是前端内容的展示。(当然,如果你所做的是无关互联网的APP,如本地Anroid一些游戏的开发则另当别论)。
一.需求分析
该例子是一个无线点餐系统。简单来分析一些该系统的需求分析。在一个大的餐馆当中,面对很多的顾客,为了方便顾客点餐,提升饭店的效率,需一个无限终端实现对顾客的点餐。也就是说由一个无线客户端负责对点餐,还需有一个PC用来进行结账以及打印工作。
二.技术选型
下面具体来看我们的技术选型。
无线客户端我们使用Android客户端,网络通信部分我们使用Apache Http协议客户端,中间Web服务器采用Servlet响应客户端请求。后台数据库采用JDBC访问数据库,数据库我们采用MySql,部分存储我们使用本地的SqlLite数据库(这里涉及到MySql与SqlLite的数据同步问题),结账以及打印功能我们采取WPF去做。
看了以上这些技术,你可能会感觉有点晕,但是实现起来并没有我们想象的那么困难,之后的文章会对各个技术进行详细阐述。
三.系统功能
首先我们来看Android客户端所需实现的功能。
1.系统的登陆功能
每个系统都会有一个入口,即登陆。通过登陆可以进入系统的主菜单,转而使用其他功能。
2.点餐功能
该功能也是我们系统之中的核心功能。该功能有操作员来完成,通过输入顾客的点餐信息,通过无线网络将数据保存到系统后台的服务器当中,进而在厨房的终端进行显示。该功能主要包括三个部分:开桌,点菜和下单。
3.查台功能
即当顾客进行点餐的时候,需要首先查询有哪些桌子是空的,才可安排顾客进行就餐。
4.更新功能
为了提高程序的运行效率。我们需要将部分数据保存的手机本地的SqlLite数据库中,在此系统之中,我们需要将菜单以及桌子号码的数据保存到SqlLite数据库当中,因此当后台数据库更新菜单以及桌号时,我们自然也需要将该数据同步更新到本地SqlLite数据库当中。
5.转台功能
转台功能是指当顾客下单之后,又要求更换座位,我们这时需要将已经保存到数据库中的数据进行更新。(说白了,就是对订单的修改)
6.并台功能
并台功能是指将已经下单的两组顾客合并到同一桌子上。该功能也需要修改已经提交给服务器数据。
我们再来看看PC客户端所要实现的功能。
1.登陆功能
PC客户端的登陆。
2.结账功能
当顾客付完钱后,实现对订单的结账。
3.打印功能
对订单的打印。
4.对服务员的增删改查。
即如果餐馆新增一名服务员,则需要新添加一个新的账号,给服务员使用。
四.系统的详细设计
1.数据库的设计
Anroid客户端下的系统架构如下。
1.系统包资源的规划(就相当于我们在VS下,一个解决方案由哪些类库组成)
本系统的主要功能可以分为三类:一是访问客户端SqlLite的数据库;二是Activity界面展示;三是通过网络访问服务器数据。
表1 系统包说明
包名称 包描述 com.golook.provider 访问本地SqlLite数据库的Provider com.golook.util 工具类包 com.golook.wlo Activity包
对于PC客户端的设计,因为使用到的是.Net技术,相信大家都很熟悉,在之后的文章中会提及,这里就不再累述。
2.数据库的设计
之前我们提过,数据库的设计架构是服务端采用MySql数据库(我自己搭建的数据库是MySql5.7),Android客户端的数据库采用的是自身的SqlLite数据库。两个数据库之间存在着数据库的更新,而使其可以保持一致。下来我们具体来看看是如何设计表。
1.系统用户表(usertbl),登陆系统使用
Field Name Fielt Type Size Comment id Integer 主键,自动增长 account Varchar 登陆账号 password Varchar 登陆密码 name Varchar 姓名 gender Varchar 性别 permission Integer 权限 1-管理员 2-收银员 3-服务员 remark Varchar 备注
2.菜谱分类表(menutypetbl)。将菜单信息分类,如热菜,凉菜,海鲜等等。
Field Name Fielt Type Size Comment id Integer 主键,自动增长 name Varchar 类型名称
3.菜谱表(menutbl),用来保存菜的基本信息。
Field Name Fielt Type Size Comment id Integer 主键,自增长 typeId Integer 外键,引用外键,引用菜谱分类表Id name Varchar 名称 price Integer 价格 pic Varchar 图片路径 remark Varchar 备注
4.餐桌表(tabletbl)。用来表示顾客在哪个座位就餐。
Field Name Fielt Type Size Comment id Integer 主键,自增长 num Integer 桌号 flag Integer 餐桌状态 0-空桌子 1-有人就餐 description Varchar 描述 5.订单表(OrderTbl)。
Field Name Fielt Type Size Comment id Integer 主键,自增长 orderTime Varchar 下单时间 userId Interger 下单用户,外键-系统用户表Id tableId Integer 桌号,外键-桌号的Id personNum Integer 人数 isPay Integer 是否结算 0-未结算 1-结算 remark Varchar 备注
6.订单明细表(OrderDetailTbl),与订单表是一对多的关系。
Field Name Fielt Type Size Comment id Integer 主键,自增长 orderId Interger 外键,参照订单Id menuId Integer 外键,参照菜谱Id num Integer 数量 remark Integer 备注
这是数据库的大概设计,在文末我会把MySql的数据库脚本放置出来,供大家下载。
下节会从Android的界面讲起,直到能完成登陆功能。
该无限点餐系统数据库Sql脚本。点击此处下载
从零开始学习Android(二)从架构开始说起的更多相关文章
- 从零开始学习jQuery (二) 万能的选择器
本系列文章导航 从零开始学习jQuery (二) 万能的选择器 一.摘要 本章讲解jQuery最重要的选择器部分的知识. 有了jQuery的选择器我们几乎可以获取页面上任意的一个或一组对象, 可以明显 ...
- 从零开始学习Android(一)Android环境的搭建
好久没有开始写博客了,最近开始学习Android,所以想把学习的笔记都一一记录下来.一来是方便自己以后资料的查询,其次也是给Android新手朋友进行学习使用,再次也希 望得到高手的指点.废话少说,我 ...
- oracle从零开始学习笔记 二
多表查询 等值连接(Equijoin) select ename,empno,sal,emp.deptno from emp,dept where dept.deptno=emp.deptno; 非等 ...
- 从零开始学习Vue(二)
思维方式的变化 WebForm时代, Aspx.cs 取得数据,绑定到前台的Repeater之类的控件.重新渲染整个HTML页面.就是整个页面不断的刷新;后来微软打了个补丁,推出了AJAX控件,比如U ...
- 从零开始学习jQuery(转)
本系列文章导航 从零开始学习jQuery (一) 开天辟地入门篇 从零开始学习jQuery (二) 万能的选择器 从零开始学习jQuery (三) 管理jQuery包装集 从零开始学习jQuery ( ...
- 从零开始学习jQuery
转自:http://www.cnblogs.com/zhangziqiu/archive/2009/04/30/jQuery-Learn-1.html 本系列文章导航 从零开始学习jQuery (一) ...
- android学习——android架构
android架构:在了解全局的情况下进行细致化的分析才能更有效的学习android的运行原理,才能更深刻的理解android开发: 1.架构图直观 2.架构详解 2.1.Linux Kernel 2 ...
- 从零开始学习 asp.net core 2.1 web api 后端api基础框架(二)-创建项目
原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(二)-创建项目 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...
- Android Animation学习(二) ApiDemos解析:基本Animators使用
Android Animation学习(二) ApiDemos解析:基本Animatiors使用 Animator类提供了创建动画的基本结构,但是一般使用的是它的子类: ValueAnimator.O ...
随机推荐
- ssl双向认证和单向认证原理
有朋友在搞一个项目,周末有聊到一些安全性的东西,很自然会想起https,但https究竟如何实施,其原理又是什么? 基于ssl,一般的应用都是单向认证,如果应用场景要求对客户来源做验证也可以实现成双向 ...
- BitTorrent DHT 协议中文翻译
前言 做了一个磁力链接和BT种子的搜索引擎 {Magnet & Torrent},因此把 DHT 协议重新看了一遍. BitTorrent 使用"分布式哈希表"(DHT)来 ...
- 远程连接服务器for Linux
远程连接Linux云服务器-命令行模式 1.远程连接工具.目前Linux远程连接工具有很多种,您可以选择顺手的工具使用.下面使用的是名为Putty的Linux远程连接工具.该工具是免费的,且不需要安装 ...
- Another MySQL daemon already running with the same unix socket的解决
问题出现: 每周一需要备份一次数据库,即从服务器MySQL导出sql文件,再导入到我机器上虚拟机的MySQL里.但是今天早上连不上,我进入控制台用#service mysqld start强行启动,报 ...
- shell常用命令归类整理
shell 命令整理 bash shell 含有许多功能,因此有许多可用的命令:本文档仅罗列了一些常用命令及其使用频率较高的参数.#本文档仅罗列了一些常用命令及其使用频率较高的参数.#vers ...
- C#读取Excel表格数据到DataGridView中和导出DataGridView中的数据到Excel
其实想在datagridview中显示excel表格中的数据跟读取数据库中的数据没什么差别,只不过是创建数据库连接的时候连接字段稍有差别. private void btnShow_Click(obj ...
- Nodes “-1” are listed in ADOP_VALID_NODES table but not in FND_NODES table
While trying to apply patches to upgrade to 12.2.4, adop failed due to the below errors. Validating ...
- FORTRAN 90标准函数(一) (转)
符号约定: l I代表整型;R代表实型;C代表复型;CH代表字符型;S代表字符串;L代表逻辑型;A代表数组;P代表指针;T代表派生类型;AT为任意类型. l s:P表示s类型为P类型(任意kind ...
- com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command ' finished with non-zero exit value 1
Error:Execution failed for task ':lenovoAlbum:processReleaseResources'. > com.android.ide.common. ...
- 闭包内的微观世界和js垃圾回收机制
一.什么是闭包? 官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.相信很少有人能直接看懂这句话,因为他描述的太学术.其实这句话 ...