数组、集合、链表实现学生成绩管理系统

简介: 数组、集合、链表实现学生成绩管理系统

数组、集合、链表实现学生成绩管理系统(JavaSe

数组实现:

功能描述:学号为唯一识别符,不可重复,可进行增加、修改、删除、查看操作、升序输出。

学生类:

package com.lili.StudentManagerSystem.smsChar;
/**
 * 学生实体类
 *
 * @author: QiJingJing
 * @create: 2021/7/19
 */
public class Student {
    /**
     * 学号
     */
    private long id;
    /**
     * 年龄
     */
    private int age;
    /**
     * 姓名
     */
    private String name;
    /**
     * 分数
     */
    private double score;
    public Student() {
    }
    public Student(long id, int age, String name, double score) {
        this.id = id;
        this.age = age;
        this.name = name;
        this.score = score;
    }
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public double getScore() {
        return score;
    }
    public void setScore(double score) {
        this.score = score;
    }
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", age=" + age +
                ", name='" + name + '\'' +
                ", score=" + score +
                '}';
    }
}

学生管理接口:

package com.lili.StudentManagerSystem.smsChar;
/**
 * 学生管理接口
 *
 * @author: QiJingJing
 * @create: 2021/7/19
 */
public interface StudentManager {
    /**
     * 添加一个学生
     *
     * @param student
     * @return: void
     * @author: QijingJing
     * @date: 2021/7/19
     */
    void add(Student student);
    /**
     * 根据学号删除一个学生
     *
     * @param id
     * @return: void
     * @author: QijingJing
     * @date: 2021/7/19
     */
    void delete(long id);
    /**
     * 修改学生信息
     *
     * @param student
     * @return: void
     * @author: QijingJing
     * @date: 2021/7/19
     */
    void update(Student student);
    /**
     * 查询所有学生信息
     */
    void selectAll();
    /**
     * 通过学号查询学生信息
     *
     * @param id
     * @return: com.lili.StudentManagerSystem.smsChar.Student
     * @author: QijingJing
     * @date: 2021/7/19
     */
    Student selectById(long id);
}

学生管理具体实现:

package com.lili.StudentManagerSystem.smsChar;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Objects;
/**
 * 学生管理系统具体实现类
 *
 * @author: QiJingJing
 * @create: 2021/7/19
 */
public class StudentManagerImpl implements StudentManager {
    /**
     * 创建一个默认长度为10的数组存放学生信息
     */
    private Student[] students = new Student[10];
    /**
     * 用于判断数组元素个数,以便及时扩充
     */
    private static int count = 0;
    @Override
    public void add(Student student) {
        if (count >= students.length) {
            // 扩充数组
            students = Arrays.copyOf(students, students.length * 2);
        }
            // 添加学生
            students[count] = student;
            count++;
            selectAll();
    }
    @Override
    public void delete(long id) {
        for (int i = 0; i < count; i++) {
            if (students[i].getId() == id) {
                if (count - 1 - i >= 0) {
                    System.arraycopy(students, i + 1, students, i, count - 1 - i);
                    students[count - 1] = null;
                    count--;
                    break;
                }
            }
        }
        System.out.println("---删除成功---");
        selectAll();
    }
    @Override
    public void update(Student student) {
        for (int i = 0; i < count; i++) {
            if (students[i].getId() == student.getId()) {
                students[i] = student;
                break;
            }
        }
        System.out.println("-----修改成功------");
        selectAll();
    }
    @Override
    public void selectAll() {
        // 排序后输出
        Arrays.stream(students).filter(Objects::nonNull).sorted(Comparator.comparing(Student::getId)).forEach(System.out::println);
    }
    @Override
    public Student selectById(long id) {
        for (int i = 0; i < count; i++) {
            if (students[i].getId() == id) {
                return students[i];
            }
        }
        return null;
    }
}

测试类:

package com.lili.StudentManagerSystem.smsChar;
import java.util.Scanner;
/**
 * @author: QiJingJing
 * @create: 2021/7/19
 */
