Java实现基于Android的学生考勤管理系统APP设计

news/2024/12/22 9:46:16/

目 录
第一章 引言 1
1.1 项目背景 1
1.2 编写目的 2
第二章 软件概述 3
2.1 目标 3
2.2 功能 3
2.3 性能 3
第三章 软硬件环境和数据管理 4
3.1 硬件环境 4
3.2 软件环境 4
3.3 系统部署和运行 4
3.4 数据导入 5
第四章 软件使用说明 7
4.1 用户登录 7
4.2 管理员用户 7
4.3 教师用户 8
4.4 学生用户 11
基于的科技水平和大学生现在人手一部带摄像头的智能手机的有利现状,本文提出了一种采用Android智能手机的摄像头进行人脸识别的电子化学生考勤管理系统,采用Android智能手机人脸识别的好处是利用现有的人手一部带摄像头的智能手机的优势,免除考勤打卡机样式的系统的成本外,它还提高签到的准确率,杜绝了考勤中代人签到的行为,由于是手机考勤,学生课堂考勤的信息会直接传输到该学生考勤系统的服务端,如此一来方便了学生和教师查看过往考勤记录以及便于将该考勤记录直接导入到教务系统等其他平台。
1.2编写目的
传统的考勤方式会存在一些代签到、漏签到的现象,电子化的考勤方式能够保证考勤的准确性,可以减少人工纸质考勤或刷卡考勤投入的人力、财力和时间,并且更加环保,督促学生自觉地出勤,本文转载自http://www.biyezuopin.vip/onews.asp?id=16762提高学生的出勤率,减轻学校和教师的负担,提高课堂效率。该系统提供三类角色的功能:学生具有签到、请假和查询考勤记录功能;老师具有准假、查询考勤记录、获得考勤记录表功能;管理员具有管理学生和教师个人信息功能。

第二章软件概述
2.1目标
1)减轻老师点名的负担;
2)杜绝学生代课行为;
3)降低考勤统计中出错率;
4)减少上课点名所浪费的时间。
2.2功能
该系统主要有三类角色用户:管理员用户、教师用户和学生用户。
1)管理员用户具有管理教师用户和学生用户信息的功能;
2)教师用户具有点名功能、批准假条功能、修改学生出勤记录功能和获取考勤记录统计表的功能;
3)学生用户具有签到功能、请假功能和查看考勤记录功能。

