订餐系统实验报告
课程名称: Android程序设计
班 级:
学 号:
姓 名:
任课教师:
- 程序功能与环境(服务器,手机实物照片,自己拍)
- 程序功能
- 餐厅订餐系统服务器,提供订餐服务
- 餐厅订餐系统客户端,用户用来提交订单
- 环境
- 带有tomcat服务器的PC机一台,发布订餐服务支持
- 安卓手机一部,测试客户端
- 局域网环境,用来测试程序功能
- MVC架构用例,类图,(类图可以将文档页面放大了看)
- 数据与设计
- food.test.domain
- Food.java
此类用于封装用户购买菜品的信息
public int foodId; //菜品编号
public String foodName; //菜品名称
public float foodPrice; //菜品价格
public int foodType; //菜品类型
public String foodDescri; //菜品描述
public String foodImage; //菜品图片——暂定为String类型用于存储图片名
- food.test.hyl
- OrderListActivity.java
此类为用户填写订购信息的Activity,用来处理订购信息,与用户进行交互,是连接用户和服务器的桥梁
protected void onCreate(Bundle); //创建activity
在onCreate函数中定义了两个按钮,并设置了监听函数:
bsubmit.setOnClickListener(new OnClickListener() {//提交清单按钮被按下
public void onClick(View v) {} //按钮被按下时触发
private void callPost(Object[][] foods, String address,
String email, String telephone, String suggest,String userId,String userName) {}//创建post方法,用来像服务端发送post请求
};
bcancel.setOnClickListener(new OnClickListener() {//取消按钮被按下。
//用intent调用返回购物车界面
Intent intent = new Intent(OrderListActivity.this,ShopCartShowAll.class);
startActivity(intent);
});
protected Dialog onCreateDialog(int id); //创建对话框,用来显示用户提交信息的状态
void onResume();//在视图按home键退出后,然后恢复时调用
- food.test.ld
- ActivityComment.java
此Activity是用来给用户填写对菜品的评论信息的,并提交到服务器
设置了两个按钮bdone和brevert并设置监听,被点击时触发
Bdone,提交信息
Brever,重写信息 - ActivityMainInterface.java
此类创建了选择菜单,用来选择对菜品进行评论
@Override
public boolean onCreateOptionsMenu(Menu menu) {}//创建选择菜单
@Override
public boolean onOptionsItemSelected(MenuItem item) {}//菜单项被点击时调用 - ActivityRegister.java
此Activity类用来进行用户注册
bdone.setOnClickListener(new OnClickListener();设置用户信息完成时提交信息按钮监听
在public void onClick(View v);中测试用户名及密码是否为空,为空时给出提示,并判断两次输入的密码是否相同
,并设置相同时跳转到用户登录界面即主界面 - OrderFoodLogin.java
此类用于用户登录,并将用户信息提交到服务器进行匹配,并提示登录信息
方法与上面的类似
mp = new MediaPlayer();//播放音乐
接下来的几个函数用来控制播放音乐
- food.test.sfp
- UserLogin.java
此类用来创建显示用户登录状态的对话框,并通过toast给出登录状态信息
private Dialog createLoginDialog(Context context){}//创建登录对话框
@Override
protected Dialog onCreateDialog(int id); //重写创建对话框函数
- food.test.util
- DButil.java
此类为数据库工具类,用于对数据库的操作
public DButil(Context context);//DButil的构造函数
private void init();//数据库初始化函数
public long addFood(ShopCart food); // 新增一条购买商品记录
public Cursor getAllCartCursor();//查询所有的游标
public ArrayList getAllShopCart();//得到购物车表里的所有数据
public ArrayList<ShopCart> getFoodFromCart();//返回所有shopCart类型的ArrayList
public int ModifyShopcart(int foodId,int foodnum,float foodsumprices ); //修改购物车中所有的数据
public int deleteAllShopcart();//删除购物车中所有的数据
public int deleteFood(String whereparam); //删除不需要的商品
public ShopCart findFood(int foodid); //查找需要的商品
public SQLiteDatabase getDB();//获取数据库连接
public void close();//关闭数据库
class MySQLiteHelper extends SQLiteOpenHelper{};//内部类,创建数据库辅助类 - HttpCallUtil.java
此类封装了HTTP的连接
public String getConntionPost(String url, String name,String psw,List data);// post请求
public List putParam(List data);// 传递给服务端的数据,用Map进行封装
public String getConntionGet(String url);// get请求
public void getConntionImage(String url,ImageView iv);// 取得图片 - Util.java
此类为工具类
public Adapter initAdapter(Context context,ArrayList list,Cursor cur,int layout,String[] from,int[] to);// 实例化不同的适配器
- food.test.wjf
- ModifyListCart.java
此类用于修改购物车中的信息,比如订购的数量等
Intent intent = getIntent(); //获取从购物车中传过来的信息
foodid = intent.getIntExtra("foodid", 0); //拿到购物车中传过来的食品编号 foodID
foodname = intent.getStringExtra("foodname");//拿到购物车中传过来的食品名称foodname
foodnum=intent.getIntExtra("foodnum", 1); //拿到购物车中传过来的食品订购数量
foodprice = intent.getFloatExtra("foodprice", 1.0f); //拿到购物车中传过来的食品单价foodpricce
bmodify.setOnClickListener(new OnClickListener() {//设置修改按钮监听函数,设置当按钮被点击时修改食品的订购信息,并返回到购物车
db.ModifyShopcart(foodid, foodnum, sumfoodprices); //对购物车中的食品进行修改
Intent intent = new Intent(ModifyListCart.this, ShopCartShowAll.class);// //回到购物车界面
startActivity(intent); - ShopCart.java
定义一个购物车的类,封装购物车的信息
private int foodId;// 商品id
private String foodName;// 商品名称
private float foodPrice;// 商品单价
private int foodNum;// 商品数量
private float sumPrices;// 商品金额
private int image;// 商品图片
下面为每个变量设置set和get方法 - ShopCartAdd.java
此类用于添加购物车,并设置跳转到购物车界面 - ShopCartShowAll.java
此类用来显示购物车中的所有食品,并对食品进行增删操作
db=new DButil(this); //初始化数据库
shopcur=db.getAllCartCursor();//获得购物车中所有的游标
shopcartList=db.getAllShopCart();//获取数据库中所有的数据
for(int i=0;i<shopcartList.size();i++){
food=(HashMap) shopcartList.get(i);
Float prices= (Float) food.get("foodsumprices");
//得到所有餐品总的金额
totalprices+=prices;
}
private Dialog builder1(Context ctx) ;//创建修改,删除对话框,设置按钮监听
private Dialog builder2(Context ctx);//创建确认删除对话框
public boolean onCreateOptionsMenu(Menu menu);创建菜单功能,按菜单键弹出
public boolean onOptionsItemSelected(MenuItem item);选择菜单项时触发 - ShowListCart.java
显示购物车列表
- food.test.zqz
- util
- FoodType.java
默认为“肉食”FOOD_MEAT类 - GetNetWorkData.java
从服务器获取有关主界面的所有数据
public final static StringBuffer getConnectionPost(String url,
HashMap<String, String> params);// url服务器端的URI地址, params发给服务端的请求参数,以键值对的形式封装名字和对应的值,其中params的名字键位应该跟服务端保持一致
public final static ArrayList<Food> decodeResponseData(String sb);// 对服务器端的响应数据进行“解码”, sb服务器端的响应数据
public static ArrayList<Food> decode(ArrayList<Food> resData, String itemStr);// 对图片的接收
public static ArrayList<String> getAllFoodBitmapUrl(int foodType, String location, ArrayList<Food> foods);// return 对应菜品类型所有资源的URL的字符串
public static String getAssignedFoodBitmapUrl(String location,String foodImage);// 获取指定资源的具体位置
public static void setAssignedFoodBimapView(String url, ImageView foodImageView);//设置foodImageView视图
- ActivityShowFoodByType.java
public Food selectedFood = new Food();// 用户在界面上选中的所有商品信息
private ArrayList<Food> getServerFoodInfoByType(int flagType);// 根据菜品类型,获取服务器端的菜品信息
private void prepareView();//准备显示在界面的数据
public boolean onCreateOptionsMenu(Menu menu);// 添加功能Menu键
public boolean onOptionsItemSelected(MenuItem item);// 监听用户选中事件
private float getTotalMoney(float price, int number);// 计算(可能含小数位)总金额
public final class ViewHolder{}// Bean对象,用来封装GridView中的一个数据
public View getView(int position, View convertView, ViewGroup parent);// // 返回某一条数据的视图 - AndroidFoodMain.java
此类用于在食品种类之间进行切换,包括肉食类,素食类,鲜汤类 - FoodDetail.java
此类用于存放菜品的详细信息
protected void onCreate(Bundle savedInstanceState);//创建Activity
public String foodTypeTransform(int type);//获取食品的类型
- 运行逻辑 (给出几个时序图,运行画面)
- 注册
4.1.1注册时序图
4.1.2 注册运行画面
- 登录
- 登录时序图
- 登录运行画面
- 订餐
- 订餐时序图
- 订餐运行画面
- 测试 功能,monkey测试
- 基本功能测试
上面的运行逻辑中已经给出基本运行效果,及功能演示,基本功能通过 - Monkey测试
- 通过eclipse启动一个Android的emulator
- 在命令行中输入:adb devices查看设备连接情况
- 在有设备连接的前提下,在命令行中输入:adb shell 进入shell界面
- 测试food.test程序
#monkey -p food.test -v 20
- 改进的可能性
界面显示效果,加入记录用户数据实现自动登录