用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 13:43:53 浏览: 37
以下是一个简单的考勤模拟程序的shell脚本实现:
```shell
#!/bin/bash
# 初始信息
echo "***** XXX考勤系统 v1.0 by 202202098 *****"
echo "Good Morning!$USER"
echo "Today is $(date '+%a %b %d %T %Z %Y')"
# 验证用户登录
count=0
while [ $count -lt 3 ]
do
echo "请输入工号:"
read id
echo "请输入密码:"
read -s password
if grep -q "^$id:$password$" userinfo.dat; then
echo "登录成功!"
break
else
count=$[$count+1]
if [ $count -lt 3 ]; then
echo "工号或密码错误,请重新输入。"
else
echo "工号或密码错误超过3次,请联系管理员。"
exit 1
fi
fi
done
# 功能选择界面
while true
do
echo "********* MENU *********"
echo "欢迎使用XXX考勤系统!"
echo "1-上班签到 2-下班签出 3-缺勤信息查阅 4-退出"
read -p "请选择功能:" choice
case $choice in
1) # 上班签到
now=$(date +%T)
if [ $(date +%H) -gt 9 ]; then
echo "迟到了!"
echo "$USER $now 迟到" >> check$id.dat
else
echo "上班签到成功!"
echo "$USER $now" >> check$id.dat
fi
;;
2) # 下班签出
now=$(date +%T)
if [ $(date +%H) -lt 18 ]; then
echo "早退了!"
echo "$USER $now 早退" >> check$id.dat
else
echo "下班签出成功!"
echo "$USER $now" >> check$id.dat
fi
;;
3) # 缺勤信息查阅
if [ -f check$id.dat ]; then
echo "迟到/早退记录如下:"
cat check$id.dat
else
echo "没有迟到/早退记录。"
fi
;;
4) # 退出
exit 0
;;
*) # 输入非法
echo "输入非法,请重新输入。"
;;
esac
done
```
在此示例中,假设用户信息存储在userinfo.dat文件中,格式为每行一个工号和密码,用冒号分隔。例如:
```
1001:password1
1002:password2
```
另外,迟到/早退记录分别保存在check+工号.dat文件中,每行记录一个签到/签出信息。例如:
```
张三 09:10 迟到
张三 18:00
李四 09:15 迟到
李四 17:50 早退
```
请根据实际需要修改代码。