public class TestStudent {
    private static StudentManagerImpl impl = new StudentManagerImpl();
    private static Scanner input = new Scanner(System.in);
    /**
     * 从键盘录入学生信息
     */
    private static void getStudentInfo() {
        System.out.println("请输入学生的学号:");
        long id = input.nextLong();
        // 先进行判断是否已经存在
        // 判断该学号是否已经存在
        if (impl.selectById(id) != null) {
            System.out.println("----此学号已经存在,请重新操作----");
        } else {
            System.out.println("请输入学生的姓名:");
            String name = input.next();
            System.out.println("请输入学生的年龄:");
            int age = input.nextInt();
            System.out.println("请输入学生的分数:");
            double score = input.nextDouble();
            impl.add(new Student(id, age, name, score));
        }
    }
    /**
     * 从键盘删除学生信息
     */
    private static void delStudentInfo() {
        System.out.println("请输入需要删除的学生学号:");
        long id = input.nextLong();
        if (impl.selectById(id) == null) {
            System.out.println("------此学号不存在,请重新操作------");
        } else {
            // 调用删除方法
            impl.delete(id);
        }
    }
    /**
     * 从键盘修改学生信息
     */
    private static void updateStudentInfo() {
        System.out.println("请输入需要修改的学生学号:");
        long id = input.nextLong();
        if (impl.selectById(id) == null) {
            System.out.println("------此学号不存在,请重新操作------");
        } else {
            System.out.println("请输入新的学生姓名:");
            String name = input.next();
            System.out.println("请输入新的学生年龄:");
            int age = input.nextInt();
            System.out.println("请输入新的学生分数:");
            double score = input.nextDouble();
            impl.update(new Student(id, age, name, score));
        }
    }
    /**
     * 从键盘修改学生信息
     */
    private static void selectStudentInfo() {
        System.out.println("请输入你需要查询的学生学号:");
        long id = input.nextLong();
        Student student = impl.selectById(id);
        if (student == null) {
            System.out.println("-----该学号不存在-----");
        } else {
            System.out.println(student);
        }
    }
    public static void main(String[] args) {
        System.out.println("------欢迎进入学生成绩管理系统------");
        while (true) {
            System.out.println("请选择你要操作的选项\n1.添加学生信息 2.删除学生信息 3.修改学生信息 4.查询单个学生信息");
            int num = input.nextInt();
            if (num == 1) {
                // 调用录入学生信息的方法
                getStudentInfo();
            }
            if (num == 2) {
                delStudentInfo();
            }
            if (num == 3) {
                updateStudentInfo();
            }
            if (num == 4) {
                selectStudentInfo();
            }
        }
    }
}

集合实现(对数组实现稍加修改即可)

接口实现类:

package com.lili.StudentManagerSystem.smsList;
import com.lili.StudentManagerSystem.smsChar.StudentManager;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
/**
 * 学生管理系统具体实现类
 *
 * @author: QiJingJing
 * @create: 2021/7/19
 */
public class StudentManagerImpl2 implements StudentManager2 {
    List<Student2> list = new ArrayList<>();
    @Override
    public void add(Student2 student) {
        list.add(student);
        System.out.println("添加成功");
        selectAll();
    }
    @Override
    public void delete(long id) {
        list.remove(selectById(id));
        System.out.println("------删除成功-----");
        selectAll();
    }
    @Override
    public void update(Student2 student) {
        for (Student2 student2 : list) {
            if (student2.getId() == student.getId()) {
                student2.setAge(student.getAge());
                student2.setName(student.getName());
                student2.setScore(student.getScore());
                break;
            }
        }
        System.out.println("-----修改成功----");
        selectAll();
    }
    @Override
    public void selectAll() {
        list.stream().sorted(Comparator.comparing(Student2::getId)).forEach(System.out::println);
    }
    @Override
    public Student2 selectById(long id) {
        for (Student2 student2 : list) {
            if (student2.getId() == id) {
                return student2;
            }
        }
        return null;
    }
}

测试类:

package com.lili.StudentManagerSystem.smsList;
import com.lili.StudentManagerSystem.smsChar.Student;
import com.lili.StudentManagerSystem.smsChar.StudentManagerImpl;
import java.util.Scanner;
/**
 * @author: QiJingJing
 * @create: 2021/7/19
 */
