基於Linux Shell腳本學生管理系統的設計與實現


湖北民族大學2021年春季考查課試卷

A或B

A 卷

課 程

Linux系統及編程

使用班級

0320203-04

制卷份數

 

姓名

 

命題人

張華

試卷審核人

 

單位審核人

 

答題紙數

 

班級

 

題 號

合計

學號

 

評 分

                     

分數

 

閱卷人

                     

 

考查形式為論文撰寫,要求如下:

  1. 內容

以一個實際Linux Shell腳本管理系統為核心,從系統產生背景、問題提出、問題分析、系統分析、系統設計、系統實現等方面進行闡述。

  1. 具體要求

1、題名要求簡明扼要,能反映論文主題;摘要必須說明研究目的、方法、結果、結論,字數200字左右為宜,忌與引言及結論中的內容雷同;

2、 字數3000~5000 字

3、 論文參考架構 (請注意各級內容的字體格式,以示區分)
論文標題 (三號黑體)
班級、學號、姓名 (五號宋)

摘 要(五號黑): 內容(五號宋)

關鍵字(五號黑): 內容(五號宋)

1 引言

  1. 系統設計   (小三黑)
    1. 設計原則 (四號黑)

    正文(五號宋)

    1. 功能模塊划分
  2. 系統實現
    1. 實現技術
    2. 具體實現
    3. 性能優化(如果有的話)
  3. 結束語

 

評分標准:

內容主題符合20分,系統設計30分,系統實現30分,格式規范20分,合計100分

 

基於Linux Shell腳本學生管理系統的設計與實現

目錄

1.緒論    3

1.1 研究背景以及意義    3

1.2 Linux特點    3

1.3 Shell腳本介紹    3

2.腳本設計    3

2.1 系統概要設計    3

2.2 系統功能模塊    3

2.2.1 模塊層次圖    3

2.2.2 數據存儲體系    4

2.2.3 系統流程圖    4

2.2.4 菜單設計    5

3.腳本實現    6

3.1 登錄注冊模塊    6

3.2 增加數據模塊舉例(添加學院)    7

3.3 刪除數據模塊舉例(刪除學生)    8

3.4 修改數據模塊舉例(更新學院)    9

3.5 查詢數據模塊舉例(成績統計)    11

總結與展望    13

 

 

1.緒論

1.1研究背景以及意義

Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基於POSIXUnix的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的Unix工具軟件、應用程序和網絡協議。它支持32位和64位硬件。Linux繼承了Unix以網絡為核心的設計思想,是一個性能穩定的多用戶網絡操作系統。

Shell的開發與使用是Linux操作系統日漸普及的產物。而對於微型Linux系統shell的研究是Linux研究的重點。利用微型的shell,不僅可以讓用戶更容易操作Linux,也可以幫助用戶理解Linux工作原理,同時保護內核的安全性。本文對shell的研究包括對其功能的了解,並實現對shell的列表、管道、輸入重定向、輸出重定向等命令功能,可以比較全面地認識shell解釋器,編寫出可以實現的各種功能的具體代碼,這樣來編寫一個簡易的Linux

1.2 Linux特點

Linux采取了許多安全技術措施,其中有對讀、寫進行權限控制、審計跟蹤、核心授權等技術,這些都為安全提供了保障。Linux由於需要應用到網絡服務器,這對穩定性也有比較高的要求,實際上Linux在這方面也十分出色。Linux系統在設計的時候就是針對多用戶環境的,所以對系統文件,用戶文件都做了明確地區分,每個文件都有不同的用戶屬性,作為一個普通用戶,通常只能讀寫自己的文件,而對一般的系統文件只能讀取不能改動,一些敏感的系統文件甚至連讀取都是被禁止的,這種設計從根本上保證了系統的安全性,即使一個用戶文件出現了問題,也不會殃及整個系統。

1.3 Shell腳本介紹

shell是一個命令解釋器,它在操作系統的最外層,負責直接與用戶對話,把用戶的輸入解釋給操作系統,並處理各種各樣的操作系統的輸出結果,輸出到屏幕返回給用戶。這種對話方式可以是交互的方式(從鍵盤輸入命令,可以立即得到shell的回應),或非交互(執行腳本程序)的方式。

2.腳本設計

2.1 腳本概要設計

概要設計的主要任務是設計軟件結構和數據結構。設計軟件結構的具體任務是:將一個復雜系統按功能進行模塊划分、建立模塊的層次結構及調用關系、確定模塊間的接口及人機界面等。數據結構設計包括數據特征的描述、確定數據的結構特性、以及數據庫的設計。顯然,概要設計建立的是目標系統的邏輯模型,與計算機無關。總體設計包括系統模塊結構設計和計算機物理系統的配置方案設計。

整體分為三個功能模塊,分別是學院信息管理、學生信息管理以及成績信息管理,用戶登錄后可通過輸入相應編號進入不同的功能模塊,相應能對各模塊的數據功能進行增刪改查操作,且能將操作永久存儲至系統磁盤。

2.2 系統功能模塊

shell是一個命令解釋器,它在操作系統的最外層,負責直接與用戶對話,把用戶的輸入解釋給操作系統,並處理各種各樣的操作系統的輸出結果,輸出到屏幕返回給用戶。這種對話方式可以是交互的方式(從鍵盤輸入命令,可以立即得到shell的回應),或非交互(執行腳本程序)的方式。

2.2.1模塊層次圖

shell是一個命令解釋器,它在操作系統的最外層,負責直接與用戶對話,把用戶的輸入解釋給操作系統,並處理各種各樣的操作系統的輸出結果,輸出到屏幕返回給用戶。這種對話方式可以是交互的方式(從鍵盤輸入命令,可以立即得到shell的回應),或非交互(執行腳本程序)的方式。

 

2.1 模塊層次圖

2.2.2數據存儲體系

數據存儲使用文件儲存方式實現,分為用戶密碼存儲文件、學院存儲文件、學生存儲文件以及分數存儲文件,都單獨存放於各自文件中,需要時使用awk命令讀取。

2.2 數據文件分布圖

2.2.3系統流程圖

系統主要以CRUD操作為主,每次執行增加操作時,需要檢測數據庫中是否已經存在;刪除操作時,需要查詢數據庫中是否已有相應的數據;改修數據時既需要判斷用戶輸入的數據是否存在,也需要判斷修改后的數據是否符合條件;查詢時,直接按行讀取數據庫中的數據,而后顯示即可,但查詢成績時,需要對數據進行排序而后輸出前三名或總分前五名。下面是具體的流程圖:

2.3 系統流程圖

2.2.4菜單設計

菜單設計中,主要以功能模塊為主,交互式友好度為輔下面詳見程序菜單運行圖:

2.4.1 登錄菜單

2.4.2 主菜單

 

2.4.3 學院管理菜單

2.4.4 學生管理菜單

2.4.5 成績管理菜單

3.腳本實現

3.1 登錄注冊模塊

登錄功能的實現,首先讓用戶輸入用戶名,再根據用戶輸入的用戶名使用awk命令組合管道,在數據庫中尋找對應的密碼,再取出存入變量中,而后再判斷用戶輸入的密碼是否與數據庫中的密碼一致,如果一致則登錄成功,進入歡迎頁面,如果失敗則提醒用戶登錄失敗,需要重新輸入用戶名以密碼。

 

login() {

    read -p "請輸入用戶名:" user_name

    a="$(cat file | awk '$1=="'$user_name'"' | cut -d ' ' -f2-)"

    b=$(echo "$a" | sed 's/ //g')

    cat file | awk '$1=="'$user_name'"' &>/dev/null

    if [ $? -eq 0 ]; then

        read -s -p "請輸入你的密碼:" user_passwd

        c=$(echo $user_passwd | sed 's/ //g')

        if [[ "$b" == "$c" ]]; then

            clear

            echo "登錄成功!"

        else

            clear

            echo "密碼驗證不正確,請選擇 1. 重新創建 2. 重新登錄 3. 退出系統"

            read choice

            case $choice in

            1)

                create_user

                ;;

            2)

                login

                ;;

            3|*)

                echo "退出系統"

                exit 0

                ;;

            esac

        fi

    else

        echo "該用戶不存在,請選擇 1. 重新創建 2. 重新登錄 3. 退出系統"

        #創建用戶

        clear

        read choice

        case $choice in

        1)

            create_user

            ;;

        2)

            login

            ;;

        3|*)

            echo "退出系統"

            exit 0

            ;;

        esac

    fi

    #登錄成功,跳轉至歡迎頁

    Welcome

}

 

