baza danych książek błąd

0

Witam wszystkich programistów. Mam mały problem dotyczący Bazy Danych Książek, program piszę w programie DEV C++ kod wygląda następująco:


#include<iostream>
#include<string>
#include<fstream>

using namespace std;

struct Ksiazki
{
	string tytul;
	string autor;
	int numer biblioteczny;
	string wydawnictwo;
};






int main (int argc, char** argv)

{
	cout<<"============KSIAZKI=============\n\n";
	cout<<"=============BAZA===============\n\n";
	cout<<"============DANYCH==============\n\n";
	
int znak;
	argv[1]="baza.txt";  ///przykładowa nazwa bazy
	
do
    {  ////klamra otwierajaca funkcja DO
	
	cout<<" 1.Ilosc wczytywanych ksiazek  wcisnij-1\n\n";
	cout<<" 2.Podaj pozycje               wcisnij-2\n\n";
	cout<<" 3.Sortowanie wedlug numeru    wcisnij-3\n\n";
	cout<<" 4.Sortowanie wedlug tytulu    wcisnij-4\n\n";
	cout<<" 5.Utworz baze danych (plik)   wcisnij-5\n\n";
	cout<<" 6.Wczytaj z pliku             wcisnij-6\n\n";
	cout<<"================================\n\n";
	cout<<" 7.Wyjdz z programu              wcisnij-0\n\n";
	cin>>znak;
	
switch (znak)
    {         ////// klamra otwierajaca funkcja SWITCH
	case 1:
	{        //// klamra otwierajaca funkcja CASE 1
	int N;
	cout<< "Ile Ksiazek Chcesz Wczytac??\n";
	cin>> N;
	break;	
		
	}       //// klamra zamykajaca funkcja CASE 1
	
	
	
    }       //// klamra zamykajaca funkcja SWITCH
	
	
	
	
	
	
    }     //// klamra zamykajaca funkcja D0
while(znak!=0);
	
	system ("pause");
	return 0;
};

Wyskakuje mi błąd przy int numer biblioteczny;
Dodam iż jestem na pierwszym roku studiów informatycznych i tą bazę danych dostałem na zaliczenie(termin styczeń) . Mam jeszcze dużo do roboty w tej bazie ale ten błąd mnie irytuje.
Chciałbym Was Prosić o pomoc przy pisaniu tej bazy danych. Z góry dziękuje i pozdrawiam :)

2

Nazwa zmiennej nie może posiadać spacji.

0

Dziękuje działa :) jeśli mogę o coś jeszcze zapytać to chciałbym wiedzieć jakiej funkcji użyć do sortowania bo muszę zrobić sortowanie według nr tytułu

2

std::sort z własnym komparatorem

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

struct Ksiazka 
{
    string tytul;
    string autor;
    int numer_biblioteczny;
    string wydawnictwo;
    
    Ksiazka(const string& t, const string& a, int nr, const string& w)
    	: tytul(t), autor(a), numer_biblioteczny(nr), wydawnictwo(w)
	{}
};

struct comparator
{
	int crit;
	comparator(int crit) : crit(crit) {}
	bool operator()(const Ksiazka& left, const Ksiazka& right)
	{
		if (crit == 0)
			return left.tytul < right.tytul;
		else
			return left.numer_biblioteczny < right.numer_biblioteczny;
	}
};

int main(int argc, char** argv)
{
	vector<Ksiazka> books = { Ksiazka("Tytul_P", "Nieznany", 3, "W"),
							  Ksiazka("Tytul_S", "Zmarly", 2, "Z"),
							  Ksiazka("Tytul_A", "Znany", 5, "I") };
	comparator byTitle(0);
	sort(begin(books), end(books), byTitle);
	for (auto&& b : books)
		cout << b.tytul << " " << b.autor << " " << b.numer_biblioteczny << " " << b.wydawnictwo << endl;
	cout << endl;
	
	comparator byNumber(1);
	sort(begin(books), end(books), byNumber);
	for (auto&& b : books)
		cout << b.tytul << " " << b.autor << " " << b.numer_biblioteczny << " " << b.wydawnictwo << endl;
	
    return 0;
};
0

