学生成绩档案管理系统
一、实验要求
1、学生信息录入,信息包括学号、姓名、专业、四门课成绩、总分、名次;
2、系统可对学生信息浏览、增加、删除和修改;
3、按学生成绩确定名次及信息输出,双向冒泡排序、希尔排序、快速排序、堆排序。
4、要求可对学生信息查询,根据学号或姓名进行查找;
5、信息修改仅可修改四门课成绩;
6、文件存取学生信息。
二、编程语言及开发环境
java
IDE使用的是idea,jdk版本为1.8
三、项目设计思路
1.双向冒泡排序
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;
}
2.快速排序
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);
}
}
3.希尔排序
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;
}
4.堆排序
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);
}