Задача файлове -решение


      За учениците от десети клас на ПМГ се съхранява следната информация: име, фамилия,извинени и неизвинени отсъствия.
      Да се напише програма, която:

  а) създава файл съдържащ информация за учениците
  б) извежда съдържанието на файла
  в) намира общия брой извинени и неизвинени отсъствия
  г) намира името/-ната на ученика/-ците с най-много неизвинени отсъствия
  д) по въведено име на ученик - извежда информацията за него
  е) сортира по име във възходящ ред въведените данни
  ж) по въведено име на ученик - изтрива данните за него
  и) по въведено име на ученик - актуализира данните за него


#include <iostream>
#include <fstream>
#include <windows.h>
#include <iomanip>
using namespace std;

struct klas
{
    string ime,fam;
    int izv,neizv;
};

//Procedura za sazdavane na fail, sadarjasht danni za u4enicite
void createfile(fstream& f)
{
    klas a;
    f.open("proba.txt",ios::app|ios::out);
    if (!f.is_open())  {  perror("Error: ");  return;}
    cout<<"Molq vavedete danni za u4enicite! \n Za krai na vavejdane natisnete Ctrl+Z!\n";
    cout<<"Ime: "; cin>>a.ime;
    while (!cin.eof())
    {
        cout<<"Familia: ";  cin>>a.fam;
        cout<<"Izvineni ";  cin>>a.izv;
        cout<<"Neizvineni ";cin>>a.neizv;

        f<<a.ime<<" "<<a.fam<<" "<<a.izv<<" "<<a.neizv<<endl;
        cout<<"Ime: ";      cin>>a.ime;
    }
    cin.clear();  f.close();
}

//Procedura za izvejdane sadarjanieto na faila
void writefile(fstream& f)
{
    f.open("proba.txt");
    if (!f.is_open())  { perror("Error: "); return;}
    klas a;
    f>>ws;
    if (f.eof()) {cout<<"Nqma vavedeni danni!!!\n"; return;}
    while (!f.eof())
    {
        f>>a.ime>>a.fam>>a.izv>>a.neizv>>ws;
        cout<<setw(15)<<a.ime<<setw(15)<<a.fam<<setw(5)<<a.izv<<setw(5)<<a.neizv<<endl;
     }
    f.clear();f.close();
}

//Procedurata namira obshiqt broi izvineni i neizvineni  otsastviq
void otsastviq(fstream&f)
{
    klas a;
    int iz=0, neiz=0;
    f.open("proba.txt");
    if (!f.is_open()) { perror("Error: ");return;}
    f>>ws;
    if (f.eof()) {cout<<"Nqma vavedeni danni!!!\n"; return;}
    while (!f.eof())
    {
        f>>a.ime>>a.fam>>a.izv>>a.neizv>>ws;
        iz+=a.izv;
        neiz+=a.neizv;
    }
    cout<<"Izvineni: "<<iz<<endl;
    cout<<"Neizvineni: "<<neiz<<endl;
    cout<<"Obshto: "<<iz+neiz<<endl<<endl;;
    f.clear(); f.close();
}

//Po vavedeno ime na u4enik, se izvejda informaciqta za nego
void spravka(fstream& f)
{
    klas a;string name;
    f.open("proba.txt");
    if (!f.is_open())  { perror("Error: "); return;}
    cout<<"Vavedete Ime na U4enik: "; cin>>name;
    bool b=0;
    f>>ws;
    if (f.eof()) {cout<<"Nqma vavedeni danni!!!\n";  return;}
    while (!f.eof())
    {
        f>>a.ime>>a.fam>>a.izv>>a.neizv>>ws;
        if (name==a.ime)
        {
            cout<<setw(12)<<a.ime<<setw(12)<<a.fam<<setw(5)<<a.izv<<setw(5)<<a.neizv<<endl;
            b=1;
        }
    }
    if (!b) cout<<"Nqma u4enik s poso4enoto ime!"<<endl;

    f.clear();  f.close();
}

//namira imenata na u4enika/-cite s nai-mnogo otsastviq, ako sa nqkolko s ednakav broi  - izvejda imenata na vsi4ki
void beglec(fstream& f)

{
    string name="";
    int max=0;
    f.open("proba.txt");
    if (!f.is_open()) { perror("Error: "); return;}
    klas a;
    f>>ws;
    if (f.eof()) { cout<<"Nqma vavedeni danni!!!\n"; return; }
    while (!f.eof())
    {
        f>>a.ime>>a.fam>>a.izv>>a.neizv>>ws;
        if (a.neizv>max)
        {
            max=a.neizv;
            name=a.ime+" "+a.fam;
        }
        else if (max==a.neizv && max!=0)
        {
            name=name+a.ime+" "+a.fam+"\n";
        }
    }
    f.clear();  f.close();
    if (max==0) cout<<"U4enicite nqmat neizvineni otsastviq!"<<endl;
    else cout<< "Maksimalen broi neizvineni: "<<max<<"\n Polu4eni ot:\n"<<name<<endl;
}



