考勤管理系统linux(连接数据库版)
1.项目中的具体任务摘要本文详细介绍了在 Linux 环境下使用 Shell 脚本和 SQL 数据库开发的考勤管理系统。系统核心功能包括员工签到/签退含迟到早退判断、考勤记录管理、用户信息维护、加班信息查询与密码管理。文章从项目任务定义出发逐步分析了各功能模块的业务逻辑与实现要点并提供了关键代码示例如数据库初始化、主菜单、用户登录验证、签到逻辑以及密码加密显示等。系统采用模块化设计区分管理员与普通用户权限实现了完整的考勤业务流程。在linux上开发一个考勤管理系统实现如下功能选择上班签到下班签出考勤信息管理用户信息维护加班信息查阅密码管理考勤程序运行后提示用户输入上述功能选择并验证用户输入的用户名和密码用户信息保存在数据库中上班签到记录签到信息如果签到时间大于上午8时则提示用户迟到并记录该迟到信息到数据库中。下班签出记录签出信息如果签出时间小于下午6时则提示用户早退并记录该早退信息记录到数据库中如果用户选择考勤信息查询则将数据库中对应的用户迟到早退的信息查询出来并显示。2.系统功能模块分析2.1签到模块sign_in用户进入签到模块后验证用户名和密码是否有效其次查询数据库中最后一条数据判断用户前一天是否已经签退没有签退不得再次签到即形成签到-签退-签到的逻辑再根据签到时间判断有无迟到并将信息记录在数据表checks中。#判断用户是否已签退 echo Please input your username; last_check_result$(sqlite3 /root/work/userinfo.db SELECT check_type FROM checks WHERE username$name ORDER BY check_time DESC LIMIT 1;) # 如果最后一条记录是签到说明没有签退不允许再次签到 if [[ $last_check_result 签到 || $last_check_result 迟到 ]]; then echo 您上次签到后尚未签退请先签退再签到 return fiif [ $current_hour_minutes -gt $deadline_hour_minutes ]; #签到时间晚于8点迟到 then check_type迟到 check_message签到成功你已迟到 else check_type签到 check_message签到成功! fi current_user$name; sqlite3 /root/work/userinfo.db INSERT INTO checks (username, check_type,check_time) VALUES ($name, $check_type,datetime(now,localtime)); # 使用了SQLite的datetime()函数来获取当前的日期和时间2.2签退模块sign_out用户进入签退模块后验证用户名和密码是否有效其次查询数据库中最后一条数据判断用户是否已经签到没有签到不得再次签退即形成签到-签退-签到-签退的逻辑再根据签退时间判断有无早退并将信息记录在数据表checks中。2.3考勤信息管理display_record进入考勤管理模块后首先验证管理员身份管理员登陆和普通用户登陆具有不同的操作权限。管理员登陆查管理员可选择查看全部考勤记录或特定用户的考勤记录增手动给用户添加考勤记录删手动删除用户的考勤记录改考勤记录有误时手动修改指定记录条普通用户登陆查查看本人的考勤记录2.4用户信息模块user_maintenance需要验证管理员身份普通用户无权限添加用户录入新用户的信息不允许同名用户存在创建密码时两次输入的密码一致后成功创建echo 请设置密码:; read -s password; if [ -z $password ];then echo 不可为空 continue; fi echo 请再次确认密码; read -s again_password; if [[ $password ! $again_password ]]; then echo 两次输入的密码不一致请重新操作; continue; # 跳转到循环的开始重新进行操作 fi删除用户删除users表中的用户信息删除时询问是否同时删除该用户的考勤记录信息查看用户信息管理员可选择查看任意用户的信息echo 输入要查询的用户名(输入all users查看全部):; read names; if [ $names all users ]; then echo 以下是全部用户的信息 sqlite3 /root/work/userinfo.db SELECT * FROM users; #在users表查询所有用户信息 else select$(sqlite3 /root/work/userinfo.db SELECT * FROM users WHERE username$names;) if [[ -z $select ]]; then echo 用户不存在请重新选择 return; fi echo 该用户信息如下 echo $select fi2.5加班管理模块overtime_reporthomepagefunction overtime_report(){ clear; echo ——————————overtime management——————————; echo | 1.Select report |; echo | 2.Overtime bonus |; echo | 3.Exit |; echo ———————————————————————————————————————; while true; do done }查看加班记录普通用户只可查看本人的加班记录管理员可查看所有用户加班记录信息加班补贴查询管理员登陆查看用户的加班时长、加班补贴等信息普通用户登陆通过邮件方式获取自己的加班时长、加班补贴等信息2.6密码管理模块password_managementhomepagefunction password_management(){ clear; echo ——————————password_management——————————; echo | 1.Change passwd |; echo | 2.Forget passwd |; echo | 3.Reset passwd |; echo | 4.Exit |; echo ———————————————————————————————————————; while true; do done }修改密码普通用户可通过该模块修改自己的账号密码忘记密码普通用户忘记密码时通过该模块向管理员发送重置密码请求等待管理员处理后修改密码发送的请求保存在passwd表中重置密码需要管理员权限。管理员登陆后可查看待处理的用户提交的重置密码请求passwd表中数据并选择进行处理重置的密码会通过邮件的形式发送到用户邮箱保证密码安全性3.代码实现1.创建数据库# 创建并初始化数据库 sqlite3 userinfo.db CREATE TABLE IF NOT EXISTS users (username TEXT UNIQUE,password TEXT,emil TEXT); sqlite3 userinfo.db CREATE TABLE IF NOT EXISTS checks (id INTEGER PRIMARY KEY AUTOINCREMENT,username TEXT, check_type TEXT, check_time DATETIME); sqlite3 userinfo.db CREATE TABLE IF NOT EXISTS over (username TEXT,check_type TEXT, check_time DATETIME,overtime_minutes INTEGER DEFAULT 0); sqlite3 userinfo.db CREATE TABLE IF NOT EXISTS passwd (id INTEGER PRIMARY KEY AUTOINCREMENT,username TEXT,emil TEXT,status TEXT,time DATETIME); sqlite3 userinfo.db CREATE TABLE IF NOT EXISTS bonus (username TEXT,sum_time INTEGER DEFAULT 0, money INT);2.homepagefunction homepage(){ clear; echo ———————— Employee attendance Homepage ————————; echo | 1.Sign in |; echo | 2.Sign out |; echo | 3.The record |; echo | 4.User Maintenance |; echo | 5.Overtime Report |; echo | 6.Password management |; echo | 7.Exit |; echo ——————————————————————————————————————————————; echo Please select:; }3.用户登陆函数#用户登陆函数 function sign_in(){ echo Please input your username; read name; #查询用户合法性并获取密码 query_result$(sqlite3 /root/work/userinfo.db SELECT password FROM users WHERE username$name;) if [ -z $query_result ]; then #-z 若字符串长度为0返回真 echo 用户不存在,请重新选择 return fi # 查询该用户最后一条签到记录 last_check_result$(sqlite3 /root/work/userinfo.db SELECT check_type FROM checks WHERE username$name ORDER BY check_time DESC LIMIT 1;) # 如果最后一条记录是签到说明没有签退不允许再次进行签到 if [[ $last_check_result 签到 || $last_check_result 迟到 ]]; then echo 您上次签到后尚未签退请先签退再签到 return fi # 提取密码 echo Please input your password; stty -echo #禁用回显功能输入密码时不可见 . . . echo #密码比较 if [ $password $query_result ]; then hour$(date %H:%M) #获取当前时间 attime$(date %Y-%m-%d %H:%M:%S) #详细时间 deadline08:00 current_hour_minutes$(echo $hour | awk -F: {print $1 * 60 $2}) # 将当前时间转换为分钟数 deadline_hour_minutes$(echo $deadline | awk -F: {print $1 * 60}) # 将截止时间转换为分钟数 #是否在规定时间内签到 if [ $current_hour_minutes -lt 360 ] || [ $current_hour_minutes -ge 1080 ]; then #签到时间不在6点到18点之间不允许签到 echo 签到失败不在允许的签到时间范围内6:00-18:00 return fi #签到在规定时间范围内检查是否迟到 if [ $current_hour_minutes -gt $deadline_hour_minutes ]; #签到时间晚于8点迟到 then check_type迟到 check_message签到成功你已迟到 else check_type签到 check_message签到成功! fi current_user$name; sqlite3 /root/work/userinfo.db INSERT INTO checks (username, check_type,check_time) VALUES ($name, $check_type,datetime(now,localtime)); # 使用了SQLite的datetime()函数来获取当前的日期和时间 echo $attime $name $check_message #显示签到信息 else echo 密码错误; current_user fi }登出函数同理4.考勤信息管理函数5.用户信息管理函数6.加班管理函数7.密码管理函数8.拓展8.1.密码加密显示echo Please input your password; stty -echo #禁用回显功能输入密码时不可见 password while IFS read -r -s -n 1 char; do if [ $char $\0 ]; then # 检测 Ctrl-D (在 Unix-like 系统中通常表示 EOF) break elif [[ $char $\177 ]]; then # 检测 Backspace if [[ -n $password ]]; then # 删除最后一个字符和星号 password${password%?} echo -ne \b \b # 回退并删除前一个字符包括星号 fi else password$char echo -n * # 打印星号代替实际字符 fi done stty echo #重新启用回显功能 echo 8.2.邮件发送功能实现代码

相关新闻

基于孤立森林与聚类结合的用户行为异常检测:大数据分析实践

基于孤立森林与聚类结合的用户行为异常检测:大数据分析实践

摘要 在数字化业务场景中,用户行为异常检测是风险控制、反欺诈和系统运维的关键环节。本文系统阐述了一种将孤立森林(Isolation Forest)与聚类算法(K-Means)相结合的用户行为异常检测方法,并通过Python完整…

2026/11/1 7:25:24 阅读更多 →
淘宝店群自动化管理系统:Canvas+WebGL+AudioContext全维度指纹隔离

淘宝店群自动化管理系统:Canvas+WebGL+AudioContext全维度指纹隔离

淘宝店群自动化管理系统:CanvasWebGLAudioContext全维度指纹隔离 做店群的老板都知道,淘宝的批量抓取采集,是店群运营中最耗人力也最容易出错的环节。 采集竞品数据是店群运营的命脉。但各大平台的反爬系统越来越强,普通爬虫要么…

2026/10/21 1:10:18 阅读更多 →
基于Grafana + Prometheus的服务器集群性能监控系统——Python大数据分析实践

基于Grafana + Prometheus的服务器集群性能监控系统——Python大数据分析实践

摘要 随着微服务和容器化架构的普及,服务器集群规模动辄成百上千节点,传统单机监控工具已无法满足海量时序数据的采集、存储与分析需求。Prometheus作为云原生计算基金会(CNCF)的毕业项目,搭配Grafana的可视化能力&am…

2026/10/29 20:29:17 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/1 0:24:43 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/31 10:20:19 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/31 10:20:23 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/1 1:06:58 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/31 10:30:19 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/31 9:29:43 阅读更多 →

日新闻

周新闻

月新闻