Задача файлове -решение
За учениците от десети клас на ПМГ се съхранява следната информация: име, фамилия,извинени и неизвинени отсъствия.
Да се напише програма, която:
а) създава файл съдържащ информация за учениците
б) извежда съдържанието на файла
в) намира общия брой извинени и неизвинени отсъствия
г) намира името/-ната на ученика/-ците с най-много неизвинени отсъствия
д) по въведено име на ученик - извежда информацията за него
е) сортира по име във възходящ ред въведените данни
ж) по въведено име на ученик - изтрива данните за него
и) по въведено име на ученик - актуализира данните за него
#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;
}