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

什么';制作这个Java程序的最佳方法是什么?,java,collections,map,Java,Collections,Map,以下是程序简介的说明: 制作一个软件,跟踪大学讲师讲授的课程。对于每门课程,需要记录课程代码和标题,以及参加该课程的讲师名单。该系统应允许从列表中添加和删除课程和讲师,并显示诸如参加课程的讲师和向特定讲师注册的课程等信息 到目前为止,我有两个类讲师和课程,它们分别有两个属性,例如名称id、代码和标题。然后,我又创建了两个类来保存这两个对象的数据,我使用了一个映射,所以我映射了讲师的id和名称,以及课程的代码和标题,它们都在称为讲师列表和课程列表的单独类中 但现在我不能给讲师分配课程。我已经在这

以下是程序简介的说明:

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


到目前为止,我有两个类讲师和课程,它们分别有两个属性,例如名称id、代码和标题。然后,我又创建了两个类来保存这两个对象的数据,我使用了一个映射,所以我映射了讲师的id和名称,以及课程的代码和标题,它们都在称为讲师列表和课程列表的单独类中


但现在我不能给讲师分配课程。我已经在这上面呆了一个星期了。有什么想法吗?我是不是走错路了

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

使用地图怎么样,比如:

   Map<Course, Lecturer>
Map

Map

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

如果你认为你画的线是一根绳子,你需要“拉”什么样的关系才能得到你想要的列表


然后,也只有在那时,试着设计类结构…

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

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


如果这听起来准确,我认为您不需要课程列表或讲师列表课程。

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

  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 ...
}
课程{
字符串代码;
字符串标题;
列出讲师=新建ArrayList();
…访问器和其他业务规则。。。
}
讲师{
int-id;
字符串名;
列出课程=新建ArrayList();
…访问器和其他业务规则。。。
}
讲师服务{
List coursesAvailable=新建ArrayList();
addCouse(课程){
课程可用。添加(课程);
}
添加讲师课程(讲师l,课程c){
…查找过程。。。
c、 助理讲师(l);
l、 课程(c);
}
等
}

从基本对象及其属性开始

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

讲师->姓名,课程列表

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

从你的要求来看,这门课程似乎是你感兴趣的主要部分,所以让它成为你的起点吧

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

psuedocode并不完美,但您可以理解:

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

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

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

您使用地图将讲师和课程ID映射到属性?这听起来不是很面向对象的,在Java中,如果你不想成为OO,你会遇到麻烦

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


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

它可能适用于OOP编程或建模课程,其中数据库超出了assignment@TofuBeer你会对h感到惊讶
course.addStudent(student) {
   course.listOfStudents.add(student)
   student.addCourse(this)
}

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