Baza studentów obiektowo w C++

0

Cześć, potrzebuję pomocy. Muszę napisać program obiektowo w C++, w którym stworzę bazę danych studentów. Muszą w nim być dwie klasy: menu odpowiedzialna za wyświetlanie menu a druga klasa student w której znajdują się: Private ( imię, numer legitymacji i nazwisko studenta, oceny 5 rożnych przedmiotów). W programie dodatkowo ma znaleźć się funkcja "Dodaj studenta","Usuwanie studenta","Modyfikowanie danych studenta", "Wyświetlenie listy studentów" i "Informacja o danym studencie po nr legitymacji albo nazwisku".
Wszystkie te dane mają być zapisane w pliku txt.

Większość funkcji już mam, ale niestety nie umiem poradzić sobie z modyfikowaniem danych w pliku txt i usunięciem studenta, żeby reszta studentów na liście w pliku txt spadła o jedno miejsce.
W funkcjach od modyfikacji danych coś tam zacząłem grzebać ale nic mi nie wychodzi. Pozdrawiam i dzięki z góry za pomoc

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <sstream>
#include <string>
#include <vector>

using namespace std;

class student {
private:

	int nrlegitymacji;           //klasa studenta
	string imie;
	string nazwisko;
	int ocena_fizyka;
	int ocena_analiza;
	int ocena_informatyka;
	int ocena_algebra;
	int ocena_angielski;

	void zapiszDane();

public:
	student(int anrlegitymacji, string aimie, string anazwisko, int aocena_fizyka, int aocena_analiza, int aocena_informatyka, int aocena_algebra, int aocena_angielski) : nrlegitymacji(anrlegitymacji), imie(aimie), nazwisko(anazwisko), ocena_fizyka(aocena_fizyka), ocena_analiza(aocena_analiza), ocena_informatyka(aocena_informatyka), ocena_algebra(aocena_algebra), ocena_angielski(aocena_angielski) {}

	string getImie() const { return imie; }
	string getNazwisko() const { return nazwisko; }
	int getNrLegitymacji() const { return nrlegitymacji; }
	int getOcena_fizyka() const { return ocena_fizyka; }
	int getOcena_analiza() const { return ocena_analiza; }
	int getOcena_informatyka() const { return ocena_informatyka; }
	int getOcena_algebra() const { return ocena_algebra; }
	int getOcena_angielski() const { return ocena_angielski; }
};

vector < student > studeent;

class menu {
private:
	fstream plik;
public:
	menu()
	{
		plik.open("bazastudentow.txt", fstream::in | fstream::out | fstream::app);
	}
	~menu()
	{
		plik.close();
	}
	void mmenu() {
		auto liczba = 0;
		do {
			cout << "1. Dodaj studenta i jego oceny *" << endl;
			cout << "2. Modyfikowanie danych studenta *" << endl;      //menu
			cout << "3. Lista studentow" << endl;
			cout << "4. Informacja o studencie" << endl;
			cout << "5. Zakonczenie programu" << endl;

			cin >> liczba;
			switch (liczba) {
			case 1:
				dodajstudenta();
				break;
			case 2:
				modstudenta();
				break;
			case 3:
				listastudentow();
				break;
			case 4:
				infostudent();
				break;
			case 5:
				system("pause");
				break;
			}
		} while (liczba != 5);
	};

	void dodajstudenta() {
		string imie, nazwisko;
		int legitka = 0, ocena_fizyka = 0, ocena_analiza, ocena_informatyka = 0, ocena_algebra = 0, ocena_angielski = 0;
		auto id = studeent.size();

		cout << "Wprowadz imie studenta" << endl;
		cin >> imie;
		cout << "Wprowadz nazwisko studenta" << endl;
		cin >> nazwisko;
		cout << "Wprowadz nr legitymacji studenta" << endl;
		cin >> legitka;
		cout << "Wprowadz ocene z fizyki: " << endl;
		cin >> ocena_fizyka;
		cout << "Wprowadz ocene z analizy: " << endl;
		cin >> ocena_analiza;
		cout << "Wprowadz ocene z informatyki: " << endl;
		cin >> ocena_informatyka;
		cout << "Wprowadz ocene z algebry: " << endl;
		cin >> ocena_algebra;
		cout << "Wprowadz ocene z angielskiego: " << endl;
		cin >> ocena_angielski;
		studeent.push_back(student(legitka, imie, nazwisko, ocena_fizyka, ocena_analiza, ocena_informatyka, ocena_algebra, ocena_angielski));

		zapiszDane();
		cout << endl;
	};

	void zapiszDane()
	{
		// zapisz wektor do pliku
		if (plik.is_open())
		{
			for (auto s : studeent)
			{
				plik << "Nazwisko: " << s.getNazwisko() << ", Nr legitymacji: " << s.getNrLegitymacji() << "\n";
				plik << "Imie: " << s.getImie() << "\n";
				plik << "Ocena z fizyki: " << s.getOcena_fizyka() << "\n";
				plik << "Ocena z analizy: " << s.getOcena_analiza() << "\n";
				plik << "Ocena z informatyki: " << s.getOcena_informatyka() << "\n";
				plik << "Ocena z algebry: " << s.getOcena_algebra() << "\n";
				plik << "Ocena z j. angielskiego: " << s.getOcena_angielski() << "\n\n";
			}
		}
		else cout << "nieotwarty plik";
	};

/*	void modstudenta()
	{
		auto numer = 0;
		string nrlegitka;

		do
		{
			cout << "1. Modyfikacja danych studenta." << endl;
			cout << "2. Dodawanie i modyfikacja ocen studenta." << endl;
			cout << "3. Wroc do menu." << endl;
			cin >> numer;

			switch (numer) {

			case 1:
				cout << "Wpisz numer legitymacji studenta, ktorego dane chcesz zmodyfikowac: " << endl;
				cin >> nrlegitka;
				system("cls");
				void modyfikacjadanych(string nrlegitka);


				cout << endl;
				break;

			case 2:

				//cout << "Wpisz numer legitymacji studenta, dla którego chcesz zmodyfikowac oceny: " << endl;
				//cin >> numer_legitki;
				system("cls");
				//wyszukiwanie(numer_legitki);
				cout << "Wprowadz ocene z fizyki: ";


				break;
			case 3:
				void mmenu();
				break;
			}

		} while (numer != 3);

	};
	void modyfikacjadanych(string nrlegitka) {

		std::fstream plik;
		std::string someString;

		plik.open("bazastudentow.txt", ios::in | ios::app);  //The path to your file goes here

		if (plik.is_open()) {  //You don't have to ask if the file is open but it's more secure
			while (getline(plik, nrlegitka)) {
				if (nrlegitka.find(someString) != string::npos) { //the find() documentation might be helpful if you don't understand
					if (someString == "nrlegitka") {
						cout << "Podaj nowy numer: ";
						cin >> someString;
						someString ==
					}
					else {
						plik << "newString_2" << endl;
					}
				} //end if
			} //end while
		} //end if
		else cerr << "Your file couldn't be opened";

		plik.close();
		return;
	}

	/*ifstream plik;
	plik.open("bazastudentow.txt", ios::in);
	string tekst;
	int numer;

	do {
		getline(plik, tekst);
		cout << "Podaj numer legitymacji: ";
			cin >> nrlegitka;
		if (tekst.find(nrlegitka) != std::string::npos)
		{
			for (int i = 0; i < 1; i++)
			{
				cout << "Podaj nowy numer: ";
				cin >> numer;
				nrlegitka == numer;
				cout << numer << endl;
				getline(plik, tekst);
			}
			return;
			zapiszDane();
			cout << "Pomyslnie zmieniles numer legitymacji!" << endl;
			cout << endl;


		}
	} while (!plik.eof());


	plik.close(); */

	void listastudentow() {

		string linia;

		fstream plik;
		plik.open("bazastudentow.txt", ios::in);

		if (plik.good() == false)

		{
			cout << "Plik nie istnieje!";
			exit(0);
		}

		while (!plik.eof())
		{
			getline(plik, linia);
			cout << linia << endl;
		}

		plik.close();
	}

	void infostudent() {

		auto numer = 0;
		string nazwisko;
		string numer_legitki;


		do
		{
			cout << "1. Wyszukiwanie studenta po nazwisku." << endl;
			cout << "2. Wyszukiwanie studenta po numerze legitymacji." << endl;
			cout << "3. Wroc do menu." << endl;
			cin >> numer;

			switch (numer) {

			case 1:
				cout << "Wpisz nazwisko studenta, ktorego chcesz wyszukac: " << endl;
				cin >> nazwisko;
				system("cls");
				wyszukiwanie(nazwisko);
				cout << endl;
				break;
			case 2:
				cout << "Wpisz numer legitymacji studenta, ktorego chcesz wyszukac: " << endl;
				cin >> numer_legitki;
				system("cls");
				wyszukiwanie(numer_legitki);
				cout << endl;
				break;
			case 3:
				void mmenu();
				break;
			}

		} while (numer != 3);
	};

	void wyszukiwanie(string nazwisko) {

		ifstream plik;
		plik.open("bazastudentow.txt", ios::in);
		string tekst;

		do {
			getline(plik, tekst);

			if (tekst.find(nazwisko) != std::string::npos)
			{
				for (int i = 0; i < 7; i++)
				{
					cout << tekst << endl;
					getline(plik, tekst);
				}
				return;
			}
		} while (!plik.eof());

		plik.close();

	};

	void wyszukiwanie(int numer_legitki) {

		ifstream plik;
		plik.open("bazastudentow.txt", ios::in);
		string nrlegitymacji;

		do {
			getline(plik, nrlegitymacji);

			if (nrlegitymacji.find(numer_legitki) != std::string::npos)
			{
				for (int i = 0; i < 7; i++)
				{
					cout << nrlegitymacji << endl;
					getline(plik, nrlegitymacji);
				}
				return;
			}
		} while (!plik.eof());

		plik.close();
	}
};

int main() {
	menu studentmenu;
	studentmenu.mmenu();

}


0

Przy tak malej ilosci danych najlatwiej Ci bedzie zaladowac wszystko do pamieci. Na przyklad

std::vector<student> lista_studentow;

Przy wczytaniu pliku wypelnienie tego wektora(dodanie do niego wszystkich studentow) i jak usuwasz/edytujesz to nie operujesz na pliku a na obiekcie z wektora(na jednym studencie).

Podczas operacji zapisu pliku wygenerowac caly plik na nowo, czy to z zmienionym studentem czy bez jednego

1 użytkowników online, w tym zalogowanych: 0, gości: 1