Android实训杨超杰26文档格式.docx

上传人:b****6 文档编号:21588532 上传时间:2023-01-31 格式:DOCX 页数:63 大小:389.94KB
下载 相关 举报
Android实训杨超杰26文档格式.docx_第1页
第1页 / 共63页
Android实训杨超杰26文档格式.docx_第2页
第2页 / 共63页
Android实训杨超杰26文档格式.docx_第3页
第3页 / 共63页
Android实训杨超杰26文档格式.docx_第4页
第4页 / 共63页
Android实训杨超杰26文档格式.docx_第5页
第5页 / 共63页
点击查看更多>>
下载资源
资源描述

Android实训杨超杰26文档格式.docx

《Android实训杨超杰26文档格式.docx》由会员分享,可在线阅读,更多相关《Android实训杨超杰26文档格式.docx(63页珍藏版)》请在冰豆网上搜索。

Android实训杨超杰26文档格式.docx

它不仅可以有效地提高餐饮业的工作效率,更可以规模服务体系,提高整体服务质量和管理水平,并为规模化经营提供了坚实的技术基础。

2功能模块的设计

2.1客户端

客户端主要有以下几个模块构成:

登陆、点餐、更新、结账等功能。

结构图:

2.2数据库

客户端采用SQLite数据库,服务器采用MySQL数据库,并提供了客户端数据和服务器端数据和服务器端数据的同步功能,提高了程序的运行效率。

创建了6张表分别是:

系统用户表(UserTbl)、菜谱分类表(MenuTypeTbl)、餐桌表(TableTbl)、菜谱表(MenuTbl)、订单表(OrderTbl)、订单明细表。

系统用户表:

登陆系统使用。

菜谱分类表:

方便点餐,将菜单信息进行分类,如热菜、凉菜等。

餐桌表:

用来表示顾客在哪个桌位就坐。

菜谱表:

菜谱表用来保存菜信息,如分类、名称和价格等。

订单表:

当顾客开桌点菜时生成的信息,保存到该表。

订单明细表:

订单明细表和上面的订单表是一对多的关系,即一桌客人点了多份菜。

3主要任务

无线点餐系统的登陆、点餐模块的客户端与服务器端和程序主菜单的实现部分。

4模块操作

4.1登陆模块客户端实现

1.创建一个Android工程,名为“WirelessOrder_Client”。

2.在res\layout目录下,创建“login_system.xml”的布局文件,

布局文件外层使用LinearLayout布局,内嵌TableLayout完成布局管理。

布局文件引用一个图片资源来显示背景图片、俩个TextView用来显示用户名称和密码、两个EditText用来输入用户名和密码、两个Button用来登陆和取消系统。

代码均见附录!

3.创建名为“LoginActivity”的Acivity,在类的顶部声明所用的EditText和Button组件,在onCreate()方法中调用setContenView(R.layout.login_system)方法设置布局视图。

通过findViewById()方法实例化EditText和Button对象。

4.定义一个工具类HttpUtil来获得HttpRequest对象和HttpResponse对象,以及发送get和post请求获得返回response信息的方法。

5.定义一个显示提示信息的对话框方法,用来显示提示信息。

6.定义validate()方法,对用户名称和密码进行非空验证。

7.定义一个query()方法,通过用户名称和密码尽心查询,发送Post请求,获得响应结果。

8.定义login()方法,该方法调用query()方法,获得查询结果,并将查询结果通过SharedPrerences保存到XML配置文件,以便在后面程序的点餐中使用用户信息。

Login()方法调用saveUserMsg()方法将用户信息保存到配置文件。

9.为登录按钮添加单击监听器,在onClick()方法中,首先调用calidate()方法进行验证,如果验证通过再调用login()方法,如果登录成功,系统进入主菜单界面,否则提示登录失败信息。

如果验证失败则提示失败信息,请求用户重新输入。

10.为取消按钮添加单击监听器,在onClick()方法中调用finish()方法结束该Activity。

运行结果如图:

4.2登录模块服务器端实现

1.创建一个名为“WirelessOrder_server”的Web工程。

2.创建程序需要的包结构。

dao包用于放置采用DAO设计模式实现的访问数据库接口及其实现类;

entity包用于放置对应数据库表的实体类;

servlet包用于放置Servlet类;

filter包用于放置过滤器;

util包是工具类。

3.程序要访问MySQL数据库,所以要添加MySQL驱动包“mysql-connector-java-5.0.3-bin.jar”。

将该jar文件添加到工程的classpath下。

4.创建访问数据库的工具类DBUtil,该类的主要功能是打开和关闭数据库连接。

将配置信息保存到配置文件中,这样可以在不修改程序的前提下移植数据库。

5.创建用于封装UserTbl表信息的实体类User类。

6.创建访问数据库的DAO接口类UserDao。

7.创建UserDao接口实现类UserDaoImpl。

8.创建LoginServlet类响应请求。

该类通过request.getParameter()方法获得请求参数,调用UserDaoImpl的login()方法,并根据登陆结果返回响应结果信息。

4.3程序主菜单实现

1.在工程的res\layout\目录下创建一个布局文件,该布局文件外层是LinearLayout,使用一个图片资源充当背景色,内层是一个GridView。

2.创建“MainMenuActivity”的Acivity,在onCreate()方法中设置Acivity界面标题和布局,实例化GridView组件,为GridView绑定Adapter。

3.定义一个名称为“ImageAdapter”的类,该类集成BaseAdapter,为GridView设置Adapter。

4.定义一个单击监听器,打开点餐界面。

4.4点餐功能客户端实现

1.在工程的res\layout\目录下创建一个名称为“order.xml”的布局文件,该文件外层使用LinearLayout布局,内层嵌套TableLayout。

TableLayout中有三行:

第一行TextView和一个Spinner,提示操作员选择课桌号;

第二行TextView和EditText,要求永华输入人数;

第三行3个Button,分别是开桌,点菜和下单,TableLayout下面有一个ListView用来显示客户点菜列表。

2.创建“OrderAcivity”的Activity,该Activity集成Acitivity,在OderActivity顶部声明使用到的实例,在OnCreate方法中初始化之。

3.开桌功能,要求操作员选择桌号并输入人数,并将这些信息保存到服务器端MySQL数据库中的OrderTbl表中。

这里需要为桌号下拉列表Spinner绑定数据,为开桌按钮添加监听器,实现具体操作。

4.点菜功能。

单击点菜按钮,弹出点菜对话框,要求输入点菜信息。

定义一个View视图,添加到对话框,并且自定义视图中有一个Spinner引用菜单列表数据。

在res\layout\目录下创建“order_detail.xml”的布局文件,外层是LinearLayout,内层嵌套TableLayout。

程序运行结果如图:

4.5点餐功能服务器端实现

1.在“WirelessOrder_Server”工程的“com.amaker.entity”包中创建一个实体类Order,该类封装了数据中OrderTbl表的信息,以面向对象的方法来操作该表。

2.在该包中创建实体类OrderDetail,该类封装了数据库中QueryOrderDetail表的信息,以面向对象的方法来操作该表。

3.在“com.amaker.dao”包中创建一个OrderDao接口,有四个方法,分别用来保存订单信息Order、保存订单详细信息OrderDetail、更新桌号状态为有人和更新桌号状态为空位。

4.在“com.amaker.dao.impl”包中创建OrderDaoImpl的实现类实现OrderDao接口里定义的方法。

5.在“com.amaker.servlet”包中创建一个名称“StarTableServlet”的Servlet,响应客户端请求,调用后台数据,保存数据,更新餐桌状态。

login_system.xml

<

?

xmlversion="

1.0"

encoding="

utf-8"

>

LinearLayoutxmlns:

android="

android:

orientation="

vertical"

layout_width="

fill_parent"

layout_height="

background="

@drawable/login"

>

<

TableLayout

stretchColumns="

1"

<

TableRow>

<

TextViewandroid:

text="

"

/>

/TableRow>

<

TextView

android:

用户名称:

id="

@+id/TextView"

wrap_content"

textColor="

#0000ff"

/>

EditText

@+id/userEditText"

/>

用户密码:

@+id/pwdEditText"

password="

true"

TableRow

gravity="

right"

Button

android:

取消"

@+id/cancelButton"

登陆"

@+id/loginButton"

/TableLayout>

/LinearLayout>

LoginActivity

packagecom.amaker.wlo;

importandroid.app.Activity;

importandroid.app.AlertDialog;

importandroid.content.DialogInterface;

importandroid.content.Intent;

importandroid.content.SharedPreferences;

importandroid.os.Bundle;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.widget.Button;

importandroid.widget.EditText;

importandroid.widget.Toast;

importcom.amaker.util.HttpUtil;

publicclassLoginActivityextendsActivity{

//声明登录、取消按钮

privateButtoncancelBtn,loginBtn;

//声明用户名、密码输入框

privateEditTextuserEditText,pwdEditText;

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

//设置标题

setTitle("

掌中宝无线订餐系统-用户登录"

);

//设置当前Activity界面布局

setContentView(R.layout.login_system);

//通过findViewById方法实例化组件

cancelBtn=(Button)findViewById(R.id.cancelButton);

loginBtn=(Button)findViewById(R.id.loginButton);

userEditText=(EditText)findViewById(R.id.userEditText);

pwdEditText=(EditText)findViewById(R.id.pwdEditText);

cancelBtn.setOnClickListener(newOnClickListener(){

@Override

publicvoidonClick(Viewv){

finish();

}

});

loginBtn.setOnClickListener(newOnClickListener(){

if(validate()){

if(login()){

Intentintent=newIntent(LoginActivity.this,MainMenuActivity.class);

startActivity(intent);

}else{

showDialog("

用户名称或者密码错误,请重新输入!

}

}

}

//登录方法

privatebooleanlogin(){

//获得用户名称

Stringusername=userEditText.getText().toString();

//获得密码

Stringpwd=pwdEditText.getText().toString();

//获得登录结果

Stringresult=query(username,pwd);

if(result!

=null&

&

result.equals("

0"

)){

returnfalse;

}else{

saveUserMsg(result);

returntrue;

}

//将用户信息保存到配置文件

privatevoidsaveUserMsg(Stringmsg){

//用户编号

Stringid="

;

//用户名称

Stringname="

//获得信息数组

String[]msgs=msg.split("

intidx=msgs[0].indexOf("

="

id=msgs[0].substring(idx+1);

idx=msgs[1].indexOf("

name=msgs[1].substring(idx+1);

//共享信息

SharedPreferencespre=getSharedPreferences("

user_msg"

MODE_WORLD_WRITEABLE);

SharedPreferences.Editoreditor=pre.edit();

editor.putString("

id"

id);

name"

name);

mit();

//验证方法

privatebooleanvalidate(){

if(username.equals("

showDialog("

用户名称是必填项!

if(pwd.equals("

用户密码是必填项!

returntrue;

privatevoidshowDialog(Stringmsg){

AlertDialog.Builderbuilder=newAlertDialog.Builder(this);

builder.setMessage(msg)

.setCancelable(false)

.setPositiveButton("

确定"

newDialogInterface.OnClickListener(){

publicvoidonClick(DialogInterfacedialog,intid){

AlertDialogalert=builder.create();

alert.show();

//根据用户名称密码查询

privateStringquery(Stringaccount,Stringpassword){

//查询参数

StringqueryString="

account="

+account+"

+password;

//url

Stringurl=HttpUtil.BASE_URL+"

servlet/LoginServlet?

+queryString;

//查询返回结果

returnHttpUtil.queryStringForPost(url);

}

HttpUtil

packagecom.amaker.util;

importjava.io.IOException;

importorg.apache.http.HttpResponse;

importorg.apache.http.client.ClientProtocolException;

importorg.apache.http.client.methods.HttpGet;

importorg.apache.http.client.methods.HttpPost;

importorg.apache.http.impl.client.DefaultHttpClient;

importorg.apache.http.util.EntityUtils;

publicclassHttpUtil{

//基础URL

publicstaticfinalStringBASE_URL="

http:

//192.168.0.1:

8888/WirelessOrder_Server/"

//获得Get请求对象request

publicstaticHttpGetgetHttpGet(Stringurl){

HttpGetrequest=newHttpGet(url);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1