移动应用程序设计基础 您所在的位置:网站首页 移动端ui设计规范期末考试 移动应用程序设计基础

移动应用程序设计基础

2024-07-15 18:13| 来源: 网络整理| 查看: 265

《移动应用程序设计基础》期末报告

 

课题名称:

《移动应用开发基础》上机考核

所使用的工具软件及环境:

JDK,Android Studio

 

一、课题背景

期末上机考核,将实验四中的内容和实验五的内容以及上课所完成的小实验相互结合,完成最后的考核。 

二、任务内容

考核内容:上机单独完成一个简单日记本程序的编写。界面包括:用户登录,用户注册,日记本主页,新增编辑日记。

注意:以下***为您姓名的拼音单词第一个字母(如俞成海——ych)。

1.用户登录

布局:activity_login.xml, 布局如下图,资源图片username.png和password.png,布局要求左边内嵌图片,提示如图。(10分)

92bd1dfe52ce43fba58ef76ce53f5e52.png

图1 登录界面布局

 

实现功能:LoginActivity.java

输入字段包括用户名(username),密码(password)和确定(ok)按钮,点击确定(ok)按钮(10分) 如果用户名(username)和密码(password)在SharedPreferences中存在的话,则跳转DiaryActivity;点击注册,跳转用户注册界面RegisterActivity如果用户名(username)和密码(password)在SharedPreferences中不存在或不一致,则跳转用户注册界面RegisterActivity,同时Toast提示“username,请先注册您的信息,***程序友情提示!“如下图。

c4fa9f627f8b41b1b24870e3078c3b78.png

注意:

注册时,写入SharePreferences,文件名user,保存值username和password;登录时,读出SharePreferences(文件名为user)中的username和password

 

2.用户注册

界面布局:activity_register.xml, 布局如下图,资源图片username.png和password.png,布局要求左边内嵌图片,提示如下中间图。(10分)

f10e635f13f34a4894413e728c01368f.png

       功能实现:RegisterActivity.java。点击注册(register),将用户名(username)和密码(password)插入到写入SharePreferences中(文件名user,保存值username和password),返回到登录界面,Toast弹出“注册成功,请登陆,***程序友情提示!”,如上图。(10分)

3.日记主页

界面布局:activity_diary.xml, 布局如下图,包括AppBarLayout,Listview和FloatingActionButton。(10分)

43781f26f3b04ce9bdffd8ca4e1b8edb.png

功能实现:DiaryActivity.java,

获取数据库***_DiaryDB.db中的表diary的信息,并将日记数据显示在listview中。(10分)点击列表项中的编辑图片按钮,界面跳转到日记新增编辑界面(DiaryInfoActivity)。(5分)点击AppBar上的编辑(edit_tv)列表项中的编辑图片按钮(bianji.png)替换成删除图片(delete.png),编辑改成取消,如下图。点击删除图片按钮,删除列表中的这一项,同时删除数据库中的该条数据,点击取消,取消改回为编辑,列表项中的删除图片(delete.png)替换成编辑图片按钮(bianji.png)。(10分)

 

三、界面设计与实现(描述设计思想和理念的加分)

登录界面采用简单而常用的linerLayout布局,注册界面同样也是

5180155689a048e48b36d5a758a856fb.png

7d64774a2dfb453cb042767ee6e8c869.png

日记本主界面采用CoordinatorLayout布局、listview采用RelativeLayout布局

 

713b9cdce7894eed9ed165a634f4d180.png

a26a33ee42db4181a07a9cfed9b80860.png

编辑日记界面与采用CoordinatorLayout布局

 42a1af24c9894c6489cc45d6af518c86.png

四、功能流程与实现(使用设计思想、设计模式、UML图和流程图加分)

流程图:

ba7543ed6a8d417cb65db0b42149a2d6.png

 

