用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 18:41:43 浏览: 34
好的,请稍等,我为您编写一个考勤模拟程序。以下是程序代码: ```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 ``` 另外,该程序只是一个简单的考勤模拟程序,实际情况可能更加复杂,需要根据实际情况进行修改和完善。

相关推荐

最新推荐

recommend-type

Linux 启动停止SpringBoot jar 程序部署Shell 脚本的方法

主要介绍了Linux 启动停止SpringBoot jar 程序部署Shell 脚本的方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
recommend-type

Linux通用java程序启动脚本代码实例

虽然写起动shell的频率非常不高。。。但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell。 在网上找到一个挺好的通用shell...#也可以作为启动java程序的独立脚本来使用。 # #Author: tudaxia.
recommend-type

ubuntu中编写shell脚本开机自动启动(推荐)

主要介绍了ubuntu中编写shell脚本开机自动启动,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
recommend-type

在shell脚本中获取上个月最后一天的日期方法

今天小编就为大家分享一篇在shell脚本中获取上个月最后一天的日期方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

Linux shell脚本输出日志笔记整理(必看篇)

下面小编就为大家带来一篇Linux shell脚本输出日志笔记整理(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

深入了解MATLAB开根号的最新研究和应用:获取开根号领域的最新动态

![matlab开根号](https://www.mathworks.com/discovery/image-segmentation/_jcr_content/mainParsys3/discoverysubsection_1185333930/mainParsys3/image_copy.adapt.full.medium.jpg/1712813808277.jpg) # 1. MATLAB开根号的理论基础 开根号运算在数学和科学计算中无处不在。在MATLAB中,开根号可以通过多种函数实现,包括`sqrt()`和`nthroot()`。`sqrt()`函数用于计算正实数的平方根,而`nt
recommend-type

react的函数组件的使用

React 的函数组件是一种简单的组件类型,用于定义无状态或者只读组件。 它们通常接受一个 props 对象作为参数并返回一个 React 元素。 函数组件的优点是代码简洁、易于测试和重用,并且它们使 React 应用程序的性能更加出色。 您可以使用函数组件来呈现简单的 UI 组件,例如按钮、菜单、标签或其他部件。 您还可以将它们与 React 中的其他组件类型(如类组件或 Hooks)结合使用,以实现更复杂的 UI 交互和功能。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。