上篇展示了APP的页面,这篇接上篇进行核心代码的展示
首先是主类:
package com.example.studyapp;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import com.example.studyapp.data.DatabaseHelper;
import com.example.studyapp.data.UserDao;
import com.example.studyapp.data.UserPreferences;
import com.example.studyapp.data.WeeklyGoalDao;
import com.example.studyapp.model.User;
import com.example.studyapp.model.WeeklyGoal;
import com.example.studyapp.util.DatabaseTask;
public class MainActivity extends AppCompatActivity {
private UserDao userDao;
private UserPreferences userPreferences;
private WeeklyGoalDao weeklyGoalDao;
private TextView welcomeText;
private Button setGoalButton;
private Button viewGoalButton;
private Button addRecordButton;
private Button viewRecordButton;
private Button logoutButton;
private Button exitButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
// 初始化
userPreferences = new UserPreferences(this);
userDao = new UserDao();
weeklyGoalDao = new WeeklyGoalDao();
// 初始化UI控件
welcomeText = findViewById(R.id.welcomeText);
setGoalButton = findViewById(R.id.setGoalButton);
viewGoalButton = findViewById(R.id.viewGoalButton);
addRecordButton = findViewById(R.id.addRecordButton);
viewRecordButton = findViewById(R.id.viewRecordButton);
logoutButton = findViewById(R.id.logoutButton);
exitButton = findViewById(R.id.exitButton);
// 初始化数据库
initDatabase();
// 设置点击事件
setGoalButton.setOnClickListener(v -> navigateToSetGoal());
viewGoalButton.setOnClickListener(v -> navigateToViewGoal());
addRecordButton.setOnClickListener(v -> navigateToAddRecord());
viewRecordButton.setOnClickListener(v -> navigateToViewRecord());
logoutButton.setOnClickListener(v -> logout());
exitButton.setOnClickListener(v -> exitToLogin());
// 如果用户已登录,显示欢迎信息
if (userPreferences.isRegistered()) {
String userName = userPreferences.getUser().getName();
welcomeText.setText("欢迎您," + userName + "!");
}
}
@Override
protected void onResume() {
super.onResume();
// 用户登录状态检查
if (userPreferences.isRegistered()) {
// 更新欢迎信息
String userName = userPreferences.getUser().getName();
welcomeText.setText("欢迎您," + userName + "!");
}
}
/**
* 初始化数据库
*/
private void initDatabase() {
DatabaseTask.executeVoidTask(() -> {
DatabaseHelper.initDatabase();
}, new DatabaseTask.DatabaseCallback<Boolean>() {
@Override
public void onComplete(Boolean result) {
// 数据库初始化成功后,检查用户是否已注册
checkUserRegistration();
}
@Override
public void onError(Exception e) {
Toast.makeText(MainActivity.this, "数据库连接失败: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
/**
* 检查用户是否已注册
*/
private void checkUserRegistration() {
if (userPreferences.isRegistered()) {
// 本地有记录,检查数据库中是否也存在
final String studentId = userPreferences.getUser().getStudentId();
DatabaseTask.executeTask(() -> userDao.userExists(studentId),
new DatabaseTask.DatabaseCallback<Boolean>() {
@Override
public void onComplete(Boolean exists) {
if (!exists) {
// 数据库中不存在此用户,跳转到注册页面
goToRegister();
}
}
@Override
public void onError(Exception e) {
// 出错时也跳转到注册页面
goToRegister();
}
});
} else {
// 本地无记录,直接跳转到注册页面
goToRegister();
}
}
/**
* 跳转到注册页面
*/
private void goToRegister() {
Intent intent = new Intent(this, RegisterActivity.class);
startActivity(intent);
finish(); // 关闭当前活动
}
/**
* 注销用户
*/
private void logout() {
// 清除本地用户数据
userPreferences.clearUser();
Toast.makeText(this, "已注销,请重新注册", Toast.LENGTH_SHORT).show();
// 跳转到注册页面
goToRegister();
}
/**
* 退出到登录页面但保留用户信息
*/
private void exitToLogin() {
Toast.makeText(this, "退出到登录页面", Toast.LENGTH_SHORT).show();
// 跳转到注册页面但不清除用户数据
Intent intent = new Intent(this, RegisterActivity.class);
startActivity(intent);
finish();
}
/**
* 导航到设置周目标页面
*/
private void navigateToSetGoal() {
Intent intent = new Intent(this, WeeklyGoalActivity.class);
startActivity(intent);
}
/**
* 导航到查看周目标页面
*/
private void navigateToViewGoal() {
Intent intent = new Intent(this, ViewWeeklyGoalActivity.class);
startActivity(intent);
}
/**
* 导航到添加编程记录页面
*/
private void navigateToAddRecord() {
Intent intent = new Intent(this, CodingRecordActivity.class);
startActivity(intent);
}
/**
* 导航到查看编程记录页面
*/
private void navigateToViewRecord() {
Intent intent = new Intent(this, ViewCodingRecordActivity.class);
startActivity(intent);
}
}
然后是注册类:
点击查看代码
```plaintext
package com.example.studyapp;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.example.studyapp.data.UserDao;
import com.example.studyapp.data.UserPreferences;
import com.example.studyapp.model.User;
import com.example.studyapp.util.DatabaseTask;
import com.google.android.material.textfield.TextInputEditText;
import com.google.android.material.textfield.TextInputLayout;
/**
* 用户注册界面
*/
public class RegisterActivity extends AppCompatActivity {
private TextInputEditText studentIdInput;
private TextInputEditText passwordInput;
private TextInputEditText nameInput;
private TextInputEditText phoneInput;
private TextInputEditText classNameInput;
private TextInputLayout classNameLayout;
private RadioGroup roleRadioGroup;
private RadioButton studentRadioButton;
private RadioButton teacherRadioButton;
private LinearLayout roleLayout;
private LinearLayout buttonAreaLayout;
private LinearLayout formAreaLayout;
private Button loginButton;
private Button showRegisterButton;
private Button registerButton;
private Button backButton;
private UserPreferences userPreferences;
private UserDao userDao;
private ProgressDialog progressDialog;
// 是否需要清空输入框
private boolean shouldClearInputs = false;
// 当前模式(登录/注册)
private boolean isLoginMode = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
// 检查是否需要清空输入框(从退出按钮进入)
if (getIntent() != null) {
shouldClearInputs = getIntent().getBooleanExtra("CLEAR_INPUTS", false);
}
// 初始化UI组件
buttonAreaLayout = findViewById(R.id.buttonAreaLayout);
formAreaLayout = findViewById(R.id.formAreaLayout);
loginButton = findViewById(R.id.loginButton);
showRegisterButton = findViewById(R.id.showRegisterButton);
backButton = findViewById(R.id.backButton);
registerButton = findViewById(R.id.registerButton);
studentIdInput = findViewById(R.id.studentIdInput);
passwordInput = findViewById(R.id.passwordInput);
nameInput = findViewById(R.id.nameInput);
phoneInput = findViewById(R.id.phoneInput);
classNameInput = findViewById(R.id.classNameInput);
classNameLayout = (TextInputLayout) classNameInput.getParent().getParent();
roleRadioGroup = findViewById(R.id.roleRadioGroup);
studentRadioButton = findViewById(R.id.studentRadioButton);
teacherRadioButton = findViewById(R.id.teacherRadioButton);
roleLayout = findViewById(R.id.roleLayout);
// 初始化用户数据访问
userPreferences = new UserPreferences(this);
userDao = new UserDao();
// 确保数据库表结构正确
userDao.ensureTableExists();
// 初始化进度对话框
progressDialog = new ProgressDialog(this);
progressDialog.setTitle("请稍候");
progressDialog.setMessage("正在处理...");
progressDialog.setCancelable(false);
// 设置按钮点击事件
loginButton.setOnClickListener(v -> showLoginForm());
showRegisterButton.setOnClickListener(v -> showRegisterForm());
backButton.setOnClickListener(v -> showButtonArea());
registerButton.setOnClickListener(v -> validateAndRegister());
// 设置角色切换监听器
roleRadioGroup.setOnCheckedChangeListener((group, checkedId) -> {
if (checkedId == R.id.teacherRadioButton) {
// 教师角色,隐藏班级
classNameLayout.setVisibility(View.GONE);
} else {
// 学生角色,显示班级
classNameLayout.setVisibility(View.VISIBLE);
}
});
// 默认显示按钮区域
showButtonArea();
// 如果从退出按钮进入,则清空输入框
if (shouldClearInputs) {
clearAllInputs();
}
}
/**
* 显示按钮区域(登录/注册选择)
*/
private void showButtonArea() {
buttonAreaLayout.setVisibility(View.VISIBLE);
formAreaLayout.setVisibility(View.GONE);
}
/**
* 显示登录表单
*/
private void showLoginForm() {
buttonAreaLayout.setVisibility(View.GONE);
formAreaLayout.setVisibility(View.VISIBLE);
// 设置为登录模式
isLoginMode = true;
registerButton.setText("登录");
// 隐藏不需要的字段
nameInput.setVisibility(View.GONE);
phoneInput.setVisibility(View.GONE);
classNameLayout.setVisibility(View.GONE);
roleLayout.setVisibility(View.GONE);
// 清空输入框
clearAllInputs();
// 重置错误提示
studentIdInput.setError(null);
passwordInput.setError(null);
}
/**
* 显示注册表单
*/
private void showRegisterForm() {
buttonAreaLayout.setVisibility(View.GONE);
formAreaLayout.setVisibility(View.VISIBLE);
// 设置为注册模式
isLoginMode = false;
registerButton.setText("注册");
// 显示所有字段
nameInput.setVisibility(View.VISIBLE);
phoneInput.setVisibility(View.VISIBLE);
roleLayout.setVisibility(View.VISIBLE);
// 根据当前选中的角色决定是否显示班级
if (teacherRadioButton.isChecked()) {
classNameLayout.setVisibility(View.GONE);
} else {
classNameLayout.setVisibility(View.VISIBLE);
}
// 清空输入框
clearAllInputs();
// 重置错误提示
studentIdInput.setError(null);
passwordInput.setError(null);
nameInput.setError(null);
phoneInput.setError(null);
classNameInput.setError(null);
}
/**
* 清空所有输入框
*/
private void clearAllInputs() {
studentIdInput.setText("");
passwordInput.setText("");
nameInput.setText("");
phoneInput.setText("");
classNameInput.setText("");
studentRadioButton.setChecked(true);
// 确保姓名输入框可编辑
nameInput.setEnabled(true);
}
/**
* 填充用户信息到界面
*/
private void fillUserInfo(User user) {
studentIdInput.setText(user.getStudentId());
nameInput.setText(user.getName());
phoneInput.setText(user.getPhoneNumber());
classNameInput.setText(user.getClassName());
// 设置角色
if (user.isTeacher()) {
teacherRadioButton.setChecked(true);
// 如果是教师,隐藏班级
classNameLayout.setVisibility(View.GONE);
} else {
studentRadioButton.setChecked(true);
// 如果是学生,显示班级
classNameLayout.setVisibility(View.VISIBLE);
}
// 由于用户姓名不用每次都输入,可以禁用姓名输入框
nameInput.setEnabled(false);
}
/**
* 验证输入并注册或登录用户
*/
private void validateAndRegister() {
final String studentId = studentIdInput.getText().toString().trim();
final String password = passwordInput.getText().toString().trim();
// 验证工号/学号输入
if (TextUtils.isEmpty(studentId)) {
studentIdInput.setError("请输入工号/学号");
return;
}
// 验证密码输入
if (TextUtils.isEmpty(password)) {
passwordInput.setError("请输入密码");
return;
}
// 判断是登录还是注册模式
if (isLoginMode) {
// 登录模式,直接查询用户
loginUser(studentId, password);
} else {
// 注册模式,需要完整验证
registerUser(studentId, password);
}
}
/**
* 登录用户
*/
private void loginUser(String studentId, String password) {
// 显示进度对话框
progressDialog.show();
// 查询数据库中是否存在该用户
DatabaseTask.executeTask(() -> userDao.findUserByStudentId(studentId),
new DatabaseTask.DatabaseCallback<User>() {
@Override
public void onComplete(User user) {
progressDialog.dismiss();
if (user != null) {
// 用户存在,验证密码
if (password.equals(user.getPassword())) {
// 密码正确,保存到本地并登录
userPreferences.saveUser(user);
Toast.makeText(RegisterActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
// 根据角色跳转到不同的页面
Intent intent;
if (user.isTeacher()) {
intent = new Intent(RegisterActivity.this, TeacherDashboardActivity.class);
} else {
intent = new Intent(RegisterActivity.this, MainActivity.class);
}
startActivity(intent);
finish();
} else {
// 密码错误
Toast.makeText(RegisterActivity.this, "密码错误", Toast.LENGTH_SHORT).show();
passwordInput.setError("密码错误");
passwordInput.requestFocus();
}
} else {
// 用户不存在
Toast.makeText(RegisterActivity.this, "该工号/学号未注册,请先注册", Toast.LENGTH_SHORT).show();
// 提示注册
showRegisterForm();
studentIdInput.setText(studentId);
passwordInput.setText(password);
}
}
@Override
public void onError(Exception e) {
progressDialog.dismiss();
Toast.makeText(RegisterActivity.this,
"登录失败: " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
/**
* 注册新用户
*/
private void registerUser(String studentId, String password) {
String name = nameInput.getText().toString().trim();
String phone = phoneInput.getText().toString().trim();
String className = classNameInput.getText().toString().trim();
String role = teacherRadioButton.isChecked() ? "teacher" : "student";
// 验证其他输入
if (TextUtils.isEmpty(name)) {
nameInput.setError("请输入姓名");
return;
}
if (TextUtils.isEmpty(phone)) {
phoneInput.setError("请输入手机号码");
return;
}
// 只有学生角色才需要验证班级
if (role.equals("student") && TextUtils.isEmpty(className)) {
classNameInput.setError("请输入班级");
return;
}
// 为教师设置默认班级值,表示可以查看所有班级
if (role.equals("teacher")) {
className = "ALL";
}
// 显示进度对话框
progressDialog.show();
// 先检查工号/学号是否已被注册
final String finalName = name;
final String finalClassName = className;
DatabaseTask.executeTask(() -> userDao.userExists(studentId),
new DatabaseTask.DatabaseCallback<Boolean>() {
@Override
public void onComplete(Boolean exists) {
if (exists) {
// 该工号/学号已注册
progressDialog.dismiss();
Toast.makeText(RegisterActivity.this,
"该工号/学号已被注册,请直接登录或使用其他工号/学号", Toast.LENGTH_SHORT).show();
// 切换到登录模式
showLoginForm();
studentIdInput.setText(studentId);
passwordInput.setText(password);
} else {
// 工号/学号未注册,可以继续
continueRegister(studentId, finalName, phone, finalClassName, role, password);
}
}
@Override
public void onError(Exception e) {
progressDialog.dismiss();
Toast.makeText(RegisterActivity.this,
"检查工号/学号失败: " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
/**
* 继续注册流程
*/
private void continueRegister(String studentId, String name, String phone, String className, String role, String password) {
// 创建用户对象
final User user = new User(studentId, name, phone, className, role, password);
// 异步保存到数据库
DatabaseTask.executeTask(() -> userDao.saveUser(user), new DatabaseTask.DatabaseCallback<Boolean>() {
@Override
public void onComplete(Boolean result) {
progressDialog.dismiss();
if (result) {
// 数据库保存成功后,也保存到本地
userPreferences.saveUser(user);
Toast.makeText(RegisterActivity.this, "注册成功", Toast.LENGTH_SHORT).show();
// 根据角色跳转到不同的页面
Intent intent;
if (user.isTeacher()) {
intent = new Intent(RegisterActivity.this, TeacherDashboardActivity.class);
} else {
intent = new Intent(RegisterActivity.this, MainActivity.class);
}
startActivity(intent);
finish();
} else {
Toast.makeText(RegisterActivity.this, "注册失败,请重试", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onError(Exception e) {
progressDialog.dismiss();
Toast.makeText(RegisterActivity.this, "注册失败: " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
}
</details>
学生类:
`package com.example.studyapp;
import android.os.Bundle;
import android.os.Environment;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.example.studyapp.data.TeacherDao;
import com.example.studyapp.data.UserPreferences;
import com.example.studyapp.model.User;
import com.example.studyapp.util.DatabaseTask;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Map;
/**
* 学生统计报表活动
*/
public class StudentSummaryActivity extends AppCompatActivity {
private UserPreferences userPreferences;
private User currentUser;
private TeacherDao teacherDao;
private TextView summaryTitleText;
private TextView summaryInfoText;
private TableLayout summaryTableLayout;
private Button exportButton;
private List<Map<String, Object>> summaryList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_student_summary);
// 启用返回按钮
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setTitle("学生统计报表");
}
// 初始化用户信息
userPreferences = new UserPreferences(this);
currentUser = userPreferences.getUser();
// 检查是否是教师用户
if (!currentUser.isTeacher()) {
Toast.makeText(this, "您不是教师,无法访问此功能", Toast.LENGTH_SHORT).show();
finish();
return;
}
// 初始化DAO
teacherDao = new TeacherDao();
// 初始化UI组件
summaryTitleText = findViewById(R.id.summaryTitleText);
summaryInfoText = findViewById(R.id.summaryInfoText);
summaryTableLayout = findViewById(R.id.summaryTableLayout);
exportButton = findViewById(R.id.exportButton);
// 设置导出按钮点击事件
exportButton.setOnClickListener(v -> exportSummary());
// 生成报表
generateSummary();
}
/**
* 生成统计报表
*/
private void generateSummary() {
summaryInfoText.setText("正在生成报表...");
DatabaseTask.executeTask(() -> teacherDao.generateStudentRecordSummary(),
new DatabaseTask.DatabaseCallback<List<Map<String, Object>>>() {
@Override
public void onComplete(List<Map<String, Object>> result) {
summaryList.clear();
summaryList.addAll(result);
displaySummary();
}
@Override
public void onError(Exception e) {
Toast.makeText(StudentSummaryActivity.this,
"生成报表失败: " + e.getMessage(), Toast.LENGTH_SHORT).show();
summaryInfoText.setText("生成报表失败,请重试");
}
});
}
/**
* 显示统计报表
*/
private void displaySummary() {
// 清除之前的数据行
int headerRowCount = 1; // 表头行数
if (summaryTableLayout.getChildCount() > headerRowCount) {
summaryTableLayout.removeViews(headerRowCount, summaryTableLayout.getChildCount() - headerRowCount);
}
// 更新统计信息
summaryInfoText.setText("共统计 " + summaryList.size() + " 名学生");
// 添加数据行
for (Map<String, Object> summary : summaryList) {
TableRow row = new TableRow(this);
row.setPadding(8, 8, 8, 8);
// 序号
addTextViewToRow(row, String.valueOf(summary.get("serialNumber")));
// 班级
addTextViewToRow(row, String.valueOf(summary.get("className")));
// 学号
addTextViewToRow(row, String.valueOf(summary.get("studentId")));
// 姓名
addTextViewToRow(row, String.valueOf(summary.get("name")));
// 记录次数
addTextViewToRow(row, String.valueOf(summary.get("recordCount")));
// 最近记录内容
String content = String.valueOf(summary.get("recentContent"));
// 内容过长时截取
if (content.length() > 20) {
content = content.substring(0, 20) + "...";
}
addTextViewToRow(row, content);
// 设置交替行颜色
if (((int)summary.get("serialNumber")) % 2 == 0) {
row.setBackgroundColor(0xFFF5F5F5);
}
summaryTableLayout.addView(row);
}
}
/**
* 向表格行中添加文本单元格
*/
private void addTextViewToRow(TableRow row, String text) {
TextView textView = new TextView(this);
textView.setText(text);
textView.setPadding(4, 4, 4, 4);
row.addView(textView);
}
/**
* 导出报表到CSV文件
*/
private void exportSummary() {
if (summaryList.isEmpty()) {
Toast.makeText(this, "没有数据可导出", Toast.LENGTH_SHORT).show();
return;
}
try {
File dir = getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS);
if (!dir.exists()) {
dir.mkdirs();
}
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault());
String fileName = "学生编程记录统计_" + dateFormat.format(new Date()) + ".csv";
File file = new File(dir, fileName);
FileWriter writer = new FileWriter(file);
// 写入UTF-8 BOM,确保Excel可以正确显示中文
writer.write('\ufeff');
// 写入表头
writer.write("序号,班级,学号,姓名,记录次数,最近记录内容\n");
// 写入数据
for (Map<String, Object> summary : summaryList) {
writer.write(summary.get("serialNumber") + ",");
writer.write("\"" + summary.get("className") + "\",");
writer.write("\"" + summary.get("studentId") + "\",");
writer.write("\"" + summary.get("name") + "\",");
writer.write(summary.get("recordCount") + ",");
writer.write("\"" + summary.get("recentContent") + "\"\n");
}
writer.close();
Toast.makeText(this, "报表已导出到:" + file.getAbsolutePath(), Toast.LENGTH_LONG).show();
} catch (IOException e) {
Toast.makeText(this, "导出失败: " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
} `
教师类:
<details>
<summary>点击查看代码</summary>
package com.example.studyapp;
import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.example.studyapp.data.DatabaseHelper;
import com.example.studyapp.data.UserPreferences;
import com.example.studyapp.model.User;
/**
-
教师主界面活动
*/
public class TeacherDashboardActivity extends AppCompatActivity {private UserPreferences userPreferences;
private User currentUser;private TextView welcomeTeacherText;
private Button viewAllRecordsButton;
private Button searchByKeywordButton;
private Button generateReportButton;
private Button logoutButton;
private Button exitButton;@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_teacher_dashboard);// 启用返回按钮 if (getSupportActionBar() != null) { getSupportActionBar().setTitle("教师管理平台"); } // 初始化用户信息 userPreferences = new UserPreferences(this); currentUser = userPreferences.getUser(); // 检查是否是教师用户 if (!currentUser.isTeacher()) { Toast.makeText(this, "您不是教师,无法访问此功能", Toast.LENGTH_SHORT).show(); finish(); return; } // 初始化UI组件 welcomeTeacherText = findViewById(R.id.welcomeTeacherText); viewAllRecordsButton = findViewById(R.id.viewAllRecordsButton); searchByKeywordButton = findViewById(R.id.searchByKeywordButton); generateReportButton = findViewById(R.id.generateReportButton); logoutButton = findViewById(R.id.logoutButton); exitButton = findViewById(R.id.exitButton); // 设置欢迎文本 welcomeTeacherText.setText("欢迎您," + currentUser.getName() + " 老师"); // 设置按钮点击事件 viewAllRecordsButton.setOnClickListener(v -> navigateToViewAllRecords()); searchByKeywordButton.setOnClickListener(v -> navigateToKeywordSearch()); generateReportButton.setOnClickListener(v -> navigateToStudentSummary()); logoutButton.setOnClickListener(v -> logout()); exitButton.setOnClickListener(v -> exitToLogin()); // 初始化数据库 initDatabase();
}
/**
- 初始化数据库
*/
private void initDatabase() {
// 异步初始化数据库
new Thread(() -> {
try {
DatabaseHelper.initDatabase();
} catch (Exception e) {
runOnUiThread(() -> {
Toast.makeText(TeacherDashboardActivity.this,
"数据库初始化失败: " + e.getMessage(), Toast.LENGTH_SHORT).show();
});
}
}).start();
}
/**
- 跳转到查看所有记录页面
*/
private void navigateToViewAllRecords() {
Intent intent = new Intent(this, ViewAllRecordsActivity.class);
startActivity(intent);
}
/**
- 跳转到关键词搜索页面
*/
private void navigateToKeywordSearch() {
Intent intent = new Intent(this, KeywordSearchActivity.class);
startActivity(intent);
}
/**
- 跳转到学生统计报表页面
*/
private void navigateToStudentSummary() {
Intent intent = new Intent(this, StudentSummaryActivity.class);
startActivity(intent);
}
/**
-
注销登录
*/
private void logout() {
userPreferences.clearUser();
Toast.makeText(this, "已注销,请重新登录", Toast.LENGTH_SHORT).show();// 跳转到注册页面
Intent intent = new Intent(this, RegisterActivity.class);
startActivity(intent);
finish(); // 关闭当前活动
}
/**
-
退出到登录页面但保留用户信息
*/
private void exitToLogin() {
Toast.makeText(this, "退出到登录页面", Toast.LENGTH_SHORT).show();// 跳转到注册页面但不清除用户数据
Intent intent = new Intent(this, RegisterActivity.class);
// 添加标志位表示是从退出按钮进入,需要清空输入框
intent.putExtra("CLEAR_INPUTS", true);
startActivity(intent);
finish();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
} - 初始化数据库
</details>
其他的具体功能类就不在此展示了,已经提交至gitee码云仓库查看。