手记

学生选课项目(分享)

package com.imooc;

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

/**
 * 学生类
 * 
 * @author jiuhu
 *
 */
public class Student {
    private String id; // 学号
    private String name;// 姓名
    private Set<Course> studentSelectCourses; // 学生选的课程 SET类里的元素是无序不可重复的对象;
    // 构造方法

    public Student(String id, String name) {
        super();
        this.id = id;
        this.name = name;
        this.studentSelectCourses = new HashSet<Course>();
    }

    // getter,setter
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Set<Course> getStudentSelectCourses() {
        return studentSelectCourses;
    }

    public void setStudentSelectCourses(Set<Course> studentSelectCourses) {
        this.studentSelectCourses = studentSelectCourses;
    }

    @Override // 覆写toString方法
    public String toString() {
        return "学号:" + id + ",姓名:" + name;
    }

    // 学生选课
    public void addCourses(Course course) {
        this.studentSelectCourses.add(course);
    }

    // 学生取消选课
    public void removeCourses(Course course) {
        this.studentSelectCourses.remove(course);
    }

    // 显示学生选课信息
    public void printCourses() {
        Iterator<Course> it = this.studentSelectCourses.iterator();
        System.out.println(this.name + "同学所选的课程如下:");
        while (it.hasNext()) {
            System.out.println(it.next().toString());
        }
    }
}
package com.imooc;

/**
 * 课程类
 * 
 * @author jiuhu
 *
 */
public class Course {
    private String id; // 课程编号
    private String name;// 课程名称
    // 构造方法

    public Course(String id, String name) {
        super();
        this.id = id;
        this.name = name;
    }

    // getter,setter
    public String getId() {
        return id;
    }

    // 课程名称
    public String getName(String id) {
        return this.name;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override // 覆写toString方法
    public String toString() {
        return id + "." + name;
    }

}
package com.imooc;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

/*
 * 备选课程类
 */
public class SelectToCourses {
    private List<Course> coursesList; // 课程列表 -- List对象里的元素有序可重复;
                                        // 注意:实际生活中,这个备选课程应该是没有重复的,所以建议使用Set创建对象

    public SelectToCourses() {
        super();
        this.coursesList = new ArrayList<Course>(); // 创建备选课程对象
    }

    public List<Course> getCoursesList() {
        return coursesList;
    }

    public void setCoursesList(List<Course> coursesList) {
        this.coursesList = coursesList;
    }

    // 增加备选课程
    public void addCourses() {
        Course[] courses = { new Course("1", "数据结构"), new Course("2", "C语言"), new Course("3", "大学英语"),
                new Course("4", "高等数学"), new Course("5", "微机原理") };
        this.coursesList.addAll(Arrays.asList(courses));
        // 显示备选课程
        this.printCourses();
    }

    // 显示备选课程
    public void printCourses() {
        Iterator<Course> it = this.coursesList.iterator();
        System.out.println("**可选课程如下:**");
        while (it.hasNext()) {
            System.out.println(it.next().toString());

        }
    }

    // 删除备选课程
    public void removeCourses() {
        Course[] courses = { new Course("1", "数据结构"), new Course("2", "C语言") };
        this.coursesList.removeAll(Arrays.asList(courses));
        // 显示课程
        this.printCourses();
    }

    // 修改备选课程
    public void modifyCourses() {
        // 把4.高等数学改为4.离散数学
        this.coursesList.set(0, new Course("1", "JAVA编程"));
        this.printCourses();
    }

}
package com.imooc;

import java.util.Scanner;

/**
 * 测试类
 * 
 * @author jiuhu
 *
 */
public class Test {

    public static void main(String[] args) {
        String courseId; // 课程ID
        int continueSelectCourse; // 继续选课标识 1是 0否
        boolean flag; // 成功选课标识
        Course course = null; // 课程 保存删除前的课程信息
        // 创建备选课程对象
        SelectToCourses selectTocourses = new SelectToCourses();
        selectTocourses.addCourses();

        // 创建学生对象
        Student student = new Student("1", "小明");
        System.out.println("欢迎学生:" + student.getName() + "选课!");

        // 创建输入流对象
        Scanner input = new Scanner(System.in);
        while (true) {
            // 输入课程的门数count
            System.out.println("你想选多少门课?");

            int count = input.nextInt(); // 课程门数

            // 检查想选的课程数量
            while (count > selectTocourses.getCoursesList().size() || count < 0) {
                System.out.println("所选课程数量异常,请重新输入!");
                System.out.println("你想选多少门课?");
                count = input.nextInt(); // 课程门数
            }

            // 遍历课程门数
            for (int i = 0; i < count; i++) {
                System.out.print("请输入第" + (i + 1) + "门课程的编号:");
                courseId = input.next();
                flag = false; // 默认未找到匹配的课程
                while (true) {
                    int j = 0;
                    // 遍历检查输入的课程编号
                    for (; j < selectTocourses.getCoursesList().size(); j++) {
                        // 课程编号存在,则加入学生所选的课程中去
                        if (courseId.equals(selectTocourses.getCoursesList().get(j).getId())) {
                            student.addCourses(selectTocourses.getCoursesList().get(j)); // 把学生所选的课程加入学生选的课程列表

                            // 保存删除前的课程信息
                            course = selectTocourses.getCoursesList().get(j);

                            // 把该课程从可选课程列表中删除,防止学生重复输入同一课程ID
                            selectTocourses.getCoursesList().remove(j);

                            // 打印学生所选的课程
                            student.printCourses();

                            // 找到匹配的课程
                            flag = true;

                            // 退出课程遍历
                            break;
                        }
                    }

                    // 未找到匹配的课程或输入的课程已选课
                    if (!flag) {
                        // 课程编号存在,但课程已选,则提示重新输入
                        if (student.getStudentSelectCourses().contains(course)) {
                            course = null;
                            System.out.println("你输入的课程ID=" + courseId + "已经选课,请重新输入!");
                        } else {
                            System.out.println("你输入的课程ID=" + courseId + "不存在,请重新输入!");
                        }

                        // 提示输入课程ID
                        System.out.print("请输入第" + (i + 1) + "门课程的编号:");
                        courseId = input.next();

                    } else { // 找到匹配的课程,完成一门选课
                        break;
                    }
                }

            }

            // 检查是否还有课程可选
            if (selectTocourses.getCoursesList().size() == 0) {
                System.out.println("*已无可选的课程,自动退出系统!*");
                break;
            }
            System.out.println("继续选课: 1是 0否");
            continueSelectCourse = input.nextInt();
            if (continueSelectCourse == 1) {
                selectTocourses.printCourses();
                continue;
            } else {
                input.close(); // 关闭输入流
                System.out.println("**您已退出选课系统!**");
                break;
            }
        }
    }

}
30人推荐
随时随地看视频
慕课网APP

热门评论

先写表 再写视图  然后写代码

我建议先把项目的框架显示出来,有源代码更好!

我觉得应该在选课前,先要把所有可选的课程都显示出来,这样输入课程ID的时候才知道应该输入多少?否则用户盲目输入,总是显示课程ID不存在的话,会影响用户体验!个人建议,仅供参考!

查看全部评论