#include #include #include struct Voiture { char numero[10]; char marque[10]; double prix; } Voit[30]; struct Adressage { char numero[10]; int addresse; } Index[30]; using namespace std; void saisieVoiture(int count) { int i; for (i = 0; i < count; i++) { cout << "Entrez le numero de la voiture: "; cin >> Voit[i].numero; cout << "Entrez la marque de la voiture: "; cin >> Voit[i].marque; cout << "Entrez le prix de la voiture: "; cin >> Voit[i].prix; } } bool stockerVoiture(char fileName[], char fileNameIndex[], int count) { int i; ofstream idFile(fileName, ios::binary); ofstream idFileIndex(fileNameIndex, ios::out); if (idFile.fail() || idFileIndex.fail()) return false; for (i = 0; i < count; i++) { idFile.write((char *)&Voit,sizeof(Voit)); memcpy(Index[i].numero, Voit[i].numero, 10); //strncpy_s(Index[i].numero, 10, Voit[i].numero/*,_TRUNCATE*/); cout << "numero " << Index[i].numero << endl; Index[i].addresse = i * sizeof(Voit); idFileIndex << Voit[i].numero << " " << Index[i].addresse << endl; } return true; } bool chargerFichier(char fileName[]) { ifstream idFile(fileName, ios::binary); int i = 0; if (idFile.fail()) return false; while (!idFile.eof()) { idFile.read((char *)&Voit[i],sizeof(Voit)); if (idFile.peek() == EOF) break; i++; } return true; } int chercherVoiture(char numero[], int count) { int i; cout << "Index : " << Index[0].numero << endl; for (i = 0; i < count; i++) { if (strcmp(numero, Index[i].numero)==0) return Index[i].addresse; } return -1; } bool afficherVoiture(char fileName[], int addr) { Voiture res; ifstream idFile(fileName, ios::binary); if (idFile.fail()) return false; idFile.seekg(addr, ios::beg); idFile.read((char *)&res,sizeof(res)); cout << res.numero << " " << res.marque << " " << res.prix << endl; return true; } int main(){ int count, addr; char numero[10] = "3"; char fileName[] = "c:\\temp\\FichierVoiture.bin"; char fileNameIndex[] = "c:\\temp\\IndexVoiture.txt"; cout << "Combien de voitures allez vous entrer: "; cin >> count; saisieVoiture(count); if (stockerVoiture(fileName, fileNameIndex, count)) { if (!chargerFichier(fileName)) { cout << "Erreur lors du chargement du fichier" << endl; exit(1); } } else { cout << "Erreur lors de l'ecriture du fichier" << endl; exit(1); } cout << "numero: " << Index[0].numero << endl; addr = chercherVoiture(numero, count); cout << "adresse : " << addr << endl; if (addr > -1) afficherVoiture(fileName, addr); else cout << "Numero de voiture " << numero << " non existante" << endl; }