热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

菜谱APP源码和设计报告

《移动互联开发》课程作业学院:班级:学号:姓名:日期:设计要求(提交文档时需删除&

《移动互联开发》

课程作业

学 院:

班 级:

学 号:

姓 名:

日 期:

设计要求(提交文档时需删除):

1.本课程设计作为《Android 程序设计》的期末考查内容。

2.任务安排:

(1)确定内容:11月3日前将确定内容,雷同内容进行微调(功能,实习,界面)。

(2)任务完成:12月2日,将计划完成的内容提交。

(3)程序演示:程序演示,录制演示视频。介绍程序的整体结构,实现方法,涉及到的技术,虚拟器演示。时长5-10分钟。

3.知识点要求包括但不限于以下内容:

(1)界面设计;

(2)事件处理;

(3)页面跳转;

(4)数据存储

4.课程设计的主体包括

(1)封面

(2)目录

(3)正文

1)应用平台介绍,开发版本,型号

2)需求分析

3)系统功能设计:

4)系统实现:原型设计,界面设计,系统结构,涉及到的关键技术,功能实现及关键代码

5)运行效果。

(4)结论

(5)参考文献

注意:


  1. 程序设计鼓励自主完成;设计功能完备,程序运行流畅无误。
  2. 代码部分需要进行必要的注释。
  3. 文档撰写应注意排版美观大方,语言通顺,无错别字。若有同学的设计基本雷同的都定位不及格。

重要事项:


  1. 提交内容:
    1. 文档的电子版
    2. 完整代码的电子版;
    3. 演示视频(本人需入镜)


  1. 电子版提交:学生个人将所有提交内容放在“学号+姓名”的文件夹中;
    例如对于学号为20110309,姓名为“王琦”的同学,压缩文件名为“20110309王琦”
  2. 提交时间与地点:
    电子版:压缩后,提交至课程中心文档
    程序演示:后续通知


目录


    1. 引言1
      1.1 项目介绍1
      1.2 开发环境1
    2. 系统需求分析1
      2.1 用户需求1
      2.2 功能需求1
      2.3 性能需求1
    3. 系统总体设计1
      3.1 功能设计1
      3.1.1 功能划分(系统总体框架)2
      3.1.2 功能说明3
      3.2 系统数据流程4
      3.2.1 系统数据流程图4
      3.2.2 数据流程说明5
      3.3 界面设计5
      3.3.1 界面布局设计5
      3.3.2 界面切换描述6
    4. 系统详细设计6
      4.1 结构设计(含文件结构、数据结构)6
      4.2 函数设计6
    5. 系统实现7
      5.1 运行结果7
      5.2 关键代码8
    6. 结论16
    7. 参考文献16



1概述(一级标题,黑体,小三号字,段前、段后间距为1行)

最近的疫情虽然已经出现了好转,但是外卖平台上提供服务的商家还是屈指可数,再加上点外卖仍旧存在一定病毒传播的风险,因此越来越多从未做饭的人都开始尝试在家做饭。这直接导致了许多食谱类APP的流量猛增,开始在互联网上掀起一股全民做饭的热潮。下面我们来分析一下食谱类APP的发展前景。

现如今是智能手机快速发展的新时代。几乎在社会中的每个人多多少少都会使用智能手机和电脑,因为它们可以使我们的生活舒适、快捷和更加方便。对比国内外的许多人类的日常生产生活中,人们都几乎都已经离不开智能手机了。随着个人的消费水平不断提高和享受生活,几乎很少人能掌握日常生活到底消费在哪些方面,食谱类APP已经无法满足人们日益增长的需求,生活中许许多多的收支和消费情况,造成人们无法清晰的了解日常生活中的各种消费。如果用户在智能手机中下载一个适合自己的食谱类APP,可以让用户日常的做饭都得到归类和管理,能够使得用户方便的记录下自己的食谱类APP的同时,也能体会不一样的快乐。


1.1选题背景(二级标题,黑体,四号字,段前、段后间距为1行)

疫情期间,许多临时抱佛脚查食谱开始学做饭的人不在少数。下面我们来看看各个平台的数据统计,比如燃财经查询七麦数据2020年1月移动应用增长榜发现,美食佳饮子分类前20名中,食谱类APP占4席。食谱分享平台“网上厨房”后台的数据显示,春节期间,三四线城市的新增用户有明显增长。网上厨房CEO杨洋称,受疫情影响,与大量一线市的务工人员滞留三四线城市有直接关系。

