2009-04-15 4 views
-1

Dies ist die Beschreibung des Programms kurz:Was ist der beste Weg, um dieses Java-Programm zu machen?

eine Software produzieren, die an der Hochschule Spur von Kursen gelehrt von Dozenten hält. Für jeden Kurs muss ein Kurscode und ein Titel erfasst werden, sowie eine Liste der Dozenten, die diesen Kurs belegen, muss aufgezeichnet werden. Das System sollte es ermöglichen, Kurse und Dozenten hinzuzufügen und aus der Liste zu entfernen, und Informationen wie Dozenten, die einen Kurs belegen, und Kurse, die für einen bestimmten Dozenten registriert sind, anzuzeigen.


Bisher habe ich zwei Klassen Dozent und Kurs und sie zwei Attribute wie Name ID und Code und Titel sind. Ich habe dann zwei weitere Klassen erstellt, um die Daten für diese beiden Objekte zu speichern, und ich habe eine Map verwendet, also habe ich ID und Name für Lecturer und Code und Titel für Kurs zugeordnet, sie sind beide in separaten Klassen namens LecturerList und CourseList.

Aber jetzt kann ich keinen Kurs zu einem Dozenten zuweisen. Ich bin jetzt seit einer Woche dran. Irgendwelche Ideen? Habe ich das falsch angegangen?

+0

Dozenten unterrichten sowohl Kurse als auch Kurse? Gibt es Studenten an diesem College? –

+0

@capar: hehehe Ich wollte die gleiche Frage stellen – John

+1

Etwas ist wirklich seltsam auf der Problembeschreibung. Ich glaube, ich stehe auf http: // Bit.ly/kLXgL – John

Antwort

0

Die Problembeschreibung ist schreiend "Datenbank!". Bei diesem Problem handelt es sich um das Verfolgen verwandter Informationssätze, genau das, für das Datenbanksoftware entwickelt wurde. Meine Lösung für dieses Problem wäre, mySQL und den Java-Datenbank-Connector für mysql zu verwenden.

+0

es ist wahrscheinlich für eine OOP-Programmierung oder Modellierung Kurs, wo eine Datenbank außerhalb des Umfangs (oder Absicht) der Aufgabe ist – TofuBeer

+0

@TofuBeer Sie würden überrascht sein, wie oft sie Fang an, das Dach vor dem Keller zu bauen ... – Varkhan

2

Wie über eine Karte verwenden, wie:

Map<Course, Lecturer> 

oder

Map<Lecturer, List<Course>> 
0

Versuchen hilft ein funktionales Schema zu machen (I UML fast geschrieben) von dem, was Sie erreichen wollen. Idealerweise sollten Sie für jede funktionale Einheit (Dozent, Kurs usw.) ein Stück Papier, einen Bleistift und Zeichnungsrahmen verwenden und für jeden Beziehungstyp zwischen diesen Entitäten eine etikettierte, ausgerichtete Linie zeichnen. Verwenden Sie gegebenenfalls Farben.

Wenn Sie an die Linien denken, die Sie als Seilstücke gezeichnet haben, auf welche Beziehungen müssen Sie dann "ziehen", um die Listen zu erhalten, nach denen Sie gefragt werden?

Dann und nur dann versuchen, die Klassenstruktur zu entwerfen ...

+0

Denk nicht an UML. Denk konzeptionelles Datenmodell. Das ist wirklich was er braucht. –

2

Ich bin nicht einverstanden, dass das Problem eine Datenbank benötigt. Es ist der objektorientierte Teil, mit dem Sie Probleme haben. Bekommen Sie das richtig und eine Datenbank folgt, wenn Sie Persistenz benötigen.

Ich würde mit Kurs und Dozent beginnen, wie Sie es taten. Kurs würde die erforderlichen Code- und Titelattribute plus eine Liste der Dozenten haben, die es unterrichten. Ebenso hätte der Dozent ein Namensattribut und eine Liste der Kurse, die unterrichtet werden. Es klingt wie eine bidirektionale 1: m Beziehung zu mir. Die Sprache Ihrer Problembeschreibung ist ein wenig verwirrend, aber es klingt, als ob ein Kurs von mehreren Dozenten unterrichtet werden kann (vielleicht, weil es mehrere Abschnitte eines gegebenen Kurses gibt), und ein Dozent kann mehr als einen Kurs unterrichten.

Wenn das genau klingt, brauche ich nicht eine CourseList oder LecturerList Klasse.

0

Ich würde vorschlagen, eine Liste der Kurse innerhalb des Dozenten und eine Liste der Dozenten im Kurs zu speichern. Erstellen Sie dann ein Dienst, der Modelle das „System“, so etwas wie:

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

Beginnen Sie mit Ihren grundlegenden Objekte und welche Eigenschaften sie

Schüler haben -> id, name, Liste der Kurse

Dozent -> Name, Liste der Kurse

Kurs -> Code, Name, Liste der Studenten, die Liste der Dozenten

von Ihren Anforderungen entspricht, erscheint der Kurs zu sein t Die Hauptkomponente des Interesses, also sei der Ort, um anzufangen.

Da ein Student einen Kurs belegt (nicht umgekehrt), sollte die Schlüsselfunktion eine Operation auf dem Kurs [course.addstududent] sein. Aber Sie müssen auch in der Lage sein, alle Kurse aufzulisten, die ein bestimmter Student belegt, also müssen Sie eine Liste nach Schülern irgendwo aufbewahren, und das Schülerobjekt macht Sinn [student.addCourse]. Da das Hinzufügen des Schülers zu einem Kurs und das Erstellen der Liste von Kursen, die ein Schüler macht, eine einzige logische "Aktion" ist, macht es Sinn, eine einzige Funktion zu haben, die das Ganze behandelt - und ich würde zurück zum Kurs gehen Es ist das, was du wirklich pflegst, als der Ort, um das zu tun.

Die psuedocode ist nicht perfekt sein, aber man kann auf die Idee kommen:

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

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

einen Student aus einem Kurs löschen und das Hinzufügen und Löschen der Vortrag ähnlich ist.

0

Sie haben Maps verwendet, um Dozenten und Kurs-IDs Attributen zuzuordnen? Das klingt nicht sehr objektorientiert, und in Java wirst du Schwierigkeiten haben, wenn du versuchst, nicht OO zu sein!

Das klingt für mich wie die Art von Anwendung, wo Sie bidirektionale Verbindungen zwischen Dozent und Kurs beibehalten möchten: d. H. Jeder Kurs hat einen Dozenten --- ist das immer wahr? --- So hat der Kurs get/setLecturer Methoden, und jeder Dozent hat einen Container von Kursen mit add/set/remove/getCourse (s) Methoden. Sie sollten keine externen Tabellen zum Speichern des Dozenten & Kursdetails oder deren Zuordnungen pflegen müssen: In Java können die Objekte selbst direkt gespeichert werden, da alles wirklich eine Referenz ist.

Wenn dies in einer Produktionsumgebung verwendet werden soll, dann wollen Sie eine Datenbank und ich kann das objektrelationale Hibernate-Mapping-System (insbesondere mit Annotation-Driven Persistenz) für die Automatisierung eines Großteils der Datenbankabfrage empfehlen , kaskadierende Löschung, Abfragepooling-Strategien, etc. Aber wenn dies nur eine pädagogische Übung ist, dann wird das viel zu schwer sein. Oh, und wenn Sie dies in der Produktion verwenden, vielleicht einen Blick auf einige bestehende Kursverwaltung/virtuelle Lernumgebung Software: siehe die Unterseite von http://en.wikipedia.org/wiki/Virtual_learning_environment für einige Referenzen.