核心的java代码文件,以及根据实验5之后多出来的登录界面的布局文件,如下图为所有的文件详情。

 a7d542c35136424b89b730c7beff322c.png 

 代码文件:(代码文件有资源包,下载链接在文章最后) //AndroidManifest.xml //Login.java package com.example.sqlitedemo; import android.content.Context; import android.content.Intent; import android.database.sqlite.SQLiteDatabase; import android.os.Build; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatActivity; public class Login extends AppCompatActivity { static int p=0; static public EditText usenameEdtxt,passwordEdtxt; public Button registerButton,submitbutton; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); usenameEdtxt=(EditText)findViewById(R.id.usename_edtxt); passwordEdtxt=(EditText)findViewById(R.id.password_edtxt); submitbutton=(Button)findViewById(R.id.submit_button); registerButton=(Button)findViewById(R.id.register_button); //登录按钮监控 submitbutton.setOnClickListener(new View.OnClickListener() { @RequiresApi(api = Build.VERSION_CODES.GINGERBREAD) @Override public void onClick(View v) { String usename=usenameEdtxt.getText().toString(); String password=passwordEdtxt.getText().toString(); if(usename.isEmpty()){ usenameEdtxt.setError("用户名不能为空"); usenameEdtxt.requestFocus(); return; } if(password.isEmpty()){ passwordEdtxt.setError("密码不能为空"); passwordEdtxt.requestFocus(); return; } if(p==0){ Toast.makeText(com.example.sqlitedemo.Login.this, usename+"请先注册您的信息,邵永刚程序友情提示!", Toast.LENGTH_SHORT).show(); Intent it=new Intent(); Context packageContext; it.setClass(com.example.sqlitedemo.Login.this, Register.class); com.example.sqlitedemo.Login.this.startActivity(it); return; } if(usename.length()>0&&password.length()>0&&usename.equals(Register.usenameEdtxt1.getText().toString())&&p==1&&password.equals(Register.passwordEdtxt1.getText().toString())){ Toast.makeText(com.example.sqlitedemo.Login.this, "登录成功", Toast.LENGTH_SHORT).show(); Intent it=new Intent(); Context packageContext; it.setClass(com.example.sqlitedemo.Login.this, MainActivity.class); com.example.sqlitedemo.Login.this.startActivity(it); } else { Toast.makeText(com.example.sqlitedemo.Login.this, usename+"请先注册您的信息,邵永刚程序友情提示!", Toast.LENGTH_SHORT).show(); Intent it=new Intent(); Context packageContext; it.setClass(com.example.sqlitedemo.Login.this, Register.class); com.example.sqlitedemo.Login.this.startActivity(it); } } }); registerButton.setOnClickListener(new View.OnClickListener() { @RequiresApi(api = Build.VERSION_CODES.GINGERBREAD) @Override public void onClick(View v) { Toast.makeText(com.example.sqlitedemo.Login.this, "进行注册", Toast.LENGTH_SHORT).show(); Intent it=new Intent(); Context packageContext; it.setClass(com.example.sqlitedemo.Login.this, Register.class); com.example.sqlitedemo.Login.this.startActivity(it); } }); } }

 

