Android课设--菜谱大全应用系统

Android移动应用开发

课程设计报告

(2019-2020学年第一学期)

菜谱大全应用系统

系    别        信息与控制工程

专    业        计算机科学与技术

班    级        计算机1702

学    号       173230201

姓    名        王子瑞

指导教师        郭丹

完成时间         2019.12.5

评定成绩

目录

1. 背景 3

2.系统需求分析 3

2.1用例分析 3

1 用例名称:登录 3

2 用例名称:注册 3

3 用例名称:今日推荐 4

4 用例名称:菜谱列表 4

5 用例名称:我的菜谱 4

6 用例名称:联系我们 4

2.2数据逻辑模型 4

3.系统总体设计 5

3.1系统总体设计图 5

3.2系统UI设计图 6

4.数据库设计 7

5.系统实现 7

5.1初始界面 7

5.2注册 8

5.3登录 9

5.4首页 10

5.5今日推荐界面 12

5.6菜谱列表界面 12

5.7我的菜谱界面 14

5.8联系我们界面 18

6. 系统测试 19

7.总结体会 20

  1. 背景

“民以食为天”这是一个亘古不变的真理,人们的所有的社会活动必须建立在食的基础上。随着经济的猛速发展和人民生活水平的日益提高。人们对于食也有着更高的要求。使用菜谱大全学做菜,不用天天发愁吃什么,不会可以跟着学。所以这样一款应用可以帮助一些对食物有一定要求但是自己又不会做的人是很有必要的。

2.系统需求分析

2.1用例分析

用例分析图如图2.1所示

图2.1菜谱大全应用系统用例图

1 用例名称:登录

说明:系统的登录功能

先决条件:用户

请求结果:以用户身份使用功能

使用频率高

2 用例名称:注册

说明:拥有使用APP身份的功能

先决条件:无

请求结果:拥有身份

使用频率:高

3 用例名称:今日推荐

执行者:用户

说明:系统推荐的今日特色菜品

先决条件:无

请求结果:显示今日推荐菜的做法

使用频率:中

4 用例名称:菜谱列表

执行者:用户

说明:系统里菜谱的列表

先决条件:用户

请求结果:显示所有的菜品

使用频率:高

5 用例名称:我的菜谱

执行者:用户

说明:对每位食客的菜谱进行增删改查的编辑

先决条件:无

请求结果:增删改查菜品

使用频率:中

6 用例名称:联系我们

执行者:用户

说明: 对本产品系统的问题进行反馈

先决条件:用户

请求结果:记录并提交问题反馈

使用频率:低

2.2数据逻辑模型

如图2.2所示

图1.2菜谱大全应用系统E-R图

如图2.2所示,主要的表为用户。用户可先进行输入账号,密码登录。我的菜谱由已验证的用户进行管理,进行添加,删除,查询,修改等一系列表操作。

3.系统总体设计

3.1系统总体设计图

如图3.1

图3.1菜谱大全应用系统系统流程图

本应用可以先使无身份用户注册,然后以验证用户身份登录进入。用户进入可以对该系统进行一些操作。进入首页后能查看今日推荐和菜谱列表与自己上传的不同食客的食谱,并且用户可以对数据库中的数据进行操作。用户还可以通过联系我们及时地反馈本产品在使用过程中出现的问题。

3.2系统UI设计图

4.数据库设计

登陆注册


字段名


数据类型


长度


主键


索引


外键


可空


说明


Name


int


20





账号


Password


Int


20





密码

菜品名


字段名


数据类型


长度


主键


索引


外键


可空


说明


Name


Varchar


20





用户名


Dish


Varchar


20





菜品名

5.系统实现

5.1初始界面

代码实现如下:

package com.example.keshe1;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void test(View view) {
        switch (view.getId()) {
            case R.id.button2:
                Intent intent1 = new Intent();
                intent1.setClass(MainActivity.this, denglu.class);
                startActivity(intent1);//跳转登录界面//
                break;
            case R.id.button3:
                Intent intent2 = new Intent();
                intent2.setClass(MainActivity.this, zhuce.class);
                startActivity(intent2);//跳转注册界面//
        }
    }
}

5.2注册

代码实现如下:

package com.example.keshe1;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class zhuce extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_zhuce);
    }
    public void test(View view) {
        switch (view.getId()) {
            case R.id.btn2:
                Intent intent4 = new Intent();
                intent4.setClass(zhuce.this, denglu.class);
                startActivity(intent4);//注册结束,跳转到登录界面//
        }
    }
}

5.3登录

代码实现如下:

package com.example.keshe1;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Button;
import android.widget.Toast;
public class denglu extends AppCompatActivity {
    private Button btn1;
    EditText account = null;
    EditText code = null;
    EditText t1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_denglu);
        t1 = (EditText) findViewById(R.id.edt1);
        account = (EditText) findViewById(R.id.edt1);
        code = (EditText) findViewById(R.id.edt2);
        btn1 = (Button) findViewById(R.id.btn1);
        btn1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                String username = ((EditText) findViewById(R.id.edt1)).getText().toString();
                String pwd = ((EditText) findViewById(R.id.edt2)).getText().toString();
                if (view.getId() == R.id.btn1) {
                    if (username.equals("123456") && pwd.equals("123456")) {
                        Intent intent3 = new Intent();
                        intent3.setClass(denglu.this, Main2Activity.class);
                        startActivity(intent3);
                        Toast.makeText(denglu.this, "登陆成功", Toast.LENGTH_SHORT).show();
                    }else {
                        t1.setText("账号或密码错误请重新输入");
                        Toast.makeText(denglu.this, "登陆失败", Toast.LENGTH_SHORT).show();
                    }
                }
            }
        });
    }
}

5.4首页

此界面使用了按钮和图片按钮的跳转。

代码实现如下:

package com.example.keshe1;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class Main2Activity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
    }
    public void test(View view) {
        switch (view.getId()) {
            case R.id.imageButton:
                Intent intent5 = new Intent();
                intent5.setClass(Main2Activity.this, qiezi.class);
                startActivity(intent5);
                break;//跳转到今日推荐界面//
            case R.id.button6:
                Intent intent6 = new Intent();
                intent6.setClass(Main2Activity.this, contact.class);
                startActivity(intent6);
                break;//跳转到联系我们界面//
            case R.id.button4:
                Intent intent7 = new Intent();
                intent7.setClass(Main2Activity.this, caipu.class);
                startActivity(intent7);
                break;//跳转到菜谱列表界面//
            case R.id.button5:
                Intent intent8 = new Intent();
                intent8.setClass(Main2Activity.this, wode.class);
                startActivity(intent8);//跳转到我的推荐界面//
        }
    }
}

5.5今日推荐界面

代码实现如下:

package com.example.keshe1;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class qiezi extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_qiezi);
    }
}

5.6菜谱列表界面

此界面使用了List View功能

代码实现如下:

package com.example.keshe1;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import org.w3c.dom.Text;
public class caipu extends AppCompatActivity {
    private ListView listView;
    private String arr[]={"可乐鸡翅","糖醋排骨","地三鲜","土豆炖牛肉","麻婆豆腐","清蒸鱼","木耳炒山药","西兰花炒虾球"};
    private int icons[] = new int[]{R.drawable.p1, R.drawable.p2, R.drawable.p3, R.drawable.p4, R.drawable.p5, R.drawable.p6, R.drawable.p7, R.drawable.p8};//插入相应的图片//
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_caipu);
        listView=findViewById(R.id.listView);//获取List View中的内容//
        MyBaseAdapter myBaseAdapter=new MyBaseAdapter();
        listView.setAdapter(myBaseAdapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(caipu.this,"你点击的是第"+(position+1)+"个条目", Toast.LENGTH_SHORT).show();
            }
        });
    }
    protected class MyBaseAdapter extends BaseAdapter {
        @Override
        public int getCount() {
            return arr.length;
        }
        @Override
        public Object getItem(int position) {
            return arr[position];
        }
        @Override
        public long getItemId(int position) {
            return position;
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view=View.inflate(caipu.this,R.layout.list_item,null);
            ImageView imageView=view.findViewById(R.id.iv);
            TextView textView=view.findViewById(R.id.Text);
            imageView.setBackgroundResource(icons[position]);
            textView.setText(arr[position]);
            return view;
        }
    }
}

