Marian23

Curse/Masini

Nov 16th, 2019
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.44 KB | None | 0 0
  1. /// mein.cpp
  2. #include <iostream>
  3. #include <fstream>
  4. #include <cstring>
  5. #include <windows.h>
  6. #include <stdlib.h>
  7. #define INPUT_FILENAME "date.txt"     /** fisireul de intrare trebuie **/
  8. #define OUTPUT_FILENAME "date.txt"  /** sa fie acelea cu cel de iesire **/
  9. #define MAX_SIZE 100
  10. using namespace std;
  11.  
  12. int numarDeMasini = 0;
  13. void afiseazaMeniu();
  14.  
  15. struct Masina{
  16.     char cod[MAX_SIZE];
  17.     char numarInmatriculare[MAX_SIZE];
  18.     char numeSofer[MAX_SIZE];
  19.     char destinatie[MAX_SIZE];
  20.     char numarKilometri[MAX_SIZE];
  21.     char numarLocuri[MAX_SIZE];
  22. }masini[MAX_SIZE];
  23.  
  24. void salvareDate(){
  25.     ofstream fout;
  26.     fout.open(OUTPUT_FILENAME);
  27.     if(!fout.good()){  /** in cazul in care nu este gasit fisierul OUTPUT_FILENAME o sa apara o eroere **/
  28.         cout << "Eroare la deschiderea fisierului " << OUTPUT_FILENAME << '\n';
  29.         exit(-1);
  30.     }
  31.     for(int i = 0; i < numarDeMasini; ++i){
  32.         fout << masini[i].cod << '\n';
  33.         fout << masini[i].numarInmatriculare << '\n';
  34.         fout << masini[i].numeSofer << '\n';
  35.         fout << masini[i].destinatie << '\n';
  36.         fout << masini[i].numarKilometri << '\n';
  37.         fout << masini[i].numarLocuri << '\n';
  38.         if(i != numarDeMasini - 1){
  39.             fout << '\n';
  40.         }
  41.     }
  42. }
  43.  
  44. void meniuDeIntoarcere(){
  45.     cout << "\n Apasati : \n\t 1 - pentru a reveni la meniul initial \n\t 0 - pentu a iesi\n";
  46.     char actiune;
  47.     do{
  48.         cout << " >> ";
  49.         cin >> actiune;
  50.     }while(!(actiune == '1' || actiune == '0'));
  51.     system("cls");    /** aceasta functie sterge tot ce era inainte in consola **/
  52.     if(actiune == '1'){
  53.         afiseazaMeniu();
  54.     }
  55.     else{
  56.         return;
  57.     }
  58. }
  59.  
  60. void afiseazaMasina(Masina masina){
  61.     cout << "\n\tCOD : " << masina.cod
  62.          << "\n\tNumar de inmatrculare : " << masina.numarInmatriculare
  63.          << "\n\tNume sofer : " << masina.numeSofer
  64.          << "\n\tDestinatie : " << masina.destinatie
  65.          << "\n\tNumarul de kilometri : " << masina.numarKilometri
  66.          << "\n\tNumarul de locuri : " << masina.numarLocuri << '\n';
  67. }
  68.  
  69. void citesteDate(){
  70.     ifstream fin;
  71.     fin.open(INPUT_FILENAME);
  72.     if(!fin.good()){   /** in cazul in care nu este gasit fisierul INPUT_FILENAME o sa apara o eroere **/
  73.         cout << "Eroare la deschiderea fisierului " << INPUT_FILENAME << '\n';
  74.         exit(-1);
  75.     }
  76.     while(!fin.eof()){ /** citeste pana la final din fisierul date.txt **/
  77.         Masina masina;
  78.         fin.getline(masina.cod, MAX_SIZE);
  79.         fin.getline(masina.numarInmatriculare, MAX_SIZE);
  80.         fin.getline(masina.numeSofer, MAX_SIZE);
  81.         fin.getline(masina.destinatie, MAX_SIZE);
  82.         fin.getline(masina.numarKilometri, MAX_SIZE);
  83.         fin.getline(masina.numarLocuri, MAX_SIZE);
  84.         fin.get();
  85.         masini[numarDeMasini] = masina;
  86.         ++numarDeMasini;
  87.     }
  88. }
  89.  
  90. void afisareSoferiInOrdineAlfabeticaSiNrInmatriculare(){ /// cerinta 1
  91.     for(int i = 0; i < numarDeMasini; ++i){
  92.         for(int j = 0; j < numarDeMasini; ++j){                   /** sortez lista in functie de numele soferului**/
  93.             if(strcmp(masini[i].numeSofer, masini[j].numeSofer) < 0){
  94.                 Masina aux = masini[i];
  95.                 masini[i] = masini[j];
  96.                 masini[j] = aux;
  97.             }
  98.         }
  99.     }
  100.     for(int i = 0; i < numarDeMasini; ++i){
  101.         cout << "\n\tSofer : "<< masini[i].numeSofer << " -> Numar masina : " << masini[i].numarInmatriculare;
  102.     }
  103.     cout << '\n';
  104.     meniuDeIntoarcere();
  105. }
  106.  
  107. void adaugaONouaCursa(){ /// cerinta 2
  108.     Masina masina;
  109.     cin.get();
  110.     cout << "Dati codul masinii! \n >>";
  111.     cin.getline(masina.cod, MAX_SIZE);
  112.  
  113.     cout << "\n Dati numarul de inmatriculare al masinii! \n >>";
  114.     cin.getline(masina.numarInmatriculare, MAX_SIZE);
  115.  
  116.     cout << "\n Dati numele soferului masinii! \n >>";
  117.     cin.getline(masina.numeSofer, MAX_SIZE);
  118.  
  119.     cout << "\n Dati destinatia! \n >>";
  120.     cin.getline(masina.destinatie, MAX_SIZE);
  121.  
  122.     cout << "\n Dati numarul de kilometri ! \n >>";
  123.     cin.getline(masina.numarKilometri, MAX_SIZE);
  124.  
  125.     cout << "\n Dati numarul de locuri ! \n >>";
  126.     cin.getline(masina.numarLocuri, MAX_SIZE);
  127.  
  128.     masini[numarDeMasini] = masina;
  129.     ++numarDeMasini;
  130.     salvareDate();
  131.     cout << "\n Cursa a fost inregistrata cu succes !";
  132.     meniuDeIntoarcere();
  133. }
  134.  
  135. void afisareNumarCursePentruFiecareDestinatie(){ /// cerinta 3
  136.     cout << " Numarul de curse pentru fiecare destinatie :\n";
  137.     char destinatii[MAX_SIZE*10];
  138.     for(int i = 0 ;i < numarDeMasini; ++i){
  139.         if(!strstr(destinatii, masini[i].destinatie)){
  140.             strcat(destinatii, masini[i].destinatie);
  141.             int nrCurse = 1;
  142.             for(int j = i + 1; j < numarDeMasini; ++j){
  143.                 if(!strcmp(masini[i].destinatie, masini[j].destinatie)){
  144.                     ++nrCurse;
  145.                 }
  146.             }
  147.             cout << '\t' << masini[i].destinatie << " : " << nrCurse << '\n';
  148.         }
  149.     }
  150.  
  151.     meniuDeIntoarcere();
  152. }
  153.  
  154. void inlocuireSofer(){ /// cerinta 4
  155.     cout << " Selectati numarul corespunzator soferului pe care doriti sa-l inlocuiti! \n";
  156.     for(int i = 0; i < numarDeMasini; ++i){
  157.         cout << '\t' << i + 1 << " - " << masini[i].numeSofer << '\n';
  158.     }
  159.     int index;
  160.     do{
  161.         cout << " >> ";
  162.         cin >> index;
  163.     }while(index < 1 || index > numarDeMasini);
  164.  
  165.     cout << " Scrieti numele soferului cu care doriti sa-l inlocuiti pe " << masini[index - 1].numeSofer << " !\n >> ";
  166.     cin.get();
  167.     cin.getline(masini[index - 1].numeSofer, MAX_SIZE);
  168.     salvareDate();
  169.     cout << "\n Schimbarea a fost inregistrata cu succes !";
  170.     meniuDeIntoarcere();
  171. }
  172.  
  173. void afisareCeleMaiApropiateDestinatii(){ /// cerinta 5
  174.     int minDist = atoi(masini[numarDeMasini-1].numarKilometri);
  175.     for(int i = 0; i < numarDeMasini - 1; ++i){
  176.         if(minDist > atoi(masini[i].numarKilometri)){
  177.             minDist = atoi(masini[i].numarKilometri);
  178.         }
  179.     }
  180.     cout << " Cele mai apropiate destinatii sunt : \n";
  181.     for(int i = 0; i < numarDeMasini; ++i){
  182.         if(atoi(masini[i].numarKilometri) == minDist){
  183.             cout << '\t' << masini[i].destinatie << '\n';
  184.         }
  185.     }
  186.     meniuDeIntoarcere();
  187. }
  188.  
  189. void afisareMasinileCuCelMaiMareNrDeLocuri(){ /// cerinta 6
  190.     int maxNrLocuri = atoi(masini[numarDeMasini-1].numarLocuri);
  191.     for(int i = 0; i < numarDeMasini - 1; ++i){
  192.         if(maxNrLocuri < atoi(masini[i].numarLocuri)){
  193.             maxNrLocuri = atoi(masini[i].numarLocuri);
  194.         }
  195.     }
  196.     cout << " Masinile care au cele mai multe locuri sunt : \n\n";
  197.     for(int i = 0; i < numarDeMasini; ++i){
  198.         if(atoi(masini[i].numarLocuri) == maxNrLocuri){
  199.             afiseazaMasina(masini[i]);
  200.         }
  201.     }
  202.     meniuDeIntoarcere();
  203. }
  204.  
  205. void afisareCurselePentruODestinatie(){ /// cerinta 7
  206.     cout << " Selectati numarul corespunzator destinatiei ! \n";
  207.     char destinatii[MAX_SIZE*10];
  208.     char des2d[MAX_SIZE][MAX_SIZE];
  209.     int index = 1;
  210.     for(int i = 0; i < numarDeMasini; ++i){
  211.         if(!(strstr(destinatii, masini[i].destinatie))){
  212.             strcat(destinatii, masini[i].destinatie);
  213.             cout << '\t' << index <<" - " << masini[i].destinatie << '\n';
  214.             strcpy(des2d[index], masini[i].destinatie);
  215.             ++index;
  216.         }
  217.     }
  218.      int index2;
  219.     do{
  220.         cout << " >> ";
  221.         cin >> index2;
  222.     }while(index2 < 1 || index2 > index);
  223.     cout <<"\n Masinile cu destinatia " << des2d[index2] << " sunt :\n";
  224.     for(int i = 0; i < numarDeMasini; ++i){
  225.         if(!strcmp(des2d[index2], masini[i].destinatie)){
  226.             afiseazaMasina(masini[i]);
  227.         }
  228.     }
  229.     meniuDeIntoarcere();
  230. }
  231.  
  232. void afiseazaMeniu(){
  233.     cout << " Meniu :";
  234.     cout << "\n\t1 - Afiseaza in ordine alfabetica soferii si nr. de inmatriculare a masinii pe care o conduce;";
  235.     cout << "\n\t2 - Pentru a adauga o noua masina;";
  236.     cout << "\n\t3 - Afiseaza numarul de curse pentru fiecare destinatie;";
  237.     cout << "\n\t4 - Inlocuirea unui sofer;";
  238.     cout << "\n\t5 - Afiseaza destinatiile cele mai apropiate;";
  239.     cout << "\n\t6 - Afiseaza masinile cu cele mai mare numar de locuri;";
  240.     cout << "\n\t7 - Afiseaza cursele pentru o anumita destinatie;";
  241.     cout << "\n\t0 - Pentru a opti programul\n";
  242.     int actiune;
  243.     do{
  244.         cout << " >> ";
  245.         cin >> actiune;
  246.     }while(actiune < 0 || actiune > 7);
  247.     system("cls");
  248.     switch (actiune){
  249.         case 1:
  250.             afisareSoferiInOrdineAlfabeticaSiNrInmatriculare();
  251.             break;
  252.         case 2:
  253.             adaugaONouaCursa();
  254.             break;
  255.         case 3:
  256.             afisareNumarCursePentruFiecareDestinatie();
  257.             break;
  258.         case 4:
  259.             inlocuireSofer();
  260.             break;
  261.         case 5:
  262.             afisareCeleMaiApropiateDestinatii();
  263.             break;
  264.         case 6:
  265.             afisareMasinileCuCelMaiMareNrDeLocuri();
  266.             break;
  267.         case 7:
  268.             afisareCurselePentruODestinatie();
  269.             break;
  270.         case 0:
  271.             return;
  272.     }
  273. }
  274.  
  275. int main(){
  276.     citesteDate();
  277.     afiseazaMeniu();
  278.     return 0;
  279. }
  280.  
  281.  
  282. ///date.txt
  283. 001
  284. BC 04 TRA
  285. Ardeleanul Cristi
  286. Onesti
  287. 12
  288. 43
  289.  
  290. 002
  291. BC 12 TRA
  292. Vicu Alin
  293. Bacau
  294. 92
  295. 21
  296.  
  297. 003
  298. IF 14 TRA
  299. Pop Nicu
  300. Bucuresti
  301. 12
  302. 32
  303.  
  304. 004
  305. NT 22 TRA
  306. Camara Florin
  307. Bacau
  308. 61
  309. 19
  310.  
  311. 009
  312. BC 76 NUN
  313. Alunel Bogdan
  314. Bucuresti
  315. 100
  316. 43
  317.  
  318. 007
  319. BV 08 JNB
  320. Alexe Valentin
  321. Sibiu
  322. 94
  323. 43
Add Comment
Please, Sign In to add comment