基于Android平台的菜谱实现1需求分析随着手机的广泛普及,无线技术的突飞猛进,移动生活、移动办公逐渐由概念转变为现实,对于传统的餐饮业也产生了潜移默化的影响。
目前,大多数餐厅仍然以传统的纸质菜单为主。
但是,这种点菜方式存在诸多弊端:从消费者角度来讲,菜谱不能及时更新,导致菜谱信息陈旧,点菜时经常出现某菜品已下架等情况。
用户需求:从餐厅老板来说,及时更新纸质的菜谱,无疑会增加餐厅的额外支出。
为了改善传统纸质菜谱的弊端,将菜谱应用于手机客户端,为消费者带来更为便利的客户体验。
而实时的菜品更新,不仅解决了纸质菜谱短时间内就出现脏、乱、差的问题,实现餐厅无纸化操作,而且潜在的提升了饭店的形象。
功能需求:用户可以进入菜单界面选择菜品分类,进入相应的分类内,查看该分类中的菜品信息,并对菜品的等级程度进行评价,查询某特定菜品,也可添加新菜品,删除菜品等。
2功能实现本APP基于自身的需求,同时对西北大学周围众多餐厅现状的合理分析,结合实际,设计并实现了一个基于移动手机平台的智能菜谱显示,该系统的设计基于Android智能操作系统,简单的SQLite数据库,实现了对菜品的增、删、查、改各个功能。
消费者可以添加要点的菜品,在餐后可以对菜品的口味及好感程度进行具体化的评价,这样是对餐厅工作人员的一个回馈,同时也可以为其他消费者就餐提供建议。
2.1主界面1、实现了对菜品的具体分类。
如图2-1图2-1单击所选择的菜品分类,出现菜品的镜像显示,为消费者提供更为直观的视觉效果,有助于消费者做出选择。
如图2-2图2-22、是进入菜品显示的入口,同时也显示了该软件的使用方法如图2-3:图2-32.2菜谱显示界面1、该类菜品中所有菜品的具体展示,菜品名称、菜品分类、菜品描述、菜品编号、以及菜品的星级评价,单选或多选菜品。
如图2-4:图2-42、搜索菜品菜谱显示界面会显示该分类下的所有菜品,当需要直接看到某单个菜品的具体消息时,可以通过搜索框,进行菜名的特定筛选。
如图2-5图2-53、对菜品进行添加4、删除菜品当菜品长时间被消费者冷落,或者有不想再推出的菜品时,进行及时的删除。
为消费者提供实时的消息。
如图2-6:图2-62.3菜品添加界面当有新的菜品推出时,进行及时的添加,为消费者提供更多选择。
软件对菜品的分类给与明确的选择,给用户提供便利。
如图2-7:图2-73编码3.1镜像显示public class MyMirrorGalleryActivity extends Activity{public MyMirrorGallery gallery;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.my_gallery);//Action BarActionBar actionBar = getActionBar();actionBar.setDisplayHomeAsUpEnabled(true);actionBar.setDisplayShowHomeEnabled(true);actionBar.hide();actionBar.show(); //---show it again---gallery=(MyMirrorGallery)findViewById(R.id.Mygallery);gallery.setAdapter(new MyAdapter(this));}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {super.onCreateOptionsMenu(menu);CreateMenu(menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item){return MenuChoice(item);}private void CreateMenu(Menu menu){MenuItem mnu1 = menu.add(0, 0, 0, "详情显示");{mnu1.setIcon(R.drawable.ic_launcher);mnu1.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER |MenuItem.SHOW_AS_ACTION_WITH_TEXT);}MenuItem mnu2 = menu.add(0, 1, 1, "软件所有权");{mnu2.setIcon(R.drawable.ic_launcher);mnu2.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER |MenuItem.SHOW_AS_ACTION_WITH_TEXT);}MenuItem mnu3 = menu.add(0, 2, 2, "使用说明");{mnu3.setIcon(R.drawable.ic_launcher);mnu3.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER |MenuItem.SHOW_AS_ACTION_WITH_TEXT);}}private boolean MenuChoice(MenuItem item){switch (item.getItemId()) {case android.R.id.home:Toast.makeText(this,"You clicked on the Application icon",Toast.LENGTH_LONG).show();Intent i = new Intent(this, MyMirrorGalleryActivity.class);i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);startActivity(i);return true;case 0:Intent i2 = new Intent(this, MenuActivity.class);i2.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);startActivity(i2);return true;case 1:Toast.makeText(this, "软件说明:",Toast.LENGTH_LONG).show();new AlertDialog.Builder(MyMirrorGalleryActivity.this).setTitle("软件说明:").setMessage("软件著作:***\n适用范围:所有爱好美食的人\n" ).setPositiveButton("确定", null).show();return true;case 2:Toast.makeText(this, "使用说明",Toast.LENGTH_LONG).show();new AlertDialog.Builder(MyMirrorGalleryActivity.this).setTitle("使用说明:").setMessage("使用方法:\n 1.选择食物类型;\n 2.查看食物\n 3.选择心仪的菜品\n" ).setPositiveButton("确定", null).show();return true;}return false;}}3.2添加菜品public class AddFoodActivity extends Activity {protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.addfood);Spinner();Button btn_save=(Button) findViewById(R.id.btn_save);btn_save.setOnClickListener(new OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubEditText editText1_foodname=(EditText) findViewById(R.id.editText1_foodname);//EditText spinner1=(EditText) findViewById(R.id.spinner1);Spinner spinnerGroup = (Spinner) findViewById(R.id.spinner1);EditText editText1_describe=(EditText) findViewById(R.id.editText1_describe);String foodname=editText1_foodname.getText().toString();//String editspinner1=spinner1.getText().toString();String classification = spinnerGroup.getSelectedItem().toString();String describe=editText1_describe.getText().toString();FoodMenu food=new FoodMenu(foodname, describe, classification);MenuService dbOpenHelper=new MenuService(AddFoodActivity.this);dbOpenHelper.add(food);//修改Intent i = new Intent(AddFoodActivity.this, MenuActivity.class);i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);startActivity(i);finish();}});}public boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.add_food, menu);return true;}public boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}private void Spinner(){//分组Spinner填充ArrayList<String> group = new ArrayList<String>();group.add("粥品");group.add("派和糕点");group.add("膨化食品");group.add("酱菜辅料");group.add("敢爱敢做");group.add("饼干");//创建适配器ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,yout.item_spinner,R.id.item_style,group);//获得控件对象Spinner groupSpinner = (Spinner) this.findViewById(R.id.spinner1);//设置spinner对象的数据适配器groupSpinner.setAdapter(adapter);groupSpinner.setPrompt("食物分类");}}3.3菜谱显示public class MenuActivity extends Activity{private ArrayList<CheckBox> checkBox = new ArrayList<CheckBox>();private boolean[] hasChecked;private ListView listView;private RatingBar ratBar;private android.widget.SimpleAdapter adapter;private List<Map<String, Object>> listItems;private Integer[] imgid = {R.drawable.p1,R.drawable.p2, R.drawable.p3,R.drawable.p4, R.drawable.p5,};private CheckBox check;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//去除标题//this.requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(yout.showfood);//Action BarActionBar actionBar = getActionBar();actionBar.setDisplayHomeAsUpEnabled(true);actionBar.setDisplayShowHomeEnabled(true);actionBar.show(); //---show it again---//获得搜索按钮对象ImageButton searchbtn = (ImageButton) findViewById(R.id.searchbtn);//searchButton注册监听事件searchbtn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubEditText searchtext = (EditText) findViewById(R.id.editTextSearch);String name = searchtext.getText().toString();MenuService ms = new MenuService(MenuActivity.this);ArrayList<HashMap<String,Object>> data1 = new ArrayList<HashMap<String,Object>>();List<FoodMenu> list = ms.QueryAllData();for(FoodMenu foodmenu:list){foodmenu.getName().toString();if(name.equals(foodmenu.getName().toString())){HashMap<String,Object> foodMap = new HashMap<String,Object>();foodMap.put("num",foodmenu.getNum());foodMap.put("name",foodmenu.getName());foodMap.put("classification",foodmenu.getClassification());foodMap.put("describe",foodmenu.getDescribe());data1.add(foodMap);}}int a[]=new int []{no,foodname,classification,R.id.bdetail};adapter = new android.widget.SimpleAdapter(MenuActivity.this.getApplicationContext(), data1, yout.list_item2, new String[]{"num","name","classification","describe"}, a);listView=(ListView) findViewById(R.id.listview);listView.setTextFilterEnabled(true);//将listView控件和adapter绑定listView.setAdapter(adapter);listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> adapterView, View view,int position, long id) {// TODO Auto-generated method stubHashMap<String,Object> itemMap = (HashMap<String, Object>)adapterView.getItemAtPosition(position);int num = (Integer) itemMap.get("num");String foodName = (String) itemMap.get("foodName");String foodClassification = (String) itemMap.get("foodClassificatoin");String describe = (String) itemMap.get("describe");FoodMenu foodm = new FoodMenu();foodm.setNum(num);foodm.setName(foodName);foodm.setClassification(foodClassification);foodm.setDescribe(describe);Intent intent = new Intent();intent.putExtra("food", foodm);intent.setClass(MenuActivity.this, ShowInfoActivity.class);MenuActivity.this.startActivity(intent);}});}});MenuService ms = new MenuService(this);//查询所有的菜品List<FoodMenu> list = ms.QueryAllData();//创建一个ArrayList集合,用于存放拥有food信息的MAP集合ArrayList<HashMap<String,Object>> data = new ArrayList<HashMap<String,Object>>();for(FoodMenu foodmenu:list){HashMap<String,Object> foodMap = new HashMap<String,Object>();foodMap.put("num",foodmenu.getNum());foodMap.put("name",foodmenu.getName());foodMap.put("classification",foodmenu.getClassification());foodMap.put("describe",foodmenu.getDescribe());data.add(foodMap);}int a[]=new int []{no,foodname,classification,R.id.bdetail};adapter = new android.widget.SimpleAdapter(this.getApplicationContext(), data, yout.list_item2, new String[]{"num","name","classification","describe"}, a);listView=(ListView) findViewById(R.id.listview);listView.setTextFilterEnabled(true);//将listView控件和adapter绑定listView.setAdapter(adapter);listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> adapterView, View view,int position, long id) {// TODO Auto-generated method stubHashMap<String,Object> itemMap = (HashMap<String, Object>)adapterView.getItemAtPosition(position);int num = (Integer) itemMap.get("num");String foodName = (String) itemMap.get("foodName");String foodClassification = (String) itemMap.get("foodClassificatoin");String describe = (String) itemMap.get("describe");FoodMenu foodm = new FoodMenu();foodm.setNum(num);foodm.setName(foodName);foodm.setClassification(foodClassification);foodm.setDescribe(describe);Intent intent = new Intent();intent.putExtra("food", foodm);intent.setClass(MenuActivity.this, ShowInfoActivity.class);MenuActivity.this.startActivity(intent);}});check =(CheckBox) findViewById(R.id.check_item);check.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {//记录食品选中状态if(isChecked){MenuService ms = new MenuService(MenuActivity.this);ms.delete(listView.getCheckedItemPosition());}}});}4测试1、模块测试主界面、菜品图片显示界面,菜品信息显示界面,添加界面等之间的跳转是否正常,界面之间的衔接是否合理。