• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Baza danych w C++

Object Storage Arubacloud
0 głosów
5,539 wizyt
pytanie zadane 7 kwietnia 2018 w C i C++ przez cubus Początkujący (430 p.)
Cześć,
postanowiłem napisać w C++ bazę danych komisu samochodowego za pomocą klas, jednak mogę tylko wpisywać i wyświetlać dane poprzedniego właściciela oraz dane samochodu (tak sobie wymyśliłem), ponadto zrobiłem tablicę, w której przechowuje te dane oraz użyłem switcha aby użytkownik mógł wybrać, które dane (czy samochodu czy właściciela) chce wpisać. No ale to za mało, bo co to za baza, no i dlatego chciałbym się dowiedzieć w jakiś sposób/co muszę użyć, abym mógł zapisać/usunąć te wprowadzone dane w bazie, abym mógł później wyświetlić konkretny samochód/sprawdzić czy jest w bazie, zrobić tak jakby taką wyszukiwarkę konkretnego samochodu jakim byłby zainteresowany kupujący ;) Na razie chciałbym wiedzieć jak zrobić to w prosty i zrozumiały dla mnie sposób, bo dopiero co zaczynam przygodę z programowaniem.
komentarz 7 kwietnia 2018 przez Jakub 0 Pasjonat (23,120 p.)

w jakiś sposób/co muszę użyć, abym mógł zapisać/usunąć te wprowadzone dane w bazie, abym mógł później wyświetlić konkretny samochód/sprawdzić czy jest w bazie, zrobić tak jakby taką wyszukiwarkę konkretnego samochodu jakim byłby zainteresowany kupujący

Poczytaj o STL a konkretnie o klasie vector: http://cpp0x.pl/dokumentacja/standard-C++/vector/819

 

komentarz 7 kwietnia 2018 przez cubus Początkujący (430 p.)
Nie mam pomysłu jak napisać kod aby dodawać dane za pomocą vektora. Ogólnie jak mam "wpisać" do tego push_backa metode?
komentarz 7 kwietnia 2018 przez Jakub 0 Pasjonat (23,120 p.)

Nie rozumiem twojego pytania :/

Jak wpisać metodę? Masz wektor mieszczący w sobie jakiś typ (int, float lub twój własny), nie wiem jak nazywa się twoja klasa. Np. Car

to masz:

std::vector<Car> vec;

Użytkownik coś wybierze w menu, np że chce dodać nowy samochód do bazy...

Car temp( ... ); 
temp.cos()  //ustawiane są pola samochodu (za pomocą np konstruktora czy funkcji ) i na koniec:

vec.push_back(temp); 
//dodajesz obiekt do wektora 

 

Możesz pracować na wektorze jak na zwykłej tablicy:

vec[n] //to pojedynczy obiekt twojej klasy 

Nie wiem zbytnio jaka jest budowa twojego kodu i jaka wiedza z OOP - moja też nie za wielka. Ale w ten sposób to się mniej więcej robi...

Oczywiście jak chcesz te dane zapisać to wykorzystujesz do tego plik tekstowy. Ogólnie to się korzysta z baz danych jak masz w odpowiedzi.

komentarz 7 kwietnia 2018 przez cubus Początkujący (430 p.)

Pomiędzy nawiasami w Car temp mam wpisać pola samochodu wraz z typami np. int? a w miejsce temp.cos() gotowa metode z klasy pobierajaca dane samochodu? czyli np.

 

 void pobierz()
  {
    cout<<"Marka: ";
    cin>>marka;
    cout<<"Model: ";
    cin>>model;
    cout<<"Rok produkcji: ";
    cin>>rok;
    cout<<"Pojemnosc: ";
    cin>>pojemnosc;
    cout<<"Rodzaj paliwa: ";
    cin>>rodzaj_pal;
    cout<<"Cena: ";
    cin>>cena;
  }

czy może:

      pobierz.marka();
      pobierz.model();
                .
                .
                .
             itd.
   

 

2 odpowiedzi

+1 głos
odpowiedź 7 kwietnia 2018 przez CzikaCarry Szeryf (75,340 p.)
Zainteresuj się jakąś SQL'ową bazą danych, np. MySQL
+1 głos
odpowiedź 7 kwietnia 2018 przez mokrowski Mędrzec (155,740 p.)

A masz tu przykład dla mikroskopijnej bazy z wyszukiwaniem linearnym. Na sam początek nauki wystarczy.

Standard C++11:

#include <iostream>
#include <vector>

// Jakaś struktura rekordu samochodu.. 
struct Samochod {
	std::string marka;
	std::string model;
	unsigned short int rok;
	double pojemnosc;
	std::string rodzaj_paliwa;
	double cena;
};


Samochod szukajPoMarce(const std::string& marka, const std::vector<Samochod>& baza) {
	for(size_t numer_rekordu = 0; numer_rekordu < baza.size(); ++numer_rekordu) {
		Samochod samochod = baza[numer_rekordu];
		if(samochod.marka == marka) {
			return samochod;
		}
	}
	return {};
}

void pokazSamochod(const Samochod& samochod) {
	std::cout << "------------------\n";
	std::cout << "Marka: " << samochod.marka
		<< "\nModel: " << samochod.model
		<< "\nRocznik: " << samochod.rok
		<< "\nPojemność: " << samochod.pojemnosc
		<< "\nRodzaj paliwa: " << samochod.rodzaj_paliwa
		<< "\nCena: " << samochod.cena << '\n';
	std::cout << "------------------\n";
}

int main() {
	// Mały przykład bazy... 
	std::vector<Samochod> baza_samochodow{
		{ "Opel", "Astra", 2001, 3.2, "beznyna", 43554 },
		{ "Ford", "S-Max", 2011, 4.2, "hydrazyna", 110000 },
		{ "VW", "Garbus", 1980, 2.2, "benzyna", 65333 }
	};
	std::string marka;

	std::cout << "Podaj markę szukanego samochodu: ";
	std::cin >> marka;
	Samochod samochod = szukajPoMarce(marka, baza_samochodow);
	// Może nie znaleźć samochodu, trzeba sprawdzić.
	if(samochod.marka == marka) {
		pokazSamochod(samochod);
	} else {
		std::cout << "Przykro mi, nie mam takiej marki samochodu w bazie.\n";
	}
}

 

komentarz 7 kwietnia 2018 przez Hiskiel Pasjonat (22,830 p.)
A to przypadkiem po wektorze nie iteruje się vector<type>::iterator iteratorem?

I tak w ogóle co oznacza return {};? Czemu nie po prostu return; ?
komentarz 7 kwietnia 2018 przez mokrowski Mędrzec (155,740 p.)
A oczywiście że iteratorem. Pytający sugeruje jednak swoją niską wiedzę i początkowy etap nauki. Chciałem także oswoić dostęp przez dane[index].

Sprawdź czy return; będzie odpowiedni i co mówi błąd. return {}; zwraca pusty obiekt danego typu zainicjowany składowymi wartościami domyślnymi (dla "typów liczbowych" - skrót myślowy..., zera... dla std::string, pusty string).
komentarz 8 kwietnia 2018 przez JAKUBW Nałogowiec (33,470 p.)
Funkcja szukajPoMarce strasznie dużo kopiuje danych (co jest bardzo wolne i ogranicza funkcjonalność), a można by dodać 2 znaki & lub pracować na wskaźnikach aby tego uniknąć.
komentarz 8 kwietnia 2018 przez mokrowski Mędrzec (155,740 p.)
OCZYWIŚCIE! Można dodać iteratory, std::find_if z <algorithm>, r-referencję, nie szukać linearnie tylko przez unordered_set, nie stosować struct tylko std::tuple, dodać obiektowość i zrobić jeszcze wiele innych "fajnych rzeczy". Tylko czy pytający to zrozumie? Ten kod zrozumie i to było jego celem na tym etapie nauki...

Widzę po uwagach że eksperyment z prostym kodem (o co prosiło wielu na tym forum) się nie udaje.... Następnym razem wrócę do state of the art technik nie przejmując się czy ktoś ma kompilator zgodny z c++2a czy nie....

Podobne pytania

0 głosów
0 odpowiedzi 241 wizyt
pytanie zadane 16 października 2019 w SQL, bazy danych przez 0100Kacper Nowicjusz (120 p.)
+1 głos
3 odpowiedzi 501 wizyt
pytanie zadane 9 sierpnia 2022 w SQL, bazy danych przez KonDZIKs Bywalec (2,770 p.)
+2 głosów
0 odpowiedzi 646 wizyt

92,631 zapytań

141,498 odpowiedzi

319,869 komentarzy

62,011 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...