baza danych książek błąd

Odpowiedz Nowy wątek
2014-11-26 18:03
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 :)

edytowany 1x, ostatnio: beatman55, 2014-11-26 18:04

Pozostało 580 znaków

2014-11-26 18:08
2

Nazwa zmiennej nie może posiadać spacji.

Pozostało 580 znaków

2014-11-26 18:25
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

Pozostało 580 znaków

2014-11-26 18:47

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;
};

Pozostało 580 znaków

2014-11-26 19:13
0

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

Pozostało 580 znaków

2014-11-26 19:47
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") };

Pozostało 580 znaków

2014-11-26 20:00
0

Czy kompilujesz jako C++11 ?


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-11-26 20:28
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?

Pozostało 580 znaków

2014-11-26 20:47
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ć.

edytowany 1x, ostatnio: twonek, 2014-11-26 20:50

Pozostało 580 znaków

2014-11-26 21:14
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 :)

Pozostało 580 znaków

2014-11-30 14:25
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 :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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