//Procedura za sortirane na fail
void sort(fstream& f)
{
    klas a[50];
    f.open("proba.txt");
    if (!f.is_open()) { perror("Error: ");  return;}
    f>>ws;
    if (f.eof()) {cout<<"Nqma vavedeni danni!!!\n";  return;}
    int n=0;
    while (!f.eof())
    {
        f>>a[n].ime>>a[n].fam>>a[n].izv>>a[n].neizv>>ws;
        n++;
    }
    f.clear(); f.close();

    for (int i=0;i<n-1;i++)
        for (int j=i+1;j<n;j++)
            if (a[i].ime>a[j].ime) swap(a[i],a[j]);

    f.open("proba.txt",ios::out);
    for (int i=0;i<n;i++)
      f<<a[i].ime<<" "<<a[i].fam<<" "<<a[i].izv<<" "<<a[i].neizv<<endl;
    f.close();  f.clear();

    cout<<"Faila e sortiran!"<<endl;
}


//Procedura za iztrivane ot faila na u4enik s poso4eno ime
void del_student(fstream& f)
{
    klas a; bool b=0;
    f.open("proba.txt",ios::in);
    if (!f.is_open()) { perror("Error: ");  return;}
    fstream f1("temp.txt", ios::out);
    string name;
    cout<<"Vavedete Ime na U4enik: "; cin>>name;
    f>>ws;
    if (f.eof()) {cout<<"Nqma vavedeni danni!!!\n";  return;}

    while (!f.eof())
    {
        f>>a.ime>>a.fam>>a.izv>>a.neizv>>ws;
       if(a.ime!=name)  f1<<a.ime<<" "<<a.fam<<" "<<a.izv<<" "<<a.neizv<<endl;
        else b=1;
    }
    f.clear(); f.close();f1.close();
   remove("proba.txt");
   rename("temp.txt","proba.txt");
  if (b==0) cout<<"Nqma u4enik s poso4enoto ime!"<<endl;
}


//Procedura za aktualizirane otsastviqta na u4enik s poso4eno ime i familiq
void actual(fstream& f)
{
    klas a; bool b=0;
    f.open("proba.txt",ios::in);
    if (!f.is_open()) { perror("Error: ");  return;}
    fstream f1("temp.txt", ios::out);
    string name, lastname;
    cout<<"Vavedete ime : "; cin>>name;
    cout<<"Familiq: "; cin>>lastname;
    f>>ws;
    if (f.eof()) {cout<<"Nqma vavedeni danni!!!\n";  return;}

    while (!f.eof())
    {
        f>>a.ime>>a.fam>>a.izv>>a.neizv>>ws;
        if(a.ime==name&&a.fam==lastname)
           { b=1;
             cout<< "Vavedete noviq broi otsastviq:";
             cout<<"Izvineni:"; cin>>a.izv;
             cout<<"Izvineni:"; cin>>a.neizv;
           }
        f1<<a.ime<<" "<<a.fam<<" "<<a.izv<<" "<<a.neizv<<endl;
    }
    f.clear(); f.close();f1.close();
   remove("proba.txt");
   rename("temp.txt","proba.txt");
  if (b==0) cout<<"Nqma u4enik s poso4enoto ime!"<<endl;
}
int main ()
{
    char ch;
    fstream f;
    do
    {
        system("cls");
        cout<<"\n\n\n\t\t GLAVNO MENU:\n";
        cout<<"\n\t 1. Vavejdane na danni";
        cout<<"\n\t 2. Spravka za u4enik";
        cout<<"\n\t 3. Broi otsastviq";
        cout<<"\n\t 4. Izvejdane na dannite";
        cout<<"\n\t 5. U4enik s nai-mnogo neizvineni otsastviq";
        cout<<"\n\t 6. Sortirane na faila";
        cout<<"\n\t 7. Iztrivane na dannite za u4enik";
        cout<<"\n\t 8. Aktualizirane na dannite za u4enik";
        cout<<"\n\t 9. Izhod";
        cout<<"\n\t  Vashiqt izbor: ";
        cin>>ch;
        system("cls");

        switch (ch)
        { case '1':createfile(f); break;
          case '2':spravka(f);    break;
          case '3':otsastviq(f);  break;
          case '4':writefile(f);  break;
          case '5':beglec(f);     break;
          case '6':sort(f);       break;
          case '7':del_student(f);break;
          case '8':actual(f);     break;
        }

      system("Pause");
    }
    while (ch!='9');
    return 0;
}

В момента разглеждате олекотената мобилна версия на уебсайта. Към пълната версия.