一、项目概述
安卓美食外卖系统应用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的工具类,如JSONObject
、JSONArray
、JSONStringer
和JSONTokener
等,这些类位于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实现美食外卖系统
五、源码获取
想要立即拥有这篇文章的源代码?没问题!两种方式任你选:💻直接点击下方CSDN专属下载链接,轻松get√;🎁或者,只需动动手指指关注公众号《萌新加油站》,回复下方关键词即刻解锁!快来探索你的技术宝藏,开启编程新旅程吧!🚀
1️⃣直接点击右侧链接下载源代码 | Android美食外卖系统 |
---|---|
2️⃣关注公众号《 萌新加油站 》 | 后台回复:外卖 |
🚀Android项目专栏有你错过的精彩内容 |
---|
Android Studio实现订餐系统 |
Android Studio实现考试管理系统 |
Android Studio实现饮食搭配系统 |
Android Studio实现星座配对系统 |
Android Studio实现天气预报系统 |
最后推荐4本可以改变命运的经典著作: