Android程序设计之学生考勤管理系统

news2024/11/29 22:56:06

基于安卓平台开发的学生考勤管理系统,本系统采用java语言设计,数据存储使用SQLite轻量级数据库实现

SQLite 简介

SQLite是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite是一个增长最快的数据库引擎,这是在普及方面的增长,与它的尺寸大小无关。SQLite 源代码不受版权限制。

什么是 SQLite?
SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。

就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。

为什么要用 SQLite?

  • 不需要一个单独的服务器进程或操作的系统(无服务器的)。

  • SQLite 不需要配置,这意味着不需要安装或管理。

  • 一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。

  • SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。

  • SQLite 是自给自足的,这意味着不需要任何外部的依赖。


教师(管理远端): (登录,注册,班级管理,学生管理,课程管理,签到管理,请假管理,个人中心)

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

在这里插入图片描述


学生端: (我要请假,考勤签到)

在这里插入图片描述

部分核心代码

注册页面

/**
 * 注册
 */

public class RegisterActivity extends BaseActivity {
    private static final String TAG = "RegisterActivity";
    private Toolbar mToolbar;
    private AppCompatEditText et_user_name, et_user_pswd;
    private UserDao mUserInfoDao;

    @Override
    protected int getLayoutId() {
        return R.layout.activity_register;
    }

    @Override
    protected void initViews() {
        mToolbar = findViewById(R.id.toolbar);
        et_user_name = findViewById(R.id.et_user_name);
        et_user_pswd = findViewById(R.id.et_user_pswd);

        if (mUserInfoDao == null) {
            mUserInfoDao = new UserDao(this);
        }
    }

    @Override
    protected void setListener() {
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
    }

    @Override
    protected void initData() {

        findViewById(R.id.btn_register).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String name = et_user_name.getText().toString().trim();
                String pawsd = et_user_pswd.getText().toString().trim();
                if (TextUtils.isEmpty(name)) {
                    BastToast("请输入用户名");
                } else if (TextUtils.isEmpty(pawsd)) {
                    BastToast("请输入密码");
                } else {
                    int insert = mUserInfoDao.insert(name, pawsd, "", "今天你微笑了吗", "90分", "上海市", "北京市", "教师", "未婚", "xxx","xxx");

                    if (insert != -1) {
                        BastToast("注册成功");
                        finish();
                    } else {
                        BastToast("注册失败");
                    }
                }
            }
        });

    }
}

学生管理页面

public class StudentActivity extends BaseActivity {
    static final int CODE = 200;
    private Toolbar mToolbar;
    private RecyclerView mRecyclerView;
    private DelateDialog mDelateDialog;
    private StudentAdapter mStudentAdapter;

    private StudioDao mStudioDao;

    @Override
    protected int getLayoutId() {
        return R.layout.activity_student;
    }

    @Override
    protected void initViews() {
        if (mStudioDao == null) {
            mStudioDao = new StudioDao(this);
        }


        mToolbar = findViewById(R.id.toolbar);
        mRecyclerView = findViewById(R.id.recyclerView);
        mStudentAdapter = new StudentAdapter();
        mRecyclerView.setAdapter(mStudentAdapter);

        showLoading();
    }

    @Override
    protected void setListener() {
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        findViewById(R.id.btn_add).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivityForResult(new Intent(StudentActivity.this, AddStudentActivity.class), CODE);

            }
        });


        mStudentAdapter.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
                Intent intent = new Intent(StudentActivity.this, UpdateStudentActivity.class);
                intent.putExtra("info", mStudioDao.queryAll().get(position));
                startActivityForResult(intent, CODE);
            }
        });


        mStudentAdapter.setOnItemLongClickListener(new OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(@NonNull BaseQuickAdapter adapter, @NonNull View view, int position) {

                StudentBean bean = mStudioDao.queryAll().get(position);
                if (mDelateDialog == null) {
                    mDelateDialog = new DelateDialog(StudentActivity.this);

                }
                mDelateDialog.setDelateListener(new DelateDialog.DelateListener() {
                    @Override
                    public void delate() {
                        int delate = mStudioDao.delate(bean.getStudent_name());
                        if (delate == 1) {
                            BastToast("删除成功");
                        } else {
                            BastToast("删除失败");
                        }
                        mDelateDialog.dismiss();
                        mStudentAdapter.setNewInstance(mStudioDao.queryAll());
                    }
                });

                mDelateDialog.show();


                return false;
            }
        });


    }

    @Override
    protected void initData() {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                mStudentAdapter.setNewInstance(mStudioDao.queryAll());
                hiddenDialog();
            }
        }, 200);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (data != null && resultCode == CODE) {
            mStudentAdapter.setNewInstance(mStudioDao.queryAll());
        }

    }
}

