Witam. problem taki. tworze kilka rekordów (studentów), i chce któryś z tych rekordów sobie usunąć. Gdy wybieram, który chce usunąć rekord po id (liczbie), to wywala błąd (wystąpił problem z aplikacją).
pomóżcie, co źle mam w funkcji usuwającej ?
robione w Dev C++ 4.9.9.2
#include <iostream>
#include <string>
#include <fstream> /// podstawowe biblioteki
using namespace std;
class Student ///klasa student
{
public: ///publiczne
int id; ///zmienna
public: ///publiczne
string Imie; ///zmienna
string Nazwisko; ///zmienna
int Wiek; ///zmienna
string Klasa; ///zmienna
};
void dodaj_do_bazy(char *in,Student *s,int n) /// dodawanie studenta do bazy danych
{
ofstream plik;
plik.open(in); ///otwieranie pliku
for(int i=0;i<n;++i)
{
s[i].id = i+1;
plik<<s[i].id<<endl;
cout<<"Podaj imie :\n";
cin>>s[i].Imie;
plik<<s[i].Imie<<endl;
cout<<"Podaj nazwisko :\n";
cin>>s[i].Nazwisko;
plik<<s[i].Nazwisko<<endl;
cout<<"Podaj wiek studenta :\n";
cin>>s[i].Wiek;
plik<<s[i].Wiek<<endl;
cout<<"Podaj klase do jakiej chodzi student :\n";
cin>>s[i].Klasa;
plik<<s[i].Klasa<<endl;
plik<<"\n\n";
}
plik.close(); ///zamykanie pliku
}
///funkcja liczaca rozmiar tablicy struktur (wyciaga z pliku juz zapisanych studentow)
///do ktorej wpisujemy dane o studentach
int rozmiar(char *in)
{
string Nazwisko , Imie, Klasa;
int Wiek , id;
ifstream plik;
plik.open(in); ///otwieranie pliku
int rozm = 0;
while(!plik.eof())
{
plik>>id;
plik>>Imie;
plik>>Nazwisko;
plik>>Wiek;
plik>>Klasa;
rozm += 1;
}
plik.close(); ///zamykanie pliku
return rozm;
}
void zpliku(char *in,Student *s,int n) ///funkcja wyciagajaca z pliku studentow do tablicy struktur
{
ifstream plik;
plik.open(in); ///otwieranie pliku
for(int i=0;i<n;++i)
{
plik>>s[i].id;
plik>>s[i].Imie;
plik>>s[i].Nazwisko;
plik>>s[i].Wiek;
plik>>s[i].Klasa;
}
}
void wypisz(Student *s,int n) /// funkja wypisujaca wszystkich studentow na ekran
{
for(int i=0;i<n;++i)
{
cout<<""<<s[i].id<<endl;
cout<<"Imie : "<<s[i].Imie<<endl;
cout<<"Nazwisko : "<<s[i].Nazwisko<<endl;
cout<<"Wiek : "<<s[i].Wiek<<endl;
cout<<"Klasa : "<<s[i].Klasa<<endl;
cout<<"- - - - - - - - - - - - -\n";
}
}
void usun(Student *s,int n,int ktory) /// funkcja usuwajaca studenta z bazy
{
int tmp;
for(int i=0;i<n;++i)
{
if(i+1 == ktory)
{
tmp = i;
}
}
for(int i=tmp;i<n;++i)
{
//s[i] = s[i+1];
s[i].Imie = s[i+1].Imie;
s[i].Nazwisko = s[i+1].Nazwisko;
s[i].Wiek = s[i+1].Wiek;
s[i].Klasa = s[i+1].Klasa;
}
}
int main(int argc,char **argv)
{
int znak;
///przykladowa nazwa bazy danych
argv[1] = "baza.txt";
do
{///głowna strona po otwarciu progrmu
cout<<"************************************** \n";
cout<<"* 1. Utworz baze danych (plik) * \n";
cout<<"* 2. Dodaj studenta * \n";
cout<<"* 3. Przegladaj zapisanych studentow * \n";
cout<<"* 4. Usun studenta z bazy * \n";
cout<<"* 0. Koniec programu * \n";
cout<<"************************************** \n";
cout<<"Co chcesz wybrac ? \n";
cin>>znak;
switch(znak)
{
case 1:
{
int n;
cout<<"Ile studentow zapisac w bazie ?\n";
cin>>n;
Student *s = new Student [n];
dodaj_do_bazy(argv[1],s,n);
delete [] s;
break;
}
case 2:
{
int ile;
cout<<"Ile studentow chcesz dopisac do bazy ?\n";
cin>>ile;
int roz = rozmiar(argv[1])+ile-1;
int rozm = rozmiar(argv[1])-1;
Student *s = new Student [roz];
zpliku(argv[1],s,rozm);
for(int i=rozm;i<roz;++i)
{
s[i].id = i+1;
cout<<"Podaj imie :\n";
cin>>s[i].Imie;
cout<<"Podaj nazwisko :\n";
cin>>s[i].Nazwisko;
cout<<"Podaj wiek studenta :\n";
cin>>s[i].Wiek;
cout<<"Podaj klase do jakiej chodzi student :\n";
cin>>s[i].Klasa;
}
ofstream plik;
plik.open(argv[1]);
for(int i=0;i<roz;++i)
{
plik<<s[i].id<<endl;
plik<<s[i].Imie<<endl;
plik<<s[i].Nazwisko<<endl;
plik<<s[i].Wiek<<endl;
plik<<s[i].Klasa<<endl;
plik<<"\n\n";
}
plik.close();
delete [] s;
break;
}
case 3:
{
cout<<"Studenci w bazie :\n\n";
int n = rozmiar(argv[1])-1;
Student *s = new Student [n];
zpliku(argv[1],s,n);
wypisz(s,n);
delete [] s;
break;
}
case 4:
{
int n = rozmiar(argv[1])-1;
Student *s = new Student [n];
zpliku(argv[1],s,n);
int ktory;
cout<<"Ktorego studenta usunac z bazy ?\n";
cin>>ktory;
usun(s,n,ktory);
ofstream plik;
plik.open(argv[1]);
for(int i=0;i<n-1;++i)
{
plik<<s[i].id<<endl;
plik<<s[i].Imie<<endl;
plik<<s[i].Nazwisko<<endl;
plik<<s[i].Wiek<<endl;
plik<<s[i].Klasa<<endl;
plik<<"\n\n";
}
plik.close(); ///zamykanie pliku
delete [] s;
break;
}
case 0:
{
cout<<"Dziekuje! ;";
//break; ///powrót
}
}
}while(znak != 0);
return 0;
}