网络资源模板--基于 Android Studio 实现的奶茶点餐App+报告

目录

一、项目测试视频

二、项目简介

三、项目测试环境

四、项目详情设计

Get 项目模板源码


网络资源模板:网络资源模板--Android Studio 外卖点餐App

原创项目模板:基于Android studio 实现外卖(点)订餐系统 

一、项目测试视频

网络资源模板--基于Android studio 实现奶茶点餐+说明word

二、项目简介

具有登录注册功能,加入购物车并且付款功能等

三、项目测试环境

四、项目详情设计

这段代码是一个简单的Android应用程序,用于用户注册和登录。以下是代码的功能和结构总结:

1. **权限处理 (`handlePermission()`)**:
   - 在应用启动时检查是否已获取写入外部存储权限 (`WRITE_EXTERNAL_STORAGE`)。
   - 如果权限已授予,则显示相应的提示信息。
   - 如果未授予权限,则请求用户授予该权限。

2. **主活动 (`MainActivity`)**:
   - 在 `onCreate()` 方法中设置布局并调用 `handlePermission()` 来处理权限。
   - 获取用户名 (`ET_username`) 和密码 (`ET_password`) 的输入字段。
   - 包含两个方法用于按钮点击事件:`BT_signUp_onClick()` 和 `BT_logIn_onClick()`。

3. **注册 (`BT_signUp_onClick()`)**:
   - 当用户点击注册按钮时调用。
   - 检查用户名和密码是否为空,以及密码是否至少为8个字符长。
   - 验证用户名是否包含特殊字符。
   - 创建一个 `Account` 对象,并尝试将新用户信息保存。
   - 如果保存成功,则显示注册成功消息并跳转到 `RootActivity`,同时传递用户名。
   - 如果保存失败(用户名已存在),则显示注册失败消息。

4. **登录 (`BT_logIn_onClick()`)**:
   - 当用户点击登录按钮时调用。
   - 检查用户名和密码是否为空。
   - 创建一个 `Account` 对象,并检查用户是否存在(用户名和密码是否匹配)。
   - 如果存在,则跳转到 `RootActivity`,同时传递用户名。
   - 如果不存在,则显示登录失败消息。

5. **其他**:
   - 使用 `Toast` 来显示消息给用户。
   - 使用 `Intent` 在不同的活动之间进行页面导航和数据传递。

这段代码的主要功能是基本的用户身份验证和注册管理,同时包含了权限请求的处理。

package com.example.drinkordersystem;

import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;


public class MainActivity extends AppCompatActivity {

    private final Context mContext = this;
    private EditText ET_username;
    private  EditText ET_password;

