【Android】线上自助点餐系统

这篇具有很好参考价值的文章主要介绍了【Android】线上自助点餐系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

效果视频

【Android】线上自助点餐系统

商品选购界面

效果图

【Android】线上自助点餐系统

商品数据

由于没有服务器,无法网络获取商品信息,故化繁从简,将需要的商品信息保存成xml文件,次项目将商品信息分为三个文件:标题文件,商品详细信息文件,商品图片文件。

商品标题文件
<resources>
    <string-array name="title">
        <item>把酒言欢</item>
        <item>爆炒干锅</item>
        <item>海鲜派对</item>
        <item>辣度自选</item>
        <item>素菜最爱</item>
        <item>旺季龙虾</item>
        <item>无肉不欢</item>
        <item>主食饱腹</item>
    </string-array>
</resources>
商品详细文件信息

由于篇幅过长,就没有显示全部商品信息,每一个商品信息分为:商品名称,商品规格,商品价格三个小类

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="content">
<!--        title:把酒言欢-->
        <item>可乐</item>
        <item>一瓶</item>
        <item>3.00</item>

        <item>雪花</item>
        <item>一瓶</item>
        <item>5.00</item>

        <item>怡宝</item>
        <item>一瓶</item>
        <item>2.00</item>
    </string-array>

</resources>
商品图片

由于篇幅过长,例举部分商品图片信息

<resources>
    <integer-array name="icon">
        <item>@drawable/kele</item>
        <item>@drawable/xuehua</item>
        <item>@drawable/yibao</item>
            </integer-array>
</resources>

添加商品数据

解析左侧标题数据
    private void InitTitle(){
        String[] titleArray = getResources().getStringArray(R.array.title);
        for (int i = 0; i < titleArray.length; i++) {
            goodsTitle = new Goods.GoodsTitle(titleArray[i],i );
            titleList.add( goodsTitle );
        }
    }
解析右侧商品数据
private void InitContent(){
        TypedArray iconArray = getResources().obtainTypedArray(R.array.icon);
        int index = 0;
        String[] content = getResources().getStringArray(R.array.content);
        for (int i = 0; i < content.length ; i+=3) {
            //if (index < iconArray.length())
            /*把酒言欢*/
            if ( i < 3){
                goodsContent = new Goods.GoodsContent(  iconArray.getResourceId(index++,0), content[i], content[i+1], Float.parseFloat(content[i+2]),R.drawable.icon_add,R.drawable.icon_sub,0,0 );
            }else if (i < 8){
                /*爆炒干锅*/
                goodsContent = new Goods.GoodsContent( iconArray.getResourceId(index++,0), content[i], content[i+1], Float.parseFloat(content[i+2]),R.drawable.icon_add,R.drawable.icon_sub,0,1 );
            }else if ( i  < 12){
                /*海鲜派对*/
                goodsContent = new Goods.GoodsContent( iconArray.getResourceId(index++,0), content[i], content[i+1], Float.parseFloat(content[i+2]),R.drawable.icon_add,R.drawable.icon_sub,0,2 );
            }else if ( i < 16){
                /*辣度自选*/
                goodsContent = new Goods.GoodsContent( iconArray.getResourceId(index++,0), content[i], content[i+1], Float.parseFloat(content[i+2]),R.drawable.icon_add,R.drawable.icon_sub,0,3 );
            }else if ( i < 22){
                /*素菜最爱*/
                goodsContent = new Goods.GoodsContent( iconArray.getResourceId(index++,0), content[i], content[i+1], Float.parseFloat(content[i+2]),R.drawable.icon_add,R.drawable.icon_sub,0,4 );
            }else if ( i < 25){
                /*旺季龙虾*/
                goodsContent = new Goods.GoodsContent( iconArray.getResourceId(index++,0), content[i], content[i+1], Float.parseFloat(content[i+2]),R.drawable.icon_add,R.drawable.icon_sub,0,5 );
            }else if ( i < 28){
                /*无肉不欢*/
                goodsContent = new Goods.GoodsContent( iconArray.getResourceId(index++,0), content[i], content[i+1], Float.parseFloat(content[i+2]),R.drawable.icon_add,R.drawable.icon_sub,0,6 );
            }else
                /*主食饱腹*/
                goodsContent = new Goods.GoodsContent( iconArray.getResourceId(index++,0), content[i], content[i+1], Float.parseFloat(content[i+2]),R.drawable.icon_add,R.drawable.icon_sub,0,7 );

            contentList.add( goodsContent );
        }
    }