年轻一代不做饭的原因,除了工作忙,时间有限,更多的是从小在家都是爸爸妈妈做饭,自己不会做,这次疫情期间空余时间变多,很多人发现跟着食谱学做饭不是太难的事情,并逐渐在做饭中发现了许多趣味,而不仅仅只是想填饱肚子。现在晒厨艺还满足了一部分年轻人的社交展示需求,朋友圈已经成为不少人厨艺大比拼的地方。因为每天刷时间最长的还是疫情相关的新闻,需要转移注意力来调节心情,下厨既是一个真治愈的过程,还能满足自己填饱肚子的需求。


1.2选题意义


总的来讲,食谱类APP的发展前景还是不错的。虽然疫情即将过去。但是这次食谱类APP得到了一次免费的引流拉新机会,还提高了相关APP的知名度。因此这次疫情更像是一场大考,只有真正为用户提供了有价值内容的产品,才能一直得到用户的青睐。


1.3开发工具及技术


1.3.1 Android stduio4.1;JDK1.8;


  1. 系统需求分析
    2.1用户需求
    该系统使用Android studio开发平台进行软件系统的开发,Android studio的界面简单和具有强大的兼容性的各方面的优点。开发者可以更好的进行软件的开发和日后的相关维护。
    该系统同时具有操作简单、操作方便、互换性好、较为直观等特点,这就是为什么我们可以选择Android studio来开发一个系统。
    2.2功能需求
    为了使用户体验感更好,开发人员会事先指定一些约束规则来进行行为的约束。开发者一般做出要求如下:用户管理家菜谱类APP软件,当用户输入已经注册过的用户名和密码,用户就会进入到SQlite数据库当中。但是如果用户输入的数据没有与数据库中的数据比对发现并没有找到,用户不得进行相关信息的注册和登录。这样它的安全显然非常可靠和安全。
    2.3性能需求
    软件系统分析主要包括技术、经济、运营和开发方面的研究,从而以确保信息资源和投入资金的合理利用,避免方案设计中存在的各种各样问题,帮助我们更好地完成软件实施方案。换句话说,技术支持和资金支持分析决定了项目完成的可能性,可行性分析是实现项目阶段——从开始到中间到结束——的必须所要面临途径。我主要根据实际需要情况进行了较为全面的软件系统分析,具体如下。
    本文从一个易于理解的分析方案开始,它将帮助用户处理自己日常生活中所遇到的问题,查看硬件和软件是否能满足开发者的任务需求。
    作为一名计算机专业的学生,我在学校学到了很多编程知识,比如Android studio和Java等相关技术。经过反复验证方案和规划方案,从系统结构到编程语言的选择,再到最终选定的技术,都在寻找最优可以实现这门技术的可行性的研究。
  2. 系统总体设计

3.1功能设计

3.1.1功能规划(系统总体框架)

本系统按用户访问菜谱APP软件。

当用户进入软件系统的时候,系统只为系统存在用户提供登录操作,如果是第一次进入需要注册账号信息。当用户注册完毕后,就可以访问菜谱APP软件。

当用户进入用户界面访问时,用户可以根据模糊查询,进行对自己喜欢的菜谱进行查询,查询过后点击进入,就可以看到具体的做法了。然后根据菜谱的做法,进行美味食品的制作。

3.1.2功能说明

用户进入菜谱APP软件系统的时候,系统只为系统存在用户提供登录和注册的相关操作,初始的用户需要进行账号的注册,否则登录不了。注册完毕后,用户就可以打开菜谱APP,菜谱APP可以进行相关菜品的查询,并且也有该软件开发的一些基本信息。

当用户进入用户界面访问时,用户可以根据模糊查询,进行对自己喜欢的菜谱进行查询,查询过后点击进入,就可以看到具体的做法了。然后根据菜谱的做法,进行美味食品的制作。

3.3界面设计

3.3.1界面布局设计

登录界面 注册界面

主界面

1.登录到注册页面的切换

Intent intent5 = new Intent(MainActivity.this, Register.class);
startActivity(intent5);
finish();


  1. 判断是否数据之前有没有注册过
    boolean userdata = false;
    for (int i = 0; i User user= data.get(i); //可存储账号数量
    if (name.equals(user.getName()) && password.equals(user.getPassword())) {
    userdata = true;
    break;
    } else {
    userdata = false;
    }
    }
    把注册的数据都放到userdata当中,ArrayList data = mSQlite.getAllDATA();
    判断date的长度,用.size()进行长度的判断。
    3.


