CSI2531 Gestion de Fichiers -- Hiver 2003 Devoir #2: Traitement Coséquentiel Valeur: 10% -- 100 points A remettre: Mardi 11 Mars 03, 10h30 du matin Introduction ------------ Ce devoir sera pour vous l'occasion d'appliquer vos connaissances sur le traitement coséquentiel. L'approche à suivre pour votre algorithme ressemble à l'exemple de comptabilité donné en classe et discuté dans notre manuel de cours à la section 8.2, à la seule différence que cette fois-ci il s'agit d'administrer des enregistrements et des moyennes de notes d'étudiants. Le problème ----------- Vous devez écrire un programme qui traite les informations sur les étudiants de notre école (SITE). Nous assumons pour ce devoir qu'en fin d'année académique, les assistants académiques de chacun des programmes de SITE, à savoir CEG, CSI, ELG et SEG, ont un "fichier de transactions" contenant les notes des étudiants pour chaque cours dudit programme. Les étudiants peuvent être enrollés dans plusieurs cours donnés dans plusieurs programmes différents. Ainsi par exemple, un étudiant peut être enrollé à la fois dans des cours de CSI et SEG. Les fichiers de transactions sont supposés avoir déjà été triés selon les numéros d'étudiants et, pour chaque numéro d'étudiant, selon les cours. Les enregistrements (transactions) de chaque fichier de transactions contiennent les champs suivants: Champ Nom Type Longueur (octets) Observations ----- --- ---- -------- ------------ 1 numéro d'étudiant numérique char[8] convertible en "long int" 2 code du cours alphanumérique char[7] format: LLLnnnn (ex. "csi2531") 3 crédits (cours) numérique char[1] convertible en "int"/"float" 4 note alphabétique char[2] style de l'UdeO: de F à A+ Ces transactions devront être reportées à un "fichier maître" (master file) contenant des enregistrements d'étudiants. Le fichier maître est trié selon les numéros d'étudiant. Ceux-ci forment des clés primaires identifiant les étudiants. Le fichier maître contient des enregistrements avec les champs suivants: Champ Nom Type Longueur (octets) Observations ----- --- ---- -------- ------------ 1 numéro d'étudiant numérique char[8] clé primaire 2 nom de famille alphabétique char[10] 3 prénom alphabétique char[10] 4 crédits numérique char[3] nombre de crédits complétés 5 MG (moyenne générale) numérique char[4] format: cc.c (ex. "10.0", "9.8") Plus spécifiquement, le nombre de crédits et la MG d'un étudiant doit être mise à jour dans le fichier maître. En plus de cela, il faut produire un rapport organisé selon les numéros d'étudiant qui contient tous les cours pris par chaque étudiant ensemble avec les informations suivantes: nombre de crédits et note pour chaque cours, MG pour le semestre et MCF (moyenne cumulative finale) pour tous les semestres. La MG et la MCF sont calculés en tenant compte du nombre de crédits par cours. Vous ne devez lire le fichier maître qu'une seule fois. En conséquence, vous devez traiter tous les fichiers de transactions en même temps. De plus, tout changement opéré sur un enregistrement du fichier maître ne doit être stocké qu'une fois après que toutes les transactions concernant un étudiant donné aient été traitées. Vous pouvez assumer qu'il n'y a au plus que 4 fichiers de transactions. Votre implémentation par conre doit être générale et indépendante du nombre de fichiers de transactions en présence. Il est à noter que les champs contenant des nombres sont stockés comme texte et non en mode binaire. Votre programme --------------- Nous vous fournirons un fichier maître ("master.txt") ainsi que 4 fichiers de transactions (CEG.txt, CSI.txt, ELG.txt, SEG.txt). Votre programme devrait traiter les fichiers de transactions séquentiellement et en lots ("batch mode") et ne doit pas être interactif. Votre code exécutable doit s'appeler "marks.exe" et votre fichier maître mis à jour "newmaster.txt". Le programme "marks.exe" sera exécuté à la ligne de commandes DOS où l'utilisateur pourra spécifier ses commandes en utilisant le format suivant: marks master newmaster error.log CEG.txt CSI.txt ELG.txt SEG.txt En principe, vous pouvez découvrir le nombre de fichiers de transactions en présence en examinant le nombre d'arguments se trouvant à la ligne de commandes. Il est absolument important de ne pas lire les fichiers de transactions dans leur entièreté en mémoire, car dans la pratique ces fichiers peuvent être trop larges pour pouvoir être contenus en mémoire principale. Il peut y avoir des erreurs (telles que un numéro d'étudiant invalide) dans les fichiers de transactions. Votre programme doit pouvoir les détecter et afficher un message approprié dans un fichier d'erreurs appelé "error.log". Le rapport produit par votre programme aura la forme suivante: Etudiant 3456678, Smith, John CSI2165 A+ 2 cr. CSI2131 A- 3 cr. SEG2101 B 3 cr. MG: 7.8 MCF: 8.7 Etudiant 2345678, Einstein, Albert CSI1101 D+ 3 cr. CEG3151 B+ 4 cr. MG: 5.3 MCF: 5.9 Supposez que la MCF précédente de John était de 10.0 avec 5 crédits, sa nouvelle MCF est calculée comme indiqué dans les sorties ci-dessus. C'est-à-dire, la moyenne est calculée en fonction du poids en crédits par cours et les notes alphabétiques sont converties en note numériques de 0 à 10. Que soumettre? -------------- Veuillez soumettre les fichiers suivants: -- "marks.cpp": le programme qui traite les transactions, mets à jour le fichier maître et génère le rapport -- "report.txt": un rapport d'au plus une page contenant un pseudo code de l'algorithme que vous utilisez ainsi que des details sur les points clés de votre implémentation Le reste de la procédure de soumission est telle que spécifiée dans les devoirs précédents. Cependant, VEUILLESZ SUIVRE UN STYLE DE PROGRAMMATION ORIENTE-OBJET !!!