华中科技大学文华学院
微普企业课程实习方案
Android 之 3G警务系统
1.1 对象名称:华中科技大学文华学院计算机学院
计算机相关专业,对开发语言有一定的了解。
嵌入式、计算机应用、软件开发、软件测试等专业均可。
1.2. 对象职业能力现状:
华中科技大学文华学院计算机学院开设了计算机软硬件基础相关课程,微普希望学生通过软件实习将这些专业课程融合到一起,理论联系实际,巩固所学的知识,提高处理实际问题的能力。
1.3. 计划实习周期: 10个工作日
2.1 对象需求概述
1) 本次实习为嵌入式项目综合实习,实习融合了Android 、Linux、ARM11、JAVA开发语言、项目管理等多门课程,通过一个实际需求的项目开发,使学生对项目全过程有一个深刻的认识,并着重强化编码及测试技能;
2) 本次实习要求团队开发,使学生在团队开发过程中感受企业文化,体验团队合作精神。
3) 本次实习的技术方向为嵌入式方向;项目团队成员不超过5人/项目组。
2.2 实习目标
1) 帮助学生规划在IT行业的发展目标,培养学员从事嵌入式软件行业开发、测试的强烈兴趣和爱好;
2) 让学员对软件开发领域的最新技术有本质的了解,并能熟练运用;
3) 让学员熟练操作开发平台,并能按照企业标准规范,和嵌入式开发的基本流程开发完整的项目;
4) 促进学员迅速进入IT行业从业,培养学员团队开发精神。
5) 建立人才储备库,便于及时准确招到合适人才,满足合作伙伴用人之需。
2.3 实习后可达到的能力
1) 亲身参与软件项目的开发,使实习生掌握软件开发的基本过程,提高编程能力,适应工作需要,提升自我价值,灵活运用C语言做小型嵌入式项目开发。
2) 亲身体会IT企业招聘难、IT实习生就业难原因,由衷感悟并能努力学习,严于律己:
时间:具体实习开始时间根据学校时间安排。
场地:学校机房
7.1 实习项目管理
Ø 组团开发 人人编程:每5人为一组,一人一机
Ø 在建项目 指导编程:由专业公司软件部的中高级程序员带领一起开发项目
Ø 分工合作 交叉编程:培养沟通交流,团队合作精神;
Ø 日结日清 逐步编程:写开发日志;
Ø 点评讨论 高效编程:相互学习,共同提高。
7.2 实习考核
7.3 实习奖励
针对学员在实习期间的表现及其项目开发情况,微普给予评级,分为优秀、良好、一般三个级别,放入微普资料库,优秀者享有优先推荐就业并向其所在学校予以反馈,优秀学员将颁发《微普优秀实习生荣誉证书》,分班分组的实习过程中,评出一个优秀项目组,并给与一定的物质奖或培训部的优惠券。
Ø 企业参观:在学生实习结束后,组织学生到微普参观、学习;
Ø 企业人士上课:由企业项目经理直接到基地为学生进行项目讲解;同时邀请企业的HR为学生做就业指导;
Ø 直接到企业实习:想从事软件开发的优秀的学生可以直接到企业进行项 发目实战和实习,并为企业的见习人员;
学生自己所做的项目进行检查,分享!总结实习过程中学到的各项知识体系,以及对自己专业方向的一个思考!优秀的学生可以直接到企业进行项目开发实战和实习,与企业接轨,为实现校企合作开拓新辉煌。
Android
实训报告
班级:10级软件技术
学号:10060401026
姓名:杨超杰
指导老师:陈建彪
目录
1无线点餐系统的背景和意义................................................ 3
2功能模块的设计..................................................................... 3
2.1客户端............................................................................. 3
2.2数据库............................................................................. 3
3主要任务.................................................................................. 5
4模块操作.................................................................................. 5
4.1登陆模块客户端实现.................................................... 5
4.2登录模块服务器端实现................................................ 6
4.3程序主菜单实现............................................................ 7
4.4点餐功能客户端实现.................................................... 7
4.5点餐功能服务器端实现................................................ 8
5附录:...................................................................................... 8
餐饮传统的点菜方式是纯人工操作,由服务员记录顾客点的菜,在具体工作中容易出现问题。因此,无限点餐模式应运而生。它不仅可以有效地提高餐饮业的工作效率,更可以规模服务体系,提高整体服务质量和管理水平,并为规模化经营提供了坚实的技术基础。
客户端主要有以下几个模块构成:登陆、点餐、更新、结账等功能。
结构图:
客户端采用SQLite数据库,服务器采用MySQL数据库,并提供了客户端数据和服务器端数据和服务器端数据的同步功能,提高了程序的运行效率。
创建了6张表分别是:系统用户表(UserTbl)、菜谱分类表(MenuTypeTbl)、餐桌表(TableTbl)、菜谱表(MenuTbl)、订单表(OrderTbl)、订单明细表。
系统用户表:登陆系统使用。
菜谱分类表:方便点餐,将菜单信息进行分类,如热菜、凉菜等。
餐桌表:用来表示顾客在哪个桌位就坐。
菜谱表:菜谱表用来保存菜信息,如分类、名称和价格等。
订单表:当顾客开桌点菜时生成的信息,保存到该表。
订单明细表:订单明细表和上面的订单表是一对多的关系,即一桌客人点了多份菜。
无线点餐系统的登陆、点餐模块的客户端与服务器端和程序主菜单的实现部分。
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。
运行结果如图:
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()方法,并根据登陆结果返回响应结果信息。
1.在工程的res\layout\目录下创建一个布局文件,该布局文件外层是LinearLayout,使用一个图片资源充当背景色,内层是一个GridView。
2.创建“MainMenuActivity”的Acivity,在onCreate()方法中设置Acivity界面标题和布局,实例化GridView组件,为GridView绑定Adapter。
3.定义一个名称为“ImageAdapter”的类,该类集成BaseAdapter,为GridView设置Adapter。
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。
程序运行结果如图:
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
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/login"
>
<TableLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="1">
<TableRow>
<TextView android:text="" />
<TextView android:text="" />
</TableRow>
<TableRow>
<TextView android:text="" />
<TextView android:text="" />
</TableRow>
<TableRow>
<TextView android:text="" />
<TextView android:text="" />
</TableRow>
<TableRow>
<TextView android:text="" />
<TextView android:text="" />
</TableRow>
<TableRow>
<TextView android:text="" />
<TextView android:text="" />
</TableRow>
<TableRow>
<TextView android:text="" />
<TextView android:text="" />
</TableRow>
<TableRow>
<TextView android:text="" />
<TextView android:text="" />
</TableRow>
<TableRow>
<TextView
android:text="用户名称:"
android:id="@+id/TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#0000ff"
/>
<EditText
android:text=""
android:id="@+id/userEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</TableRow>
<TableRow>
<TextView
android:text="用户密码:"
android:id="@+id/TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#0000ff"
/>
<EditText
android:text=""
android:id="@+id/pwdEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:password="true"/>
</TableRow>
<TableRow
android:gravity="right">
<Button
android:text="取消"
android:id="@+id/cancelButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:text="登陆"
android:id="@+id/loginButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</TableRow>
</TableLayout>
</LinearLayout>
LoginActivity
package com.amaker.wlo;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.amaker.util.HttpUtil;
public class LoginActivity extends Activity {
// 声明登录、取消按钮
private Button cancelBtn,loginBtn;
// 声明用户名、密码输入框
private EditText userEditText,pwdEditText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置标题
setTitle("掌中宝无线订餐系统-用户登录");
// 设置当前Activity界面布局
setContentView(R.layout.login_system);
// 通过findViewById方法实例化组件
cancelBtn = (Button)findViewById(R.id.cancelButton);
// 通过findViewById方法实例化组件
loginBtn = (Button)findViewById(R.id.loginButton);
// 通过findViewById方法实例化组件
userEditText = (EditText)findViewById(R.id.userEditText);
// 通过findViewById方法实例化组件
pwdEditText = (EditText)findViewById(R.id.pwdEditText);
cancelBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
loginBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(validate()){
if(login()){
Intent intent = new Intent(LoginActivity.this,MainMenuActivity.class);
startActivity(intent);
}else{
showDialog("用户名称或者密码错误,请重新输入!");
}
}
}
});
}
// 登录方法
private boolean login(){
// 获得用户名称
String username = userEditText.getText().toString();
// 获得密码
String pwd = pwdEditText.getText().toString();
// 获得登录结果
String result=query(username,pwd);
if(result!=null&&result.equals("0")){
return false;
}else{
saveUserMsg(result);
return true;
}
}
// 将用户信息保存到配置文件
private void saveUserMsg(String msg){
// 用户编号
String id = "";
// 用户名称
String name = "";
// 获得信息数组
String[] msgs = msg.split(";");
int idx = msgs[0].indexOf("=");
id = msgs[0].substring(idx+1);
idx = msgs[1].indexOf("=");
name = msgs[1].substring(idx+1);
// 共享信息
SharedPreferences pre = getSharedPreferences("user_msg", MODE_WORLD_WRITEABLE);
SharedPreferences.Editor editor = pre.edit();
editor.putString("id", id);
editor.putString("name", name);
editor.commit();
}
// 验证方法
private boolean validate(){
String username = userEditText.getText().toString();
if(username.equals("")){
showDialog("用户名称是必填项!");
return false;
}
String pwd = pwdEditText.getText().toString();
if(pwd.equals("")){
showDialog("用户密码是必填项!");
return false;
}
return true;
}
private void showDialog(String msg){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(msg)
.setCancelable(false)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
AlertDialog alert = builder.create();
alert.show();
}
// 根据用户名称密码查询
private String query(String account,String password){
// 查询参数
String queryString = "account="+account+"&password="+password;
// url
String url = HttpUtil.BASE_URL+"servlet/LoginServlet?"+queryString;
// 查询返回结果
return HttpUtil.queryStringForPost(url);
}
}
HttpUtil
package com.amaker.util;
import java.io.IOException;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
public class HttpUtil {
// 基础URL
public static final String BASE_URL="http://192.168.0.1:8888/WirelessOrder_Server/";
// 获得Get请求对象request
public static HttpGet getHttpGet(String url){
HttpGet request = new HttpGet(url);
return request;
}
// 获得Post请求对象request
public static HttpPost getHttpPost(String url){
HttpPost request = new HttpPost(url);
return request;
}
// 根据请求获得响应对象response
public static HttpResponse getHttpResponse(HttpGet request) throws ClientProtocolException, IOException{
HttpResponse response = new DefaultHttpClient().execute(request);
return response;
}
// 根据请求获得响应对象response
public static HttpResponse getHttpResponse(HttpPost request) throws ClientProtocolException, IOException{
HttpResponse response = new DefaultHttpClient().execute(request);
return response;
}
// 发送Post请求,获得响应查询结果
public static String queryStringForPost(String url){
// 根据url获得HttpPost对象
HttpPost request = HttpUtil.getHttpPost(url);
String result = null;
try {
// 获得响应对象
HttpResponse response = HttpUtil.getHttpResponse(request);
// 判断是否请求成功
if(response.getStatusLine().getStatusCode()==200){
// 获得响应
result = EntityUtils.toString(response.getEntity());
return result;
}
} catch (ClientProtocolException e) {
e.printStackTrace();
result = "网络异常!";
return result;
} catch (IOException e) {
e.printStackTrace();
result = "网络异常!";
return result;
}
return null;
}
// 获得响应查询结果
public static String queryStringForPost(HttpPost request){
String result = null;
try {
// 获得响应对象
HttpResponse response = HttpUtil.getHttpResponse(request);
// 判断是否请求成功
if(response.getStatusLine().getStatusCode()==200){
// 获得响应
result = EntityUtils.toString(response.getEntity());
return result;
}
} catch (ClientProtocolException e) {
e.printStackTrace();
result = "网络异常!";
return result;
} catch (IOException e) {
e.printStackTrace();
result = "网络异常!";
return result;
}
return null;
}
// 发送Get请求,获得响应查询结果
public static String queryStringForGet(String url){
// 获得HttpGet对象
HttpGet request = HttpUtil.getHttpGet(url);
String result = null;
try {
// 获得响应对象
HttpResponse response = HttpUtil.getHttpResponse(request);
// 判断是否请求成功
if(response.getStatusLine().getStatusCode()==200){
// 获得响应
result = EntityUtils.toString(response.getEntity());
return result;
}
} catch (ClientProtocolException e) {
e.printStackTrace();
result = "网络异常!";
return result;
} catch (IOException e) {
e.printStackTrace();
result = "网络异常!";
return result;
}
return null;
}
}
DBConfig.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/wireless_db?useUnicode=true&characterEncoding=utf-8
username=root
password=1
DBUtil
package com.amaker.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
/**
*
* @author hz.guo
* 数据库工具类
*/
public class DBUtil {
/*
* 关闭数据库连接
*/
public void closeConn(Connection conn){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
/*
* 打开数据库连接
*/
public Connection openConnection() {
Properties prop = new Properties();
String driver = null;
String url = null;
String username = null;
String password = null;
try {
prop.load(this.getClass().getClassLoader().getResourceAsStream(
"DBConfig.properties"));
driver = prop.getProperty("driver");
url = prop.getProperty("url");
username = prop.getProperty("username");
password = prop.getProperty("password");
Class.forName(driver);
return DriverManager.getConnection(url, username, password);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
UserTbl
package com.amaker.entity;
/**
*
* @author hz.guo
* 用于封装UserTbl表的实体类
*/
publicclass User {
// 编号
privateint id;
// 账号
private String account;
// 密码
private String password;
// 用户名称
private String name;
// 性别
private String gender;
// 权限
privateint permission;
// 备注
private String remark;
public String getAccount() {
return account;
}
publicvoid setAccount(String account) {
this.account = account;
}
public String getGender() {
return gender;
}
publicvoid setGender(String gender) {
this.gender = gender;
}
publicint getId() {
return id;
}
publicvoid setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
publicvoid setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
publicvoid setPassword(String password) {
this.password = password;
}
publicint getPermission() {
return permission;
}
publicvoid setPermission(int permission) {
this.permission = permission;
}
public String getRemark() {
return remark;
}
publicvoid setRemark(String remark) {
this.remark = remark;
}
}
UserDaoImpl
package com.amaker.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.amaker.dao.UserDao;
import com.amaker.entity.User;
import com.amaker.util.DBUtil;
/**
*
* @author 郭宏志
* 用户登录DAO实现类
*/
public class UserDaoImpl implements UserDao {
/**
* 通过用户名称和密码登录,登录成功返回User对象,登录失败返回null
*/
public User login(String account, String password) {
// 查询SQL语句
String sql = " select id,account,password,name,permission,remark "+
" from userTbl "+
" where account=? and password=? ";
// 数据库连接工具类
DBUtil util = new DBUtil();
// 获得连接
Connection conn = util.openConnection();
try {
// 获得预定义语句
PreparedStatement pstmt = conn.prepareStatement(sql);
// 设置查询参数
pstmt.setString(1, account);
pstmt.setString(2, password);
// 执行查询
ResultSet rs = pstmt.executeQuery();
// 判断用户是否存在
if (rs.next()) {
// 获得用户信息
int id = rs.getInt(1);
String name = rs.getString(4);
int permission = rs.getInt(5);
String remark = rs.getString(6);
// 封装用户信息
User u = new User();
u.setId(id);
u.setAccount(account);
u.setPassword(password);
u.setName(name);
u.setPermission(permission);
u.setRemark(remark);
return u;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
util.closeConn(conn);
}
return null;
}
public static void main(String[] args) {
UserDao dao = new UserDaoImpl();
User u = dao.login("admin", "123");
System.out.println(u.getAccount());
}
}
LoginServlet
package com.amaker.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.amaker.dao.UserDao;
import com.amaker.dao.impl.UserDaoImpl;
import com.amaker.entity.User;
/**
*
* @author 郭宏志
* 响应 Android客户端发来的请求
*/
public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
UserDao dao = new UserDaoImpl();
// 获得客户端请求参数
String username = request.getParameter("account");
String password = request.getParameter("password");
User u = dao.login(username, password);
if(u!=null){
// 响应客户端内容,登录成功
out.print(build(u));
}else{
// 响应客户端内容,登录失败
out.print("0");
}
out.flush();
out.close();
}
private String build(User u){
String userMsg = "";
userMsg+="id="+u.getId();
userMsg+=";";
userMsg+="name="+u.getName();
return userMsg;
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
public void init() throws ServletException {
}
public LoginServlet() {
super();
}
public void destroy() {
super.destroy();
}
}
main_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@drawable/menu_bg"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<GridView
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="auto_fit"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:columnWidth="90dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>
</LinearLayout>
MainMenuActivity
package com.amaker.wlo;
import com.amaker.util.HttpUtil;
publicclass MainMenuActivity extendsActivity {
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle("掌中宝无线订餐系统-主菜单");
setContentView(R.layout.main_menu);
GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this));
}
// 继承BaseAdapter
publicclass ImageAdapter extendsBaseAdapter {
// 上下文
privateContext mContext;
// 构造方法
public ImageAdapter(Context c) {
mContext = c;
}
// 组件个数
publicint getCount() {
returnmThumbIds.length;
}
// 当前组件
publicObject getItem(int position) {
returnnull;
}
// 当前组件id
publiclong getItemId(int position) {
return 0;
}
// 获得当前视图
publicView getView(int position, View convertView, ViewGroup parent) {
// 声明图片视图
ImageView imageView;
if (convertView == null) {
// 实例化图片视图
imageView = newImageView(mContext);
// 设置图片视图属性
imageView.setLayoutParams(newGridView.LayoutParams(85, 85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
// 设置图片视图图片资源
imageView.setImageResource(mThumbIds[position]);
// 为当前视图添加监听器
switch (position) {
case 0:
// 添加点餐监听器
imageView.setOnClickListener(orderLinstener);
break;
case 1:
// 并台监听器
imageView.setOnClickListener(unionTableLinstener);
break;
case 2:
// 添加转台监听器
imageView.setOnClickListener(changeTableLinstener);
break;
case 3:
// 添加查台监听器
imageView.setOnClickListener(checkTableLinstener);
break;
case 4:
// 添加更新监听器
imageView.setOnClickListener(updateLinstener);
break;
case 6:
// 添加注销监听器
imageView.setOnClickListener(exitLinstener);
break;
case 7:
// 添加结算监听器
imageView.setOnClickListener(payLinstener);
break;
default:
break;
}
return imageView;
}
// 图片资源数组
privateInteger[] mThumbIds = {
R.drawable.diancai, R.drawable.bingtai,
R.drawable.zhuantai, R.drawable.chatai,
R.drawable.gengxin, R.drawable.shezhi,
R.drawable.zhuxiao, R.drawable.jietai
};
}
// 更新监听器
OnClickListener updateLinstener = newOnClickListener() {
@Override
publicvoid onClick(View v) {
Intent intent = newIntent();
// 启动结算Activity
intent.setClass(MainMenuActivity.this, UpdateActivity.class);
startActivity(intent);
}
};
// 查台监听器
OnClickListener checkTableLinstener = newOnClickListener() {
@Override
publicvoid onClick(View v) {
Intent intent = newIntent();
// 启动结算Activity
intent.setClass(MainMenuActivity.this, CheckTableActivity.class);
startActivity(intent);
}
};
// 结算监听器
OnClickListener payLinstener = newOnClickListener() {
@Override
publicvoid onClick(View v) {
Intent intent = newIntent();
// 启动结算Activity
intent.setClass(MainMenuActivity.this, PayActivity.class);
startActivity(intent);
}
};
// 订餐监听器
OnClickListener orderLinstener = newOnClickListener() {
@Override
publicvoid onClick(View v) {
Intent intent = newIntent();
// 启动订餐Activity
intent.setClass(MainMenuActivity.this, OrderActivity.class);
startActivity(intent);
}
};
// 注销监听器
OnClickListener exitLinstener = newOnClickListener() {
@Override
publicvoid onClick(View v) {
logout();
}
};
// 转台监听器
OnClickListener changeTableLinstener = newOnClickListener() {
@Override
publicvoid onClick(View v) {
changeTable();
}
};
// 并台监听器
OnClickListener unionTableLinstener = newOnClickListener() {
@Override
publicvoid onClick(View v) {
unionTable();
}
};
// 换台系统
privatevoid changeTable(){
// 获得LayoutInflater实例
LayoutInflater inflater = LayoutInflater.from(this);
// 获得LinearLayout视图实例
View v =inflater.inflate(R.layout.change_table, null);
// 从LinearLayout中获得EditText实例
finalEditText et1 = (EditText) v.findViewById(R.id.change_table_order_number_EditText);
finalEditText et2 = (EditText) v.findViewById(R.id.change_table_no_EditText);
AlertDialog.Builder builder = newAlertDialog.Builder(this);
builder.setMessage(" 真的要换桌位吗?")
.setCancelable(false)
.setView(v)
.setPositiveButton("确定", newDialogInterface.OnClickListener() {
publicvoid onClick(DialogInterface dialog, int id) {
// 获得订单号
String orderId = et1.getText().toString();
// 获得桌号
String tableId = et2.getText().toString();
// 查询参数
String queryString = "orderId="+orderId+"&tableId="+tableId;
// url
String url = HttpUtil.BASE_URL+"servlet/ChangeTableServlet?"+queryString;
// 查询返回结果
String result = HttpUtil.queryStringForPost(url);
// 显示结果
Toast.makeText(MainMenuActivity.this,result,Toast.LENGTH_LONG).show();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
publicvoid onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
// 并台系统
privatevoid unionTable(){
// 实例化LayoutInflater
LayoutInflater inflater = LayoutInflater.from(this);
// 获得自定义视图
View v =inflater.inflate(R.layout.union_table, null);
// 获得Spinner
final Spinner spinner1 = (Spinner) v.findViewById(R.id.union_table_Spinner1);
final Spinner spinner2 = (Spinner) v.findViewById(R.id.union_table_Spinner2);
// 访问服务器的URL
String urlStr = HttpUtil.BASE_URL + "servlet/UnionTableServlet";
try {
// 实例化URL
URL url = new URL(urlStr);
// URLConnection 实例
URLConnection conn = url.openConnection();
// 获得输入流
InputStream in = conn.getInputStream();
// 获得DocumentBuilderFactory对象
DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();
// 获得DocumentBuilder对象
DocumentBuilder builder = factory.newDocumentBuilder();
// 获得Document对象
Document doc = builder.parse(in);
// 获得节点列表
NodeList nl = doc.getElementsByTagName("table");
// Spinner数据
List items = new ArrayList();
// 获得XML数据
for (int i = 0; i < nl.getLength(); i++) {
// 桌位编号
String id = doc.getElementsByTagName("id")
.item(i).getFirstChild().getNodeValue();
// 桌号
int num = Integer.parseInt(doc.getElementsByTagName("num")
.item(i).getFirstChild().getNodeValue());
Map data = new HashMap();
data.put("id", id);
items.add(data);
}
// 获得SpinnerAdapter
SpinnerAdapter as = new
SimpleAdapter(this, items,
android.R.layout.simple_spinner_item,
new String[] { "id" }, newint[] { android.R.id.text1 });
// 绑定数据
spinner1.setAdapter(as);
spinner2.setAdapter(as);
} catch (Exception e) {
e.printStackTrace();
}
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(" 真的要并桌吗?")
.setCancelable(false)
.setView(v)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
publicvoid onClick(DialogInterface dialog, int id) {
TextView tv1 = (TextView) spinner1.getSelectedView();
TextView tv2 = (TextView) spinner2.getSelectedView();
String tableId1 = tv1.getText().toString();
String tableId2 = tv2.getText().toString();
// 查询参数
String queryString = "tableId1="+tableId1+"&tableId2="+tableId2;
// url
String url = HttpUtil.BASE_URL+"servlet/UnionTableServlet2?"+queryString;
// 查询返回结果
String result = HttpUtil.queryStringForPost(url);
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
publicvoid onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
// 退出系统
privatevoid logout(){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("真的要退出系统吗?")
.setCancelable(false)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
publicvoid onClick(DialogInterface dialog, int id) {
SharedPreferences pres = getSharedPreferences("user_msg", MODE_WORLD_WRITEABLE);
SharedPreferences.Editor editor = pres.edit();
editor.putString("id", "");
editor.putString("name", "");
Intent intent = new Intent();
intent.setClass(MainMenuActivity.this, LoginActivity.class);
startActivity(intent);
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
publicvoid onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
Order.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainlayout"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TableLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:stretchColumns="1">
<TableRow>
<TextView
android:text="桌号:"
android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Spinner
android:id="@+id/tableNoSpinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</TableRow>
<TableRow>
<TextView
android:text="人数:"
android:id="@+id/TextView02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></TextView>
<EditText android:text=""
android:id="@+id/personNumEditText02"
android:layout_width="fill_parent"
android:layout_height="wrap_content"></EditText>
</TableRow>
<TableRow android:gravity="right">
<Button
android:text="开桌"
android:id="@+id/startButton02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:text="添菜"
android:id="@+id/addMealButton01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:text="下单"
android:id="@+id/orderButton02"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</TableRow>
</TableLayout>
<ListView
android:id="@+id/orderDetailListView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
OrderAcivity
package com.amaker.wlo;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import com.amaker.util.HttpUtil;
public class OrderActivity extends Activity {
// 桌号下拉列表
private Spinner tableNoSpinner;
// 开桌、点菜和下单按钮
private Button orderBtn, addBtn, startBtn;
// 人数编辑框
private EditText personNumEt;
// 点菜列表
private ListView lv;
// 开桌生成的订单Id
private String orderId;
// 点菜列表中绑定的数据
private List data = new ArrayList();
// 点菜列表中具体的数据项
private Map map;
// ListView 的 Adapter
private SimpleAdapter sa;
// ListView 中显示的数据项
private String[] from = { "id", "name","num", "price", "remark" };
// 引用的TextView Drawable ID
private int[] to = new int[5];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 为Activity设置界面布局
setContentView(R.layout.order);
// 实例化Spinner
tableNoSpinner = (Spinner) findViewById(R.id.tableNoSpinner);
// 为桌号下拉列表Spinner绑定数据
setTableAdapter();
// 实例化开桌按钮
startBtn = (Button) findViewById(R.id.startButton02);
// 为开桌按钮添加监听器
startBtn.setOnClickListener(startListener);
// 实例化点菜按钮
addBtn = (Button) findViewById(R.id.addMealButton01);
// 为点菜按钮添加监听器
addBtn.setOnClickListener(addListener);
// 实例化下单按钮
orderBtn = (Button) findViewById(R.id.orderButton02);
// 为下单按钮添加监听器
orderBtn.setOnClickListener(orderListener);
// 实例化人数编辑框
personNumEt = (EditText) findViewById(R.id.personNumEditText02);
// 实例化ListView
lv = (ListView) findViewById(R.id.orderDetailListView01);
// 为点菜列表ListView绑定数据
setMenusAdapter();
}
// 为点菜列表ListView绑定数据
private void setMenusAdapter(){
// 显示点菜项的TextView引用
to[0] = R.id.id_ListView;
to[1] = R.id.name_ListView;
to[2] = R.id.num_ListView;
to[3] = R.id.price_ListView;
to[4] = R.id.remark_ListView;
// 实例化点菜列表ListView Adapter
sa = new SimpleAdapter(this, data, R.layout.listview, from, to);
// 为ListView绑定数据
lv.setAdapter(sa);
}
// 为桌号下拉列表Spinner绑定数据
private void setTableAdapter(){
// 访问本地SQLite数据库中桌号表的Uri
Uri uri = Uri.parse("content://com.amaker.provider.TABLES/table");
// 要选择桌号表中的列
String[] projection = { "_id", "num", "description" };
// 查询放回游标
Cursor c = managedQuery(uri, projection, null, null, null);
// 实例化桌号下拉列表Spinner的Adapter
SimpleCursorAdapter adapter2 = new SimpleCursorAdapter(this,
android.R.layout.simple_spinner_item, c,
new String[] { "_id" }, new int[] { android.R.id.text1 });
// 为桌号Spinner绑定数据
tableNoSpinner.setAdapter(adapter2);
}
// 开桌监听器
private OnClickListener startListener = new OnClickListener() {
@Override
public void onClick(View v) {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yy:mm:dd hh:MM");
// 开桌时间
String orderTime = sdf.format(date);
// 开桌用户,从登陆配置文件中获得
SharedPreferences pres = getSharedPreferences("user_msg",
MODE_WORLD_READABLE);
String userId = pres.getString("id", "");
// 桌号
TextView tv = (TextView) tableNoSpinner.getSelectedView();
String tableId = tv.getText().toString();
// 人数
String personNum = personNumEt.getText().toString();
// 请求参数列表
List<NameValuePair> params = new ArrayList<NameValuePair>();
// 添加请求参数
params.add(new BasicNameValuePair("orderTime", orderTime));
params.add(new BasicNameValuePair("userId", userId));
params.add(new BasicNameValuePair("tableId", tableId));
params.add(new BasicNameValuePair("personNum", personNum));
UrlEncodedFormEntity entity1=null;
try {
entity1 = new UrlEncodedFormEntity(params,HTTP.UTF_8);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
// 请求服务器url
String url = HttpUtil.BASE_URL+"servlet/StartTableServlet";
// 获得请求对象HttpPost
HttpPost request = HttpUtil.getHttpPost(url);
// 设置查询参数
request.setEntity(entity1);
// 获得响应结果
String result= HttpUtil.queryStringForPost(request);
// 将开桌生成的订单Id,赋值给全局orderId
orderId = result;
Toast.
makeText(OrderActivity.this, result, Toast.LENGTH_LONG).show();
}
};
// 添菜监听器
private OnClickListener addListener = new OnClickListener() {
@Override
public void onClick(View v) {
// 调用点菜方法
addMeal();
}
};
//添菜方法
private void addMeal() {
// 获得LayoutInflater实例
LayoutInflater inflater = LayoutInflater.from(this);
// 实例化在弹出对话框中添加的视图
final View v = inflater.inflate(R.layout.order_detail, null);
// 获得视图中的Spinner对象,菜单下拉列表
final Spinner menuSpinner = (Spinner) v.findViewById(R.id.menuSpinner);
// 获得视图中的EditText对象,数量
EditText numEt = (EditText) v.findViewById(R.id.numEditText);
// 获得视图中的EditText实例,备注
EditText remarkEt = (EditText) v.findViewById(R.id.add_remarkEditText);
// 访问本地SQLite数据库中MenuTbl表的Uri
Uri uri = Uri.parse("content://com.amaker.provider.MENUS/menu1");
// 查询列
String[] projection = { "_id", "name", "price" };
// 获得ContentResolver实例
ContentResolver cr = getContentResolver();
// 查询放回游标
Cursor c = cr.query(uri, projection, null, null, null);
// 实例化SimpleCursorAdapter
SimpleCursorAdapter adapter2 = new SimpleCursorAdapter(this,
R.layout.spinner_lo, c,
new String[] { "_id", "price", "name" }, new int[] {
R.id.id_TextView01, R.id.price_TextView02,
R.id.name_TextView03, });
// 为点菜下拉列表Spinner绑定数据
menuSpinner.setAdapter(adapter2);
// 获得AlertDialog.Builder实例
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder
// 设置标题
.setMessage("请点菜:")
// 设置自定义视图
.setView(v)
// 设置确定按钮
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
// 确定按钮事件
public void onClick(DialogInterface dialog, int id) {
// 获得ListView中的自定义视图LinearLayout
LinearLayout v1 = (LinearLayout) menuSpinner
.getSelectedView();
// 获得TextView,菜编号
TextView id_tv = (TextView) v1
.findViewById(R.id.id_TextView01);
// 获得TextView,菜价格
TextView price_tv = (TextView) v1
.findViewById(R.id.price_TextView02);
// 获得TextView,菜名称
TextView name_tv = (TextView) v1
.findViewById(R.id.name_TextView03);
// 获得EditText,菜数量
EditText num_et = (EditText) v
.findViewById(R.id.numEditText);
// 获得EditText,菜备注
EditText remark_et = (EditText) v
.findViewById(R.id.add_remarkEditText);
// 菜编号值
String idStr = id_tv.getText().toString();
// 菜价格值
String priceStr = price_tv.getText().toString();
// 菜名称值
String nameStr = name_tv.getText().toString();
// 菜数量值
String numStr = num_et.getText().toString();
// 菜备注值
String remarkStr = remark_et.getText().toString();
// 封装到Map中
map = new HashMap();
map.put("id", idStr);
map.put("name", nameStr);
map.put("num", numStr);
map.put("price", priceStr);
map.put("remark", remarkStr);
// 添加到ListView
data.add(map);
// 关联的TextView
to[0] = R.id.id_ListView;
to[1] = R.id.name_ListView;
to[2] = R.id.price_ListView;
to[3] = R.id.remark_ListView;
// 实例化SimpleAdapter
sa = new SimpleAdapter(OrderActivity.this, data,
R.layout.listview, from, to);
// 为ListView绑定数据
lv.setAdapter(sa);
}
}).setNegativeButton("取消", null);
AlertDialog alert = builder.create();
alert.show();
}
// 下单监听器
private OnClickListener orderListener = new OnClickListener() {
@Override
public void onClick(View v) {
// 遍历点菜列表
for (int i = 0; i < data.size(); i++) {
// 获得其中点菜map
Map map = (Map)data.get(i);
// 获得点菜项
String menuId = (String) map.get("id");
String num = (String)map.get("num");
String remark = (String)map.get("remark");
String myOrderId = orderId;
// 封装到请求参数中
List<NameValuePair> params = new ArrayList<NameValuePair>();
// 添加到请求参数中
params.add(new BasicNameValuePair("menuId", menuId));
params.add(new BasicNameValuePair("orderId", myOrderId));
params.add(new BasicNameValuePair("num", num));
params.add(new BasicNameValuePair("remark", remark));
UrlEncodedFormEntity entity1=null;
try {
entity1 = new UrlEncodedFormEntity(params,HTTP.UTF_8);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
// 请求服务器Servlet的url
String url = HttpUtil.BASE_URL+"servlet/OrderDetailServlet";
// 获得HttpPost对象
HttpPost request = HttpUtil.getHttpPost(url);
// 为请求设置参数
request.setEntity(entity1);
// 获得返回结果
String result= HttpUtil.queryStringForPost(request);
Toast.
makeText(OrderActivity.this, result, Toast.LENGTH_LONG).show();
finish();
}
}
};
}
order_detail.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TableLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="1">
<TableRow>
<TextView
android:text="选菜:"
android:id="@+id/TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Spinner
android:id="@+id/menuSpinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</TableRow>
<TableRow>
<TextView
android:text="数量:"
android:id="@+id/TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<EditText
android:text=""
android:id="@+id/numEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</TableRow>
<TableRow>
<TextView
android:text="备注:"
android:id="@+id/TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<EditText
android:text=""
android:id="@+id/add_remarkEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</TableRow>
</TableLayout>
</LinearLayout>
OrderTbl
package com.amaker.entity;
publicclass UnionTable {
// 桌号
privateint num;
// id
privateint id;
publicint getId() {
return id;
}
publicvoid setId(int id) {
this.id = id;
}
publicint getNum() {
return num;
}
publicvoid setNum(int num) {
this.num = num;
}
}
OrderDetail
package com.amaker.entity;
publicclass OrderDetail {
// 编号
privateint id;
// 订单Id
privateint orderId;
// 菜谱Id
privateint menuId;
// 数量
privateint num;
// 备注
private String remark;
publicint getId() {
return id;
}
publicvoid setId(int id) {
this.id = id;
}
publicint getMenuId() {
return menuId;
}
publicvoid setMenuId(int menuId) {
this.menuId = menuId;
}
publicint getNum() {
return num;
}
publicvoid setNum(int num) {
this.num = num;
}
publicint getOrderId() {
return orderId;
}
publicvoid setOrderId(int orderId) {
this.orderId = orderId;
}
public String getRemark() {
return remark;
}
publicvoid setRemark(String remark) {
this.remark = remark;
}
}
QueryOrderDetail
package com.amaker.entity;
publicclass QueryOrderDetail {
// 菜名称
private String name;
// 价格
privateint price;
// 数量
privateint num;
// 总计
privateint total;
// 备注
private String remark;
public String getName() {
return name;
}
publicvoid setName(String name) {
this.name = name;
}
publicint getNum() {
return num;
}
publicvoid setNum(int num) {
this.num = num;
}
publicint getPrice() {
return price;
}
publicvoid setPrice(int price) {
this.price = price;
}
public String getRemark() {
return remark;
}
publicvoid setRemark(String remark) {
this.remark = remark;
}
publicint getTotal() {
return total;
}
publicvoid setTotal(int total) {
this.total = total;
}
}
OrderDao
package com.amaker.dao;
import com.amaker.entity.Order;
import com.amaker.entity.OrderDetail;
public interface OrderDao {
// 保存开桌信息
public int saveOrder(Order o );
// 保存点菜列表信息
public void saveOrderDetail(OrderDetail od);
// 更新桌号状态,有人
public void updateTableStatus(int tableId);
// 更新桌号状态,空位
public void updateTableStatus2(int orderId);
}
OrderDaoImpl
package com.amaker.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.amaker.dao.OrderDao;
import com.amaker.entity.Order;
import com.amaker.entity.OrderDetail;
import com.amaker.util.DBUtil;
/**
* @author 郭宏志
* 点餐功能DAO实现类
*/
public class OrderDaoImpl implements OrderDao {
// 保存点餐信息,放回订单ID
public int saveOrder(Order o) {
// 添加SQL语句
String sql = " insert into ordertbl(orderTime,userId,tableId,personNum)values(?,?,?,?) ";
// 数据库连接工具类
DBUtil util = new DBUtil();
// 获得连接
Connection conn = util.openConnection();
try {
// 获得预定义语句
PreparedStatement pstmt = conn.prepareStatement(sql);
// 设置参数
pstmt.setString(1, o.getOrderTime());
pstmt.setInt(2, o.getUserId());
pstmt.setInt(3, o.getTableId());
pstmt.setInt(4, o.getPersonNum());
// 执行更新
pstmt.executeUpdate();
// 返回订单编号
String sql2 = " select max(id) as id from orderTbl ";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql2);
if(rs.next()){
int id = rs.getInt(1);
return id;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
util.closeConn(conn);
}
return 0;
}
// 保存点餐列表
public void saveOrderDetail(OrderDetail od) {
// 添加SQL语句
String sql = " insert into orderdetailtbl(orderId,menuId,num,remark)values(?,?,?,?) ";
// 数据库连接工具类
DBUtil util = new DBUtil();
// 获得连接
Connection conn = util.openConnection();
try {
// 获得预定义语句
PreparedStatement pstmt = conn.prepareStatement(sql);
// 设置参数
pstmt.setInt(1, od.getOrderId());
pstmt.setInt(2, od.getMenuId());
pstmt.setInt(3, od.getNum());
pstmt.setString(4, od.getRemark());
// 执行更新
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
util.closeConn(conn);
}
}
// 更新桌号状态,有人
public void updateTableStatus(int tableId) {
// 更新SQL语句
String sql = " update tableTbl set flag=1 where id = ? ";
// 数据库连接工具类
DBUtil util = new DBUtil();
// 获得连接
Connection conn = util.openConnection();
try {
// 获得预定义语句
PreparedStatement pstmt = conn.prepareStatement(sql);
// 设置参数
pstmt.setInt(1, tableId);
// 执行更新
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
util.closeConn(conn);
}
}
// 更新桌号状态,空桌
public void updateTableStatus2(int orderId) {
// 更新SQL语句
String sql = " update TableTbl set flag = 0 where id = "+
" ( select tableId from OrderTbl where id = ?) ";
// 数据库连接工具类
DBUtil util = new DBUtil();
// 获得连接
Connection conn = util.openConnection();
try {
// 获得预定义语句
PreparedStatement pstmt = conn.prepareStatement(sql);
// 设置参数
pstmt.setInt(1, orderId);
// 执行更新
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
util.closeConn(conn);
}
}
}
StarTableServlet
package com.amaker.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.amaker.dao.OrderDao;
import com.amaker.dao.impl.OrderDaoImpl;
import com.amaker.entity.Order;
/**
* @author 郭宏志
* 开桌Servlet,将操作员输入的信息保存到OrderTbl表中
*/
public class StartTableServlet extends HttpServlet {
// 构造方法
public StartTableServlet() {
super();
}
// 销毁方法
public void destroy() {
super.destroy();
}
// 响应Get请求
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// 点餐时间
String orderTime = request.getParameter("orderTime");
// 操作员编号
String userId = request.getParameter("userId");
// 桌号
String tableId = request.getParameter("tableId");
// 人数
String personNum = request.getParameter("personNum");
// 获得DAO接口
OrderDao dao = new OrderDaoImpl();
// 实例化订单类
Order o = new Order();
// 设置订单属性
o.setOrderTime(orderTime);
o.setPersonNum(Integer.parseInt(personNum));
o.setUserId(Integer.parseInt(userId));
o.setTableId(Integer.parseInt(tableId));
// 返回订单ID
int id = dao.saveOrder(o);
// 更新餐桌状态为 有人
dao.updateTableStatus(Integer.parseInt(tableId));
// 返回ID
out.print(id);
out.flush();
out.close();
}
// 响应Post请求
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
// 初始化
public void init() throws ServletException {
}
}
毕业实习报告专业班级学号学生姓名指导教师实习时间实习成绩说明1实习指导教师由学院校内教师担任负责组织实习学生管理参加实习答辩实习成…
Android实训报告目录一、实训背景及目的要求.........................................…
通信与电子信息专业实训报告项目名称基于Android的游戏开发班级10通信1班姓名学号指导教师成绩实训时间年月日目录一实训目的及其…
实习报告实习目的:生产实习是计算机科学与技术专业重要的实践性教学活动,其目的是使学生们进一步加深对所学知识的理解,理论联系实际,巩…
报告编号第5组综合课程设计报告基于Android平台的记事本的设计与实现学生姓名指导教师所在系电子工程系所学专业计算机科学与技术班…
实习报告实习目的:生产实习是计算机科学与技术专业重要的实践性教学活动,其目的是使学生们进一步加深对所学知识的理解,理论联系实际,巩…
Android实习心得刚开始接触Android感觉到它很有意思,在界面开发上和web也可以形成了相通的架构,更加方便,视觉上也是非…
项目总结时间过的好快,为期三个月的实训生活即将结束了,每一次的实训我们都受益匪浅,我们学到的不仅仅是课内还有课外,实训让我们的课内…
Android实训心得刚开始接触Android感觉到它很有意思在界面开发上和web也可以形成了相通的架构更加方便视觉上也是非常的酷…
荆州职业技术学院实习时间:学院:专业名称:学号:姓名:指导老师:实习地点:专业实习报告——20xx.4.30国际信息技术学院计算机…