Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

prosta baza danychw c++

#1
prosta baza danychw c++
Witam.
Znalazłem trochę wolnego czasu i wymyśliłem sobie, żeby pouczyć sie trochę C++. Kumpel powiedział żebym napisał prostą bazę danych. Wymyśliłem sobie jakoś prostą, która zapisuje do pliku imię, nazwisko i nr. telefonu.

Nie wiem jak sensownie odczytać dane z pliku, może je źle zapisuje?
Pomóżcie miPłaczePłacze

Kod, który stworzyłem:
Kod:
#include <iostream>
#include <fstream>

using namespace std;
struct rekord
{
       string imie;
       string nazwisko;
       int telefon;
};
rekord nowy_rekord()
{
    cout << "Podaj dane :\n";
    rekord pierwszy;
    cout << "imie: ";
    cin >>  pierwszy.imie;
    cout << "nazwisko: ";
    cin >> pierwszy.nazwisko;
    cout << "telefon: ";
    cin >>  pierwszy.telefon;
    system("cls");
    
    return pierwszy;
}
int menu()
{
     cout << "[1] Dodaj rekord\n";
     cout << "[2] Zapisz do pliku\n";
     cout << "[3] Wczytaj z pliku\n";
     cout << "[0] Wyjscie\n";
     int odp;
     cin >> odp;
     system("cls");
     return odp;    
}
void zapisz_baze(rekord *tab, int ile)
{
     ofstream fout("plik.txt", ios::app);
     for (int a = 0; a < ile; a++)      //zapisuje wszystkie nowe rekordy
     {
         fout << tab[a].imie << "\n";
         fout << tab[a].nazwisko << "\n";
         fout << tab[a].telefon << "\n";
     }
     fout.close();
}
void odczytaj_baze()
{
     ifstream fin("plik.txt");
     // jak odczytać dane z pliku??
     // najlepiej zeby zapisac je odpowiednio w strukturze rekord
     // tzn. odczytać imie i zapisac je w obiekcie rekord do imienia i tak z nazwiskiem oraz tel.
     fin.close();
    
}
int main()
{
    int odp ,a = 0;
    rekord tablica_rekordow[100];
    do{
       odp = menu();
       switch(odp)
       {
            case 1:{
                  tablica_rekordow[a] = nowy_rekord();
                  a++;
                  break;}
            case 2:{
                 zapisz_baze(tablica_rekordow, a);
                 break;}
            case 3:{
                 odczytaj_baze();
                 break;}
            case 0:
                 break;
            default: break;
       }
    } while (odp != 0);
}

Pisałem to Dev-C++.
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#2
RE: prosta baza danychw c++
zależy, czy Twój rekord MUSI zawierać wszystkie pola, jeśli tak, i nie ma potrzeby sprawdzania to odczytujesz tak:
Kod:
while(!fin.eof())
{
fin>>tmp;
rekord.nazwisko = tmp;
fin>>tmp;
rekord.imie = tmp;
...itd
}

edit: poza tym proponuje zapisać telefon jako ciąg znaków, powód? chociażby taki, że "0" na początku zostanie zjedzone i wprowadzenie (0)9X1XXXXXX da błąd
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#3
RE: prosta baza danychw c++
a jak zrobić, żeby odczytał na przykład tylko trzecią osobę w bazie danych, albo po podaniu nazwiska lub imienia odczytał odpowiednią osobę?
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#4
RE: prosta baza danychw c++
~Anonim napisał(a):a jak zrobić, żeby odczytał na przykład tylko trzecią osobę w bazie danych,
http://www.cplusplus.com/doc/tutorial/files.html

