智能菜谱课程设计报告studentPDY

随着智能手机的普及,基于Android平台的应用软件需求也越来越多。针对传统订餐模式中餐馆工作人员重复劳动量大、消费者在不熟悉地区难以寻找适合自己的餐馆、必须要进入到餐馆内才可以浏览菜单开始点餐以及物理菜单不能及时更新更不能反映菜品的评价等缺点,提出基于Android平台的智能菜谱系统的设计和实现解决方案。阐述了系统的设计思想、开发模型、主要功能模块以及关键技术的设计与实现。

2.需求用例图

3.用例分析

(1)用例名称:今日推荐

说明:每进一次首页都会推荐

不同的菜品,可自行选择

(2)用例名称:分类查询

说明:有九种类型的菜,每种类型

的菜又可以分很多菜品,可

任意选择进行查询

(3)用例名称:添加收藏

说明:用户可把喜欢的菜添加到收藏

(4)用例名称:删除收藏

说明:用户可把不喜欢的菜从收藏中

删除

(5)用例名称:上传我的菜品

说明:可以把自己喜欢或会做的菜

二、系统设计

1.系统功能

2.核心模块时序图

3.核心模块类图

三、系统数据库设计

由于本系统是对广大用户所使用的,所以要充分考虑用户的需求。本系统采用了SQLite数据库设计,占用资源低,处理速度快。以表格的形式列出每一个数据库表的表结构,即字段名、类型、长度、小数位数、是否主键、索引、是否允许为空、说明等。并介绍表与表之间的逻辑关系。

Information表结构

字段名

数据类型

长度

主键

索引

外键

可空

说明

id

int

20

菜品id

name

String

菜品名字

method

Unknow

烹饪方法

material

30

材料

is_favor

喜欢的菜品

type_id

种类id

四、系统测试

本次实习所用的开发环境为:

开发所涉及的应用:UI设计,activity组件的应用,file存储

服务器:Androidstudio

数据库:SQLite

开发工具:Androidstudio,SQLite

界面制作:UI

1.项目测试

1、测试软件作品能否在模拟器和手机上正常运行

2、测试数据库能否顺利连接

3、测试软件作品各个功能能否正常进行:

3.2、测试分类查询功能是否能正常使用

3.3、测试收藏功能是否能正常使用

3.4、测试上传菜品功能是否能正常使用

2.测试结果

不同界面运行图如下:

五.系统实现

部分关键代码如下:

packagecom.example.lm.cook;importandroid.content.Intent;importandroid.support.v7.app.AppCompatActivity;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Toast;

2.分类查询界面

进入分类查询界面,可以任意查询各类菜品,也可以通过右上角搜索工具对喜欢的菜直接进行搜索查询,就可以不用一一查询菜品了。

publicbooleanonCreateOptionsMenu(Menumenu){getMenuInflater().inflate(R.menu.menu_search,menu);MenuItemitem=menu.findItem(R.id.menu_item_search);mSearchView=(SearchView)item.getActionView();if(mSearchView!=null){mSearchView.setInputType(InputType.TYPE_CLASS_TEXT);mSearchView.setSubmitButtonEnabled(false);mSearchView.setQueryHint(getString(R.string.search_hint));mSearchView.setOnQueryTextListener(this);mSearchView.setOnSearchClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){mRadioGroup.setVisibility(View.GONE);mActionBar.setDisplayHomeAsUpEnabled(true);mCookDao=newCookDao(MainActivity.this);FragmentTransactiontransaction=mFragmentManager.beginTransaction();hideAllFgt(transaction);if(mSearchFgt==null){mSearchFgt=newSearchFgt();transaction.add(R.id.main_content,mSearchFgt);}else{transaction.show(mSearchFgt);}transaction.commit();}});}returntrue;}

3.收藏界面

对各种菜品进行查询后,可以把自己喜欢的菜添加到收藏里,方便以后查找,也可以删除收藏里的菜品,进行清理。

4.更多界面

packagecom.example.lm.cook.fragment;

}}

其他部分关键代码:

//其他方法可自行扩展}

}

六.总结

附件1:

智能菜谱系统

技术说明

用到了UI技术,运用了SQLite数据库存储对菜品进行增删改查,在Androidstudio中运用LinearLayout和RelativeLayout嵌套,主要用到的控件有Button、TextView、view、ImageView。通过在java类中定义和设置监听事件来进行点击设置相应属性。

UML类图

代码

清单文件:

布局文件:

1.截图

2.原文件

java原码

packagecom.example.lm.cook;

importandroid.support.v7.app.AppCompatActivity;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.EditText;importandroid.widget.Toast;

publicclassAddActivityextendsAppCompatActivity{

privateEditTexted1;privateEditTexted2;

@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_add);//上传ed1=(EditText)findViewById(R.id.ed_1);ed2=(EditText)findViewById(R.id.ed_2);findViewById(R.id.btn).setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){Stringed11=ed1.getText().toString().trim();Stringed22=ed2.getText().toString().trim();Toast.makeText(AddActivity.this,"上传成功",Toast.LENGTH_SHORT).show();finish();}});}}

importandroid.support.v7.app.ActionBar;importandroid.support.v7.app.AppCompatActivity;importandroid.os.Bundle;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.widget.Toast;

importcom.example.lm.cook.dao.CookDao;importcom.example.lm.cook.fragment.DetailFgt;importcom.example.lm.cook.pojo.Cook;importcom.example.lm.cook.utils.Const;

publicclassDetailActivityextendsAppCompatActivity{privatebooleanisFavorite;privateintmCookId;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_detail);mCookId=getIntent().getIntExtra(Const.COOK_KEY,0);CookDaocookDao=newCookDao(this);Cookcook=cookDao.getCook(mCookId);ActionBaractionBar=getSupportActionBar();if(actionBar!=null){actionBar.setDisplayHomeAsUpEnabled(true);}setTitle(cook!=nullcook.getName():null);isFavorite=cook!=null&&cook.isFavorite();if(savedInstanceState==null){DetailFgtdetailFgt=DetailFgt.newInstance(cook);getSupportFragmentManager().beginTransaction().add(R.id.detail_content,detailFgt).commit();}}

@OverridepublicbooleanonCreateOptionsMenu(Menumenu){getMenuInflater().inflate(R.menu.menu_favor,menu);if(isFavorite){menu.getItem(0).setIcon(R.mipmap.favorite);menu.getItem(0).setTitle(getString(R.string.cancel_favor));}returntrue;}

