菜譜APP源碼和設(shè)計(jì)報(bào)告
《移動(dòng)互聯(lián)開發(fā)》
課程作業(yè)
學(xué) 院:
班 級:
學(xué) 號:
姓 名:
日 期:
設(shè)計(jì)要求(提交文檔時(shí)需刪除):
1.本課程設(shè)計(jì)作為《Android?程序設(shè)計(jì)》的期末考查內(nèi)容。
2.任務(wù)安排:
(1)確定內(nèi)容:11月3日前將確定內(nèi)容,雷同內(nèi)容進(jìn)行微調(diào)(功能,實(shí)習(xí),界面)。
(2)任務(wù)完成:12月2日,將計(jì)劃完成的內(nèi)容提交。
(3)程序演示:程序演示,錄制演示視頻。介紹程序的整體結(jié)構(gòu),實(shí)現(xiàn)方法,涉及到的技術(shù),虛擬器演示。時(shí)長5-10分鐘。
3.知識點(diǎn)要求包括但不限于以下內(nèi)容:
(1)界面設(shè)計(jì);
(2)事件處理;
(3)頁面跳轉(zhuǎn);
(4)數(shù)據(jù)存儲
4.課程設(shè)計(jì)的主體包括
(1)封面
(2)目錄
(3)正文
1)應(yīng)用平臺介紹,開發(fā)版本,型號
2)需求分析
3)系統(tǒng)功能設(shè)計(jì):
4)系統(tǒng)實(shí)現(xiàn):原型設(shè)計(jì),界面設(shè)計(jì),系統(tǒng)結(jié)構(gòu),涉及到的關(guān)鍵技術(shù),功能實(shí)現(xiàn)及關(guān)鍵代碼
5)運(yùn)行效果。
(4)結(jié)論
(5)參考文獻(xiàn)
注意:
程序設(shè)計(jì)鼓勵(lì)自主完成;設(shè)計(jì)功能完備,程序運(yùn)行流暢無誤。
代碼部分需要進(jìn)行必要的注釋。
文檔撰寫應(yīng)注意排版美觀大方,語言通順,無錯(cuò)別字。若有同學(xué)的設(shè)計(jì)基本雷同的都定位不及格。
重要事項(xiàng):
提交內(nèi)容:
文檔的電子版
完整代碼的電子版;
演示視頻(本人需入鏡)
電子版提交:學(xué)生個(gè)人將所有提交內(nèi)容放在“學(xué)號+姓名”的文件夾中;
例如對于學(xué)號為20110309,姓名為“王琦”的同學(xué),壓縮文件名為“20110309王琦”提交時(shí)間與地點(diǎn):
電子版:壓縮后,提交至課程中心文檔。
程序演示:后續(xù)通知
目錄
引言1
1.1 項(xiàng)目介紹1
1.2 開發(fā)環(huán)境1系統(tǒng)需求分析1
2.1?用戶需求1
2.2 功能需求1
2.3 性能需求1系統(tǒng)總體設(shè)計(jì)1
3.1 功能設(shè)計(jì)1
3.1.1 功能劃分(系統(tǒng)總體框架)2
3.1.2 功能說明3
3.2 系統(tǒng)數(shù)據(jù)流程4
3.2.1 系統(tǒng)數(shù)據(jù)流程圖4
3.2.2 數(shù)據(jù)流程說明5
3.3 界面設(shè)計(jì)5
3.3.1 界面布局設(shè)計(jì)5
3.3.2 界面切換描述6系統(tǒng)詳細(xì)設(shè)計(jì)6
4.1 結(jié)構(gòu)設(shè)計(jì)(含文件結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu))6
4.2 函數(shù)設(shè)計(jì)6系統(tǒng)實(shí)現(xiàn)7
5.1 運(yùn)行結(jié)果7
5.2 關(guān)鍵代碼8結(jié)論16
參考文獻(xiàn)16
1概述(一級標(biāo)題,黑體,小三號字,段前、段后間距為1行)
最近的疫情雖然已經(jīng)出現(xiàn)了好轉(zhuǎn),但是外賣平臺上提供服務(wù)的商家還是屈指可數(shù),再加上點(diǎn)外賣仍舊存在一定病毒傳播的風(fēng)險(xiǎn),因此越來越多從未做飯的人都開始嘗試在家做飯。這直接導(dǎo)致了許多食譜類APP的流量猛增,開始在互聯(lián)網(wǎng)上掀起一股全民做飯的熱潮。下面我們來分析一下食譜類APP的發(fā)展前景。
現(xiàn)如今是智能手機(jī)快速發(fā)展的新時(shí)代。幾乎在社會中的每個(gè)人多多少少都會使用智能手機(jī)和電腦,因?yàn)樗鼈兛梢允刮覀兊纳钍孢m、快捷和更加方便。對比國內(nèi)外的許多人類的日常生產(chǎn)生活中,人們都幾乎都已經(jīng)離不開智能手機(jī)了。隨著個(gè)人的消費(fèi)水平不斷提高和享受生活,幾乎很少人能掌握日常生活到底消費(fèi)在哪些方面,食譜類APP已經(jīng)無法滿足人們?nèi)找嬖鲩L的需求,生活中許許多多的收支和消費(fèi)情況,造成人們無法清晰的了解日常生活中的各種消費(fèi)。如果用戶在智能手機(jī)中下載一個(gè)適合自己的食譜類APP,可以讓用戶日常的做飯都得到歸類和管理,能夠使得用戶方便的記錄下自己的食譜類APP的同時(shí),也能體會不一樣的快樂。
1.1選題背景(二級標(biāo)題,黑體,四號字,段前、段后間距為1行)
疫情期間,許多臨時(shí)抱佛腳查食譜開始學(xué)做飯的人不在少數(shù)。下面我們來看看各個(gè)平臺的數(shù)據(jù)統(tǒng)計(jì),比如燃財(cái)經(jīng)查詢七麥數(shù)據(jù)2020年1月移動(dòng)應(yīng)用增長榜發(fā)現(xiàn),美食佳飲子分類前20名中,食譜類APP占4席。食譜分享平臺“網(wǎng)上廚房”后臺的數(shù)據(jù)顯示,春節(jié)期間,三四線城市的新增用戶有明顯增長。網(wǎng)上廚房CEO楊洋稱,受疫情影響,與大量一線市的務(wù)工人員滯留三四線城市有直接關(guān)系。
年輕一代不做飯的原因,除了工作忙,時(shí)間有限,更多的是從小在家都是爸爸媽媽做飯,自己不會做,這次疫情期間空余時(shí)間變多,很多人發(fā)現(xiàn)跟著食譜學(xué)做飯不是太難的事情,并逐漸在做飯中發(fā)現(xiàn)了許多趣味,而不僅僅只是想填飽肚子。現(xiàn)在曬廚藝還滿足了一部分年輕人的社交展示需求,朋友圈已經(jīng)成為不少人廚藝大比拼的地方。因?yàn)槊刻焖r(shí)間最長的還是疫情相關(guān)的新聞,需要轉(zhuǎn)移注意力來調(diào)節(jié)心情,下廚既是一個(gè)真治愈的過程,還能滿足自己填飽肚子的需求。
1.2選題意義
總的來講,食譜類APP的發(fā)展前景還是不錯(cuò)的。雖然疫情即將過去。但是這次食譜類APP得到了一次免費(fèi)的引流拉新機(jī)會,還提高了相關(guān)APP的知名度。因此這次疫情更像是一場大考,只有真正為用戶提供了有價(jià)值內(nèi)容的產(chǎn)品,才能一直得到用戶的青睞。
1.3開發(fā)工具及技術(shù)
1.3.1 Android stduio4.1;JDK1.8;
系統(tǒng)需求分析
2.1用戶需求
該系統(tǒng)使用Android studio開發(fā)平臺進(jìn)行軟件系統(tǒng)的開發(fā),Android studio的界面簡單和具有強(qiáng)大的兼容性的各方面的優(yōu)點(diǎn)。開發(fā)者可以更好的進(jìn)行軟件的開發(fā)和日后的相關(guān)維護(hù)。
該系統(tǒng)同時(shí)具有操作簡單、操作方便、互換性好、較為直觀等特點(diǎn),這就是為什么我們可以選擇Android studio來開發(fā)一個(gè)系統(tǒng)。
2.2功能需求
為了使用戶體驗(yàn)感更好,開發(fā)人員會事先指定一些約束規(guī)則來進(jìn)行行為的約束。開發(fā)者一般做出要求如下:用戶管理家菜譜類APP軟件,當(dāng)用戶輸入已經(jīng)注冊過的用戶名和密碼,用戶就會進(jìn)入到SQlite數(shù)據(jù)庫當(dāng)中。但是如果用戶輸入的數(shù)據(jù)沒有與數(shù)據(jù)庫中的數(shù)據(jù)比對發(fā)現(xiàn)并沒有找到,用戶不得進(jìn)行相關(guān)信息的注冊和登錄。這樣它的安全顯然非??煽亢桶踩?。
2.3性能需求
軟件系統(tǒng)分析主要包括技術(shù)、經(jīng)濟(jì)、運(yùn)營和開發(fā)方面的研究,從而以確保信息資源和投入資金的合理利用,避免方案設(shè)計(jì)中存在的各種各樣問題,幫助我們更好地完成軟件實(shí)施方案。換句話說,技術(shù)支持和資金支持分析決定了項(xiàng)目完成的可能性,可行性分析是實(shí)現(xiàn)項(xiàng)目階段——從開始到中間到結(jié)束——的必須所要面臨途徑。我主要根據(jù)實(shí)際需要情況進(jìn)行了較為全面的軟件系統(tǒng)分析,具體如下。
本文從一個(gè)易于理解的分析方案開始,它將幫助用戶處理自己日常生活中所遇到的問題,查看硬件和軟件是否能滿足開發(fā)者的任務(wù)需求。
作為一名計(jì)算機(jī)專業(yè)的學(xué)生,我在學(xué)校學(xué)到了很多編程知識,比如Android studio和Java等相關(guān)技術(shù)。經(jīng)過反復(fù)驗(yàn)證方案和規(guī)劃方案,從系統(tǒng)結(jié)構(gòu)到編程語言的選擇,再到最終選定的技術(shù),都在尋找最優(yōu)可以實(shí)現(xiàn)這門技術(shù)的可行性的研究。系統(tǒng)總體設(shè)計(jì)
3.1功能設(shè)計(jì)
3.1.1功能規(guī)劃(系統(tǒng)總體框架)
本系統(tǒng)按用戶訪問菜譜APP軟件。
當(dāng)用戶進(jìn)入軟件系統(tǒng)的時(shí)候,系統(tǒng)只為系統(tǒng)存在用戶提供登錄操作,如果是第一次進(jìn)入需要注冊賬號信息。當(dāng)用戶注冊完畢后,就可以訪問菜譜APP軟件。
當(dāng)用戶進(jìn)入用戶界面訪問時(shí),用戶可以根據(jù)模糊查詢,進(jìn)行對自己喜歡的菜譜進(jìn)行查詢,查詢過后點(diǎn)擊進(jìn)入,就可以看到具體的做法了。然后根據(jù)菜譜的做法,進(jìn)行美味食品的制作。
3.1.2功能說明
用戶進(jìn)入菜譜APP軟件系統(tǒng)的時(shí)候,系統(tǒng)只為系統(tǒng)存在用戶提供登錄和注冊的相關(guān)操作,初始的用戶需要進(jìn)行賬號的注冊,否則登錄不了。注冊完畢后,用戶就可以打開菜譜APP,菜譜APP可以進(jìn)行相關(guān)菜品的查詢,并且也有該軟件開發(fā)的一些基本信息。
當(dāng)用戶進(jìn)入用戶界面訪問時(shí),用戶可以根據(jù)模糊查詢,進(jìn)行對自己喜歡的菜譜進(jìn)行查詢,查詢過后點(diǎn)擊進(jìn)入,就可以看到具體的做法了。然后根據(jù)菜譜的做法,進(jìn)行美味食品的制作。
3.3界面設(shè)計(jì)
3.3.1界面布局設(shè)計(jì)

登錄界面 注冊界面

主界面


搜索界面 軟件詳情 菜品詳情
3.3.2界面切換描述

1.登錄到注冊頁面的切換
Intent intent5 = new Intent(MainActivity.this, Register.class);
startActivity(intent5);
finish();
判斷是否數(shù)據(jù)之前有沒有注冊過
boolean userdata = false;
for (int i = 0; i < data.size(); i++) {
User user= data.get(i);?//可存儲賬號數(shù)量
if (name.equals(user.getName()) && password.equals(user.getPassword())) {
userdata = true;
break;
} else {
userdata = false;
}
}
把注冊的數(shù)據(jù)都放到userdata當(dāng)中,ArrayList<User> data = mSQlite.getAllDATA();
判斷date的長度,用.size()進(jìn)行長度的判斷。
3.


首先點(diǎn)擊我們需要的菜譜,進(jìn)行到菜品的詳情頁面,我們要先制作一個(gè)模板,通過在集合的數(shù)據(jù),依次循環(huán),將數(shù)據(jù)放入進(jìn)去,同時(shí)還需要一個(gè)簡單的適配器,listView展示給用戶看的時(shí)候,需要設(shè)置適配器BaseAdapter。
// 決定了ListView列表展示的行數(shù)
@Override
public int getCount() {
return mDatas.size();
}
//返回指定位置對應(yīng)的數(shù)據(jù)
@Override
public Object getItem(int position) {
return mDatas.get(position);
}
// 返回指定位置所對應(yīng)的id
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.item_list,null);?//將布局轉(zhuǎn)換成view對象的方法
holder=new ViewHolder(convertView);
convertView.setTag(holder);
}else {
holder = (ViewHolder) convertView.getTag();
}
系統(tǒng)詳細(xì)設(shè)計(jì)
4.1結(jié)構(gòu)設(shè)計(jì)(文件結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu))
軟件系統(tǒng)操作流程的設(shè)計(jì)目的是簡化設(shè)計(jì)流程,更加方便日后開發(fā)程序人員進(jìn)行更好的設(shè)計(jì)相關(guān)的軟件開發(fā)。當(dāng)然這樣的設(shè)計(jì)為以后程序開發(fā)人員的開發(fā)設(shè)計(jì)和用戶的使用感都有很大的關(guān)系。因此,系統(tǒng)操作圖、注冊流程圖、登錄流程圖顯得尤為重要。如圖所示。