public class TestStudent2 {
    private static StudentManagerImpl2 impl = new StudentManagerImpl2();
    private static Scanner input = new Scanner(System.in);
    /**
     * 从键盘录入学生信息
     */
    private static void getStudentInfo() {
        System.out.println("请输入学生的学号:");
        long id = input.nextLong();
        // 判断该学号是否已经存在
        if (impl.selectById(id) != null) {
            System.out.println("----此学号已经存在,请重新操作----");
        } else {
            System.out.println("请输入学生的姓名:");
            String name = input.next();
            System.out.println("请输入学生的年龄:");
            int age = input.nextInt();
            System.out.println("请输入学生的分数:");
            double score = input.nextDouble();
            impl.add(new Student2(id, age, name, score));
        }
    }
    /**
     * 从键盘删除学生信息
     */
    private static void delStudentInfo() {
        System.out.println("请输入需要删除的学生学号:");
        long id = input.nextLong();
        if (impl.selectById(id) == null) {
            System.out.println("------此学号不存在,请重新操作------");
        } else {
            // 调用删除方法
            impl.delete(id);
        }
    }
    /**
     * 从键盘修改学生信息
     */
    private static void updateStudentInfo() {
        System.out.println("请输入需要修改的学生学号:");
        long id = input.nextLong();
        if (impl.selectById(id) == null) {
            System.out.println("------此学号不存在,请重新操作------");
        } else {
            System.out.println("请输入新的学生姓名:");
            String name = input.next();
            System.out.println("请输入新的学生年龄:");
            int age = input.nextInt();
            System.out.println("请输入新的学生分数:");
            double score = input.nextDouble();
            impl.update(new Student2(id, age, name, score));
        }
    }
    /**
     * 从键盘修改学生信息
     */
    private static void selectStudentInfo() {
        System.out.println("请输入你需要查询的学生学号:");
        long id = input.nextLong();
        Student2 student = impl.selectById(id);
        if (student == null) {
            System.out.println("-----该学号不存在-----");
        } else {
            System.out.println(student);
        }
    }
    public static void main(String[] args) {
        System.out.println("------欢迎进入学生成绩管理系统------");
        while (true) {
            System.out.println("请选择你要操作的选项\n1.添加学生信息 2.删除学生信息 3.修改学生信息 4.查询单个学生信息");
            int num = input.nextInt();
            if (num == 1) {
                // 调用录入学生信息的方法
                getStudentInfo();
            }
            if (num == 2) {
                delStudentInfo();
            }
            if (num == 3) {
                updateStudentInfo();
            }
            if (num == 4) {
                selectStudentInfo();
            }
        }
    }
}

链表实现:

package com.lili.StudentManagerSystem.smsLink;
import com.lili.StudentManagerSystem.smsChar.Student;
/**
 * 链表实现学生成绩管理系统
 *
 * @author: QiJingJing
 * @create: 2021/7/19
 */
public class Node {
    public static void main(String[] args) {
        Node node = new Node();
        node.add(new Student(1, 12, "13", 12f));
        node.add(new Student(0, 12, "13", 12f));
        node.add(new Student(3, 12, "13", 12f));
        node.select();
        node.update(new Student(0, 112, "113", 112f));
        node.select();
    }
    private StudentNode node = null;
    // 增加学生的方法
    public void add(Student student) {
        if (node == null) {
            node = new StudentNode(student);
        } else {
            node.add(student);
        }
    }
    // 删除一个学生
    public void del(long id) {
        if (node != null) {
            if (node.getStudent().getId() == id) {
                node = node.next;
            } else {
                node.del(id);
            }
        }
    }
    // 修改一个学生
    public void update(Student student) {
        if (node != null) {
            if (node.getStudent().getId() == student.getId()) {
                node.student = student;
            } else {
                node.update(student);
            }
        }
    }
    // 查询所有学生
    public void select() {
        if (node != null) {
            System.out.println(node.getStudent());
            node.select();
        }
    }
    static class StudentNode {
        private Student student;
        private StudentNode next;
        public StudentNode(Student student) {
            this.student = student;
        }
        public Student getStudent() {
            return student;
        }
        // 增加学生的方法
        public void add(Student student) {
            if (this.next == null) {
                this.next = new StudentNode(student);
            } else {
                this.next.add(student);
            }
        }
        // 删除一个学生
        public void del(long id) {
            if (this.next != null) {
                if (this.next.getStudent().getId() == id) {
                    this.next = this.next.next;
                }
            }
        }
        // 修改一个学生
        public void update(Student student) {
            if (this.next != null) {
                if (this.next.getStudent().getId() == student.getId()) {
                    this.next.student = student;
                } else {
                    this.next.update(student);
                }
            }
        }
        // 查询所有学生
        public void select() {
            if (this.next != null) {
                System.out.println(this.next.getStudent());
                this.next.select();
            }
        }
    }
}


