移动应用开发技术
大作业
题 目: 志 愿 者 信 息 管 理 系 统
二级学院:
专业班级:
姓 名:
学 号:
一、系统功能概述
本系统采用 MVC 架构设计,SQLite 数据表有用户表、成员表和活动表,有
十多个 Activity 页面。打开应用,进入欢迎界面,3s 后跳转登录界面,用户先注
册账号,登录成功后进入主界面。主界面可以查看我的活动,修改和删除活动,
还能发布活动。可以添加和删除成员、还能查看我的成员信息。可以查看和修改
个人信息。底部导航栏和顶部菜单栏,菜单栏可以打开背景音乐、查询位置和查
询时间。应用还制作了显示时间的小组件,功能非常丰富。
二、需求分析
现在社会上有很多活动都需要志愿者,在校内也有青年志愿者协会,作为志
愿者,我们都希望能够方便地创建活动让其他成员看到并且加入进来,同时自己
也能看到其他正在发布的活动,报名加入其中。对于志愿团队中的每位成员,都
希望能够了解其他成员的相关信息,促进交流和协作。所以制作了志愿者信息管
理系统。
志愿者管理系统有 3 种模型,分别是用户、活动和成员。属于 MVC 设计中
的 Model,Layout 布局作为系统的视图,也就是 View,控制系统调用 SQLite 进
行增删改查的 Java 代码就是 Controller,用户可以发布活动,添加自己的成员,
可以删除和查询成员,也可以修改、删除和查询活动。当然,用户可以修改自己
的个人信息。管理系统的架构图如下图所示:
三、系统设计
首先是欢迎界面,比较简单,就是在父布局添加了 background,然后 width
和 height 都设置为 match_parent。主要功能就是延迟 3s 后跳转到主界面。实现
的核心代码如下所示:
handler.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(WelcomeActivity.this, LoginActivity.class);
startActivity(intent);
finish();
}
}, 3000);
然后看下登录界面,最外层父布局采用线性布局。登录界面顶部是一个
CardView,里面放置了 ImageView,显示主题图片,下面放置两个输入框,输入
框设定下背景样式,选中时边框会变色,看起来会更柔和些。控件之间都设置了
margin,看起来不那么别扭,输入框甚至设置了 padding,为了输入 text 时能和
外边框保持些边距。底下的 Button 也采用了样式表,点击变色。下面还有一个
CheckBox 和 TextView,CheckBox 复选框是用来实现是否记住密码的功能,根据
被选中的状态来得到用户是否记住密码,立即注册的 TextView 是为了跳转到注
册 Activity。实现的核心代码如下:
pref = getSharedPreferences("data", MODE_PRIVATE);
editor = pref.edit();
boolean isRemember = pref.getBoolean("remember", false);
// 如果记住密码
if (isRemember) {
String account = pref.getString("account", "");
String password = pref.getString("password", "");
// 将账号和密码设置到文本框中
etAccount.setText(account);
etPassword.setText(password);
rememberPass.setChecked(true);
}
注册界面的设计和登录界面大同小异,主要是输入两遍密码进行安全确认,
在 Activity 中的判断逻辑比较多,比如账号、密码和确认密码不能为空,密码和
确认密码必须相同,注册的账号不能已存在,以及长度必须都大于 6 位。这些判
断逻辑加上后,系统就会变得很完善。核心的判断逻辑如下:
if (TextUtils.isEmpty(account) || TextUtils.isEmpty(password) ||
TextUtils.isEmpty(confirm)) {
util.showToast(this, "账号或密码不能为空");
} else if (!password.equals(confirm)) {
util.showToast(this, "两次输入的密码不一致");
} else if (account.length() < 6 || password.length() < 6) {
util.showToast(this, "账号或密码长度不能小于 6 位");
} else {
User user = new User(account, password);
userDao.open();
if (userDao.isExistUser(account)) {
util.showToast(this, "该账号已存在,不能重复注册");
} else {
userDao.insertUser(user);
util.showToast(this, "注册成功!");
// 向上一个活动返回数据,参数 1 处理结果,参数 2 意图
Intent intent = new Intent();
intent.putExtra("acc", account);
intent.putExtra("pass", password);
setResult(RESULT_OK, intent);
finish();
}
userDao.close();
}
布局上值得提一下的就是 Button 的样式表,因为刚开始我们只知道给 Button
添加 background,红绿蓝等颜色。现在知道可以给 Button 添加 selector.xml,可
能还有其他更好的方法,但目前只掌握了这种方式。核心的代码如下:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape>
<gradient android:startColor="#3CB371"
android:endColor="#DB7093"
android:angle="90" />
<corners android:radius="15dp" />
<padding android:left="10dp" android:top="10dp"
android:right="10dp" android:bottom="10dp" />
</shape>