基于Shell脚本编写学生信息管理系统
背景
学生信息是学校管理中非常重要的数据资源。传统的人工管理方式既耗时耗力,不便于管理,又不易于规范化,存在着数据丢失的风险。在许多学校中,对于学生信息的管理仍停留在纸质介质基础上,这样落后的管理机制无法适应时代的发展,浪费了许多人力和物力。
随着计算机科学技术的提高,计算机应用已逐渐普及到生活中的各个领域,因此,使用计算机技术替代传统物质基础来存储数据必将成为一种趋势。相比传统手工管理信息,使用计算机技术对学生数据进行管理,有着许多优势,例如:存储数据量大、存储寿命长、成本低、可靠性高、检索迅速等。这些优点能极大的提高学生信息管理的效率,也是学校科化学、数据化管理发展的必要条件。
系统组成
通过使用shell脚本开发一个学生管理系统。系统集成了添加学生、删除学生、查询学生信息、查看学生列表以及退出系统五大基本模块,其中:
- 添加学生:录入学生信息到系统中,学生基础信息包括学号、姓名、年龄、性别、电话;
- 删除学生:根据学号删除学生信息;
- 查询学生信息:通过用户输入条件查询学生基本信息,并通过友好的界面展示出来;
- 查看学生列表:查询系统中所有学生的基本信息,并通过友好的界面展示出来;
- 退出系统:结束操作并退出系统。
项目执行
#!/bin/bash
# 学生信息管理系统
#设置全局变量
#学生相关变量
ID=""
NAME=""
AGE=""
GENDER=""
PHONE=""
#用户账户信息
username=""
password=""
##数据文件存放路径
source_dir="./source"
students_db="./source/students.db"
userdata_db="./source/userdata.db"
#创建数据文件
mkdir_sourcedir(){
if [ ! -d $source_dir ];then
mkdir -p $source_dir
fi
if [ ! -f $students_db ];then
touch $students_db
fi
if [ ! -f $userdata_db ];then
touch $userdata_db
fi
}
#
create_user(){
read -p "请输入你的用户名:" username
cat file | grep $username &>/dev/null
[ $? -eq 0 ] && echo "这个用户已经存在,请重新创建!" && create_user
if [ -z $username ];then
echo "该用户可创建" && create_user
fi
read -p "请输入密码:" password
read -p "请再次输入密码:" password1
if [[ "$password" != "$password1" ]] ;then
echo "密码验证不正确,请重新创建" && create_user
fi
if [ ! -z "$password" ];then
echo "$username "$password" ">>file
echo "创建成功!,按任意键将跳转到登录界面..."
fi
if [ -z "$password" ];then
echo "$username" " " >>file
echo "创建成功!,按任意键将跳转到登录界面..."
fi
clear
read choice
case $choice in
*)
login
;;
esac
}
login(){
read -p "请输入用户名:" username
a="`cat file | awk '$1=="'$username'"'|cut -d ' ' -f2-`"
b=`echo "$a" | sed 's/ //g'`
cat file | awk '$1=="'$username'"' &> /dev/null
if [ $? -eq 0 ];then
read -p "请输入你的密码:" password
c=`echo $password | sed 's/ //g'`
if [[ "$b" = "$c" ]];then
echo "登录成功!"
else
echo "密码验证不正确,请选择 1. 重新创建 2. 重新登录 3.注销用户 4.退出系统"
read choice
case $choice in
1)
create_user
;;
2)
login
;;
3)
logout
;;
4)
exit 0
;;
esac
fi
else
echo "该用户不存在,请选择 1. 重新创建 2. 重新登录 3.注销用户 4.退出系统"
#create_user
clear
read choice
case $choice in
1)
create_user
;;
2)
login
;;
3)
logout
;;
4)
exit 0
;;
esac
fi
Welcome
}
logout(){
read -p "请输入要注销的用户名" username
echo "该用户的信息为:"
grep "^$username" $userdata_db
read -p "确定注销吗?[yes|no]" choice
case "$choice" in
yes)
sed -i -e "/^$username/d" $userdata_db
if [ "$?" -eq 0 ];then
echo "注销成功"
else
echo "不存在该用户或者注销失败"
fi
;;
no)
:
;;
*)
echo "请输入[yes|no]"
logout
;;
esac
}
haha(){
case $main in
1)
create_user
;;
2)
login
;;
3)
logout
;;
4)
exit 0
;;
esac
}
cat << EOF
+--------------- 请选择:---------------+
1) 创建用户
2) 直接登录
3) 注销用户
4) 退出
+---------------------------------------+
EOF
read -p "Choice:" main
# 主函数
Welcome()
{
# reset
mkdir_sourcedir #数据文件不存在则创建
echo -e "\t\t\t+--------------------------+"
echo -e "\t\t\t 欢迎进入学生管理系统"
echo -e "\t\t\t+--------------------------+"
echo -e "\t\t\t 按任意键继续……"
read choice
case $choice in
*)
Module
;;
esac
}
#模块选择
Module(){
clear
echo -e "\t\t\t+-----------------------------+"
echo -e "\t\t\t请输入对应数字选择信息模块"
echo -e "\t\t\t 1. 学生信息管理"
echo -e "\t\t\t 2. 退出系统"
echo -e "\t\t\t+-----------------------------+"
read choice
case $choice in
1)
Menu1
;;
2)
exit 0
;;
*)
Module
;;
esac
}
###################
#学生信息模块功能实现
###################
#学生信息模块菜单
Menu1() {
clear
echo -e "\t\t\t+------------------------+"
echo -e "\t\t\t请输入对应数字选择功能"
echo -e "\t\t\t 1. 添加学生"
echo -e "\t\t\t 2. 删除学生"
echo -e "\t\t\t 3. 学生列表"
echo -e "\t\t\t 4. 查找学生"
echo -e "\t\t\t 5. 返回上级"
echo -e "\t\t\t 6. 退出系统"
echo -e "\t\t\t+------------------------+"
echo "请选择:"
read choice
case $choice in
1)
echo -e "\t\t\t添加学生信息"
add_student
;;
2)
echo -e "\t\t\t删除学生信息"
del_student
;;
3)
echo -e "\t\t\t展示学生信息"
display_students
;;
4)
echo -e "\t\t\t查询学生信息"
search_student_id
;;
5)
echo -e "\t\t\t返回上一个页面"
Module
;;
6)
exit 0
;;
*)
Menu1
;;
esac
echo "--------------------------"
echo "按任意键继续……"
read c
Menu1
}
#1.添加学生信息
add_student(){
read -p "ID:" ID
while grep -w "$ID" "$students_db" > /dev/null ;do
echo "已经存在该学号的学生了,请改用其他学号!"
read -p "ID:" ID
done
read -p "NAME:" NAME
read -p "AGE:" AGE
read -p "GENDER:" GENDER
read -p "PHONE:" PHONE
echo -e "$ID,\t$NAME,\t$AGE,\t$GENDER\t$PHONE,\r" >> $students_db
echo "成功添加学生信息,添加的信息为: "
grep -w $ID $students_db
}
#2.删除学生
del_student(){
read -p "请输入要删除的学生的学号" ID
echo "该学生的信息为:"
grep "^$ID" $students_db
read -p "确定删除吗?[yes|no]" choice
case "$choice" in
yes)
sed -i -e "/^$ID/d" $students_db
if [ "$?" -eq 0 ];then
echo "删除成功"
else
echo "不存在该条记录或者删除失败"
fi
;;
no)
:
;;
*)
echo "请输入[yes|no]"
del_student
;;
esac
}
#3.显示所有学生信息
display_students() {
echo "+-------------------------------------------------+"
echo -e "学号\t姓名\t年龄\t性别\t电话"
sed -n '1,$p' $students_db
echo "+-------------------------------------------------+"
echo -e "\r"
}
#4.查询学生信息
search_student_id() {
echo "+-------------------------------------------------+"
echo "输入要查询的学号"
read ID
echo "+-------------------------------------------------+"
echo -e "学号\t姓名\t年龄\t性别\t电话"
grep -w $ID $students_db
# grep -w "${ID#*,}" $students_db
echo "+-------------------------------------------------+"
echo "查询成功"
}
#程序入口
haha
exit 0
运行结果
总结
该任务为期末结课考核,代码的编写也是参考了网上的资源进行了修改(在此感谢提供支持的大佬🙏),功能基本都实现了,但还存在一些彩蛋🎊(BUG),发出来给需要的参考学习,也做为自己的学习成果记录了,如果有大佬发现彩蛋还望在评论区指正😉
#小声bb:内容整理不易,各位客官老爷点个赞再走吧~