Diákadatbázis és menü

Feladat

Írjunk menüvezérelt programot diákok nyilvántartására. Minden diákról tudni kell az alábbiakat:

Menüpontok:

  1. diákok listájának kiírása
  2. diákok beolvasása fájlból
  3. új diák hozzáadása a lista végére
  4. új diák hozzáadása tetszőleges pozícióra
  5. diák törlése pozíció alapján
  6. diák törlése név alapján
  7. diákok rendezése abc rendbe
  8. diákok rendezése átlagok szerint csökkenő sorrendbe
  9. mennyi az összes diák kisujjai hosszának összege
  10. mennyi a hiányzások számának átlaga
  11. diák adatainak megkeresése név alapján
  12. diák adatainak megkeresése a név egy része alapján
  13. Melyik csillagjegy jelenik meg leggyakrabban az adatbázisunkban?
  14. lista ürítése
  15. kilépés

Könnyítés: mindenkinek csak egy vezeték és egy keresztneve van, minden szövegdarab max 20 karakter hosszú.

Példa bemeneti fájlra:

    3
    Setofi  O.  Pandor    1480101300700 setofi@pandor.hu  0700100200  1848.01.01  zold   halak   15  9.95   3
    Elbert  Z.  Ainstein  1100401300700 albi@fizika.org   0700200300  1910.04.01  piros  vizonto 16  8.2    7
    Elm     E.  Leticia   2580102300700 leti@teroretic.ro 0700300400  1958.01.02  sarga  halak   12  8.92  11

Megoldásvázlat:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdlib>
using namespace std;

struct Datum
{
    int ev, honap, nap;
};

struct Diak
{
    char vezeteknev[21];
    char initiala[10];
    char keresztnev[21];
    char cnp[15];
    char email[21];
    char tel[21];
    Datum szuldat;
    char szin[21];
    char csillagjegy[21];
    double ujjai;
    double atlag;
    int hianyzasok;
};

Datum beolvas_datum(istream &be)
{
    char s[100];
    be >> s;

    Datum d;

    char *p = strtok(s, ".");
    d.ev = atoi(p); // szöveget számmá alakít

    p = strtok(NULL, ".");
    d.honap = atoi(p);

    p = strtok(NULL, ".");
    d.nap = atoi(p);

    // +pontért: kézi megoldás ugyanerre

    return d;
}


int main()
{
    bool megy = true;

    int n = 0;
    Diak diakok[1000];


    while (megy) {
        cout << "--------------------" << endl;
        cout << "Menu:" << endl;
        cout << "    1. kiiras" << endl;
        cout << "    2. diakok beolvasasa fajlbol" << endl;
        cout << "   15. kilepes" << endl;
        cout << endl;
        cout << "Opcio: ";
        int opcio;
        cin >> opcio;
        cout << endl;

        if (opcio == 1) {
            cout << "egyenlore nincs senki..." << endl;
        }
        else if (opcio == 2) {
            ifstream be("input.txt");

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

                diak[i].szuldat = beolvas_datum(be);


            }


            be.close();
        }
        else if (opcio == 15) {
            cout << "Bye." << endl;
            megy = false;
        }
        else {
            cout << "hibas opcio" << endl;
        }

        cout << endl;
    }

    return 0;
}