Videotheque qui utilise les structure

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 508 fois - Téléchargée 27 fois

Contenu du snippet

Comme d'hab, le code n'est pas trop complexe! Mais le prog peut etre utile! Et maintenant, ca gère l'impression! ;-)

Source / Exemple :


/*****************************************************************************/
/* Projet : Vidéotheque                                                      */
/* Auteur : Frero                                                   */
/* Date : Décembre 2003 - xxxxx 2004                                         */
/* But : Créer une vidéothèque capable d'importe et exporter des             */
/* données au format CSV                                                     */
/*****************************************************************************/

//Déclarations des librairies
#include <iostream.h>       //Librairie pour les entrées/sorties
#include <conio.h>          //Librairie pour le getch()
#include <stdio.h>          //Libraire pour le temps de latence (Sleep)

using namespace std; //Déclaration pour I/O

//Création de la structure
struct TFilm{
    char chTitre[25];             //Titre du film
    char chActeurs[50];           //Acteur(s) Principal(-aux)
    int inDuree;                  //Durée en minutes
    char chSupport;               //D = DVD, V = Vidéo, X = Divx
    int inAgeLegal;               //Age légal de vision
    char chCommentaire[255];      //Commentaire sur le film
};

//Déclaration d'une variable globale pour utiliser la structure dans toute les fonctions
TFilm tVideo[255];

//Prototype de fonctions
char Menu(void);            //Fonction pour le menu
void Affichage(int);        //Fonction pour l'affichage de donnes
int Importer(int);          //Fonction pour importer un fichier CSV
int RentrerDatas(int);      //Fonction pour ajouter de nouvelles données
void ExporterDatas(int,bool);//Fonction pour exporter vers un fichier CSV
void TitreFilm(int);        //Fonction pour ajouter le titre du film
void ActeurPrincipaux(int); //Fonction pour ajouter l'acteur principal
void DureeFilm(int);        //Fonction pour ajouter la duree du film
void SupportFilm(int);      //Fonction pour ajouter le support
void AgeLegal(int);         //Fonction pour ajouter l'age legal
void CommentairesFilm(int); //Fonction pour ajouter un commentaire
void Impression(int);       //Fonction pour imprimer les films

void Impression(int inCompteurEntree)
{
    ExporterDatas(inCompteurEntree,true);
    char chFichier[20] = "videotheque.txt";
    cout << "Impression en cours..." << endl;
    if(ShellExecute("handle","print",chFichier,NULL,NULL,0))
        cout << "Succes lors de l'impression!" << endl ;
    Sleep(2000);
    remove("videotheque.txt");
}

//Fonction pour exporter les données dans un fichier csv
void ExporterDatas(int inCompteurEntree, bool chPrint)
{
    //Demande à l'utilisateur le nom du fichier dans lequel exporter
    char chCheminFile[255] = {0};
    if(chPrint == false)
    {
        cout << "Dans quel fichier CSV voulez-vous exporter les données (par ex. c:/file.csv) ?" << endl;
        cin >> chCheminFile;
    }
    else strcpy (chCheminFile,"videotheque.txt");
    FILE *ptFichier = fopen(chCheminFile,"w+"); //Création d'un pointeur sur le fichier (W+ = lecture + Ecriture)
    if(ptFichier) //Si le fichier peut s'ouvrir
    {
        int inCompteur = 0;
        if(chPrint == true) fprintf(ptFichier,"Ceci est une vidéotheque. Les supports sont définis selon le système suivant: \\nD = DVD, V = VHS et X = Divx. Ce programme à été conçu par Jérome Freyre.\\n\\n\\n");
        while(inCompteur <= inCompteurEntree-1) //Tant que le compteur est plus petit que le nombre de film total
        {
            if(chPrint == false)
            {
                fprintf(ptFichier,"%s;%s;%d;%c;%d;%s\\n",  //On écrite les données dans le fichier (séparée par un [;]
                    tVideo[inCompteur].chTitre,
                    tVideo[inCompteur].chActeurs,
                    tVideo[inCompteur].inDuree,
                    tVideo[inCompteur].chSupport,
                    tVideo[inCompteur].inAgeLegal,
                    tVideo[inCompteur].chCommentaire
                );
                printf("Sauvegarde du film : %s\\n", //On affiche les données du film sauvegardee
                    tVideo[inCompteur].chTitre
                );
            }
            else
            {
                fprintf(ptFichier,"Film %d\\n",inCompteur+1);
                fprintf(ptFichier,"\\t        Titre: %s\\n",tVideo[inCompteur].chTitre);
                fprintf(ptFichier,"\\t       Acteur: %s\\n",tVideo[inCompteur].chActeurs);
                fprintf(ptFichier,"\\t  Durée (min): %d\\n",tVideo[inCompteur].inDuree);
                fprintf(ptFichier,"\\t      Support: %c\\n",tVideo[inCompteur].chSupport);
                fprintf(ptFichier,"\\t   Age legale: %d\\n",tVideo[inCompteur].inAgeLegal);
                fprintf(ptFichier,"\\t Commentaires: %s\\n",tVideo[inCompteur].chCommentaire);
            }
            inCompteur++;       //Incrément du compteur
        }
        fclose(ptFichier); //On ferme le fichier
        if(chPrint == false)
            cout << "Succes lors de la sauvegarde! " << endl;
    }
    else //Sinon on affiche une erreur
        cout << "Erreur lors de la sauvegarde! " << endl;
}
//Fonction pour le titre du film
void TitreFilm(int inCompteurEntree)
{
    //Demande le titre du film à l'utilisateur
    cout << "Veuillez entrer le Titre du film" << endl;
    char chTitreFilm[25] = {0};
    fgets(chTitreFilm,25,stdin);                                        //Lit la chaine de caractere
    strcpy(tVideo[inCompteurEntree].chTitre , chTitreFilm);             //Copie la chaine de caractere dans la strucuture
    int inLongueurString = strlen(tVideo[inCompteurEntree].chTitre);    //Défini la longueur de la chaine
    tVideo[inCompteurEntree].chTitre[inLongueurString-1] = '\\0';        //Supprime le dernier caractere
}
//Fonction pour l'acteur principal du film
void ActeurPrincipaux(int inCompteurEntree)
{
    //Demande l'(es) acteur(s) princpal(aux)  à l'utilisateur
    cout << endl << "Veuillez Entrer l'acteur principal" << endl;
    char chActeurs[25] = {0};
    fgets(chActeurs,25,stdin);                                          //Lit la chaine de caractere
    strcpy(tVideo[inCompteurEntree].chActeurs,chActeurs);               //Copie la chaine de caractere dans la structure
    int inLongueurString = strlen(tVideo[inCompteurEntree].chActeurs);  //Défini la longueur de la chaine
    tVideo[inCompteurEntree].chActeurs[inLongueurString-1] = '\\0';      //Supprime le dernier caractere
}
//Fonction pour la duree du film
void DureeFilm(int inCompteurEntree)
{
    //Demande la duree en minutes à l'utilisateur
    cout << endl << "Veuillez Entrer la durée en minutes du film" << endl;
    int inDuree;
    cin >> inDuree;                             //Lit la duree
    tVideo[inCompteurEntree].inDuree = inDuree; //Copie la duree dans la structure
}
//Fonction pour le support du film
void SupportFilm(int inCompteurEntree)
{
    //Demande le type de support a l'utilisateur
    cout << endl << "Veuillez entrer le support utiliser (D=DVD, V=VHS,X=Divx" << endl;
    char chSupports;
    cin >> chSupports;                               //Lit le caractere
    tVideo[inCompteurEntree].chSupport = chSupports; //Copie le caractere dans la structure
}
//Fonction pour l'age legal
void AgeLegal(int inCompteurEntree)
{
    //Demande l'age legal à l'utilisateur
    cout << endl << "Veuillez entrer l'age legal" << endl;
    int inAge;
    cin >> inAge;                                //Lecture de la valeur
    tVideo[inCompteurEntree].inAgeLegal = inAge; //Copie la valeur dans la structure
}
//Fonction pour les commentaire sur le film
void CommentairesFilm(int inCompteurEntree)
{
    //demande à l'utilisateur un commentaire sur le film
    cout << endl << "Avez vous de commentaires a faire, [-] pour non?!" << endl;
    char chComments[255];
    fgets(chComments,255,stdin);                                                //Copie ce que rentre l'utilisateur dans la variable
    strcpy(tVideo[inCompteurEntree].chCommentaire, chComments);                 //Copie la chaine de caractere dans la structure
    int inLongueurString = strlen(tVideo[inCompteurEntree].chCommentaire);      //défini la longueur de la chaine
    tVideo[inCompteurEntree].chCommentaire[inLongueurString-1] = '\\0';          //Supprime le dernier caratere (\\0)
}
//Fonction pour rentrer les données
int RentrerDatas(int inCompteurEntree)
{
    TitreFilm(inCompteurEntree);        //Fonction pour ajouter le titre
    ActeurPrincipaux(inCompteurEntree); //Fonction pour ajouter l'acteur
    DureeFilm(inCompteurEntree);        //Fonction pour ajouter la durée
    SupportFilm(inCompteurEntree);      //Fonction pour ajouter le support
    AgeLegal(inCompteurEntree);         //Fonction pour ajouter l'age legal
    CommentairesFilm(inCompteurEntree); //Fonction pour ajouter des commentaires
    inCompteurEntree++;                 //Increment du compteur
    return inCompteurEntree;            //Renvoi de la valeur du compteur
}

