智能菜谱课程设计报告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将是宝贵助手; https://www.chuutacua.cn/di-wen-shi-pin/840555.html
2.家庭食谱菜谱食材网上商城系统小程序ko137uniapp+hbuilderx 错误处理和异常处理 小程序框架以及目录结构介绍 java类核心代码部分展示 源码获取/详细视频演示 项目介绍 第一部分是对于普通用户而言。 1、普通用户需要做的是通过这个平台来进行登录,登录进去之后进去系统的首页可以查看相关的菜品分类和一些详情的信息。 https://blog.csdn.net/QQ1304979694/article/details/144297418
3.重塑餐饮新生态:智慧餐饮系统方案的创新实践点餐运营在线预订与支付:顾客可以通过手机APP或网站进行菜品预订、座位预订,并支持多种支付方式,如微信支付、支付宝等,实现便捷支付。 智能点餐与推荐:利用大数据分析顾客点餐历史,智能推荐符合顾客口味的菜品,提升顾客满意度。 库存管理与食材追溯:实时监控库存情况,预测食材需求,优化采购计划,同时支持食材追溯,确保食品安全。 https://www.163.com/dy/article/JIV7QT2U05534XQ0.html
4.产品经理如何写好需求分析报告?本文以「好豆菜谱」的「直播」功能需求分析为例,阐述了需求分析报告的撰写框架,帮助初级产品经理在缺乏经验沉淀和深度战略思维时,更系统和客观的去分析需求的合理性。 一、案例背景介绍 1.1 案例假设 假设你是好豆新入职的产品助理,在经过多次团队讨论后,为了满足用户更丰富的需求,提升使用体验,你的leader想要在APP里https://www.niaogebiji.com/article-105777-1.html
5.校园app的市场分析市场分析 在现代社会发展的今天,移动互联网已经成为人们生活不可或缺的一部分,尤其是在校园生活中,校园APP作为移动互联网的一种应用方式,受到了越来越多学生的喜爱和关注。校园APP作为一种方便快捷的工具,能够满足学生们在校园生活中的各种需求,具有广阔的市场前景。 https://www.3cfood.com/art110578.html
6.菜谱app项目创业计划书.pptx菜谱app项目创业计划书.pptx,菜谱app项目创业计划书作者:XXX20XX-XX-XX项目背景与概述市场分析产品与服务技术方案与实施计划营销策略与销售计划团队组成与分工财务预测与资金需求风险投资与退出机制结论与展望01项目背景与概述项目背景当前,人们对于美食的追求已经不再是https://max.book118.com/html/2024/0209/7046015163006040.shtm
7.制作APP需要注意什么,菜谱类的app如何开发可以说很多人都不擅长在家做饭,但是有时候我们心血来潮想做饭的时候,可能会突然发现自己连饭都不会做。但是随着APP软件开发技术的发展,我们已经不需要再担心这样的问题了,因为一些APP软件,开发公司,注意到了用户在这方面的需求,开发推出了菜谱APP软件。那么,这个食谱APP软件开发需要什么样的功能呢?http://www.apppark.cn/mobile/news_t_23233.html
8.需求与商业模式分析2商业模式类型51CTO博客需求与商业模式分析-2-商业模式类型 Book2-商业模式类型 描述了有相似特征、相似的商业模式模块设置或相似的商业行为方式的商业模式,我们将这些相似性称为商业模式类型。 商业模式类型基于以下几个概念 分拆商业模式 长尾商业模式 多边平台商业模式 免费商业模式https://blog.51cto.com/u_16038001/6159181
9.食疗养生类APP用户需求分析A.美味 B.健康 C.价位 D.操作简单 * 13.请问您会打开手机软件,根据她的提示穿衣饮食吗? A.美味 B.健康 C.价位 D.操作简单 * 14.如果现在有一款APP专门为您量身定制食疗养生菜谱,您会使用吗? A.很乐意使用 B.无所谓 C.不想使用 D.操作简单 15.请问您理想中的食疗养生APP是怎么样的?问卷https://www.wjx.cn/jq/39921415.aspx
10.系统分析阶段的主要活动有,现行系统详细调查用户需求分析和D. 个人的能量需求级别 E. 菜谱 查看完整题目与答案 健康风险评估报告通常由一组报告组成,除健康评估的结果以及危险因素列表外,也包括了膳食运动干预指导处方 等健康教育信息。疾病风险评估报告中的风险等级表示方法是() A. 一般用危险因素个数表示 B. 一般用相对危险性来表示,反映的是假设健康指标正常情况https://www.shuashuati.com/ti/e58d29412f844478bcd65e2e9c92a1fe.html?fm=bde36884db1d455bfc1ec96e5fce7fe952
11.营收近2亿美元,Elastic会是开源软件企业学习的范本吗?▋从“菜谱APP”演化成上市的开源大数据搜索企业 Elastic成立于2012年,2014年开始商业化道路,2018年5月在纽交所上市。公司的核心产品Elasticsearch的第一个版本叫做Compass,是Elastic创始人兼首席执行官Shay Banon在闲余时间编写的一个搜索引擎,主要目的是帮助其妻子管理菜谱。 https://www.iyiou.com/p/97607.html
12.解决小红书菜谱安装失败问题,一键下载安装详细教程指南- 口味多样,涵盖麻辣的川菜到清淡的粤菜,满足不同口味需求。 - 实用性强,菜品制作简单,食材易得,并分享烹饪技巧。 菜谱APP推荐 1、以下是一些受欢迎的菜谱APP推荐: - 下厨房:提供丰富多样的菜式,适合各种烹饪水平的用户。 - 美食杰:专注于美食社区,汇聚海量菜谱,分类详细。 - 豆果http://haoxinzuoguaiyueyu15youku.jk393.com/0AD789C51016.html
13.Sysco:全球最大的供应链企业图片来源:USDA,美国经济分析局,Euromonitor,泰森官网,中信证券研究部 上下游高标准化催生餐饮供应链企业,Sysco 通过多次并购进行行业整合。随着下游连锁餐饮企业往全国扩张,建立标准化供应链的需求愈发强烈。美国餐饮上游供应链具备较好的集中度和规模化,叠加物流、冷链等基础设施从上世纪六七十年代同步完善,餐饮供应链企业https://www.foodtalks.cn/news/44052