Android Studio实现美食外卖系统

一、项目概述

安卓美食外卖系统应用SQLite数据库、RecycleView列表、SharedPreferences存储、Adapter、Fragment等技术完成,对数据库的CRUD使用的淋漓尽致。启动应用,进入欢迎页面,选择新用户注册,注册成功后自动跳转至登录页面,选择记住密码则下次登录时免输账号和密码。登录成功进入主页面,底部导航栏默认显示店铺,进入任意店铺,显示商品的信息,点击商品图片显示详情,点击加入购物车,也可以在下方选择加减数量,或者清空购物车。在下方可以查看购物车中商品总数量和总价格,点击去结算进入支付页面。支付页面需要先选择收货地址,没有就要从我的导航栏中添加收货地址,然后进行支付;如果余额不足,则需要账户余额中进行充值。地址选择之后,余额也充足则支付成功,提交好订单。回到我的导航栏,在此可以更换头像、添加地址信息、充值账户余额、查看历史订单。长按可以删除地址信息和历史订单,还可以分享软件和退出登录。

总体而言,系统设计逻辑清晰合理,用户提示丰富,使用体验良好,界面美观大方,功能齐全。
在这里插入图片描述

二、开发环境

在这里插入图片描述

三、详细设计

1、数据库设计

数据库名称为takeaway.db,数据表有4张,分别为:用户表、地址表、余额表和订单表。

  • 用户表:账号(主键)、密码
  • 地址表:账号、姓名、电话、详细地址(复合键)
  • 余额表:账号(主键)、金额
  • 订单表:账号、编号(主键)、日期、店铺、价格、内容
public class MyDBOpenHelper extends SQLiteOpenHelper {
    // 数据库文件名为takeaway.db,版本号为1
    public MyDBOpenHelper(Context context) {
        super(context, "takeaway.db", null, 1);
    }

    // 创建用户表User
    public static final String CREATE_TABLE_USER = "create table User ("
            + "account text primary key,"
            + "password text)";

    // 创建地址表Address,定义复合键为所有字段
    public static final String CREATE_TABLE_ADDRESS = "create table Address ("
            + "account text,"
            + "name text,"
            + "phone text,"
            + "address text,"
            + "CONSTRAINT composite_key primary key (account, name, phone, address))";

    // 创建余额表Balance
    public static final String CREATE_TABLE_BALANCE = "create table Balance ("
            + "account text primary key,"
            + "money text)";

    // 创建订单表Order
    public static final String CREATE_TABLE_ORDER = "create table MyOrder ("
            + "account text,"
            + "number text primary key,"
            + "date text,"
            + "shop text,"
            + "price text,"
            + "content text)";

    // 数据库首次创建时创建数据表
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLE_USER);
        db.execSQL(CREATE_TABLE_ADDRESS);
        db.execSQL(CREATE_TABLE_BALANCE);
        db.execSQL(CREATE_TABLE_ORDER);
    }

    // 数据库版本升级
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

2、增删改查

所有应用往大了说都是通过数据库的增删改查来实现业务逻辑。我们以用于和Balance表交互的BalanceDao类为例。先定义一个Context对象,通常指的是应用程序或活动的上下文环境。在Android开发中,Context用于访问应用程序级别的资源和类以及调用应用程序级别的操作。再定义一个MyDBOpenHelper对象,它是一个自定义的帮助类,用于管理数据库的创建和版本管理。接着定义一个SQLiteDatabase对象,用于直接与数据库进行读写操作。

BalanceDao构造函数,接收一个Context对象作为参数,并将其赋值给类的成员变量。open方法创建并打开数据库。首先尝试以写模式打开数据库,如果失败则以读模式打开。close方法关闭数据库连接,并将数据库引用设置为null。 addBalance方法接受一个Balance对象作为参数,并将其添加到Balance表中。 deleteBalance方法接受一个Balance对象作为参数,并从Balance表中删除与该账户相关联的记录。 updateBalance方法接受一个Balance对象作为参数,并更新Balance表中与该账户相关联的记录。 isExist方法检查指定账户是否已存在于Balance表中。queryBalance方法查询指定账户的余额,并返回相应的整数值。如果账户存在,则从结果集中获取余额并返回;如果不存在,则返回0。