//Fonction pour importer un fichier CSV
int Importer(int inCompteurEntree)
{
    char chCheminFile[255] = {0};
    cout << "Veuillez indiquer le chemin d'acces au fichier CSV sous la forme C:/file.csv" << endl;
    cin >> chCheminFile;
    FILE *ptCheminFile = fopen(chCheminFile,"r");
    if(ptCheminFile)
    {
        int inRetour;
        while(!feof(ptCheminFile) && inRetour)
        {
            inRetour = fscanf(ptCheminFile,"%[^;];%[^;];%d;%c;%d;%[^\\n]\\n",
                &tVideo[inCompteurEntree].chTitre,
                &tVideo[inCompteurEntree].chActeurs,
                &tVideo[inCompteurEntree].inDuree,
                &tVideo[inCompteurEntree].chSupport,
                &tVideo[inCompteurEntree].inAgeLegal,
                &tVideo[inCompteurEntree].chCommentaire
            );
            printf("Enregistrement du film : %s\\n",
                tVideo[inCompteurEntree].chTitre
            );
            inCompteurEntree++;
        }
        fclose(ptCheminFile);
    }
    else
        cout << "Erreur dans l'ouverture du fichier! " << endl;
    return inCompteurEntree;
}
//Fonction Affichage de la videotheque
void Affichage(int inCompteurEntree)
{
    int inCompteur = 0;
    while(inCompteur <= inCompteurEntree-1)
    {
        printf("Film %d\\n",inCompteur+1);
        printf("\\t        Titre: %s\\n",tVideo[inCompteur].chTitre);
        printf("\\t       Acteur: %s\\n",tVideo[inCompteur].chActeurs);
        printf("\\t  Durée (min): %d\\n",tVideo[inCompteur].inDuree);
        printf("\\t      Support: %c\\n",tVideo[inCompteur].chSupport);
        printf("\\t   Age legale: %d\\n",tVideo[inCompteur].inAgeLegal);
        printf("\\t Commentaires: %s\\n",tVideo[inCompteur].chCommentaire);
        inCompteur++;
    }
}
//Fonction Menu
char Menu()
{
    SetConsoleTitle("Videotheque personnelle par Frero");
    char chRepMenu;
            cout << "Que desirez-vous faire ?" << endl;
    cout << endl << "   [R]   ==> Rentrer de nouvelles donnees ?";
    cout << endl << "   [E]   ==> Exporter mes donnees (CSV) ?";
    cout << endl << "   [I]   ==> Importer un fichier CSV ?";
    cout << endl << "   [A]   ==> Afficher mes donnees ?";
    cout << endl << "   [P]   ==> Imprimer mes donnees ?";
    cout << endl << "   [ESC] ==> Quitter le programme ?" << endl;
    chRepMenu = getch();
    return chRepMenu;
}
/******************************************************************************/
/*                          PROGRAMME PRINCIPAL                               */
/******************************************************************************/
void main(void)
{
    SetConsoleTitle("Videotheque Personnelle");
    int inCompteurEntree = 0;
    char chRepMenu = Menu();
    while(chRepMenu != 27)
    {
        switch(chRepMenu)
        {
            case 'P': case 'p':{
                Impression(inCompteurEntree);
                break;}
            case 'A': case 'a':{
                Affichage(inCompteurEntree);
                break;}
            case 'I': case 'i':{
                inCompteurEntree = Importer(inCompteurEntree);
                break;}
            case 'R': case 'r':{
                inCompteurEntree = RentrerDatas(inCompteurEntree);
                break;}
            case 'E': case 'e':{
                ExporterDatas(inCompteurEntree,false);
                break;}
        }
        cout << endl << endl;
        chRepMenu = Menu();
    }
}

Conclusion :


Je veut encore essayer d'ajouter la possibilite d'imprimer les fichier CSV mais je bloque un peu.... Si qqn a une idee, qu'il n'hesite pas!

A voir également

Ajouter un commentaire Commentaires
Messages postés
320
Date d'inscription
mercredi 9 octobre 2002
Statut
Membre
Dernière intervention
6 avril 2008

merci pour cette source, et comme la dit nono, pas con du tout le scanf,

y'a meme moyen de rendre le truc dynamique en personalisant le filtre pour gérer un nombre de champ n par ligne.

bye
Messages postés
4
Date d'inscription
mercredi 27 août 2003
Statut
Membre
Dernière intervention
11 février 2006

Hello! Merci pour les compliments! :D
Pour ce qui est des commentaires, je sais que c'est tres tres succints mais des fois ca me semble assez logique et j'oublie d'y mettre quand emme un commentaire! Pour ce qui est du lexeur de fscanf, c'est vrai que c'est bien pratique!
Messages postés
4
Date d'inscription
mercredi 27 août 2003
Statut
Membre
Dernière intervention
11 février 2006

Hello! Merci pour les compliments! :D
Pour ce qui est des commentaires, je sais que c'est tres tres succints mais des fois ca me semble assez logique et j'oublie d'y mettre quand emme un commentaire! Pour ce qui est du lexeur de fscanf, c'est vrai que c'est bien pratique!
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
Bj

petit source sympatique

commenté succintement mais suffisemment



Voici les deux fonctionnalités relevée qui pourraient etre utiles dans d'autres projets:

l'utilisation sympatique de la chaine format de scanf (non retrouvée dans les MSDN, donc à tester en fonction des implémentations)

fscanf(___,"%[^;];%[^;];%d;%c;%d;%[^\\n]\\n",....)

je ne me souvenais plus qu'on pouvait utiliser cette fonction en tant que lexeur...


sinon, l'impression de fichier,
ShellExecute("handle","print",chFichier,NULL,NULL,0)

simple net et concis.


++
Nono.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.