【问题标题】:School Systems Java Code: cannot transfer data from one class to another学校系统 Java 代码:无法将数据从一个班级传输到另一个班级
【发布时间】:2020-06-12 04:16:37
【问题描述】:

我的任务是用 Java 创建一个学校系统编码作业。 以下是项目要求:

我们需要保持所学的课程及其各自的成绩;添加带有成绩的课程,打印所有课程和平均成绩。假设一个学生在整个课程中学习的课程不超过 30 门。对于教师来说,我们需要维护当前教授的课程,并且能够添加或删除所教授的课程。假设一名教师同时教授的课程不超过 5 门。

我是 Java 新手。

这是我的代码:

主类

package com.company;
import java.util.Scanner;

interface getTheName {

    String getName();
    String getRole();

}

public class Main {

    public static void main(String[] args) {
        Information sys = new Information();
        Sensei sys1 = new Sensei();
        Trainee sys2 = new Trainee();
        Courses sys3 = new Courses();
        Scanner sc = new Scanner(System.in);
        System.out.println("Welcome to Alan's Dojo begin the process for building your own ninja school!");
        while (true) {
            try {

                System.out.println("[1] Add Trainee");
                System.out.println("[2] Add Sensei");
                System.out.println("[3] Add course");
                System.out.println("[4] assign teacher");
                System.out.println("[5] Enroll Trainee");
                System.out.println("[6] Show courses");
                System.out.println("[7] Show Trainees");
                System.out.println("[8] Show Senseis");
                System.out.println("[9] Show all Ninjas");
                System.out.println("[10] Add marks");
                System.out.println("[11] Show marks");
                System.out.println("[12] exit program");
                int menu = sc.nextInt();
                sc.nextLine();

                int senseiID, traineeID, courseID, mark;
                switch (menu) {
                    case 1:
                        System.out.println("Enter trainee name: ");
                        sys.addTrainee(sc.nextLine());
                        //sys2.addTrainee(sc.nextLine());
                        break;
                    case 2:
                        System.out.println("Enter sensei name: ");
                        //sys.addSensei(sc.nextLine());
                        sys.addSensei(sc.nextLine());
                        break;
                    case 3:
                        System.out.println("Enter course name : ");
                        sys.addCourses(sc.nextLine());
                        //sys3.addCourses(sc.nextLine());
                        break;
                    case 4:
                        System.out.println("Enter sensei id : ");
                        senseiID = sc.nextInt();
                        System.out.println("Enter course id : ");
                        courseID = sc.nextInt();
                        //sys.teachCourse(senseiID, courseID);

                        sys1.teachCourse(senseiID, courseID);
                        break;
                    case 5:
                        System.out.println("Enter trainee id : ");
                        traineeID = sc.nextInt();
                        System.out.println("Enter course id : ");
                        courseID = sc.nextInt();
                        //sys.enrollTrainee(traineeID, courseID);
                        sys2.enrollTrainee(traineeID, courseID);
                        break;
                    case 6:
                        //sys.showCourses();
                        sys3.showCourses();
                        break;
                    case 7:
                        //sys.showTrainees();
                        sys2.showTrainees();
                        break;
                    case 8:
                        //sys.showSenseis();
                        sys1.showSenseis();
                        break;
                    case 9:
                        sys.showNames();
                        break;
                    case 10:
                         System.out.println("Enter course id : ");
                         courseID = sc.nextInt();
                         System.out.println("Enter trainee id : ");
                         traineeID = sc.nextInt();
                         System.out.println("Enter mark : ");
                         mark = sc.nextInt();
                         sys.markTrainee(courseID, traineeID, mark);
                         break;
                    case 11:
                         System.out.println("Enter trainee id : ");
                         traineeID = sc.nextInt();
                         System.out.println("Enter course id : ");
                         courseID = sc.nextInt();
                         sys.showMarks(traineeID, courseID);
                         break;
                    case 12:
                         System.out.println("Please come back to Alan's Dojo soon!");
                         return;
                    default:
                        sc.nextLine();
                }
                sc.nextLine();
            } catch (Exception ex) {
                sc.nextLine();
            }

        }
    }
}

信息类

package com.company;

public class Information {

    public getTheName allNames[];
    public int n_name;
    public Trainee allTrainees[];
    public int n_trainee;
    public Sensei allSenseis[];
    public Courses allCourses[];
    public int n_sensei;
    public int n_course;
    public int allMarks[];
    public int n_mark;
    public int mark;


    public Information()
    {
        allNames = new getTheName[30];
        allTrainees = new Trainee[30];
        allCourses = new Courses[30];
        allSenseis = new Sensei[5];
        allMarks = new int[100];
        n_course = 0;
        n_name = 0;
        n_sensei = 0;
        n_trainee = 0;
        n_mark = 0;
    }
    public void addTrainee(String name)
    {
        allTrainees[n_trainee++] = new Trainee(name);
        allNames[n_name++] = allTrainees[n_trainee-1];
    }
    public void addSensei(String name)
    {
        allSenseis[n_sensei++] = new Sensei(name);
        allNames[n_name++] = allSenseis[n_trainee-1];
    }
    public void addCourses(String name)
    {
        allCourses[n_course++] = new Courses(name);

    }


    public void teachCourse(int senseiID,int courseID)
    {
        allCourses[courseID].setSensei(allSenseis[senseiID]);
    }

    public void enrollTrainee(int traineeID,int courseID)
    {
        allCourses[courseID].addTrainee(allTrainees[traineeID]);
    }

    public void markTrainee(int courseID,int traineeID,int mark)
    {
        allCourses[courseID].addTraineeMark(allTrainees[traineeID]);
        this.mark = mark;
    }


    public void showCourses()
    {
        System.out.println("Course list:");
        for(int i = 0; i<n_course; i++)
        {
            System.out.println("Course id" + i + " :" + allCourses[i].getName());
        }
    }

    public void showTrainees()
    {
        System.out.println("Trainees list:");
        for(int i = 0; i <n_trainee; i++)
        {
            System.out.println("Trainees id" + i + " :" + allTrainees[i].getName());
        }
    }
    public void showSenseis()
    {
        System.out.println("Sensei list:");
        for(int i = 0; i<n_sensei; i++)
        {
            System.out.println("Sensei id" + i + " :" + allSenseis[i].getName());
        }
    }
    public void showNames()
    {
        System.out.println("Name list:");
        for(int i = 0; i<n_name; i++)
        {
            System.out.println(allNames[i].getRole() + ":" + allNames[i].getName());
        }
    }

    public void showMarks(int traineeID, int courseID)
    {
        System.out.println("Marks:");

        System.out.println(allCourses[courseID].getName() + " " + allTrainees[traineeID].getName() + " " + mark);
    }
}

忍者班

package com.company;

public class Ninja implements getTheName{

    public getTheName allNames[];
    public int n_name;
    public Trainee allTrainees[];
    public int n_trainee;
    public Sensei allSenseis[];
    public Courses allCourses[];
    public int n_sensei;
    public int n_course;
    public int allMarks[];
    public int n_mark;
    public int mark;

    public int id;
    protected  String name;

    public Ninja(String p_name) {
        name=p_name;
    }

    public Ninja() {
        allNames = new getTheName[30];
        allTrainees = new Trainee[30];
        allCourses = new Courses[30];
        allSenseis = new Sensei[5];
        allMarks = new int[100];
        n_course = 0;
        n_name = 0;
        n_sensei = 0;
        n_trainee = 0;
        n_mark = 0;
    }




    public void addTrainee(String name)
    {
        allTrainees[n_trainee++] = new Trainee(name);
        allNames[n_name++] = allTrainees[n_trainee-1];
    }
    public void addSensei(String name)
    {
        allSenseis[n_sensei++] = new Sensei(name);
        allNames[n_name++] = allSenseis[n_trainee-1];
    }
    public void addCourses(String name)
    {
        allCourses[n_course++] = new Courses(name);

    }


    public void teachCourse(int senseiID,int courseID)
    {
        allCourses[courseID].setSensei(allSenseis[senseiID]);
    }

    public void enrollTrainee(int traineeID,int courseID)
    {
        allCourses[courseID].addTrainee(allTrainees[traineeID]);
    }

    public void markTrainee(int courseID,int traineeID,int mark)
    {
        allCourses[courseID].addTraineeMark(allTrainees[traineeID]);
        this.mark = mark;
    }


    public void showCourses()
    {
        System.out.println("Course list:");
        for(int i = 0; i<n_course; i++)
        {
            System.out.println("Course id" + i + " :" + allCourses[i].getName());
        }
    }

    public void showTrainees()
    {
        System.out.println("Trainees list:");
        for(int i = 0; i <n_trainee; i++)
        {
            System.out.println("Trainees id" + i + " :" + allTrainees[i].getName());
        }
    }
    public void showSenseis()
    {
        System.out.println("Sensei list:");
        for(int i = 0; i<n_sensei; i++)
        {
            System.out.println("Sensei id" + i + " :" + allSenseis[i].getName());
        }
    }
    public void showNames()
    {
        System.out.println("Name list:");
        for(int i = 0; i<n_name; i++)
        {
            System.out.println(allNames[i].getRole() + ":" + allNames[i].getName());
        }
    }

    public void showMarks(int traineeID, int courseID)
    {
        System.out.println("Marks:");

        System.out.println(allCourses[courseID].getName() + " " + allTrainees[traineeID].getName() + " " + mark);
    }





    public  String getName(){
        return name;
    }

    @Override
public String getRole() {
    return null;
}

    //public  void setName(String p_name){name=p_name;}
    //public  String get_role(){return"Ninja";}
}

老师类

package com.company;

public class Sensei extends Ninja implements getTheName{

    public getTheName allNames[];
    public int n_name;
    public Trainee allTrainees[];
    public int n_trainee;
    public Sensei allSenseis[];
    public Courses allCourses[];
    public int n_sensei;
    public int n_course;
    public int allMarks[];
    public int n_mark;


    public Sensei() {
        super();
        allNames = new getTheName[30];
        allTrainees = new Trainee[30];
        allCourses = new Courses[30];
        allSenseis = new Sensei[5];
        allMarks = new int[100];
        n_course = 0;
        n_name = 0;
        n_sensei = 0;
        n_trainee = 0;
        n_mark = 0;
    }


    public  String getName(){
        return name;
    }

    public void addSensei(String name)
    {
        allSenseis[n_sensei++] = new Sensei(name);
        allNames[n_name++] = allSenseis[n_trainee-1];
    }


    public void teachCourse(int senseiID,int courseID)
    {
        allCourses[courseID].setSensei(allSenseis[senseiID]);
    }

    public void showSenseis()
    {
        System.out.println("Sensei list:");
        for(int i = 0; i<n_sensei; i++)
        {
            System.out.println("Sensei id" + i + " :" + allSenseis[i].getName());
        }
    }

    public  String getRole() {
        return"Sensei";
    }

    public Sensei(String p_name) {
        super(p_name);
    }
}

实习班

package com.company;

public class Trainee extends Ninja implements getTheName{

    public getTheName allNames[];
    public int n_name;
    public Trainee allTrainees[];
    public int n_trainee;
    public Sensei allSenseis[];
    public Courses allCourses[];
    public int n_sensei;
    public int n_course;
    public int allMarks[];
    public int n_mark;
    public int mark;

    public Trainee() {
        super();
        allNames = new getTheName[30];
        allTrainees = new Trainee[30];
        allCourses = new Courses[30];

        allMarks = new int[100];
        n_course = 0;
        n_name = 0;

        n_trainee = 0;
        n_mark = 0;


        //listTrainees = new Trainee[30];
    }

    public void addTrainee(String name)
    {
        allTrainees[n_trainee++] = new Trainee(name);
        allNames[n_name++] = allTrainees[n_trainee-1];
    }



    public void enrollTrainee(int traineeID,int courseID)
    {
        allCourses[courseID].addTrainee(allTrainees[traineeID]);
    }

    public void markTrainee(int courseID,int traineeID,int mark)
    {
        allCourses[courseID].addTraineeMark(allTrainees[traineeID]);
        this.mark = mark;
    }




    public void showTrainees()
    {
        System.out.println("Trainees list:");
        for(int i = 0; i <n_trainee; i++)
        {
            System.out.println("Trainees id" + i + " :" + allTrainees[i].getName());
        }
    }

    public void showNames()
    {
        System.out.println("Name list:");
        for(int i = 0; i<n_name; i++)
        {
            System.out.println(allNames[i].getRole() + ":" + allNames[i].getName());
        }
    }
    public void showMarks(int traineeID, int courseID)
    {
        System.out.println("Marks:");
        System.out.println(allCourses[courseID].getName() + " " + allTrainees[traineeID].getName() + " " + mark);
    }

    public Trainee(String p_name) {
        super(p_name);
    }
}

课程班

package com.company;

public class Courses {

    public getTheName allNames[];
    public int n_name;
    public Trainee allTrainees[];
    public int n_trainee;
    public Sensei allSenseis[];
    public Courses allCourses[];
    public int n_sensei;
    public int n_course;
    public int allMarks[];
    public int n_mark;
    public int mark;

    private String name;
    public Sensei SenseiAssigned;
    public Trainee listTrainees[];
    public int n_student;

    public Courses(String p_name) {


        name = p_name;
        listTrainees = new Trainee[10000];
        n_student = 0;
    }

    public Courses() {
        allNames = new getTheName[50];
        allTrainees = new Trainee[30];
        allCourses = new Courses[50];
        allSenseis = new Sensei[5];
        allMarks = new int[100];
        n_course = 0;
        n_name = 0;
        n_sensei = 0;
        n_trainee = 0;
        n_mark = 0;
    }

    public void addCourses(String name)
    {
        allCourses[n_course++] = new Courses(name);

    }


    public void showCourses()
    {
        System.out.println("Course list:");
        for(int i = 0; i<n_course; i++)
        {
            System.out.println("Course id" + i + " :" + allCourses[i].getName());
        }
    }


    public String getName(){
        return name;
    }


    // public  void setName(String p_name){name=p_name;}
    public void setSensei(Sensei prof) {
        SenseiAssigned = prof;
    }

    public void addTrainee(Trainee t) {
        for (int i = 0; i < n_student; ++i) {
            if (listTrainees[i] == t)
                return;
        }
        listTrainees[n_student++] = t;
    }

    public void addTraineeMark(Trainee t) {
        listTrainees[n_student++] = t;
    }

}

问题

所以我目前遇到的问题是,当我尝试打印课程、老师或学员的名称时,它不会正确打印。如果我将“将教师或受训者或课程方法添加到他们自己班级中各自的位置但随后受训者标记的打印停止工作,则可以解决此问题。

编辑

输出:

https://photos.app.goo.gl/btsFQPCiHP9NgeVq5

因此,我也需要将程序添加到受训者、老师和课程列表中。与标记系统一起保持完整。

【问题讨论】:

  • 我不明白你的问题。你能展示一些示例输出吗?
  • 请分享样本输入、预期输出和实际输出。 “它不会正确打印”并没有告诉读者任何这些关键信息。
  • 添加的输出图像

标签: java inheritance multiple-inheritance


【解决方案1】:

我重新设计了您的 Main 类,使其能够正确执行,并使用方法来最大限度地减少要调试和理解的代码量。

我重命名了您的界面以更符合 Java 准则。

这是我所做的更改。

  1. 我重新设计了您的 main 方法,以便在用户选择 12 时退出。

  2. 我将菜单移到方法getMenuSelection 中,并添加了错误检查。

  3. 我创建了两个方法,inputIntegerinputText,分别允许用户输入整数和文本。我在inputInteger 方法中添加了错误检查。

  4. 我摆脱了所有 Scanner nextInt 方法调用。您应该只使用nextLine 方法。它使控制台输入更易于理解,更重要的是,更易于调试。