左侧标题与右侧商品双向绑定

我们在添加左侧标题的时候有一个参数,为每一个小类的标识。同样在添加商品数据的时候,根据商品所属小类进行了分类。

private void InitListener(){
        titleAdapter.setOnItemClickListener( new BaseQuickAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
                String[] titleArray = getResources().getStringArray(R.array.title);
                titleAdapter.setSelection( position );
                titleAdapter.notifyDataSetChanged();
                contentManager.scrollToPositionWithOffset( titleArray.length,0 );
            }
        } );
        mGoodsContent.addOnScrollListener( new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled( recyclerView, dx, dy );
                int firstPosition = contentManager.findFirstVisibleItemPosition();
                goodsContent = contentList.get(firstPosition);
                int subId = goodsContent.getSubId();
                int pos = 0;
                for (int i = 0; i < titleList.size(); i++) {
                    int id = titleList.get(i).getId();
                    if ((subId == id)) {
                        pos = i;
                    }
                }
                titleAdapter.setSelection(pos);
                //mGoodsTitle.scrollToPosition( pos );
                titleAdapter.notifyDataSetChanged();

            }
        } );

加减按钮监听

对每一个商品的加减按钮进行点击事件监听

 contentAdapter.setOnItemChildClickListener( new BaseQuickAdapter.OnItemChildClickListener() {
            @Override
            public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
                double  Price = contentList.get( position ).getPrice();
                switch (view.getId()){
                    case R.id.Add:
                        int numberAdd = contentList.get( position ).getNumber();
                        numberAdd++;
                        Monetary(Price);
                        contentList.get( position ).setNumber( numberAdd );
                        contentAdapter.notifyDataSetChanged();
                        //Toast.makeText( FunctionActivity.this,"Add"+Price,Toast.LENGTH_SHORT ).show();
                        break;
                    case R.id.Sub:
                        int numberSub = contentList.get( position ).getNumber();
                        if (numberSub > 0 ){
                            numberSub--;
                            contentList.get( position ).setNumber( numberSub );
                            LessMoney(Price);
                        }else if (numberSub < 0){
                            contentList.get( position ).setNumber( 0 );
                        }
                        contentAdapter.notifyDataSetChanged();
                        //Toast.makeText( FunctionActivity.this,"Sub"+Price,Toast.LENGTH_SHORT ).show();
                        break;
                }
            }
        } );

并且每次点击事件更新所选商品总额,并且对所选商品下限设定为15元,方才能进行支付。

 private void Monetary(double Money){
        TotalMoney+=Money;
        money.setText( doubleToString(TotalMoney) );
        if (TotalMoney > 15){
            MoreThanStyle();
        }else {
            LessStyle();
        }
    }
    private void LessMoney(double Money){
        TotalMoney-=Money;
        if (TotalMoney < 15){
            LessStyle();
            money.setText( 0+"" );
        }else {
            MoreThanStyle();
            money.setText( doubleToString(TotalMoney) );
        }
    }

所选商品存入数据库

将所选的商品信息保存到数据库,方便对其进行存取

private void GotoSettlement(){
        String user = (String) sp.GetData(FunctionActivity.this,"UserName_login","");
        String pass = (String) sp.GetData(FunctionActivity.this,"PassWord_login","");
        for (int i = 0; i <contentList.size() ; i++) {
            int num = contentList.get( i ).getNumber();
            if (num > 0){
                /*插入数据为null*/
                //Toast.makeText( context,""+num,Toast.LENGTH_SHORT ).show();
                goodsList = new GoodsList(user,pass, contentList.get( i ).getGoodsIMG(),contentList.get( i ).getContent(),contentList.get( i ).getPrice(),contentList.get( i ).getNumber(),R.drawable.icon_sub,R.drawable.icon_add );
                dao.Insert( goodsList );
            }
        }
    }

商品复选

此界面可以对所选商品进行复选,可以看见商品总额,并对其进行最后确认

效果图

【Android】线上自助点餐系统

取出商品数据

从数据库中将用户所选商品进行取出,并添加到此适配器中

 private void InitData(){
        goodsLists = dao.QueryAll();
        for (int i = 0; i <goodsLists.size() ; i++) {
            goodsList = new GoodsList(goodsLists.get(i).getUserName(),goodsLists.get(i).getPassWord(), goodsLists.get( i ).getImg(),goodsLists.get( i ).getName(),goodsLists.get( i ).getPrice(),goodsLists.get( i ).getNumber(),goodsLists.get( i ).getSub(),goodsLists.get( i ).getAdd() );
            dataList.add( goodsList );
        }
    }