5.7我的菜谱界面

此界面使用了sqlite数据库的增删改查

代码实现如下:

package com.example.keshe1;
import com.example.keshe1.R;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class wode extends Activity implements View.OnClickListener {
    MyHelper myHelper;
    private EditText mEtName;
    private EditText mEtDish;
    private TextView mTvShow;
    private Button mBtnAdd;
    private Button mBtnQuery;
    private Button mBtnUpdate;
    private  Button mBtnDelete;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_wode);
        myHelper=new MyHelper(this);
        init();
    }
    private void init(){
        mEtName=(EditText)findViewById(R.id.et3);
        mEtDish=(EditText)findViewById(R.id.et4);
        mTvShow=(TextView)findViewById(R.id.tv1);
        mBtnAdd=(Button)findViewById(R.id.bt5);
        mBtnQuery=(Button)findViewById(R.id.bt6);
        mBtnUpdate=(Button)findViewById(R.id.bt7);
        mBtnDelete=(Button)findViewById(R.id.bt8);
        mBtnAdd.setOnClickListener(this);
        mBtnQuery.setOnClickListener(this);
        mBtnUpdate.setOnClickListener(this);
        mBtnDelete.setOnClickListener(this);
    }
    public void onClick(View view){
        String name,dish;
        SQLiteDatabase db;
        ContentValues values;
        switch (view.getId()){
            case R.id.bt5:
                name=mEtName.getText().toString();
                dish=mEtDish.getText().toString();
                db=myHelper.getWritableDatabase();
                values=new ContentValues();
                values.put("name",name);
                values.put("dish",dish);
                db.insert("information",null,values);
                Toast.makeText(this,"信息已添加",Toast.LENGTH_LONG).show();
                db.close();
                break;
            case R.id.bt6:
                db=myHelper.getReadableDatabase();
                Cursor cursor=db.query("information",null,null,null,null,null,null);
                if (cursor.getCount()==0){
                    mTvShow.setText("");
                    Toast.makeText(this,"没有数据",Toast.LENGTH_LONG).show();
                }else {
                    cursor.moveToFirst();
                    mTvShow.setText("Name:"+cursor.getString(1)+"Dish:"+cursor.getString(2));
                }
                while (cursor.moveToNext()){
                    mTvShow.append("\n"+"Name:"+cursor.getString(1)+"Dish:"+cursor.getString(2));
                }
                cursor.close();
                db.close();
                break;
            case R.id.bt7:
                db=myHelper.getWritableDatabase();
                values=new ContentValues();
                values.put("dish",dish=mEtDish.getText().toString());
                db.update("information",values,"name=?",new String[]{mEtName.getText().toString()});
                Toast.makeText(this,"信息已修改",Toast.LENGTH_LONG).show();
                db.close();
                break;
            case R.id.bt8:
                db=myHelper.getWritableDatabase();
                db.delete("information","name=?",new String[]{mEtName.getText().toString()});
                Toast.makeText(this,"信息已删除",Toast.LENGTH_LONG).show();
                mTvShow.setText("");
                db.close();
                break;
        }
    }
    class MyHelper extends SQLiteOpenHelper{
        public MyHelper(Context context){
            super(context,"itcast.db",null,1);
        }
        public void onCreate(SQLiteDatabase db){
            db.execSQL("CREATE TABLE information(_id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20),dish VARCHAR(20))");
        }
        public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
        }
    }
}

5.8联系我们界面

此界面使用了File储存

代码实现如下:

package com.example.keshe1;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class contact extends Activity implements OnClickListener {
    private EditText et_account;
    private Button btn;
    private SharedPreferences sp;
    private FileInputStream fi;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_contact);
        et_account = findViewById(R.id.editText);
        btn = findViewById(R.id.button);//获取控件内容//
        btn.setOnClickListener(this);//设计点击事件//
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button:
                String s1 = et_account.getText().toString();
                if (TextUtils.isEmpty(s1)) {
                    Toast.makeText(this, "请输入", Toast.LENGTH_LONG).show();
                } else {
                    sp = getSharedPreferences("data.txt", MODE_PRIVATE);
                    SharedPreferences.Editor editor = sp.edit();
                    String saveinfo = et_account.getText().toString().trim();
                    FileOutputStream fos;
                    try {
                        fos = openFileOutput("data.txt", Context.MODE_APPEND);
                        fos.write(saveinfo.getBytes());
                        fos.close();//储存到data文件中//
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    editor.putString("s1", null);
                    editor.commit();
                    Toast.makeText(this, "提交成功\n保存成功", Toast.LENGTH_LONG).show();
                    String s3 = sp.getString("s1", "");
                }
        }
    }
}

  1. 系统测试

软件能在Android studio里用模拟机正常打开。

初始界面能正常打开运行。

注册界面能正常打开运行。

登录界面能正常打开运行。

首页界面能正常打开运行。

今日推荐界面能正常打开运行。

菜谱列表界面能正常打开运行。

我的菜谱界面能正常打开运行。

联系我们界面能正常打开运行。

7.总结体会

Android Studio是Google在I/O大会上发布的一个新的集成开发环境,可以让Android开发变的更简单。Android Studio有一些优点特性:1. 颜色、图片在布局和代码中可以实时预览2. string可以实时预览3. 多屏预览、截图带有设备框,可随时录制模拟器视频4. 可以直接打开文件所在位置5. 跨工程移动、搜索、跳转6. 自动保存,无需一直Ctrl + S 7. 即使文件关闭依然可以回退N个历史8. 智能重构、智能预测报错9. 每一行文件编辑历史,可追溯到人10. 各种插件:例如ADB、.gitignore、sql、markdown、11. 图片可直接转.9图片,并且自带.9编辑12. 在gradle编译时使用aar依赖超级方便13. Android studio是专业针对android开发。在最初学习阶段,通常会遇到很多问题,Andorid 学习过程中知识点繁多,难以熟练的应用,不经过很长一段时间很难以熟练地运用自己所学的知识。很多事情不是想象中的那么简单的,它涉及到的各种实体、属性、数据流程、数据处理等等。很多时候感觉后面的设计根本无法继续,感觉像是被前面做的限制了。通过这次课程设计发现这其中需要的很多知识我们没有接触过,上网查资料的时候发现我们前边所学到的仅仅是皮毛,还有很多需要我们掌握的东西我们根本不知道。同时也发现有很多已经学过的东西我们没有理解到位,不能灵活运用于实际,不能很好的用来解决问题,这就需要我们不断的大量的实践,通过不断的自学,不断地发现问题,思考问题,进而解决问题。在这个过程中我们将深刻理解所学知识,同时也可以学到不少很实用的东西。课程设计进行的非常艰难,编码非常不容易,我们要勇于尝试,才能不断进步。

原文地址:https://www.cnblogs.com/522-simple/p/12006137.html

时间: 2024-11-06 09:34:13

Android课设--菜谱大全应用系统的相关文章

Android课设报告 123 赵乾

基于Android的天喵购物系统设计与实现 一,选题目的及意义 随着智能手机的普及,基于Android平台的应用软件需求也越来越多.通过计算机系统的设计与开发,验证和扩展本科前三年所学相关课程的理论知识,在实践中深入理解其中的重点和难点,提高基本理论水平,巩固基础知识体系,掌握计算机系统设计与开发的基本技能,培养灵活运用理论知识分析和解决实际问题的能力. 当下我们处于大数据网络时代,无疑,网上购物脱颖而出,即马云阿里巴巴成立以来,网上购物成为人民日益需求的购物来源,而其简单便捷,足不出户便能买到

