考勤管理系统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/8/18 17:04:27 阅读更多 →
淘宝店群自动化管理系统:Canvas+WebGL+AudioContext全维度指纹隔离

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

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

2026/8/17 16:02:38 阅读更多 →
基于Grafana + Prometheus的服务器集群性能监控系统——Python大数据分析实践

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

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

2026/8/17 16:02:38 阅读更多 →

最新新闻

多智能体协同图像编辑:从条件化生成到质量感知的工程实践

多智能体协同图像编辑:从条件化生成到质量感知的工程实践

1. 从“修图”到“造图”:多智能体协作编辑的范式革命 在数字图像处理领域,我们正经历一场静默但深刻的变革。过去,无论是专业设计师在Photoshop中层层叠加滤镜和蒙版,还是普通用户用美图秀秀一键美颜,本质上都是一种“…

2026/8/18 22:34:39 阅读更多 →
工程车辆检测数据集VOC+YOLO格式10409张11类别

工程车辆检测数据集VOC+YOLO格式10409张11类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):10409标注数量(xml文件个数):10409标注数量(txt文件个数):10409标注类…

2026/8/18 22:34:39 阅读更多 →
开源搜索智能体Toast 1实战:媲美Claude Opus的本地部署与API调用指南

开源搜索智能体Toast 1实战:媲美Claude Opus的本地部署与API调用指南

最近在探索大模型应用时,你是否也遇到过这样的困境:需要一个能深度理解复杂问题、进行多步推理,并且能主动联网搜索最新信息的智能助手,但顶级闭源模型如 Claude Opus 或 GPT-4o 的 API 调用成本又让人望而却步?开源模…

2026/8/18 22:34:39 阅读更多 →
从AI工具到智能体工作流:构建可预测的团队生产力引擎

从AI工具到智能体工作流:构建可预测的团队生产力引擎

最近和不少技术团队负责人聊天,发现一个普遍现象:大家手里都有一堆AI工具,从Copilot到Claude,从GPTs到各种Agent平台,但真正能把这些工具“用起来”,并且转化为团队稳定、持续生产力增长的,却少…

2026/8/18 22:34:39 阅读更多 →
手机变信号发生器:低成本电路测试方案与实战指南

手机变信号发生器:低成本电路测试方案与实战指南

1. 项目概述:当手机变身信号发生器 几年前,我在调试一个简单的音频放大电路时,手头正好缺一个信号发生器。看着桌上那台笨重又昂贵的专业设备,再看看口袋里几乎不离身的智能手机,一个念头冒了出来:手机的耳…

2026/8/18 22:33:38 阅读更多 →
Ryzen SDT调试工具实战指南:从逐核调优到SMU寄存器调试的完整路线

Ryzen SDT调试工具实战指南:从逐核调优到SMU寄存器调试的完整路线

Ryzen SDT调试工具实战指南:从逐核调优到SMU寄存器调试的完整路线 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址:…

2026/8/18 22:33:38 阅读更多 →

日新闻

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 如果你还停留在"看网课 不停暂停 截图 …

2026/8/18 0:00:57 阅读更多 →
思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 你是不是也经历过这种时刻:设计稿里…

2026/8/18 0:00:58 阅读更多 →
华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, …

2026/8/18 0:00:59 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 9:06:28 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/17 18:54:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →