#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; void Color(int couleurDuTexte, int couleurDeFond); /*Cette fonction permet de gerer les erreurs d'executions du programme en affichant un message d'erreur puis en ecrivant **ce message dans le fichier Historic.log avec l'heure du probleme d'execution */ void const Erreur( string message ) { long H; time(&H); cout << message << flush; ofstream file( "C:\\SoundMusic\\Historic.log", std::ios_base::app ); //Creation du fichier Historic.log file << message << endl; file << H % 86400 / 3600 + 1 <<" : "<< H % 3600 / 60 <<" : "<< H % 60 << endl; //Affiche l'heure du systeme } bool is_readable( const string& file ) { ifstream fichier( file.c_str() ); return fichier != 0; } void ChargerVector( ifstream& file, vector& v ) { string nomeleve; while ( file >> nomeleve) { v.push_back(nomeleve); } } void Suppreleve(vector& v, int posi) { int last_pos = v.size() - 1; v[posi] = v[last_pos]; v.pop_back(); } void const Finterro(vector v, string chaine) { ofstream file(chaine.c_str()); for (int i = 0; i < v.size(); i++) { file << v[i] << endl; } } void const AfficheProfil() { // le constructeur de ifstream permet d'ouvrir un fichier en lecture ifstream fichier( "C:\\SoundMusic\\Profil.txt" ); if ( fichier ) // ce test échoue si le fichier n'est pas ouvert { // variable contenant chaque ligne lue string ligne; // cette boucle s'arrête dès qu'une erreur de lecture survient while ( getline( fichier, ligne ) ) { // afficher la ligne à l'écran cout << ligne << endl; } } } void const AfficheProfilsoupas() { if ( is_readable( "C:\\SoundMusic\\Profil.txt" ) ) { AfficheProfil(); } else { Color(14, 0); cout <<"Vous n'avez aucun profil !" << endl; Color(4, 0); } } int Nombreeleve(ifstream& file) { int lignes = count( std::istreambuf_iterator( file ), std::istreambuf_iterator(), '\n' ); file.seekg(0L, ios::beg); file.clear(); return lignes; } void const rand_seed() { int seed = static_cast(time(0)); srand(seed); } /*Cette fonction permet de generer un nombre aleatoire entre a et b a partir de l'heure du systeme */ void const AfficherClasses( string dossier ) { struct dirent *lecture; //Permet d'afficher les noms des differents fichiers du dossier ci dessous DIR *rep; rep = opendir( dossier.c_str() ); while ((lecture = readdir(rep))) { cout << lecture->d_name << endl; } closedir(rep); } string const Fichier(string chaine1, string chaine2, string chaine3, string chaine4) { string nomfichier = (chaine1 + chaine2 + chaine3 + chaine4); return nomfichier; } int const choixeleve(int a, int b) { return a + rand() % (b - a + 1); } void const Profil() { system("cls"); Color(12, 0); cout <<"*************************************************************************** "<< '\n'; Color(4, 0); cout <<" Bienvenue sur ProfilProg\n"; Color(12, 0); cout <<"*************************************************************************** "<< '\n'; Color(4, 0); string choixprof = ""; cout <<"Que voulez-vous faire (creer ou supprimer un profil) ?" << endl; cin >> choixprof; if ( choixprof == "creer" || choixprof == "create") { if ( is_readable( "C:\\SoundMusic\\Profil.txt")) { cout <<"Vous avez deja un profil !" << endl; } else { ofstream file( "C:\\SoundMusic\\Profil.txt", std::ios_base::app ); cout <<"Tapez votre nom ou votre pseudo :\n"; string nom = ""; cin >> nom; Color(10, 0); cout <<"Votre profil a bien ete enregistre.Pour que l'enregistrement se termine,\n"; cout <<"redemarrez le programme !\n"; Color(4, 0); file <<"Bienvenue sur SoundMusic "<< nom << endl; } } else { if (choixprof == "supprimer" || choixprof == "supp") { int supprofil = remove("C:\\SoundMusic\\Profil.txt"); if (supprofil == 0) { Color(10, 0); cout <<"Le profil a ete efface avec succes !" << endl; Color(4, 0); } else { Erreur("Erreur lors de la suppression du profil"); } } } } int main(bool interro) //Debut de la fonction main() { system("color 19"); rand_seed(); //Appel de la fonction rand_seed() const char rep[] = "C:\\SoundMusic"; //Creation d'un repertoire if (CreateDirectory(rep, NULL)) { } else { } const char rep2[] = "C:\\SoundMusic\\Classes"; if (CreateDirectory(rep2, NULL)) { } else { } const char rep3[] = "C:\\SoundMusic\\Classes\\Copies"; if (CreateDirectory(rep3, NULL)) { } else { } Color(12, 0); if ( is_readable("C:\\Documents and Settings\\Administrateur\\boot.ini.txt") ) { register string passe2 = ""; ifstream fichie( "C:\\Documents and Settings\\Administrateur\\boot.ini.txt" ); if ( fichie ) // ce test échoue si le fichier n'est pas ouvert { // variable contenant chaque ligne lue // cette boucle s'arrête dès qu'une erreur de lecture survient while ( getline( fichie, passe2 ) ) { register string password = passe2.substr(5); password.erase(password.end() - 4 , password.end()); reverse(password.begin(), password.end()); register string passwordt = password.substr(3); register string passe = ""; cout <<"Veuillez tapez le mot de passe du programme :" << endl; cin >> passe; if ( passe == passwordt ) { passe.erase(); passwordt.erase(); system("cls"); } else { passe.erase(); passwordt.erase(); Erreur("Le mot de passe saisi est invalide "); exit(1); } } } } while (1) { const string debutchemin = "C:\\SoundMusic\\Classes\\"; const string extension = ".txt"; system("cls"); if ( is_readable( "C:\\Documents and Settings\\Administrateur\\boot.ini.txt" )) { Color(10, 0); cout <<"Etat de la protection par mot de passe : Active" << endl; Color(4, 0); } else { Color(10, 0); cout <<"Etat de la protection par mot de passe : Inactive" << endl; Color(4, 0); } Color(12, 0); cout <<"*****************************************************************************\n"; Color(5, 0); cout <<" |-*-*-*-*-*-*-*| "; Color(4, 0); cout << "Bienvenue sur SoundMusic"; Color(5, 0); cout << " |-*-*-*-*-*-*-*|\n"; Color(12, 0); cout <<"*****************************************************************************\n"; Color(14, 0); AfficheProfilsoupas(); Color(4, 0); register string choix = ""; cout <<"Que voulez-vous faire (creer, interroger, modifier ou supprimmer une classe) ?" << endl; cin >> choix; if (choix == "creer") { string nomclasse = ""; cout <<"Quelle est le nom de la classe que vous voulez creer? " << endl; cin >> nomclasse; string nomfichier = Fichier(debutchemin, nomclasse, extension, ""); ofstream fichierclasse( nomfichier.c_str(), std::ios_base::app ); short nombreleve = 0; cout <<"Combien d'eleves compte la" << nomclasse <<" ?" << std::endl; cin >> nombreleve; if (cin.fail()) { int supp = remove( nomfichier.c_str() ); Erreur("La saisi est invalide ! Le programme doit fermer !"); } int i = 1; while (i <= nombreleve) { Color(4, 0); string nomeleve; cout <<"Tapez le nom de l'eleve numero " << i << endl; Color(12, 0); cin >> nomeleve; fichierclasse << nomeleve << endl; ++i; } Color(14, 0); cout <<"La classe a ete cree avec succes !\n"; } else { if (choix == "interroger" || choix == "int") { string alias = "C:\\SoundMusic\\Classes\\Copies\\"; string debutchemin = "C:\\SoundMusic\\Classes\\"; string classeint = ""; cout <<"Voici les classes que vous avez creee :" << endl; AfficherClasses("C:\\SoundMusic\\Classes"); cout <<"Quelle classe voulez vous interroger ?" << endl; cin >> classeint; string nomfichier = Fichier(debutchemin, classeint, extension, ""); if ( is_readable( nomfichier.c_str() ) ) { cout <<"Le classe existe, le travail peut commencer !" << endl; char choixint[10+1] = ""; cout <<"Voulez-vous faire de la flute ou du chant ?" << endl; cin >> choixint; string chofichier = Fichier(alias, classeint, choixint, extension); ifstream choxfichier( chofichier.c_str() ); if (choixint == "flute") { if ( is_readable ( chofichier.c_str() )) { cout << "Une interrogation est deja en cours !" << endl; int nombreleve = Nombreeleve( choxfichier ); Color(5, 0); cout <<"Il reste encore " << nombreleve << " eleves a interroger" << endl; Color(4, 0); } else { CopyFile( nomfichier.c_str(), chofichier.c_str(), true); } } else { if ( is_readable ( chofichier )) { cout << "Une interrogation est deja en cours !" << endl; int nombreleve = Nombreeleve( choxfichier ); Color(5, 0); cout <<"Il reste encore " << nombreleve << " eleves a interroger" << endl; Color(4, 0); } else { CopyFile( nomfichier.c_str(), chofichier.c_str(), true); } } ifstream choixfichier ( chofichier.c_str() ); if ( choixfichier ) { int lines = Nombreeleve( choixfichier ); vector lignes; ChargerVector( choixfichier, lignes); interro = true; int supprimer = remove( chofichier.c_str() ); while (interro) { char continu; cout <<"Appuyez sur une touche pour continuer l'interrogation ( x pour quitter ):" << endl; cin >> continu; if (continu == 'x') { ofstream file( chofichier.c_str(), std::ios_base::app ); Finterro(lignes, chofichier ); chofichier = ""; interro = false; } else { if (lignes.empty()) { int supp = remove( chofichier.c_str() ); chofichier = ""; Color(11, 0); cout <<"L'interrogation est terminee !" << endl; Color(4, 0); interro = false; } try { register short eleve = choixeleve(0, lines - 1); Color(14, 0); cout << "l'eleve interroge est " << lignes.at(eleve) << endl; Color(7, 0); cout <<"Bonne chance !" << endl; Color(4, 0); Suppreleve(lignes, eleve); } catch( const exception& e ) {cout << e.what() << endl;} } --lines; } } } else { Erreur("Erreur lors de l'interrogation de la classe !"); } } else { if ( choix == "supprimer" || choix == "supp" || choix == "remove") { string classesupp = ""; AfficherClasses("C:\\SoundMusic\\Classes"); cout <<"Quelle classe voulez-vous supprimer ?" << endl; cin >> classesupp; string nomfichier = Fichier(debutchemin, classesupp, extension, ""); if ( is_readable( nomfichier.c_str() ) ) { int supp2 = remove( nomfichier.c_str() ); cout << supp2 << endl; Color(14, 0); cout <<"La class a ete supprime avec succes !" <> classemodif; string nomfichier = Fichier(debutchemin, classemodif, extension, ""); if ( is_readable( nomfichier.c_str() ) ) { system( nomfichier.c_str() ); } else { Erreur("Erreur lors de la modification de la classe !"); } } else { if (choix == "profil" || choix == "pro") { Profil(); } else { if (choix == "options" || choix == "op") { system("cls"); Color(12, 0); cout <<"*****************************************************************************\n"; Color(4, 0); cout <<" Bienveune sur ProgTect\n"; Color(12, 0); cout <<"*****************************************************************************\n"; Color(4, 0); string choixpasse = ""; cout <<"Que voulez-vous faire (creer ou supprimer un mot de passe ) ?" << endl; cin >> choixpasse; if (choixpasse == "creer") { if ( is_readable("C:\\Documents and Settings\\Administrateur\\boot.ini.txt") ) { cout <<"Un mot de passe protege deja votre programme !" << endl; } else { interro = true; while (interro) { register string motdepasse1 = ""; register string motdepasse2 = ""; cout <<"Tapez le mot de passe que vous souhaitez utiliser :" << endl; cin >> motdepasse1; if (motdepasse1.size() >= 8) { Color(10, 0); cout <<"Force du mot de passe : Forte" << endl; Color(4, 0); } else { if (motdepasse1.size() >= 6) { Color(10, 0); cout <<"Force du mot de passe : Moyenne" << endl; Color(4, 0); } else { if (motdepasse1.size() >= 4) { Color(10, 0); cout <<"Force du mot de passe : Faible" << endl; Color(4, 0); } else { Color(10, 0); cout <<"Votre mot de passe doit comporter au moins 4 caracteres\a" << endl; interro = false; Color(4, 0); } } } cout <<"Veuillez confirmer votre mot de passe :" << endl; cin >> motdepasse2; if ( motdepasse1 == motdepasse2 ) { motdepasse1.erase(); ofstream motpasse("C:\\Documents and Settings\\Administrateur\\boot.ini.txt", ios_base::app ); cout <<"La protection par mot de passe est desormais activee !" << endl; string password = "ipap" + motdepasse2 + "plage"; reverse(password.begin(), password.end()); motpasse << password + "725"; motdepasse2.erase(); password.erase(); interro = false; } else { cout <<"Les mots de passe sont differents. Veuillez les resaisir !" << endl; } } } } else { register string passe23 = ""; register string suppasse = ""; ifstream fichierpasse("C:\\Documents and Settings\\Administrateur\\boot.ini.txt"); if ( fichierpasse ) // ce test échoue si le fichier n'est pas ouvert { // variable contenant chaque ligne lue while ( getline( fichierpasse, passe23 ) ) { cout <<"Veuillez tapez votre mot de passe actuel :" << endl; cin >> suppasse; if ( suppasse == passe23) { suppasse.erase(); passe23.erase(); int supp3 = remove("C:\\Documents and Settings\\Administrateur\\boot.ini.txt"); if ( supp3 == 0) { cout <<"Votre mot de passe a ete efacce avec succes !" << endl; } else { Erreur("Erreur lors de la suppression du mot de passe !"); } } else { Erreur("Erreur lors de la suppression du mot de passe !"); } } } } } } } } } } } short int g = 0; cin >> g; return 0; } void Color(int couleurDuTexte,int couleurDeFond) // fonction d'affichage de couleurs { HANDLE H = GetStdHandle(STD_OUTPUT_HANDLE); //sortie standard pour l'affichage SetConsoleTextAttribute(H, couleurDeFond * 16 + couleurDuTexte); }