Android实训杨冰洁20文档格式.docx
《Android实训杨冰洁20文档格式.docx》由会员分享,可在线阅读,更多相关《Android实训杨冰洁20文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
![Android实训杨冰洁20文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/9/60ab8f15-94a6-46d0-916a-ae58d51be926/60ab8f15-94a6-46d0-916a-ae58d51be9261.gif)
五、并台模块Android客户端实现12
1.名称为union_table.xml的布局文件12
2.名称为unionTable()的方法13
3.调用unionTable方法15
六、并台模块服务器端实现15
1.名称为“UnionTableDao”的接口15
2.UnionTableDaoImpl类16
3.存储过程17
一、无线点餐系统需求分析
1.系统的背景分析和构建必要性
数字化餐饮管理系统是处于导入市场的阶段。
无线点餐系统管理软件供应商在餐饮行业市场满地找餐饮老板,希望出售自己产品。
而餐饮老板在这个信息化满天飞的时代,总要受到影响,也希望通过这种数字化管理软件使得自己经营的餐饮能更有效的得到管理,能更多的盈利。
基于Android平台开发无线订餐系统。
Android平台给我们提供了巨大的自由空间,再运用JAVA面向对象语言,是系统功能更加强大。
MySQL是一个杰出的数据库平台,具有功能强大,安全可靠等特点,可用于中小型联机事务处理、数据仓库及电子商务等。
首先,我们得确定使用这个系统的用户应该有顾客、厨师、管理员(包括收银员,只是其权限有限制)。
顾客和管理员应该是系统数据的起点,由他们做出相应的操作,然后系统进行处理;
厨师则为系统数据的终点,因为最终的任务分配情况是反映到厨师身上的。
整个系统的关键任务就是保证顾客所点菜品能够由厨师完成,系统保证能将做菜任务准确无误地传达给厨师。
(1)操作简单、界面友好:
完全控件式的页面布局,使得菜品,资讯,座位等信息的录入工作更简便,许多选项包括餐厅信息,桌位,包房信息等只需要点击鼠标就可以完成;
另外,跟踪出现的提示信息也让用户随时清楚自己的操作情况。
对常见的类似网站的管理的各个方面:
基本信息录入、浏览、删除、修改、搜索等方面都大体实现,顾客对菜品的预定及支付方式;
(2)即时可见:
对客户预定餐饮信息的处理(包括录入、删除)将立即在另一应用端及服务器的对应栏目显示出来,达到“即时点击、即时见效”的功能;
(3)系统运行应该快速、稳定、高效和可靠;
(4)在结构上应具有很好的可扩展性,便于将来的功能扩展和维护。
二、更新模块服务器端实现
更新模块服务器的实现主要是:
创建DAO查询数据列表;
创建Servlet,拼成XML格式数据输出,响应客户端请求。
具体步骤说明如下。
1.UpdateDao接口
在工程的“com.amaker.dao”包中定义一个UpdateDao接口,在该接口中声明两个方法,分别用来获得菜谱数据列表和桌位数据列表。
packagecom.amaker.dao;
importjava.util.List;
publicinterfaceUpdateDao{
//获得菜单列表
publicListgetMenuList();
//获得餐桌列表
publicListgetTableList();
}
2.UpdateDaoImpl类
在工程的“com.amaker.dao.impl”包中定义一个UpdateDaoImpl类实现UpdateDao接口中的方法。
packagecom.amaker.dao.impl;
importjava.sql.Connection;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.sql.Statement;
importjava.util.ArrayList;
importcom.amaker.dao.UpdateDao;
importcom.amaker.entity.Menu;
importcom.amaker.util.DBUtil;
publicclassUpdateDaoImplimplementsUpdateDao{
publicListgetMenuList(){
//查询SQL语句
Stringsql="
selectid,typeId,price,name,pic,remarkfromMenuTbl"
;
//数据库连接工具类
DBUtilutil=newDBUtil();
//获得连接
Connectionconn=util.openConnection();
try{
//获得预定义语句
Statementpstmt=conn.createStatement();
//执行查询
ResultSetrs=pstmt.executeQuery(sql);
//判断订单详细
Listlist=newArrayList();
while(rs.next()){
//获得菜单信息
intid=rs.getInt
(1);
inttypeId=rs.getInt
(2);
intprice=rs.getInt(3);
Stringname=rs.getString(4);
Stringpic=rs.getString(5);
Stringremark=rs.getString(6);
Menum=newMenu();
m.setId(id);
m.setName(name);
m.setPic(pic);
m.setPrice(price);
m.setRemark(remark);
m.setTypeId(typeId);
list.add(m);
}
returnlist;
}catch(SQLExceptione){
e.printStackTrace();
}finally{
util.closeConn(conn);
}
returnnull;
}
publicListgetTableList(){
3.名称“UpdateServlet”的Servlet类
在工程的“com.amaker.servlet”包中定义一个名称“UpdateServlet”的Servlet类响应客户端请求,将数据列表拼成XML格式数据,发送到客户端。
packagecom.amaker.servlet;
importjava.io.IOException;
importjava.io.PrintWriter;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importcom.amaker.dao.impl.UpdateDaoImpl;
publicclassUpdateServletextendsHttpServlet{
//构造方法
publicUpdateServlet(){
super();
//销毁方法
publicvoiddestroy(){
super.destroy();
//响应Get请求
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
response.setContentType("
text/xml"
);
PrintWriterout=response.getWriter();
//实例化dao
UpdateDaodao=newUpdateDaoImpl();
//获得菜谱列表
Listlist=dao.getMenuList();
//拼XML格式数据
out.println("
<
?
xmlversion='
1.0'
encoding='
UTF-8'
>
"
//根节点
menulist>
for(inti=0;
i<
list.size();
i++){
Menum=(Menu)list.get(i);
out.println("
menu>
//菜谱编号
out.print("
id>
out.print(m.getId());
out.println("
/id>
//分类
typeId>
out.print(m.getTypeId());
/typeId>
//名称
name>
out.print(m.getName());
/name>
//图片路径
pic>
out.print(m.getPic());
/pic>
//价格
price>
out.print(m.getPrice());
/price>
//备注
remark>
out.print(m.getRemark());
/remark>
/menu>
/menulist>
out.flush();
out.close();
//响应Post请求
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
doGet(request,response);
//初始化方法
publicvoidinit()throwsServletException{}
三、转台模块Android客户端实现
转台模块要实现的功能是:
当顾客开桌或下单后要求更换桌位的过程。
这一过程需要更新保存在服务器数据库中的数据,具体更新的是OrderTbl表中该订单对应的桌号以及更换桌位的状态。
具体实现步骤说明如下。
1.名称为“change_table.xml”的布局文件
在该工程的目录下定义一个名称为“change_table.xml”的布局文件,该布局文件外层使用LinearLayout布局,内层嵌套TableLayout,该布局作为自定义试图添加到弹出对话框中提示用户输入信息。
xmlversion="
1.0"
encoding="
utf-8"
LinearLayoutxmlns:
android="
android:
orientation="
vertical"
layout_width="
fill_parent"
layout_height="
<
TableLayout
stretchColumns="
1"
<
TableRow>
<
TextView
android:
text="
订单编号:
id="
@+id/TextView"
wrap_content"
/>
EditText
@+id/change_table_order_number_EditText"
/>
/TableRow>
更换桌号:
@+id/change_table_no_EditText"
/TableLayout>
/LinearLayout>
2.changeTable()方法
在工程的“MainMenuActivity”类中定义一个changeTable()方法该方法首先实现定义的布局文件,将其添加到AlertDialog中,在对话框的确定方法中获得订单编号和更换桌号,条调用服务器Servlet,更新数据,并显示更新结果。
//换台系统
privatevoidchangeTable(){
//获得LayoutInflater实例
LayoutInflaterinflater=LayoutInflater.from(this);
//获得LinearLayout视图实例
Viewv=inflater.inflate(R.layout.change_table,null);
//从LinearLayout中获得EditText实例
finalEditTextet1=(EditText)v.findViewById(R.id.change_table_order_number_EditText);
finalEditTextet2=(EditText)v.findViewById(R.id.change_table_no_EditText);
AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
builder.setMessage("
真的要换桌位吗?
)
.setCancelable(false)
.setView(v)
.setPositiveButton("
确定"
newDialogInterface.OnClickListener(){
publicvoidonClick(DialogInterfacedialog,intid){
//获得订单号
StringorderId=et1.getText().toString();
//获得桌号
StringtableId=et2.getText().toString();
//查询参数
StringqueryString="
orderId="
+orderId+"
&
tableId="
+tableId;
//url
Stringurl=HttpUtil.BASE_URL+"
servlet/ChangeTableServlet?
+queryString;
//查询返回结果
Stringresult=HttpUtil.queryStringForPost(url);
//显示结果
Toast.makeText(MainMenuActivity.this,result,Toast.LENGTH_LONG).show();
})
.setNegativeButton("
取消"
dialog.cancel();
});
AlertDialogalert=builder.create();
alert.show();
3.调用changeTable方法
定义转台监听器,调用changeTable方法。
//转台监听器
OnClickListenerchangeTableLinstener=newOnClickListener(){
@Override
publicvoidonClick(Viewv){
changeTable();
};
4.添加转台监听器
主菜单GridView添加监听器。
case2:
//添加转台监听器
imageView.setOnClickListener(changeTableLinstener);
break;
四、转台模块服务器端实现
为了响应Android客户端的请求需要定义Servlet,为了更新数据库需要定义DAO接口来操作数据库。
1.ChanggeTableDao接口
在工程的“com.amaker.dao”包中定义一个ChanggeTableDao接口,在该接口中定义一个转台方法changeTable().
//转台DAO接口
publicinterfaceChangeTableDao{
//转台方法
publicvoidchangeTable(intorderId,inttableId);
2.ChanggeTableDaoImpl类
在工程的“com.amaker.dao”包中定义一个ChanggeTableDaoImpl类实现上述接口。
该类需要更新订单表以及更换桌位的状态,为此本代码的实现使用了事务控制。
importjava.sql.PreparedStatement;
importcom.amaker.dao.ChangeTableDao;
/**
*@author郭宏志
*完成转台功能
*/
publicclassChangeTableDaoImplimplementsChangeTableDao{
publicvoidchangeTable(intorderId,inttableId){
//更新SQL语句
Stringsql="
updateTableTblsetflag=0whereid="
+
"
(selecttableIdfromOrderTblasotwhereot.id=?
)"
Stringsql2="
updateOrderTblsettableId=?
whereid=?
"
Stringsql3="
updateTableTblsetflag=1whereid=?
conn.setAutoCommit(false);
PreparedStatementpstmt=conn.prepareStatement(sql);
pstmt.setInt(1,orderId);
//更新桌位状态
pstmt.executeUpdate();
pstmt=conn.prepareStatement(sql2);
//设置参数
pstmt.s