智能菜谱课程设计报告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.玩家热议:部分游戏菜单仅提供保存选项有玩家提出了疑问:难道游戏开发商不希望玩家能够轻松地重新开始游戏吗?还是因为现在大多数游戏都已经实现了即时自动存储,因此没有必要再提供读取功能?不过,还有玩家认真地回应说,他们经常会在尝试存储游戏进度时不小心按下了读取键,结果不得不重新进入游戏,浪费了大量的时间。https://m.dancihu.com/article/75300.html
2.TandoorRecipes:开源食谱管理应用TandoorRecipes 是一个开源的食谱管理应用,旨在帮助用户管理日益增长的数字食谱收藏。该项目主要由 HTML、Python、JavaScript、TypeScript、Vue 和 CSS 等编程语言构成。它不仅可以帮助用户管理食谱,还可以规划餐点、创建购物清单等,是一个非常实用的厨房助手。 https://blog.csdn.net/gitblog_00299/article/details/144124827
3.菜谱,menu英语短句,例句大全1.The paper lays the stress on the analysis of the unique terms in the menus of Guangdong dishes that embody the characteristics of Hong Kong Chinese rhetoric.各式菜谱纷呈,最能集中反映出不同地域的饮食文化特色。 英文短句/例句 1.he asked, looking at the menu.他边看着菜谱边问艾玛。 2.copy https://www.xjishu.com/en/061/y373680.html
4.restaurant,Chinesefood,Westernfoodmenu,recipemenu下载得到文件列表 酒店饭店中餐西餐菜单食谱菜谱菜牌餐牌酒水单英文英语翻译(Hotel, restaurant, Chinese food, Western food menu, recipe menu, dish brand, drink list, English translation).doc相关文档 文档介绍文档介绍:酒店饭店中餐西餐菜单食谱菜谱菜牌餐牌酒水单英文英语翻译(Hotel, restaurant, Chinese food,https://m.taodocs.com/p-107469553.html
5.这是你的菜谱吗英语翻译双语例句短语释义9. 有想吃的菜谱吗 Do you have any menu you want to eat 相关单词 1. recipe翻译为;英式[?res?pi]美式[?res?pi] TOEFL高中GMATIELTS初中CET6GRE商务英语考研 网络释义:recipe: 食谱, , , 菜谱 2. your翻译为你的;英式[j(r); j?(r)]美式[j?r,j?r] 初中 网络释义:https://www.yuqimai.com/english-translation/9e1b80e095b13416/
6.西餐菜品英语翻译指南:从开胃菜到甜点!西餐文化博大精深,其菜式名称更是琳琅满目。从开胃菜到主菜,从配菜到甜点,每一味佳肴都拥有一个优雅且精准的英文名称。本文将从四方面详细阐述西餐菜品英文名称的表达方式,带领读者领略西餐语言的魅力。 一、开胃菜 西餐中的开胃菜,旨在刺激食欲,为之后的用餐做好准备。 https://www.coffee.cn/xican/post/482200.html
7.menusecretwaysrecipe的翻译是:菜单方式秘密食谱中文翻译menu secret ways recipe 青云英语翻译 请在下面的文本框内输入文字,然后点击开始翻译按钮进行翻译,如果您看不到结果,请重新翻译! 翻译结果1翻译结果2翻译结果3翻译结果4翻译结果5 翻译结果1复制译文编辑译文朗读译文返回顶部 菜单秘密配方的方法 翻译结果2复制译文编辑译文朗读译文返回顶部http://eyu.zaixian-fanyi.com/fan_yi_12521925
8.青青menu的菜谱豆果美食用户青青menu的菜谱,在这里你可以浏览青青menu的菜谱信息,中文美食菜谱分享网站-豆果美食。https://www.douguo.com/u/u06706717112043/recipe/0
9.免费食品生产制作软件有哪些零代码企业数字化知识站库存管理功能可以实时跟踪食材的库存情况,避免浪费和短缺。采购清单生成功能可以根据库存情况和菜谱需求自动生成采购清单,提高采购效率。销售分析功能则可以对销售数据进行分析,帮助企业了解销售情况和市场趋势,制定更有效的营销策略。 七、MENU CALC Menu Calc是一款功能强大的营养分析和食品管理软件,广泛应用于餐饮业和健康https://www.jiandaoyun.com/blog/article/349612/
10.cookingrecipeinstruction in recipe and menu planning, preparing and cooking of foods, supervising and training kitchen assistants, [] mcts.edu 专业内容包括:菜谱与菜单策划 、食材 制备 与烹饪、厨房助理 的监督与培训、食品供应与厨房 资源管理、食品的观赏美感、以及熟悉或掌握各种 美食与烹饪技巧。 mcts.eduhttp://cn.linguee.com/%E8%8B%B1%E8%AF%AD-%E4%B8%AD%E6%96%87/%E7%BF%BB%E8%AD%AF/cooking+recipe.html
11.CakeRecipeFreerecipes相似应用下载Cake Recipe Free recipes更新内容 Better UISpace saverEasy Web based InterfaceQuick NavigationMenu Options 更多 网友评论更多 下载豌豆荚,参与网友评论互动 暂无评论 应用下载排行榜 UC浏览器 109.61MB 查看 淘宝-天猫双11全球狂欢季 58.77MB 查看 QQ 302.03MB 查看 抖音 261.87MB 查看 相关信息 时间 https://m.wandoujia.com/com.smacon.cake
12.JamieOliverOfficialwebsiteforrecipes,books,TVshowsJamieOliver.com is your one stop shop for everything Jamie Oliver including delicious and healthy recipes inspired from all over the world, helpful food tube videos and much more.https://www.jamieoliver.com/
13.bubblejet是什么意思bubblejet在线翻译英语读音用法例句Noun: a kind of ink-jet printer bubblejet的用法和样例: 例句 用作名词 (n.) To retrieve a menu or recipe, she would have to bring this increasingly flaky machine up and print out a recipe on an aging Canon BubbleJet printer. 为了找回一份菜单或者菜谱,她将不得不先启动这台日益老衰的机器http://dict.cn/bubblejet
14.recipe是什么意思音标翻译成中文用法举例词典中文recipe 英语 翻译配方 英式: [?res?pi]美式: [?res?pi] 单词用法: recipe 在不同场景下,可译为: 烹饪法,食谱,方法,秘诀,诀窍 的意思。 n. 名词 1、方法 2、秘诀 3、诀窍 4、食谱 5、烹饪法单词读音: 您的浏览器不支持 video 标签。 双语例句:https://www.3-eee.net/dictionary/ce9c1e9252e6e3da/
15.如何将python爬出来的数据保存pycharm爬取的数据如何存储4.3.2爬取菜谱图片链接 与上面方法同理,不难发现,图片链接class="recipe_header_c"的div下的第一个div下的img标签的src属性。 故爬虫器代码的parse2里面应该加上下面的代码 #菜谱图片 menuitem['img'] = response.xpath('//div[@class="recipe_header_c"]/div[1]/img/@src').extract() https://blog.51cto.com/u_16213559/8309711
16.烹饪术语和技法recipe食谱/菜谱;ing来自美森商务英语【烹饪术语和技法】 recipe 食谱/菜谱;ingredients 食材;condiment 调味品; seasoning 佐料;sauce 调味汁;技法:chop 剁碎;slice 切片; peel 剥/削;squeeze 压榨/榨汁;grate 擦/搓;pour 倒/灌; stir https://weibo.com/1496967082/NyJm4ABUV
17.有道词典根据标准程序,菜谱,照片和所给的信息准备和烹饪食物。 Prepares and cooks food according to standard procedures, recipe CARDS, photographs and given instructions. 8. 32kb 建立食物成分表、菜谱及RDA数据库,设计程序,开发出家庭一日食谱软件。 Food composition table, menu and RDA data base are set up.https://m.youdao.com/singledict?q=%E7%A8%8B%E5%BA%8F%E8%8F%9C%E8%B0%B1&dict=blng_sents&more=true
18.Epicurious–Recipes,MenuIdeas,Videos&CookingTipsRecipes & Menus Bánh Mì Khong (Bánh Mì Bread) save recipe Recipes & Menus Cà Ri Gà (Vietnamese Chicken Curry) save recipe Recipes & Menus Pineapple Custard Pie save recipe Recipes & Menus Ube Milk Crinkles save recipe Recipes & Menus Mentaiko Spaghetti save recipe Expert Advice 3 Wayshttps://www.epicurious.com/
19.2024年初中英语阅读理解综合能力训练(16)英语阅读6. recipe n.菜谱,[医]处方,诀窍 参考答案 1-5 CCABC 编辑推荐: 2024年中考各科目重点知识汇总 最新中考资讯、中考政策、考前准备、中考预测、录取分数线等 中考时间线的全部重要节点 尽在"中考网"微信公众号 欢迎使用手机、平板等移动设备访问中考网,2023中考一路陪伴同行!>>点击查看分享http://www.zhongkao.com/e/20231023/653679bd2a2b0.shtml