Dziękuje bardzo :) w razie problemów będę się kontaktował :D Jeszcze raz bardzo Dziękuje :)

0
twonek napisał(a):

std::sort z własnym komparatorem

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

struct Ksiazka 
{
    string tytul;
    string autor;
    int numer_biblioteczny;
    string wydawnictwo;
    
    Ksiazka(const string& t, const string& a, int nr, const string& w)
    	: tytul(t), autor(a), numer_biblioteczny(nr), wydawnictwo(w)
	{}
};

struct comparator
{
	int crit;
	comparator(int crit) : crit(crit) {}
	bool operator()(const Ksiazka& left, const Ksiazka& right)
	{
		if (crit == 0)
			return left.tytul < right.tytul;
		else
			return left.numer_biblioteczny < right.numer_biblioteczny;
	}
};

int main(int argc, char** argv)
{
	vector<Ksiazka> books = { Ksiazka("Tytul_P", "Nieznany", 3, "W"),
							  Ksiazka("Tytul_S", "Zmarly", 2, "Z"),
							  Ksiazka("Tytul_A", "Znany", 5, "I") };
	comparator byTitle(0);
	sort(begin(books), end(books), byTitle);
	for (auto&& b : books)
		cout << b.tytul << " " << b.autor << " " << b.numer_biblioteczny << " " << b.wydawnictwo << endl;
	cout << endl;
	
	comparator byNumber(1);
	sort(begin(books), end(books), byNumber);
	for (auto&& b : books)
		cout << b.tytul << " " << b.autor << " " << b.numer_biblioteczny << " " << b.wydawnictwo << endl;
	
    return 0;
};

Nie wiem czemu ale wyrzuca mi taki błąd
[Error] in C++98 'books' must be initialized by constructor, not by '{...}'
przy linijce
Ksiazka("Tytul_A", "Znany", 5, "I") };

0

Czy kompilujesz jako C++11 ?

0

Tak. Musiałem c++11 dopisać do programu.
A jeśli chodzi o sortowanie książek względem nr tytułu to mam ją dopisać do funkcji Case 3 tak jak mam w Menu czy nie koniecznie?

0
beatman55 napisał(a):

Tak. Musiałem c++11 dopisać do programu.

Przecież sam kompilator mówi, że poświadczasz nieprawdę:
[Error] in C++98 'books' must be initialized by constructor, not by '{...}'

A jeśli chodzi o sortowanie książek względem nr tytułu to mam ją dopisać do funkcji Case 3 tak jak mam w Menu czy nie koniecznie?
Pokazałem jak można sortować wg różnych kryteriów, a jak i gdzie to wykorzystasz to już musisz sam pomyśleć.

0

Przepraszam ale mówiąc że "dopisałem" miałem na myśli to że dopisałem ale dokładnie wtedy gdy użytkownik **_13th_Dragon **zapytał czy kompiluje jako C++11. A post wstawiony był zanim dopisałem do programu C++11. Dziękuje za podpowiedzi co do programu :) Pozdrawiam :)

0

Witam Wszystkich :). Okazało się że mój program znowu ma jakieś problemy. Kod wygląda teraz tak:

#include <iostream>
#include <string>
#include<fstream>
#include<cstdlib>
using namespace std;

struct Ksiazki
{
string imie;
string nazwisko;
string Tytul;
string wydawnictwo;
int numer_biblioteczny;
};
int main (int argc, char** argv)

{
	cout<<"============KSIAZKI=============\n\n";
	cout<<"=============BAZA===============\n\n";
	cout<<"============DANYCH==============\n\n";
	
int znak;
	argv[1]="baza.txt";  ///przykładowa nazwa bazy
	
do
    {  ////klamra otwierajaca funkcja DO
	
	cout<<" 1.Ilosc wczytywanych ksiazek    wcisnij-1\n\n";
	cout<<" 2.Sortowanie   (nr tytulu)      wcisnij-2\n\n";
	cout<<" 3.Utworz baze danych (plik)     wcisnij-3\n\n";
	cout<<" 4.Wczytaj z pliku i zapisz      wcisnij-4\n\n";
	cout<<"=================================\n\n";
	cout<<" 5.Wyjdz z programu              wcisnij-0\n\n";
	cin>>znak;
	
switch (znak)
    {         //// klamra otwierajaca funkcja SWITCH
	case 1:
	{        //// klamra otwierajaca funkcja CASE 1
	int N;
	cout<< "Ile Ksiazek Chcesz Wczytac??\n";
	cin>> N;
	
	
	cout<<"Podaj Pozycje Ksiazki\n";
	cin>>N;
	break;	
		
	}       //// klamra zamykajaca funkcje CASE 1
	
	case 3:
	{      //// klamra otwierajaca funkcje CASE 3
	cout<<"Podaj imie autora :\n";
	cin>> imie;
	cout<<"Podaj nazwisko autora:\n";
	cin>> nazwisko;
	cout<<"Podaj Tytul:\n";
	cin>> Tytul;
	cout<<"Podaj wydawnictwo :\n";
	cin>> wydawnictwo;
	cout<<"Podaj numer_biblioteczny\n";
	cin>> numer_biblioteczny;
	
	fstream plik;
	plik.open("baza danych ksiazek.txt",ios::out|ios::app );
	plik<<imie<<endl;
	plik<<nazwisko<<endl;
	plik<<Tytul<<endl;
	plik<<wydawnictwo<<endl;
	plik<<numer_biblioteczny<<endl;
	
	plik.close();	
	break;	
	}        //// klamra zamykajaca funkcje CASE 3
	
		
	case 4:
	{       //// klamra otwirająca funkcje CASE 4
	fstream plik;
	plik.open("baza danych ksiazek.txt",ios::in);
	if (plik.good()==false)
	{
	cout<<"plik nie istnieje!!!";
	exit(0);
	}
	string linia;
	int nr_linii=1;
	while(getline(plik,linia))
	{
	switch(nr_linii)
	{   /// klamra otwierająca SWITCH (nr_linii)
	case 1:imie=linia;  break;
	case 2:nazwisko=linia; break;
	case 3:Tytul=linia; break;
	case 4:wydawnictwo=linia; break;
	case 5:numer_biblioteczny=atoi(linia.c_str()); break;
	}   /// klamra zamykająca SWITCH (nr_linii)
	
	nr_linii++;
	}
	plik.close();
	
	
	cout<<imie<<endl;
	cout<<nazwisko<<endl;
	cout<<Tytul<<endl;
	cout<<wydawnictwo<<endl;
	cout<<numer_biblioteczny<<endl;
		
		
	break;	
	}      //// klamra zamykajaca funkcje CASE 4
	
	
	
    }       //// klamra zamykajaca funkcja SWITCH

	
	
	
	
	
}     //// klamra zamykajaca funkcja D0
while(znak!=0);
system ("pause");
	return 0;
	
};

Program pokazuje mi błąd w CASE 3 w linijce cin>>imie;
Nie mogę dojść o co chodzi. Proszę o pomoc :)

0

Po case'ach nie powinno być klamer:

 

switch (costam)
{
    case1:
        //jakis kod
        break;
    case2:
        //jakis kod
        break;
//i tak dalej...
}

0
Tomek_z_W11 napisał(a):

Po case'ach nie powinno być klamer: ...

Jakiś "nazi programmer"?

Może być nawet tak:

switch (costam)
  {
   case1:
     {
        { // od tak klamry w środku kodu
           {
            //jakis kod
           }
         break;
        }
     }
   case2:
        //jakis kod
   break;
//i tak dalej...
  }
beatman55 napisał(a):

Program pokazuje mi błąd w CASE 3 w linijce cin>>imie;
Nie mogę dojść o co chodzi. Proszę o pomoc :)
Przecież kompilator wyraźnie mówi że imie nie jest zadeklarowane.

0

Heh, nie miałem pojęcia

To spróbuj stworzyć obiekt struktury Ksiazki i używać zmiennych tego obiektu, zmiennych, które przechowuje struktura Ksiazki

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