Baza studentów obiektowo w C++

Odpowiedz Nowy wątek
2019-06-12 13:22
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();

}
edytowany 1x, ostatnio: Tauryna, 2019-06-12 13:24

Pozostało 580 znaków

2019-06-12 13:35
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

edytowany 2x, ostatnio: daniel1302, 2019-06-12 13:39

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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