Android实训乔艳丽06.docx
- 文档编号:23491993
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:50
- 大小:160.14KB
Android实训乔艳丽06.docx
《Android实训乔艳丽06.docx》由会员分享,可在线阅读,更多相关《Android实训乔艳丽06.docx(50页珍藏版)》请在冰豆网上搜索。
Android实训乔艳丽06
Android
实
训
报
告
院系:
计算机与信息工程学院
班级:
10级软件技术
(1)班
学号:
10060401006
姓名:
乔艳丽
无线点餐系统需求分析
餐饮传统的点菜方式是纯人工操作,由服务员记录顾客点的菜,在具体工作中容易出现以下问题:
手写单据字迹潦草从而导致上错菜、传菜分单出错现象严重、加菜和查账程序较繁琐。
处理特殊口味有遗漏和偏差、客人催菜遗忘现象较频繁、计算账单易出错、不方便人员管理等等。
正因如此,无线点餐模式应运而生。
它不仅可以有效地提高餐饮业的工作效率,更可以规范服务体系,提高整体服务质量和管理水平,并为规模化经营提供了坚实的技术基础。
我们生活在一个充斥着数字技术的世界里,数字技术几乎侵入到我们生活的每个细节。
点餐系统在使用上不及Wi-Fi点餐系统便利:
服务员依然使用手持终端为顾客点餐,当消费者点完餐后,服务员将存储在手持终端内的点餐信息,对准布置在餐厅各个位置的红外接收端进行发射,接收端会将点餐信息通过网线传送到前台计算机。
前台计算机会对点餐信息进行分类处理,然后将点餐信息分别发送给收银台和厨房。
一登录模块
一
(1)
(1)登录模块Android客户端实现
首先,为了提高系统的安全性,要想使用该系统必须进行系统登录。
其次,每个点餐信息中都要用到登录用户信息,这样可以做到责任分明,工作严谨。
登录的基本流程是:
通过用户输入的用户名称和用户密码,到后台数据库做查询,如果有该用户则进入系统,否则提示用户输入错误。
创建一个Android工程,名称为“WirelessOrder_Client”。
在工程的res\layout目录下,创建一个名称为“login_system.xml“的布局文件。
创建一个名称为”oginActivity”的,Activity,在类的顶部声明用到的Editatext和Button组件。
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);
//通过findViewById方法实例化组件
loginBtn=(Button)findViewById(R.id.loginButton);
//通过findViewById方法实例化组件
userEditText=(EditText)findViewById(R.id.userEditText);
//通过findViewById方法实例化组件
pwdEditText=(EditText)findViewById(R.id.pwdEditText);
cancelBtn.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
finish();
}
});
loginBtn.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
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);
editor.putString("name",name);
mit();
}
//验证方法
privatebooleanvalidate(){
Stringusername=userEditText.getText().toString();
if(username.equals("")){
showDialog("用户名称是必填项!
");
returnfalse;
}
Stringpwd=pwdEditText.getText().toString();
if(pwd.equals("")){
showDialog("用户密码是必填项!
");
returnfalse;
}
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="+password;
//url
Stringurl=HttpUtil.BASE_URL+"servlet/LoginServlet?
"+queryString;
//查询返回结果
returnHttpUtil.queryStringForPost(url);
}
}
为了实现登录功能,Android需要通过网络访问后台的数据库进行查询。
Android访问网络的实现方法很多,如WebService,HTTP,直接使用WebView浏览器。
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);
returnrequest;
}
//获得Post请求对象request
publicstaticHttpPostgetHttpPost(Stringurl){
HttpPostrequest=newHttpPost(url);
returnrequest;
}
//根据请求获得响应对象response
publicstaticHttpResponsegetHttpResponse(HttpGetrequest)throwsClientProtocolException,IOException{
HttpResponseresponse=newDefaultHttpClient().execute(request);
returnresponse;
}
//根据请求获得响应对象response
publicstaticHttpResponsegetHttpResponse(HttpPostrequest)throwsClientProtocolException,IOException{
HttpResponseresponse=newDefaultHttpClient().execute(request);
returnresponse;
}
//发送Post请求,获得响应查询结果
publicstaticStringqueryStringForPost(Stringurl){
//根据url获得HttpPost对象
HttpPostrequest=HttpUtil.getHttpPost(url);
Stringresult=null;
try{
//获得响应对象
HttpResponseresponse=HttpUtil.getHttpResponse(request);
//判断是否请求成功
if(response.getStatusLine().getStatusCode()==200){
//获得响应
result=EntityUtils.toString(response.getEntity());
returnresult;
}
}catch(ClientProtocolExceptione){
e.printStackTrace();
result="网络异常!
";
returnresult;
}catch(IOExceptione){
e.printStackTrace();
result="网络异常!
";
returnresult;
}
returnnull;
}
//获得响应查询结果
publicstaticStringqueryStringForPost(HttpPostrequest){
Stringresult=null;
try{
//获得响应对象
HttpResponseresponse=HttpUtil.getHttpResponse(request);
//判断是否请求成功
if(response.getStatusLine().getStatusCode()==200){
//获得响应
result=EntityUtils.toString(response.getEntity());
returnresult;
}
}catch(ClientProtocolExceptione){
e.printStackTrace();
result="网络异常!
";
returnresult;
}catch(IOExceptione){
e.printStackTrace();
result="网络异常!
";
returnresult;
}
returnnull;
}
//发送Get请求,获得响应查询结果
publicstaticStringqueryStringForGet(Stringurl){
//获得HttpGet对象
HttpGetrequest=HttpUtil.getHttpGet(url);
Stringresult=null;
try{
//获得响应对象
HttpResponseresponse=HttpUtil.getHttpResponse(request);
//判断是否请求成功
if(response.getStatusLine().getStatusCode()==200){
//获得响应
result=EntityUtils.toString(response.getEntity());
returnresult;
}
}catch(ClientProtocolExceptione){
e.printStackTrace();
result="网络异常!
";
returnresult;
}catch(IOExceptione){
e.printStackTrace();
result="网络异常!
";
returnresult;
}
returnnull;
}
程序运行结果如下:
一
(2)登录模块服务器端实现
后台的服务器实现采用JDBC访问后台数据库,Servlet响应HttpRequest请求,并返会响应
结果。
为了完成该功能我们需要安装MySQL数据库并配置Tomcat服务器,这部分内容将不再赘述。
DBUtil工具类内容如下所示。
packagecom.amaker.util;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.SQLException;
importjava.util.Properties;
@authorhz.guo
publicclassDBUtil{
publicvoidcloseConn(Connectionconn){
try{
conn.close();
}catch(SQLExceptione){
e.printStackTrace();
}
}
publicConnectionopenConnection(){
Propertiesprop=newProperties();
Stringdriver=null;
Stringurl=null;
Stringusername=null;
Stringpassword=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);
returnDriverManager.getConnection(url,username,password);
}catch(Exceptione){
e.printStackTrace();
}
returnnull;
}
}
创建UserDao接口实现类UserDaoImpl.
packagecom.amaker.dao.impl;
importjava.sql.Connection;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importcom.amaker.dao.UserDao;
importcom.amaker.entity.User;
importcom.amaker.util.DBUtil;
/**
*
*@author郭宏志
*用户登录DAO实现类
*/
publicclassUserDaoImplimplementsUserDao{
/**
*通过用户名称和密码登录,登录成功返回User对象,登录失败返回null
*/
publicUserlogin(Stringaccount,Stringpassword){
//查询SQL语句
Stringsql="selectid,account,password,name,permission,remark"+
"fromuserTbl"+
"whereaccount=?
andpassword=?
";
//数据库连接工具类
DBUtilutil=newDBUtil();
//获得连接
Connectionconn=util.openConnection();
try{
//获得预定义语句
PreparedStatementpstmt=conn.prepareStatement(sql);
//设置查询参数
pstmt.setString(1,account);
pstmt.setString(2,password);
//执行查询
ResultSetrs=pstmt.executeQuery();
//判断用户是否存在
if(rs.next()){
//获得用户信息
intid=rs.getInt
(1);
Stringname=rs.getString(4);
intpermission=rs.getInt(5);
Stringremark=rs.getString(6);
//封装用户信息
Useru=newUser();
u.setId(id);
u.setAccount(account);
u.setPassword(password);
u.setName(name);
u.setPermission(permission);
u.setRemark(remark);
returnu;
}
}catch(SQLExceptione){
e.printStackTrace();
}fina
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 实训乔 艳丽 06
![提示](https://static.bdocx.com/images/bang_tan.gif)