商品清空

将适配器中所有子项删除

goodsAllClear.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                goodsListAdapter.removeAllItem( dataList );
                goodsTotalNumber.setText( 0+"" );
                goodsTotalPrice.setText( 0+"" );
            }
        } );

商品增删

private void Listener(){
        goodsListAdapter.setOnItemChildClickListener( new BaseQuickAdapter.OnItemChildClickListener() {
            @Override
            public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
                int num = dataList.get( position ).getNumber();
                double price = dataList.get( position ).getPrice();
                switch (view.getId()){
                    case R.id.goodsAdd:
                        goodsListAdapter.addPrice(dataList,price,position,num);
                        InitBarData();
                        //Toast.makeText( GoodsListActivity.this,"Add"+num,Toast.LENGTH_SHORT ).show();
                        break;
                    case R.id.goodsSub:
                        goodsListAdapter.subPrice(dataList,price,position,num);
                        InitBarData();
                        //Toast.makeText( GoodsListActivity.this,"Sub"+num,Toast.LENGTH_SHORT ).show();
                        break;
                }
            }
        } );
    }

支付界面

效果图

【Android】线上自助点餐系统
密码匹配

此控件为自定义view,具体代码不展示,有兴趣的可以观看另外一篇文章,链接已挂
人脸支付与密码支付

payPassWord.setOnTextFinishListener(new PayPwdEditText.OnTextFinishListener() {
            @Override
            public void onFinish(String str) {
                String Pay = "000000";
                if (str.equals( Pay ))
                {
                    toastFormat.setText("支付成功");
                    toastFormat.show();
                    startActivity(new Intent(PaymentActivity.this,PaySuccessActivity.class));
                }else {
                    toastFormat.setText("密码错误");
                    toastFormat.show();
                    payPassWord.clearText();
                }
            }
        });

支付成功

效果图

【Android】线上自助点餐系统

SharedPreferences

利用SharedPreferences完成数据传递,关于SharedPreferences封装可以观看另外一篇文章。

sp = SP.getInstance();
        money = (String) sp.GetData(PaySuccessActivity.this,"TotalPrice","");

历史数据图表化

此图标工具采用第三方APIhellocharts

效果图

【Android】线上自助点餐系统

数据初始化

从数据库取出购买商品数据

 dao = new Dao(context);
        goodsLists = dao.QueryAll();
        Totalnum = goodsLists.size();
X轴

从数据库中取出商品名称,并作为X轴数据

for (int i = 0; i <goodsLists.size() ; i++) {
            title.add(goodsLists.get(i).getName());
        }
Y轴

分为内外两层循环,外循环觉得总的小类,内循环决定一个小类有几根柱子;例如:用户购买了4个商品,分别显示商品的价格以及数量,则外循环为4,内循环为2;文章来源地址https://www.toymoban.com/news/detail-478304.html

 for (int j = 0; j < Totalnum ; j++) {
            mPointValues = new ArrayList<>();
            for (int i = 0; i < single; i++) {
                mPointValues.add(new SubcolumnValue((goodsLists.get(j).getPrice()), color.get(j)));
                //值的大小、颜色
                //设置X轴的柱子所对应的属性名称(底部文字)
                axisXValues.add(new AxisValue(j).setLabel(title.get(j)));
            }
            Column column = new Column(mPointValues);
            ColumnChartValueFormatter chartValueFormatter = new SimpleColumnChartValueFormatter(2);
            column.setFormatter(chartValueFormatter);
            column.setHasLabelsOnlyForSelected(false);
            column.setHasLabels(true);
            //column.setValues(mPointValues);
            //将每个属性得列全部添加到List中
            //添加了7个大柱子Column,单个大柱子里面mPointValues大小为3(自行调整)
            columns.add(column);
        }

尾言

由于篇幅原因,并未将全部代码贴出

到了这里,关于【Android】线上自助点餐系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于微信小程序的奶茶自助点餐单送餐系统的设计与实现(源码+论文)_v_156

    摘   要 移动互联网时代的到来,智能手机的普及,在众多手机软件中,微信被广大用户认可并广泛被使用。随着微信的发展,微信的功能越来越齐全,越来越多的个人以及企业都看大了微信营销的优势,都逐渐加入都了微信营销中,即微商。其信息传播速度快的特点,能都

    2024年02月03日
    浏览(38)
  • 微信小程序nodejs+vue+uniapp高校食堂线上预约点餐系统

    本次设计任务是要设计一个食堂线上预约点餐系统,通过这个系统能够满足管理员及学生的食堂线上预约点餐分享功能。系统的主要包括首页、个人中心、学生管理、菜品分类管理、菜品管理、关于我们管理、意见反馈、系统管理、订单管理等功能。  开发语言 node.js 框架:

    2024年02月12日
    浏览(55)
  • 基于微信小程序的ssm食堂线上预约点餐系统源码和论文

           在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括 食堂线上预约点餐系统 的网络应用,在外国线上管理系统已经是很普遍的方式,不过 国内的 线上管理系统 可能 还处于起步阶段 。食堂线上预约点餐系统 具有食堂线上预约点餐信息管

    2024年03月11日
    浏览(80)
  • 【Vue H5项目实战】从0到1的自助点餐系统—— 搭建脚手架(Vue3.2 + Vite + TS + Vant + Pinia + Node.js)

    H5 项目基于 Web 技术,可以在智能手机、平板电脑等移动设备上的浏览器中运行,无需下载和安装任何应用程序,且H5 项目的代码和资源可以集中在服务器端进行管理,只需更新服务器上的代码,即可让所有顾客访问到最新的系统版本。 本系列将以肯德基自助点餐页面为模板

    2024年02月13日
    浏览(60)
  • python编程:实现自助点餐小程序,包括自定义菜单,点餐,账单,结算等功能

    【题目】实现自助点餐小程序,要求满足以下要求:        用户可以通过输入菜名和价格自定义菜单,并将定义的菜单显示出来。接下来,用户可通过输入菜单中菜品的名称进行点餐,,用户点餐完成后提交,显示出用户点餐后的账单,账单中要包含用户点的菜单(菜名和

    2024年02月11日
    浏览(36)
  • 自助点餐机Verilog代码远程云端平台Quartus

    名称:自助点餐机Verilog代码远程云端平台Quartus 软件:Quartus 语言:Verilog 代码功能: 自助点餐机设计, 商品分为7、9、14元三种套餐, 并且只接受5、10元两种面值的纸币: 可以一次点多份: 用数码管显示购买数量、所需金额、找零金额,当金额不足时通过蜂鸣器提示 本代码已

    2024年01月16日
    浏览(40)
  • 微信小程序餐饮奶茶扫码点餐小程序堂食外卖桌台自助下单源码

    系统产品主要功能:【外卖】【堂食】【会员】【优惠券】【营销功能】【积分商城】【手机接单管理】【奶茶店】【餐饮店】【私房外卖】【酒吧/酒店】【小吃店】【便利店】【超市】全方位..... 餐饮5种场景 一、【桌台号/房问/包厢下单】扫码下单,服务员送餐上桌 二、

    2024年02月02日
    浏览(57)
  • 【毕业设计/课程设计】基于微信的自助点餐小程序设计与实现(源码+文章) 含Java Web管理端

    1、数据库:MySQL 2、开发工具 微信端:微信开发工具 管理后端:Idea、Eclipse、MyEclipse等Java开发工具均可 3、服务器:Tomcat系列均可 微信端采用微信开发者工具开发,管理后端采用Java语言,MySQL数据库,开发框架是SSM         传统的点餐模式主要是通过人们到指定地点以及在

    2024年02月04日
    浏览(48)
  • Android期末设计——外卖点餐系统(设计介绍)

         1.android开发的综合训练      2.提高软件开发的综合能力          Android Studio 网上订餐项目是一个类似外卖的项目,其中包含订餐的店铺、各店铺的菜单、购物车以及订单与付款等模块。在店铺列表中可以看到店铺的名称、月销售、起送价格与配送费用、配送时间

    2024年02月03日
    浏览(40)
  • 基于安卓Android的校园点餐系统APP(源码+文档+部署+讲解)

    毕设帮助、技术解答、源码交流 联系方式见文末。 使用点餐系统app相对传统点餐管理方式具备很多优点:首先可以大幅提高点餐信息检索,只需输入点餐相关信息就能在数秒内反馈想要的结果;其次可存储大量的点餐信息,同时点餐信息安全性有更高的保障;相比纸质文件

    2024年04月16日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包