*文中内容来源于《数据结构 --Java语言描述》(第二版) 刘小晶 杜选 主编
*此系列文章作为学习记录,若文中内容有误,请大家指出,谢谢
通过编程实现学生成绩管理系统。此系统具有查询、修改、删除等功能。
学生信息结点类描述
import java.util.Scanner;
//学生成绩表系统中的数据,作为顺序表的数据元素(listElemm[i])
public class StudentNode {
public int number; //学号
public String name; //姓名
public String sex; //性别
public double english; //大学英语成绩
public double math; //高数成绩
public StudentNode(){ //无参时的构造函数
this(0, null, null, 0.0, 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.Scanner;
public class StudentManagerSystem extends SqList{
//按顺序构造顺序表,其中参数maxSize指的是顺序表的最大存储空间容量
public StudentManagerSystem(int maxSize, int n) throws Exception{
super(maxSize);
Scanner sc = new Scanner(System.in);
for (int i = 1; i <= n; i++){ //创建含有n个数据元素的顺序表
StudentNode node = new StudentNode(sc);
if (node != null)
insert(node); //将新的数据元素插入顺序表的表尾
else
i--; //若不成功,则不计数
}
}
//覆盖父类的get方法,从顺序表中取出指定学号的学生信息,并返回一个StudentNode对象
public StudentNode get(int number) throws Exception{
for (int i = 0; i < length(); i++){ //遍历顺序表
StudentNode node = (StudentNode) super.get(i); //调用父类的get方法
if (node.number == number)
return node; //包含指定的学号,返回该学生的信息
}
throw new Exception("学号" + number + "不存在"); //抛出异常
}
//重载了父类insert方法,在顺序表的表尾插入一个学生信息
public void insert(StudentNode node) throws Exception{
super.insert(this.length(), node); //调用父类的insert方法
}
//覆盖父类的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 = 1000; //设定最大存储空间容量
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生的总数:");
int n = sc.nextInt();
System.out.println("请按学号、姓名、性别、大学英语和高数的顺序输入学生信息:");
StudentManagerSystem L = new StudentManagerSystem(maxSize, n); //建立顺序表
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(); //输出
}
}
关于代码中的SqList的相关代码,放在我的另一篇文章中。
请移步至数据结构_线性表_顺序表(Java实现)