我希望我可以向您展示您的模型课程之一,但在继续之前我有几个问题。

  1. sensiID、courseID 和 traineeID 来自哪里?您是否创建它们,因为您在创建模型行时从不要求用户输入它们?用户应该如何知道这些 id 是什么?

这是您的 Main 类的代码。

package com.company;

import java.util.Scanner;

interface NameRole {
    String getName();
    String getRole();
}

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Welcome to Alan's Dojo begin the process for building your own ninja school!");
        int menu = getMenuSelection(sc);
        while (menu != 12) {
            processMenuOption(sc, menu);
            menu = getMenuSelection(sc);
        }
        sc.close();
    }

    private static int getMenuSelection(Scanner sc) {
        int menu = -1;
        while (menu < 0) {
            System.out.println("[1] Add Trainee");
            System.out.println("[2] Add Sensei");
            System.out.println("[3] Add course");
            System.out.println("[4] Assign teacher");
            System.out.println("[5] Enroll Trainee");
            System.out.println("[6] Show courses");
            System.out.println("[7] Show Trainees");
            System.out.println("[8] Show Senseis");
            System.out.println("[9] Show all Ninjas");
            System.out.println("[10] Add marks");
            System.out.println("[11] Show marks");
            System.out.println("[12] Exit program");

            String input = sc.nextLine().trim();
            try {
                menu = Integer.valueOf(input);
                if (menu < 1 || menu > 12) {
                    System.err.println("The menu options must be a number from 1 to 12");
                    menu = -1;
                }
            } catch (NumberFormatException e) {
                System.err.println("The menu option must be a number");
                menu = -1;
            }
        }
        return menu;
    }

    private static void processMenuOption(Scanner sc, int menu) {
        switch (menu) {
        case 1:
            String name = inputText(sc, "Enter trainee name: ");
            break;
        case 2:
            name = inputText(sc, "Enter sensei name: ");
            break;
        case 3:
            name = inputText(sc, "Enter course name : ");
            break;
        case 4:
            int sensiID = inputInteger(sc, "Enter sensei id : ");
            int courseID = inputInteger(sc, "Enter course id : ");
            break;
        case 5:
            int traineeID = inputInteger(sc, "Enter trainee id : ");
            courseID = inputInteger(sc, "Enter course id : ");
            break;
        case 6:
            break;
        case 7:
            break;
        case 8:
            break;
        case 9:
            break;
        case 10:
            courseID = inputInteger(sc, "Enter course id : ");
            traineeID = inputInteger(sc, "Enter trainee id : ");
            int mark = inputInteger(sc, "Enter mark : ");
            break;
        case 11:
            traineeID = inputInteger(sc, "Enter trainee id : ");
            courseID = inputInteger(sc, "Enter course id : ");
            break;
        case 12:
            System.out.println("Please come back to Alan's Dojo soon!");
            break;
        default:
            break;
        }
    }

    private static int inputInteger(Scanner sc, String question) {
        int answer = -1;
        while (answer < 0) {
            System.out.print(question);
            String input = sc.nextLine().trim();
            try {
                answer = Integer.valueOf(input);
            } catch (NumberFormatException e) {
                System.err.println("You must type a number");
                answer = -1;
            }
        }
        return answer;
    }

    private static String inputText(Scanner sc, String question) {
        System.out.print(question);
        return sc.nextLine().trim();
    }
}

【讨论】:

  • ID 是在添加新老师、实习生或课程时创建的,以查看不同事物的 ID,例如:当您选择“显示实习生”时,它会打印出每个实习生的 ID你输入的
  • @Raygos 好的,ID 是如何创建的?它们是一个序列(0、1、2 等)还是以其他方式创建的?
  • 是的,它们是一个序列,例如输入的学员的名字是“Id = 0”
猜你喜欢
  • 2020-10-08
  • 2023-03-21
  • 2017-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多