《移动互联开发》
课程作业
学 院:
班 级:
学 号:
姓 名:
日 期:
设计要求(提交文档时需删除):
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)参考文献
注意:
- 程序设计鼓励自主完成;设计功能完备,程序运行流畅无误。
- 代码部分需要进行必要的注释。
- 文档撰写应注意排版美观大方,语言通顺,无错别字。若有同学的设计基本雷同的都定位不及格。
重要事项:
- 提交内容:
- 文档的电子版
- 完整代码的电子版;
- 演示视频(本人需入镜)
- 电子版提交:学生个人将所有提交内容放在“学号+姓名”的文件夹中;
例如对于学号为20110309,姓名为“王琦”的同学,压缩文件名为“20110309王琦” - 提交时间与地点:
电子版:压缩后,提交至课程中心文档。
程序演示:后续通知
目录
-
- 引言1
1.1 项目介绍1
1.2 开发环境1 - 系统需求分析1
2.1 用户需求1
2.2 功能需求1
2.3 性能需求1 - 系统总体设计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 - 系统详细设计6
4.1 结构设计(含文件结构、数据结构)6
4.2 函数设计6 - 系统实现7
5.1 运行结果7
5.2 关键代码8 - 结论16
- 参考文献16
- 引言1
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;
- 系统需求分析
2.1用户需求
该系统使用Android studio开发平台进行软件系统的开发,Android studio的界面简单和具有强大的兼容性的各方面的优点。开发者可以更好的进行软件的开发和日后的相关维护。
该系统同时具有操作简单、操作方便、互换性好、较为直观等特点,这就是为什么我们可以选择Android studio来开发一个系统。
2.2功能需求
为了使用户体验感更好,开发人员会事先指定一些约束规则来进行行为的约束。开发者一般做出要求如下:用户管理家菜谱类APP软件,当用户输入已经注册过的用户名和密码,用户就会进入到SQlite数据库当中。但是如果用户输入的数据没有与数据库中的数据比对发现并没有找到,用户不得进行相关信息的注册和登录。这样它的安全显然非常可靠和安全。
2.3性能需求
软件系统分析主要包括技术、经济、运营和开发方面的研究,从而以确保信息资源和投入资金的合理利用,避免方案设计中存在的各种各样问题,帮助我们更好地完成软件实施方案。换句话说,技术支持和资金支持分析决定了项目完成的可能性,可行性分析是实现项目阶段——从开始到中间到结束——的必须所要面临途径。我主要根据实际需要情况进行了较为全面的软件系统分析,具体如下。
本文从一个易于理解的分析方案开始,它将帮助用户处理自己日常生活中所遇到的问题,查看硬件和软件是否能满足开发者的任务需求。
作为一名计算机专业的学生,我在学校学到了很多编程知识,比如Android studio和Java等相关技术。经过反复验证方案和规划方案,从系统结构到编程语言的选择,再到最终选定的技术,都在寻找最优可以实现这门技术的可行性的研究。 - 系统总体设计
3.1功能设计
3.1.1功能规划(系统总体框架)
本系统按用户访问菜谱APP软件。
当用户进入软件系统的时候,系统只为系统存在用户提供登录操作,如果是第一次进入需要注册账号信息。当用户注册完毕后,就可以访问菜谱APP软件。
当用户进入用户界面访问时,用户可以根据模糊查询,进行对自己喜欢的菜谱进行查询,查询过后点击进入,就可以看到具体的做法了。然后根据菜谱的做法,进行美味食品的制作。
3.1.2功能说明
用户进入菜谱APP软件系统的时候,系统只为系统存在用户提供登录和注册的相关操作,初始的用户需要进行账号的注册,否则登录不了。注册完毕后,用户就可以打开菜谱APP,菜谱APP可以进行相关菜品的查询,并且也有该软件开发的一些基本信息。
当用户进入用户界面访问时,用户可以根据模糊查询,进行对自己喜欢的菜谱进行查询,查询过后点击进入,就可以看到具体的做法了。然后根据菜谱的做法,进行美味食品的制作。
3.3界面设计
3.3.1界面布局设计
登录界面 注册界面
主界面
搜索界面 软件详情 菜品详情
3.3.2界面切换描述
1.登录到注册页面的切换
Intent intent5 = new Intent(MainActivity.this, Register.class);
startActivity(intent5);
finish();
- 判断是否数据之前有没有注册过
boolean userdata = false;
for (int i = 0; i < data.size(); i++) {
User user= data.get(i); //可存储账号数量
if (name.equals(user.getName()) && password.equals(user.getPassword())) {
userdata = true;
break;
} else {
userdata = false;
}
}
把注册的数据都放到userdata当中,ArrayList<User> 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();
}
- 系统详细设计
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)");
}
这边是数据库的登录和注册的设计,后面的信息采用的是
- 系统实现
5.1运行结果
5.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)");
} - 适配器
// 决定了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);
}
}
}
- 登录、注册
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); //可存储账号数量
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] 刘奇付,李紫艳.基于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.