安卓APP源碼和設(shè)計(jì)報(bào)告(含PPT)——訂餐系統(tǒng)




















課程名稱: Android程序設(shè)計(jì)
班 級(jí):
學(xué) 號(hào):
姓 名:
任課教師:
程序功能與環(huán)境(服務(wù)器,手機(jī)實(shí)物照片,自己拍)
程序功能
餐廳訂餐系統(tǒng)服務(wù)器,提供訂餐服務(wù)
餐廳訂餐系統(tǒng)客戶端,用戶用來提交訂單
環(huán)境
帶有tomcat服務(wù)器的PC機(jī)一臺(tái),發(fā)布訂餐服務(wù)支持
安卓手機(jī)一部,測(cè)試客戶端
局域網(wǎng)環(huán)境,用來測(cè)試程序功能
MVC架構(gòu)用例,類圖,(類圖可以將文檔頁面放大了看)
數(shù)據(jù)與設(shè)計(jì)
food.test.domain
Food.java
此類用于封裝用戶購買菜品的信息
public int foodId; //菜品編號(hào)
public String foodName; //菜品名稱
public float foodPrice; //菜品價(jià)格
public int foodType; //菜品類型
public String foodDescri; //菜品描述
public String foodImage; //菜品圖片——暫定為String類型用于存儲(chǔ)圖片名
food.test.hyl
OrderListActivity.java
此類為用戶填寫訂購信息的Activity,用來處理訂購信息,與用戶進(jìn)行交互,是連接用戶和服務(wù)器的橋梁
protected void onCreate(Bundle); //創(chuàng)建activity
在onCreate函數(shù)中定義了兩個(gè)按鈕,并設(shè)置了監(jiān)聽函數(shù):
bsubmit.setOnClickListener(new OnClickListener() {//提交清單按鈕被按下
public void onClick(View v) {} //按鈕被按下時(shí)觸發(fā)
private void callPost(Object[][] foods, String address,
String email, String telephone, String suggest,String userId,String userName) {}//創(chuàng)建post方法,用來像服務(wù)端發(fā)送post請(qǐng)求
};
bcancel.setOnClickListener(new OnClickListener() {//取消按鈕被按下。
//用intent調(diào)用返回購物車界面
Intent intent = new Intent(OrderListActivity.this,ShopCartShowAll.class);
startActivity(intent);
});
protected Dialog onCreateDialog(int id); //創(chuàng)建對(duì)話框,用來顯示用戶提交信息的狀態(tài)
void onResume();//在視圖按home鍵退出后,然后恢復(fù)時(shí)調(diào)用
food.test.ld
ActivityComment.java
此Activity是用來給用戶填寫對(duì)菜品的評(píng)論信息的,并提交到服務(wù)器
設(shè)置了兩個(gè)按鈕bdone和brevert并設(shè)置監(jiān)聽,被點(diǎn)擊時(shí)觸發(fā)
Bdone,提交信息
Brever,重寫信息ActivityMainInterface.java
此類創(chuàng)建了選擇菜單,用來選擇對(duì)菜品進(jìn)行評(píng)論
@Override
public boolean onCreateOptionsMenu(Menu menu) {}//創(chuàng)建選擇菜單
@Override
public boolean onOptionsItemSelected(MenuItem item) {}//菜單項(xiàng)被點(diǎn)擊時(shí)調(diào)用ActivityRegister.java
此Activity類用來進(jìn)行用戶注冊(cè)
bdone.setOnClickListener(new OnClickListener();設(shè)置用戶信息完成時(shí)提交信息按鈕監(jiān)聽
在public void onClick(View v);中測(cè)試用戶名及密碼是否為空,為空時(shí)給出提示,并判斷兩次輸入的密碼是否相同
,并設(shè)置相同時(shí)跳轉(zhuǎn)到用戶登錄界面即主界面OrderFoodLogin.java
此類用于用戶登錄,并將用戶信息提交到服務(wù)器進(jìn)行匹配,并提示登錄信息
方法與上面的類似
mp = new MediaPlayer();//播放音樂
接下來的幾個(gè)函數(shù)用來控制播放音樂
food.test.sfp
UserLogin.java
此類用來創(chuàng)建顯示用戶登錄狀態(tài)的對(duì)話框,并通過toast給出登錄狀態(tài)信息
private Dialog createLoginDialog(Context context){}//創(chuàng)建登錄對(duì)話框
@Override
protected Dialog onCreateDialog(int id); //重寫創(chuàng)建對(duì)話框函數(shù)
food.test.util
DButil.java
此類為數(shù)據(jù)庫工具類,用于對(duì)數(shù)據(jù)庫的操作
public DButil(Context context);//DButil的構(gòu)造函數(shù)
private void init();//數(shù)據(jù)庫初始化函數(shù)
public long addFood(ShopCart food); // 新增一條購買商品記錄
public Cursor getAllCartCursor();//查詢所有的游標(biāo)
public ArrayList getAllShopCart();//得到購物車表里的所有數(shù)據(jù)
public ArrayList<ShopCart> getFoodFromCart();//返回所有shopCart類型的ArrayList
public int ModifyShopcart(int foodId,int foodnum,float foodsumprices ); //修改購物車中所有的數(shù)據(jù)
public int deleteAllShopcart();//刪除購物車中所有的數(shù)據(jù)
public int deleteFood(String whereparam); //刪除不需要的商品
public ShopCart findFood(int foodid); //查找需要的商品
public SQLiteDatabase getDB();//獲取數(shù)據(jù)庫連接
public void close();//關(guān)閉數(shù)據(jù)庫
class MySQLiteHelper extends SQLiteOpenHelper{};//內(nèi)部類,創(chuàng)建數(shù)據(jù)庫輔助類HttpCallUtil.java
此類封裝了HTTP的連接
public String getConntionPost(String url, String name,String psw,List data);// post請(qǐng)求
public List putParam(List data);// 傳遞給服務(wù)端的數(shù)據(jù),用Map進(jìn)行封裝
public String getConntionGet(String url);// get請(qǐng)求
public void getConntionImage(String url,ImageView iv);// 取得圖片Util.java
此類為工具類
public Adapter initAdapter(Context context,ArrayList list,Cursor cur,int layout,String[] from,int[] to);// 實(shí)例化不同的適配器
food.test.wjf
ModifyListCart.java
此類用于修改購物車中的信息,比如訂購的數(shù)量等
Intent intent = getIntent(); //獲取從購物車中傳過來的信息
foodid = intent.getIntExtra("foodid", 0); //拿到購物車中傳過來的食品編號(hào) foodID
foodname = intent.getStringExtra("foodname");//拿到購物車中傳過來的食品名稱foodname
foodnum=intent.getIntExtra("foodnum", 1); //拿到購物車中傳過來的食品訂購數(shù)量
foodprice = intent.getFloatExtra("foodprice", 1.0f); //拿到購物車中傳過來的食品單價(jià)foodpricce
bmodify.setOnClickListener(new OnClickListener() {//設(shè)置修改按鈕監(jiān)聽函數(shù),設(shè)置當(dāng)按鈕被點(diǎn)擊時(shí)修改食品的訂購信息,并返回到購物車
db.ModifyShopcart(foodid, foodnum, sumfoodprices); //對(duì)購物車中的食品進(jìn)行修改
Intent intent = new Intent(ModifyListCart.this, ShopCartShowAll.class);// //回到購物車界面
startActivity(intent);ShopCart.java
定義一個(gè)購物車的類,封裝購物車的信息
private int foodId;// 商品id
private String foodName;// 商品名稱
private float foodPrice;// 商品單價(jià)
private int foodNum;// 商品數(shù)量
private float sumPrices;// 商品金額
private int image;// 商品圖片
下面為每個(gè)變量設(shè)置set和get方法ShopCartAdd.java
此類用于添加購物車,并設(shè)置跳轉(zhuǎn)到購物車界面ShopCartShowAll.java
此類用來顯示購物車中的所有食品,并對(duì)食品進(jìn)行增刪操作
db=new DButil(this); //初始化數(shù)據(jù)庫
shopcur=db.getAllCartCursor();//獲得購物車中所有的游標(biāo)
shopcartList=db.getAllShopCart();//獲取數(shù)據(jù)庫中所有的數(shù)據(jù)
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) ;//創(chuàng)建修改,刪除對(duì)話框,設(shè)置按鈕監(jiān)聽
private Dialog builder2(Context ctx);//創(chuàng)建確認(rèn)刪除對(duì)話框
public boolean onCreateOptionsMenu(Menu menu);創(chuàng)建菜單功能,按菜單鍵彈出
public boolean onOptionsItemSelected(MenuItem item);選擇菜單項(xiàng)時(shí)觸發(fā)ShowListCart.java
顯示購物車列表
food.test.zqz
util
FoodType.java
默認(rèn)為“肉食”FOOD_MEAT類GetNetWorkData.java
從服務(wù)器獲取有關(guān)主界面的所有數(shù)據(jù)
public final static StringBuffer getConnectionPost(String url,
HashMap<String, String> params);// url服務(wù)器端的URI地址, params發(fā)給服務(wù)端的請(qǐng)求參數(shù),以鍵值對(duì)的形式封裝名字和對(duì)應(yīng)的值,其中params的名字鍵位應(yīng)該跟服務(wù)端保持一致
public final static ArrayList<Food> decodeResponseData(String sb);// 對(duì)服務(wù)器端的響應(yīng)數(shù)據(jù)進(jìn)行“解碼”, sb服務(wù)器端的響應(yīng)數(shù)據(jù)
public static ArrayList<Food> decode(ArrayList<Food> resData, String itemStr);// 對(duì)圖片的接收
public static ArrayList<String> getAllFoodBitmapUrl(int foodType, String location, ArrayList<Food> foods);// return 對(duì)應(yīng)菜品類型所有資源的URL的字符串
public static String getAssignedFoodBitmapUrl(String location,String foodImage);// 獲取指定資源的具體位置
public static void setAssignedFoodBimapView(String url, ImageView foodImageView);//設(shè)置foodImageView視圖
ActivityShowFoodByType.java
public Food selectedFood = new Food();// 用戶在界面上選中的所有商品信息
private ArrayList<Food> getServerFoodInfoByType(int flagType);// 根據(jù)菜品類型,獲取服務(wù)器端的菜品信息
private void prepareView();//準(zhǔn)備顯示在界面的數(shù)據(jù)
public boolean onCreateOptionsMenu(Menu menu);// 添加功能Menu鍵
public boolean onOptionsItemSelected(MenuItem item);// 監(jiān)聽用戶選中事件
private float getTotalMoney(float price, int number);// 計(jì)算(可能含小數(shù)位)總金額
public final class ViewHolder{}// Bean對(duì)象,用來封裝GridView中的一個(gè)數(shù)據(jù)
public View getView(int position, View convertView, ViewGroup parent);// // 返回某一條數(shù)據(jù)的視圖AndroidFoodMain.java
此類用于在食品種類之間進(jìn)行切換,包括肉食類,素食類,鮮湯類FoodDetail.java
此類用于存放菜品的詳細(xì)信息
protected void onCreate(Bundle savedInstanceState);//創(chuàng)建Activity
public String foodTypeTransform(int type);//獲取食品的類型

訂餐運(yùn)行畫面






測(cè)試 功能,monkey測(cè)試
基本功能測(cè)試
上面的運(yùn)行邏輯中已經(jīng)給出基本運(yùn)行效果,及功能演示,基本功能通過Monkey測(cè)試
通過eclipse啟動(dòng)一個(gè)Android的emulator
在命令行中輸入:adb devices查看設(shè)備連接情況

在有設(shè)備連接的前提下,在命令行中輸入:adb shell 進(jìn)入shell界面

測(cè)試food.test程序
#monkey -p food.test -v 20

改進(jìn)的可能性
界面顯示效果,加入記錄用戶數(shù)據(jù)實(shí)現(xiàn)自動(dòng)登錄