尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

考勤管理系统linux(连接数据库版)

考勤管理系统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.邮件发送功能实现代码
返回列表