系統(tǒng)的安全性非常重要,所以您需要登錄才能登錄,不進(jìn)行注冊您就不能使用主賬戶頁面,如圖所示。

4.2函數(shù)設(shè)計(jì)

private SQLiteDatabase db;
public SQlite(Context context) {
super(context, “db_test”, null, 1);
db = getReadableDatabase();
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(“CREATE TABLE IF NOT EXISTS user(” +
“_id INTEGER PRIMARY KEY AUTOINCREMENT,” +
“name TEXT,” +
“password TEXT)”);
}
這邊是數(shù)據(jù)庫的登錄和注冊的設(shè)計(jì),后面的信息采用的是
系統(tǒng)實(shí)現(xiàn)
5.1運(yùn)行結(jié)果





5.2關(guān)鍵代碼
數(shù)據(jù)庫
private SQLiteDatabase db;public SQlite(Context context) {
super(context, “db_test”, null, 1);
db = getReadableDatabase();
}@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(“CREATE TABLE IF NOT EXISTS user(” +
“_id INTEGER PRIMARY KEY AUTOINCREMENT,” +
“name TEXT,” +
“password TEXT)”);
}適配器
// 決定了ListView列表展示的行數(shù)
@Override
public int getCount() {
return mDatas.size();
}
//返回指定位置對應(yīng)的數(shù)據(jù)
@Override
public Object getItem(int position) {
return mDatas.get(position);
}
// 返回指定位置所對應(yīng)的id
@Override
public long getItemId(int position) {
return position;
}@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.item_list,null);?//將布局轉(zhuǎn)換成view對象的方法
holder=new ViewHolder(convertView);
convertView.setTag(holder);
}else {
holder = (ViewHolder) convertView.getTag();
}
// 加載控件顯示的內(nèi)容
// 獲取集合指定位置的數(shù)據(jù)
FoodBean foodBean = mDatas.get(position);
holder.titleTv.setText(foodBean.getTitle());
holder.notTv.setText(“材料:”+foodBean.getDesc());
holder.iv.setImageResource(foodBean.getPicId());
return convertView;
}class ViewHolder{
ImageView iv;
TextView titleTv,notTv;
public ViewHolder(View view){
iv = view.findViewById(R.id.item_info_iv);
titleTv = view.findViewById(R.id.item_info_title);
notTv = view.findViewById(R.id.item_info_tv_notitle);
}
}
}

登錄、注冊
public void onClick(View v) {
String name = username.getText().toString().trim();
String password = userpassword.getText().toString().trim();
if (!TextUtils.isEmpty(name) && !TextUtils.isEmpty(password)) {
ArrayList<User> data = mSQlite.getAllDATA();
boolean userdata = false;
for (int i = 0; i < data.size(); i++) {
User user= data.get(i);?//可存儲賬號數(shù)量
if (name.equals(user.getName()) && password.equals(user.getPassword())) {
userdata = true;
break;
} else {
userdata = false;
}
}
if (userdata) {
Toast.makeText(MainActivity.this, “登錄成功”, Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this, Home.class);
intent.putExtra(“username”,name);
intent.putExtra(“password”,password);?//展示賬號密碼功能
startActivity(intent);
finish();
} else {
Toast.makeText(MainActivity.this, “用戶名或密碼不正確”, Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(MainActivity.this, “用戶名或密碼不能為空”, Toast.LENGTH_SHORT).show();
}
}
});
mSQlite = new SQlite(MainActivity.this);
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
reday = findViewById(R.id.reday);
back = findViewById(R.id.back);
username = findViewById(R.id.userName);
userpassword =findViewById( R.id.userpassword);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Register.this,MainActivity.class);
startActivity(intent);
finish();
}
});
reday.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = username.getText().toString().trim();
String password = userpassword.getText().toString().trim();
if(!TextUtils.isEmpty(name)&&!TextUtils.isEmpty(password)){
mSQlite.add(name,password);
Intent intent1 = new Intent(Register.this,MainActivity.class);
startActivity(intent1);
finish();
Toast.makeText(Register.this,”注冊成功”,Toast.LENGTH_SHORT).show();
}else {Toast.makeText(Register.this,”信息不完備,注冊失敗”,Toast.LENGTH_SHORT).show();}
}
});
mSQlite = new SQlite(Register.this);
}
}
結(jié)論
在這個(gè)過程中,我學(xué)到了很多,我知道我還有很多經(jīng)驗(yàn)要學(xué),我的專業(yè)技能還不夠。當(dāng)涉及到基本的計(jì)算機(jī)知識時(shí),許多事情可以改進(jìn),以進(jìn)一步優(yōu)化設(shè)計(jì)。作為一名合格的項(xiàng)目協(xié)調(diào)員,我將繼續(xù)解決這些缺點(diǎn)。尤其是計(jì)算機(jī)系統(tǒng)的底層得到了優(yōu)化;簡單的關(guān)系數(shù)據(jù)庫可能不滿足以下要求。參考文獻(xiàn)
[1] 劉奇付,李紫艷.基于Android平臺的大學(xué)生生活費(fèi)手機(jī)管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].軟件導(dǎo)刊,2015,14(9):141-143.
[2]周李達(dá),鄧璐凡,王中霖,等.基于Android的大學(xué)生出行系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].信息與電腦:理論版,2015(19):99-101.
[3]王亞維,徐霞.基于Android的大學(xué)生兼職系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].地理空間信息,2013,11(2):98-100.
[4] 韋俊星,曾祥寶,黃美素,等.基于安卓系統(tǒng)的大學(xué)生黨課培訓(xùn)系統(tǒng)客戶端的設(shè)計(jì)與實(shí)現(xiàn)[J].中國新通信,2015,17(11):116-117.
[5] 盧昕,楊晞.基于VFP6.0收款記賬管理系統(tǒng)的實(shí)現(xiàn)[J].電腦編程技巧與維護(hù),2014(6):48-49.
[6] 趙世祥,楊昆,朱彥輝,等.基于Android平臺的大學(xué)生課程計(jì)劃管理系統(tǒng)[J].通訊世界,2016(1):113-114.
[7] 馮璐.一個(gè)”網(wǎng)絡(luò)記賬本”的設(shè)計(jì)與實(shí)現(xiàn)——基于PHP+MySQL的收支管理系統(tǒng)[J].電腦知識與技術(shù):學(xué)術(shù)交流,2007,4(19):20-22.
[8] O’Hanlon J,Peasnell K. Wall Street’s contribution to management accounting: the Stern StewartEVA financial management system[J]. Management Accounting Research, 1998,9(4):421-444.
[9] 許榮豐.財(cái)務(wù)綜合管理系統(tǒng)運(yùn)行中存在的問題[J].吉林金融研究,2008(3):74-74.
[10]李斌.會計(jì)信息化管理——記賬憑證的幾點(diǎn)新認(rèn)識[J]. 中國鄉(xiāng)鎮(zhèn)企業(yè)會計(jì), 2009(2):122-124.
[11]盧照,王琦,王華.基于Android平臺的大學(xué)生實(shí)用軟件設(shè)計(jì)開發(fā)[J].微型機(jī)與應(yīng)用,2015(24):19-20.
[12]陳夢娜,藍(lán)建平.基于Android的大學(xué)生文明寢室測評系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2014(3):64-65.
[13]黃天上,姚世強(qiáng),裴冬梅,等.基于Android平臺的大學(xué)生校園服務(wù)信息實(shí)時(shí)發(fā)布系統(tǒng)的研究[J].教育,2015(10):218-218.
[14]吳冬芹,陳子健.基于GTD的大學(xué)生時(shí)間管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].電腦編程技巧與維護(hù),2015(16):44-45.
[15]王秋麗.我國財(cái)務(wù)軟件的現(xiàn)狀及發(fā)展趨勢[J].山西經(jīng)濟(jì)管理干部學(xué)院學(xué)報(bào),2012,10(1): 43-45.