(基于安卓app开发毕业设计)上课考勤管理(附源码+论文)

大家好!我是岛上程序猿,感谢您阅读本文,欢迎一键三连哦。

💞当前专栏:安卓app毕业设计

精彩专栏推荐👇🏻👇🏻👇🏻

🎀Java毕业设计
🌎微信小程序毕业设计

一、项目简介

本论文首先对基于Android的课堂考勤系统进行了需求分析,从系统开发环境、系统目标、设计流程、功能设计等几个方面进行系统的总体设计,使用Java语言设计了基于Android的课堂考勤系统软件,主要完成了注册登陆、签到码发布、扫码签到、信息修改等各项功能的设计,实现对课堂考勤系统展示。通过对系统的功能进行测试,测试结果证明该系统界面友好、功能完善,有着较高的使用价值,具有庞大的潜在用户群体和较广阔的应用前景。

二、系统功能结构图

从开始整个课堂考勤系统软件客户端,根据目标系统成一系列子系统,每个这两个子系统相互的,并且每个具有一个独立的功能,该系统的目标的。然后根据关系和函数中的每个子系统,再检测最小挂上分解子系统。在功能上更普遍的子系统,更抽象,更基本的子系统的工作更轻松,更卓越,更具体。对于每一个子系统或模块的系统,你应该尽量做到独立,以减少各子系统之间的关系。本基于Android的课堂考勤系统软件客户端程序主要包括手机端和PC端两部分,手机端主要实现了注册登陆、签到码发布、扫码签到、信息修改等功能模块。系统模块图如图4-3所示。在这里插入图片描述

三、系统核心功能模块部分截图

2.1教师主页界面

用户想要使用本课堂考勤系统展示客户端,首先需要打开软件,可以选择是教师登录还是学生登录,教师登录展示效果图如图5-1所示。
在这里插入图片描述

2.2二维码生成模块界面

二维码生成模块界面主要实现了教师用户生成用于签到二维码的功能。二维码生成界面效果图如图5-2所示。
在这里插入图片描述

2.3课程列表模块界面

在课程列表界面中,教师用户可以自己查询已经发布的签到二维码。模块界面效果图如图5-3所示。在这里插入图片描述

2.4 签到信息查看模块界面

签到信息查看模块主要实现了教师用户对学生签到信息的查看,可以看到具体的学生信息。界面效果图如图5-4所示。

在这里插入图片描述

三、部分核心代码

4.1 登录部分

package com.work.app.activitys;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.work.app.R;
import com.work.app.base.BaseActivity;
import com.work.app.bean.Student;
import com.work.app.bean.Teacher;
import com.work.app.dialog.LoadingAlertDialog;

import org.apache.commons.lang3.StringUtils;

import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import cn.bmob.v3.BmobQuery;
import cn.bmob.v3.listener.FindListener;
import cn.bmob.v3.listener.SaveListener;

public class LoginActivity extends BaseActivity {

    @BindView(R.id.common_iv_left)
    ImageView commonIvLeft;
    @BindView(R.id.common_ll_left)
    LinearLayout commonLlLeft;
    @BindView(R.id.common_tv_title)
    TextView commonTvTitle;
    @BindView(R.id.et_t_code)
    EditText etTCode;
    @BindView(R.id.ll_t_code)
    LinearLayout llTCode;
    @BindView(R.id.et_s_code)
    EditText etSCode;
    @BindView(R.id.ll_s_code)
    LinearLayout llSCode;
    @BindView(R.id.et_name)
    EditText etName;
    @BindView(R.id.ll_name)
    LinearLayout llName;
    @BindView(R.id.et_grade)
    EditText etGrade;
    @BindView(R.id.ll_grade)
    LinearLayout llGrade;
    @BindView(R.id.et_tec)
    EditText etTec;
    @BindView(R.id.ll_tec)
    LinearLayout llTec;
    @BindView(R.id.et_pwd)
    EditText etPwd;
    @BindView(R.id.ll_pwd)
    LinearLayout llPwd;
    @BindView(R.id.et_pwd_1)
    EditText etPwd1;
    @BindView(R.id.ll_pwd_1)
    LinearLayout llPwd1;
    @BindView(R.id.tv_sure)
    TextView tvSure;