私厨--课设报告

Android应用程序开发 课程设计报告 (2019—2020学年 第Ⅰ学期) 基于Android的家庭菜谱系统 系    别            信息与控制工程 专    业           计算机科学与技术 班    级                1701 姓    名              荣瑞瑞 指导教师                郭 丹 目录 TOC \o "1-2" \h \u 一.摘要 1 二.课设题目 1 三.系统设计 2 四.系统测试 6 五.系统实

漫画app课设

Android移动应用开发 课程设计报告 (2019—2020学年 第Ⅰ学期) 作品主题:漫画app 系    别        信息与控制工程 专    业        计算机科学与技术 班    级          计算机1702 学    号            173230217 姓    名               张宏升 指导教师               郭丹 目录 一.需求分析 1 1.1引言 1 1.1.1编写目的 1 1.1.2项目背景 1 1.2功能需求分析 1

期末课设报告

一. 设计目的 4 二. 需求分析 4 2.1技术可行性分析: 4 2.2应用可行性分析 4 通讯录是人们生活中必不可少的应用软件:有了通讯录寻找联系人或者是及时修改联系人信息都是很方便的:所以我通过自己本学期所学编制了这个简易的通讯录应用,希望可以在以后能够实现一个更加完整的通讯录系统. 4 2.3 UML 4 2.3.1 用例分析 4 到通讯录界面. 4 4.通讯录界面:在此界面可输入通讯录的信息如姓名.手机号以及地址信 4 2.3.2uml需求用例图 5 三. 总体设计 6 3.1 系统结

转android intent action 介绍大全

一些常用的Intent: Uri Action 功能 备注 geo:latitude,longitude Intent.ACTION_VIEW 打开地图应用程序并显示指定的经纬度   geo:0,0?q=street+address Intent.ACTION_VIEW 打开地图应用程序并显示指定的地址   http://web_address Intent.ACTION_VIEW 打开浏览器程序并显示指定的URL   https://web_address Intent.ACTION_VIEW

Android Permission 访问权限大全(转)

程序执行需要读取到安全敏感项必需在androidmanifest.xml中声明相关权限请求, 完整列表如下: android.permission.ACCESS_CHECKIN_PROPERTIES允许读写访问”properties”表在 checkin数据库中,改值可以修改上传( Allows read/write access to the “properties” table in the checkin database, to change values that get upload

android开源项目框架大全:《IT蓝豹》

android开源项目框架大全: 1.多页切换TabHost9 高仿网易云音乐客户端的Home页面切换Tabhost 高仿网易云音乐客户端的Home页面切换Tabhost,并且三角形是透明的,实现方式,自定义AnimTabsView继承 RelativeLayout 里面对当前选中的item 处理 三角形变成透明效果,即在onDraw 里面对三角形图片经行透明度处理,AnimTabsView提供 setOnAnimTabsItemViewChangeListener方法的onChange()用来

ATM取款机模拟——数据结构课设

今天帮人写的第二篇课设 , ;-) 机智的窝 要求:大概说一下吧,就是要创建一个用户(初始化一账户),模拟ATM的业务(取款,100的整数倍,改密               码,查余额,等等,各种简单繁琐的操作 ;-) ) 直接贴代码吧: #include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <string> using name

Android学习xml解析大全之SAX和DOM

  随着android的学习解析xml成为了很多朋友面临的问.想学习如何解析xml就要先了解xml是什么. XML称为可扩展标记语言(Extensible Markup Language),由标准通用标记语言(SGML:Standard Generalized Markup Language)发展而来,允许开发者自定义标签,可以实现标签和内容的有效分离. 与HTML不同,XML不再侧重于数据如何表现,而是更多的关注数据如何存储和传输.因此,XML逐渐演变成为一种跨平台的数据交换格式.通过使用XM