Android点餐系统教程(登录篇)

Android点餐系统教程(登录篇)前言:点餐系统融合知识也很多,最多的部分都是网络。本教程是本人亲自写。如有转载,需写明原作者喔。点餐系统作用性我懒的说,什么时候想到了再编辑吧。

大家好,又见面了,我是你们的朋友全栈君。前言:

点餐系统融合知识也很多,最多的部分都是网络。本教程是本人亲自写。如有转载,需写明原作者喔。点餐系统作用性我懒的说,什么时候想到了再编辑吧。


准备工作:
1.Java EE的eclipse。当然你eclipse能建web项目也可以
2.mysql和Navicat for mysql,因为服务器需要用mysql作为后台数据库。Navicat for mysql是管理mysql可视化软件。
3.Tomcat7.0。这个东西大家都知道的。
以上软件,各位同学自行下载。我就不传了。


开发技术:Android客户端通过后台服务网络访问服务器。通信采用Tomcat7.0。服务器采用Servlet响应客户请求

主要功能:
1.登录和注册,此点餐只给员工,所以又叫员工端
2.功能主菜单
3.点餐
4.结账
5.并桌/改桌
6.桌子查询


服务器端:
准备的工具收集齐了。首先我们先把服务器先搭建好。服务器工作比客户端还要多的多,我们采用mvc+dao模式。打开eclipse,按菜单Window-Perfernces-Server-Runtime Enviroments(运
行环境),这个动作在于先把Tomcat环境搭建起来。然后是数据库。打开Navicat for mysql(不过呢你要把mysql先装好),数据库名字自己起。新建一张表叫usertbl,字段分别为id(自动增长+键),account,password,name,gender,permission,remark.建完后可以往表添加数据。作为验证的依据。接下来我们要新建一个web项目,注意了是web项目。因为服务器需要访问数据库,所以要有个访问mysql架包以及json解析包.如果有了务必WEB-INF下的lib文件下.下面就是写访问mysql的类了。在src下新建一个包如com.order.util,存放连接数据库的包。因为还需要配置文件。配置文件新建一个文件,把文件名改成DBConfig.properties.在这个配置文件写连接mysql一些信息:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost/gourmet_db?useUnicode=true&characterEncoding=utf-8
username=你的mysql的用户名
password=你的mysql的用密码

注意这里的gourmet_db是你数据库的名字

下面需要连接数据库,因此需要一个连接工具类:

public class DBUtil {
	//关闭数据库
	public void closeConn(Connection conn){
		try {
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	//打开数据库连接
	public Connection openConnection() {
		//实例化Properties
		Properties prop = new Properties();
		//驱动
		String driver = null;
		//数据库连接url
		String url = null;
		//用户名
		String username = null;
		//密码
		String password = null;
		try {
			//加载配置文件
			prop.load(this.getClass().getClassLoader().getResourceAsStream(
					"com/order/util/DBConfig.properties"));
             //获取数据库驱动
			driver = prop.getProperty("driver");
			//获得数据库url
			url = prop.getProperty("url");
			//获取用户名
			username = prop.getProperty("username");
			//获取密码
			password = prop.getProperty("password");
			//注册驱动
			Class.forName(driver);
			System.out.println("数据库名称:"+driver+"数据库用户名:"+username+"数据库密码是:"+password);
			//返回数据库连接
			return DriverManager.getConnection(url, username, password);
		} catch (Exception e) {
			e.printStackTrace();
		}

		return null;
	}

}

既然涉及到面向对象的话,那么实体类是少不了。得忘记说了创建一个com.order.entity包了

  private int id;
	// 账号
	private String account;
	// 密码
	private String password;
	// 用户名称
	private String name;
	// 性别
	private String gender;
	// 权限
	private int permission;
	// 备注
	private String remark;............Get和Set省略

接下来就是重点了Dao+Serlvet了,Dao就是写一个接口,然后去实现它而已,那么肯定创建一个Userdao的包吧。

        public User login(String account,String password);
        public int UpdatePWD(String account,String opwd,String npwd);
	public int changeId(String username);
	public int addUser(String username,String pwd);
	public boolean hasUser(String username);

第一个方法是登录方法,第二个修改密码,第三个根据用户名返回ID,第四个注册用户,第五个是检查是否存在这个用户。写好了接口。必须去实现它.不要创建一个包,专门实现接口的包如UserDaoImpl。在这个类声明三个类:DBUtil util,Connection conn,User user = null;同时创建一个构造函数,不创建的话导致连接数据库无法关闭。为了节约时间。我们只写第一个方法,sql语句少不了。然后获得预定义语句,接下来设置查询参数并封装用户参数。

  public User login(String account, String password) {
		// 查询SQL语句
		String sql = " select id,account,password,name,permission,remark "
				+ " from usertbl " + " where account=? and password=? ";
		// System.out.println(account + "  " + password);
		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;
	}

接下来就是Servlet。注意新建一个是Servlet而不是类。如果你通过类去继承servelt恐怕不行。Servlet里通过 request.getParameter获取请求参数,再调用login方法,响应结果信息。因为需求要求用get方式。所以我们要写在doGet里。从下面代码用Json形式返回给客户端,所以客户端也用Json形式请求:

  response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		String username = request.getParameter("name");
		String password = request.getParameter("paw");
		System.out.println("该用户名:"+username+"密码是:"+password);
		JSONObject json = new JSONObject();
		if(request.getParameter("category").equals("user")){
			UserDao dao = new UserDaoImpl();
			// 获得客户端请求参数
			User u = dao.login(username, password);
			if(u!=null){
				try {
					json.put("rt", "200");
					json.put("rtmsg", "登录成功");
				} catch (JSONException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}else{
				try {
					json.put("rt", "21");
					json.put("rtmsg", "用户名或者密码错误");
				} catch (JSONException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		}
			out.print(json.toString());
		}

Android客户端:

最终如图:

Android点餐系统教程(登录篇)Android点餐系统教程(登录篇)
android我建议各位用手机测试并开启网络,版本是4.2.因为现在手机都是4.0以上。首先建个包存放Activity的包。先创建一个BaseActivity。这个Activity作用在于把重复的操作全部写在这个类如横屏竖屏是否全屏等。因为还需要ProgressDialog表示进度状态.创建两个类Login和Main。前者是登录,后者是主菜单。Login两个EditText,三个按钮。背景颜色什么的自己设置。我们要采用Handler+Thread做网络获取的工作。其他功能也是如此。在此之前我们需要一个类来通过服务器验证,所以要有HttpUtil类,当然这个类自定义的。此类专门从服务器获取并封装起来。因为用户在EditText输入后,客户端提交后服务器看你编辑框输入的东西和数据库进行匹配,不一致服务器那边显示错误。一致了直接进去主菜单,封装方法如下,既然服务器用Get,那么客户端少不了也要用Get,你要用Post请求没什么反应的。这里 LOGIN_URL指的是登录用户的Servlet类,后面拼接字符串。如果数据库有数据不妨先测试下这拼接字符。如果服务器返回json数据的话,那么表示成功了。接着通过httpClient.execute执行这个拼接字符。如果返回码是200把结果返回出来。再用JSONObject把这个result传进来并用getString获取,再回到主界面只要调用LoginIn方法即可。LoginIn方法如下:

/**
	 * 使用HttpGet判断用户名+密码是否正确
	 */
	public static String LoginIn(String name, String paw) {
		HttpResponse response;
		String result;
		JSONObject jsonObject;
		// 拼接字符
		String url = LOGIN_URL + "?name=" + name + "&paw=" + paw
				+ "&category=user";
		HttpGet httpGet = new HttpGet(url);
		try {
			response = httpClient.execute(httpGet);
			if (response.getStatusLine().getStatusCode() == 200) {
				result = EntityUtils.toString(response.getEntity(), HTTP.UTF_8);
				jsonObject = new JSONObject(result);
				return jsonObject.getString("rtmsg");
			} 
		} catch (ClientProtocolException e) {
			
			e.printStackTrace();
		} catch (IOException e) {
		
			e.printStackTrace();
		} catch (JSONException e) {
	
			e.printStackTrace();
		}
		return null;

	}

最后打开服务器以及客户端打开,输入用户密码来测试下即可,登录部分我讲完了。有不明觉厉的地方在评论提出来

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150971.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 浮点数规格化表示例题_浮点数规格化阶码表示

    浮点数规格化表示例题_浮点数规格化阶码表示一、浮点数的表示格式浮点数表示法是指以适当的形式将比例因子表示在数据中,让小数点的位置根据需要而浮动。这样,在位数有限的情况下,既扩大了数的表示范围,又保持了数的有效精度。阶码:阶码是整数,阶符和m位阶码的数值部分共同反映浮点数的表示范围及小数点的实际位置,常用移码或补码表示。IEEE754标准中采用移码的表示形式。尾数:数符表示浮点数的符号,尾数的数值部分的位数n反映浮点…

    2025年6月15日
    2
  • IntentService的原理及使用

    在Android开发中,我们或许会碰到这么一种业务需求,一项任务分成几个子任务,子任务按顺序先后执行,子任务全部执行完后,这项任务才算成功。那么,利用几个子线程顺序执行是可以达到这个目的的,但是每个线程必须去手动控制,而且得在一个子线程执行完后,再开启另一个子线程。或者,全部放到一个线程中让其顺序执行。这样都可以做到,但是,如果这是一个后台任务,就得放到Service里面,由于Service和Ac

    2022年4月7日
    37
  • 纠结应该先学Python还是Java?看完就有数了

    纠结应该先学Python还是Java?看完就有数了准备学习编程前,你一定会打开电脑搜索一下“先学Python还是先学Java?”扑面而来的是海量回答。如果你问一名Java程序员,肯定会建议你先学Java,因为他们认为Python像个乳臭未干的黄毛小子。但如果你问Python程序员,可能会得到一个完全相反的答案,他们认为Java是刻板啰嗦的老大爷,而人生苦短,我用Python。但别担心,今天我们将会从语言特色学习曲线职业方向市场需求…

    2022年7月8日
    19
  • 抖音挺火的机房蹦迪代码「建议收藏」

    最近抖音乃至全网这个机房蹦迪代码很火今天分享下代码.桌面新建一个文档文件,后缀名改为bat,然后右击该文件点击编辑,输入下方代码保存双击运行即可!colorecho开始蹦迪color1aecho开始蹦迪color2becho开始蹦迪color3cecho开始蹦迪color4decho开始蹦迪color…

    2022年4月14日
    348
  • 算法总结——大整数乘法

    算法总结——大整数乘法问题描述求两个不超过200位的非负整数的积。输入数据有两行,每行是一个不超过200位的非负整数,没有多余的前导0。输出要求一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。 输入样例1234567890098765432100输出样例1219326311126352690000解题思路在下面的例子程序中,用

    2022年6月2日
    41
  • SecondCopy 2000 简单说明

    SecondCopy 2000 简单说明

    2021年8月7日
    62

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号