整个类的目的是提供一个接口来管理和操作存储在本地SQLite数据库中的账户余额数据。通过这些方法,开发者可以轻松地插入新记录、更新现有记录、查询特定账户的余额以及检查账户是否存在。

    // 添加余额信息
    public void addBalance(Balance balance) {
        ContentValues values = new ContentValues();
        values.put("account", balance.getAccount());
        values.put("money", balance.getMoney());
        database.insert("Balance", null, values);
    }

    // 删除余额信息
    public void deleteBalance(Balance balance) {
        database.delete("Balance", "account = ?", new String[]{balance.getAccount()});
    }

    // 修改余额信息
    public void updateBalance(Balance balance) {
        ContentValues values = new ContentValues();
        values.put("money", balance.getMoney());
        database.update("Balance", values, "account = ?", new String[]{balance.getAccount()});
    }

    // 判断账号是否存在
    public boolean isExist(String account) {
        Cursor cursor = database.query("Balance", null, "account = ?", new String[]{ account }, null, null, null);
        return cursor.getCount() > 0;
    }

    // 查询指定账号的余额信息
    public int queryBalance(String account) {
        // 查询Balance表中where指定列元素的记录
        Cursor cursor = database.query("Balance", null, "account = ?", new String[]{ account }, null, null, null);
        int money = 0;
        if (cursor.getCount() > 0) {
            cursor.moveToFirst();
            money = cursor.getInt(cursor.getColumnIndex("money"));
        }
        cursor.close();
        return money;
    }

3、数据源

(1)JSON文件

应用的数据源来自本地JSON文件。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Android开发中,JSON常用于存储和传输数据。Android提供了几种处理JSON的工具类,如JSONObjectJSONArrayJSONStringerJSONTokener等,这些类位于org.json包下。

JSON主要由两种结构组成:

  • 对象(Object):由一系列键值对组成的无序集合,使用大括号{}包围。
  • 数组(Array):由一系列值组成的有序集合,使用方括号[]包围。

在这里插入图片描述

在res/raw目录中的takeway.json文件,可以对其中的JSON数组或JSON对象进行修改。

(2)JSON解析

ShopFragment类中通过两个私有方法实现了JSON数据的读取和解析。首先,JSON2String方法读取了资源文件夹中的JSON文件并将其转换为字符串格式。接着,parseJSONWithJSONObject方法解析该JSON字符串,创建了一个Shop对象列表,其中每个Shop对象包含了商店的详细信息以及一个包含食品信息的Food对象列表。具体而言,通过JSONObject类遍历JSON数组,依次取出每个JSON对象。如果对象属性包含数组,再递归遍历,直至所有JSON对象取出存储到列表中。

   // 获取商店对象的JSON数组
   JSONArray shopArray = new JSONArray(jsonString);
   // 依次取出数组中的商店对象
   for (int i = 0; i < shopArray.length(); i++) {
       JSONObject shopObject = shopArray.getJSONObject(i);
    }

四、运行演示

Android Studio实现美食外卖系统

五、源码获取

以下两种方式都可以获取源代码:

直接点击右侧链接下载源代码Android Studio实现美食外卖系统
关注公众号《 萌新加油站后台回复:外卖

🚀Android项目专栏有你错过的精彩内容
Android Studio实现订餐系统
Android Studio实现考试管理系统
Android Studio实现饮食搭配系统
Android Studio实现星座配对系统
Android Studio实现天气预报系统

最后推荐4本可以改变命运的经典著作:

  1. 《寿康宝鉴》在线阅读白话文
  2. 《欲海回狂》在线阅读白话文
  3. 《阴律无情》在线阅读白话文
  4. 《了凡四训》在线阅读白话文
  5.    电子书百度网盘下载链接
  • 32
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

振华OPPO

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

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

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

打赏作者

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

抵扣说明:

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

余额充值