學生成績檔案管理系統 預習筆記

2021-10-20 02:13:44 字數 2430 閱讀 1334

系統設計

小結

需要用檔案儲存學生資料

單個儲存物件包含以下屬性

學號姓名

專業四門學科的成績,我這裡就以數學、英語、政治、專業課為例

總分名次

需要乙個學生管理系統,實現增、刪、改、查及排序功能

學生名次應該是是按照總分排序,而且我覺得這是個變動的數值

每次進行增、刪、改的操作時都會影響每個同學的排名

需要使用雙向氣泡排序、希爾排序、快速排序、堆排序來分別實現此功能

普通氣泡排序就是從左往右逐個比對當前數字與後乙個數字大小,如果需求是降序(此處成績排序就是降序排列)那麼碰到比自己大的數字就交換

比如以下陣列

在一次氣泡排序(降序)後就會變成

2作為最小的數字被放在最後

雙向氣泡排序則是在一次迴圈中,從左往右排序一次後,再從右往左排序一次

那麼從右往左時就是遇到比自己小的數字交換位置

原陣列就變為

17作為最大的數字被放在開頭

那麼下一次迴圈左2起始數就是1號位的數字,右起始數就是n-2

當左右為同乙個數字時迴圈結束

這就極大節省了迴圈次數,提高迴圈效率

希爾排序,是插入排序的一種高階排序演算法

通過乙個不斷縮小的增量序列,對無序序列反覆的進行拆分並且對拆分後的序列使用插入排序的一種演算法

所以也叫作「縮小增量排序」或者「遞減增量排序」

通過設定乙個gap值(初始為陣列長度的一半,每次迴圈變為原來的一半,直到0為止),實現大幅度的數字位置跳轉,提高運算效率

以下示意圖就很清楚表述了,首先gap為4,兩兩一對進行排序

排序玩結果如下

gap再變為2,繼續排序,單次迴圈內是插入排序,以第二組為例

首先2和3比較,在用7和2、3比較,接著用6和2、3、7比對,看**合適放在**

排序結果如下

最後gap變為1,就是完整的一次插入排序,而且此時大體上是有序的,插入排序效率會很高

眾所周知快速排序是在一般情況下運算效率最高的排序方式,其是氣泡排序的高階版本

它的基本思想是這樣的

先選乙個元素作為基點pivot 將其餘元素中所有比pivot小的值放到pivot的左邊

將所有比pivot大的值放到pivot的右邊

然後分別對pivot左邊的所有元素、pivot右邊的所有元素從步驟1開始排序依次,直到所有元素完整有序

堆排序邏輯結構是個完全二叉樹,物理儲存結構任然是一位陣列,其指向關係是(根節點下標為0時)通過下標 * 2+1(左子樹)下標 * 2+2(右子樹)來實現的

比如下圖

其對應的儲存結構分別為

其邏輯順序如下,以小根堆為例,大根堆類似,小根堆最後排序完是降序的,也符合題目要求

找到二叉樹的最後乙個非葉結點(下標是陣列長度/2-1)

從這個結點開始逐個遍歷前面的結點,直到根節點遍歷完

對比其左右子樹,當前結點與較小的子節點交換值

對被交換的子節點重複3步驟,直到葉節點(沒有子節點了)為止,實現較大數字逐步向下沉澱

以上是構建小根堆的步驟,接下來是逐步排序

把根節點(此結點肯定是最小的數字)和最後乙個結點(此節點是相對大的數字)交換位置,陣列規模縮小1個結點,重複上述操作

每次構建小根堆都會得出當前陣列中最小的數字,放最後,逐步得出乙個降序的陣列

該專案需求我覺得可以分為三個層面

學生成績檔案管理系統(預習報告)

建立studentdatebase類,在構造方法中對集合的資料進行初始化。通過arraylist方法將學生資訊新增至集合。編寫錄入函式insert 通過呼叫學生資訊集合中的studentdatebase.getstudentslist add students 方法進行對學生資訊的錄入。瀏覽 編寫p...

學生成績檔案管理系統

學生資訊錄入,資訊包括學號 姓名 專業 四門課成績 總分 名次 系統可對學生資訊瀏覽 增加 刪除和修改 按學生成績確定名次及資訊輸出,雙向氣泡排序 希爾排序 快速排序 堆 排序。要求可對學生資訊查詢,根據學號或姓名進行查詢 資訊修改僅可修改四門課成績 檔案訪問學生資訊 新增學生資訊 包括學號 姓名 ...

學生成績管理系統

include include include define n 50 定義符號常量,代表學生人數最大值 int count 0 全域性變數,用於記錄陣列的當前位置 struct student 定義結構體型別,代表學生資訊 void input struct student arr 函式宣告,輸入...