home *** CD-ROM | disk | FTP | other *** search
/ Enter 2000 November / ENTER11.bin / Mat_Uzup / C++ / BAZA.CPP next >
Encoding:
C/C++ Source or Header  |  2000-09-08  |  3.6 KB  |  169 lines

  1. #include <iostream.h>
  2. #include <fstream.h>
  3.  
  4. //zmienne globalne
  5. //ulatwia to znacznie napisanie
  6. //procedur Load i Save
  7. const int MAX=256; //ile max wpisow w bazie
  8.  
  9. char imie[MAX][64];
  10. char adres[MAX][64];
  11. char tel[MAX][16];
  12.  
  13. void Load(void)
  14. {
  15.    int i=0;
  16.    ifstream plik;
  17.  
  18.    plik.open("baza.txt");
  19.  
  20.    do {
  21.  
  22.    if (plik.fail())
  23.       {
  24.       plik.close(); return;
  25.       }
  26.  
  27.    if (!plik.eof())
  28.       {
  29.       plik.getline(imie[i], sizeof(imie[i]), '#');
  30.       plik.getline(adres[i], sizeof(adres[i]), '#');
  31.       plik.getline(tel[i], sizeof(tel[i]), '#');
  32.       plik.ignore();
  33.       i++;
  34.       if (i == MAX) break; //zakoncz while - brak miejsc
  35.       }
  36.    } while (!plik.eof()); //az do konca pliku
  37.  
  38.    plik.close();
  39. }
  40.  
  41. void Save(void)
  42. {
  43.    int i;
  44.    ofstream plik;
  45.  
  46.    plik.open("baza.txt");
  47.    if (plik.fail())
  48.       {
  49.       plik.close(); 
  50.       cout << "Wystapil blad pliku!" << endl;
  51.       exit(1);
  52.       }
  53.  
  54.    for (i=0; i<MAX; i++)
  55.        if (imie[i][0] != NULL)
  56.           {
  57.           plik << imie[i] << '#'
  58.                << adres[i] << '#'
  59.                << tel[i] << '#' << endl;
  60.           }
  61.  
  62.    plik.close();
  63. }
  64.  
  65. void main(void)
  66. {
  67.    int i, z=0;
  68.    char cmd[4];
  69.    char temp[MAX];
  70.  
  71.    //ustaw jako puste
  72.    //zabezpieczenie przez smieciami
  73.    //w pamieci RAM
  74.    for (i=0; i<MAX; i++)
  75.        {
  76.        imie[i][0] = NULL;
  77.        adres[i][0] = NULL;
  78.        tel[i][0] = NULL;
  79.        }
  80.  
  81.    //wczytaj z dysku istniejaca baze
  82.    //jesli nie ma pliku, to pusta baza
  83.    Load();
  84.  
  85.    //policz ile zajetych miejsc
  86.    for (i=0; i<MAX; i++)
  87.        if (imie[i][0] != NULL) z++;
  88.  
  89.    do {
  90.    cout << "Prosta baza teleadresowa." << endl
  91.         << "Wolnych wpisow: " << MAX - z << endl << endl
  92.         << "1. Dodaj nowy wpis" << endl
  93.         << "2. Usun istniejacy wpis" << endl
  94.         << "3. Pokaz zawartosc bazy" << endl 
  95.         << "0. Koniec pracy" << endl << endl
  96.         << "? ";
  97.    cin.get(cmd, sizeof(cmd));
  98.    cin.ignore();
  99.  
  100.    switch (cmd[0])
  101.       {
  102.       case '1':
  103.       //mamy wolne?
  104.  
  105.       if (z != MAX)
  106.          {
  107.          //znajdz pierwszy pusty
  108.          for (i=0; i<MAX; i++)
  109.              if (imie[i][0] == NULL)
  110.                 {
  111.                 cout << "Podaj imie: ";
  112.                 cin.get(imie[i], sizeof(imie[i]));
  113.                 cin.ignore();
  114.  
  115.                 cout << "Podaj adres: ";
  116.                 cin.get(adres[i], sizeof(adres[i]));
  117.                 cin.ignore();
  118.  
  119.                 cout << "Podaj numer telefonu: ";
  120.                 cin.get(tel[i], sizeof(tel[i]));
  121.                 cin.ignore();
  122.  
  123.                 z++; //zwieksz liczbe zajetych
  124.                 break; //przerwij wykonywanie petli for
  125.                 }
  126.          }
  127.          else
  128.          {
  129.          cout << "Brak wolnych wpisow!!!" << endl;
  130.          }
  131.       break;
  132.  
  133.       case '2':
  134.       cout << "Usuwanie - podaj imie: ";
  135.       cin.get(temp, sizeof(temp));
  136.       cin.ignore();
  137.       for (i=0; i<MAX; i++)
  138.           if (!strcmp(imie[i], temp))
  139.              {
  140.              imie[i][0] = NULL;
  141.              adres[i][0] = NULL;
  142.              tel[i][0] = NULL;
  143.              z--;
  144.              cout << "Usunieto wpis!" << endl;
  145.              break; //for
  146.              }
  147.       if (i == MAX) cout << "Nie znaleziono takiego wpisu!" << endl;
  148.       break;
  149.  
  150.       case '3':
  151.       for (i=0; i<MAX; i++)
  152.           {
  153.           if (imie[i][0] != NULL)
  154.              cout << imie[i] << "\t"
  155.                   << adres[i] << "\t"
  156.                   << tel[i] << endl;
  157.           }
  158.       cout << endl;
  159.       break;
  160.  
  161.       case '0':
  162.       break;
  163.       }
  164.  
  165.    } while (cmd[0] != '0');
  166.  
  167.    Save();
  168. }
  169.