Groupe : Citoyennes
Messages : 463
Membre n° : 646
Inscrit le : 12/02/2005
bon voilà tout: Je dois faire ce super tp (travail pratique) et le remettre vendredi (donc me reste environ 2 jours). Le code, même s'il est un peu bâclé et étrange vu qu'on est 2 à gosser dessus (travail d'équipe) et qu'on manque de temps, est tout de même compréhensible, et ne semble pas avoir de gros défauts majeurs... Cependant, lorsqu'on fait fonctionner le programme, et qu'on regarde en pas à pas, on se rend compte que le compilateur fait des choses qui ne sont même pas écrites.
Hmm, ah oui, c'est un code fait pour le compilateur C++ Borland V.5.0. dans Visual Studio, il reconnait pas la foutue bibliothèque iostream...
Note: je viens tout de même de me rendre compte que j'avais inversé un tableau dans une accumulation, ce qui pourrait bien expliquer et corriger le problème, mais je peux pas tester... et de toute façon y'a pas que ça qui fonctionne pas.
N'empêche, même si j'avais corriger le prob, la vue de quelqu'un d'autre sur le code pourrait être utile, donc si z'avez la gentillesse de le survoler et de me signaler ce que vous croyez mauvais (en laissant de côté les variables globales qui pourraient être locale, ça c'est un détail final... ) Je vous en serais infiniment reconnaissante (même si je passe déjà le cours même si je remets pas le travail. Je tiens à ma moyenne de 90 + %)
Tiens, autre prob que je viens de me rappeller... On arrive pas non plus à écrire sur le fichier Biblio.str à parti de ce programme, et pourtant les énoncés sont bien faits... Il me semble en tout cas. :s
Vala le code: (surtout, faut mexcuser pour l'alignement, c'est la faute du bloc-note...)
QUOTE
/*Noms : Vincent Blouin & Melyssa St-Hilaire //Groupe : 4118 //Projet : Travail Pratique 3 //But : Permettre la consultation et la mise à jour d'un fichier obtenu suite à l'étape 1. Un relevé de cumulatifs sera produit à la fin.
void AfficherMenu() { clrscr(); cout << "1. Consultation d'un titre (selon le numéro du livre)" << endl; cout << "2. Consultation de tous les titres (actifs ou tous)" << endl; cout << "3. Suppression d'un titre (si toutes les copies sont retournées)" <<endl; cout << "4. Modification d'un titre (autre choix après)" << endl; cout << "5. Terminer" << endl; }
void ConsultAll() { char X; cout << "Voulez-vous tout afficher sans distinctions? (o/n) "; cin >> X; if (X=='o'|| X=='O') { Fichier.clear(); Fichier.seekg(0); LireStruct(); while (Fichier != 0) { AffStruct(); LireStruct(); } } else { Fichier.clear(); Fichier.seekg(0); LireStruct(); while (Fichier != 0) { if (Biblio.Tem==true) AffStruct(); LireStruct(); } } }
void SupprTitre(int pos) { pos = Confirmation(); if (pos!=-1) { LireStructPos(pos); if (Biblio.Sortis==0) { Ind[pos].Tem=false; Biblio.Tem=false; Fichier.clear(); Fichier.seekg(pos*Long); EcritStruct(); cout << "Le titre a été supprimé"; getch(); } else { cout << "Certains exemplaires n'ont pas ete retournes!"; getch(); } } else { cout << "Le numero de livre n'a pas ete trouve"; getch(); } }
void ModifTitre(int pos) { int Nb; choix=0; cout << "1. Retour de livre" << endl; cout << "2. Emprunt d'un livre" << endl; cout << "3. Terminer" << endl; cin >> choix; if (choix==1) { pos = Confirmation(); if (pos!=-1) { LireStructPos(pos); cout << "Combien de livres ont ete retournes? "; cin >> Nb; Biblio.Sortis-=Nb; Nb= -(Nb); Fichier.clear(); Fichier.seekg(pos*Long); EcritStruct(); AccumulationNb(Nb); } else { cout << "Le titre n'existe pas"; getch(); } } if (choix==2) { pos = Confirmation(); if (pos!=0) { LireStructPos(pos); cout << "Combien de livres ont ete empruntes? "; cin >> Nb; Biblio.Sortis+=Nb; Fichier.clear(); Fichier.seekg(pos * Long); EcritStruct(); AccumulationNb(Nb); } } }
void Accumulation() { switch (Biblio.Categ) { case 'E' : {V[0][0]+=Biblio.Total; V[0][1]+=Biblio.Sortis; break;} case 'S' : {V[1][0]+=Biblio.Total; V[1][1]+=Biblio.Sortis; break; } case 'R' : {V[2][0]+=Biblio.Total; V[2][1]+=Biblio.Sortis; break; } } /* devrait avoir lair de ça... R T25 S7
E T9 S2
S T4 S3*/ }
void AccumulationNb(int Nb) { switch (Biblio.Categ) { case 'E' : V[0][1]+=Nb; break; case 'S' : V[1][1]+=Nb; break; case 'R' : V[2][1]+=Nb; break; } }
int Confirmation() { int Num; char NumTemp[10]; int Pos=-1; cout << "Quel numero voulez-vous consulter? "; if (Validation(NumTemp)==1) { Num = atoi(NumTemp); Verification(Num, Pos); while (Pos==-1) { clreol(); cout << " Veuillez entrer a nouveau le numero"; if (Validation(NumTemp)==1) { Num = atoi(NumTemp); Verification(Num, Pos); } } } else { NettoyerEcran(); cout << "Le numéro que vous avez entre n'est pas numerique, veuillez recommencer"; getch(); NettoyerEcran(); Pos=-1; } return pos; }
int Validation(char X[]) { int Res = 1; int i=0; char Car; do { Car = getche(); if (Car != 13) X[i] = Car; if (!isdigit(X[i]) && X[i] != ' ' && Car != 13) { Res=0; } else { i++; } } while (Car != 13 && Res == 1); X[i-1]='\0'; return Res; }
void Verification(int Num, int &Pos) { int i=0; while (i<L) { if (Ind[i].Num==Num) { Pos = i; LireStructPos(Pos); i=L+2; } else i++; } if (i==L) { clreol(); cout <<"Numero inexistant!"; getch(); Pos=-1; } }
Bon, comme je L,ai dit plutôt, le code est bâclé, pas en ordre et pas aligner... Mais bon, faut faire avec le temps qu'on a, donc moi j'avais fait la partie du pseudo-code, mon coéquipier a fait le premier jet de code, et ensuite quand je suis venu pour déboguer m'a fallu 2 heures pour redonner un semblant d'ordre au code... J'en avais pas plus à mettre là-dessus.
Alors voilà, tout commentaire constructif est apprécié, mais avant vendredi SVP!
Edit: finalement yavait beaucoup de probs dans le code, mais là il marche presque à 100%... j'ai remplacé le pas bon par le un peu meilleur.
Groupe : Admin
Messages : 364
Membre n° : 262
Inscrit le : 04/08/2003
Je vais commencer à lire...
En attendant, une remarque : VC++ gère parfaitement iostream, seulement faut utiliser la syntaxe standard :
CODE
#include <iostream> #include <fstream> using namespace std;
#include <iostream.h> n'est pas standard et n'est introduit que pour raison de compatibilité.
Idem pour conio.h, qui n'est pas standard (spécifique Borland) et qui fait râler VC++.
EDIT
Voilà fini
En fait, je ne vois pas trop ce que tu reproches au code ! Après avoir créé un fichier de bibliothèque bidon, on peut faire joujou avec le programme sans rencontrer de bug. Le plus gros ennui est le maximum de 20 livres, imposé en dur dans le code. Il faudrait utiliser un truc genre vector<> pour stocker les structures Index, au lieu d'un tableau de taille fixée.
Bref, rien de bien méchant, ce sont surtout plein de petits détails pour améliorer un peu le code. Comme tu l'as dit toi-même, les variables globales, c'est mâââl Y'a aussi la fonction Validation() qui n'est pas très utile. Il vaudrait mieux à mon avis lire le nombre avec echo (c'est mieux quand on voit ce qu'on tape), en utilisant simplement int nombre; cin >> nombre;
On pourrait aussi factoriser les fonctions Accumulation(), en créant une fonction "IndexDeCategorie" qui fait la conversion 'E' -> 0, 'S' -> 1, et 'R' -> 2. Ensuite les fonctions Accumulation() et AccumulationNb() ne feraient que quelques lignes. Et au passage, créer une structure pour les catégories (au lieu d'un tableau à 2 dimensions), et en profiter pour faire une boucle dans la fonction AfficherStats().
Groupe : Citoyennes
Messages : 463
Membre n° : 646
Inscrit le : 12/02/2005
J'ai retravailler le code encore (L'ai pas sous la main pour le moment) et il fonctionnait relativement bien. Mais c'et sur que, vu la vitesse à laquelle ce programme a été fait, il reste des défauts que je pourrai pas corriger (et ça me met en rogne).
Mais bon, pour le moment jai un oral danglais à aller passer, donc je vais y aller
Groupe : Admin
Messages : 364
Membre n° : 262
Inscrit le : 04/08/2003
QUOTE
il reste des défauts que je pourrai pas corriger (et ça me met en rogne).
C'est très bien d'être perfectionniste ! Heureusement que ce sont des gens comme ça qui font les systèmes de guidage des avions et les lance-missiles...
Groupe : Citoyennes
Messages : 463
Membre n° : 646
Inscrit le : 12/02/2005
Ben en fait, c'est qu'y a une partie du tp que tu vois pas, qui est la création du fichier .str en question à partir d'un .txt... et vu que dans le .txt il n'y a que 14 champs, je voyais pas du tout l'utilité d'en mettre plus (vu que l'ajout de livre n'était pas demandé...).
Pour ce qui est de ma Validation... c'est le prof qui voulait ça, sinon ça aurait été un cin >> Num; bien moins compliqué... Mais avec le compilateur que j'utilise, on voit tout de même ce qu'on tappe. Il y avait plusieurs problèmes au niveau des variables de positionnement dans le fichier (parce que une s'appelait i, l'autre pos... et finalement je savis plus trop laquelle était laquelle). Tout s'est arrangé quand je l'ai mise en locale à Travail() et l'ai passé en paramètres.
J'ai fini par sortir mon tableau d'accumulation de la structure, mais je l'ai laissé en tableau, parce que pour le travail qu'il y a à faire ça reste aussi pratique qu'une structure, moins la redéclaration. C'est vrai que ça réduit le code et est plus pratique si jamais on avait à ajouter des catégories de plus, mais le professeur avait l'air tellement content quand je lui ai posé la question fatifique de la ligne qui faisait augmenter une partie de mon tableau et qu'il a vu mon tableau que je vais pas l'enlever...
En gros, ça fonctionne bien (J'ai bossé tout l'aprem dessus), il aurait fallu que j'ajoute des limites de livres à retourné/emprumptés pour ne pas dépasser, peut-être un affichage plus "cute", mais en gros je devrais tirer une bonne note avec ça. Et en plus j'ai appris comment tester mes programmes chez nous! (Parce que Borland (ou bord*L, comme l'a dit quelqu'un dans ma classe... lapsus plutôt involontaire, mais tellement bien placé ) il se trouve pas n'importe où, et il n'aime PAS DU TOUT WinXP... Doit m'avoir planté au moins 60 fois dans la face en 3h de débuggage par ses exceptions non gérées et ses compilations qui bug... alors que sur win2K c'est beaucoup moins pire...)
Merci beaucoup de ton avis 42
--------------------
0 utilisateur(s) sur ce sujet (0 invités et 0 utilisateurs anonymes)