目录
相关文章
|
3月前
|
存储 算法 搜索推荐
探索常见数据结构:数组、链表、栈、队列、树和图
探索常见数据结构:数组、链表、栈、队列、树和图
131 64
|
2月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
79 5
|
3月前
|
存储
一篇文章了解区分指针数组,数组指针,函数指针,链表。
一篇文章了解区分指针数组,数组指针,函数指针,链表。
29 0
|
5月前
|
存储 开发者 C#
WPF与邮件发送:教你如何在Windows Presentation Foundation应用中无缝集成电子邮件功能——从界面设计到代码实现,全面解析邮件发送的每一个细节密武器!
【8月更文挑战第31天】本文探讨了如何在Windows Presentation Foundation(WPF)应用中集成电子邮件发送功能,详细介绍了从创建WPF项目到设计用户界面的全过程,并通过具体示例代码展示了如何使用`System.Net.Mail`命名空间中的`SmtpClient`和`MailMessage`类来实现邮件发送逻辑。文章还强调了安全性和错误处理的重要性,提供了实用的异常捕获代码片段,旨在帮助WPF开发者更好地掌握邮件发送技术,提升应用程序的功能性与用户体验。
86 0
|
5月前
|
存储 Java 开发者
揭秘!HashMap底层结构大起底:从数组到链表,再到红黑树,Java性能优化的秘密武器!
【8月更文挑战第24天】HashMap是Java集合框架中的核心组件,以其高效的键值对存储和快速访问能力广受开发者欢迎。在JDK 1.8及以后版本中,HashMap采用了数组+链表+红黑树的混合结构,实现了高性能的同时解决了哈希冲突问题。数组作为基石确保了快速定位;链表则用于处理哈希冲突;而当链表长度达到一定阈值时,通过转换为红黑树进一步提升性能。此外,HashMap还具备动态扩容机制,当负载因子超过预设值时自动扩大容量并重新哈希,确保整体性能。通过对HashMap底层结构的深入了解,我们可以更好地利用其优势解决实际开发中的问题。
141 0
|
5月前
|
存储 Java 程序员
"揭秘HashMap底层实现:从数组到链表,再到红黑树,掌握高效数据结构的秘密武器!"
【8月更文挑战第21天】HashMap是Java中重要的数据结构,采用数组+链表/红黑树实现,确保高效查询与更新。构造方法初始化数组,默认容量16,负载因子0.75触发扩容。`put`操作通过计算`hashCode`定位元素,利用链表或红黑树处理冲突。`get`和`remove`操作类似地定位并返回或移除元素。JDK 1.8优化了链表转红黑树机制,提升性能。理解这些原理能帮助我们更高效地应用HashMap。
53 0
|
5月前
|
存储 Java
【Java集合类面试十】、HashMap中的循环链表是如何产生的?
在多线程环境下,HashMap在扩容时如果发生条件竞争,元素的插入顺序可能形成循环链表,导致死循环。
|
5月前
|
存储 算法 Java
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
50 0
|
6月前
|
存储
数组与链表有什么区别
数组与链表有什么区别
|
7月前
|
存储 算法 Java
数组与链表
数组与链表