制作这个Java程序的最佳方法是什么?

时间:2009-04-15 23:38:19

标签: java collections map

这是对程序简介的描述:

  

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


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

但现在我无法为讲师分配课程。已经坚持了一个星期了。有任何想法吗?我走错了路吗?

8 个答案:

答案 0 :(得分:2)

如何使用地图,例如:

   Map<Course, Lecturer>

   Map<Lecturer, List<Course>>

答案 1 :(得分:2)

我不同意这个问题需要一个数据库。这是面向对象的部分,你遇到了问题。如果你需要持久性,那么就做好了,数据库就会出现。

我从课程和讲师开始,就像你一样。课程将具有所需的代码和标题属性,以及教授它的讲师列表。同样,讲师将有一个名称属性和一个正在教授的课程列表。这对我来说听起来像双向的1:m关系。你的问题陈述的语言有点令人困惑,但听起来像一个课程可以由几个讲师讲授(也许是因为某个课程有几个部分),讲师可以教授不止一门课程。

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

答案 2 :(得分:1)

尝试按照此主题中描述的方法之一进行操作:

Process to pass from problem to code

它描述了一般方法。

我希望它有所帮助

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

如果你想到你画的绳子是什么线条,那么你需要“拉”以获得你被要求的名单?

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

答案 5 :(得分:0)

我建议在讲师中存储一系列课程,并在课程中列出讲师。然后创建一个模拟“系统”的服务,如:

  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 ...
}

答案 6 :(得分:0)

从您的基本对象开始,以及他们拥有的属性

学生 - &gt; id,名称,课程列表

讲师 - &gt;名称,课程列表

当然 - &gt;代码,姓名,学生名单,讲师名单

根据您的要求,该课程似乎是您感兴趣的主要组成部分,因此请将其作为开始的地方。

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

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

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

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

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

答案 7 :(得分:0)

您是否使用地图将讲师和课程ID映射到属性?这听起来并不是面向对象的,如果你试图不做OO,你会遇到麻烦!

这听起来像是一种应用程序,你想要在讲师和课程之间保持双向链接:即每门课程都有一位讲师---这总是如此吗? ---所以课程有get / setLecturer方法,每个Lecturer都有一个带有add / set / remove / getCourse(s)方法的Courses容器。您不需要维护外部表来存储讲师和演讲者。课程详细信息或其映射:在Java中,对象本身可以直接存储,因为一切都是真正的参考。

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