Projekt C++, dziennik lekcyjny.

0

Witam, mam do napisania dziennik lekcyjny jako projekt na zaliczenie podstaw programowania. Korzystam ze struktur, które podaję do pliku, mam póki co podawanie danych i wyświetlanie listy uczniów, ale chciałbym jeszcze do tego dodać wyświetlanie danych konkretnego ucznia po podaniu jego imienia i nazwiska, generowanie listy zagrożonych osób oraz może sortowanie listy obecności według nazwisk. Nie wiem jak się za to zabrać, bo jeszcze tak naprawdę tego tematu nie miałem, więc nie wiem co ten tryb binarny potrafi i jak się nim posługiwać.

1

Zakładając, że uczniowie są trzymani w osobnych plikach

  • wyświetlanie danych konkretnego ucznia po podaniu jego imienia i nazwiska
uczeń = Wczytaj_z_pliku(Imię+Nazwisko)
Wyświetl(uczeń)
  • generowanie listy zagrożonych osób
lista
foreach(nazwa_pliku in lista_nazw)
  uczeń = Wczytaj_z_pliku(nazwa_pliku)
  jeśli(uczeń.ocena < minimalna)
    lista.add(uczeń)
  • sortowanie listy obecności według nazwisk
lista
foreach(nazwa_pliku in lista_nazw)
  lista.add(Wczytaj_z_pliku(nazwa_pliku))
lista.sort()
0

Jak zrobić jeśli dane trafiają do jednego pliku sortowanie listy uczniów według nazwisk oraz dodawanie ocen, zeby bylo kilka, z ktorych licze srednia, jak ponizej sredniej dane ucznia trafiaja do pliku z uczniami zagrozonymi?

Tyle napisałem póki co:

#include <iostream>
#include <fstream>

using namespace std;

void menu();
void dodaj();
void lista();
void dane();
void zagrozeni();

struct adr
{
    char miasto [20];
    char ulica [20];
    int numer;
};

struct uczniowie
{
    char imie[20];
    char nazwisko [20];
    adr adres;
    int telefon;
    char ojciec [20];
    char matka [20];
    int oceny;
};

int main ()
{
    menu();
}

void lista()
{
    uczniowie uczen;
    int i=1;
    ifstream plik("uczniowie.dat", ios::binary | ios::in);
    while (1)
    {
        plik.read(reinterpret_cast<char*>(&uczen),sizeof(uczen));
        if(plik.eof()) break;
        cout<<i<<" "<<uczen.imie<<" "<<uczen.nazwisko<<endl;
        i++;
    }
    plik.close();

}

void dane()
{
    uczniowie uczen;
    int wybor;
    cout<<"Dane ktorego ucznia chcesz wyswietlic?"<<endl;
    cin>>wybor;
    if (cin.good()==0)
        {
            while (cin.good()==0)
            {
                cin.clear();
                cin.sync();
                cout<<"Podano bledna liczbe, wprowadz ja raz jeszcze: ";
                cin>>wybor;
            }
        }
    ifstream plik("uczniowie.dat", ios::binary | ios::in);
    plik.seekg(sizeof(struct uczniowie)*(wybor-1));
    plik.read(reinterpret_cast<char*>(&uczen),sizeof(uczen));
    cout<<"Uczen "<<uczen.imie<<" "<<uczen.nazwisko
    <<endl
    <<"Adres "<<uczen.adres.miasto<<" "<<uczen.adres.ulica<<" "<<uczen.adres.numer
    <<endl
    <<"Numer telefonu "<<uczen.telefon
    <<endl
    <<"Rodzice "<<uczen.ojciec<<" "<<uczen.matka
    <<endl
    <<uczen.oceny
    <<endl<<endl;
    plik.close();
}

void zagrozeni()
{
    cout<<"W budowie"<<endl;
}

void dodaj()
{
    int liczba;
    cout<<" Ilu uczniow chcesz dodac do listy?"<<endl;
    cin>>liczba;
    if (cin.good()==0)
        {
            while (cin.good()==0)
            {
                cin.clear();
                cin.sync();
                cout<<"Podano bledna liczbe, wprowadz ja raz jeszcze: ";
                cin>>liczba;
            }
        }
    uczniowie uczen;
    ofstream plik ("uczniowie.dat", ios::out | ios::app | ios::binary);
    for (int i=0; i<liczba; i++)
    {
        cout<<" Uczen numer "<<i+1
        <<endl;
        cout<<" Nazwisko : ";
        cin>>uczen.nazwisko;
        cout<<endl;
        cout<<" Imie: ";
        cin>>uczen.imie;
        cout<<endl;
        cout<<" Miasto: ";
        cin>>uczen.adres.miasto;
        cout<<endl;
        cout<<" Ulica: ";
        cin>>uczen.adres.ulica;
        cout<<endl;
        cout<<" Numer domu: ";
        cin>>uczen.adres.numer;
        cout<<endl;
        cout<<" Numer telefonu: ";
        cin>>uczen.telefon;
        cout<<endl;
        cout<<" Imie matki: ";
        cin>>uczen.matka;
        cout<<endl;
        cout<<" Imie ojca: ";
        cin>>uczen.ojciec;
        cout<<endl;
        cout<<" Oceny: ";
        cin>>uczen.oceny;
        cout<<endl;
        cout<<endl;
        plik.write(reinterpret_cast<char*>(&uczen),sizeof(uczen));
    }
    plik.close();
}

void menu()
{
    int wybor1, wybor2;
        do
        {
        cout<<"\t\t***** DZIENNIK LEKCYJNY ***** "<<endl;
        cout<<"\t[1] MENU "<<endl;
        cout<<"\t[0] KONIEC PROGRAMU"<<endl;
        cin>>wybor1;
        if (cin.good()==0)
        {
            while (cin.good()==0)
            {
                cin.clear();
                cin.sync();
                cout<<"Podano bledna liczbe, wprowadz ja raz jeszcze: ";
                cin>>wybor1;
            }
        }
            if (wybor1==1)
            {
            cout<<"\t\t      MENU"
                <<endl
                <<"\t  Prosze o wybranie dzialania:"
                <<endl
                <<"\t  [1] Dodanie ucznia do listy"                        //
                <<endl
                <<"\t  [2] Wyswietlenie listy uczniow"
                <<endl
                <<"\t  [3] Wyswietlanie danych ucznia"            //
                <<endl
                <<"\t  [4] Generowanie listy zagrozonych osob"
                <<endl
                <<"\t  [0] Koniec programu"
                <<endl
                <<endl;
                cin>>wybor2;
                    if (cin.good()==0)
                    {
                        while (cin.good()==0)
                        {
                            cin.clear();
                            cin.sync();
                            cout<<"Podano bledna liczbe, wprowadz ja raz jeszcze: ";
                            cin>>wybor2;
                        }
                    }
                switch (wybor2)
                {
                    case 1:
                    {
                        dodaj();
                        break;
                    }
                    case 2:
                    {
                        lista();
                        break;
                    }
                    case 3:
                    {
                        dane();
                        break;
                    }
                    case 4:
                    {
                        zagrozeni();
                        break;
                    }
                    case 0:
                    {
                        cout<<"KONIEC";
                        break;
                    }
                    default:
                    {
                        cout<<"Cos poszlo nie tak.";
                        break;
                    }
                }
            }
            else
                {
                    cout<<"KONIEC"
                    <<endl;
                }
        cout<<endl;
        if (wybor1!=0) cout<<"Co teraz?"<<endl<<endl;
        }while (wybor1!=0);
}

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