📄 studentroster.java
字号:
package GradeManagement.model;
import GradeManagement.ComputeGrade;
import GradeManagement.Persistent;
import java.util.Iterator;
//学生花名册类
class StudentRoster {
private Object elementData[];
private int size = 0; // 已注册学生数
//创建一个空花名册,初始容量为10
public StudentRoster() {
this(10);
}
// 创建一个初始大小的花名册
public StudentRoster(int initialCapacity) {
if (initialCapacity < 0)
throw new IllegalArgumentException("无效大小参数: " + initialCapacity);
this.elementData = new Object[initialCapacity];
}
// 动态调整花名册容量
public synchronized void ensureCapacity(int minCapacity) {
int oldCapacity = elementData.length;
if (minCapacity > oldCapacity) {
Object oldData[] = elementData;
int newCapacity = (oldCapacity * 3)/2 + 1;
if (newCapacity < minCapacity)
newCapacity = minCapacity;
elementData = new Object[newCapacity];
System.arraycopy(oldData, 0, elementData, 0, size);
}
}// 方法ensureCapacity结束
//返回花名册中学生人数
public synchronized int size() {
return size;
}
//检测花名册中否有学生登记
public synchronized boolean isEmpty() {
return size == 0;
}
//查找学号为xxx的学生并返回学生对象
public synchronized Object findById(Object student) {
for (int i = 0; i < size; i++)
if (student.equals(elementData[i]))
return elementData[i];
return null;
}
//查找学号为xxx的学生成功返回下标,失败返回-1
private synchronized int findByIdPosi(Object student) {
for (int i = 0; i < size; i++)
if (student.equals(elementData[i]))
return i;
return -1;
}
//增加一个学生
public synchronized boolean addStudent(Object student) {
ensureCapacity(size + 1);
elementData[size++] = student;
return true;
}
//删除一个学生
public synchronized Object deleteStudent(Object student) {
int pos = findByIdPosi(student);
if (pos==-1) return null; //此学号不存在,不能删除
Object oldValue = elementData[pos];
int numMoved = size - pos - 1;
if (numMoved > 0)
System.arraycopy(elementData, pos+1, elementData, pos, numMoved);
elementData[--size] = null;
return oldValue;
} // 方法deleteStudent结束
// 返回所有学生
public synchronized Object[] getAllStudent() {
Object[] result = new Object[size];
System.arraycopy(elementData, 0, result, 0, size);
return result;
} // 方法getAllStudent()结束
// 清空花名册
public synchronized void clearRoster() {
for (int i = 0; i < size; i++)
elementData[i] = null;
size = 0;
}
//计算全部学生总成绩
public synchronized int sum() {
int sum = 0;
if( !this.isEmpty())
for( int i=0; i < size; i++)
sum += ((ComputeGrade)elementData[i]).sum();
return sum;
}
// 计算全体学生平均成绩
public synchronized int average() {
if( !this.isEmpty())
return sum()/size;
else return -1;
} // 方法结束
// 排序
public synchronized void sort() {
if( !this.isEmpty())
for (int pass = 1; pass < size(); pass++) {
for (int pair = 1; pair < size(); pair++) {
if (((Comparable)elementData[pair - 1]).compareTo(
(Comparable)elementData[pair]) >0 ){
swap(elementData,pair-1,pair);
}
} // 内层for结束
try{
Thread.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
} // 外层for结束
// java.util.Arrays.sort(elementData,0,size());
} // sort方法结束
private static void swap(Object x[], int a, int b) {
Object t = x[a];
x[a] = x[b];
x[b] = t;
} // swap方法结束
//载入所有学生信息
public synchronized boolean readRecords() {
for (int i = 0; i < size; i++)
if (!((Persistent)elementData[i]).readRecord())
return false;
return true;
}
//保存所有学生信息
public synchronized boolean writeRecords() {
for (int i = 0; i < size; i++)
if(!((Persistent)elementData[i]).writeRecord()) return false;
return true;
}
public synchronized Object getIndex(int index) {
rangeCheck(index);
return elementData[index];
}
public Iterator iterator() {
return new Itr();
}
public synchronized Object get(int index) {
rangeCheck(index);
return elementData[index];
}
private synchronized void rangeCheck(int index) {
if (index<0 || index>=size)
throw new IndexOutOfBoundsException("Index: "+index+
",Size: "+size);
}
//迭代器类,提供顺序访问学生成绩籍
private class Itr implements Iterator {
int cursor = 0;
int lastRet = -1;
public boolean hasNext() {
return cursor != size();
}
public Object next() {
try {
Object next = get(cursor);
lastRet = cursor++;
return next;
} catch(IndexOutOfBoundsException e) {
return null;
}
}
public void remove() {}
} // 内部类Itr结束
} // 类StudentRoster结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -