java编程实现学生成绩管理系统,采用顺序存储结构

学生成绩表如图所示


问题分析:采用顺序存储结构,所以可以继承顺序表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();  
    }  
}

输出结果


  • 13
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值