学生成绩表如图所示
问题分析:采用顺序存储结构,所以可以继承顺序表Sqlist(顺序表Sqlist的建立在之前写过了),简化类的描述。
总体思路是先建立顺序表,然后进行增删改查的功能。
一个结点中包含5个数据元素,所以建立StudentNode结点如下:
import java.util.Scanner;
public class StudentNode {
private int number; //学号
private String name; //姓名
private String sex; //性别
private double english; //大学英语成绩
private double math; //高等数学成绩
public StudentNode(){ //无参数时的构造函数
this(0,null,null,0,0);
}
public StudentNode(int number,String name,String sex,double english,double math){
this.number=number;
this.name=name;
this.sex=sex;
this.english=english;
this.math=math;
}
public StudentNode(Scanner sc){
this(sc.nextInt(),sc.next(),sc.next(),sc.nextDouble(),sc.nextDouble());
}
}
建立顺序表并实现增删改查功能
import java.util.*;
public class StudentManageSystem extends Sqlist{
//按顺序构造顺序表,其中参数maxsize指的是顺序表的最大存储空间容量
public StudentManageSystem(int maxsize,int n)throws Exception{
super(maxsize); //调用父类构造函数
Scanner sc=new Scanner(System.in);
for(int i=0;i<n;i++){ //创建含有n个数据元素的顺序表
StudentNode node=new StudentNode(sc);
insert(node); //将新的数据元素插入到顺序表的表尾
}
}
//重载父类insert()方法在顺序表表尾插入一个学生信息
public void insert(StudentNode node)throws Exception{
super.insert(length(), node);
}
//覆盖父类get()方法,从顺序表中取出指定学号的学生信息,返回StudentNode对象
public StudentNode get(int number)throws Exception{
for(int i=0;i<length();i++){ //遍历顺序表
StudentNode node=(StudentNode) super.get(i); //调用父类Sqlist的get方法
if(node.number==number)
return node; //返回指定学生信息
}
throw new Exception("学号"+number+"不存在");
}
//覆盖父类的remove方法
public void remove(int number)throws Exception{
for(int i=0;i<length();i++){
StudentNode node=(StudentNode) super.get(i);
if(node.number==number)
super.remove(i);
return; //提前退出函数
}
throw new Exception("学号"+number+"不存在");
}
//重载父类display方法,输出顺序表中的所有数据元素
public void display(){
for(int i=0;i<length();i++){
try{
StudentNode node =(StudentNode) super.get(i);
displayNode(node);
}
catch(Exception e){}
}
}
//输出一个数据元素的信息
public void displayNode(StudentNode node){
System.out.println("学号:"+node.number+"姓名:"+node.name+"性别:"+node.sex+"英语成绩:"+
node.english+"数学成绩:"+node.math);
}
public static void main(String[] args)throws Exception{
int maxsize=100;
Scanner sc=new Scanner(System.in);
System.out.println("输入学生总数");
int n=sc.nextInt();
System.out.println("请按学号,姓名,性别,英语成绩,数学成绩顺序输入学生信息");
StudentManageSystem L=new StudentManageSystem(maxsize,n);
System.out.println("输出学生信息");
L.display();
System.out.println("输入要查询学生的学号");
L.displayNode(L.get(sc.nextInt()));
System.out.println("输入要删除学生的学号");
L.remove(sc.nextInt());
System.out.println("删除成功");
L.display();
System.out.println("输入需要增加的学生信息");
L.insert(new StudentNode(sc));
L.display();
}
}
输出结果