@OverridepublicbooleanonOptionsItemSelected(MenuItemitem){if(item.getItemId()==android.R.id.home){finish();}elseif(item.getItemId()==R.id.menu_item_favor){CookDaocookDao=newCookDao(this);if(cookDao.doFavor(mCookId,isFavorite)){if(isFavorite){item.setIcon(R.mipmap.not_favorite);item.setTitle(R.string.cancel_favor);Toast.makeText(this,R.string.cancel_favor,Toast.LENGTH_SHORT).show();}else{item.setIcon(R.mipmap.favorite);item.setTitle(getString(R.string.favor));Toast.makeText(this,R.string.favor_succeed,Toast.LENGTH_SHORT).show();}isFavorite=!isFavorite;}}returntrue;

importandroid.content.Intent;importandroid.support.v7.app.AppCompatActivity;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Toast;

publicclassLoginActivityextendsAppCompatActivity{

importandroid.content.Intent;importandroid.support.v4.app.Fragment;importandroid.support.v4.app.FragmentManager;importandroid.support.v4.app.FragmentTransaction;importandroid.support.v7.app.ActionBar;importandroid.support.v7.app.AppCompatActivity;importandroid.os.Bundle;importandroid.text.InputType;importandroid.text.TextUtils;importandroid.view.KeyEvent;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.view.View;importandroid.widget.RadioButton;importandroid.widget.RadioGroup;importandroid.widget.SearchView;importandroid.widget.Toast;

importcom.example.lm.cook.dao.CookDao;importcom.example.lm.cook.fragment.CategoryFgt;importcom.example.lm.cook.fragment.CookFgt;importcom.example.lm.cook.fragment.FavorFgt;importcom.example.lm.cook.fragment.IndexFgt;importcom.example.lm.cook.fragment.MoreFgt;importcom.example.lm.cook.fragment.SearchFgt;importcom.example.lm.cook.pojo.Category;importcom.example.lm.cook.pojo.Cook;importcom.example.lm.cook.utils.Const;

importjava.util.ArrayList;importjava.util.List;

privatevoidhideAllFgt(FragmentTransactiontransaction){for(inti=0;i<4;i++){Fragmentfragment=mFragments.get(i);if(fragment!=null&&fragment.isVisible()){transaction.hide(fragment);}}if(mCookFgt!=null){transaction.detach(mCookFgt);}if(mSearchFgt!=null&&mSearchFgt.isVisible()){transaction.hide(mSearchFgt);}}

@OverridepublicbooleanonCreateOptionsMenu(Menumenu){getMenuInflater().inflate(R.menu.menu_search,menu);MenuItemitem=menu.findItem(R.id.menu_item_search);mSearchView=(SearchView)item.getActionView();if(mSearchView!=null){mSearchView.setInputType(InputType.TYPE_CLASS_TEXT);mSearchView.setSubmitButtonEnabled(false);mSearchView.setQueryHint(getString(R.string.search_hint));mSearchView.setOnQueryTextListener(this);mSearchView.setOnSearchClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){mRadioGroup.setVisibility(View.GONE);mActionBar.setDisplayHomeAsUpEnabled(true);mCookDao=newCookDao(MainActivity.this);FragmentTransactiontransaction=mFragmentManager.beginTransaction();hideAllFgt(transaction);if(mSearchFgt==null){mSearchFgt=newSearchFgt();transaction.add(R.id.main_content,mSearchFgt);}else{transaction.show(mSearchFgt);}transaction.commit();}});}returntrue;}

@OverridepublicbooleanonOptionsItemSelected(MenuItemitem){if(item.getItemId()==android.R.id.home){FragmentTransactiontransaction=mFragmentManager.beginTransaction();if(mSearchFgt!=null&&mSearchFgt.isVisible()){hideSearchView(transaction);}elseif(mCookFgt!=null&&mCookFgt.isVisible()){hideCookFgt(transaction);}setTitle(mTitle);mActionBar.setDisplayHomeAsUpEnabled(false);transaction.commit();returntrue;}returnsuper.onOptionsItemSelected(item);}

privatevoidhideCookFgt(FragmentTransactiontransaction){mSearchView.setVisibility(View.VISIBLE);transaction.detach(mCookFgt);transaction.show(mCategoryFgt);}

privatevoidhideSearchView(FragmentTransactiontransaction){mRadioGroup.setVisibility(View.VISIBLE);mSearchView.clearFocus();mSearchView.setQuery(null,false);mSearchView.setIconified(true);transaction.hide(mSearchFgt);transaction.show(mFragments.get(mCurIndex));}

@OverridepublicvoidgetCategory(Categorycategory){mSearchView.setVisibility(View.INVISIBLE);setTitle(category.getTitle());mActionBar.setDisplayHomeAsUpEnabled(true);FragmentTransactiontransaction=mFragmentManager.beginTransaction();hideAllFgt(transaction);if(mCookFgt!=null){mCookFgt.refresh(category);transaction.attach(mCookFgt);}else{mCookFgt=CookFgt.newInstance(category);transaction.add(R.id.main_content,mCookFgt);}transaction.setCustomAnimations(android.R.anim.fade_in,android.R.anim.fade_out);transaction.commit();}

@OverridepublicbooleanonQueryTextSubmit(Stringquery){returnfalse;}

@OverridepublicbooleanonQueryTextChange(StringnewText){ListcookList=null;if(!TextUtils.isEmpty(newText)){cookList=mCookDao.findCooks(newText);}mSearchFgt.refresh(cookList);returntrue;}

@OverridepublicvoidgetCook(intcookId){Intentintent=newIntent(this,DetailActivity.class);intent.putExtra(Const.COOK_KEY,cookId);startActivity(intent);}

@OverridepublicbooleanonKeyDown(intkeyCode,KeyEventevent){if(keyCode==KeyEvent.KEYCODE_BACK&&event.getAction()==KeyEvent.ACTION_DOWN){FragmentTransactiontransaction=mFragmentManager.beginTransaction();if(mSearchFgt!=null&&mSearchFgt.isVisible()){hideSearchView(transaction);setTitle(mTitle);mActionBar.setDisplayHomeAsUpEnabled(false);}elseif(mCookFgt!=null&&mCookFgt.isVisible()){hideCookFgt(transaction);mActionBar.setDisplayHomeAsUpEnabled(false);}elseif((System.currentTimeMillis()-exitTime)>2000){Toast.makeText(getApplicationContext(),R.string.exit_hint,Toast.LENGTH_SHORT).show();exitTime=System.currentTimeMillis();}else{finish();}transaction.commit();returntrue;}returnsuper.onKeyDown(keyCode,event);}}

importandroid.content.Intent;importandroid.content.SharedPreferences;importandroid.os.AsyncTask;importandroid.preference.PreferenceManager;importandroid.support.v7.app.AppCompatActivity;importandroid.os.Bundle;

importcom.example.lm.cook.utils.Const;importcom.example.lm.cook.utils.FileUtils;

importjava.io.File;importjava.util.Timer;importjava.util.TimerTask;

publicclassSplashActivityextendsAppCompatActivity{//闪屏界面@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_splash);//SharedPreferences存储SharedPreferencessharedPreferences=PreferenceManager.getDefaultSharedPreferences(this);booleanexist=sharedPreferences.getBoolean(Const.SP_KEY,false);if(!exist){SharedPreferences.Editoreditor=sharedPreferences.edit();editor.putBoolean(Const.SP_KEY,true);editor.apply();newFileTask().execute();}else{TimerTasktask=newTimerTask(){@Overridepublicvoidrun(){startMain();}};Timertimer=newTimer();timer.schedule(task,Const.DELAY_TIME);}

privatevoidstartMain(){Intentintent=newIntent(SplashActivity.this,MainActivity.class);startActivity(intent);finish();overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);}

privateclassFileTaskextendsAsyncTask{

@OverrideprotectedVoiddoInBackground(Void...params){init();returnnull;}

@OverrideprotectedvoidonPostExecute(VoidaVoid){super.onPostExecute(aVoid);startMain();}}}

类说明

LoginActivity类:

DetailActivity类:

有“添加收藏”,“删除收藏”,“收藏”三个按钮事件

点击收藏按钮可以在数据库表中查询添加收藏的数据,点击删除收藏按钮可以删

除表中的数据。

AddActivity类:

为“上传成功”按钮设置监听事件,实现上传成功后的页面跳转

SplashActivity类:

MainActivity类:

为“再按一次退出程序”按钮设置监听事件,点击该按钮将退出程序,跳转到退出后的界面

