Lista uczniow klasy(szkolnej) z uzyciem klasy

0

Witam,
jestem bardzo poczatkujacym programista, i zabralem sie za taki pierwszy pomysl na program. Wizja jest taka ze uzytkownik wpisuje jakies dane ucznia, one sa zapisywane jako obiekt klasy, a na koncu pokazywana jest ta cala lista.
Zabralem sie za petle ktora pobiera dane o uczniu i wprowadza je do obiektu klasy , ale wlasnie z tym mam problem , nie wiem jak za kazdym rozruchem pentli pobieralo nowy obiekt. Chcialbym tez aby liczba obiektow byla tworzona po podaniu liczby osob w klasie a nie tak jak teraz bo jest to bardzo nieczytelne i niewygodne. Kod jest bardzo niepoprawny , probowalem roznych sposobow, dlatego niektore rzeczy w nich sa niepotrzebne.
Zatem przejdzmy do kodu:
main.cpp:

#include "dane.h"
void gwiazdki(string);

int main()
{
	dane uczen1,
		uczen2,
		uczen3,
		//... pominelem tutaj dluga liste obiektow
		uczen31;
	dane *wskU ;
	string nazwaP("Lista uczniow w klasie v.0.1 ");
	gwiazdki(nazwaP);
	cout << "Podaj ile osob jest w klasie: ";
	int ile;
	cin >> ile;

	for(int i = 0 ; i < ile ; i++)
	{
		
		int Numer;
		string Imie;
		string Nazwisko;
		string Pseudo;
		cout << "Podaj numer z dzienika ucznia: ";
		cin >> Numer;
		cout << "Podaj imie ucznia: ";
		cin >> Imie;
		cout << "Podaj nazwisko ucznia: ";
		cin >> Nazwisko;
		cout << "Podaj pseudonim ucznia: ";
		cin >> Pseudo;
		
		wskU = uczen1; // blad!  '=' : cannot convert from 'dane' to 'dane *'

		wskU->zapamietaj(Numer,Imie,Nazwisko,Pseudo);
		
	}
	cout << uczen1;
	system("pause");


}

void gwiazdki(string tresc)
{
	string gwiazdkii(tresc.length()+6,'*');
	cout << gwiazdkii << "\n"
		 << gwiazdkii << "\r"
		 << "** " << tresc << " **\n"
		 << gwiazdkii << endl;
}

dane.h:

#pragma once
#include <iostream>
#include <string>
using namespace std;
class dane
{
	int nrd;
	string imie;
	string nazwisko;
	string pseudo;
public:
	
	void zapamietaj(int,string,string,string,int);
	
};

dane.cpp:

#include "dane.h"

void dane::zapamietaj(int Numer,string Imie,string Nazwisko,string Pseudo,int licznik = 0)
{
	nrd = Numer;
	imie = Imie;
	nazwisko = Nazwisko;
	pseudo = Pseudo;
	licznik++;
}


Wiem ze to herezje , ale mysle jak to wykonac posiadajac moja wiedze , ale juz nie mam pomyslow.
Dodam ze czytam Symfonie C++, i jestem dopiero w rodziale o stringach (1 tom)
Czy wykonanie tego programu przerasta moje dotychczasowe mozliwosci?

0

Może lepiej dojść chociaz do rozdziału o klasach? Bo wtedy wiedziałbyś ze mozesz zrobić np. coś takiego:

class Osoba
  {
    int nrd;
    string imie;
    string nazwisko;
    string pseudo;
  public:
    Osoba(int nr=0, string i="", string n="", string p=""):nrd(nr),imie(i),nazwisko(n),pseudo(p) {} //konstruktor
    void zmiana_danych(int nr, string i, string n, string p)
    {
      nrd=nr;
      imie=i;
      nazwisko=n;
      pseudo=p;
    }
    void wypisz()
    {
      cout<<nrd<<" "<<imie<<" "<<pseudo<<" "<<nazwisko<<endl;
    }
  };

class Klasa
  {
    int liczba_uczniow;
    Osoba* lista_uczniow;
  public:
    Klasa(int l):liczba_uczniow(l) //konstruktor
    {
      lista_uczniow = new Osoba[liczba_uczniow];
    }
    ~Klasa() //destruktor
    {
      delete[] lista_uczniow;
    }
    void wypisz()
    {
      for (int i=0;i<liczba_uczniow;i++)
        lista_uczniow[i].wypisz();
    }
    void zmien_dane(int numer,int nowy_nr,string i, string n, string p)
    {
      lista_uczniow[numer].zmiana_danych(nowy_nr,i,n,p);
    }
  };

Teraz masz jedną klasę odpowiedzialną za konkretne osoby, a drugą za całą klasę i jej oblsugę.

0

Ok poradzilem sobie z programem ;)
Funkcjami skladowymi klasy chcialem zajac sie pozniej przy konstrukcji menu, wzielem sie Od razu za ta petle wpisujaca dane.

Dzieki za pomoc ;)

0
Shalom napisał(a)

class Klasa
{
int liczba_uczniow;
Osoba* lista_uczniow;
public:
Klasa(int l):liczba_uczniow(l) //konstruktor
{
lista_uczniow = new Osoba[liczba_uczniow];
}

Moglibyście jeszcze skomentować dlaczego konstruktor wygląda tak jak wygląda?

0

Tzn co konkretnie cię interesuje?
Lista inicjalizacyjna, czyli to coś po dwukropku za deklaracją, czy czemu alokujemy pamięć?
Lista inicjalizacyjna przyda się kiedy składnikami klasy są obiekty innych klas, a także obiekty stałe. W ten sposób można przekazać parametry do konstruktorów klas będących składnikami naszej klasy.

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