Java多对多关系示例
要完成上面要求,首先应该定义两个类,分别是学生信息(Student)类、课程信息(Course)类。在学生类中存在一个,保存全部的课程。同样,在课程类中也要存在一个,保存全部的学生。
1)定义学生类
在学生类中存在一个 allCourses 的 List ,这样在程序运行时,一个学生类中可以保存多个 Course 对象。public class Student {
private String name;
private int age;
private List<Course> allCourses; // 定义保存全部课程
private Student() {
this.allCourses = new ArrayList<Course>();// 实例化List
}
// 通过构造方法设置内容
public Student(String name, int age) {
// 调用无参构造
this();
this.setName(name);
this.setAge(age);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public List<Course> getAllCourses() {
return allCourses;
}
public void setAllCourses(List<Course> allCourses) {
this.allCourses = allCourses;
}
// 重写toString()方法
public String toString() {
return "学生姓名:" + this.name + ":年龄" + this.age;
}
}
2)定义课程类
课程类与学生类一样,都定义了一个 List ,用于保存多个学生信息。public class Course {
private String name;
private int credit;
// 定义保存多个学生
private List<Student> allStudents;
private Course() {
// 实例化List
this.allStudents = new ArrayList<Student>();
}
public Course(String name, int credit) {
this();
this.setName(name);
this.setCredit(credit);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getCredit() {
return credit;
}
public void setCredit(int credit) {
this.credit = credit;
}
public List<Student> getAllStudents() {
return allStudents;
}
public void setAllStudents(List<Student> allStudents) {
this.allStudents = allStudents;
}
// 重写toString()方法
public String toString() {
return "课程名称" + this.name + ";课程学分" + this.credit;
}
}
3)测试程序
public class TestMore {
public static void main(String[] args) {
// 实例化课程对象
Course c1 = new Course("英语", 3);
Course c2 = new Course("计算机", 5);
// 实例化学生对象
Student s1 = new Student("张三", 20);
Student s2 = new Student("李四", 21);
Student s3 = new Student("王五", 22);
Student s4 = new Student("赵六", 23);
Student s5 = new Student("孙七", 24);
Student s6 = new Student("钱八", 25);
// 门课程有3个人参加,向课程中增加3个学生信息,同时向学生中增加课程信息
c1.getAllStudents().add(s1);
c1.getAllStudents().add(s2);
c1.getAllStudents().add(s6);
s1.getAllCourses().add(c1);
s2.getAllCourses().add(c1);
s6.getAllCourses().add(c1);
// 第二门课程有6个人参加,向课程中增加6个学生信息,同时向学生中添加课程信息
// 向课程中增加学生信息
c2.getAllStudents().add(s1);
c2.getAllStudents().add(s2);
c2.getAllStudents().add(s3);
c2.getAllStudents().add(s4);
c2.getAllStudents().add(s5);
c2.getAllStudents().add(s6);
// 像学生中增加课程信息
s1.getAllCourses().add(c2);
s2.getAllCourses().add(c2);
s3.getAllCourses().add(c2);
s4.getAllCourses().add(c2);
s5.getAllCourses().add(c2);
s6.getAllCourses().add(c2);
// 输出一门课程的信息,观察一门课程有多少个学生参加
System.out.println(c1); // 输出门课程
Iterator<Student> iter1 = c1.getAllStudents().iterator();
// 迭代输出
while (iter1.hasNext()) {
Student s = iter1.next();
System.out.println("\t" + s);
}
// 输出一个学生参加的课程信息,观察有多少门课程
System.out.println(s6);
Iterator<Course> iter2 = s6.getAllCourses().iterator();
while (iter2.hasNext()) {
// 取得所参加的课程
Course c = iter2.next();
// 输出课程信息
System.out.println("\t" + c);
}
}
}
输出结果如下:
课程名称英语;课程学分3
学生姓名:张三:年龄20
学生姓名:李四:年龄21
学生姓名:钱八:年龄25
学生姓名:钱八:年龄25
课程名称英语;课程学分3
课程名称计算机;课程学分5
从程序来看,设计关系的地方较为复杂,因为现在的程序采用的是双向的处理关系,所以学生在选择一个课程时,除了课程中要添加学生,在学生中也要添加课程信息。在输出课程信息时,可以通过课程对象中的找到参加此课程的全部学生信息,也可以通过学生找到全部参加的课程信息。- 随机文章
- 核心危机(核心危机魔石合成攻略)
- 风儿(风儿轻轻的吹)
- 饿了么红包怎么用(饿了么红包怎么用微信支付)
- 儿童教育文章(儿童教育)
- 光遇花手先祖位置(安卓光遇手花先祖)
- 抖音卡(抖音卡顿怎么解决)
- xboxones(xboxone手柄怎么配对主机)
- 兵马俑(兵马俑介绍和历史背景)
- 陈武简历
- 海猫鸣泣之时游戏(海猫鸣泣之时游戏在哪玩)
- 韩国媳妇和小雪(韩国媳妇和小雪的父亲工资是多少)
- 儋州市第二中学(儋州市第二中学录取分数线)
- 鬼泣5攻略(鬼泣5攻略第三关怎么跳)
- 地球日主题(2020年世界地球日主题)
- 和柳亚子(和柳亚子先生于田)
- 冰客(冰客果汁)
- yy魔兽(yy魔兽世界)
- 国外成人游戏(国外成人游戏注册需要visa信用卡)
- 充值卡代理(充值卡代理加盟)
- 拆奶罩
- 郭妮小说(恶魔的法则郭妮小说)
- 东天目山(东天目山景区)
- 蝙蝠给人类的一封信(蝙蝠给人类的一封信)
- 服饰加盟(服饰加盟店招商)
- 疯狂填字(疯狂填字5)
- 观音普门品(观音普门品念诵全文)
- 哈利波特官网(哈利波特官网在哪里)
- 杜星霖(杜星霖图片)
- 查传倜(查传倜个人生活)
- 钢筋等级符号(钢筋等级符号电脑怎么输入)
