Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// mein.cpp
- #include <iostream>
- #include <fstream>
- #include <cstring>
- #include <windows.h>
- #include <stdlib.h>
- #define INPUT_FILENAME "date.txt" /** fisireul de intrare trebuie **/
- #define OUTPUT_FILENAME "date.txt" /** sa fie acelea cu cel de iesire **/
- #define MAX_SIZE 100
- using namespace std;
- int numarDeMasini = 0;
- void afiseazaMeniu();
- struct Masina{
- char cod[MAX_SIZE];
- char numarInmatriculare[MAX_SIZE];
- char numeSofer[MAX_SIZE];
- char destinatie[MAX_SIZE];
- char numarKilometri[MAX_SIZE];
- char numarLocuri[MAX_SIZE];
- }masini[MAX_SIZE];
- void salvareDate(){
- ofstream fout;
- fout.open(OUTPUT_FILENAME);
- if(!fout.good()){ /** in cazul in care nu este gasit fisierul OUTPUT_FILENAME o sa apara o eroere **/
- cout << "Eroare la deschiderea fisierului " << OUTPUT_FILENAME << '\n';
- exit(-1);
- }
- for(int i = 0; i < numarDeMasini; ++i){
- fout << masini[i].cod << '\n';
- fout << masini[i].numarInmatriculare << '\n';
- fout << masini[i].numeSofer << '\n';
- fout << masini[i].destinatie << '\n';
- fout << masini[i].numarKilometri << '\n';
- fout << masini[i].numarLocuri << '\n';
- if(i != numarDeMasini - 1){
- fout << '\n';
- }
- }
- }
- void meniuDeIntoarcere(){
- cout << "\n Apasati : \n\t 1 - pentru a reveni la meniul initial \n\t 0 - pentu a iesi\n";
- char actiune;
- do{
- cout << " >> ";
- cin >> actiune;
- }while(!(actiune == '1' || actiune == '0'));
- system("cls"); /** aceasta functie sterge tot ce era inainte in consola **/
- if(actiune == '1'){
- afiseazaMeniu();
- }
- else{
- return;
- }
- }
- void afiseazaMasina(Masina masina){
- cout << "\n\tCOD : " << masina.cod
- << "\n\tNumar de inmatrculare : " << masina.numarInmatriculare
- << "\n\tNume sofer : " << masina.numeSofer
- << "\n\tDestinatie : " << masina.destinatie
- << "\n\tNumarul de kilometri : " << masina.numarKilometri
- << "\n\tNumarul de locuri : " << masina.numarLocuri << '\n';
- }
- void citesteDate(){
- ifstream fin;
- fin.open(INPUT_FILENAME);
- if(!fin.good()){ /** in cazul in care nu este gasit fisierul INPUT_FILENAME o sa apara o eroere **/
- cout << "Eroare la deschiderea fisierului " << INPUT_FILENAME << '\n';
- exit(-1);
- }
- while(!fin.eof()){ /** citeste pana la final din fisierul date.txt **/
- Masina masina;
- fin.getline(masina.cod, MAX_SIZE);
- fin.getline(masina.numarInmatriculare, MAX_SIZE);
- fin.getline(masina.numeSofer, MAX_SIZE);
- fin.getline(masina.destinatie, MAX_SIZE);
- fin.getline(masina.numarKilometri, MAX_SIZE);
- fin.getline(masina.numarLocuri, MAX_SIZE);
- fin.get();
- masini[numarDeMasini] = masina;
- ++numarDeMasini;
- }
- }
- void afisareSoferiInOrdineAlfabeticaSiNrInmatriculare(){ /// cerinta 1
- for(int i = 0; i < numarDeMasini; ++i){
- for(int j = 0; j < numarDeMasini; ++j){ /** sortez lista in functie de numele soferului**/
- if(strcmp(masini[i].numeSofer, masini[j].numeSofer) < 0){
- Masina aux = masini[i];
- masini[i] = masini[j];
- masini[j] = aux;
- }
- }
- }
- for(int i = 0; i < numarDeMasini; ++i){
- cout << "\n\tSofer : "<< masini[i].numeSofer << " -> Numar masina : " << masini[i].numarInmatriculare;
- }
- cout << '\n';
- meniuDeIntoarcere();
- }
- void adaugaONouaCursa(){ /// cerinta 2
- Masina masina;
- cin.get();
- cout << "Dati codul masinii! \n >>";
- cin.getline(masina.cod, MAX_SIZE);
- cout << "\n Dati numarul de inmatriculare al masinii! \n >>";
- cin.getline(masina.numarInmatriculare, MAX_SIZE);
- cout << "\n Dati numele soferului masinii! \n >>";
- cin.getline(masina.numeSofer, MAX_SIZE);
- cout << "\n Dati destinatia! \n >>";
- cin.getline(masina.destinatie, MAX_SIZE);
- cout << "\n Dati numarul de kilometri ! \n >>";
- cin.getline(masina.numarKilometri, MAX_SIZE);
- cout << "\n Dati numarul de locuri ! \n >>";
- cin.getline(masina.numarLocuri, MAX_SIZE);
- masini[numarDeMasini] = masina;
- ++numarDeMasini;
- salvareDate();
- cout << "\n Cursa a fost inregistrata cu succes !";
- meniuDeIntoarcere();
- }
- void afisareNumarCursePentruFiecareDestinatie(){ /// cerinta 3
- cout << " Numarul de curse pentru fiecare destinatie :\n";
- char destinatii[MAX_SIZE*10];
- for(int i = 0 ;i < numarDeMasini; ++i){
- if(!strstr(destinatii, masini[i].destinatie)){
- strcat(destinatii, masini[i].destinatie);
- int nrCurse = 1;
- for(int j = i + 1; j < numarDeMasini; ++j){
- if(!strcmp(masini[i].destinatie, masini[j].destinatie)){
- ++nrCurse;
- }
- }
- cout << '\t' << masini[i].destinatie << " : " << nrCurse << '\n';
- }
- }
- meniuDeIntoarcere();
- }
- void inlocuireSofer(){ /// cerinta 4
- cout << " Selectati numarul corespunzator soferului pe care doriti sa-l inlocuiti! \n";
- for(int i = 0; i < numarDeMasini; ++i){
- cout << '\t' << i + 1 << " - " << masini[i].numeSofer << '\n';
- }
- int index;
- do{
- cout << " >> ";
- cin >> index;
- }while(index < 1 || index > numarDeMasini);
- cout << " Scrieti numele soferului cu care doriti sa-l inlocuiti pe " << masini[index - 1].numeSofer << " !\n >> ";
- cin.get();
- cin.getline(masini[index - 1].numeSofer, MAX_SIZE);
- salvareDate();
- cout << "\n Schimbarea a fost inregistrata cu succes !";
- meniuDeIntoarcere();
- }
- void afisareCeleMaiApropiateDestinatii(){ /// cerinta 5
- int minDist = atoi(masini[numarDeMasini-1].numarKilometri);
- for(int i = 0; i < numarDeMasini - 1; ++i){
- if(minDist > atoi(masini[i].numarKilometri)){
- minDist = atoi(masini[i].numarKilometri);
- }
- }
- cout << " Cele mai apropiate destinatii sunt : \n";
- for(int i = 0; i < numarDeMasini; ++i){
- if(atoi(masini[i].numarKilometri) == minDist){
- cout << '\t' << masini[i].destinatie << '\n';
- }
- }
- meniuDeIntoarcere();
- }
- void afisareMasinileCuCelMaiMareNrDeLocuri(){ /// cerinta 6
- int maxNrLocuri = atoi(masini[numarDeMasini-1].numarLocuri);
- for(int i = 0; i < numarDeMasini - 1; ++i){
- if(maxNrLocuri < atoi(masini[i].numarLocuri)){
- maxNrLocuri = atoi(masini[i].numarLocuri);
- }
- }
- cout << " Masinile care au cele mai multe locuri sunt : \n\n";
- for(int i = 0; i < numarDeMasini; ++i){
- if(atoi(masini[i].numarLocuri) == maxNrLocuri){
- afiseazaMasina(masini[i]);
- }
- }
- meniuDeIntoarcere();
- }
- void afisareCurselePentruODestinatie(){ /// cerinta 7
- cout << " Selectati numarul corespunzator destinatiei ! \n";
- char destinatii[MAX_SIZE*10];
- char des2d[MAX_SIZE][MAX_SIZE];
- int index = 1;
- for(int i = 0; i < numarDeMasini; ++i){
- if(!(strstr(destinatii, masini[i].destinatie))){
- strcat(destinatii, masini[i].destinatie);
- cout << '\t' << index <<" - " << masini[i].destinatie << '\n';
- strcpy(des2d[index], masini[i].destinatie);
- ++index;
- }
- }
- int index2;
- do{
- cout << " >> ";
- cin >> index2;
- }while(index2 < 1 || index2 > index);
- cout <<"\n Masinile cu destinatia " << des2d[index2] << " sunt :\n";
- for(int i = 0; i < numarDeMasini; ++i){
- if(!strcmp(des2d[index2], masini[i].destinatie)){
- afiseazaMasina(masini[i]);
- }
- }
- meniuDeIntoarcere();
- }
- void afiseazaMeniu(){
- cout << " Meniu :";
- cout << "\n\t1 - Afiseaza in ordine alfabetica soferii si nr. de inmatriculare a masinii pe care o conduce;";
- cout << "\n\t2 - Pentru a adauga o noua masina;";
- cout << "\n\t3 - Afiseaza numarul de curse pentru fiecare destinatie;";
- cout << "\n\t4 - Inlocuirea unui sofer;";
- cout << "\n\t5 - Afiseaza destinatiile cele mai apropiate;";
- cout << "\n\t6 - Afiseaza masinile cu cele mai mare numar de locuri;";
- cout << "\n\t7 - Afiseaza cursele pentru o anumita destinatie;";
- cout << "\n\t0 - Pentru a opti programul\n";
- int actiune;
- do{
- cout << " >> ";
- cin >> actiune;
- }while(actiune < 0 || actiune > 7);
- system("cls");
- switch (actiune){
- case 1:
- afisareSoferiInOrdineAlfabeticaSiNrInmatriculare();
- break;
- case 2:
- adaugaONouaCursa();
- break;
- case 3:
- afisareNumarCursePentruFiecareDestinatie();
- break;
- case 4:
- inlocuireSofer();
- break;
- case 5:
- afisareCeleMaiApropiateDestinatii();
- break;
- case 6:
- afisareMasinileCuCelMaiMareNrDeLocuri();
- break;
- case 7:
- afisareCurselePentruODestinatie();
- break;
- case 0:
- return;
- }
- }
- int main(){
- citesteDate();
- afiseazaMeniu();
- return 0;
- }
- ///date.txt
- 001
- BC 04 TRA
- Ardeleanul Cristi
- Onesti
- 12
- 43
- 002
- BC 12 TRA
- Vicu Alin
- Bacau
- 92
- 21
- 003
- IF 14 TRA
- Pop Nicu
- Bucuresti
- 12
- 32
- 004
- NT 22 TRA
- Camara Florin
- Bacau
- 61
- 19
- 009
- BC 76 NUN
- Alunel Bogdan
- Bucuresti
- 100
- 43
- 007
- BV 08 JNB
- Alexe Valentin
- Sibiu
- 94
- 43
Add Comment
Please, Sign In to add comment