a co do wyszukiwania, hmm najprościej to przeszukiwanie liniowe, czyli czytasz np tylko nazwiska i jeżeli porównanie z szukanym wypadnie pozytywnie to wyświetlasz cały rekord.
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#5
RE: prosta baza danychw c++
ale ma czytać każdą z linii czy tylko te co są w niej nazwiska, bo nie mam pojęcia jak ustawić, żeby czytał co 3 linijkę
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#6
RE: prosta baza danychw c++
raczej musisz czytać każdą linię(tak mi się przynajmniej wydaje w przypadku łańcuchów)
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#7
RE: prosta baza danychw c++
a to nie spowolni bardzo pracy programu?
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#8
RE: prosta baza danychw c++
zależy jak duże bazy zamierzasz tworzyć, jeżeli duuże to już lepiej się zapoznać z MySQL, a tak w celach edukacyjnych to Ci przy testowaniu wszytko wyjdzie.
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#9
RE: prosta baza danychw c++
Napisałem coś takiego na razie:
Kod:
void odczytaj_baze()
{
     ifstream fin("plik.txt");
     string imie, nazwisko, telefon;
     int indeks = 0;
     cout << "*********************************************************************\n";
     cout << "Lp. " << "Imie" << "\tNazwisko" << "\tNr. telefonu\n";
     cout << "*********************************************************************\n";
     while(!fin.eof())
     {
          fin >> imie >> nazwisko >> telefon;
          cout << ++indeks << "). " << imie << " \t" << nazwisko << " \t" << telefon << endl;
          cout << "---------------------------------------------------------------------\n";
     }
     fin.close();
     system("pause");
     system("cls");
}
i nie wiem dlaczego ostatnia osoba w pliku jest zawsze wypisywana dwukrotnie, próbowałem pozmieniać tam coś, ale zawsze było to samo.
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#10
RE: prosta baza danychw c++
Zauważ że ile razy klikniesz na Zapisz do pliku to tyle razy dubluje Ci ostatni wiersz. Błąd tkwi w funkcji zapisz_baze
 System operacyjny: windows_vista Przeglądarka: opera
Programy: Polecane / Nowe / Inne




Podobne wątki (prosta baza danychw c++)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
Ściana Prosta gra w Builder C++ Kiranek1 1 916 31.05.2019, 15:20
Ostatni post: Szachista
  Baza danych w Accessie - sprawdzenie poprawności Fei 1 5803 12.01.2017, 00:40
Ostatni post: Chudy2000
  Baza danych w accessie Bernkow 1 6639 31.05.2016, 08:37
Ostatni post: koneton

Skocz do:


Wybrane wątki (prosta baza danychw c++)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  wczytywanie zmiennej z innego pliku batch grymariusza 7 8918 18.12.2017 17:34
Ostatni post: broda99
  Jaki kod pod takie okno formularza w visualbasicu 2010? aktywny27 11 18541 26.11.2017 23:26
Ostatni post: Ajgor
  Jaki projekt na pythona bartek164 0 7905 25.11.2017 19:59
Ostatni post: bartek164
  [VB.NET] przenoszenie danych między formami Pioro 15 19269 19.11.2017 03:48
Ostatni post: broda99
  Java.android.Tworzenie akcji Blendow 0 7776 16.11.2017 23:38
Ostatni post: Blendow
  Proszę o pomoc, cmd! PanKasztan4 1 7254 16.11.2017 22:05
Ostatni post: broda99
  Jaki kod w visual basicu 2010 express? aktywny27 5 8425 07.11.2017 11:01
Ostatni post: Ajgor
  Sprawdzanie wygranej. PixelFullHD 1 7997 03.11.2017 18:38
Ostatni post: Ajgor
  Algorytm Genetyczny C pr1991 3 8321 26.10.2017 11:52
Ostatni post: Szachista
  Program C++ do pola i objętości mistrz18 2 8379 18.10.2017 23:10
Ostatni post: Ajgor
  [C]Część wspólna 2 przedziałów. polak3018 2 7586 13.10.2017 16:43
Ostatni post: ptrick
Question Wyznaczanie maksimum spośród 5 liczb - schemat blokowy mistrz18 5 7974 05.10.2017 19:49
Ostatni post: broda99
  Batch - odczytywanie temperatury karty graficznej i zapisywanie jej do zmiennej ~Anonim 4 7995 03.09.2017 21:41
Ostatni post: ~Anonim
  Kodowanie znaków w .bat kkkkk2105 4 9444 25.08.2017 14:38
Ostatni post: kkkkk2105
  Konwertowanie słów na liczby Java Blendow 5 7792 19.08.2017 21:17
Ostatni post: Szachista