Android移动应用开发
课程设计报告
(2019—2020学年 第Ⅰ学期)
作品主题:漫画app
系 别 信息与控制工程
专 业 计算机科学与技术
班 级 计算机1702
学 号 173230217
姓 名 张宏升
指导教师 郭丹
目录
一、需求分析 1
1.1引言 1
1.1.1编写目的 1
1.1.2项目背景 1
1.2功能需求分析 1
1.2.1功能描述 2
1.3数据流图 2
1.4系统开发及运行环境 2
二、功能设计 3
2.1系统详细设计 3
2.1.1登录注册模块 3
2.1.2添加模块 6
2.1.3查询模块 6
2.1.4修改模块 6
2.1.5删除模块 6
三、关键源代码 7
3.1添加代码 7
3.2查询代码 8
3.3修改代码 8
3.4删除代码 9
3.5建立数据库代码 9
3.6界面转换代码 10
3.7其他页面及其代码 11
四、项目总结 12
一、需求分析
1.1引言
1.1.1编写目的
一个好的系统设计的步骤决定了程序是否能按照设计者的目的按时完成,是否能在规定的时间内按照设计者的要求高质量的完成程序必要的功能。并且按照标准的设计步骤对程序进行调试,测试,以及后期的优化完善,使程序更加具有健壮性和可用性。
本说明对漫画app的各模块、页面、脚本分别进行了实现层面上的要求和说明。
1.1.2项目背景
随着移动设备制造技术和移动通信网络的迅猛发展,全球手机用户日益增加,手机成为了很多人日常生活中必不可少的一部分,手机业在日益发展的同时,人们对手机的功能需求和体验需求也越来越高,本系统基于Android平台,利用Java语言,以Eclipse为开发工具,主要是对管理系统的版面设计和功能设计的研究,尽可能设计出更具实用性的管理系统程序。
通过对管理系统功能功能、系统模块、用户需求方面进行全方位的分析制定开发流程。软件需要实现对租借人姓名,手机号码,租借时间,所租会议室进行添加,删除,修改,查询等功能并创建一个全新的界面登录这个功能界面。
1.2功能需求分析
用户需求:
2017年12月到2018年11月腾讯漫画APP的用户,男性占比52.17% ,女性占比48.83%以当前艾瑞广告数据“手机端”男\女用户统计结果接近1:1,男性用户比女性用户高于4.34%,当前腾讯动漫APP用户偏向于男性人群。
用户年龄:
2017年12月到2018年11月腾讯动漫使用人群24岁以下占比43.68%,25-30岁使用人群占比33.9%,31-35岁使用人群占比17.29%,36-40岁使用人群占比4.52%,41岁以上占比0.6%。
备注:2017年12月到2018年11月腾讯动漫主要用户为年轻人24岁以下,其次用户25-30岁年龄,从用户的分布年龄来看,具有付费的能力,可以推荐一些精品漫画。
二次元、动漫在国内受众年轻,回顾2018年的动漫产业发展,也让人感到年轻和生命力。根据艾瑞咨询最新发布的《2018年中国动漫行业研究报告》,去年动漫产业总产值突破1500亿元,在线内容市场规模近150亿元。而用户规模也获得较大增长,泛二次元用户规模近3.5亿,在线动漫用户量达2.19亿。
1.2.1功能描述
l 登陆界面:打开程序,进入程序主菜单
l 订阅动漫信息查询:查询出所有动漫信息以及投币数避免重复租借
l 动漫信息添加:动漫番号和投币数
l 动漫信息修改:修改动漫信息
l 信息删除:删除动漫信息
1.3数据流图
1.4系统开发及运行环境
开发环境:Android studio
运行环境:Android智能手机
二、功能设计
2.1系统详细设计
2.1.1登录注册模块
用户没有账号可点击登录按钮下方的“立即注册”进行注册。注册界面如图所示,用户可以注册然后进行登录。在注册界面中,首先提醒您输入用户名,注册成功后跳转到登录界面。
代码实现如下:
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class zhuceActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_zhuce);
}
public void Click (View v){
Intent intent = new Intent();
intent.setClass(this,MyActivity.class);
startActivity(intent);
}
}
登录成功和失败页面:
登录失败登陆成功
具体代码:
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private ListView mListView;
private EditText dengluzh;
private EditText denglumm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN
);
setContentView(R.layout.denglu);
dengluzh = (EditText) findViewById(R.id.et01);
denglumm = (EditText) findViewById(R.id.et02);
Button login = (Button) findViewById(R.id.btn02);
Button zc2 = (Button) findViewById(R.id.btnzc2);
login.setOnClickListener(this);
zc2.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn02:
String zh = dengluzh.getText().toString();
String mm = denglumm.getText().toString();
if ("13164557510".equals(zh)&&"sqlzhs521".equals(mm)){
Intent intent = new Intent(MainActivity.this,MyActivity.class);
startActivity(intent);
}else {
Toast.makeText(MainActivity.this,"登陆失败",Toast.LENGTH_SHORT).show();
}
break;
case R.id.btnzc2:
Intent intent = new Intent();
intent.setClass(MainActivity.this,zhuceActivity.class);
startActivity(intent);
break;
}
}
}
2.1.2添加模块
2.1.3查询模块
2.1.4修改模块
三、关键源代码
具体代码:
public class MyBaseAdapter extends BaseAdapter {
private Button btn;
private String[] shuming ={"青春猪头少年不会梦到兔女郎学姐","青春猪头少年不会梦到兔女郎学姐","我的青春恋爱物语管然有问题1","我的青春恋爱物语管然有问题2"
,"我的青春恋爱物语管然有问题2"};
private String[] zhurengong ={"樱岛麻衣兔女郎","樱岛麻衣泳装","雪之下雪乃","比企谷雪乃"
,"一色彩羽"};
private String[] zuozhe ={"作者:","作者:","作者:","作者:","作者:"};
private String[] zuozheming ={"鸭志田一","鸭志田一","渡航","渡航"
,"渡航"};
private int[] icons = {R.drawable.mayi01,R.drawable.mayi02,R.drawable.xuenai01,R.drawable.xuenai02,R.drawable.yise01};
@Override
public int getCount(){
return shuming.length;
}
@Override
public Object getItem(int position){
return shuming[position];
}
@Override
public long getItemId(int position){
return position;
}
@Override
public View getView(int position, View convertView, final ViewGroup parent){
View view = View.inflate(parent.getContext(),R.layout.item,null);
TextView shuming1 = (TextView) view.findViewById(R.id.shuming);
TextView zhurengong1 = (TextView) view.findViewById(R.id.zhurengong);
TextView zuozhe1 = (TextView) view.findViewById(R.id.zuozhe);
TextView zuozheming1 = (TextView) view.findViewById(R.id.zuozheming);
Button dy = (Button)view.findViewById(R.id.btn);
dy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(parent.getContext(),dingyueActivity.class);
parent.getContext().startActivity(intent);
}
});
ImageView logo=view.findViewById(R.id.logo);
shuming1.setText(shuming[position]);
zhurengong1.setText(zhurengong[position]);
zuozhe1.setText(zuozhe[position]);
zuozheming1.setText(zuozheming[position]);
logo.setBackgroundResource(icons[position]);
return view;
}
3.6界面转换代码
denglu02=findViewById(R.id.denglu02);
qxs=findViewById(R.id.qxs);
wd=findViewById(R.id.wd);
denglu02.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.denglu02:
Intent intent = new Intent();
intent.setClass(MyActivity.this,dingyueActivity.class);
startActivity(intent);
break;
case R.id.btn:
Intent intent1 = new Intent();
intent1.setClass(MyActivity.this,dingyueActivity.class);
startActivity(intent1);
break;
case R.id.qxs:
Intent intent2 = new Intent();
intent2.setClass(MyActivity.this,qingxiaoshuoActivity.class);
startActivity(intent2);
break;
}
}
}
);
qxs.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent intent2 = new Intent();
intent2.setClass(MyActivity.this,qingxiaoshuoActivity.class);
startActivity(intent2);
}
});
wd.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent intent2 = new Intent();
intent2.setClass(MyActivity.this,wodeActivity.class);
startActivity(intent2);
}
});
3.7其他界面及其代码:
我的界面轻小说界面订阅界面
代码如下:
我的界面:
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.WindowManager;
public class wodeActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wode);
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN
);
}
}
轻小说代码:
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class qingxiaoshuoActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_qingxiaoshuo);
}
}
四、项目总结
这次设计的课题对我而言是一个巨大的挑战,经过不断的学习努力,解决了软件开发过程中的各种问题,最终完成了软件的开发。通过这次综合的软件开发的过程,对我以后的学习生活有着积极的促进作用。
这个学期学安卓开发不是很里先后,开始做课设的时候,从一开始的0基础,不断的一点点写基础代码,实现基础功能。甚至一开始的时候在基础代码,没有几行的情况下都会有许多错误,找资料解决bug。该系统主要实现了任务管理,用户登录注册。
由于自身经验不足,尽管按照书本实现代码,但还是有各种各样的问题。例如在创建数据库的时候,在没有错误情况下,完全重新写了三次都无法运行。代码出现错误不知如何修改,陷入无尽的迷茫中,因个人的能力有限,有些功能设计不够完善,有待进一步的改善。
在开发系统的过程中,学习Android的困难比想象的要大很多,为了在较短的时间掌握Android的开发,需要投入大量的精力去学习。开发过程中我碰到了很多问题,而且程序开发的过程和结果也不是非常完美。为了解决这些问题,我通过咨询同学或者通过互联网查找相关资料,学习解决问题的相关方式。
但是通过这段时间的锻炼,对于系统设计的理念更为明确,对Eclipse这款软件的运用真的熟悉掌握了不少。这是一次难得的经历,让我对安卓开发有了更深的理解。系统设计从刚开始的一片空白,到现在至少可以自己进行功能分析,对于一些功能实现还是已经会了。相信在以后的系统设计中,本人能够吸取经验和教训,能力不断提高。总之,通过此次课程设计,真正深刻体会到了在找BUG的几天里很痛苦,找到的BUG被自己发现并且解决的时候,那是一种非常开心的事。做好一个完整事情,需要非常耐心的对待要解决的问题,要善于运用有限的资源来充实自己,也要相信自己。
原文地址:https://www.cnblogs.com/LXF-i/p/12006096.html