简易学生成绩管理系统_顺序存储结构(Java实现)

*文中内容来源于《数据结构 --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实现)

  • 5
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值