package com.example.attendancesystem_client_android;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;import com.alibaba.fastjson.JSONObject;
import com.example.attendancesystem_client_android.manager.ManagerMain;
import com.example.attendancesystem_client_android.student.StudentMain;
import com.example.attendancesystem_client_android.teacher.TeacherCourse;
import com.example.attendancesystem_client_android.teacher.TeacherMain;import java.util.HashMap;
import java.util.Map;
import java.util.Objects;public class MainActivity extends AppCompatActivity implements View.OnClickListener {EditText et_account;EditText et_password;Button btn_login;RadioButton rb_student;RadioButton rb_teacher;RadioButton rb_manager;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Objects.requireNonNull(getSupportActionBar()).hide();setContentView(R.layout.activity_main);//startActivity(new Intent(this, TeacherCourse.class));bindView();}private void bindView(){btn_login = findViewById(R.id.btn_login);btn_login.setOnClickListener(this);et_account = findViewById(R.id.et_account);et_password = findViewById(R.id.et_password);rb_student = findViewById(R.id.rbStudent);rb_teacher = findViewById(R.id.rbTeacher);rb_manager = findViewById(R.id.rbManager);}@Overridepublic void onClick(View view) {if(view == btn_login){login();}}void login(){boolean internet = false;ConnectivityManager cm = (ConnectivityManager) getApplicationContext() .getSystemService(Context.CONNECTIVITY_SERVICE);assert cm != null;NetworkInfo activeNetwork = cm.getActiveNetworkInfo();if (activeNetwork != null) { // connected to the internetif (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {internet = true;} else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {internet = true;}}if(internet){GlobalVariable.getInstance().setAccount(String.valueOf(et_account.getText()));GlobalVariable.getInstance().setPassword(String.valueOf(et_password.getText()));GlobalVariable.getInstance().setType(getType());String account =  GlobalVariable.getInstance().getAccount();String password =  GlobalVariable.getInstance().getPassword();int type = GlobalVariable.getInstance().getType();Intent intent = new Intent("android.intent.action.MAIN");if(type == 1){intent.setClass(MainActivity.this, StudentMain.class);new Thread(new Runnable(){@Overridepublic void run() {Map<String, String> map = new HashMap<String, String>();map.put("action", "student_login");map.put("account", account);map.put("password", password);OkHttp.Response response = OkHttp.httpPostForm("http://192.168.137.1/mgr/student/", map);assert response != null;Map content = (Map) JSONObject.parse(response.content);String code = Objects.requireNonNull(content.get("ret")).toString();Log.e("MainActivity", response.content);if(code.equals("0")){map = new HashMap<String, String>();map.put("action", "student_get_self_info");map.put("student_id", account);response = OkHttp.httpPostForm("http://192.168.137.1/mgr/student/", map);assert response != null;content = (Map) JSONObject.parse(response.content);String student_name = Objects.requireNonNull(content.get("student_name")).toString();String student_class_id = Objects.requireNonNull(content.get("student_class_id")).toString();GlobalVariable.getInstance().setStudent_name(student_name);GlobalVariable.getInstance().setStudent_class_id(student_class_id);startActivity(intent);}else if(code.equals("1")){ToastChildThread.show(MainActivity.this, "账号或密码错误!", Toast.LENGTH_LONG);}else if(code.equals("2")){ToastChildThread.show(MainActivity.this, "账号不存在!", Toast.LENGTH_LONG);}}}).start();}else if(type == 2){intent.setClass(MainActivity.this, TeacherMain.class);new Thread(new Runnable(){@Overridepublic void run() {Map<String, String> map = new HashMap<String, String>();map.put("action", "teacher_login");map.put("account", account);map.put("password", password);OkHttp.Response response = OkHttp.httpGetForm("http://192.168.137.1/mgr/teacher/", map);Map content = (Map) JSONObject.parse(response.content);String code = Objects.requireNonNull(content.get("ret")).toString();if(code.equals("0")){map = new HashMap<String, String>();map.put("action", "teacher_get_self_info");map.put("teacher_id", account);response = OkHttp.httpPostForm("http://192.168.137.1/mgr/teacher/", map);assert response != null;content = (Map) JSONObject.parse(response.content);String teacher_name = Objects.requireNonNull(content.get("teacher_name")).toString();String teacher_email = Objects.requireNonNull(content.get("teacher_email")).toString();GlobalVariable.getInstance().setTeacher_name(teacher_name);GlobalVariable.getInstance().setTeacher_email(teacher_email);startActivity(intent);}else if(code.equals("1")){ToastChildThread.show(MainActivity.this, "账号或密码错误!", Toast.LENGTH_LONG);}else if(code.equals("2")){ToastChildThread.show(MainActivity.this, "账号不存在!", Toast.LENGTH_LONG);}}}).start();}else if(type == 3){intent.setClass(MainActivity.this, ManagerMain.class);new Thread(new Runnable(){@Overridepublic void run() {Map<String, String> map = new HashMap<String, String>();map.put("action", "manager_login");map.put("account", account);map.put("password", password);OkHttp.Response response = OkHttp.httpGetForm("http://192.168.137.1/mgr/manager/", map);Map content = (Map) JSONObject.parse(response.content);String code = Objects.requireNonNull(content.get("ret")).toString();if(code.equals("0")){startActivity(intent);}else if(code.equals("1")){ToastChildThread.show(MainActivity.this, "账号或密码错误!", Toast.LENGTH_LONG);}else if(code.equals("2")){ToastChildThread.show(MainActivity.this, "账号不存在!", Toast.LENGTH_LONG);}}}).start();}}else{ToastChildThread.show(MainActivity.this, "请检查网络连接!", Toast.LENGTH_LONG);}}int getType(){if(rb_student.isChecked()) return 1;else if(rb_teacher.isChecked()) return 2;else return 3;}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/289410.html

相关文章

Android学生信息管理系统

最近闲来无事总结一下上个学期数据库大作业。。。 代码我已经放到了github上&#xff0c;需要的可以下载 https://github.com/SunnyBoy-WYH/AndroidDemo 考虑到大家可能github下载慢&#xff0c;我也在码云放了一份 https://gitee.com/SunnyBoy-WYH/AndroidDemo 觉得还可以的…

基于Android的课程成绩管理系统的设计与实现

目录 1.绪论 1 1.1 引言 1 1.2 课题背景介绍 1 1.2.1 教育系统发展现状 1 1.2.2 手机的应用市场发展现状 2 1.2.3 Android平台介绍 3 1.2.4 Android管理学生学籍的意义 5 1.3 课程成绩管理系统概述 5 1.3.1 开展该系统的原因 5 1.4 相关技术介绍 6 1.4.1 Android的系统框架 6 1…

基于Android的学生管理系统的设计与实现

一、选题理论及实际意义 目前, 无线通信技术日臻成熟。在此背景下,移动通信技术快速发展,信息传递方式产生了革命性的变化,信息传递的质量、效率大大提高,为人们的生活提供了极大便利。随着WiFi及4G无线技术的普及,人们可以更加便捷高效地获取信息,对信息管理的要求也逐渐提高。…

C#-opencvsharp-图像中的数字提取

C#-opencv-图像中数字提取 本人初学者&#xff0c;正在学习C#中的opencv操作&#xff0c;下述代码目的是通过图像识别对银行卡的卡号进行识别并提取&#xff0c;要求位置置于银行卡原图中卡号正上方&#xff1b; 此次学习过程中通过查询python中的轮廓排序算法&#xff0c;手写…

图像增强锐化

分享下自己开发的关于扫描图像处理算法&#xff1a; &#xff08;1&#xff09;实现对彩色图像的增强锐化&#xff0c;去燥美化作用&#xff1b;类似扫描文档app的图像处理&#xff1b; &#xff08;2&#xff09;快速的图像处理&#xff0c; sdk部署不依赖任何第三方其他库&…

图像增强(拉普拉斯锐化增强)

图1为原图像&#xff0c;图2为拉普拉斯模板滤波器模板和带有对角项的公式的扩展模板进行处理以及锐化后的图像&#xff0c;图3为实践常用拉普拉斯模板1和模板2进行图像处理以及锐化后的图像。 对图像经过拉普拉斯滤波后&#xff0c;可以得到图像的边缘&#xff0c;再用原图减去…

什么是锐度?

锐度描述了照片中细节的清晰度&#xff0c;尽管清晰度最终受到相机设备、图像放大倍率和观看距离的限制。影响图像清晰度的两个基本因素是:分辨率和锐度。 锐度描述了图像信息在边缘处转换的速度&#xff0c;因此高锐度会导致锐化的过渡以及能够清晰定义边界的细节。 锐度功…

康耐视visionpro工具大全

本文已参与「新人创作礼」活动&#xff0c;一起开启掘金创作之路。 本文已参与「新人创作礼」活动&#xff0c;一起开启掘金创作之路。 本文已参与「新人创作礼」活动&#xff0c;一起开启掘金创作之路。 康耐视visionpro控件中文说明&#xff0c;方便大家以后使用康耐视的工具…