用shell设计一个考勤模拟程序,1、脚本启动时首先输出一些初始信息,包括程序名称与编者学号、当前的日期与时间、适当的问候语等,格式自定。例如: ***** routine v1.0 by 202202098 ***** Good Morning!用户名 Today is Tue June 12 19:25:30 CST 2023 2、考勤程序运行后,首先验证用户输入的工号和密码。如果正确则成功登录系统;如果错误,则提示用户重新输入,如果输入密码超过3次,提示用户联系管理员。工号和密码信息保存在userinfo.dat中。 用户登录成功后,实现如下功能选择界面: ********* MENU ********* 欢迎使用XXX考勤系统! 1-上班签到 2-下班签出 3-缺勤信息查阅 4-退出 3、如果是上班签到,记录签到信息,如果签到时间大于上午9时,则提示用户迟到,并记录该迟到信息到check+工号.dat文件中(例如:工号为1001的用户上班签到时,迟到信息记录到check1001.dat文件中)4、如果是下班签出,记录签出信息,如果签出时间小于下午6时,则提示用户早退,并记录该早退信息到check+工号.dat文件中(例如:工号为1001的用户下班签到时,早退信息记录到check1001.dat文件中)5、如果用户查询缺勤信息,则将check+工号.dat文件中对应该用户的迟到早退信息查出并显示。6、用户选择功能执行完,shell程序继续回到功能选择界面等待下一个用户进行操作。
时间: 2023-07-24 22:41:43 浏览: 111
好的,请稍等,我为您编写一个考勤模拟程序。以下是程序代码:
```bash
#!/bin/bash
USERINFO_FILE="userinfo.dat"
CHECK_FILE_PREFIX="check"
LOGIN_MAX_ATTEMPTS=3
START_TIME="09:00:00"
END_TIME="18:00:00"
# 获取当前日期和时间
CURRENT_DATE=$(date +"%a %b %d %T %Z %Y")
# 输出初始信息
echo "***** routine v1.0 by 202202098 *****"
echo "Good Morning!$USER"
echo "Today is $CURRENT_DATE"
echo ""
# 登录
login_attempt=0
while [ "$login_attempt" -lt "$LOGIN_MAX_ATTEMPTS" ]; do
read -p "Please enter your employee ID: " emp_id
read -s -p "Please enter your password: " password
echo ""
# 验证用户信息
if grep -q "^$emp_id:$password$" "$USERINFO_FILE"; then
echo "Login successful!"
break
else
echo "Invalid employee ID or password. Please try again."
login_attempt=$((login_attempt+1))
fi
done
# 登录失败,提示联系管理员
if [ "$login_attempt" -ge "$LOGIN_MAX_ATTEMPTS" ]; then
echo "Login failed. Please contact the administrator."
exit 1
fi
# 签到签出
while true; do
echo "********* MENU *********"
echo "Welcome to XXX attendance system!"
echo "1-Check in 2-Check out"
echo "3-Check absence 4-Exit"
read -p "Please select an option: " option
echo ""
case $option in
1)
# 签到
current_time=$(date +"%T")
if [ "$current_time" \> "$START_TIME" ]; then
echo "You are late for work."
echo "$CURRENT_DATE: Late for work" >> "${CHECK_FILE_PREFIX}${emp_id}.dat"
else
echo "Check-in successful."
echo "$CURRENT_DATE: Checked in" >> "${CHECK_FILE_PREFIX}${emp_id}.dat"
fi
;;
2)
# 签出
current_time=$(date +"%T")
if [ "$current_time" \< "$END_TIME" ]; then
echo "You left work early."
echo "$CURRENT_DATE: Left work early" >> "${CHECK_FILE_PREFIX}${emp_id}.dat"
else
echo "Check-out successful."
echo "$CURRENT_DATE: Checked out" >> "${CHECK_FILE_PREFIX}${emp_id}.dat"
fi
;;
3)
# 查看迟到和早退信息
if [ ! -f "${CHECK_FILE_PREFIX}${emp_id}.dat" ]; then
echo "No absence information found."
else
echo "Check-in and check-out information:"
cat "${CHECK_FILE_PREFIX}${emp_id}.dat"
fi
;;
4)
# 退出
exit 0
;;
*)
# 选项无效
echo "Invalid option. Please try again."
;;
esac
echo ""
done
```
注意:在测试该程序时,请确保在同一目录下创建名为`userinfo.dat`的文件,并将用户信息添加到该文件中,格式为`工号:密码`,每行一个用户。例如:
```
1001:123456
1002:abcdef
```
另外,该程序只是一个简单的考勤模拟程序,实际情况可能更加复杂,需要根据实际情况进行修改和完善。
阅读全文