Java模拟学生选课系统

package com.tim;

 

/**

*课程类

* @authortim

*

*/

publicclass Course {

    public StringID;        //实际开发中应使用private,set、get函数操作

    public String name;

    

    public Course(String id,String name){

        this.ID = id;

        this.name = name;

    }

    

}

 

package com.tim;

 

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Iterator;

import java.util.List;

 

/**

* 备选课程类

* @author tim

*

*/

public class ListTest {

    public List<Course> coursesToSelect;        //用于存放备选课程的List

    

    /*

     * 无参构造器,实例化coursesToSelect

     */

    public ListTest(){

        this.coursesToSelect = new ArrayList<Course>();

    }

    

    /*

     * 用于往coursesTOSelect中添加备选课程

     */

    public void testAdd(){

        /*

         * 创建一个课程对象,并调用add(element)方法,添加到备选课程

         */

        Course cr1 = new Course("1","数据结构");

        coursesToSelect.add(cr1);

        Course temp = (Course) coursesToSelect.get(0);    //List的get方法,取出元素。

                                                        //存入集合中的元素默认为Object类型,需类型强转

        System.out.println("添加了课程:" + temp.ID + ":" + temp.name);

        

        /*

         * 创建一个课程对象,并调用add(index,element)方法,添加到备选课程

         */

        Course cr2 = new Course("2","C语言");

        coursesToSelect.add(0,cr2);

        Course temp2 = (Course)coursesToSelect.get(0);

        System.out.println("添加了课程:" + temp2.ID + ":" + temp2.name);

        

        /*

         * 课程可重复

         */

        coursesToSelect.add(cr1);

        Course temp0 = (Course) coursesToSelect.get(2);

        System.out.println("添加了课程:" + temp0.ID + ":" + temp0.name);

    

        /*

         * 以下代码会抛出下表越界异常

         */

//        Course cr3 = new Course("3","专业英语");

//        coursesToSelect.add(2,cr3);

        

        /*

         * 创建一个课程对象数组,并调用add(c)方法,添加到备选课程

         */

        Course[] course = {new Course("3","离散数学"),new Course("4","汇编语言")};

        coursesToSelect.addAll(Arrays.asList(course));    //asList将Course类型数组转化成集合

        Course temp3 = (Course) coursesToSelect.get(2);

        Course temp4 = (Course) coursesToSelect.get(3);

        System.out.println("添加了两门课程" + temp3.ID + ":" + temp3.name +

                ";"     + temp4.ID + ":" + temp4.name);

        

        /*

         * 创建一个课程对象数组,并调用add(index,c)方法,添加到备选课程

         */

        Course[] course2 = {new Course("5","高等数学"),new Course("6","大学英语")};

        coursesToSelect.addAll(2,Arrays.asList(course2));

        Course temp5 = (Course)coursesToSelect.get(2);

        Course temp6 = (Course)coursesToSelect.get(3);

        System.out.println("添加了两门课程" + temp5.ID + ":" + temp5.name +

                ";"     + temp6.ID + ":" + temp6.name);

    }

    

    /*

     * 取得List中的元素

     */

    public void testGet(){

    int size = coursesToSelect.size();    //List的size方法取得List大小

    System.out.println("有如下课程待选:");

    for(int i = 0; i < size;i++){    

        Course cr = (Course) coursesToSelect.get(i);

        System.out.println(cr.ID + cr.name);

    }

}

    

    /*

     * 通过迭代器来遍历List

     */

    public void testIterator(){

        /*

         * 通过集合的iterator方法取得迭代器的实例

         */

        Iterator<Course> it = coursesToSelect.iterator();

        System.out.println("有如下课程待选:(通过迭代器)");

        while(it.hasNext()){

            Course cr = (Course) it.next();

            System.out.println(cr.ID + cr.name);

        }

    }

    

    /*

     * 通过for each方法访问集合中元素

     */

    public void testForEach(){

        System.out.println("有如下课程待选:(通过foreach)");

        for(Object obj: coursesToSelect){

            Course cr = (Course) obj;

            System.out.println(cr.ID + cr.name);

        }

    }

    

    /*

     *修改集合List中的元素

     */

    public void testModify(){

        coursesToSelect.set(4,new Course("7","单片机"));

    }

    

    /*

     *删除List中的元素

     */

    public void testRemove(){

//        Course cr = (Course) coursesToSelect.get(4);

//        System.out.println("确定删除" + cr.ID + cr.name + "吗?");    

//        coursesToSelect.remove(cr);            //coursesToSelect.remove(4);

        Course[] course = {(Course) coursesToSelect.get(4),(Course) coursesToSelect.get(5)};

        coursesToSelect.removeAll(Arrays.asList(course));    

        System.out.println("成功删除课程");

        testForEach();        //此方法直接使用,不能用lt.testForEach,因为没有实例化

    }

    

    public static void main(String[] args){

        ListTest lt = new ListTest();

        lt.testAdd();

        lt.testGet();

        lt.testIterator();

        lt.testForEach();

        lt.testModify();

        lt.testGet();

        lt.testRemove();

    }

}

 

package com.tim;

 

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Iterator;

import java.util.List;

import java.util.Scanner;

/*

* addAll remove removeAll没写,同List的方法相同

*/

public class SetTest {

 

    public List<Course> coursesToSelect;

    

    public SetTest(){

        coursesToSelect = new ArrayList<Course>();

    }

    /*

     * 添加课程

     */