3.1.1 創建用戶

3.1.2 登錄成功

3.2增加數據模塊舉例(添加學院)

學院信息管理模塊中,主要是對數據規范性做文章,當添加學院信息時,需要檢測新添加的學院是否存在於數據庫中,且各字段不能為空,所以一般在增刪改查中需要編寫大量的數據校驗代碼。

添加學院校驗代碼:

add_school() {

    read -p "學院編號:" school_num

    #防止輸入空格

    while [ "$school_num" = '' ]; do

        read -p "輸入的學院編號不能為空,請重新輸入學院編號:" school_num

    done

    while grep -w "$school_num" "$schools_db" >/dev/null; do

        echo "已經存在該編號的學院了,請改用其他編號!"

        read -p "學院編號:" school_num

    done

    read -p "學院名稱:" school_name

    #防止輸入空格

    while [ "$school_name" = '' ]; do

        read -p "輸入的學院名稱不能為空,請重新輸入學院名稱:" school_name

    done

    #符合規則,將其寫入到數據庫中

    echo -e "$school_num,\t$school_name,\r" >>$schools_db

}

 

3.2.1 添加學院

3.2.2 添加學院時輸入已存在的數據

3.3刪除數據模塊舉例(刪除學生)

刪除模塊較為簡單,只需要用戶輸入數據后,進行一次查詢判斷即可完成,如果存在數據則刪除,如果數據不存在則提示數據不存在。

#2.刪除學生

del_student() {

    read -p "請輸入要刪除的學生的學號:" num

    echo "該學生的信息為:"

    grep "^$num" $students_db

    read -p "確定刪除嗎?[yes|no]" choice

    case "$choice" in

    yes)

        sed -i -e "/^$num/d" $students_db

        if [ "$?" -eq 0 ]; then

            echo "刪除成功"

        else

            echo "不存在該條記錄或者刪除失敗"

        fi

        ;;

    no)

        :

        ;;

    *)

        echo "請輸入[yes|no]"

        del_student

        ;;

    esac

}

 

3.3 刪除學生

3.4修改數據模塊舉例(更新學院)

相對較為復雜的是修改學院,因為其涉及判斷輸入編號以及字段是否為空、以及輸入字段不存在等相關校驗信息,且修改時可能還會涉及多表修改,具體代碼為:

#5.修改學院信息

update_school() {

    echo "--------------------------"

    read -p "輸入學院編號:" school_num

    #防止輸入空格

    while [ "$school_num" = '' ]; do

        read -p "輸入有誤,請重新。輸入學院編號:" school_num

    done

    while ! grep -w "$school_num" "$schools_db" >/dev/null; do

        echo "不存在該編號的學院,請輸入編號存在的學院編號: "

        read -p "輸入學院編號:" school_num

        #防止輸入空格

        while [ "$school_num" = '' ]; do

            read -p "輸入有誤,請重新。輸入學院編號:" school_num

        done

    done

    echo "--------------------------"

    echo -e "編號\t學院\t"

    grep -w $school_num $schools_db

    echo "--------------------------"

    read -p "要修改的字段信息::" str1

    #防止輸入空格

    while [ "$str1" = '' ]; do

        read -p "輸入有誤,請重新。要修改的字段信息::" str1

    done

    while ! grep -w "$school_num,.*," "$schools_db" | grep -w "$str1" >/dev/null; do

        echo "不存在該字段,請重新輸入:"

        read str1

        #防止輸入空格

        while [ "$str1" = '' ]; do

            read -p "輸入有誤,請重新。要修改的字段信息::" str1

        done

    done

    read -p "修改后的字段信息" str2

    #防止輸入空格

    while [ "$str2" = '' ]; do

        read -p "輸入有誤,請重新。修改后的字段信息:" str2

    done

    read -p "確定修改嗎?[y|n]" choice

    case "$choice" in

    yes|y)

        sed -i "/${school_num#,}/ s/$str1/$str2/" $schools_db

        if [ "$?" -eq 0 ]; then

            echo "修改成功"

            echo "--------------------------"

            echo "修改后的學院信息"

            echo -e "編號\t學院\t"

            cat $schools_db

            if [ "$str1" = "$school_num" ]; then #如果修改的是學院編號還要修改學生表里的學院編號

                sed -i "/${school_num#,}/ s/$str1/$str2/" $students_db

            fi

        else

            echo "修改失敗"

        fi

        ;;

    no|n)

        :

        ;;

    *)

        echo "請輸入[yes|no]"

        del_student

        ;;

    esac

}

    修改學院模塊會涉及schools_db數據庫與students_db數據庫的聯合查詢,確保數據有效性。

