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;
}
  1. 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