个人中心页面

public class CenterActivity extends BaseActivity {
    private TextView username, signature, credit, home, hometown, professional, status, school, school_scl;
    private TextView edit;

    @Override
    protected int getLayoutId() {
        return R.layout.activity_center;
    }

    @Override
    protected void initViews() {

        signature = findViewById(R.id.signature);
        username = findViewById(R.id.username);
        edit = findViewById(R.id.edit);
        credit = findViewById(R.id.credit);
        home = findViewById(R.id.home);
        hometown = findViewById(R.id.hometown);
        professional = findViewById(R.id.professional);
        status = findViewById(R.id.status);
        school = findViewById(R.id.school);
        school_scl = findViewById(R.id.school_scl);

    }

    @Override
    protected void setListener() {

        edit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(CenterActivity.this, EditActivity.class);
                startActivityForResult(intent, 200);
            }
        });

    }

    @SuppressLint("SetTextI18n")
    @Override
    protected void initData() {

        UserInfo info = SPUtils.getObject(this, "userInfo", UserInfo.class);
        if (null != info) {
            signature.setText("个性签名:" + info.getSignature());
            username.setText("用户名:" + info.getUserName());
            credit.setText("信用:" + info.getCredit());
            home.setText("所在地:" + info.getHome());
            hometown.setText("家乡:" + info.getHometown());
            professional.setText("职业:" + info.getProfessional());
            status.setText("感情状况:" + info.getStatus());
            school.setText("学校:" + info.getSchool());
            school_scl.setText("专业:" + info.getSchool_scl());
        }

    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (null != data && resultCode == 200) {
            initData();
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/26374.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JSON 对比工具

文章目录JSON对比工具JSON对比工具 JSON 是 Web 开发领域中最常用的数据传输格式之一&#xff0c;因为 JSON 的可读性较高&#xff0c;对于一些简单的 JSON 数据&#xff0c;我们不需要借助任何工具就可以轻易的读取。但对于复杂的 JSON 数据就需要借助工具才行&#xff0c;本…

公众号文案写作技巧有哪些?教你几招

公众号文案写作是每个公众号运营者心中的痛&#xff1a; 你是否每天纠结写什么&#xff1f; 你是否写着写着就词穷了&#xff1f; 你是否不知道该如何下手&#xff1f; 公众号文案应该怎么写&#xff1f;今天伯乐网络传媒就来给大家分享一份超实用的公众号文案写作技巧&…

增量模型和迭代模型的优点与缺点

增量模型&#xff1a; 举个例子&#xff1a; 用户有一个需求&#xff0c;功能包含A,B,C... ABC 增量模型&#xff1a; 开发完A我就直接上线供给用户去使用 开发完C我就直接上线供给用户去使用 开发完B我就直接上线供给用户去使用 增量模型的特点 增量模型的特点…

度量BGP监测源数量对AS可见性的影响

首先&#xff0c;本文介绍了两个公开的BGP数据源项目情况&#xff1b;其次&#xff0c;从可见AS数量和可见AS边关系数量两个方面来分析度量BGP监测源中对等AS的可见性。 BGP数据源介绍 BGP数据源有2个公开的项目&#xff0c;分别是RIPE RIS和Route Views&#xff0c;它们使用路…

VUE基础编程(三)

案例要求 基于Vue Cli和嵌套路由技术&#xff0c;完成以下功能&#xff1a; 站点打开后会默认显示如图3.1所示的“关于公司”页面&#xff0c;单击图3.1页面上的“公司简介”链接&#xff0c;站点会显示如图3.2所示的“公司简介”页面&#xff0c;单击图3.1页面上的“公司治理…

【JAVA程序设计】基于SSM的学校教务管理系统-有文档

基于SSM的学校教务管理系统-有文档项目获取项目简介开发环境项目技术功能结构文档目录运行截图项目获取 获取方式&#xff08;点击下载&#xff09;&#xff1a;是云猿实战 项目经过多人测试运行&#xff0c;可以确保100%成功运行。 项目简介 本项目是基于SSM的学校教务管理…

[附源码]java毕业设计校园失物招领平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

idea反编译

1、问题描述 只有jar包&#xff0c;反编译下&#xff0c;看几个配置&#xff1b; 2、问题说明 用的idea里面的插件&#xff0c;java Decoplier&#xff0c;可以反编译jar包&#xff0c;效果挺好的&#xff0c;反编译出来的.java没乱码&#xff0c;可以直接看&#xff1b; 2…

139.深度学习分布式计算框架-2

139.1 Spark MLllib MLlib(Machine Learnig lib) 是Spark对常用的机器学习算法的实现库&#xff0c;同时包括相关的测试和数据生成器。MLlib是MLBase一部分&#xff0c;其中MLBase分为四部分&#xff1a;MLlib、MLI、ML Optimizer和MLRuntime。 ML Optimizer会选择它认为最适合…

4款企业常用的工时管理系统盘点

4款企业常用的工时管理系统有&#xff1a;1、Excel&#xff1b;2、8Manage 工时表&#xff1b;3、诺明软件&#xff1b;4、Aceteamwork。 “时间就是金钱”&#xff0c;相信大家都听过这句话。对于企业来说&#xff0c;管理员工工时&#xff0c;其实就是管理企业的人力成本和实…

数据结构-难点突破(C++实现树的双亲表示法,孩子表示法,孩子兄弟表示法(树转化为二叉树))

文章目录1. 树的双亲表示法2. 孩子表示法3. 孩子兄弟表示法&#xff08;树转化为二叉树&#xff09;普通树的存储一半采用三种方式&#xff1a; 双亲表示法&#xff1b;孩子表示法&#xff1b;孩子兄弟表示法&#xff1b; 1. 树的双亲表示法 思路和图片来源 采用双亲表示法…

智慧停车解决方案-最新全套文件

智慧停车解决方案-最新全套文件一、建设背景痛点分析二、建设思路准确、安全、可靠、及时性原则统一规划、分布实施保护以往投资、整合现有资源资源共享和整体性、统一性原则可扩展性原则三、建设方案四、获取 - 智慧停车全套最新解决方案合集一、建设背景 痛点分析 随着经济…

stm32cubemx hal学习记录:FreeRTOS事件

一、事件 事件是一种实现任务间通信的机制&#xff0c;主要用于实现多任务间的同步&#xff0c;但事件通信只能是事件类型的通信&#xff0c;无数据传输。与信号量不同的是&#xff0c;它可以实现一对多&#xff0c;多对多的同步。即一个任务可以等待多个事件的发生&#xff1a…

C语言源代码系列-管理系统之机房机位预定系统

往期文章分享点击跳转>《导航贴》- Unity手册&#xff0c;系统实战学习点击跳转>《导航贴》- Android手册&#xff0c;重温移动开发 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断反思前进的过程。在这个过…

华为电量分段图表实现过程

以前一直是改的MPAndroidChart&#xff0c;但最近看到华为手机的电池图表发现一旦设计不符合常规图表逻辑实现起来就很困难&#xff0c; 考虑过path相减(areaPath.op(-,- Path.Op.DIFFERENCE))、图像混合&#xff08;paint.setXfermode&#xff09;、裁剪区域&#xff08;clipR…

学生HTML个人网页作业作品下载 动漫主题网页设计制作 大学生个人网站作业模板 dreamweaver简单个人网页制作

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

vue3面试题

文章目录一、vue3有了解过吗&#xff1f;能说说跟vue2的区别吗&#xff1f;1.vue3介绍2.vue3的新特性&#xff1a;2.1速度更快2.2体积更小2.3更易维护2.4更好的Typescript支持2.5编译器重写2.6更接近原生2.7更易使用3.vue3新增特性framentsTeleportcreateRenderercomposition A…

JVM区域划分

概述 JVM在运行代码时&#xff0c;他使用多块内存空间&#xff0c;不同的内存空间用来放不同的数据&#xff0c;然后配合代码流程&#xff0c;让系统运行起来。 存放类加载信息 举个最简单的例子&#xff0c;比如现在知道了JVM会加载类到内存里来供后续运行&#xff0c;所以…

java后端web前端10套项目开发案例源码,毕设,期末作业

项目包括 基础的html,css,js,jquery期末作业项目,毕设 1.古风诗意主题的背单词项目 2.模仿考虫软件实现的考拉背单词网页 3.模仿不背单词软件实现的背单词项目 html,css,js,jquery,瀑布流&#xff0c;懒加载的前端毕设 仿京东网站实现的前端平台 java基础作业 1.纯后端学生管…

初识Nodejs -- nodejs简介

视频链接&#xff1a;黑马程序员Node.js全套入门教程 文章目录1. 初识Nodejs1.1 思考为什么JavaScript可以在浏览器中被执行为什么JavaScript可以操作DOM和BOM&#xff1f;浏览器中的JavaScript运行环境1.2 Nodejs简介1.2.1 Nodejs中的JavaScript运行环境1.2.2 Node.js可以做什…