3 详细设计
3.1 系统功能模块流程图
本系统的功能模块流程图以用户为中心,首先展示了用户注册与登录模块,确保用户能够安全便捷地进入系统。接着,用户可进入浏览菜单模块,轻松查看并选择心仪的菜品。随后,系统引导用户进入在线订餐模块,用户可将所选菜品加入购物车并提交订单,系统即时处理订单信息。订单完成后,用户可在订单管理模块中查看订单状态、取消订单或进行评价。此外,用户还能在个人信息管理模块中查看和修改个人信息。整个流程设计流畅,操作简便,旨在为用户提供优质的订餐体验。
对于系统管理员而言,本系统也提供了丰富的管理功能。管理员通过管理员功能模块,可以全面查看和管理用户信息,确保用户数据的安全性和完整性。同时,管理员还可以对菜品信息进行管理,包括添加、删除、修改等操作,以适应市场的变化和用户需求的变化。此外,订单管理模块也允许管理员对订单进行审核、处理等操作,确保订单流程的顺畅进行。这些管理功能的设计,旨在帮助管理员更好地维护系统的稳定性和高效性,为系统管理和用户提供更好的服务
3.2 本节小结
手机网上订餐系统通过流畅的功能模块流程图,为用户提供了从注册登录、浏览菜单、在线订餐到订单管理、个人信息修改的完整流程,同时赋予管理员全面管理用户、菜品和订单的能力,旨在为用户提供优质、便捷的订餐体验,确保系统的稳定高效运行。
4 代码实现
4.1 系统功能模块代码
Fragment结构分析
在普通手机开发的过程中,使用Fragment能实现一个界面的多次使用,能加快效率。Fragment可以被认为是Activity界面的一个布局,其依赖于Activity,但是拥有自己的活动事件与生命周期。可以通过替换Activity中的Fragment实现界面的优化处理。
在<fragment>元素中的android:name属性指定了在布局中要实例化的Fragment。当系统创建这个Activity布局时,它实例化在布局中指定的每一个Fragment,并且分别调用onCreateView(),来获取每个Fragment的布局。然后系统会在Activity布局中插入通过<fragment>元素中声明直接返回的视图。
4.2 登陆注册界面的实现
Button,TextView,TextEdit,ImageView,RatioButton,scrollview等基本控件的使用;多个Activities之间的切换;使用Android本地数据库来管理用户信息。
设置整个RelativeLayout的内边距为20dp,给界面留白。让编辑框的左边对齐到父控件的左边,右边对齐到父控件的右边,将passwordView放到usernameView的下面,以保证二者的相对位置不变。
主布局为垂直布局,第一个TextView控件布置,显示“用户注册”字样,第一个LinearLayout控件,包含一个TextView控件和EditView控件,用于提醒用户输入和获取账号信息
4.3 fragment首页界面
Fragment_home.xml布局文件添加控件ImageView,EditText,match parent, 父布局来决定当前控件的大小 wrap parent控件内容决定当前控件的大小android:background修改背景图片,界面美观整洁。
4.4 fragment点界面
Fragment_snack.xml中LinearLayout线性布局,添加控件ImageView,TextView,Button,插入图片,添加文字,按钮的组件互通
4.5 fragment购物车下单界面
public void onClick(View v) {
Orders order = new Orders(account,fruit.getTitle(),"S"+ System.currentTimeMillis(),account,sf.format(new Date()));
order.save();
Toast.makeText(mActivity,"点餐成功", Toast.LENGTH_SHORT).show();
btnCollect.setVisibility(View.GONE);
btnCancel.setVisibility(View.VISIBLE);
}
});
//取消收藏
btnCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Orders order = DataSupport.where("account = ? and title = ?",account,fruit.getTitle()).findFirst(Orders.class);
order.delete();
Toast.makeText(mActivity,"取消成功", Toast.LENGTH_SHORT).show();
btnCollect.setVisibility(View.VISIBLE);
btnCancel.setVisibility(View.GONE);
4.6 fragment我的界面
ScollViiew布局控件设置滚动条,线性布局textview控件编写:我的订单、待付款、待评价、退款,EditText用户和应用的传输数据进行修改地址,checkbox:复选框添加备注,radioggroup存放着Radiobutton控件。LinearLayout线性布局,添加多个button按钮layout_width,textColor,background,layout_height布局高度、宽度、文本颜色,背景。
4.7 点击事件功能跳转
<Button//按钮添加
android:text="设置"//文本名称
android:id="@+id/my_btn6"//id为btn的控件索引
创建一个我的myFragement的classl类的java文件extends Fragment子类继承父类.
onCreateView()fragment创建frag对应视图
Inflate加载layout布局文件fragment_my
findViewById (R.id.my_btn6); 引用.R文件里的引用名
setOnClickListener添加一个点击事件监听器
onClick{intent组件互通跳转activity .java界面
startActivity(intent);启动
4.8 搜索框的实现
整个布局使用的是线性布局,搜索框又是一个线性布局(里面包含一个相对布局和一个TextView,相对布局里面有一个EditText和ImageVIew),搜索框其实就是一个EditText,
public void onClick(View v) {
//如果输入框内容为空,提示请输入搜索内容
ToastUtils.showToast(context,"输入查询关键字");
}else {//判断cursor是否为空
if (cursor != null) {
int columnCount = cursor.getCount();
if (columnCount == 0) {
ToastUtils.showToast(context, "对不起,没有你要搜索的内容");
private void showListView() {
mListView.setVisibility(View.VISIBLE); //获得输入的内容
String str = mEditText.getText().toString().trim();
//获取数据库对象
4.9 数据存储
id initAdapter() {
// 获取数据库数据
List<Order> orders = OrderDao.findAllByUsername(MyApplication.getUser().getUsername());
OrderAdapter adapter = new OrderAdapter(orders);
// 设置空布局
adapter.setEmptyView(getEmptyView());
orderRecyclerView.setAdapter(adapter);
}
public View getEmptyView() {
return getLayoutInflater().inflate(R.layout.empty_order_view, orderRecyclerView, false);
}
}