    public void handlePermission() {
        // 检查是否开启 Manifest.permission.xxx
        // (xxx 为权限,根据自己需求添加)
        if (ActivityCompat.checkSelfPermission(this,
                Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(this, "Permission has been allowed", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "ask for permission",Toast.LENGTH_SHORT).show();
            // 请求权限
            ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        handlePermission();
        ET_username = findViewById(R.id.et_username);
        ET_password = findViewById(R.id.et_password);
    }

    public void BT_signUp_onClick(View v)
    {
        String username = ET_username.getText().toString();
        System.out.println(username);
        String password = ET_password.getText().toString();

        if(username.equals("")||password.equals(""))
        {
            Toast.makeText(this, "用户名或密码不能为空 (!_!)", Toast.LENGTH_SHORT).show();
        }
        else if(password.length() < 8)
        {
            Toast.makeText(this, "为安全考虑,密码至少8位(!_!)", Toast.LENGTH_SHORT).show();
        }
        else if(username.contains("\\")||username.contains("/")||username.contains(":")||username.contains("*")
        || username.contains("?")||username.contains("\"")||username.contains("<")||username.contains(">")
        || username.contains("|"))
        {
            Toast.makeText(this, "用户名中请勿包含\n \\ / : * ? \" < > |等特殊字符(!_!)", Toast.LENGTH_SHORT).show();
        }
        else{
            Account temp = new Account(username, password, mContext);
            Intent intent;
            if(temp.saveAccount())
            {
                //System.out.println("success");
                Toast.makeText(this, "注册成功 (^_^)\n 为您直接登录", Toast.LENGTH_SHORT).show();
                intent = new Intent(MainActivity.this, RootActivity.class);
                intent.putExtra("userName", username);
                startActivity(intent);
            }
            else {
                //System.out.println("fail");
                Toast.makeText(this, "注册失败 (@_@)\n该用户名已存在,请尝试其他用户名", Toast.LENGTH_SHORT).show();
            }
        }

    }

    public void BT_logIn_onClick(View v)
    {
        String username = ET_username.getText().toString();
        System.out.println(username);
        String password = ET_password.getText().toString();
        if(username.equals("")||password.equals(""))
        {
            Toast.makeText(this, "用户名或密码不能为空(!_!)", Toast.LENGTH_SHORT).show();
        }
        else {
            Account temp = new Account(username, password, mContext);
            Intent intent;
            if (temp.exist()) {
                //System.out.println("success");
                intent = new Intent(MainActivity.this, RootActivity.class);
                intent.putExtra("userName", username);
                startActivity(intent);
            } else {
                //System.out.println("fail");
                Toast.makeText(this, "登录失败 (@_@)\n用户名或密码错误", Toast.LENGTH_SHORT).show();
            }
        }
    }
}

这段代码是一个简单的Android应用程序,实现了一个包含三个选项卡的界面,每个选项卡对应不同的功能页面。让我帮你简要解释一下:

1. **类和包声明**:
   - `RootActivity` 是继承自 `AppCompatActivity` 的活动类。
   - 包声明 `com.example.drinkordersystem` 表示这个类所在的包路径。

2. **成员变量**:
   - `rg_tab_bar`:RadioGroup 控件,用于管理底部导航栏的选项。
   - `rb_order`:RadioButton 控件,用于点单界面的选项卡。
   - `fg_order`、`fg_shop`、`fg_bill`:分别是点单界面、购物车界面和查看历史订单界面的 Fragment。
   - `fManager`:FragmentManager,用于管理 Fragment。
   - `userName`:保存从上一个活动传递过来的用户名。

3. **生命周期方法**:
   - `onCreate`:活动创建时调用,设置布局和初始化界面。
   
4. **方法解析**:
   - `defaultFragment()`:将点单界面设为默认界面。
   - `onCheckedChanged(RadioGroup group, int checkedId)`:当底部导航栏的选项改变时调用,根据选中的选项切换显示不同的 Fragment。
   - `hideAllFragment(FragmentTransaction fragmentTransaction)`:隐藏所有的 Fragment,以便显示选中的 Fragment。

5. **界面管理**:
   - 使用 `FragmentTransaction` 在不同选项卡之间进行切换,并确保每次只显示一个 Fragment,隐藏其他的 Fragment。

这段代码主要实现了一个简单的底部导航栏,通过 RadioGroup 和 RadioButton 控件来切换不同的功能界面,每个界面使用 Fragment 实现。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".RootActivity">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/ly_content"
        android:layout_above="@+id/rg_tab">
    </FrameLayout>

    <RadioGroup
        android:id="@+id/rg_tab"
        android:layout_width="match_parent"
        android:layout_height="75dp"
        android:gravity="center_vertical"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal"
        android:background="@color/gray">

        <RadioButton
            android:id="@+id/rb_order"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:button="@null"
            android:checked="true"
            android:drawableTop="@drawable/order"
            android:gravity="center"
            android:text = "@string/order"
            tools:ignore="VisualLintButtonSize" />

        <RadioButton
            android:id="@+id/rb_shop"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:button="@null"
            android:drawableTop="@drawable/shop"
            android:gravity="center"
            android:text = "购物车"
            tools:ignore="VisualLintButtonSize" />

        <RadioButton
            android:id="@+id/rb_bill"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:button="@null"
            android:drawableTop="@drawable/bill"
            android:gravity="center"
            android:text = "@string/bill"
            tools:ignore="VisualLintButtonSize" />
    </RadioGroup>


</RelativeLayout>

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="250dp"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_gravity="center">

    <TextView
        android:id="@+id/textView_allCost"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="饮料费:¥ 0\n服务费:¥ 0\n总价:¥ 0\n请扫描以下二维码进行支付。"
        android:textColor="@color/black"
        android:layout_marginHorizontal="20dp"
        android:layout_marginTop="10dp"/>

    <ImageView
        android:id="@+id/imageView3"
        android:layout_width="wrap_content"
        android:layout_height="335dp"
        app:srcCompat="@drawable/qrcode"
        android:layout_marginVertical="15dp"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">

        <Button
            android:id="@+id/button_bought"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:text="完成支付" />
        <Button
            android:id="@+id/button_quit"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:text="取消支付" />
    </LinearLayout>

</LinearLayout>

Get 项目模板源码

👇👇👇快捷获取方式👇👇👇

创建一个点餐应用通常涉及到多个步骤和关键组件,使用Android Studio作为开发工具,你可以按照以下步骤来设计: 1. **项目设置**: - 创建一个新的Android项目,选择"Empty Activity"模板。 - 设置应用的基本信息,如包名、主题和屏幕大小。 2. **界面设计**: - 使用Android Studio的布局编辑器(XML)创建用户界面,包括主页(显示菜单)、详细页面(展示菜品详情)、购物车和结算页。 - 使用`RecyclerView`或`Fragment`展示动态菜单项。 3. **数据模型**: - 创建数据模型类,比如`MenuItem`,包含名称、描述、价格等属性。 - 可能还需要一个`Cart`类,用于存储用户的点餐列表。 4. **添加数据库支持**: - 如果需要持久化数据,可以考虑使用SQLite或 Room ORM 来存储菜品信息和用户购物车。 5. **功能实现**: - 实现添加到购物车的功能,点击菜品时调用方法并将数据添加到`Cart`中。 - 在详细页面展示菜品详情,可能需要网络请求获取数据。 - 结算功能,显示总价并可能实现支付接口集成。 6. **UI交互**: - 使用`onClick`监听器处理按钮点击事件,触发相应的业务逻辑。 - 可能需要使用`Intent`或`startActivityForResult`来传递数据和启动其他活动。 7. **用户体验**: - 考虑添加动画、过渡效果和错误处理机制,提升用户体验。 - 可能还需添加本地通知功能,例如订单完成提醒。 8. **测试与调试**: - 使用Android Studio内置的模拟器或真机进行测试,确保所有功能正常工作。 - 使用` Espresso`或`JUnit`进行单元测试和UI测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程乐学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值