//Register.java package com.example.sqlitedemo; import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatActivity; public class Register extends AppCompatActivity { static public EditText usenameEdtxt1,passwordEdtxt1; public Button registerButton; protected void onCreate(Bundle savedInstanceState) { Login.p=1; super.onCreate(savedInstanceState); setContentView(R.layout.register); usenameEdtxt1=(EditText)findViewById(R.id.usename_edtxt); passwordEdtxt1=(EditText)findViewById(R.id.password_edtxt); registerButton=(Button)findViewById(R.id.register_button); registerButton.setOnClickListener(new View.OnClickListener() { @RequiresApi(api = Build.VERSION_CODES.GINGERBREAD) @Override public void onClick(View v) { String usename=usenameEdtxt1.getText().toString(); String password=passwordEdtxt1.getText().toString(); if(usename.isEmpty()){ usenameEdtxt1.setError("用户名不能为空"); usenameEdtxt1.requestFocus(); return; } if(password.isEmpty()){ passwordEdtxt1.setError("密码不能为空"); passwordEdtxt1.requestFocus(); return; } if(usename.length()>0&&password.length()>0){ Toast.makeText(com.example.sqlitedemo.Register.this, "注册成功,请登陆,邵永刚程序友情提示!", Toast.LENGTH_SHORT).show(); Intent it=new Intent(); Context packageContext; it.setClass(com.example.sqlitedemo.Register.this, com.example.sqlitedemo.Login.class); com.example.sqlitedemo.Register.this.startActivity(it); } } }); } } //MainActivity.java package com.example.sqlitedemo; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Build; import android.os.Bundle; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.snackbar.Snackbar; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import android.util.Log; import android.view.View; import android.view.Menu; import android.view.MenuItem; import android.widget.AdapterView; import android.widget.ListView; import android.widget.TextView; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import static android.os.Build.VERSION.SDK_INT; public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; private TextView editTv; private ListView diaryList; private FloatingActionButton fab; private List listData; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); listData = new ArrayList(); fab = (FloatingActionButton) findViewById(R.id.fab); editTv = (TextView) findViewById(R.id.edit_tv); diaryList = (ListView) findViewById(R.id.list_view); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Log.e(TAG, "onClick: " ); Intent intent = new Intent(MainActivity.this, DiaryInfoActivity.class); intent.putExtra("FLAG", 0); startActivity(intent); } }); editTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.e(TAG, "on" ); int length = queryData().size(); if (editTv.getText().toString().equals("取消")){ editTv.setText("编辑"); for (int i = 0;i //register.xml 五、课题实现展示

15126c68696a47e9b4761e2452b24df0.png acbd59fd8d9143e9b6014dbf597437ba.png66c8d32187fe47a187fbc7cf092fe762.png

2235b49774a744de9fefa38f28a301d0.png 5681727bc2dc47a7a1c7dc68fce467c2.pngef5d86937a30474c961c20cba916e4e1.png

进入登录界面,输入用户名和密码,此处不能为空,此时输入的用户名没有进行注册,所以会进入注册界面显示(请先注册)或者直接点击注册按钮进入注册界面显示(进行注册)。注册输入用户名和密码点击注册按钮显示(注册成功),会返回到登录界面,输入之前注册的用户名和密码,会进入到日记本主界面,显示(登录成功)。 

185a2b3b0d2c407797ad254490eccfdc.png a2588324b112431ebc5bc2b6613b1b21.png0ff35eaf362f4e6eacbc76ad36e1920d.png

点击编辑,可以删除所写的日记内容,点击加号按钮,可添加日记内容,点击勾保存。 

68f77709b4424df89cd7051dbe7b4bea.png 5a83eb9376764fa987f54d8fbe818d5b.png6119ff5ae85840a3a9b5cc68be32bcc0.png

点击日记标题右边的编辑图片按钮,可进入修改界面。 

 05c9782a124c4af194216fa7d43e5001.png ac3f0bd55d154d44af6a4c92161b98b9.png33b369816cf94fa891c063e90c6466fe.png

点击日记标题一行可以查看日记内容。点击编辑可删除日记,点击×会出现删除提示。 

六、总结与体会

本次上机考核,通过高级控件进行设计登录与注册界面。同时运用SQLiteOpenHelper抽象类以及契约类SQLiteContract,创建SQLiteOpenHelper的子类并覆写onCreate方法。本次考核内容基本完成,学习到数据库的使用,使我更好掌握了安卓数据库的应用,通过查找资料以及学习,完成最后先登录在跳转进入日记本的制作。通过本次实验,收获颇多,复习了以前的知识,也学习到了新的内容,对今后的学习有了很大的帮助。

 

 

 下载资源包:

 https://download.csdn.net/download/weixin_48388330/76315152

 资源中的图片以及内容只适用与学习

 

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有