    private String userType = "", loginType = "";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login2);
        ButterKnife.bind(this);

        userType = getIntent().getStringExtra("user_type");
        loginType = getIntent().getStringExtra("login_type");

        //控制页面显示和隐藏
        if ("teacher".equals(userType)) {
            //教师
            if ("login".equals(loginType)) {
                //登录
                llTCode.setVisibility(View.VISIBLE);
                llPwd.setVisibility(View.VISIBLE);
            } else {
                //注册
                llTCode.setVisibility(View.VISIBLE);
                llName.setVisibility(View.VISIBLE);
                llPwd.setVisibility(View.VISIBLE);
                llPwd1.setVisibility(View.VISIBLE);
            }
        } else {
            //学生
            if ("login".equals(loginType)) {
                //登录
                llSCode.setVisibility(View.VISIBLE);
                llPwd.setVisibility(View.VISIBLE);
            } else {
                //注册
                llSCode.setVisibility(View.VISIBLE);
                llName.setVisibility(View.VISIBLE);
                llGrade.setVisibility(View.VISIBLE);
                llTec.setVisibility(View.VISIBLE);
                llPwd.setVisibility(View.VISIBLE);
                llPwd1.setVisibility(View.VISIBLE);
            }
        }


    }

    @OnClick({R.id.common_ll_left, R.id.tv_sure})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.common_ll_left:
                finish();
                break;
            case R.id.tv_sure:
                toSubmit();
                break;
        }
    }

    /**
     * 提交登录和注册
     */
    private void toSubmit() {
        String tCode = etTCode.getText() + "";
        String name = etName.getText() + "";
        String sCode = etSCode.getText() + "";
        String grade = etGrade.getText() + "";
        String tec = etTec.getText() + "";
        String pwd = etPwd.getText() + "";
        String pwd1 = etPwd1.getText() + "";

        if ("teacher".equals(userType)) {
            //教师
            if ("login".equals(loginType)) {
                //登录
                if (StringUtils.isEmpty(tCode)) {
                    Toast.makeText(this, "学工号不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (StringUtils.isEmpty(pwd)) {
                    Toast.makeText(this, "密码不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }

            } else {
                //注册
                if (StringUtils.isEmpty(tCode)) {
                    Toast.makeText(this, "学工号不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (tCode.length()<11) {
                    Toast.makeText(this, "学工号为11位", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (StringUtils.isEmpty(name)) {
                    Toast.makeText(this, "姓名不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (StringUtils.isEmpty(pwd)) {
                    Toast.makeText(this, "密码不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (StringUtils.isEmpty(pwd1)) {
                    Toast.makeText(this, "密码不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (!pwd.equals(pwd1)) {
                    Toast.makeText(this, "两次输入密码不同", Toast.LENGTH_SHORT).show();
                    return;
                }
            }

            Teacher teacherBean = new Teacher();
            String id = "t_" + System.currentTimeMillis();
            teacherBean.setId(id);
            teacherBean.setT_code(tCode);
            teacherBean.setName(name);
            teacherBean.setT_pwd(pwd);
            teacher(teacherBean);
        } else {
            //学生
            if ("login".equals(loginType)) {
                //登录
                if (StringUtils.isEmpty(sCode)) {
                    Toast.makeText(this, "学号不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (StringUtils.isEmpty(pwd)) {
                    Toast.makeText(this, "密码不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
            } else {
                //注册
                if (StringUtils.isEmpty(sCode)) {
                    Toast.makeText(this, "学号不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (sCode.length()<11) {
                    Toast.makeText(this, "学号为11位", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (StringUtils.isEmpty(name)) {
                    Toast.makeText(this, "姓名不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (StringUtils.isEmpty(grade)) {
                    Toast.makeText(this, "年级不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (StringUtils.isEmpty(tec)) {
                    Toast.makeText(this, "专业不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (StringUtils.isEmpty(pwd)) {
                    Toast.makeText(this, "密码不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (StringUtils.isEmpty(pwd1)) {
                    Toast.makeText(this, "密码不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (!pwd.equals(pwd1)) {
                    Toast.makeText(this, "两次输入密码不同", Toast.LENGTH_SHORT).show();
                    return;
                }
            }

            Student studentBean = new Student();
            String id = "s_" + System.currentTimeMillis();
            studentBean.setId(id);
            studentBean.setS_code(sCode);
            studentBean.setName(name);
            studentBean.setS_grade(grade);
            studentBean.setS_tec(tec);
            studentBean.seS_pwd(pwd);
            student(studentBean);
        }


    }

    /**
     * 学生登录和注册
     *
     * @param studentBean
     */
    private void student(final Student studentBean) {
        if ("login".equals(loginType)) {
            dlg = new LoadingAlertDialog(this);
            dlg.show("正在登录");
            //登录
            BmobQuery<Student> bmobQuery = new BmobQuery<Student>();
            bmobQuery.addWhereEqualTo("s_code", studentBean.getS_code());
            bmobQuery.addWhereEqualTo("s_pwd", studentBean.getS_pwd());
            bmobQuery.findObjects(this, new FindListener<Student>() {
                @Override
                public void onSuccess(List<Student> list) {
                    if (dlg != null && dlg.isShowing()) {
                        dlg.dismiss();
                    }
                    if (list.size() <= 0) {
                        Toast.makeText(LoginActivity.this, "账号或密码错误", Toast.LENGTH_SHORT).show();
//                        finish();
                    } else {
                        Toast.makeText(LoginActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
                        Student loginStudent = list.get(0);
                        intent = new Intent(LoginActivity.this, StudentActivity.class);
                        intent.putExtra("studentBean", loginStudent);
                        startActivity(intent);
                        LoginActivity.this.finish();
                        LoginAndRegActivity.instance.finish();
                    }
                }

                @Override
                public void onError(int i, String s) {
                    if (dlg != null && dlg.isShowing()) {
                        dlg.dismiss();
                    }
                    Toast.makeText(LoginActivity.this, "登录失败,请重试", Toast.LENGTH_SHORT).show();
                }

            });
        } else {
            dlg = new LoadingAlertDialog(this);
            dlg.show("正在注册");
            //查询当前学生是否存在
            BmobQuery<Student> bmobQuery = new BmobQuery<Student>();
            bmobQuery.addWhereEqualTo("t_code", studentBean.getS_code());
            bmobQuery.findObjects(this, new FindListener<Student>() {
                @Override
                public void onSuccess(List<Student> list) {
                    if (list.size() <= 0) {
                        //没有数据,可以注册
                        studentBean.save(LoginActivity.this, new SaveListener() {
                            @Override
                            public void onSuccess() {
                                if (dlg != null && dlg.isShowing()) {
                                    dlg.dismiss();
                                }
                                Toast.makeText(LoginActivity.this, "注册成功", Toast.LENGTH_SHORT).show();
                                finish();
                            }

                            @Override
                            public void onFailure(int i, String s) {
                                if (dlg != null && dlg.isShowing()) {
                                    dlg.dismiss();
                                }
                                Toast.makeText(LoginActivity.this, "注册失败,请重试", Toast.LENGTH_SHORT).show();
                            }
                        });
                    } else {
                        if (dlg != null && dlg.isShowing()) {
                            dlg.dismiss();
                        }
                        Toast.makeText(LoginActivity.this, "用户已存在,请登录", Toast.LENGTH_SHORT).show();
                        finish();
                    }
                }

                @Override
                public void onError(int i, String s) {
                    if (dlg != null && dlg.isShowing()) {
                        dlg.dismiss();
                    }
                    Toast.makeText(LoginActivity.this, "注册失败,请重试", Toast.LENGTH_SHORT).show();
                }

            });
        }

    }

    /**
     * 教师登录和注册
     *
     * @param teacherBean
     */
    private void teacher(final Teacher teacherBean) {
        if ("login".equals(loginType)) {
            dlg = new LoadingAlertDialog(this);
            dlg.show("正在登录");
            //登录
            BmobQuery<Teacher> bmobQuery = new BmobQuery<Teacher>();
            bmobQuery.addWhereEqualTo("t_code", teacherBean.getT_code());
            bmobQuery.addWhereEqualTo("t_pwd", teacherBean.getT_pwd());
            bmobQuery.findObjects(this, new FindListener<Teacher>() {
                @Override
                public void onSuccess(List<Teacher> list) {
                    if (dlg != null && dlg.isShowing()) {
                        dlg.dismiss();
                    }
                    if (list.size() <= 0) {
                        Toast.makeText(LoginActivity.this, "账号或密码错误", Toast.LENGTH_SHORT).show();
//                        finish();
                    } else {
                        Teacher loginTeacher = list.get(0);
                        Toast.makeText(LoginActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
                        intent = new Intent(LoginActivity.this, TeacherActivity.class);
                        intent.putExtra("teacherBean", loginTeacher);
                        startActivity(intent);
                        LoginActivity.this.finish();
                        LoginAndRegActivity.instance.finish();
                    }
                }

                @Override
                public void onError(int i, String s) {
                    if (dlg != null && dlg.isShowing()) {
                        dlg.dismiss();
                    }
                    Toast.makeText(LoginActivity.this, "登录失败,请重试", Toast.LENGTH_SHORT).show();
                }

            });
        } else {
            dlg = new LoadingAlertDialog(this);
            dlg.show("正在注册");
            //查询当前教师是否存在
            BmobQuery<Teacher> bmobQuery = new BmobQuery<Teacher>();
            bmobQuery.addWhereEqualTo("t_code", teacherBean.getT_code());
            bmobQuery.findObjects(this, new FindListener<Teacher>() {
                @Override
                public void onSuccess(List<Teacher> list) {
                    if (dlg != null && dlg.isShowing()) {
                        dlg.dismiss();
                    }
                    if (list.size() <= 0) {
                        //没有数据,可以注册
                        teacherBean.save(LoginActivity.this, new SaveListener() {
                            @Override
                            public void onSuccess() {
                                Toast.makeText(LoginActivity.this, "注册成功", Toast.LENGTH_SHORT).show();
                                finish();
                            }

                            @Override
                            public void onFailure(int i, String s) {
                                Toast.makeText(LoginActivity.this, "注册失败,请重试", Toast.LENGTH_SHORT).show();
                            }
                        });
                    } else {
                        Toast.makeText(LoginActivity.this, "用户已存在,请登录", Toast.LENGTH_SHORT).show();
                        finish();
                    }
                }

                @Override
                public void onError(int i, String s) {
                    if (dlg != null && dlg.isShowing()) {
                        dlg.dismiss();
                    }
                    Toast.makeText(LoginActivity.this, "注册失败,请重试", Toast.LENGTH_SHORT).show();
                }

            });
        }
    }
}




4.2用户部分

package com.work.app.activitys;

import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.work.app.R;
import com.work.app.base.BaseActivity;
import com.work.app.bean.Student;
import com.work.app.bean.Teacher;
import com.work.app.dialog.LoadingAlertDialog;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class UserInfoActivity extends BaseActivity {

    @BindView(R.id.common_iv_left)
    ImageView commonIvLeft;
    @BindView(R.id.common_ll_left)
    LinearLayout commonLlLeft;
    @BindView(R.id.common_tv_title)
    TextView commonTvTitle;
    @BindView(R.id.tv_t_code)
    TextView tvTCode;
    @BindView(R.id.ll_t_code)
    LinearLayout llTCode;
    @BindView(R.id.tv_s_code)
    TextView tvSCode;
    @BindView(R.id.ll_s_code)
    LinearLayout llSCode;
    @BindView(R.id.tv_name)
    TextView tvName;
    @BindView(R.id.ll_name)
    LinearLayout llName;
    @BindView(R.id.tv_grade)
    TextView tvGrade;
    @BindView(R.id.ll_grade)
    LinearLayout llGrade;
    @BindView(R.id.tv_tec)
    TextView tvTec;
    @BindView(R.id.ll_tec)
    LinearLayout llTec;

    private Teacher teacherBean;
    private Student studentBean;
    private String userType="";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_info);
        ButterKnife.bind(this);
        userType = getIntent().getStringExtra("user_type");
        if("teacher".equals(userType)){
            teacherBean = (Teacher) getIntent().getSerializableExtra("teacherBean");
            llTCode.setVisibility(View.VISIBLE);
            llName.setVisibility(View.VISIBLE);

            tvTCode.setText(teacherBean.getT_code());
            tvName.setText(teacherBean.getName());
        }else{
            studentBean = (Student) getIntent().getSerializableExtra("studentBean");
            llSCode.setVisibility(View.VISIBLE);
            llName.setVisibility(View.VISIBLE);
            llGrade.setVisibility(View.VISIBLE);
            llTec.setVisibility(View.VISIBLE);

            tvSCode.setText(studentBean.getS_code());
            tvName.setText(studentBean.getName());
            tvGrade.setText(studentBean.getS_grade());
            tvTec.setText(studentBean.getS_tec());

        }
    }

    @OnClick(R.id.common_ll_left)
    public void onViewClicked() {
        finish();
    }
}



四、论文目录

摘 要 1
ABSTRACT 2
目 录 3
第1章 绪论 5
1.1 选题背景 5
1.2 课题研究现状 5
1.3 研究内容 6
1.4 主要设计思路 6
第2章 开发环境介绍 8
2.1 Android系统的架构 8
2.1.1 应用程序 8
2.1.2 应用程序框架 8
2.1.3 系统运行库 9
2.1.4 Linux内核 10
2.2 安全权限机制 10
2.3 Android平台的搭建 10
2.4 JAVA简介 13
第3章 系统分析 15
3.1 系统可行性分析 15
3.1.1 技术可行性 15
3.1.2 操作可行性 15
3.1.3 经济可行性 15
3.2 功能需求 15
3.3 开发运行环境需求 16
3.4 性能需求 17
3.5 其它需求 17
第4章 系统总体设计 18
4.1 概述 18
4.2 设计原则 18
4.3 Android应用程序结构剖析 18
4.4 系统功能结构图 24
第5章 系统的实现 26
5.1 软件界面设计 26
5.2 教师主页界面 26
5.3 二维码生成模块界面 27
5.4 课程列表模块界面 28
5.5签到信息查看模块界面 29
5.6 学生登录界面 30
第6章 系统的测试 32
6.1 测试方案设计 32
6.1.1 测试策略 32
6.1.2 测试安排 32
6.1.3 测试资源 32
6.2测试用例构建 33
6.2.1 测试用例编写约定 33
6.2.2 测试分析 33
总 结 34
参考文献 36

获取源码或论文

如需对应的源码,可以评论或者私信都可以。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值