• 这款项目是安卓点餐系统源码,有客户端和服务器交互的源码,带数据库。 对于想要熟悉服务器和客户端交互的人来说,是一款很好的软件系统。
  • 安卓移动开发课设,无线点餐系统,拥有客户端和服务器的完整代码可以直接运行,服务器的mysql数据库也完整给出了,课程设计的报告也在里面。
  • 这是一个基于Andriod的无线点餐系统,.net语言开发的服务器,java语言开发的客户端,分买家客户端和卖家客户端,用webservice进行服务器和客户端的交互,界面美观,亲测可用,当然还有很多不足的地方,拿出来和大家...
  • 前言: 点餐系统融合知识也很多,最多的部分都是网络。本教程是本人亲自写。如有转载,需写明原作者喔。点餐系统作用性我懒的说,什么时候想到了再编辑吧。
    前言:

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


    准备工作:
    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我建议各位用手机测试并开启网络,版本是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;
    
    	}
    最后打开服务器以及客户端打开,输入用户密码来测试下即可,登录部分我讲完了。有不明觉厉的地方在评论提出来
    展开全文
  • 这是为餐厅点餐和酒店点餐开发的一款点餐系统,我学习过程中写的一个学习项目,涉及的重要知识点有: 1、Mysql服务器连接Navicat数据库,并且获取和变更数据库内容; 2、客户端获取服务器发送的列表,并设置为二级...
  • 基于Android的网上点餐系统,客户端+服务器+数据库,MVC架构,开发平台Eclipse+MySQL,可运行。
  • 编写一个Android手机的点菜系统,能够让人们的生活更加便捷。将纸质菜单换为电子菜单,响应绿色低碳的健康消费理念。
  • android 点餐系统 构思

    2011-08-13 18:42:06
    一. 为什么要做这个项目?...我就想了一下,为什么不在android系统上做一个人呢,因为以后这个系统的普及度一定很高的。于是我就上网查了一下相关的项目。发现有好多人已经开始做了,我自己并没有调研,就附上别人

    一.          为什么要做这个项目?

     

    记的有一次看新闻,其中报道过台湾一家酒店使用ipad让客人自己点餐,客人可以使用这个ipad从全部菜中挑选自己喜欢的,又可以选择自己的特色的。还可以直接结帐。我就想了一下,为什么不在android 系统上做一个人呢,因为以后这个系统的普及度一定很高的。于是我就上网查了一下相关的项目。发现有好多人已经开始做了,我自己并没有调研,就附上别人调研的情况吧。(最近看不少人都在考虑无线点餐系统,我也做了一个,目前正在朋友的酒店测试和完善。我的目的是通过android软硬件结合,做行业应用,彻底改变目前落后的点菜方式,淘汰手工菜谱。本系统采用WIFI网络,设计的目标是不需要服务员干预,由客户自助点餐,有点像KTV点歌那种,让后通过网络将点菜信息分发至后厨无线打印机、前台收银服务器。为了知道客户真正需要什么,目前已经和十几家酒店客户进行沟通,通过对这个行业的深度分析及调研,设计出最优秀的产品。记得马云说过,只有实实在在能给社会提供价值东西,才会得到市场的认可,我希望能有对此项目感兴趣的朋友,能一起来做起来成立网络团队

    我从网上又看到成本的问题,网上是做如下解释:现在一个普通菜谱的成本为每本400-1000元,每年得更换2-4次,每年一个房间的菜谱成本就是800-4000元,而一个android平板的成本为1000~2000元,因此成本要低很多的。我发现网上的一些项目只是单纯的完成点菜功能而已,或只是PDA移动点餐。所以我想在平板上实现真真的给予客人点菜的自由权并且在点菜功能实现的前提下,可以加入一些娱乐功能,简单的比如看电影呀。

    与传统点菜比较:

    项目

    传统菜谱

    电子菜谱

    外观

    个性化制作封面

    个性化制作封面

    更换菜品

    每次制作新菜谱时才能更换

    随时更换

    菜品清洁

    贴条或服务器提醒

    随时设置不可见可不可点

    菜品信息

    菜品、价格及简单介绍

    菜名、价格、做法介绍,可以嵌入大量图文甚至视频

    附加信息

    健康提示、卡路里含量、配餐等

    推荐菜品

    制作菜谱时设定

    随时设定

    广告植入

    基本上没有

    可对自已或合作伙伴的产品进行演示推广

    自助点菜

    不能

    客人点餐可以形成菜单确认后提交服务员

    外观保持

    使用久了会出现磨损、脱页等

    更换封面,贴膜后保持常新

    风格

    不更换不可以变换

    根据酒店风格定制界面,春节、中秋、圣诞、情人节等可以更换不同皮肤,增强节日气氛。也可以根据婚宴、寿宴等不同需求个性化定制,彰显时尚品味

    制作成本

    500-200/,2/年,需要不间段地印刷,累计成本高

    首次投资成本略高,累计成本低

     

    二.             系统的模块划分

    1 顾客终端:该终端为顾客提供菜品搜索功能,顾客可以按菜品名或厨师名进行搜索,同时顾客可以看到菜品图片。顾客在点完菜品,点击“提交”按钮后,终端将把点菜消息发送到系统管理终端,系统管理终端登记点菜信息后向厨师终端转发点菜消息,表示做菜任务到达。将顾客的需求发送给系统管理端(平台是android系统的平板或手机)

    2)系统管理终端:该终端负责进行对菜品、厨师的管理,并且包含账户控制、收银、销售统计等操作。在收银时负责打印票据,向顾客终端发送清理原信息的消息。该终端同时负责监测顾客终端和厨师终端的在线情况,并负责所有的通信消息处理。接受顾客终端和厨师中断的需求。(一台xp电脑)

    3)厨师终端:该终端按“先来先服务”的原则为厨师分配做菜任务,并将菜品完成消息发送到系统管理端,可以由系统管理端进行处理也可以分离出单独一个模块。(一台或几台xp电脑)

    4)数据终端:该终端负责数据的存储。将菜的信息,顾客的信息,餐桌使用情况的信息保存起来。(一台装了sql 2005的服务器,可以和系统管理中端共享一台电脑)

     

    三.        系统的网络结构

     

    四个终端都通过路邮器相连起来,顾客终端用wifi与路由器相连。

    由于无线局域网传输距离的限制, 因此若脱离其无线服务覆盖范围时通信便会中断, 为解决此一问题须构建无缝的漫游连接. 802.11b为例以三个不重叠信道1,6,11为基础向外扩充, 如此当无线网卡由信道11之覆盖区漫游至信道6之覆盖区时, 便能自动切换至信道6之服务区而不中断联机.同理可再由信道6之覆盖区漫游至信道1之覆盖区.这个如何实现现在还没有一个实现方法。

     

    四.        系统的工作流程

     

    客人进入店中,服务员手持Pad查询空闲座位,带领客人进入座位,输入座位号,顾客人数进入系统,然后将Pad交给客人进行点餐。点餐完毕后提交发送到系统管理端,再发送给后厨进行打印制作。顾客就餐完毕,只接在Pad上面确认结账,收取客人款项后,结束服务。点餐到最后结帐都不在需要服务员。顾客也可以选择不在Pad上结帐,可以到前台也就是系统管理端结帐。

     

     

     

    点菜流程:

     

    五.             数据表

    本系统总共有9张表,即菜品表、菜销售表、点菜表、做菜表、管理员表、会员表,餐桌使用情况表,日志表和统计表,具体的表结构如表1--7

                                      表 1       菜品表

    Dishes(菜品表)设计

    字段名称

    数据类型

    主键

    数据长度

    数据范围

    默认值

    允许空

    字段说明

    dishid

    char

    8

    DISH0001-DISH9999

    DISH0001

    菜品编号

    dishname

    nchar

    50

     

     

    菜品名称

    dishprice

    float

     

    大于等于0.0

    0.0

    菜品单价

    dishdiscount

    float

     

    大于0小于等于1

    1

    菜品折扣

    dishpay

    float

     

    大于等于0小于等于菜品单价

    菜品单价*菜品折扣

    菜品折扣后的单价

    freq

    int

     

    大于等于0

    0

    累计评分次数,用于动态统计平均分

    scores

    int

     

    大于等于0

    0

    累计评价总分,用于动态统计平均分

    average

    int

     

    大于等于0

    0

    平均分,等于总分/评次,每次评分后将重新计算

     

    dishphoto

    image

     

     

     

    菜品图片

    dishvariety

    int

     

     

    0

    菜品口味

    (一位代表一种口味)

                                                                                                             

                                                                   2          菜销售表

    DishSales(菜销售表)设计

     

    字段名称

    数据类型

    主键

    数据长度

    数据范围

    默认值

    允许空

    字段说明

    dishedtoken

    int

     

     

    Auto-increase

    对属于一张桌子的菜单的标识

    dishedtime

    char

    19

     

     

    点菜时间,用于后厨按先来先服务原则分配做菜任务

    deskid

    int

     

    1-50

     

    桌号,记录发出点菜要求的顾客所在桌子

    dishid

    char

    8

    DISH0001-DISH9999

     

    菜品编号,记录顾客所点菜品信息

    amount

    int

     

    大于等于0

    0

    菜品份数,顾客对同一菜品所要求的量

    dishpay

    float

     

    大于等于0

     

    付款

                     

     

     

                                                        3  菜表(每个桌号对应一张表)

    DishedTable(点菜表)设计

     

    字段名称

    数据类型

    主键

    数据长度

    数据范围

    默认值

    允许空

    字段说明

    dishedtime

    char

    19

     

     

    点菜时间,用于后厨按先来先服务原则分配做菜任务

    deskid

    int

     

    1-50

     

    桌号,记录发出点菜要求的顾客所在桌子

    dishid

    char

    8

    DISH0001-DISH9999

     

    菜品编号,记录顾客所点菜品信息

    amount

    int

     

    大于等于0

    0

    菜品份数,顾客对同一菜品所要求的量

    dishvariety

    int

     

    大于等于0

     

    口味

    customers

    int

     

     

     

    顾客人数

    memberid

    char

    10

    0000000000-9999999999

     

    会员ID

    dishpay

    float

     

    大于等于0

     

    付款

    cooked

    bool

     

     

     

    是否已经做完

                     

                                                       

                                                                  4  做菜表(从点餐表中获取)

    CookingTable(做菜表)设计

    字段名称

    数据类型

    主键

    数据长度

    数据范围

    默认值

    允许空

    字段说明

    dishid

    char

    8

    DISH0001-DISH9999

    DISH0001

    菜品编号

    amount

    int

     

    大于等于0

    0

    菜品份数,顾客对同一菜品所要求的量

    dishvariety

    int

     

    大于等于0

     

    口味

                                               

                                                                    5      餐座使用情况表

    DeskUse(做菜表)设计

    字段名称

    数据类型

    主键

    数据长度

    数据范围

    默认值

    允许空

    字段说明

    deskid

    char

    8

    DISH0001- DISH9999

    COOK0001

    桌号

    use

    bool

     

     

     

    是否在使用

     

     

                                                                             6        管理员表

    Admin(管理员表)设计

    字段名称

    数据类型

    主键

    数据长度

    数据范围

    默认值

    允许空

    字段说明

    username

    nchar

    50

     

     

    系统管理员账户名称,作为该表的主键

    passwd

    char

    6

     

    000000

    账户密码,默认为“000000”

    permission

    int

     

    01

    0

    管理员权限,0代表超级管理员,1代表普通管理员

     

                                         表 7      会员表

    member(会员)设计

    字段名称

    数据类型

    主键

    数据长度

    数据范围

    默认值

    允许空

    字段说明

    memberid

    char

    10

     

     

    会员ID

    passwd

    char

    6

     

    000000

    账户密码,默认为“000000”

    membername

    char

    10

     

    0

    会员姓名

    customcounts

    int

     

     

    大于等于0

    0

    消费次数

    custompay

    float

     

     

    大于等于0

    0

    共消费金额

     

                                                                         8   销售统计表

    SalesStatistics(销售统计表)设计

    字段名称

    数据类型

    主键

    数据长度

    数据范围

    默认值

    允许空

    字段说明

    date

    char

    10

     

     

    日期

    sales

    float

     

    大于等于0.0

    0.0

    销售额,结账后将销售额进行累加

                                                                      

                                 9    日志记录表  

    Logs日志记录表)设计

    字段名称

    数据类型

    主键

    数据长度

    数据范围

    默认值

    允许空

    字段说明

    logid

    int

     

     

     

    Auto-increase

    日志标示,不断增加

    identity

    int

    10

     

     

    产生日志动作的身份

    0:管理员 1:顾客

    name

    nchar

    50

     

     

    管理员:帐户名

    顾客: 桌号

     

    .      总结

         这个只是一个草稿,还有需多要考虑的方面还没有设计,比如客户端和服务端通信格式的定义,现在离完成这个project还有很长的路要走,希望自己能坚持下去,完成属于自己的project,现在就构思这么多了,等以后在添加修改。

     

    展开全文
  • Android平台的无线点餐系统 ( 下载地址:http://pan.baidu.com/s/1hsFcGU4 密码:bjfr ) 第一讲.项目背景及功能演示 第二讲.框架设计及实体类JAR包说明 第三讲.首页ViewFlipper手势滑动效果实现 第四讲....
    Android平台的无线点餐系统
    ( 下载地址:http://pan.baidu.com/s/1hsFcGU4 密码:bjfr )

    第一讲.项目背景及功能演示
    第二讲.框架设计及实体类JAR包说明
    第三讲.首页ViewFlipper手势滑动效果实现
    第四讲.登录前台UI界面设计
    第五讲.登录后台服务器端代码实现
    第六讲.服务器端用户登录Servlet的封装
    第七讲.客户端用户登录功能实现
    第八讲.利用JSON+HttpPost实现用户注册
    第九讲.后台员工管理_添加员工信息(1)
    第十讲.后台员工管理_添加员工信息(2)
    第十一讲.后台员工管理_修改员工信息(1)
    第十二讲.后台员工管理_添加员工信息(2)
    第十三讲.后台菜系管理_添加菜系(1)
    第十四讲.后台管理_菜系类别管理
    第十五讲.后台菜系管理_添加菜系(2)
    第十六讲.利用jspSmartUpload组件实现后台食品管理图片上传功能
    第十七讲.后台管理-食品添加Client端实现(1)
    第十八讲.后台管理-食品添加Client端实现(2)
    第十九讲.后台菜品管理+预订管理Servlet实现核心代码讲解
    第二十讲.会员预订_点菜_并桌_转桌_换桌核心功能实现讲解
    第二十一讲.会员下单_结账_退单等核心功能实现讲解
    展开全文
  • 思路其实就是上一篇博客的内容,完善了一下代码,实现了从android发送一句话给服务器,然后服务器把这句话再发回来。 能够实现这样的正常通信,后面的工作应该不会太难。下面开始贴些主要的代码。 首先是服务器...

    今天开始做的,由于是根据以前的一个小项目改的,不是从头做的,所以没法把所有代码共享,就在这里记录一下每天的思路,希望能给需要的同学抛砖引玉。

    思路其实就是上一篇博客的内容,完善了一下代码,实现了从android发送一句话给服务器,然后服务器把这句话再发回来。

    能够实现这样的正常通信,后面的工作应该不会太难。下面开始贴些主要的代码。

    首先是服务器端,用了两个类,一个MyServer,处理android发来的消息;一个ServerThread,MyServer每接受到一个用户请求,就开启一个ServerThread去处理。

    MyServer:

    package server;
    
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class MyServer {
    
    	ServerSocket server = null;
    
    	public MyServer() {
    		this.startServer();
    	}
    
    	void startServer() {
    		int i = 0;
    		try {
    			server = new ServerSocket(8888, 3);
    			System.out.println("==========start===========");
    			while (true) {
    				Socket socket = server.accept();
    				i++;
    				System.out.println("第" + i + "个用户连接成功!");
    				new Thread(new ServerThread(socket)).start();
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    }


    端口号写死的为8888。

    ServerThread:

    package server;
    
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.net.Socket;
    
    public class ServerThread implements Runnable {
    
    	private Socket socket;
    
    	public ServerThread(Socket socket) {
    		this.socket = socket;
    	}
    
    	// 任务是为一个用户提供服务
    	@Override
    	public void run() {
    		try {
    			try {
    				// 读取客户端传过来信息的DataInputStream
    				DataInputStream in = new DataInputStream(
    						socket.getInputStream());
    				// 向客户端发送信息的DataOutputStream
    				DataOutputStream out = new DataOutputStream(
    						socket.getOutputStream());
    				while (true) {
    					// 读取来自客户端的信息
    					String accpet = in.readUTF();
    					System.out.println(accpet);
    					out.writeUTF("服务器:" + accpet);
    				}
    			} finally {// 建立连接失败的话不会执行socket.close();
    				socket.close();
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    
    }
    

    线程开始后一直接受客户端发来的消息,然后返回给客户端。

     

    以上是服务器端的内容,能够同时处理多个用户的请求。

    下面是android客户端的代码。

    MainActivity:

    package jason.smartdinner;
    
    import serverhelper.ClientHelper;
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
    	public static final String TAG = "MAINACTIVITY";
    
    	void log(String msg) {
    		Log.d(TAG, msg);
    	}
    
    	TextView output;
    	EditText input;
    	Button send;
    	ClientHelper clientHelper;
    	Handler handler = new Handler() {
    		public void handleMessage(Message msg) {
    			switch (msg.what) {
    			case 1:
    				Bundle b = msg.getData();
    				String msg2 = b.getString("update");
    				log(msg2);
    				output.setText(msg2);
    				break;
    			default:
    				break;
    			}
    		};
    	};
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		new Thread() {
    			public void run() {
    				clientHelper = new ClientHelper();
    			}
    		}.start();
    		output = (TextView) findViewById(R.id.output);
    		input = (EditText) findViewById(R.id.input);
    		send = (Button) findViewById(R.id.send);
    		send.setOnClickListener(new OnClickListener() {
    
    			@Override
    			public void onClick(View v) {
    				// TODO Auto-generated method stub
    				new Thread() {
    					@Override
    					public void run() {
    						// TODO Auto-generated method stub
    						super.run();
    						String message = input.getText().toString();
    						clientHelper.send(message);
    						String receive = clientHelper.read();
    						log(receive);
    						Message update = new Message();
    						update.what = 1;
    						Bundle bundle = new Bundle();
    						bundle.putString("update", receive);
    						update.setData(bundle);
    						handler.sendMessage(update);
    					}
    				}.start();
    			}
    		});
    	}
    
    }
    


    大家会注意到里面我用了好几个线程,这里需要注意的是,android的网络连接请求不能再主线程里,否则会报错android.os.NetworkOnMainThreadException

    所以每个涉及网络连接的都新开了线程去处理。其他就简单了,处理下界面更新。

    ClientHelper:

    package serverhelper;
    
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.net.Socket;
    
    import android.util.Log;
    
    public class ClientHelper {
    	
    	public static final String TAG = "CLIENTHELPER";
    	void log(String msg){
    		Log.d(TAG, msg);
    	}
    	
    	DataInputStream in;
    	DataOutputStream out;
    	Socket socket = null;
    
    	public ClientHelper() {
    		try {
    			socket = new Socket("192.168.1.100", 8888);
    			in = new DataInputStream(socket.getInputStream());
    			out = new DataOutputStream(socket.getOutputStream());
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    
    	public void send(String msg) {
    		try {
    			out.writeUTF(msg);
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    
    	public String read() {
    		String accept = "未接收到信息";
    		try {
    			accept = in.readUTF();
    			log(accept);
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return accept;
    	}
    }
    


    这个就是负责与服务器交互的类,发送和接受数据两个方法。其中socket的ip地址是我电脑的本地ip,上篇博客里有提到。

    代码就先不上传了,基本上设计到的都在上面贴出来了,细心看看就明白了,完全可以自己搞出来。

     

    作者:jason0539

    微博:http://weibo.com/2553717707

    博客:http://blog.csdn.net/jason0539(转载请说明出处)

    展开全文
  • 基于Android studio开发的移动点餐系统,可以在上面进行下单,添加购物车,查看订单,查看外卖等一系列功能。这学期做的项目。前端加后台还有数据库。
  • 本人自己的优秀毕业设计,android客户端的无线点餐,另外自己还做了一个网页版本(服务端)的,客户端主要是给饭馆服务人员使用,而网页版本主要给客人使用,客人可以预定和排号。 内附上:自己毕业设计的全部资料,...
  • android 点餐系统

    2011-07-08 22:55:20
    最近进入一家新公司,这家公司是做手机软件开发的。现在自己是试习期,主要任务是看书。看了有一个月了实在是无聊,就想做个手机软件来...顾客系统管理,厨师,数据库。它们的主要流程如下: 其他的系统分析

           最近进入一家新公司,这家公司是做手机软件开发的。现在自己是试习期,主要任务是看书。看了有一个月了实在是无聊,就想做个手机软件来玩玩。想到之前看到一篇报道,台湾有家餐饮公司用IPAD给客户自助点餐。我就想再android系统上做一下。想了也有一个多星期了,准备开始开工了。

          系统主要是四个模块。顾客端,系统管理端,厨师端,数据库端。它们的主要流程如下:

          其他的系统分析之后会发上来,询问各位的意见

    展开全文
  • 近些年餐饮行业蓬勃发展,规模也逐渐增大,但却没有相应地重视点菜系统,餐厅企业经常遇到顾客抱怨上菜速度慢、漏菜、丢单、 漏单,餐厅的成本很难控制等问题,加之都市生活节奏的加快,消费者在外出就餐时,就有了...
  • 本项目适合对SSM框架有一定了解的同学。 前端:jsp + BootStrap 后端:SSM 权限控制:Shiro ...有需要的同学可以关注公众号【秃头哥编程】,回复【ssm点餐系统】即可获取源码。 注意:我不收费,...
  • 3.2.1客户端(android手机)整体框架 14 3.2.2服务器(Tomcat)整体框架 15 3.2.3商家后台(网页版)买卖整体框架 16 3.3架构讲解 17 3.3.1客户端(android手机) 17 3.3.2服务器(Tomcat) 18 3.3.3商家后台(网页版) ...
  • 简单总结一下,这个系统是一个外卖点餐系统,也就是仿美团饿了么,也是当时我的毕业设计,花费了我很多精力,主要包括了移动端App、服务端(中台)和商家的后台管理。答辩完后我就将移动端源码放到了GitHub上去了,...
  • 为什么做项目? 1、巩固之前所学的知识,查漏补缺 2、通过做项目,锻炼在实际项目中解决问题的能力 3、锻炼与他人合作的能力客户端要求: 1、给服务器发请求 2、打印菜谱 3、下单 4、结账 ...
  • 一款非常不错的点餐订餐系统应用android源码介绍给大家。 源码下载; http://code.662p.com/view/1579.html
  • 系统的模块划分 1) 顾客终端:该终端为顾客提供菜品搜索功能,顾客可以按菜品名...将顾客的需求发送给系统管理(平台是 android系统的平板或手机) 2)系统管理终端:该终端负责进行对菜品、厨师的管理,并且包含账
1 2 3 4 5 ... 20
收藏数 565
精华内容 226