簡體   English   中英

用Java設計一個學生管理工具

[英]Design a student management tool in Java

這是我教授的模擬測試,我在用 Java 編寫時遇到了麻煩。

這是問題:

需要 ADT 來管理課程中的學生集合。 您可以假設任何課程的學生都不超過 100 人。 學生的記錄由 ID(字符串)、姓名(字符串)和 GPA(雙精度)組成。 學生 ID 沒有重復,但可能有兩個或兩個以上具有相同姓名和/或 GPA 的學生。

創建一個新的 StudentCollection 類型(相當於 Java 中的一個類)。 除構造函數外,您的 StudentCollection 類型必須支持以下 3 個公共操作(可以根據需要隨意添加其他私有操作 - 但它們的作用域必須是私有的)

void addStudent(Student std):將新的學生標准添加到您的收藏中。 如果您的收藏中已有與 std 具有相同 ID 的學生,請不要執行任何操作。

學生 searchByName(String name):搜索學生集合,返回姓名中完全包含姓名的任何學生(區分大小寫)。 示例:“ABC”完全包含“ABC”; “ABC”完全包含“A”; “ABC”完全包含“C”,“ABC DEF”完全包含“CD”; “ABC”不完全包含“CB”; “ABC”不完全包含“abc”。 如果有多個匹配的學生,您的方法可以返回任何學生。 如果沒有匹配的學生,則返回 null。 int rankStudent(String sID):返回ID為sID的學生在該集合中的排名。 排名是根據學生的 GPA 完成的。 GPA 最高的學生的排名為 1。在此示例中,假設有 4 個 GPA 值 [9.0, 8.5, 7.0, 8.5]。 GPA = 9.0 的學生排名為 1,GPA = 8.5 的學生排名為 2(有 2 個學生的排名相同為 2),而 GPA = 7.0 的學生排名為 4。如果沒有找到具有所提供 sID 的學生,則返回 -1。

創建一個 StudentCollection 對象並在 main 方法(客戶端代碼)中使用它。 您的客戶端代碼必須一次或多次調用上述所有 3 個公共方法。

不允許您使用 Java Collection Framework 類解決此問題。 此問題的代碼必須存儲在單個文件 StudentCollection.java 中。

我在這里選擇的 ADT 是 Set。 由於指令不允許我使用Java Collection Framework,我必須手動實現所有功能。

但問題是:對於第一個函數,問題要求我編寫void addStudent(Student std) ,在實現 Set ADT 時,我無法將用戶定義的數據類型Student傳遞到函數中,我已經做了一些研究和我們必須傳入 Set 參數而不是用戶定義的數據類型。 這是學生類的代碼:

static class Student {
        private String ID;
        private String name;
        private double GPA;
        Student(String ID, String name, double GPA) {
            this.ID = ID;
            this.name = name;
            this.GPA = GPA;
        }
    }

讓我們說,我們把在Student類,那么就必須要一些getters and setters的內部Student類。 但是這個問題限制了要實現的公共函數的數量,除了上面三個指定函數之外的所有函數都必須是private getter 和 setter 如何是private 是否可以?

總體問題是:如何將用戶定義的數據類型添加到集合中? 如果我的解釋不清楚,我很抱歉。 如果您有任何其他問題,請回復此問題。

這是我一直在研究的代碼:

import java.util.HashSet;
import java.util.Set;

public class StudentCollection {
    static Set<Student> manage = new HashSet<>();

    static class Student {
        private String ID;
        private String name;
        private double GPA;
        Student(String ID, String name, double GPA) {
            this.ID = ID;
            this.name = name;
            this.GPA = GPA;
        }
    }

    public static void addStudent(Student std) {
        manage.add(std);
    }

//    public static Student searchByName(String name) {
//
//    }
//
//    public static int rankStudent(String sID) {
//
//    }

    public static void main(String[] args) {

        Student std = new Student("s387", "nam", 3.7);

        addStudent(std);
       
    }
}

Student類必須是公開的,有公開的 getter。 否則,您無法創建Student實例來添加學生。

我繼續編寫了addStudent方法。 我將剩下的代碼留給你完成。

您必須查看課堂筆記以進行驗證,但這就是我開始編寫StudentCollection類的方式。 除了main方法之外,沒有靜態字段或方法。

public class StudentCollection {

    public static void main(String[] args) {
        StudentCollection sc = new StudentCollection();
        sc.addStudent(sc.new Student("10001", "George", 9.0));
    }
    
    private int studentLength;
    
    private Student[] students;
    
    public StudentCollection() {
        this.studentLength = 0;
        this.students = new Student[100];
    }
    
    public void addStudent(Student student) {
        for (int index = 0; index < studentLength; index++) {
            if (student.getSID().equals(students[index].getSID())) {
                return;
            }
        }
        
        students[studentLength++] = student;
    }
    
    public Student searchByName(String name) {
        
    }
    
    public int rankStudent(String sID) {
        
    }
    
    public class Student {
        
        private final double gpa;
        
        private final String sID, name;

        public Student(String sID, String name, double gpa) {
            this.sID = sID;
            this.name = name;
            this.gpa = gpa;
        }

        public double getGpa() {
            return gpa;
        }

        public String getSID() {
            return sID;
        }

        public String getName() {
            return name;
        }
        
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM