【问题标题】:What's the best way to make this Java program? [closed]制作这个 Java 程序的最佳方法是什么? [关闭]
【发布时间】:2023-03-09 21:15:01
【问题描述】:

这是程序简介的描述:

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


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

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

【问题讨论】:

  • 讲师既讲课又上课?这所大学有学生吗?
  • @capar: 呵呵,我正要问同样的问题
  • 问题描述确实有些奇怪。我想我没能bit.ly/kLXgL
  • 骂你的老师没有校对:)

标签: java collections map


【解决方案1】:

如何使用地图,例如:

   Map<Course, Lecturer>

   Map<Lecturer, List<Course>>

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 这可能是针对数据库超出作业范围(或意图)的 OOP 编程或建模课程
      • @TofuBeer 你会惊讶于他们在地下室之前开始建造屋顶的频率......
      【解决方案4】:

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

      如果您将绘制的线条视为绳索,那么您需要“拉动”什么样的关系才能获得要求的列表?

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

      【讨论】:

      • 别想UML。想想概念数据模型。这正是他所需要的。
      【解决方案5】:

      我建议在 Lecturer 中存储课程列表,在 Course 中存储讲师列表。然后创建一个为“系统”建模的服务,例如:

        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】:

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

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

        讲师 -> 姓名、课程列表

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

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

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

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

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

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

        【讨论】:

          【解决方案7】:

          您使用地图将讲师和课程 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 的底部。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-07-07
            • 2010-09-09
            • 1970-01-01
            • 1970-01-01
            • 2010-09-09
            • 2016-12-26
            • 1970-01-01
            相关资源
            最近更新 更多