THE END
1.学做菜的app排行榜前十名十大免费学做菜软件app推荐现在爱好下厨房自己动手做菜的人群越来越多,而想要学做菜的人们面对着繁多的食材可能无法快速下手,而一款好用的做菜app可以更具食材快速搜索到想做的菜的详细做法,而菜谱app就成了家里面做饭的主要工具,这里小编给大家带来了学做菜软件app排行榜https://www.ddooo.com/zt/zcrj.htm
2.适合厨房小白的app厨房小白学做饭app厨房小白必备软件厨房小白app可以让一些零基础入门的小白们轻松学习如何做饭菜,通过一系列的基础学习,让你从厨房的小白变成大神,还可以慢慢挑战高难度的食谱,让你的厨艺越来越高。今天小编就给大家带来了一些适合厨房小白的app,你可以按照自己的需求来进行选择。在一些软件内会提供新人必做的菜谱,通基础的家常菜开始练习,一般菜谱上都http://www.downcc.com/k/chufangxiaobaiapp/
3.掌上菜谱APP的设计与实现菜谱软件设计说明掌上菜谱APP的设计与实现 摘要 在互联网高速发展的今天,各种小程序、APP 的开发也如火如荼,人们的衣食住行也由此而改变。随着生活水平的不断提高,人们对自主烹饪的兴趣日益浓厚,各式各样的菜谱 APP 也应运而生。菜谱 APP 已经极大地改变了人们学习烹饪的方式,人们不再拘泥于传统的纸质菜谱,而是利用各类移动端菜谱https://blog.csdn.net/m0_66309026/article/details/138973706
4.基于android的菜谱app的设计与实现菜谱应用基于android的菜谱app的设计与实现 菜谱应用 想要开发出一款靠谱好用的美食菜谱APP小程序系统,需要具备哪些基本功能呢? 1、视频教学。对于美食的教学教学方法最直接受用的就是视频教学,用户浏览起来更加方便而且可以直接跟着视频操作,效果更佳。用户也可以自己拍摄制作美食的视频上传到平台,分享给其他用户浏览查看,既提高https://blog.51cto.com/u_12205/9416648
5.界面设计小小厨美食菜谱APP韩小莹北京| UI设计师 创作30粉丝4582 plady 广州| UI设计师 创作34粉丝5048 韩冰云 杭州| UI设计师 创作45粉丝17859 创作28粉丝13594 创作10粉丝2673 创作18粉丝10946 创作15粉丝1123 创作45粉丝55402 sunkim 广州| UI设计师 创作42粉丝8521 智能语音菜谱类APP,以菜谱作为核心功能主打图文播放和视频播放,实时推送精选菜https://www.zcool.com.cn/work/ZMzUwMTg2OTY=.html
6.多功能美食菜谱APP方案设计毕业设计论文.pdf多功能美食菜谱APP方案设计毕业设计论文.pdf,摘要 本设计主要针对Android移动平台多功能美食彩票系统进行分 析和设计。设计一款基于Android的一款多功能菜谱软件,客户通过 手机能够获取美食菜谱、食材信息、健康资讯、在线社区以及线上、 线下互动服务。本次APP设计以内容https://max.book118.com/html/2021/0107/8062106036003035.shtm
7.十大好用的美食菜谱app厨房小白新手下厨必备的学做菜视频app想学做菜的你,面对食材无从下手?其实很简单,手机上下载个菜谱app就能搜索你想做的菜详细做法。那么菜谱app哪个好用?MAIGOO小编特地给大家整理了十大好用的美食菜谱app排行榜,包含下厨房APP、豆果美食APP、香哈菜谱app、好豆菜谱app、美食杰App、美食天下app等国内好用https://m.maigoo.com/goomai/207069.html
8.美食菜谱app手机界面图片免费下载美食菜谱app手机界面素材千图网为您找到163张美食菜谱app手机界面相关素材,千图网还提供美食菜谱app手机界面图片,美食菜谱app手机界面素材, 美食菜谱app手机界面模板等免费下载服务,千图网是国内专业创意营销服务交易平台,一站式解决企业营销数字化、协同化,实现营销转化效果增长!https://www.58pic.com/tupian/meishicaipuappshoujijiemian.html
9.美食菜谱类APP界面设计今天跟大家分享的是一款美食菜谱类APP的界面设计。现在美食菜谱类的APP有很多,如何才能在众多的竞争对手中脱颖而出。APP界面设计是一个重要的因素。一起来看看这款“妈妈快厨”APP的界面设计,对您设计相关的APP有所帮助。 1、颜色选择 2、图标设计 3、登录注册界面 https://www.adinnet.cn/bloginfo/2018_05/blog_3721.html
10.美食教程app排行榜前十名偏玩手游盒子>美食教程app合辑手机美食教程app排行榜TOP10下载民以食为天,吃是人生中的头等大事,现代人对“吃”越来越讲究,各种各样的主流美食教程app应运而生,无论是“找吃的”还是“做吃的”, 这些资深吃货必备APP,总有一款适合你。下厨房家常菜app 2024-11-27 菜谱 食谱 立即下载 懒饭美食 2023-12-25https://m.pianwan.com/s/zj-1744769
11.做菜不用再问妈:这7个App换着用,让你从厨房小白变大厨一款设计精美的菜谱 app,推荐大都为异域美食,可以拓展自己美食边界。内置主题菜谱不仅能让人学会怎么做饭,还能教会你为什么要这么做。每个菜谱明确标记了烹饪时间和每份所含营养值,若为烘焙菜谱还会给出静置时间作为参考。在食材方面可以选择为几个人做饭,并根据人数来确定食材的多少。所有菜谱食材均可一键加入购物单,买菜https://36kr.com/p/1390010704837635
12.请设计一份幼儿园一个星期的菜谱。锅炉、压力容器中的气瓶等高耗能特种设备的设计文件,应当经国务院特种设备安全监督管理部门核准的检验检测机构鉴定,方可用于制造。 A. 正确 B. 错误 查看完整题目与答案 HSE管理中的HSE分别指的是( )。 A. 健康 B. 安全 C. 环境 D. 能源 查看完整题目与答案 员工有权拒绝不符合HSE的工作、有权https://www.shuashuati.com/ti/30a705f9cab342a38e7012df052b7b92.html
13.app软件设计制作手机app商城开发app封装定制公司海拔网络研发家具商城APP一般具备什么功能? 2021-11-30 当下商城APP研发模式十分成熟,但是功能来来回回都是哪些,那么问题来了,研发家具商城APP一般具备什么功能?下面看看小编是如何回答你的! 菜谱APP开发软件兼具哪些功能? 2021-11-29 当下的年轻人都喜欢点外卖,不喜欢做饭。由于外卖十分便捷,可是做饭也是生活中不能缺少的技http://www.haibagroup.cn/
14.下厨房App的体验创新选题围绕人们自我烹饪美食的问题,也是针对“下厨房”这类菜谱查询,分享菜谱和食谱课程学习App的体验问题,展开的用户体验分析和交互设计创新。选题App也可以用“美食达人”、“烹饪能手”、“厨师菜单”等名字。该选题的目标用户为以本人为核心的一群人。 一、选题:初步的活动定义https://www.jianshu.com/p/4450ff97db19
15.开餐厅如何设计菜单十个技巧教你做有颜值的菜单功能和作用不一样 ,设计也要不一样 一个菜单设计可能不够。你需要为到餐厅用餐的顾客提供一个菜单,包括纸质菜单,角落的广告牌或者用来点餐的数字屏。很多餐厅同样会在他们的网站上提供菜单,另一些则还提供app菜单。 跨平台的菜单设计最需要考虑的是图片。你不仅需要十分谨慎地挑选印刷使用的图片,图片同样对于网站和http://www.bjcpdy.com/nd.jsp?id=72
16.减肥打卡计划app下载相关合辑 减肥打卡软件减肥打卡软件app减肥计划软件免费轻断食减肥计划app计算卡路里的减肥软件免费减肥计划app免费减肥打卡记录体重app每日计划的打卡软件记录减肥打卡app减肥计算卡路里软件减肥的app软件减肥app软件 设计装修房子的app软件刷卡app软件设计app软件设计app的软件停车app软件隐藏app软件免费 https://m.liqucn.com/rj/9309969983092.wml
17.以叮咚买菜为例,看生鲜电商的春天是否已经到来京东京东到家生鲜电展示的并非商品详情,而是“推荐做法”以及紧随“常见问题”与“评价”其后的“为你推荐”设置;这一设置可以帮助一些买了“不知道怎么做”的用户来说显得十分贴心,直接将用户购买的场景转移到用户买回去以后在家烹制的场景;丰富多样的菜谱无论是对厨房“新手”或是经验丰富的“老手”来说,都可谓是十分用心的一个设计https://3g.163.com/dy/article_cambrian/FLEDOK8N0511805E.html