    public void testAdd(){

        Course cr = new Course("1","C语言");

        coursesToSelect.add(cr);

        

        Course cr1 = new Course("2","高等数学");

        coursesToSelect.add(1,cr1);

        

        Course[] course = {new Course("3","大学英语"),new Course("4","线性代数")};

        coursesToSelect.addAll(Arrays.asList(course));

        

        Course[] course1 = {new Course("5","概率论"),new Course("6","分析化学")};

        coursesToSelect.addAll(4,Arrays.asList(course1));

        

        System.out.println("添加了如下课程:");

//        testIterator();

//        testGet();

        testForEach();

    }

    

    /*

     * 迭代器查询表中元素

     */

    public void testIterator(){

        Iterator<Course> it = coursesToSelect.iterator();

        while(it.hasNext()){

            Course cr = (Course) it.next();

            System.out.println(cr.ID + cr.name);

        }    

    }

    

    /*

     *get方法获取List中元素

     */

    public void testGet(){

        int size = coursesToSelect.size();

        for(int i = 0;i < size; i++){

            Course cr = coursesToSelect.get(i);

            System.out.println(cr.ID + cr.name);

        }

    }

    

    /*

     * for each获取元素

     */

    public void testForEach(){

        for(Course cr: coursesToSelect){

            System.out.println(cr.ID + cr.name);

        }

    }

    

    /*

     * 打印输出,学生所选课程。只能使用for each或iterator

     * 不能使用get

     */

    public void testForEachForSet(Student stu){

        System.out.println("已经选择" + stu.courses.size() + "门课程,如下:");

        for(Course cr: stu.courses){

            System.out.println(cr.ID + cr.name);

        }

    }

    

    public static void main(String[] args) {

        SetTest st = new SetTest();

        System.out.println("有如下课程可选:");

        st.testAdd();

        Scanner scanner = new Scanner(System.in);

        Student stu = new Student("1","皮皮帅");

        System.out.println("欢迎" + stu.name + "选课!");

        for(int i = 0; i < 3; i++){

            System.out.println("请输入" + "第" + (i + 1) + "门课程ID:");

            String stuId = scanner.next();

            for(Course cr: st.coursesToSelect){

                if(cr.ID.equals(stuId)){

                    /*

                     * Set中添加某个重复对象,只保留一个该对象引用

                     * 并且只保留第一个添加的对象。Set中可以添加空的对象

                     */

                    //stu.courses.add(null);

                    stu.courses.add(cr);

                }

            }

        }

        st.testForEachForSet(stu);

        scanner.close();

    }

}


  • 9
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
很抱歉,我无法提供完整的代码。但是,我可以给你一些代码片段来帮助你理解如何实现学生选课系统的基本功能。 首先,你需要创建一个Student类和一个Course类,分别表示学生和课程的基本信息属性。例如: ```java public class Student { private String id; private String name; private String gender; private int grade; private String password; // 构造函数、getters和setters省略 } public class Course { private String id; private String name; private int selectedNum; private int maxNum; private String teacher; // 构造函数、getters和setters省略 } ``` 然后,你可以创建一个CourseDB类来模拟数据库中的课程信息。例如: ```java public class CourseDB { private static CourseDB instance; private List<Course> courses; private CourseDB() { courses = new ArrayList<Course>(); // 初始化课程信息 courses.add(new Course("C001", "Java基础", 0, 50, "张三")); courses.add(new Course("C002", "Java高级", 0, 30, "李四")); // ... } public static CourseDB getInstance() { if (instance == null) { instance = new CourseDB(); } return instance; } public List<Course> getCourses() { return courses; } // 查询可选课程 public List<Course> getAvailableCourses() { List<Course> availableCourses = new ArrayList<Course>(); for (Course course : courses) { if (course.getSelectedNum() < course.getMaxNum()) { availableCourses.add(course); } } return availableCourses; } // 选课 public boolean selectCourse(Course course) { if (course.getSelectedNum() >= course.getMaxNum()) { return false; // 课程已满 } course.setSelectedNum(course.getSelectedNum() + 1); return true; } // 退课 public boolean dropCourse(Course course) { if (course.getSelectedNum() <= 0) { return false; // 课程无人选 } course.setSelectedNum(course.getSelectedNum() - 1); return true; } } ``` 接下来,你需要创建一个StudentDB类来模拟数据库中的学生信息。例如: ```java public class StudentDB { private static StudentDB instance; private List<Student> students; private StudentDB() { students = new ArrayList<Student>(); // 初始化学生信息 students.add(new Student("S001", "张三", "男", 1, "123456")); students.add(new Student("S002", "李四", "女", 2, "234567")); // ... } public static StudentDB getInstance() { if (instance == null) { instance = new StudentDB(); } return instance; } public Student getStudent(String id) { for (Student student : students) { if (student.getId().equals(id)) { return student; } } return null; } } ``` 然后,你可以创建一个Login类来处理登录的业务逻辑。例如: ```java public class Login { public static Student login(String id, String password) { Student student = StudentDB.getInstance().getStudent(id); if (student == null || !student.getPassword().equals(password)) { return null; // 登录失败 } return student; // 登录成功 } } ``` 最后,你可以创建一个SelectCourse类来处理选课的业务逻辑。例如: ```java public class SelectCourse { public static boolean selectCourse(Student student, Course course) { if (course.getSelectedNum() >= course.getMaxNum()) { return false; // 课程已满 } if (student.getSelectedCourses().contains(course)) { return false; // 不能重复选择 } student.getSelectedCourses().add(course); course.setSelectedNum(course.getSelectedNum() + 1); return true; } public static boolean dropCourse(Student student, Course course) { if (!student.getSelectedCourses().contains(course)) { return false; // 未选该门课程 } student.getSelectedCourses().remove(course); course.setSelectedNum(course.getSelectedNum() - 1); return true; } } ``` 以上是关于Java学生选课系统的一些代码片段,希望可以帮助你理解如何实现基本功能。当然,实际开发中还需要考虑很多细节问题,例如异常处理、界面设计等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值