Baza danych dynamiczna

0

witam, potrzebuje pomocy w stworzeniu dynamicznej tablicy w bazie danych. Projekt musi zawierać funkcje :dodawanie, usuwanie, edycje, baza z pliku, baza do pliku, wyszukiwanie. jak na razie jestem na etapie tworzenia funkcji odczytu z pliku, stworzyłem funkcje tablicy statycznej ale potrzebuje dynamicznej. W pliku ma być 10 rekordów, a mam podać ile rekordów ma się wyświetlić. Mógłby mi ktoś podpowiedzieć jak to będzie najlepiej zrobić?

struct student{
    int id;
    string nazwisko;
    string specjalnosc;
    float ocena;
    void wyswietl();
};
void student::wyswietl() {
    cout << "\n" << id << ". "<<nazwisko  << " - " << specjalnosc << " " << ocena << endl;

int const n = 4;
student tab[n];

}

void zpliku() {
    fstream plik;
    plik.open("baza.txt", ios::in);
    if (plik.good() == false) {
        cout << "brak pliku";
    }
    for (int i = 0; i < n; i++) {

        plik >> tab[i].id >> tab[i].nazwisko >> tab[i].specjalnosc >> tab[i].ocena;
    }

    plik.close();
    plik.clear();

    for (int i = 0; i < n; i++) {

        tab[i].wyswietl();

    }

}
1
  1. W linijkach 11 i 12 chyba chciałeś stworzyć zmienne globalne? Zamiast zwykłej tablicy możesz użyć vectora i zmiast zmiennych globalnych przekazywać ten wektor do funkcji przez referencję:

    #include <iostream>
    #include <fstream>
    #include <vector>
    using namespace std;
    struct student
    {
        int id;
        string nazwisko;
        string specjalnosc;
        float ocena;
        void wyswietl();
    };
    void student::wyswietl() 
    {
        cout << "\n" << id << ". " << nazwisko  << " - " << specjalnosc << " " << ocena << endl;
    } 
    bool zpliku(vector<student> &s)
    {
        fstream plik;
        plik.open("baza.txt", ios::in);    
        if (!plik.good()) 
        {
                cout << "brak pliku";
                return false;
        }
        student stu;
    
        while (!plik.eof())
        { 
            plik >> stu.id >> stu.nazwisko >> stu.specjalnosc >> stu.ocena;
            s.push_back(stu);
        }
        plik.close();
        return true;
    }
    int main(int argc, char *argv[])
    {
        vector<student> st;
        if (!zpliku(st)) return -1;
        return 0;
    }
  2. Jak masz podać ile rekordów ma się wyświetlić to po prostu zrób funkcję wyświetlającą rekordy do podanej w argumencie funkcji liczby, możesz też zmodyfikować funkcję i określić od którego do którego numeru rekordy mają się wyświetlać albo wymyślić jeszcze inne wariacie na ten temat:
    void wyswietlRekordy(vector<student> st, int ile)
    {
        for (int i = 0; i < ile; i++) st[i].wyswietl();
    }
    void wyswietlRekordy(vector<student> st, int odkad, int dokad)
    {
        for (int i = odkad; i < dokad; i++) st[i].wyswietl();
    }
0

To wyświetlanie określonej liczby rekordów, zrobiłem właśnie podobnie tylko nie wektorowo. Zrobiłbym wektorem ale niestety projekt wymaga tablicy dynamicznej. Dzięki za pomoc;D

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