shell编写display_record()方法查询缺勤信息 根据输入的用户名,将check.dat中对应该用户的迟到早退信息查出并显示。
时间: 2024-03-26 10:41:08 浏览: 23
好的,我来为您编写一个display_record()方法,用于查询缺勤信息:
```bash
#!/bin/bash
display_record() {
# 获取输入的用户名
read -p "请输入要查询的用户名:" username
# 在check.dat文件中查找对应该用户的迟到早退信息
record=$(grep "$username" check.dat)
# 如果查找到了记录,则显示出来
if [ -n "$record" ]; then
echo "用户 $username 的迟到早退记录如下:"
echo "$record"
else
echo "没有找到 $username 的迟到早退记录!"
fi
}
```
这个方法首先会提示用户输入要查询的用户名,然后在check.dat文件中查找对应该用户的迟到早退信息,如果找到了记录,就将其显示出来,否则提示用户没有找到该用户的迟到早退记录。
您可以将这个方法添加到您的shell脚本中,然后在需要查询缺勤信息的时候调用它即可。
相关问题
用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程序继续回到功能选择界面等待下一个用户进行操作。
以下是一个简单的考勤模拟程序的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 早退
```
请根据实际需要修改代码。
用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程序继续回到功能选择界面等待下一个用户进行操作。
好的,我来帮你设计一个这样的考勤模拟程序。
首先,你需要创建一个名为 `routine.sh` 的 shell 脚本,然后在脚本中添加以下代码:
```bash
#!/bin/bash
# 初始信息
echo "***** routine v1.0 by 202202098 *****"
echo "Good Morning!$(whoami)"
echo "Today is $(date "+%a %b %d %T %Z %Y")"
# 用户信息验证
count=0
while [ $count -lt 3 ]
do
read -p "请输入工号:" id
read -p "请输入密码:" password
if [ "$id" = "1001" ] && [ "$password" = "123456" ]
then
echo "登录成功"
break
else
((count++))
echo "工号或密码错误,请重新输入"
fi
done
if [ $count -eq 3 ]
then
echo "输入错误次数超过3次,请联系管理员"
exit 1
fi
# 菜单选择
while true
do
echo "********* MENU *********"
echo "欢迎使用XXX考勤系统!"
echo "1-上班签到 2-下班签出"
echo "3-缺勤信息查阅 4-退出"
read -p "请选择功能:" choice
case $choice in
1)
now=$(date "+%Y-%m-%d %H:%M:%S")
if [ $(date +%H) -gt 9 ]
then
echo "您迟到了,请注意早到"
echo "迟到时间:$now" >> check$id.dat
else
echo "签到时间:$now"
fi
;;
2)
now=$(date "+%Y-%m-%d %H:%M:%S")
if [ $(date +%H) -lt 18 ]
then
echo "您早退了,请注意按时下班"
echo "早退时间:$now" >> check$id.dat
else
echo "签出时间:$now"
fi
;;
3)
if [ -f check$id.dat ]
then
echo "迟到/早退记录:"
cat check$id.dat
else
echo "您没有迟到/早退记录"
fi
;;
4)
echo "谢谢使用!"
exit 0
;;
*)
echo "输入错误,请重新选择"
;;
esac
done
```
让我们来解释一下每段代码的作用:
1. 初始信息:输出程序名称、编者学号、当前日期时间和问候语。
2. 用户信息验证:使用 `while` 循环验证用户输入的工号和密码是否正确,最多允许输入 3 次。如果验证成功,则输出 "登录成功",否则提示用户重新输入。当输入错误次数超过 3 次时,输出 "输入错误次数超过3次,请联系管理员" 并退出程序。
3. 菜单选择:使用 `while` 循环显示菜单,然后根据用户选择执行相应的操作。如果用户输入的不是 1、2、3 或 4,则输出 "输入错误,请重新选择"。
4. 上班签到:获取当前时间,如果签到时间在上午 9 点之后,则输出 "您迟到了,请注意早到" 并将迟到时间记录到 `check+工号.dat` 文件中,否则输出签到时间。
5. 下班签出:获取当前时间,如果签出时间在下午 6 点之前,则输出 "您早退了,请注意按时下班" 并将早退时间记录到 `check+工号.dat` 文件中,否则输出签出时间。
6. 缺勤信息查阅:如果存在 `check+工号.dat` 文件,则输出其中的迟到和早退记录,否则输出 "您没有迟到/早退记录"。
7. 退出:输出 "谢谢使用!" 并退出程序。
你需要将 `1001` 和 `123456` 替换为你自己的工号和密码,然后保存脚本并运行它。当用户登录成功并选择相应的功能时,脚本会执行相应的操作并返回菜单选择界面。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)