-1

这是程序简介的描述:

制作一个软件来跟踪大学讲师讲授的课程。对于每门课程,需要记录课程代码和标题,以及需要记录参加该课程的讲师名单。系统应允许从列表中添加和删除课程和讲师,并显示诸如参加课程的讲师和注册给特定讲师的课程的信息。


到目前为止,我有两个类 Lecturer 和 Course ,它们分别是 name id 和 code 和 title 等两个属性。然后我创建了另外两个类来保存这两个对象的数据,并且我使用了一个 Map,所以我已经映射了 Lecturer 的 id 和 name 以及课程的代码和标题,它们都在名为 LecturerList 和 CourseList 的单独类中。

但是现在我不能为讲师分配课程。已经坚持了一周了。有任何想法吗?我是否以错误的方式处理了这个问题?

4

7 回答 7

2

如何使用地图,例如:

   Map<Course, Lecturer>

或者

   Map<Lecturer, List<Course>>
于 2009-04-15T23:46:09.037 回答
2

我不同意这个问题需要一个数据库。这是您遇到问题的面向对象的部分。做对了,如果您需要持久性,数据库将随之而来。

我会像你一样从课程和讲师开始。课程将具有所需的代码和标题属性,以及教授它的讲师列表。同样,讲师将有一个名称属性和一个正在教授的课程列表。对我来说,这听起来像是一种双向的 1:m 关系。你的问题陈述的语言有点混乱,但听起来一门课程可以由几个讲师讲授(可能是因为给定课程有几个部分),一个讲师可以教授多个课程。

如果这听起来准确,我认为您不需要 CourseList 或 LecturerList 类。

于 2009-04-15T23:51:31.177 回答
0

I would suggest storing a list of courses within the Lecturer and a list of Lecturers in the Course. Then create a service that models the "system", something like:

  Course {
    String code;
    String title;  
    List<Lecturer> lecturers = new ArrayList<Lecturer>();
    ... accessors & other business rules ...
    }

  Lecturer {
      int id;
      String name;
      List<Course> courses = new ArrayList<Course>();
    ... accessors & other business rules ...
    }

LectureServices {
 List<Course> coursesAvailable = new ArrayList<Course>(); 
 addCouse(Course course) {
  coursesAvailable.add(course);
 }
 addLecturerToCourse(Lecturer l, Course c) {
  ... lookup course ...
  c.addLecturer(l);
  l.addCourse(c);
 }

 ... etc ...
}
于 2009-04-16T14:10:35.520 回答
0

问题描述是尖叫“数据库!”。这个问题是关于跟踪相关信息集的,数据库软件就是为此而设计的。我对这个问题的解决方案是使用 mySQL,以及用于 mysql 的 Java 数据库连接器。

于 2009-04-15T23:44:39.090 回答
0

尝试为您要实现的目标创建一个功能模式(我几乎写了 UML)。理想情况下,为每个功能实体(讲师、课程等)使用一张纸、一支铅笔和画框,并为这些实体之间的每种关系类型绘制一条带标签的定向线。如果需要,使用颜色。

如果你把你画的线想象成一根绳子,你需要“拉”什么样的关系来得到你被要求的列表?

然后,只有这样,尝试设计类结构......

于 2009-04-15T23:46:42.767 回答
0

从您的基本对象及其具有的属性开始

学生 -> id、姓名、课程列表

讲师 -> 姓名,课程列表

课程 -> 代码、姓名、学生名单、讲师名单

根据您的要求,课程似乎是您感兴趣的主要组成部分,因此请从这里开始。

由于学生学习课程(而不是相反),因此关键功能应该是对课程 [course.addstudent] 的操作。但是,您还需要能够列出特定学生正在学习的所有课程,因此您需要在某处按学生保存列表,并且学生对象是有意义的 [student.addCourse]。由于将学生添加到课程并创建学生正在学习的课程列表是一个单一的逻辑“动作”,因此拥有一个处理整个事情的单一功能是有意义的 - 我会回到课程,因为这是你真正维护的东西,作为这样做的地方。

伪代码并不完美,但您可以理解:

course.addStudent(student) {
   course.listOfStudents.add(student)
   student.addCourse(this)
}

student.addCourse(course) { student.listOfCourses.add(course) }

从课程中删除学生,以及添加和删除讲师是类似的。

于 2009-04-16T18:21:13.723 回答
0

您是否使用地图将讲师和课程 ID 映射到属性?这听起来不太面向对象,并且在 Java 中,如果您尝试不成为 OO,您将遇到麻烦!

在我看来,这听起来像是一种应用程序,您希望在讲师和课程之间保持双向链接:即每门课程都有一位讲师 --- 总是如此吗?--- 所以 Course 有 get/setLecturer 方法,每个 Lecturer 都有一个带有 add/set/remove/getCourse(s) 方法的 Courses 容器。您不需要维护外部表来存储 Lecturer & Course 详细信息或它们的映射:在 Java 中,对象本身可以直接存储,因为所有内容实际上都是一个引用。

如果要在任何接近生产环境的地方使用它,那么您将需要一个数据库,我可以推荐 Hibernate 对象关系映射系统(尤其是使用注释驱动的持久性)来自动化大部分数据库检索、存储、级联删除,查询池策略等。但如果这只是一个教学练习,那么这将太繁重了。哦,如果你在生产中使用它,也许看看一些现有的课程管理/虚拟学习环境软件:请参阅http://en.wikipedia.org/wiki/Virtual_learning_environment的底部以获取一些参考资料。

于 2009-04-16T20:00:49.053 回答