日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

题目1:学生成绩档案管理系统(实验准备)

發布時間:2025/3/21 windows 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 题目1:学生成绩档案管理系统(实验准备) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據結構課程實踐系列

題目1:學生成績檔案管理系統(實驗準備)

題目2:隱式圖的搜索問題(A*算法解決八數碼)

題目3:文本文件單詞的檢索與計數(實驗準備)

文章目錄

  • 數據結構課程實踐系列
    • 題目1:學生成績檔案管理系統(實驗準備)
    • 題目2:隱式圖的搜索問題(A*算法解決八數碼)
    • 題目3:文本文件單詞的檢索與計數(實驗準備)
  • 聲明
    • 實驗要求
  • 編程語言以及開發環境的選擇
    • 所需知識
  • 所需知識導出
    • DAO運用
    • 簡單排序算法
      • 雙向冒泡排序
      • 快速排序
      • 希爾排序
      • 堆排序

聲明

實驗要求

  • 學生信息錄入,信息包括學號、姓名、專業、四門課成績、總分、名次;
  • 系統可對學生信息瀏覽、增加、刪除和修改;
  • 按學生成績確定名次及信息輸出,雙向冒泡排序、希爾排序、快速排序、堆排序
  • 要求可對學生信息查詢,根據學號或姓名進行查找;
  • 信息修改僅可修改四門課成績;
  • 文件存取學生信息。

編程語言以及開發環境的選擇

編程語言:java
開發環境:IDE使用的是idea,jdk版本為1.8

所需知識

一些簡單排序算法,以及DAO

所需知識導出

DAO運用

DAO (Database Access Object) 數據訪問對象,將數據對象常用的訪問方法(增刪改查)封裝在指定的對象中,該對象就稱為DAO對象,DAO對象是數據層構建的基礎,由業務層對象進行調用,DAO中定義的數據訪問方法和業務無關。
DAO設計模式主要分為三層:

  • 顯示層:主要使用JSP/Servlet進行頁面效果的顯示
  • 業務層:(Business Object,數據對象)會將多個原子性的DAO操作進行組合,組合成一個完整的業務邏輯。
  • 數據層:(DAO,Data Access Object,數據庫訪問對象)提供多個原子性的DAO操作,例如:增、刪、改、查,都是原子性操作。
  • 其實也就是利用一個Dao對象,然后這個對象里面實現了相應的增刪改查,不讓用戶去直接接觸到數據庫。感覺和windows中線性虛擬地址的運用有著相同的味道

    簡單排序算法

    雙向冒泡排序

    傳統冒泡排序運作如下:(從后往前)

  • 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
  • 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對。在這一點,最后的元素應該會是最大的數
  • 針對所有的元素重復以上的步驟,除了最后一個。
  • 持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較
  • 雙向冒泡排序算法的運作如下:

  • 傳統冒泡氣泡排序的雙向進行,先讓氣泡排序由左向右進行,再來讓氣泡排序由右往左進行,如此完成一次排序的動作
  • 使用left與right兩個旗標來記錄左右兩端已排序的元素位置。
  • public List<Student> doubleBubbleSort(List<Student> studentList){List<Student> list=studentList;Student student=null;int left=0,right=studentList.size()-1;while(left<right){for(int i=left+1;i<=right;i++){if(list.get(left).getSum()<list.get(i).getSum()){student=list.get(i);list.set(i,list.get(left));list.set(left,student);}}left++;for(int i=right-1;i>=left;i--){if(list.get(right).getSum()>list.get(i).getSum()){student=list.get(i);list.set(i,list.get(right));list.set(right,student);}}right--;}return list;}

    快速排序

    快速排序使用分治法(Divide and conquer)策略來把一個序列(list)分為兩個子序列(sub-lists)。
    快速排序算法的運作如下:

  • 從數列中挑出一個元素,稱為“基準”(pivot),
  • 重新排序數列,所有比基準值小的元素擺放在基準前面,所有比基準值大的元素擺在基準后面(相同的數可以到任何一邊)。在這個分區結束之后,該基準就處于數列的中間位置。這個稱為分區(partition)操作
  • 遞歸地(recursively)把小于基準值元素的子數列和大于基準值元素的子數列排序。
  • 遞歸到最底部時,數列的大小是零或一,也就是已經排序好了。這個算法一定會結束,因為在每次的迭代(iteration)中,它至少會把一個元素擺到它最后的位置去。

    public List<Student> quickSort(List<Student> studentList){List<Student> list=studentList;quickSort1(list,0,list.size()-1);return list;}public void quickSort1(List<Student> studentList,int left,int right){if(left<right){int i=left,j=right;Student student=studentList.get(left);double x=student.getSum();while(i<j){while((i<j)&&(studentList.get(j).getSum()<x)){j--;}if(i<j){studentList.set(i,studentList.get(j));i++;}while((i<j)&&(studentList.get(i).getSum()>x)){i++;}if(i<j){studentList.set(j,studentList.get(i));j--;}}studentList.set(i,student);quickSort1(studentList,left,i-1);quickSort1(studentList,i+1,right);}}

    希爾排序

    希爾排序是非穩定排序算法,把記錄按下標的一定增量分組,對每組使用直接插入排序算法排序;隨著增量逐漸減少,每組包含的關鍵詞越來越多,當增量減至1時,整個文件恰被分成一組,算法便終止。

    public List<Student> shellSort(List<Student> studentList){List<Student> list=studentList;Student student=null;int j;for (int gap = list.size() / 2; gap > 0; gap /= 2) {for (int i = gap; i < list.size(); i++) {student=list.get(i);double tmp=student.getSum();for (j = i; j >= gap && tmp>list.get(j-gap).getSum(); j -= gap) {list.set(j,list.get(j-gap));}list.set(j,student);}}return list;}

    堆排序

    堆排序(英語:Heapsort)是指利用堆這種數據結構所設計的一種排序算法。堆積是一個近似完全二叉樹的結構,并同時滿足堆積的性質:即子結點的鍵值或索引總是小于(或者大于)它的父節點。

    public List<Student> heapSort(List<Student> studentList){List<Student> list=studentList;int len = list.size();buildMaxHeap(list, len);for (int i = len - 1; i > 0; i--) {swap(list, 0, i);len--;heapify(list, 0, len);}return list;}private void buildMaxHeap(List<Student> studentList, int len) {for (int i = (int) Math.floor(len / 2); i >= 0; i--) {heapify(studentList, i, len);}}private void heapify(List<Student> studentList, int i, int len) {int left = 2 * i + 1;int right = 2 * i + 2;int largest = i;if (left < len && studentList.get(left).getSum() < studentList.get(largest).getSum()) {largest = left;}if (right < len && studentList.get(right).getSum() < studentList.get(largest).getSum()) {largest = right;}if (largest != i) {swap(studentList, i, largest);heapify(studentList, largest, len);}}private void swap(List<Student> studentList, int i, int j) {Student student=studentList.get(i);studentList.set(i,studentList.get(j));studentList.set(j,student);}

    總結

    以上是生活随笔為你收集整理的题目1:学生成绩档案管理系统(实验准备)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。