3.4 修改學院流程圖

 

3.5查詢數據模塊舉例(成績統計)

查詢數據模塊中比較有特色的是成績統計功能,這里主要研究的是統計各科目的前三名和個人總成績前五,這里使用awk命令加管道,再利用sed命令取出前幾條數據將其輸出。

#6.個人總成績前5名排序

sort_score_sum_five() {

    echo "-----------總成績前15---------------"

    printf "學號\t總成績\t排名\t\n"

    awk -F"," '{ary[$1]+=$4} END{for(key in ary) print key "," ary[key]",\t"}' $scores_db | sort -r -n -t',' -k 2 | awk -F"," '{print $1 ",\t" $2",\t" NR ",\t"}' | sed -n '1,5p'

    echo "--------------------------"

}

 

#7.每個學科的前3

such_course_sort_score() {

    awk 'BEGIN{FS=","}{ary[$3]=$3} END{for(key in ary) print ary[key]}' $scores_db >temp

    size=$(cat temp | wc -l)

    top=1

    while [ "$top" -le "$size" ]; do

        var=$(sed -n "$top p" temp)

        grep "$var," $scores_db | sort -r -n -t "," -k 4 | sed -n '1,3p' | awk 'BEGIN{FS="," ; printf "科目\t學號\t姓名\t排名\t\n"}{printf $3 "\t" $1 "\t" $2 "\t" NR "\t\n"}' | column -t

        echo ""

        top=$(($top + 1))

    done

    rm -rf temp

}

 

3.5.1 每科的前3

3.5.2 個人總成績前5

 

 

總結與展望

在互聯網和Linux系統不斷發展的今天,以Linux系統為代表的服務器技術及產品得到了極大的推廣, Shell腳本程序也是花樣翻新層出不窮。通過這次設計,我拓寬了知識面,鍛煉了能力,綜合素質得到較大提高。基於Linux Shell腳本學生管理系統設計的基本目的,在於通過理論與實際的結合進一步提高思想覺悟,將以前學習的知識串聯起來並進一步鞏固。

在本次論文設計的 Shell腳本開發過程中,也學習到了很多軟件工程領域的規范化的開發方法、數據存儲同時也鍛煉了自己查找資料和文檔撰寫的能力。在需求分析階段,我根據所學Linux系統及編程理論知識,特別是需求分析、總體設計、詳細設計部分的知識,和其中的分析和建模的方法,設計了需要實現的基本功能。提出

本項目所要實現的目標,系統性能、安全性、可靠性方面的要求等。在系統設計階段,我們又仔細復習教材中

關於概要設計中應用的相關方法、應注意的幾個問題和概要設計階段的目標,在需求分析的基礎上有提出了更

具體的可行性分析和實現方案。

通過這次開發使自己對知識的運用能力得到提升,而且還鍛煉了我的自學能力,更重要的是培養了觀

察、分析和解決問題的實際工作能力,對以后的工作將會起到較大作用。

 

論文源文件:

https://xiaochengzi.lanzoui.com/i1sZPs2dn8j

程序源文件:

https://xiaochengzi.lanzoui.com/iB1Zds2dpkd


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM