智能菜谱课程设计报告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.菜谱设计图片大全简单又漂亮熊猫办公精心为用户挑选80张高清精美菜谱图片、支持专业级菜谱设计素材下载,更多风格的菜谱,免抠元素,卡通手绘素材图片、图标图案、免抠矢量图,尽在熊猫办公。https://www.tukuppt.com/speciall/caipu7693.html
2.菜谱设计图片菜谱设计素材菜谱设计模板免费下载六图网为您提供2247035张菜谱设计设计作品免费下载服务,您还可以找到菜谱设计图片、菜谱设计素材、菜谱设计模板等设计素材,我们为您提供菜谱设计图片下载,菜谱设计模板下载、菜谱设计素材下载等服务!https://m.16pic.com/sucai/11081.html?from=singlemessage
3.食堂菜谱设计食堂菜谱模板食堂菜谱图片觅知网为您找到96个原创食堂菜谱设计图片,包括食堂菜谱图片,食堂菜谱素材,食堂菜谱海报,食堂菜谱背景,食堂菜谱模板源文件下载服务,包含PSD、PNG、JPG、AI、CDR等格式素材,更多关于食堂菜谱素材、图片、海报、背景、插画、配图、矢量、UI、PS、免抠,模板、艺术字、PPhttps://www.51miz.com/so-sucai/212356/p_1/
4.高端菜谱排版设计素材网站图片免费下载捷达菜谱品牌设计 浅澜汇酒店菜谱设计|成都高端菜谱设计|中餐菜谱排版 13 捷达菜谱品牌设计 西山驿站中餐酒楼菜谱设计-创新菜谱排版-高端菜谱定制 13 捷达菜谱品牌设计 使人过目不忘的菜单设计!高端酒楼菜单排版|捷达菜谱 5 捷达菜谱品牌设计 餐厅菜谱设计排版,高端酒楼菜谱设计制作,捷达菜谱公司 9 捷达菜谱品牌设计 https://www.zcool.com.cn/tag/ZMzMyNDMzMg==.html
5.菜谱设计图片下载菜谱设计高清图片素材大全千库网为设计者提供菜谱设计素材大全,为您省却菜谱设计图片素材搜索时间,这里有海量菜谱设计素材图片供您下载使用。https://588ku.com/seo/special/23440.html
6.菜单菜谱设计图片菜谱设计画册装帧菜单菜谱设计图片,菜单菜谱设计 菜单 菜谱菜单 菜谱模板下载 菜谱模版 菜谱素材下载 饭店菜谱 高档菜谱 美食菜谱 高档菜谱 饭店菜谱 高档菜谱素材 高档菜谱模板 菜谱模版 菜谱素材下载 美食菜谱 菜谱菜单 菜单 菜谱矢量素材 菜谱模板下载 画册 菜单菜谱设计整套 平面广告,图https://www.photophoto.cn/pic/01644848.html
7.菜单设计图片菜单设计模板下载菜单设计专题提供菜单设计背景图片,菜单设计素材下载,菜单设计模板下载,所提供的菜单设计都是高质量的,供大家下载学习及参考。https://www.zhengpic.com/tags-40522-0.html
8.菜谱菜单设计图片专题,菜谱菜单设计下载菜谱菜单设计图片专题,菜谱菜单设计图片下载,昵图网:图片共享和图片交易中心https://www.nipic.com/zhuanti/745300.html
9.菜单菜谱设计模版图片ai平面设计模版素材免费下载详情页投诉 分享 爱给网提供海量的模板大全资源素材免费下载, 本次作品为ai 格式的菜单菜谱设计模版图片, 本站编号37300600, 该模板大全素材大小为2m, 更多精彩模板大全素材,尽在爱给网。 浏览本次作品的您可能还对 菜谱画册(封面)菜单画册按形式 感兴趣。https://www.aigei.com/item/cai_dan_cai_pu_23.html
10.菜谱封面设计图片菜谱封面设计图片素材大全智能精选为您提供丰富的菜谱封面设计图片素材,菜谱封面设计创意,菜谱封面设计图片素材下载。助力您对于菜谱封面设计创意的创意设计灵感,充实饱满作品,查找更多创意作品选择摄图网下载https://699pic.com/image/caipufengmiansheji.html
11.餐馆菜单菜谱设计图片餐馆菜单菜谱设计图片 快餐菜单设计,酒店菜谱设计,西餐菜单,菜单设计,咖啡厅菜单,酒店菜单,餐厅菜单,菜谱模板 设计模板共享与免费下载网站-素材公社(www.tooopen.com)https://www.tooopen.com/view/2524400.html
12.菜谱封面设计图片菜谱封面设计素材红动中国素材网提供406个菜谱封面设计图片、菜谱封面设计素材、菜谱封面设计背景、菜谱封面设计模板、菜谱封面设计海报等PS素材下载,包含PSD、AI、PNG、JPG、CDR等格式源文件素材,更多精品菜谱封面设计设计素材下载,就来红动中国,最后更新于2024-10-15 20:19:51。https://so.redocn.com/caipu/b2cbc6d7b7e2c3e6c9e8bcc6.htm
13.菜谱设计图片免费下载菜谱设计素材菜谱设计模板千图网为您找到4834张菜谱设计相关素材,千图网还提供菜谱设计图片,菜谱设计素材, 菜谱设计模板等免费下载服务,千图网是国内专业创意营销服务交易平台,一站式解决企业营销数字化、协同化,实现营销转化效果增长!https://www.58pic.com/tupian/caipusheji.html
14.传统美食菜谱美食菜单设计图【描述】菜单设计与菜单下载相关内容,图中包含菜谱下载、菜谱图片、饭店菜单、菜单设计图、菜单下载、公司菜单、菜单PSD素材、菜单背景,类似主题有花边等。 【注意事项】所有图片素材均为互联网用户上传分享,版权等归上传用户或原权属方所有,仅供网友学习交流,未经权属方书面授权,请勿作他用. 若发现本图侵犯了您的权益http://aaatu.com/shejisucai/2182633837.html
15.菜单菜谱设计专题模板菜单菜谱设计图片素材下载我图网菜单菜谱设计专题为您整理了13104个原创高质量菜单菜谱设计图片素材供您在线下载,PSD/JPG/PNG格式菜单菜谱设计模板下载、高清菜单菜谱设计图片大全等,下载图片素材就上我图网。https://so.ooopic.com/search-b2cbb5a5b2cbc6d7c9e8bcc6-0-0_0_dnumd_0_0_0_ooo_0_1_0_0_0_0_0_0_0___0__0.html
16.菜谱设计菜谱菜单图片素材免费下载,菜谱设计菜谱菜单模板免费下载菜谱设计菜谱菜单,菜谱设计菜谱菜单设计相关的PSD分层设计稿、菜谱设计菜谱菜单矢量素材(CDR,AI,eps)、菜谱设计菜谱菜单图片(jpg,jpge)素材。https://www.tupian114.com/tupian/search?wd=%B2%CB%C6%D7%C9%E8%BC%C6%B2%CB%C6%D7%B2%CB%B5%A5&dy=1&page=1.html
17.西餐厅菜单设计图片展示意大利餐饮菜谱设计案例的做法在中国很受欢迎的西餐是意大利披萨(诶,是因为像东北大饼吗?),本篇所分享的西餐厅菜单设计图片,很好地从表面的质感上,展示了意大利餐饮菜谱设计案例的做法,虽然中西文化有差别,但平面设计范围的原则有一定的共通性。 上图:西餐厅菜单设计案例 上图:布拉诺意大利餐厅菜谱设计 https://www.baibo8.com/caipucaidan/1173.html
18.中餐菜谱设计酒店中餐厅菜单设计排版在图怪兽平台上,我们精心呈现了丰富多彩的中餐菜谱。从经典的川菜到精致的粤菜,每道菜都散发着浓厚的中国美食文化。探索图怪兽,发现烹饪的乐趣,品味中华美食的独特魅力。https://818ps.com/shejiimg/214.html
19.菜单菜谱设计设计素材菜单菜谱设计下载xiaoshao1984的专辑图库汇图网优秀设计师xiaoshao1984提供了0个菜单菜谱设计设计素材供您在线下载,菜单菜谱设计专辑内可找到菜单菜谱设计图片,菜单菜谱设计素材,菜单菜谱设计模板等摄影设计素材,我们还为您提供了菜单菜谱设计图片下载,菜单菜谱设计模板下载,菜单菜谱设计设计下载等其他服务https://www.huitu.com/design/spec/show/346425.html
20.菜单设计图片免费下载菜单设计素材菜单设计海报商店菜单矢量图 卡通通心粉 下载PNG 卡通鲜虾炒饭装饰插画 台湾大鸡排实物图 特色烧烤 美食海报 烧烤肉类 下载PNG 骨肉相连 橙色标题框背景矢量图 香辣蟹字体 中国风菜谱内页 下载PNG 家的味道 盘子里的烧烤矢量图 麻辣香锅 卤鹅肉 广式早点美食海报 https://ixintu.com/all/caidansheji.html
21.VUEvue程序设计模仿菜谱做菜网站vue.js菜谱画面设计菜谱做菜网站系统采用html,css,vue技术来实现,符合所学知识体系,适用于常见的作业以及课程设计,需要获取更多的作品,请关注微信公众号:coding加油站,获取,如需更多资料,可在微信后台留言。欢迎大家来提问,交流学习。 2.1、作品简介方面 菜谱做菜网站系统采用常规方式来实现,符合绝大部分的要求。代码配置有相关文档讲解,如https://blog.csdn.net/pandas23/article/details/126612010
22.开餐厅如何设计菜单十个技巧教你做有颜值的菜单这些线框的设计应按照消费者的逻辑来表示,而常见的想法可能是开胃菜,主菜,甜品和饮料。其他餐馆可能由荤菜与素菜或特定的食品来分组。只要分组是有关联的,线框的设计是非常有用的。 8、字体 决定你餐馆的基调 字体是每一个菜单的核心(这就是为什么我们有2个建议都与字体有关)。你选择的字体和样式将会决定你的http://www.bjcpdy.com/nd.jsp?id=72
23.餐馆菜单设计素材餐馆菜单设计图片元素觅元素是设计素材的免费下载网站,提供餐馆菜单设计素材,餐馆菜单设计图片,餐馆菜单设计免抠素材设计元素,餐馆菜单设计png图片透明背景等素材免费下载。https://www.51yuansu.com/tupian/canguancaidansheji.html
24.?菜谱册本帮菜餐馆菜单杭帮菜菜谱?菜谱册本帮菜, 分类:餐馆菜单 杭帮菜菜谱 , 包括: 内页设计 封面设计 内页装订 封面装订 样品图https://www.caipuce.com/359