首先点击我们需要的菜谱,进行到菜品的详情页面,我们要先制作一个模板,通过在集合的数据,依次循环,将数据放入进去,同时还需要一个简单的适配器,listView展示给用户看的时候,需要设置适配器BaseAdapter。
// 决定了ListView列表展示的行数
@Override
public int getCount() {
return mDatas.size();
}
//返回指定位置对应的数据
@Override
public Object getItem(int position) {
return mDatas.get(position);
}
// 返回指定位置所对应的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); //将布局转换成view对象的方法
holder=new ViewHolder(convertView);
convertView.setTag(holder);
}else {
holder = (ViewHolder) convertView.getTag();
}


  1. 系统详细设计

4.1结构设计(文件结构、数据结构)

软件系统操作流程的设计目的是简化设计流程,更加方便日后开发程序人员进行更好的设计相关的软件开发。当然这样的设计为以后程序开发人员的开发设计和用户的使用感都有很大的关系。因此,系统操作图、注册流程图、登录流程图显得尤为重要。如图所示。

系统的安全性非常重要,所以您需要登录才能登录,不进行注册您就不能使用主账户页面,如图所示。

4.2函数设计

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)");
}

这边是数据库的登录和注册的设计,后面的信息采用的是


  1. 系统实现

5.1运行结果

5.2关键代码


  1. 数据库
    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)");
    }
  2. 适配器
    // 决定了ListView列表展示的行数
    @Override
    public int getCount() {
    return mDatas.size();
    }
    //返回指定位置对应的数据
    @Override
    public Object getItem(int position) {
    return mDatas.get(position);
    }
    // 返回指定位置所对应的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); //将布局转换成view对象的方法
    holder=new ViewHolder(convertView);
    convertView.setTag(holder);
    }else {
    holder = (ViewHolder) convertView.getTag();
    }
    // 加载控件显示的内容
    // 获取集合指定位置的数据
    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);
    }
    }
    }


  1. 登录、注册

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 data = mSQlite.getAllDATA();
boolean userdata = false;
for (int i = 0; i User user= data.get(i); //可存储账号数量
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);
}
}


  1. 结论
    在这个过程中,我学到了很多,我知道我还有很多经验要学,我的专业技能还不够。当涉及到基本的计算机知识时,许多事情可以改进,以进一步优化设计。作为一名合格的项目协调员,我将继续解决这些缺点。尤其是计算机系统的底层得到了优化;简单的关系数据库可能不满足以下要求。
  2. 参考文献

[1] 刘奇付,李紫艳.基于Android平台的大学生生活费手机管理系统设计与实现[J].软件导刊,2015,14(9):141-143.

[2]周李达,邓璐凡,王中霖,等.基于Android的大学生出行系统设计与实现[J].信息与电脑:理论版,2015(19):99-101.

[3]王亚维,徐霞.基于Android的大学生兼职系统设计与实现[J].地理空间信息,2013,11(2):98-100.

[4] 韦俊星,曾祥宝,黄美素,等.基于安卓系统的大学生党课培训系统客户端的设计与实现[J].中国新通信,2015,17(11):116-117.

[5] 卢昕,杨晞.基于VFP6.0收款记账管理系统的实现[J].电脑编程技巧与维护,2014(6):48-49.

[6] 赵世祥,杨昆,朱彦辉,等.基于Android平台的大学生课程计划管理系统[J].通讯世界,2016(1):113-114.

[7] 冯璐.一个"网络记账本"的设计与实现——基于PHP+MySQL的收支管理系统[J].电脑知识与技术:学术交流,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] 许荣丰.财务综合管理系统运行中存在的问题[J].吉林金融研究,2008(3):74-74.

[10]李斌.会计信息化管理——记账凭证的几点新认识[J]. 中国乡镇企业会计, 2009(2):122-124.

[11]卢照,王琦,王华.基于Android平台的大学生实用软件设计开发[J].微型机与应用,2015(24):19-20.

[12]陈梦娜,蓝建平.基于Android的大学生文明寝室测评系统设计与实现[J].网络安全技术与应用,2014(3):64-65.

[13]黄天上,姚世强,裴冬梅,等.基于Android平台的大学生校园服务信息实时发布系统的研究[J].教育,2015(10):218-218.

[14]吴冬芹,陈子健.基于GTD的大学生时间管理系统设计与实现[J].电脑编程技巧与维护,2015(16):44-45.

[15]王秋丽.我国财务软件的现状及发展趋势[J].山西经济管理干部学院学报,2012,10(1): 43-45.


推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
author-avatar
佳品h空投
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有