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!
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.