2009-04-15 6 views
-1

Cette description du mémoire du programme:Quelle est la meilleure façon de faire ce programme Java?

Produire un logiciel qui permet de suivre des cours donnés par des chargés de cours au collège. Pour chaque cours, un code de cours et un titre doivent être enregistrés, de même qu'une liste des professeurs qui suivent ce cours doit être enregistrée. Le système devrait permettre d'ajouter et de retirer des cours et des conférenciers de la liste, et des informations telles que des conférenciers qui suivent un cours et des cours inscrits à un conférencier particulier qui seront affichés.


Jusqu'à présent, j'ai deux cours conférencier et cours et les deux attributs comme l'ID du nom et le code et le titre, respectivement. J'ai ensuite créé deux autres classes pour stocker les données de ces deux objets et j'ai utilisé une carte. J'ai donc identifié l'identifiant et le nom du conférencier, du code et du titre, ils sont tous les deux dans des classes séparées appelées LecturerList et CourseList.

Mais maintenant je ne peux pas attribuer un cours à un conférencier. ont été bloqués sur cela pendant une semaine maintenant. Des idées? Ai-je approché cela de la mauvaise façon?

+0

Les conférenciers enseignent-ils des cours et suivent-ils des cours? Y a-t-il des étudiants dans ce collège? –

+0

@capar: hehehe J'étais sur le point de poser la même question – John

+1

Quelque chose est vraiment bizarre sur la description du problème. Je suppose que je suis failng à http: // bit.ly/kLXgL – John

Répondre

0

La description du problème est criante "Database!". Ce problème concerne le suivi des ensembles d'informations connexes, pour lesquels le logiciel de base de données a été conçu. Ma solution à ce problème serait d'utiliser mySQL, et le connecteur de base de données Java pour mysql.

+0

il est probablement un cours de programmation OOP ou la modélisation où une base de données est au-delà de la portée (ou intention) de la mission – TofuBeer

+0

@TofuBeer Vous seriez surpris de voir combien de fois ils commencer à construire le toit avant que le sous-sol ... – Varkhan

2

Que diriez-vous à l'aide d'une carte, comme:

Map<Course, Lecturer> 

ou

Map<Lecturer, List<Course>> 
0

Essayez de faire un schéma fonctionnel (I UML presque écrit) de ce que vous essayez d'atteindre. Idéalement, utilisez une feuille de papier, un crayon et dessinez des boîtes pour chaque entité fonctionnelle (conférencier, cours, etc.) et dessinez une ligne étiquetée et orientée pour chaque type de relation entre ces entités. Utilisez des couleurs, si besoin est.

Si vous pensez aux lignes que vous avez dessinées comme des cordes, sur quelles relations avez-vous besoin de «tirer» pour obtenir les listes qui vous sont demandées?

Alors et seulement alors, essayez de concevoir la structure de classe ...

+0

ne pensez pas UML. Pensez à un modèle de données conceptuel. C'est vraiment ce dont il a besoin. –

2

Je ne partage pas que le problème a besoin d'une base de données. C'est la partie orientée objet que vous rencontrez des problèmes. Faites-le bien et une base de données suivra si vous avez besoin de persistance. Je commencerais par Course and Lecturer, comme vous l'avez fait. Cours aurait les attributs de code et de titre requis, plus une liste de conférenciers l'enseignant. De même, le conférencier aurait un attribut de nom et une liste de cours enseignés. Cela ressemble à une relation bidirectionnelle de 1: m avec moi. Le langage de votre énoncé de problème est un peu confus, mais il semble qu'un cours peut être enseigné par plusieurs conférenciers (peut-être parce qu'il y a plusieurs sections d'un cours donné), et un conférencier peut enseigner plus d'un cours.

Si cela semble exact, je ne pense pas que vous ayez besoin d'une classe CourseList ou LecturerList.

0

Je suggère de stocker une liste de cours au sein du conférencier et une liste de conférenciers dans le cours. Ensuite, créez un service que les modèles du « système », quelque chose comme:

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

Commencez avec vos objets de base et quelles sont les propriétés qu'ils ont

étudiant -> id, nom, liste des cours

conférencier -> nom, liste des cours

cours -> code, le nom, la liste des élèves, la liste des conférenciers

de vos besoins, le cours semble t Le composant majeur d'intérêt, alors laissez-le être le lieu pour commencer.

Comme un étudiant suit un cours (et non l'inverse), la fonction clé devrait être une opération sur le cours [course.addstudent]. Mais, vous devez également être capable de lister tous les cours qu'un étudiant spécifique prend, donc vous devez garder une liste par étudiant quelque part, et l'objet étudiant a du sens [student.addCourse]. Depuis l'ajout de l'étudiant à un cours et la création de la liste des cours qu'un étudiant prend, est une seule «action» logique, il est logique d'avoir une seule fonction qui gère l'ensemble - et je voudrais revenir au cours, depuis C'est ce que vous maintenez vraiment, comme l'endroit pour le faire.

Le psuedocode est pas parfait, mais vous pouvez obtenir l'idée:

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

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

Suppression d'un étudiant d'un cours, et l'ajout et la suppression de l'enseignant est similaire.

0

Vous avez utilisé des cartes pour mapper des ID de conférencier et de cours à des attributs? Cela ne semble pas très orienté objet, et en Java, vous aurez des problèmes si vous essayez de ne pas être OO! Cela me semble être le genre d'application où vous voudrez maintenir des liens bidirectionnels entre le conférencier et le cours: chaque cours a un conférencier --- est-ce toujours vrai? --- Ainsi, Course a des méthodes get/setLecturer, et chaque Conférencier a un conteneur de Cours avec les méthodes add/set/remove/getCourse (s). & Les détails du cours ou leurs affectations: en Java, les objets eux-mêmes peuvent être stockés directement car tout est vraiment une référence. Si cela doit être utilisé dans un environnement de production, vous voudrez une base de données et je peux recommander le système de mapping relationnel objet Hibernate (en particulier en utilisant la persistance annotée) pour automatiser une grande partie de la récupération de la base de données, du stockage , suppression en cascade, stratégies de mise en commun des requêtes, etc. Mais si ce n'est qu'un exercice pédagogique, cela sera beaucoup trop lourd. Oh, et si vous l'utilisez en production, jetez un oeil à un logiciel existant de gestion de cours/environnement d'apprentissage virtuel: voir le bas de http://en.wikipedia.org/wiki/Virtual_learning_environment pour quelques références.

Questions connexes