Linux趣事 -- (2.2)學生信息管理系統

這篇是在 http://blog.csdn.net/wjf_1997/article/details/78474118 基礎上繼續完善學生信息管理系統的功能。

實現的功能:增加

一、由於設計問題,表的數據要發生改變,否則會發生問題;所以,以後就用下面的數據形式:

(1)DBCollegeInfo.txt

1

(2)DBStudentInfo.txt

2

(3)DBGradeInfo.txt

3

二、功能描述

增加功能從三個方面進行數據的添加,涉及到的函數有三個:

(1)insert_college_info():通過比較 添加的學院編號 和 已存在的學院編號 比較,如果相等,那麼插入失敗;否則將新添加的數據信息寫入到文件尾部。

(2)insert_stu_info ():通過比較 添加的學生編號 和 已存在的學生編號 比較,如果相等,那麼插入失敗;否則將新添加的數據信息寫到文件尾部。

(3)insert_stugrade_info():通過比較 添加的學生編號 和 已存在的學生編號 比較,如果相等,那麼插入失敗;否則將新添加的數據信息寫到文件尾部。

三、代碼

3.1 insert_college_info()

insert_college_info(){
    show_college_info;
    echo "請輸入要添加的學院編號(若存在,則插入失敗!):"
    read collegeNo
    export existFlag=false
    while read line
    do
        lineCollegeNo=${line/,*/}
        if [ "$lineCollegeNo" = "$collegeNo" ]; then 
        {
            export existFlag=true
            break
        } 
        fi
    done<$DBCollegeInfoPath

    if [ "$existFlag" == "true" ]; then
    {
        export exitFlag=false
        echo "此學院已經存在,插入失敗!"
    }   
    else {
        echo "請輸入學院的名稱:"
        read collegeName
        echo "$collegeNo,$collegeName" >> $DBCollegeInfoPath
        echo "學院記錄插入成功!"
        show_college_info;  
    }
    fi
}

3.2 insert_stu_info()

insert_stu_info(){
    show_stu_info;
    echo "請輸入要添加的學生編號(若存在,則插入失敗!)"
    read studentNo
    export existFlag=false
    while read line
    do 
        lineStuNo=${line/,*/}
        if [ "$lineStuNo" = "$studentNo" ]; then
        {
            export existFlag=true
            break
        }
        fi
    done<$DBStudentInfoPath

    if [ "$existFlag" = "true" ]; then
        echo "輸入的學生編號已經存在,插入失敗!"
    else {
        export existFlag=false
        echo "請輸入學生的姓名:"
        read stuName
        echo "請輸入該學生所在的院校編號(必須是已經有記錄的學院):"
        read stuCollegeNo
        while read line
        do
            collegeNo=${line/,*/}
            if [ "$collegeNo" = "$stuCollegeNo" ]; then
            {
                export existFlag=true
                break
            }
            fi 
        done<$DBCollegeInfoPath

        if [ "$existFlag" = "false" ]; then 
        {
            echo "輸入的學院編號不存在!"
        }
        else {
            echo "請輸入該學生的說明信息( 1.在校inschool 2.休學suspend 3.輟學dropout ):"
            read choice 
            case $choice in
            "1")
            echo "$studentNo,$stuName,$stuCollegeNo,inschool" >> $DBStudentInfoPath
            echo "學生記錄插入成功!"
            show_stu_info;
            ;;
            "2")
            echo "$studentNo,$stuName,$stuCollegeNo,suspend" >> $DBStudentInfoPath
            echo "學生記錄插入成功!"
            show_stu_info;
            ;;
            "3")
            echo "$studentNo,$stuName,$stuCollegeNo,dropout" >> $DBStudentInfoPath
            echo "學生記錄插入成功!"
            show_stu_info;
            ;;
            *)
            echo "Usage:$0{1|2|3}"
            echo "學生記錄插入失敗!"
            show_stu_info;
            ;;
            esac
        }   
        fi

    }
    fi
}

3.3 insert_stugrade_info()

insert_stugrade_info(){
    show_stugrade_info;
    echo "請輸入要添加的學生編號(若不存在,則插入失敗!):"
    read studentNo
    export existFlag=false
    export nowline=0;
    export stuName=""
    while read line
    do 
        lineStudentNo=${line/,*/}
        export nowline=$(($nowline+1))
        if [ "$lineStudentNo" = "$studentNo" ]; then
        {
            export existFlag=true
            export stuName=`echo "$line" | awk -F',' '{print $2}'`
            break
        }
        fi
    done<$DBStudentInfoPath

    if [ "$existFlag" = "false" ]; then
    {
        echo "學生記錄中沒有這個學生,插入失敗!"
    } 
    else {
        export existFlag=false
        echo "請科目名稱:"
        read objectName
        echo "請輸入科目成績(0-100):"
        read gradeResult
        if [ $gradeResult -le  100 ] && [ $gradeResult -ge 0 ]; then
        {
            echo "請輸入該成績的說明信息( 1.期末final 2.補考makeup ):"
            read choice
            case $choice in
            "1")
            echo "$studentNo,$stuName,$objectName,$gradeResult,final" >> $DBStudentGradeInfoPath
            echo "插入成功!"
            show_stugrade_info;
            ;;
            "2")
            echo "$studentNo,$stuName,$objectName,$gradeResult,makeup" >> $DBStudentGradeInfoPath
            echo "插入成功!"
            show_stugrade_info;
            ;;
            *)
            echo "Usage:$0{1|2}"
            echo "插入失敗!"
            show_stugrade_info;
            ;;
            esac    
        }
        else {
            echo "輸入成績不符合要求,插入失敗!"
        }
        fi
    }
    fi
}

四、界面設計


while true 
do 

echo "=========================學生信息管理系統========================="
echo "0.退出"
echo "1.顯示"
echo "2.增加"
echo "3.刪除"
echo "4.修改"
echo "5.查找"
echo "輸入choice:"

read choice
case $choice in

#零、退出
"0")
echo "退出!"
exit 0
;;


#一、顯示(show)
"1")
echo "1.顯示所有學院信息"
echo "2.顯示所有學生信息"
echo "3.顯示所有學生成績信息"
echo "4.顯示學生成績統計結果"
echo "輸入choice:"
read choice 
case $choice in
"1")
show_college_info
;;
"2")
show_stu_info
;;
"3")
show_stugrade_info
;;
"4")
show_stu_grade_info
;;
*)
echo "Usage:$0{1|2|3|4}"
;;
esac ;;


#二、增加(insert)
"2")
echo "1.增加學院信息"
echo "2.增加學生信息"
echo "3.增加學生成績信息"
echo "輸入choice"
read choice
case $choice in
"1")
insert_college_info
;;
"2")
insert_stu_info
;;
"3")
insert_stugrade_info
;;
*)
echo "Usage:$0{1|2|3}"
esac ;;


#三、刪除(delete)
"3")
echo "1.刪除學院信息"
echo "2.刪除學生信息"
echo "3.刪除學生成績信息"
echo "輸入choice"
read choice
case $choice in
"1")
delete_college_info
;;
"2")
delete_stu_info
;;
"3")
delete_stugrade_info
;;
*)
echo "Usage:$0{1|2|3}"
esac ;;

#四、修改(update)
"4")
echo "1.修改學生的姓名"
echo "2.修改學院編號"
echo "輸入choice"
read choice
case $choice in
"1")
update_stuName_info
;;
"2")
update_stuCollege_info
;;
*)
echo "Usage:$0{1|2}"
esac ;;


#五、查找(find)
"5")
find_stu_info
;;



*)
echo "Usage:$0{0|1|2|3|4|5}"
;;
esac
done

分析:區別 echo < 和 echo <<
前者會將目標文件中的內容覆蓋掉,後者直接追加到文件的末尾。

參考資料:
(1)collegeNo=line/,/ {}的用法:
https://www.cnblogs.com/xd502djj/p/3895738.html
http://blog.csdn.net/xcxinghai/article/details/11692675

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章