Advertisement
borko_panterata

Kameliq Genova

Dec 8th, 2023 (edited)
521
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 16.75 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. //using namespace std;
  5. /*
  6.     uncomment:
  7.     -   red 4 (namespace std)
  8.     -   red 199
  9.     -   red 200
  10.     -
  11.  
  12.     kak da se podobri koda:
  13.     - uppercase proverka
  14.     - globalna promenliva za masiva ot studenti
  15.     - globalna promenliva za scount (size vyv funkciite)
  16.    
  17. */
  18.  
  19. struct Student{
  20.     std:: string specialnost;
  21.     std:: string fakNomer;
  22.     std:: string grupa;
  23.     std:: string ime;
  24.     int godinaRajdane;
  25.     double bal;
  26.     std:: string grad;
  27. };
  28.  
  29. // Globalni promenlivi
  30. Student temp;
  31. int scount = 5;
  32.  
  33. // Dopylnitelni funkcii
  34. void pylni(Student studenti[], int size);
  35. void izvStudent(Student studenti[], int nomerSt);
  36.  
  37. // Originalni funkcii
  38. void addStudent(Student studenti[], int size); // B.
  39. void izvStudenti(Student studenti[], int size); // C.
  40. void izvejdanePoKriterij(Student studenti[], int size); // D.
  41. void ascFakNomer(Student studenti[], int size); // E.
  42. void uprFile(Student studenti[], int size); // F. // b?
  43. void podmenu(Student studenti[], int size); // G.
  44. void spravkaStipendiq(Student studenti[], int size); // H. ima za dovyrshvane
  45.  
  46.  
  47. int main()
  48. {
  49.     char choise;
  50.     Student studenti[150];
  51.     pylni(studenti, scount);
  52.  
  53.     while(true)
  54.     {
  55.         std::cout << "Izberete funkciq ot doluposochenite" << std::endl;
  56.         std::cout << "Cyknete 1 za addstudent" << std::endl;
  57.         std::cout << "Cyknete 2 za izv vs studenti" << std::endl;
  58.         std::cout << "Cyknete 3 za izv na studenta s naj-visok bal i vs studenti ot grad Varna" << std::endl;
  59.         std::cout << "Cyknete 4 za podrejdane na masiva vyv vyzhodqsht red po fak nomer" << std::endl;
  60.         std::cout << "Cyknete 5 za zapisvane/chetene na studenti v/ot fajl" << std::endl;
  61.         std::cout << "Cyknete x za izhod" << std::endl;
  62.         std::cin >> choise;
  63.        
  64.         switch(choise)
  65.         {
  66.             case '1':
  67.                 addStudent(studenti, scount);
  68.                 break;
  69.             case '2':
  70.                 izvStudenti(studenti, scount);
  71.                 break;
  72.             case '3':
  73.                 izvejdanePoKriterij(studenti, scount);
  74.                 break;
  75.             case '4':
  76.                 ascFakNomer(studenti, scount);
  77.                 break;
  78.             case '5':
  79.                 uprFile(studenti, scount);
  80.                 break;
  81.             case 'x':
  82.                 std::cout << "Hubav i usmihnat den :)";
  83.                 return 0;
  84.             default:
  85.                 std::cout << "Nevaliden izbor!" << std::endl;
  86.                 break;
  87.         }
  88.     }
  89.    
  90.  
  91.     return 0;
  92. }
  93.  
  94. void pylni(Student studenti[], int size)
  95. {
  96.     // Student 0
  97.     studenti[0].specialnost = "KST";
  98.     studenti[0].fakNomer = "002";
  99.     studenti[0].grupa = "1a";
  100.     studenti[0].ime = "Kameliq Genova";
  101.     studenti[0].godinaRajdane = 2004;
  102.     studenti[0].bal = 5.54;
  103.     studenti[0].grad = "Burgas";
  104.  
  105.     // Student 1
  106.     studenti[1].specialnost = "SIT";
  107.     studenti[1].fakNomer = "001";
  108.     studenti[1].grupa = "1a";
  109.     studenti[1].ime = "Georgi Georgiev";
  110.     studenti[1].godinaRajdane = 2004;
  111.     studenti[1].bal = 4.49;
  112.     studenti[1].grad = "Varna";
  113.  
  114.     // Student 2
  115.     studenti[2].specialnost = "KST";
  116.     studenti[2].fakNomer = "003";
  117.     studenti[2].grupa = "1a";
  118.     studenti[2].ime = "Todor Iliev";
  119.     studenti[2].godinaRajdane = 2003;
  120.     studenti[2].bal = 3.94;
  121.     studenti[2].grad = "Staro Jelezare";
  122.  
  123.     // Student 3
  124.     studenti[3].specialnost = "SIT";
  125.     studenti[3].fakNomer = "004";
  126.     studenti[3].grupa = "1a";
  127.     studenti[3].ime = "Dimitar Karakolev";
  128.     studenti[3].godinaRajdane = 2002;
  129.     studenti[3].bal = 4.01;
  130.     studenti[3].grad = "Dobrich";
  131.  
  132.     // Student 4
  133.     studenti[4].specialnost = "KST";
  134.     studenti[4].fakNomer = "005";
  135.     studenti[4].grupa = "1a";
  136.     studenti[4].ime = "Stoqn Todorov";
  137.     studenti[4].godinaRajdane = 2000;
  138.     studenti[4].bal = 5.84;
  139.     studenti[4].grad = "Ruse";
  140. }
  141.  
  142. void izvStudent(Student studenti[], int nomerSt)
  143. {
  144.         std::cout << "Student nomer " << nomerSt + 1 << std::endl;
  145.         std::cout << "-----------" << std::endl;
  146.         std::cout << "Specialnost: " << studenti[nomerSt].specialnost << std::endl;
  147.         std::cout << "Fakulteten nomer: " << studenti[nomerSt].fakNomer << std::endl;
  148.         std::cout << "Grupa: " << studenti[nomerSt].grupa << std::endl;
  149.         std::cout << "Ime: " << studenti[nomerSt].ime << std::endl;
  150.         std::cout << "Godina na rajdane: " << studenti[nomerSt].godinaRajdane << std::endl;
  151.         std::cout << "Bal s kojto e vlqzal: " << studenti[nomerSt].bal << std::endl;
  152.         std::cout << "Grad: " << studenti[nomerSt].grad << std::endl;
  153.         std::cout << std::endl;
  154. }
  155.  
  156. // B.
  157. void addStudent(Student studenti[], int size)
  158. {
  159.     int broj;
  160.     //std::string fNomer;
  161.     //std::string grupa;
  162.     //std::string ime;
  163.     //int godinaRajdane;
  164.     //double bal;
  165.     //std::string grad;
  166.  
  167.     int nextStudent;
  168.  
  169.     // Broj vyvedeni studenti
  170.     while(true)
  171.     {
  172.         std::cout << "Vyvedete broq na studentite koito iskate da dobavite: ";
  173.         std::cin >> broj;
  174.         if(broj >= 1 && broj + scount <= 150) break;
  175.         std::cout << "Nevaliden broj studenti! Ne moje da dobavqte po-malko ot edin student ili da nadvishite obshtiq broj na studenti kojto e 150!!" << std::endl;
  176.     }
  177.     scount += broj;
  178.  
  179.     for(int i = 0; i < broj; i++)
  180.     {
  181.         nextStudent = scount - broj + i;
  182.         // Specialnost
  183.         while(true)
  184.         {
  185.             std::cout << "Vyvedete specialnost na studenta[KST / SIT]: ";
  186.             std::cin >> studenti[nextStudent].specialnost;
  187.             if(studenti[nextStudent].specialnost != "KST" && studenti[nextStudent].specialnost != "SIT")
  188.                 std::cout << "Specialnostta moje da e samo KST ili SIT!!!" << std::endl;
  189.             else break;
  190.         }
  191.  
  192.         // Fak nomer
  193.         while(true)
  194.         {
  195.             std::cout << "Vyvedete fakulteten nomer na studenta: ";
  196.             std::cin >> studenti[nextStudent].fakNomer;
  197.             if(std::size(studenti[nextStudent].fakNomer) != 3)
  198.                 std::cout << "Fakultetniqt nomer trqbva da e s razmer ot tri simvola!" << std::endl;
  199.             else break;
  200.            
  201.             //---  Reshenie za namirane na dublirasht fak nomer?
  202.             //..
  203.             //--
  204.         }
  205.  
  206.         // Grupa
  207.         while(true)
  208.         {
  209.             std::cout << "Vyvedete grupa na studenta: ";
  210.             std::cin >> studenti[nextStudent].grupa;
  211.             if(std::size(studenti[nextStudent].grupa) != 2) std::cout << "Grupata trqbva da e systavena ot 2 simvola!" << std::endl;
  212.             else
  213.             {
  214.                 if(studenti[nextStudent].grupa[0] - '0' < 1 || studenti[nextStudent].grupa[0] - '0' > 9)
  215.                  std::cout << "Pyrviq simvol na grupata trqbva da e cifra ot 1 do 9!" << std::endl;
  216.                 else if(studenti[nextStudent].grupa[1] - 'a' < 0 || studenti[nextStudent].grupa[1] - 'a' > 'z')
  217.                     std::cout << "Vtoriq simvol na grupata trqbva da e bukva!!" << std::endl;
  218.                 else break;
  219.             }
  220.         }
  221.  
  222.         // Ime
  223.         while(true)
  224.         {
  225.             std::cout << "Vyvedete ime na studenta: ";
  226.             //std::cin.ignore(1000, '\n');
  227.             //std::cin.getline(studenti[nextStudent].ime);
  228.             std::cin >> studenti[nextStudent].ime;
  229.             if(studenti[nextStudent].ime.size()  >=  2) break;
  230.             std::cout << "Nevalidno ime! Imeto ne moje da e po-malyk ot dva simvola!" << std::endl;
  231.         }
  232.        
  233.  
  234.         // Godina Rajdane
  235.         while(true)
  236.         {
  237.             std::cout << "Vyvedete godinata na rajdane na studenta: ";
  238.             std::cin >> studenti[nextStudent].godinaRajdane;
  239.             if(studenti[nextStudent].godinaRajdane >= 1900 && studenti[nextStudent].godinaRajdane <= 2006) break;
  240.             std::cout << "Nevalidna godina na rajdane! Godinata na rajdane moje da e v diapazona ot 1900 do 2006!" << std::endl;
  241.         }
  242.        
  243.         // Bal
  244.         while(true)
  245.         {
  246.             std::cout << "Vyvedete priemniq bal na studenta: ";
  247.             std::cin >> studenti[nextStudent].bal;
  248.             if(studenti[nextStudent].bal >= 3 && studenti[nextStudent].bal <= 6) break;
  249.             std::cout << "Nevaliden bal! Balyt ne moje da e po-malyk ot 3.00 ili po-golqm ot 6.00!" << std::endl;
  250.         }
  251.  
  252.         // Grad
  253.         while(true)
  254.         {
  255.             std::cout << "Vyvedete grada na studenta: ";
  256.             std::cin >> studenti[nextStudent].grad;
  257.             if(studenti[nextStudent].grad.size()  >=  2) break;
  258.             std::cout << "Nevaliden grad! Gradyt ne moje da e po-malyk ot dva simvola!" << std::endl;
  259.         }
  260.  
  261.         // Informaciq ot programata
  262.         std::cout << "-------" << std::endl;
  263.         std::cout << "Studentyt e vyveden uspeshno!" << std::endl;
  264.         std::cout << "-------" << std::endl << std::endl;
  265.     }
  266.    
  267. }
  268.  
  269. void izvStudenti(Student studenti[], int size)
  270. {
  271.     std::cout << "Spisyk s vsichki studenti" << std::endl;
  272.     std::cout << "/////////////////////////" << std::endl;
  273.     for(int i = 0; i < size; i++)
  274.     {
  275.         std::cout << "Student nomer " << i + 1 << std::endl;
  276.         std::cout << "-----------" << std::endl;
  277.         std::cout << "Specialnost: " << studenti[i].specialnost << std::endl;
  278.         std::cout << "Fakulteten nomer: " << studenti[i].fakNomer << std::endl;
  279.         std::cout << "Grupa: " << studenti[i].grupa << std::endl;
  280.         std::cout << "Ime: " << studenti[i].ime << std::endl;
  281.         std::cout << "Godina na rajdane: " << studenti[i].godinaRajdane << std::endl;
  282.         std::cout << "Bal s kojto e vlqzal: " << studenti[i].bal << std::endl;
  283.         std::cout << "Grad: " << studenti[i].grad << std::endl;
  284.         std::cout << std::endl;
  285.     }
  286. }
  287.  
  288. // D.
  289. void izvejdanePoKriterij(Student studenti[], int size)
  290. {
  291.     // Studenta s naj-visok bal
  292.     int maxBalPos = 0;
  293.     for(int i = 0; i < size; i++)
  294.     {
  295.         if(studenti[i].bal > studenti[maxBalPos].bal) maxBalPos = i;
  296.     }
  297.     std::cout << "Studentyt s naj-visok bal:" << std::endl;
  298.     izvStudent(studenti, maxBalPos);
  299.  
  300.     // Studentite ot grad Varna
  301.     std::cout << "Spisyk sys studentite ot grad Varna:" << std::endl;
  302.     for(int i = 0; i < size; i++)
  303.     {
  304.         if(studenti[i].grad == "Varna") izvStudent(studenti, i);
  305.     }
  306. }
  307.  
  308. // E.
  309. void ascFakNomer(Student studenti[], int size)
  310. {
  311.     for(int i = 0; i < size; i++)
  312.     {
  313.         for(int j = i + 1; j < size; j++)
  314.         {
  315.             if(studenti[i].fakNomer > studenti[j].fakNomer)
  316.             {
  317.                 temp = studenti[i];
  318.                 studenti[i] = studenti[j];
  319.                 studenti[j] = temp;
  320.             }
  321.         }
  322.     }
  323.     std::cout << "-------" << std::endl;
  324.     std::cout << "Masiva e podreden po vyzhodqsht red na fak nomer uspeshno!" << std::endl;
  325.     std::cout << "-------" << std::endl << std::endl;
  326. }
  327.  
  328. // F.
  329. void uprFile(Student studenti[], int size)
  330. {
  331.     char read;
  332.     int lineCount = 0;
  333.     std::ofstream writeFile("students.txt"); // File za pisane
  334.     std::ifstream readFile("readfile.txt"); // File za chetene
  335.     std::string readFromFile;
  336.  
  337.     std::cout << "Za zapisvane na studentite vyv fajl napishete 'a'" << std::endl;
  338.     std::cout << "Za vyvejdane na studentite ot fajl napishete 'b'" << std::endl;
  339.     std::cin >> read;
  340.    
  341.    
  342.     switch(read)
  343.     {
  344.         case 'a':
  345.             for(int i = 0; i < size; i++)
  346.             {
  347.                 writeFile << studenti[i].specialnost << std::endl;
  348.                 writeFile << studenti[i].fakNomer << std::endl;
  349.                 writeFile << studenti[i].grupa << std::endl;
  350.                 writeFile << studenti[i].ime << std::endl;
  351.                 writeFile << studenti[i].godinaRajdane << std::endl;
  352.                 writeFile << studenti[i].bal << std::endl;
  353.                 writeFile << studenti[i].grad << std::endl;
  354.             }
  355.             writeFile.close();
  356.             std::cout << "--------" << std::endl;
  357.             std::cout << "Studentite bqha uspeshno zapisani vyv fajl!" << std::endl;
  358.             std::cout << "--------" << std::endl;
  359.             break;
  360.         case 'b':
  361.             while(std::getline(readFile, readFromFile))
  362.             {
  363.                 lineCount++;
  364.             }
  365.             for(int i = 0; i < lineCount / 7; i++)
  366.             {
  367.                 //stringToInt = stoi(studenti[i / 7].godinaRajdane);
  368.                 for(int j = 0; j < 7; j++)
  369.                 {
  370.                     switch(j % 7)
  371.                     {
  372.                         case 0:
  373.                             std::getline(readFile, studenti[i + j].specialnost);
  374.                             break;
  375.                         case 1:
  376.                             std::getline(readFile, studenti[i + j].fakNomer);
  377.                             break;
  378.                         case 2:
  379.                             std::getline(readFile, studenti[i + j].grupa);
  380.                             break;
  381.                         case 3:
  382.                             std::getline(readFile, studenti[i + j].ime);
  383.                             break;
  384.                         case 4:
  385.                             //std::getline(readFile, stoi(studenti[i / 7].godinaRajdane));
  386.                             studenti[i + j].godinaRajdane = 2004;
  387.                             break;
  388.                         case 5:
  389.                             //getline(readFile, studenti[i / 7].bal);
  390.                             studenti[i + j].bal = 5.69;
  391.                             break;
  392.                         case 6:
  393.                             std::getline(readFile, studenti[i + j].grad);
  394.                             break;
  395.                     }
  396.                 }
  397.             }
  398.             readFile.close();
  399.             std::cout << "--------" << std::endl;
  400.             std::cout << "Studentite bqha procheteni uspeshno!" << std::endl;
  401.             std::cout << "--------" << std::endl;
  402.             break;
  403.         default:
  404.             std::cout << "Nevaliden input!!";
  405.             break;
  406.     }
  407. }
  408.  
  409. // G.
  410. void podmenu(Student studenti[], int size)
  411. {
  412.     char read;
  413.     std::string input;
  414.     std::string input2;
  415.     bool imaStudenti = false; // Promenliva za zasichane dali ima studenti po zadaden kriterij
  416.     std::cout << "Vyvedete 'a' za izvejdane na studenti ot dadena grupa podredeni nizhodqshto po bal ot priema" << std::endl;
  417.     std::cout << "Vyvedete 'b' za izvejdane na studenti po specialnost i grupa" << std::endl;
  418.     std::cin >> read;
  419.  
  420.     switch(read)
  421.     {
  422.         case 'a':
  423.             // Vyvejdane na grupa
  424.             std::cout << "Vyvedete grupa: ";
  425.             std::cin >> input;
  426.  
  427.             // Podrejdane na studentite nizhodqshto po bal
  428.             for(int i = 0; i < size; i++)
  429.             {
  430.                 for(int j = i + 1; j < size; j++)
  431.                 {
  432.                     if(studenti[i].bal > studenti[j].bal)
  433.                     {
  434.                         temp = studenti[i];
  435.                         studenti[i] = studenti[j];
  436.                         studenti[j] = temp;
  437.                     }
  438.                 }
  439.             }
  440.  
  441.             // Izvejdane na studentite ot vyvedenata grupa
  442.             for(int i = 0; i < size; i++)
  443.             {
  444.                 if(studenti[i].grupa == input)
  445.                 {
  446.                     izvStudent(studenti, i);
  447.                     imaStudenti = true;
  448.                 }
  449.             }
  450.             // Ako nqma studenti ot tazi grupa
  451.             if(!imaStudenti) std::cout << "Nqma studenti ot tazi grupa!" << std::endl;
  452.             break;
  453.         case 'b':
  454.             // Vyvejdane specialnost
  455.             while(input != "KST" && input != "SIT")
  456.             {
  457.                 std::cout << "Vyvedete specialnost[KST/SIT]: ";
  458.                 std::cin >> input;
  459.                 if(input != "KST" && input != "SIT")
  460.                     std::cout << "Specialnostta moje da e samo KST ili SIT!" << std::endl;
  461.                 else break;
  462.             }
  463.  
  464.             // Vyvejdane grupa
  465.             std::cout << "Vyvedete grupa: ";
  466.             std::cin >> input2;
  467.  
  468.             // Izvejdane na studentite ot tazi specialnost i grupa
  469.             for(int i = 0; i < size; i++)
  470.             {
  471.                 if(studenti[i].specialnost == input && studenti[i].grupa == input2)
  472.                 {
  473.                     izvStudent(studenti, i);
  474.                     imaStudenti = true;
  475.                 }
  476.             }
  477.             // Ako nqma studenti ot tazi specialnost
  478.             if(!imaStudenti) std::cout << "Nqma studenti ot tazi grupa!" << std::endl;
  479.             break;
  480.         default:
  481.             // Pri input razlichen ot 'a' ili 'b'
  482.             std::cout << "Nevaliden input!!" << std::endl;
  483.             break;
  484.     }
  485. }
  486.  
  487.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement