JAVA实战:学生选课管理系统

一.学生选课管理系统简介

首先定义了两个类:Student和Course。Student类表示学生,包含学生的姓名、学号和已选修的课程列表。Course类表示课程,包含课程的编号、名称和选修该课程的学生列表。

在Student类中,定义了构造方法用于初始化学生的姓名和学号,并创建了一个空的课程列表。还定义了获取姓名、学号和课程列表的方法,以及添加课程和显示选课结果的方法。其中,添加课程方法会将课程添加到学生的课程列表中,并调用课程的addStudent方法将学生添加到课程的学生列表中。

在Course类中,定义了构造方法用于初始化课程的编号和名称,并创建了一个空的学生列表。还定义了获取编号、名称和学生列表的方法,以及新增学生的方法。在新增学生的方法中,会判断学生列表中是否已经包含该学生,如果不包含,则将学生添加到学生列表中,并调用学生的enrollCourse方法将课程添加到学生的课程列表中。

然后定义了一个ManagementSystem类用于驱动整个程序。在该类中,首先创建了学生和课程的列表。然后通过一个循环,不断询问用户选择的操作:1.注册学生;2.添加课程;3.学生选课;4.查看选课结果;0.退出系统。根据用户的选择进行相应的操作,包括注册学生、添加课程、学生选课、查看选课结果等。其中,注册学生和添加课程会依次询问用户输入学生的学号、姓名或课程的编号、名称,并进行相应的处理。而学生选课和查看选课结果会根据用户输入的学号或课程编号查找对应的学生或课程,然后进行相应的操作。

整个代码的思路是通过Student和Course两个类来表示学生和课程,通过ManagementSystem类来驱动整个程序的运行,并提供相应的操作方法。通过使用ArrayList和List来存储学生和课程对象,实现了学生选课管理系统的基本功能。

二.Student类

第一部分代码解析:

下面这段代码使用了import语句,用于导入java.util包下的ArrayList和List类,同时定义Student的类。定义了一个私有的String型的实例变量name和私有的int型的实例变量id,最后定义了一个名为courses的List实例变量,用来存储Course对象。

import java.util.ArrayList;
import java.util.List;
class Student {
	private String name;//学生名字
	private int id;//学号
	private List<Course> courses;//选修课程列表
第二部分代码解析:

下面这段代码定义了一个带有两个参数name和id的构造函数Student。定义getName和getId、getCourses的方法的方法用来返回name和id、courses的值。

	public Student(String name, int id) {
		this.name = name;
		this.id = id;
		this.courses = new ArrayList<>();
	}
    public String getName() {
		return name;
	}
	public int getId() {
		return id;
	}
	public List<Course> getCourses() {
		return courses;
	}
第三部分代码解析:

下面这段代码定义了一个名为addCourse的方法,用来向courses中添加Course对象。定义了一个名为displayEnrollment的方法,用来输出学生的姓名、学号和已选修的课程。并使用for-each循环遍历courses列表中的Course对象,并输出每个课程的编号和名称。最后再定义了一个名为enrollCourse的方法,用来向courses中添加Course对象,并将学生添加到Course对象的学生列表中。

    public void addCourse(Course course) {
		courses.add(course);
	}
	public void displayEnrollment() {
		System.out.println("学生姓名:" + name + ",学号:" + id + ",已选修的课程:");
		for (Course course : courses) {
			System.out.println("课程编号:"+course.getCode()+",课程名称:"+course.getCourseName());
		}
	}
	public void enrollCourse(Course course) {
	        if (!courses.contains(course)) {
	            courses.add(course);
	            course.addStudent(this);
	        }
	    }
}

总结:这段代码实现了一个学生选课系统,可以创建学生对象,添加课程到学生的课程列表中,并展示学生的选课情况。 

三.Course类

第一部分代码解析:

下面这段代码使用了import语句,用于导入java.util包下的ArrayList和List类,以便在代码中使用这些类。同时定义了Course类,包含了code,coursename和students等私有属性。其中,code和coursename用于存储课程的编号和名称,students用于存储选修该课程的学生。

import java.util.ArrayList;
import java.util.List;
class Course {  
    private String code;  
    private String coursename;  
    private List<Student> students; 
 第二部分代码解析:

下面这段代码定义了Course类的构造方法。构造方法接收两个参数,分别是code和name,用于初始化课程的编号和名称。在构造方法中,将students初始化为一个空的ArrayList对象。分别定义了getCode()方法和getCourseName()方法、getStudents()方法,用于获取课程的编号和课程的名称、参加该课程的学生列表。

public Course(String code, String name) {  
        this.code = code;  
        this.coursename = name;  
        this.students = new ArrayList<>();  
    }  
    public String getCode() {  
       return code;  
   }  
    public String getCourseName() {  
        return coursename;  
    }  
    public List<Student> getStudents() {  
      return students;  
   }  
第三部分代码解析:

下面这段代码定义了enrollStudent()方法,用于将学生添加到选修该课程的学生列表中。还定义了addStudent()方法,用于将一个学生添加到选修该课程的学生列表中,并且在添加成功后,还会调用该学生的enrollCourse()方法,将该课程添加到学生的选课列表中。

  public void enrollStudent(Student student) {  
      students.add(student);  
    }
	public void addStudent(Student student) {
		if (!students.contains(student)) {
            students.add(student);
            student.enrollCourse(this);
        }
		
	}  

}

总体来说,这段代码定义了一个课程类Course,可以用于创建课程对象,并管理选修该课程的学生。

四.ManagementSystem类

第一部分代码解析:

导入需要使用的类,包括ArrayList和Scanner。定义了一个名为ManagementSystem的类。创建了两个ArrayList对象和Scanner对象,分别用来存储学生和课程、读取用户输入。并定义了一个名为main的方法,并且将其设置为静态方法,该方法是程序的入口点。同时创建了一个ManagementSystem对象,调用run方法,开始程序的执行,run方法是程序的主要逻辑部分,使用一个无限循环,不断接受用户的操作。

import java.util.ArrayList;
import java.util.Scanner;

class ManagementSystem {  
    private static ArrayList<Student> students = new ArrayList<>();  
    private static ArrayList<Course> courses = new ArrayList<>();  
    Scanner scanner = new Scanner(System.in);  
  
    public static void main(String[] args) {  
    	ManagementSystem main = new ManagementSystem();  
        main.run();  
    }  
  
第二部分代码解析:

在循环中打印菜单选项,并根据用户的选择调用相应的方法。用户输入一个选项,保存在choice变量中。调用nextInt方法读取用户输入的整数。调用nextLine方法读取用户输入的剩余部分(包括换行符),以防止nextInt方法读取到换行符造成错误。根据用户选择的选项,使用switch语句调用相应的方法。

 public void run() {  
        while (true) {  
           
        	System.out.println("请选择操作:");  
            System.out.println("1. 注册学生");  
            System.out.println("2. 添加课程");  
            System.out.println("3. 学生选课");  
            System.out.println("4. 查看选课结果");  
            System.out.println("0. 退出系统");  
            System.out.print("请输入选项:");  
            int choice = scanner.nextInt();  
            scanner.nextLine();
            switch (choice) {
            case 1:
                registerStudent();
                break;
            case 2:
                addCourse();
                break;
            case 3:
                enrollCourse();
                break;
            case 4:
                displayEnrollment();
                break;
            case 0:
                System.out.println("谢谢使用,再见!");
                return;
            default:
                System.out.println("无效选项,请重新选择。");
        }
        System.out.println();
    }
}
第三部分代码解析:

定义了一个registerStudent方法用于注册学生,提示用户输入学生学号和姓名,并使用nextInt和next方法读取用户输入。并定义一个布尔变量isRegistered,用于判断学号是否已经存在。如果学号不存在,则创建一个Student对象,并将其添加到学生列表中。否则提示学号已存在。遍历学生列表,检查学号是否已存在。如果学号已存在,则提示用户重新输入学号,并将isRegistered设为true。最后registerStudent方法结束。

private void registerStudent() {  
        System.out.print("请输入学生学号:");  
        int id = scanner.nextInt();  
        System.out.print("请输入学生姓名:");  
        String name= scanner.next();  
        boolean isRegistered = false;  
        if (!isRegistered) {  
            Student newStudent = new Student(name, id);  
            students.add(newStudent);  
            System.out.println("学生注册成功!姓名:" + name + ",学号:" + id);  
        } else {  
            System.out.println("学生注册失败,学号已存在!");  
        }  
        for (Student student : students) {  
            if (student.getId()==id) {  
                System.out.println("学号已存在,请重新输入!");  
                isRegistered = true;  
                break;  
            }
    } 
 }
  
第四部分代码解析:

定义了一个addCourse方法用于添加课程。提示用户输入课程编号和名称,并使用next方法读取用户输入。再定义一个布尔变量isAdded,用于判断课程编号是否已经存在。遍历课程列表,检查课程编号是否已存在。如果课程编号已存在,则提示用户重新输入课程编号,并将isAdded设为true。如果课程编号不存在,则创建一个Course对象,并将其添加到课程列表中。否则提示课程编号已存在。最后addCourse方法结束。

 private void addCourse() {  
        System.out.print("请输入课程编号:");  
        String code = scanner.next();  
        System.out.print("请输入课程名称:");  
        String name = scanner.next();  
        boolean isAdded = false;  
        for (Course course : courses) {  
            if (course.getCode().equals(code)) {  
                System.out.println("课程已存在,请重新输入!");  
                isAdded = true;  
                break;  
            }  
        }  
        if (!isAdded) {  
            Course newCourse = new Course(code, name);  
            courses.add(newCourse);  
            System.out.println("课程添加成功!编号:" + code + ",名称:" + name);  
        } else {  
            System.out.println("课程添加失败,编号已存在!");  
        }  
    } 
第五部分代码解析:

定义了一个enrollCourse方法用于学生选课。首先提示用户输入学生学号和课程编号,并使用getIntInputgetStringInput方法读取用户输入。通过findStudentById方法findCourseByCode方法查找学生和课程。如果学生或课程不存在,则提示用户重新输入。调用学生的enrollCourse方法,将选课添加到学生的选课列表中。打印选课成功的提示信息。
到此enrollCourse方法结束。

 private static void enrollCourse() {
        System.out.println("请输入学生学号:");
        int id = getIntInput();
        System.out.println("请输入课程编号:");
        String code = getStringInput();

        Student student = findStudentById(id);
        Course course = findCourseByCode(code);

        if (student == null || course == null) {
            System.out.println("学生或课程不存在,请重新输入。");
            return;
        }
        student.enrollCourse(course);
        System.out.println("选课成功!");
    }
第六部分代码解析:

定义了一个displayEnrollment方法用于查看选课结果。首先提示用户输入学生学号,并使用getIntInput方法读取用户输入。通过findStudentById方法查找学生。如果学生不存在,则提示用户重新输入。调用学生的displayEnrollment方法,打印选课结果。displayEnrollment方法结束。

 private void displayEnrollment() {
    	 System.out.println("请输入学生学号:");
         int id = getIntInput();

         Student student = findStudentById(id);

         if (student == null) {
             System.out.println("学生不存在,请重新输入。");
             return;
         }

         student.displayEnrollment();
     }
第七部分代码解析:

定义了四个方法,findStudentById方法用于通过学号查找学生。遍历学生列表,找到对应学号的学生并返回。findCourseByCode方法用于通过课程编号查找课程。遍历课程列表,找到对应编号的课程并返回。getIntInput和getStringInput方法用于读取用户输入的整数和字符串,并返回对应的值。

    private static Student findStudentById(int id){
         for (Student student : students) {
             if (student.getId() == id) {
                 return student;
             }
         }
         return null;
  		
  	}

	private static Course findCourseByCode(String code) {
		for (Course course :courses) {
            if (course.getCode().equals(code)) {
                return course;
            }
        }
        return null;
	}

	private static int getIntInput() {
		Scanner scanner = new Scanner(System.in);
        return scanner.nextInt();
	}
	private static String getStringInput() {
		 Scanner scanner = new Scanner(System.in);
	        return scanner.next();	    
	}   
}

五.学生选课管理系统全部代码

Student类:
import java.util.ArrayList;
import java.util.List;
class Student {
	private String name;
	private int id;
	private List<Course> courses;
	public Student(String name, int id) {
		this.name = name;
		this.id = id;
		this.courses = new ArrayList<>();
	}
	public String getName() {
		return name;
	}
	public int getId() {
		return id;
	}
	public List<Course> getCourses() {
		return courses;
	}

	public void addCourse(Course course) {
		courses.add(course);
	}
	public void displayEnrollment() {
		System.out.println("学生姓名:" + name + ",学号:" + id + ",已选修的课程:");
		for (Course course : courses) {
			System.out.println("课程编号:"+course.getCode()+",课程名称:"+course.getCourseName());
		}
	}
	 public void enrollCourse(Course course) {
	        if (!courses.contains(course)) {
	            courses.add(course);
	            course.addStudent(this);
	        }
	    }
}
Course类:
import java.util.ArrayList;
import java.util.List;

class Course {  
    private String code;  
    private String coursename;  
    private List<Student> students;  
    
    public Course(String code, String name) {  
        this.code = code;  
        this.coursename = name;  
        this.students = new ArrayList<>();  
    }  
    public String getCode() {  
       return code;  
   }  
    public String getCourseName() {  
        return coursename;  
    }  
    public List<Student> getStudents() {  
      return students;  
   }  
    public void enrollStudent(Student student) {  
      students.add(student);  
    }
	public void addStudent(Student student) {
		if (!students.contains(student)) {
            students.add(student);
            student.enrollCourse(this);
        }
		
	}  

}
ManagementSystem类:
import java.util.ArrayList;
import java.util.Scanner;

class ManagementSystem {  
    private static ArrayList<Student> students = new ArrayList<>();  
    private static ArrayList<Course> courses = new ArrayList<>();  
    Scanner scanner = new Scanner(System.in);  
  
    public static void main(String[] args) {  
    	ManagementSystem main = new ManagementSystem();  
        main.run();  
    }  
  
    public void run() {  
        while (true) {  
           
        	System.out.println("请选择操作:");  
            System.out.println("1. 注册学生");  
            System.out.println("2. 添加课程");  
            System.out.println("3. 学生选课");  
            System.out.println("4. 查看选课结果");  
            System.out.println("0. 退出系统");  
            System.out.print("请输入选项:");  
            int choice = scanner.nextInt();  
            scanner.nextLine();
            switch (choice) {
            case 1:
                registerStudent();
                break;
            case 2:
                addCourse();
                break;
            case 3:
                enrollCourse();
                break;
            case 4:
                displayEnrollment();
                break;
            case 0:
                System.out.println("谢谢使用,再见!");
                return;
            default:
                System.out.println("无效选项,请重新选择。");
        }
        System.out.println();
    }
}
	private void registerStudent() {  
        System.out.print("请输入学生学号:");  
        int id = scanner.nextInt();  
        System.out.print("请输入学生姓名:");  
        String name= scanner.next();  
        boolean isRegistered = false;  
        if (!isRegistered) {  
            Student newStudent = new Student(name, id);  
            students.add(newStudent);  
            System.out.println("学生注册成功!姓名:" + name + ",学号:" + id);  
        } else {  
            System.out.println("学生注册失败,学号已存在!");  
        }  
        for (Student student : students) {  
            if (student.getId()==id) {  
                System.out.println("学号已存在,请重新输入!");  
                isRegistered = true;  
                break;  
            }
    } 
 }
  
    private void addCourse() {  
        System.out.print("请输入课程编号:");  
        String code = scanner.next();  
        System.out.print("请输入课程名称:");  
        String name = scanner.next();  
        boolean isAdded = false;  
        for (Course course : courses) {  
            if (course.getCode().equals(code)) {  
                System.out.println("课程已存在,请重新输入!");  
                isAdded = true;  
                break;  
            }  
        }  
        if (!isAdded) {  
            Course newCourse = new Course(code, name);  
            courses.add(newCourse);  
            System.out.println("课程添加成功!编号:" + code + ",名称:" + name);  
        } else {  
            System.out.println("课程添加失败,编号已存在!");  
        }  
    } 
    private static void enrollCourse() {
        System.out.println("请输入学生学号:");
        int id = getIntInput();
        System.out.println("请输入课程编号:");
        String code = getStringInput();

        Student student = findStudentById(id);
        Course course = findCourseByCode(code);

        if (student == null || course == null) {
            System.out.println("学生或课程不存在,请重新输入。");
            return;
        }
        student.enrollCourse(course);
        System.out.println("选课成功!");
    }
    private void displayEnrollment() {
    	 System.out.println("请输入学生学号:");
         int id = getIntInput();

         Student student = findStudentById(id);

         if (student == null) {
             System.out.println("学生不存在,请重新输入。");
             return;
         }

         student.displayEnrollment();
     }

     private static Student findStudentById(int id){
         for (Student student : students) {
             if (student.getId() == id) {
                 return student;
             }
         }
         return null;
  		
  	}

	private static Course findCourseByCode(String code) {
		for (Course course :courses) {
            if (course.getCode().equals(code)) {
                return course;
            }
        }
        return null;
	}

	private static int getIntInput() {
		Scanner scanner = new Scanner(System.in);
        return scanner.nextInt();
	}
	private static String getStringInput() {
		 Scanner scanner = new Scanner(System.in);
	        return scanner.next();	    
	}   
}
运行结果展示:

六.总结

以上是我编写的学生管理系统的代码和解析,仅实现学生选课管理系统部分简单的功能,并不能实现很强大的功能,可以给各位提供一些参考。学生选课系统的写代码过程中,积极学习并运用了Java基础编程知识,通过实践提高了自己的编程能力。

  • 48
    点赞
  • 167
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值