大学生linux期末作业系列之通过shell脚本开发课程管理系统
偶然间看到蛮有意思的需求,具体内容如下
学生选课管理系统的功能分析可以反映该系统能够提供的各种功能,它能够 清晰地把系统要完成的功能展示给要使用的人员。系统分为学生模块、教师模块。
主要功能为学生通过系统查看可选课程,同时选择可选课程,选定后无法修改:
教师可添加新课程,查看课程所选人数,删除课程信息等操作。该学生选课管理系统的具体功能如下: (1)系统允许学生或教师登录
(2)系统允许学生选课 (3)系统允许学生查看个人信息及选课信息 (4)系统允许教师添加新课程
(5)系统允许教师删除已有课程 (6)系统允许教师查看某个课程的相关信息设计学生选课系统。具体要求如下
A、进入系统后需先登录系统,主界面如下
--------欢迎使用学生选课系统-----------
1、学生身份登录系统
2、教师身份登录系统
3、退出学生选课系统
------------------------------------- 、
B、如以学生身份登录系统,系统显示的主界面 如下:
------------欢迎使用学生选课系统(学生)-----
1、学生选择课程
2、学生查看信息
3、学生退出系统
------------------------------------ 、
学生信息中需显示学生的学号、姓名、所选课程 等
C、如以教师身份登录系统,系统显示的主界面 如下: 欢迎使用学生选课系统(教 师)
1、教师添加课程
2、教师删除课程
3、教师查看课程
4、教师退出系统 教师查看课程时,需显示课程的选课人数和课程名称,其他不强制要求
代码功能概述
本次开发的 Bash 脚本实现了一个简单的学生选课管理系统,分为学生模块和教师模块。系统主要包括以下功能:
学生模块:
- 学生登录
- 选择课程
- 查看个人信息及选课信息
- 退选课程
教师模块:
- 教师登录
- 添加课程
- 删除课程
- 查看课程信息
各个函数的作用和使用的语法如下:
主登录函数 login
功能:显示主菜单并处理用户选择学生或教师登录。
语法:case语句用于选择用户操作,read命令获取用户输入。
学生登录函数 student_login
功能:学生登录验证。
语法:read命令获取学生输入的信息,grep命令验证信息是否存在。
学生菜单函数 student_menu
功能:显示学生操作菜单并处理用户选择。
语法:case语句处理用户选择的操作。
选择课程函数 select_course
功能:学生选择课程。
语法:while IFS= read -r line读取课程列表,grep验证课程是否存在,sed更新课程选课人数,echo记录选课信息。
查看学生信息及选课信息函数 view_student_info
功能:显示学生的基本信息和已选课程。
语法:grep获取学生信息,cut提取选课信息。
教师登录函数 teacher_login
功能:教师登录验证。
语法:read命令获取教师输入的信息,grep验证信息是否存在。
教师菜单函数 teacher_menu
功能:显示教师操作菜单并处理用户选择。
语法:case语句处理用户选择的操作。
添加课程函数 add_course
功能:教师添加新课程。
语法:read获取课程名称,echo记录课程信息。
删除课程函数 delete_course
功能:教师删除课程。
语法:while IFS= read -r line读取课程列表,sed删除课程信息及相关选课信息。
查看课程信息函数 view_courses
功能:查看课程信息及选课人数。
语法:while IFS= read -r course_info读取课程信息,cut提取课程名称,grep统计选课人数。
学生退选课程函数 delete_student_course
功能:学生退选课程。
语法:grep获取已选课程,sed删除选课记录。
开发过程中使用的语法如下:
case语句:用于处理用户输入并选择相应操作。
read命令:用于读取用户输入。
grep命令:用于查找和验证信息。
sed命令:用于修改文件内容。
while IFS= read -r line:用于逐行读取文件内容。
文件存储:
使用文本文件存储学生信息、教师信息、课程信息和学生选课信息。
代码如下:
#!/bin/bash
# 学生信息存储文件
student_info_file="student_info.txt"
# 教师信息存储文件
teacher_info_file="teacher_info.txt"
# 课程信息存储文件
course_file="courses.txt"
# 学生选课信息存储文件
student_course_file="student_course.txt"
# 登录函数
login() {
clear
echo "--------欢迎使用学生选课系统-----------"
echo "*1、学生身份登录系统*"
echo "*2、教师身份登录系统*"
echo "*3、退出学生选课系统*"
echo "-------------------------------------"
read -p "请选择身份登录系统或退出: " choice
case $choice in
1) student_login ;;
2) teacher_login ;;
3) exit ;;
*) echo "无效的选项,请重新选择!" ; login ;;
esac
}
# 学生登录函数
student_login() {
clear
echo "------------欢迎使用学生选课系统(学生)-----"
read -p "请输入学号: " student_id
read -p "请输入姓名: " student_name
read -s -p "请输入密码: " passwd
# 检查学生信息是否存在
if grep -q "^$student_id:$student_name:$passwd" "$student_info_file"; then
student_menu
else
echo "学号或姓名或密码错误,请重试!"
student_login
fi
}
# 学生菜单
student_menu() {
clear
echo "------------欢迎使用学生选课系统(学生)-----"
echo "*1、学生选择课程*"
echo "*2、学生查看信息*"
echo "*3、学生退选课程*"
echo "*4、学生退出系统*"
echo "-------------------------------------------"
read -p "请选择操作或退出系统: " choice
case $choice in
1) select_course ;;
2) view_student_info ;;
3) delete_student_course ;;
4) login ;;
*) echo "无效的选项,请重新选择!" ; student_menu ;;
esac
}
#选择课程函数
select_course() {
clear
echo "可选课程列表:"
while IFS= read -r line; do
echo "$line"
done < "$course_file"
read -p "请输入要选择的课程名称: " course_name
# 检查课程是否存在
if grep -q "^$course_name$" "$course_file"; then
# 检查学生是否已选择该课程
if grep -q "^$student_id:$course_name$" "$student_course_file"; then
echo "您已选择该课程,请勿重复选择!"
select_course
else
# 选课成功,更新选课人数
sed -i "/^$course_name:/ s/$/1/" "$course_file"
echo "$student_id:$course_name" >> "$student_course_file"
echo "选课成功!"
student_menu
fi
else
echo "无效的课程名称,请重新选择!"
select_course
fi
}
# 查看学生信息及选课信息
view_student_info() {
clear
echo "学生信息:"
grep "^$student_id:$student_name:" "$student_info_file"
echo "已选课程:"
grep "^$student_id:" "$student_course_file" | cut -d: -f2
read -p "按任意键返回主菜单..." -n 1 -s
student_menu
}
# 教师登录函数
teacher_login() {
clear
echo "------------欢迎使用学生选课系统(教师)-----"
read -p "请输入用户名: " username
read -s -p "请输入密码: " password
echo ""
# 检查教师用户名和密码是否匹配
if grep -q "^$username:$password$" "$teacher_info_file"; then
teacher_menu
else
echo "用户名或密码错误,请重试!"
teacher_login
fi
}
# 教师菜单
teacher_menu() {
clear
echo "------------欢迎使用学生选课系统(教师)-----"
echo "*1、教师添加课程*"
echo "*2、教师删除课程*"
echo "*3、教师查看课程*"
echo "*4、教师退出系统*"
echo "-------------------------------------------"
read -p "请选择操作或退出系统: " choice
case $choice in
1) add_course ;;
2) delete_course ;;
3) view_courses ;;
4) login ;;
*) echo "无效的选项,请重新选择!" ; teacher_menu ;;
esac
}
# 添加课程函数
add_course() {
clear
read -p "请输入新课程名称: " course_name
echo "$course_name" >> "$course_file"
echo "课程添加成功!"
read -p "按任意键返回教师菜单..." -n 1 -s
teacher_menu
}
# 删除课程函数
delete_course() {
clear
echo "可删除课程列表:"
while IFS= read -r line; do
echo "$line"
done < "$course_file"
read -p "请输入要删除的课程名称: " course_name
# 删除课程信息
sed -i "/^$course_name:/d" "$course_file"
# 删除选课信息中的该课程记录
sed -i "/:$course_name$/d" "$student_course_file"
echo "课程删除成功!"
read -p "按任意键返回教师菜单..." -n 1 -s
teacher_menu
}
# 查看课程信息函数
view_courses() {
clear
echo "课程信息:"
while IFS= read -r course_info; do
course_name=$(echo "$course_info" | cut -d: -f2) # 获取课程名称
# 统计整个文件中包含该课程名称的行数
student_count=$(grep -c "$course_name" "$course_file")
echo "课程名称: $course_name,选课人数: $student_count"
done < "$course_file"
read -p "按任意键返回教师菜单..." -n 1 -s
teacher_menu
}
# 学生退选课程函数
delete_student_course() {
clear
echo "已选课程列表:"
grep "^$student_id:" "$student_course_file" | cut -d: -f2
read -p "请输入要退选的课程名称: " course_name
# 检查学生是否已选择该课程
if grep -q "^$student_id:$course_name$" "$student_course_file"; then
# 删除学生选修的该门课程
sed -i "/^$student_id:$course_name$/d" "$student_course_file"
echo "退选成功!"
else
echo "您尚未选择该课程!"
fi
read -p "按任意键返回主菜单..." -n 1 -s
student_menu
}
# 主程序入口
login
此外,另有student_info.txt、student_course.txt、courses.txt用于持久化存储文本信息。
测试数据写入脚本如下:
# 学生信息存储文件 student_info.txt
student_info_file="student_info.txt"
echo "1001:student:123456:计算机科学" >> "$student_info_file"
# 教师信息存储文件 teacher_info.txt
teacher_info_file="teacher_info.txt"
echo "teacher:123456" >> "$teacher_info_file"
# 课程信息存储文件 courses.txt
echo "计算机科学" >> "$course_file"
echo "微观经济学" >> "$course_file"
echo "中国古代文学" >> "$course_file"
# 学生选课信息存储文件 student_course.txt(初始为空)
touch "$student_course_file"
student_course.txt(学号:课程名,下方是另外测试的数据)
1001:linux
1001:baidu
1001:huawei
1001:hongmeng
courses.txt(课程名)
计算机科学
微观经济学
中国古代科学
teacher_info.txt
teacher:123456
待优化的地方如下
- 数据验证和处理:
增加更多的数据验证,避免重复的输入和错误的操作。
检查输入的合法性,例如课程名称、学号格式等。 - 安全性:
密码存储应该使用加密方式而不是明文存储。
考虑实现更安全的身份验证机制。 - 代码简化:
函数之间有些冗余代码可以抽取成独立的函数,提高代码复用性和可读性。
使用函数参数传递,减少全局变量的依赖。
但是考虑到是大学生作业使用的,不会真的投入生产,就先这样吧。
33万+

被折叠的 条评论
为什么被折叠?



