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



Użytkownicy forum szukali:
prosta baza danych c++c++ prosta baza danychbaza + c++ jak zrobić bazę danych w c++dev c++ baza danychjak zrobic baze danych c++jak stworzyć bazę danych w c++c++ baza danych sklepubaza danych c++ prostatutorial bazy danych c++

Podobne wątki (prosta baza danychw c++)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
Ściana Prosta gra w Builder C++ Kiranek1 1 3570 31.05.2019, 15:20
Ostatni post: Szachista
  Baza danych w Accessie - sprawdzenie poprawności Fei 1 6223 12.01.2017, 00:40
Ostatni post: Chudy2000
  Baza danych w accessie Bernkow 1 7060 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
  Chciałbym zrobić prosty plik exe z jedną funkcją densour 4 8559 09.08.2018 16:24
Ostatni post: Ajgor
  Który język wybrać do stworzenia aplikacji synchronizujące pliki z urządzeniem mobiln Elemental 2 2362 18.07.2018 12:05
Ostatni post: Ajgor
  Pomysł napisania programu ROM FireBytes 3 9207 28.06.2018 16:56
Ostatni post: FireBytes
  [VBA] Tworzenie nowego arkusza z danymi z TextBox'a Pioro 4 9499 19.06.2018 23:24
Ostatni post: broda99
  Potwierdzenie na maila po wysłaniu pliku coci 0 8676 13.06.2018 20:37
Ostatni post: coci
  Pieczętowanie Archiwum Jar - Po co? wanhelsing 3 9279 19.05.2018 20:55
Ostatni post: koneton
  Wyszukiwarka w spawnerze nie reaguje na polskie znaki kazik666 0 9059 16.05.2018 12:04
Ostatni post: kazik666
  BASH symulator silnika dawswi1 3 9548 13.05.2018 10:43
Ostatni post: Szachista
  Autohotkey automatyczny zapis TheProgson 0 9153 07.05.2018 21:27
Ostatni post: TheProgson
  VBA Pobieranie wybranych plików z danymi julietta03 1 9398 04.05.2018 08:25
Ostatni post: broda99
  [VBA] Przenoszenie danych między formularzami Pioro 4 9819 23.04.2018 11:48
Ostatni post: broda99
  Skrypt, który szuka i zamienia armen10 2 9545 23.04.2018 10:04
Ostatni post: armen10
  Liniowa regresja w Pythonie a budowanie modelu Trojan3000 2 9747 16.04.2018 13:26
Ostatni post: Trojan3000
  Początki z bashem - jak napisać skrypty: wysłanie maila i kalkulator? Kristov81 4 13594 21.03.2018 18:32
Ostatni post: Szachista
Ściana Zadanie cmd.... Yanke$ 2 10707 16.03.2018 17:20
Ostatni post: FireBytes