网络资源模板--Android Studio 宿舍管理系统
目录
一、项目演示
二、项目测试环境
三、项目详情
四、完整的项目源码
一、项目演示
网络资源模板--宿舍管理系统
二、项目测试环境
三、项目详情
登录注册页面
### 功能总结
1. **用户输入**:
- 允许用户输入用户名和密码。
2. **登录验证**:
- 检查用户名和密码是否为空。
- 使用 MD5 加密进行密码验证。
3. **信息存储**:
- 可选择保存用户名和密码到 `SharedPreferences`。
4. **自动填充**:
- 启动时从 `SharedPreferences` 获取并填充已保存的用户信息。
5. **导航功能**:
- 登录成功后跳转到主界面。
- 提供跳转到注册界面的选项。
6. **返回操作**:
- 点击返回键时结束当前活动。
private void init() {
// 绑定界面组件
this.et_username = (EditText) findViewById(R.id.username);
this.et_pwd = (EditText) findViewById(R.id.pwd);
this.save_pwd = (CheckBox) findViewById(R.id.save_pwd);
this.login = (Button) findViewById(R.id.loginBtn);
this.tv_register = (TextView) findViewById(R.id.register);
getUserInfo(); // 获取用户信息
// 设置登录按钮的点击事件
this.login.setOnClickListener(v -> {
LoginActivity.this.getEditString(); // 获取输入的用户名和密码
String md5 = MD5Utils.md5(LoginActivity.this.passWord); // 对密码进行MD5加密
LoginActivity loginActivity = LoginActivity.this;
loginActivity.spPsw = loginActivity.readPsw(loginActivity.userName); // 读取存储的密码
// 验证用户名和密码
if (TextUtils.isEmpty(LoginActivity.this.userName)) {
Toast.makeText(loginActivity, "请输入用户名", Toast.LENGTH_SHORT).show();
} else if (TextUtils.isEmpty(LoginActivity.this.passWord)) {
Toast.makeText(loginActivity, "请输入密码", Toast.LENGTH_SHORT).show();
} else if (md5.equals(LoginActivity.this.spPsw)) {
// 登录成功
Toast.makeText(loginActivity, "welcome!" + LoginActivity.this.userName, Toast.LENGTH_SHORT).show();
loginActivity.saveLoginInfo(loginActivity.userName, LoginActivity.this.passWord); // 保存登录信息
loginActivity.saveLoginStatus(true, loginActivity.userName); // 更新登录状态
Intent intent = new Intent();
intent.putExtra("isLogin", true); // 设置返回值
LoginActivity.this.setResult(-1, intent);
LoginActivity.this.finish(); // 结束当前活动
LoginActivity.this.startActivity(new Intent(LoginActivity.this, MainActivity.class)); // 跳转到主界面
} else if (LoginActivity.this.spPsw == null || TextUtils.isEmpty(LoginActivity.this.spPsw) || md5.equals(LoginActivity.this.spPsw)) {
// 用户名不存在
Toast.makeText(loginActivity, "此用户名不存在", Toast.LENGTH_SHORT).show();
} else {
// 密码错误
Toast.makeText(loginActivity, "密码错误", Toast.LENGTH_SHORT).show();
}
});
// 设置注册文本的点击事件
this.tv_register.setOnClickListener(v -> {
LoginActivity.this.startActivity(new Intent(LoginActivity.this, RegisterActivity.class)); // 跳转到注册界面
});
}
这是 `RegisterActivity` 的 `init()` 方法代码段,主要用于初始化注册界面的组件并处理用户注册逻辑。以下是功能总结:
### 功能总结
1. **界面组件初始化**:
- 绑定用户名输入框、密码输入框、确认密码输入框及返回按钮。
2. **返回操作**:
- 点击返回按钮时,结束当前活动。
3. **注册按钮点击事件**:
- 获取输入的用户名和密码。
- 验证输入:
- 检查用户名、密码和确认密码是否为空。
- 检查两次输入的密码是否一致。
- 如果用户名已存在,显示提示信息。
- 注册成功后,保存用户信息,并设置结果返回给上一个活动。
### 总结
此方法负责初始化注册界面的组件,验证用户输入,并实现注册逻辑。通过友好的提示提高用户体验。
public void init() {
this.et_username = (EditText) findViewById(R.id.username);
this.et_pwd = (EditText) findViewById(R.id.pwd);
this.et_pwd_sure = (EditText) findViewById(R.id.pwd2);
findViewById(R.id.iv_back).setOnClickListener(v -> {
RegisterActivity.this.finish();
});
Button button = (Button) findViewById(R.id.registerBtn);
this.register = button;
button.setOnClickListener(v -> {
RegisterActivity.this.getEditString();
if (TextUtils.isEmpty(RegisterActivity.this.userName)) {
Toast.makeText(RegisterActivity.this, "请输入用户名", Toast.LENGTH_SHORT).show();
} else if (TextUtils.isEmpty(RegisterActivity.this.passWord)) {
Toast.makeText(RegisterActivity.this, "请输入密码", Toast.LENGTH_SHORT).show();
} else if (TextUtils.isEmpty(RegisterActivity.this.passWord_sure)) {
Toast.makeText(RegisterActivity.this, "请再次输入密码", Toast.LENGTH_SHORT).show();
} else if (!RegisterActivity.this.passWord.equals(RegisterActivity.this.passWord_sure)) {
Toast.makeText(RegisterActivity.this, "输入两次的密码不一样", Toast.LENGTH_SHORT).show();
} else {
RegisterActivity registerActivity = RegisterActivity.this;
if (registerActivity.isExistUserName(registerActivity.userName)) {
Toast.makeText(RegisterActivity.this, "此账户名已经存在", Toast.LENGTH_SHORT).show();
return;
}
Toast.makeText(RegisterActivity.this, "注册成功", Toast.LENGTH_SHORT).show();
RegisterActivity registerActivity2 = RegisterActivity.this;
registerActivity2.saveRegisterInfo(registerActivity2.userName, RegisterActivity.this.passWord);
Intent intent = new Intent();
intent.putExtra("userName", RegisterActivity.this.userName);
RegisterActivity.this.setResult(-1, intent);
RegisterActivity.this.finish();
}
});
}
首页
功能总结
-
界面组件初始化:
- 创建并绑定多个按钮,用于不同的宿舍管理操作(添加、删除、修改、查询、搜索)。
-
按钮点击事件:
- 每个按钮绑定相应的点击事件,点击后启动不同的活动(例如
AddDormitoryActivity
、DeleteDormitoryActivity
等)。
- 每个按钮绑定相应的点击事件,点击后启动不同的活动(例如
-
退出提示对话框:
- 点击“返回”按钮时,弹出确认对话框,询问用户是否退出。
- 用户可以选择“否”继续留在主界面或选择“是”退出并返回登录界面。
-
清理用户数据:
- 退出时清除用户的共享偏好设置,确保用户状态重置。
public void onClick(View view) {
switch (view.getId()) {
case R.id.add_dormitory:
startActivity(new Intent(this, AddDormitoryActivity.class));
return;
case R.id.btn_back:
DigLogShow();
return;
case R.id.delete_dormitory:
startActivity(new Intent(this, DeleteDormitoryActivity.class));
return;
case R.id.mod_dormitory:
startActivity(new Intent(this, ModDormitoryActivity.class));
return;
case R.id.query_dormitory:
startActivity(new Intent(this, QueryDormitoryActivity.class));
return;
case R.id.search_dormitory:
startActivity(new Intent(this, SearchDormitoryActivity.class));
return;
default:
return;
}
}
信息录入页面
功能总结
-
界面组件初始化:
- 创建并绑定多个输入框(例如宿舍号、入住人、人数、类别、入住时间、楼层、备注)及按钮(保存、返回)。
-
初始化数据:
- 如果活动是用来修改宿舍信息,从意图中获取现有宿舍数据并填充到输入框。
-
保存按钮点击事件:
- 验证输入框是否为空,确保用户输入完整的信息。
- 如果输入有效:
- 检查宿舍号是否已存在,若不存在则插入新记录;若存在则更新记录。
- 成功后显示确认对话框。
-
对话框:
- 使用对话框提示用户操作成功与否,并提供继续或退出的选项。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="54.0dip"
android:layout_alignParentTop="true"
android:background="@color/main">
<ImageView
android:id="@id/iv_back"
android:layout_width="54.0dip"
android:layout_height="54.0dip"
android:padding="8.0dip"
android:src="@drawable/ic_back"
app:tint="@color/white" />
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="宿舍信息录入"
android:textColor="@color/white"
android:textSize="18.0sp"
android:textStyle="bold" />
</FrameLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="30.0dip"
android:orientation="vertical">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/add_tv_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10.0dip"
android:text="宿舍号"
android:textColor="#ff000000"
android:textSize="25.0sp" />
<EditText
android:id="@+id/add_et_number"
android:layout_width="200.0dip"
android:layout_height="wrap_content"
android:layout_marginLeft="20.0dip"
android:layout_toRightOf="@id/add_tv_number"
android:hint="请输入宿舍号"
android:textSize="24.0sp" />
</RelativeLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/add_tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10.0dip"
android:text="入住人"
android:textColor="#ff000000"
android:textSize="25.0sp" />
<EditText
android:id="@+id/add_et_name"
android:layout_width="200.0dip"
android:layout_height="wrap_content"
android:layout_marginLeft="20.0dip"
android:layout_toRightOf="@id/add_tv_name"
android:hint="请输入姓名"
android:textSize="24.0sp" />
</RelativeLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/add_tv_much"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10.0dip"
android:text="人数"
android:textColor="#ff000000"
android:textSize="25.0sp" />
<EditText
android:id="@+id/add_et_much"
android:layout_width="200.0dip"
android:layout_height="wrap_content"
android:layout_marginLeft="20.0dip"
android:layout_toRightOf="@id/add_tv_much"
android:hint="请输入人数"
android:textSize="24.0sp" />
</RelativeLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/add_tv_sex"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10.0dip"
android:text="类别"
android:textColor="#ff000000"
android:textSize="25.0sp" />
<EditText
android:id="@+id/add_et_sex"
android:layout_width="200.0dip"
android:layout_height="wrap_content"
android:layout_marginLeft="20.0dip"
android:layout_toRightOf="@id/add_tv_sex"
android:hint="请输入类别"
android:textSize="24.0sp" />
</RelativeLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/add_tv_birthday"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10.0dip"
android:text="入住时间"
android:textColor="#ff000000"
android:textSize="25.0sp" />
<EditText
android:id="@+id/add_et_birthday"
android:layout_width="150.0dip"
android:layout_height="wrap_content"
android:layout_marginLeft="20.0dip"
android:layout_toRightOf="@id/add_tv_birthday"
android:hint="例2023-10"
android:textSize="24.0sp" />
</RelativeLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/add_tv_address"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10.0dip"
android:text="楼层"
android:textColor="#ff000000"
android:textSize="25.0sp" />
<EditText
android:id="@+id/add_et_address"
android:layout_width="200.0dip"
android:layout_height="wrap_content"
android:layout_marginLeft="20.0dip"
android:layout_toRightOf="@id/add_tv_address"
android:hint="请输入几楼"
android:textSize="15.0sp" />
</RelativeLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/add_tv_des"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10.0dip"
android:text="备注"
android:textColor="#ff000000"
android:textSize="25.0sp" />
<EditText
android:id="@+id/add_et_des"
android:layout_width="200.0dip"
android:layout_height="wrap_content"
android:layout_marginLeft="20.0dip"
android:layout_toRightOf="@id/add_tv_des"
android:hint="请输入备注"
android:textSize="24.0sp" />
</RelativeLayout>
</LinearLayout>
<Button
android:id="@+id/btn_save"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="40.0dip"
android:layout_marginTop="30.0dip"
android:layout_marginRight="40.0dip"
android:background="@drawable/btn_common"
android:text="录入"
android:textColor="#ffffffff"
android:textSize="18.0sp" />
</LinearLayout>
修改信息页面
功能总结
-
设置布局:
- 调用
setContentView
来加载activity_mod_dormitory
布局。
- 调用
-
初始化组件:
- 获取并初始化列表视图 (
ListView
) 和输入框 (EditText
)。 - 创建一个数据列表 (
mData
) 用于存储宿舍信息。
- 获取并初始化列表视图 (
-
设置适配器:
- 创建自定义适配器
Adapter_update
并将其设置到ListView
。
- 创建自定义适配器
-
数据库实例化:
- 初始化
DbDormitory
对象,用于后续的数据库操作。
- 初始化
-
返回按钮监听:
- 设置返回按钮的点击监听器,当用户点击时,结束当前活动。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="54.0dip"
android:layout_alignParentTop="true"
android:background="@color/main">
<ImageView
android:id="@id/iv_back"
android:layout_width="54.0dip"
android:layout_height="54.0dip"
android:padding="8.0dip"
android:src="@drawable/ic_back"
app:tint="@color/white" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="修改信息"
android:textColor="@color/white"
android:textSize="18.0sp"
android:textStyle="bold" />
</FrameLayout>
<LinearLayout
android:id="@+id/rl2"
android:layout_width="fill_parent"
android:layout_height="50.0dip"
android:layout_marginTop="20.0dip"
android:gravity="center_vertical"
android:orientation="horizontal">
<EditText
android:id="@+id/et_update"
android:layout_width="250.0dip"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="20.0dip"
android:background="@drawable/dialog_btn_bg"
android:hint="请输入宿舍号"
android:paddingLeft="10.0dip"
android:paddingTop="10.0dip"
android:paddingBottom="10.0dip"
android:textSize="16.0sp">
<requestFocus />
</EditText>
<ImageView
android:id="@+id/update_iv"
android:layout_width="40.0dip"
android:layout_height="40.0dip"
android:layout_marginLeft="20.0dip"
android:layout_toRightOf="@id/et_update"
android:onClick="onClick"
android:src="@drawable/query" />
</LinearLayout>
<ListView
android:id="@+id/update_lv"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@id/rl2"
android:divider="#ffcdcdcd"
android:dividerHeight="6.0dip"
android:padding="10.0dip" />
</LinearLayout>
查询页面
删除页面
功能总结
-
设置布局:
- 使用
setContentView
方法加载activity_delete_dormitory
布局。
- 使用
-
初始化组件:
- 获取
ListView
和返回按钮 (ImageView
) 的引用。
- 获取
-
初始化数据库:
- 创建
DbDormitory
对象,用于后续的数据库操作。
- 创建
-
初始化数据列表:
- 创建一个空的列表
mData
,用于存储宿舍信息。
- 创建一个空的列表
-
设置适配器:
- 创建自定义适配器
Adapter_del
,并将其设置为ListView
的适配器。
- 创建自定义适配器
-
数据加载:
- 调用
loadData()
方法从数据库加载数据。
- 调用
-
设置点击监听:
- 设置返回按钮的点击事件,结束当前活动。
@Override
public void onCreate(Bundle bundle) {
// Activity 创建时初始化视图、适配器及数据
super.onCreate(bundle);
setContentView(R.layout.activity_delete_dormitory);
this.listView = (ListView) findViewById(R.id.del_lv);
ivBack = findViewById(R.id.iv_back);
this.dbDormitory = new DbDormitory(this);
this.mData = new ArrayList();
PrintStream printStream = System.out;
printStream.println("长度为:" + this.mData.size());
Adapter_del adapter_del = new Adapter_del(this, this.mData);
this.adapter = adapter_del;
this.listView.setAdapter((ListAdapter) adapter_del);
loadData(); // 加载数据
setLVClickListener(); // 设置列表项点击监听
ivBack.setOnClickListener(v -> {
finish();
});
}
四、完整的项目源码
👇👇👇👇👇快捷获取方式👇👇👇👇👇