Baza danych C++ najprostszy sposób, sam będę pisął

0

Witam

Mam napisać bazę danych w C++ (później jeśli się uda to potem spróbuje zrobić również w C). Operując na klasach muszę zrobić *odczyt danych z pliku .txt, dodawanie i usuwanie rekordów z bazy (korzystając oczywiście z konsoli), wyświetlić na ekranie rekordy po zmianach oraz *zapisać bazę z powrotem do tego samego pliku .txt. Wszystkie funkcje operujące na bazie mają być w osobnych plikach.
Wiem, że założyłem już kiedyś podobny temat, ale założenia się zmieniły i nie mogę kontynuować starego.

Chcę zrobić jak najwięcej sam w najłatwiejszy możliwy sposób zachowując oczywiście czytelność kodu. Jako niedoświadczony programista będę zadawał dużo pytań i byłbym bardzo wdzięczny jeśli prawidłowo mnie nakierujecie.

  1. Z jakiej struktury danych najlepiej skorzystać? Przechowywać dane w tablicy dynamicznej, liście jedno/dwu kierunkowej(?), a może w czym innym? Tak żeby łatwo można było zmieniać dane, usuwać i dodawać.
  2. Lepiej napisać na początku wszystko w jednym pliku i potem rozrzucić na kilka czy od razu pisać każdą funkcję w osobnym pliku?
  3. W jaki sposób umieścić dane w pliku *.txt? Wariant1: http://pastebin.com/30bUDb6q czy Wariant2: http://pastebin.com/R9KVaGAG Wolałbym Wariant1 jeśli to nie problem. No i czy program będzie mógł w ten sam sposób zapisać bazę danych? Na datach nie będę wykonywać żadnych obliczeń.
1
  1. To zależy jak chcesz operować tą bazą. Może być lista, może być wektor a może być np. mapa, jeżeli chcesz uzyskiwać dostęp wg jakiegoś klucza (np. imienia, możliwe są oczywiście inne struktury danych).
  2. Pisanie każdej funkcji w osobnym pliku to jakaś głupota. Przyjęło się, że osobno umieszcza się deklarację klasy i potrzebnych rzeczy (plik nagłówkowy) oraz implementację (plik źródłowy).
  3. Wariant 1, tylko dodaj separator.

Napisanie tego z wykorzystaniem biblioteki standardowej C++ nie jest trudne. W C to trochę inna bajka.

0

Żadnego z tych wariantów nie dasz rady poprawnie odczytać.
Ale jak dasz:
Data Co Kto
to już znacznie lepiej o ile Co będzie zawsze jedno słowo.
Jeżeli nie to musisz dać jakiś znak oddzielający, np
Data Co : Kto
I pilnować aby w to Co nie mogło zawierać znaku ':'

Jaki kontener zastosować zależy od przewidywanej funkcjonalności. Ale zastanów się nad drzewem binarnym - realizacja (o ile bez równoważenia) nie jest znacznie trudniejsza od listy dwukierunkowej, zaś rekordy na dzień dobry są już posortowane.

1
#if !defined ( Funkcje_h )
#define Funkcje_h
#endif

WTF?

#ifndef nazwaPliku_h
#define nazwaPliku_h
/*
   tutaj umieszczasz zawartość pliku nagłówkowego
 */
#endif /* nazwaPliku_h */

Odnośnie Twojego kodu (tej klasy). Dlaczego nie podejdziesz do problemu z głową i nie podzielisz go na osobne warstwy abstrakcji? Bazą danych u Ciebie jest plik tekstowy, więc może warto by utworzyć klasę zajmującą się podstawową obsługą tej bazy (czytaj pliku)? Czy nie lepiej byłoby utworzyć osobną klasę odpowiedzialną za rekordy db? Tworzenie jednej, wielkiej klasy zajmującej się wszystkim nie jest dobrym wyjściem, nigdy.

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