安卓课程设计_ZZU线点餐系统
郑州大学软件学院
《移动终端开发》课程作业
项目名称:
ZZU 在线点餐系统
班
级:
计算机科学与技术五班
项目组长:学号 20177710541 姓名 王帅兵
项目成员:学号 20177710538
姓名 王笠疆
2020 年 6 月 25 日 目录 一、
项目背景 ................................................................................................................................ 3
1.1 项目背景................................................................................................................................. 3
二、
项目设计 ................................................................................................................................ 4
2.1 用例模型设计 ......................................................................................................................... 4
2.2 系统功能设计 ......................................................................................................................... 5
2.2.1 登录时序图 ................................................................................................................... 5
2.2.2 点餐时序图 ................................................................................................................... 5
2.3 项目活动图 ............................................................................................................................. 6
2.4 SQLite 数据库设计 ................................................................................................................. 7
三、
项目实现 ................................................................................................................................ 9
3.1 主界面 .................................................................................................................................... 9
3.2 注册页面............................................................................................................................... 10
3.3 登陆界面............................................................................................................................... 11
3.4 菜品管理界面 ....................................................................................................................... 13
3.5 点餐界面............................................................................................................................... 16
3.6 人员管理界面 ....................................................................................................................... 18
3.7 订单管理界面 ....................................................................................................................... 20
四、项目总结 .................................................................................................................................... 23 4.1 项目分工...................................................................................................................................................................20 4.2 总结 .................................................................................................................................... 230
一、项目背景 1.1 项目背景 通过手机点餐,减少服务员的劳动力,减少餐厅的成本,从而使菜品的价格更加优惠,达到物美价廉,减少不必要的浪费。我们常常去餐厅会有点餐单,而点菜单往往是一次性的,用 Android 手机点餐,不需要纸质介绍,并且可以更好的了解菜品,减少一次性浪费。减少劳动力。餐厅的生意是有固定的时间段,而在单位时间内做更多有效的事情,间接的可以降低营业者的成本。我们以往点餐,服务员都会在旁边用纸和笔记录,即使是俩人点餐,也需要 5~10 分钟,人多可能需要的时间会更
长。而用手机点餐可以节省这段时间。还有就是,为了更好的汇总信息,有些饭店还会把点餐的信息录入电脑,而这一过程有需要人力来完成。顾客与顾客产生互动。手机点餐,可以丰富菜单内容,对每个菜品可以有更加详细的介绍。而且可以加入以往顾客对菜品的评价,哪些菜符合哪些人口味,也让顾客有针对性的点餐,同时也增加点餐的乐趣。
二、项目设计 2.1 用例模型设计 对于登录页面,通过 activity_login.xml 来设计页面布局,通过 login.java 来设置按钮监听事件和对数据库的查询操作。用户可以注册登录,对菜品管理包括增删改,可用系统帮客户点餐,同时对订单管理,可以查询历史订单,同时用户可以对人员进行管理,可以对登陆系统的用户账号进行删改。用户用例图如下
2.2 系统功能设计 2.2.1 登录时序图
2.2.2 点餐时序图
2.3 项目活动图 通过项目活动图可以体现出用户使用该软件的具体流程:
2.4 SQLite 数据库设计
在本次设计中,数据库中有四张表,用户表存放用户注册信息,用来用户登录时验证,食物表用来存放菜品信息,可用来对菜品的管理,订单表和订单详情表用来管理订单。
用户表(User):
字段名 描述 数据类型 stu_id 学号(主键,唯一标识)
varchar name 姓名 varchar password 密码 varchar
食物表(food)
字段名 描述 数据类型 Id(主键) 菜品 id(自增,唯一标识)
Short Name
菜品名字 Varchar Kind
菜品类型 varchar Price 菜品价格 Double Note 备注 varchar 订单表(Orders):
字段名 描述 数据类型 Id(主键) 订单号(自增,唯一标识)
Short Dorm 宿舍楼 Short Dorm_id 宿舍号 varchar Description 食品描述 varchar SaleDay 购买时间 Date Sum 购买数量 Short totalPrice 购买总额 Double
订单详情表(OrderDetail):
字段名 描述 数据类型 Order_Id(主键) 订单号(参照订单表)
Short Count 购买数量 Short Kind 种类 varchar FoodName 食品名称 varchar
三、项目实现 3.1 主界面 用户打开软件后会进入该界面,老用户可以点击登录按钮进行登录,新用户可以点击注册按钮跳转到注册页面进行注册
3.2 注册页面 新用户点击注册页面,输入用户名和密码即可完成注册,对于注册页面,通过 activity_register.xml 来设计页面布局,通过 register.java 来设置按钮监听事件和对数据库的插入操作。
1. //用 getWritableDatabase()方法获得数据库的实例 2. SQLiteDatabasedb=dbHelper.getWritableDatabase();
3. //通过 getText()方法获得所填入的用户名和密码,然后用 insert()方法将用户名和密码插入到所创建的数据库中。
4. String stu_id= id.getText().toString();
5. String stu_name=name.getText().toString();
6. String stu_pwd= pwd.getText().toString();
7. values.put("stu_id",stu_id);
8. values.put("name",stu_name);
9. values.put("password",stu_pwd);
10. db.insert("User",null,values); 注册界面:
3.3 登陆界面 老用户通过输入自己的用户名和密码进行登录,这部门通过对输入账号密码与在数据库中的值是否相同来匹配,匹配不过则报账号或密码输入错误
1. //通过打开数据库,并为按钮设置监听器 2. dbHelper=new MydatabaseHelper(this,"User.db",null,2);
3. FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
4. fab.setOnClickListener(new View.OnClickListener() {
5. @Override
6. public void onClick(View view) {
7. Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show();
8.
}
9. });
10. //用 getWritableDatabase()方法获得数据库的实例
11. SQLiteDatabasedb=dbHelper.getWritableDatabase();
12. //通过 query 方法对数据库进行查询
13. Cursor cursor=db.query("User",null,"name=? andpassword=?",selectionArgs,null,null,null);
登录界面:
登录后的主操作界面:
3.4 菜品管理界面 用户登录以后可对菜品进行管理,可以增加菜品,修改菜品信息,若菜品不再供应可对其进行删除,通过按钮的监听获取各组件的值存入数据库或者删除。这里仅粘贴部分代码。
1. String name=etFoodName.getText().toString();
2. String price=etFoodPrice.getText().toString();
3. String note=etFoodNote.getText().toString();
4. Food food=new Food();
5. food.setKind(kind);
6. food.setDes(note);
7. food.setPrice(Double.parseDouble(price));
8. food.setName(name);
9. food.save();
10. Toast.makeText(EditFood.this,"修改成功",Toast.LENGTH_SHORT).show();
11. Intent intent1=new Intent(EditFood.this,index.class);
12. startActivity(intent1);
13. switch (view.getId()){
14.
case R.id.btn_food_ma_edit:
15.
for (int i=0;i<Foodlist.size();i++){
16.
if (i==(Integer)view.getTag()){
17.
Log.d(TAG, "onClick: 点击了 btn_user_edit 的第"+i+"条------------");
18.
Intent intent=new Intent(context,EditFood.class);
19. intent.putExtra("foodname",Foodlist.get(i).getName());
20. startActivity(context,intent,null);
21.
}
22.
}
23.
break;
24.
case R.id.btn_food_ma_del:
25.
for (int i=0;i<Foodlist.size();i++){
26.
if (i==(Integer)view.getTag()){
27.
Log.d(TAG, "onClick: 点击了 btn_user_edit 的第"+i+"条------------");
28.
LitePal.deleteAll(Food.class,"name=?",Foodlist.get(i).getName());
29. Toast.makeText(context,"刪除成功",Toast.LENGTH_SHORT).show();
30. fma=new FoodManager();
31. fma.foodManage(context,fview);
32.
}
33.
}
添加菜品界面:
浏览菜品界面:
修改菜品:
3.5 点餐界面 当有客人进行点餐的时候,用户可以点击点单帮客人下单,包括宿舍楼号,宿舍号,选择的菜品和酒水。用户点击结账即可提交到数据库生成订单,核心代码如下:
1. ArrayList<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
2.
Map<String ,Object> line;
3.
for (int i=0;i<foodList.size();i++){
4.
line=new HashMap<String ,Object>();
5.
Log.d(TAG, "getData: ------------------"+foodList.get(i).toString());
6.
line.put("foodid",foodList.get(i).getId());
7.
line.put("no",orderedList.size()+1);
8.
line.put("name",foodList.get(i).getName());
9.
line.put("description","备注");
10.
line.put("num",nums.get(i));
11.
line.put("price",foodList.get(i).getPrice());
12.
line.put("checked",true);
13.
data.add(line);
14.
}
15.
orderedLtv.setVisibility(View.VISIBLE);
16.
refreshSum(num*food.getPrice());
17.
return data;
点餐界面:
结账界面:
3.6 人员管理界面 用户可对历来登陆的用户进行管理,点击修改即可修改用户账户或密码,当用户注销是可删除该用户信息,核心代码如下:
1. QLiteDatabasedb=dbHelper.getWritableDatabase();
2. ContentValues values=new ContentValues();
3. String stu_id=id.getText().toString();
4. String stu_name= username.getText().toString();
5. String stu_pwd=pwd.getText().toString();
6. values.put("stu_id",stu_id);
7. values.put("name",stu_name);
8. values.put("password",stu_pwd);
9. db.update("User",values,"stu_id=?",new String[]{data});
10. values.clear();
11. Toast.makeText(EditUser.this,"修改成功",Toast.LENGTH_SHORT).show();
12. Intent intent=new Intent(EditUser.this,login.class);
13. startActivity(intent);
14. String stu_id=cursor.getString(cursor.getColumnIndex("stu_id"));
15. String name=cursor.getString(cursor.getColumnIndex("name"));
16. String password=cursor.getString(cursor.getColumnIndex("password"));
17. Person person=new Person();
18. person.setId(Integer.parseInt(stu_id));
19. person.setName(name);
20. person.setPassword(password);
21. personList.add(person);
用户修改和删除界面:
3.7 订单管理界面 用户可以对订单进行管理,查询历史订单,后期可拓展为生成订单报表,核心代码如下:
1. protected void onCreate(Bundle savedInstanceState) {
2.
super.onCreate(savedInstanceState);
3.
setContentView(R.layout.activity_liushui);
4.
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
5.
setSupportActionBar(toolbar);
6.
initView();
7.
//初始日期
8.
dialog_tv_date = findViewById(R.id.dialog_tv_date);
9.
//结束日期
10.
dialog_tv_time = findViewById(R.id.dialog_tv_time);
11.
final EditText et_num_query_order=findViewById(R.id.et_num_query_order);
12.
Button btn_query_order=findViewById(R.id.btn_query_order);
13.
Button btn_num_query_order=findViewById(R.id.btn_num_query_order);
14.
final TextView ordershowTexiview=findViewById(R.id.ordershowTexiview);
15.
show = "订单";
16.
btn_num_query_order.setOnClickListener(new View.OnClickListener() {
17.
@Override
18.
public void onClick(View view) {
19.
List<OrderDetail> orderDetail=LitePal.select().where("order_id=?",et_num_query_order.getText().toString()).find(OrderDetail.class);
20.
List<Orders> orders=LitePal.select().where("id=?",et_num_query_order.getText().toString()).find(Orders.class);
21.
Log.d(TAG, "onClick: ---------------------ordersize"+orderDetail.size()+"---"+orders.size());
22.
for (int i=0;i<orderDetail.size();i++){
23.
show = show +orderDetail.get(i).toString();
24.
}
25.
show=show+orders.get(0).toString();
26.
ordershowTexiview.setText(show);
27.
show=null;
28.
}
29.
});
根据日期查询:
根据订单号查询:
四、项目总结 4.1 项目分工情况
20177710541 王帅兵 用户点餐,菜品管理,订单管理,数据库设计 20177710538 王笠疆 用户注册,用户登录,人员管理,菜品浏览
4.2 总结
基于 Android 的在线点餐系统将顾客的位置、点餐 、结账 、订单传送到后台等全部操作都囊括其中,改善以往的繁琐操作。对学校来说,既可以节省人力成本 ,又能在疫情期间减少人员的密集。同时该系统还具备诸多可塑空间,随着研发的深入,还可拓展如外送下单模块、用户评价模
块、餐厅活动推送的模块,为餐馆经营者提供更为广阔的营销及客户交流互动平台。基于 Android 的无线点餐系统跟上科技步伐,适应市场规则,必然获得更多的认同及普及,具有广阔的市场前景及研究开发价值。
在本学期的安卓程序设计中,基本完成了网上订餐的基础功能的设计,同时深刻感受到 Android 为我们提供了很好的类似反射机制,通过layout 文件夹下的配置文件,可以快速的形成界面。掌握了对一些点中、选中、按键等事件的处理,界面之间的跳转 intent 管理,通过 bundle 对数据在界面之间进行传输。作为一个嵌入式的数据库引擎 SQLite 也能很方便地进行数据存取,同时也知道了 Android 程序设计的基本流程。但是我们的系统交互界面不够美观,整个项目相对粗糙,没有过多的装饰,而且没有管理员登录入口,未来我们会继续深入学习,继续完善项目。最后感谢老师一个学期的辛苦付出!