Witajcie koledzy i koleżanki programiści,
Od pewnego czasu piszę bazę danych na zaliczenie z przedmiotu (algorytmy i struktury danych 1 rok studiów).
Moim problemem jest funkcja sortująca alfabetycznie ( a raczej nie sortująca :D)
Nie mam już pomysłów jak to naprawić. Przy kodzie pomagali mi koledzy z roku bo jako aspirujący grafik nie "czuje" programowania w Cpp.
Z tego oto powodu proszę was o pomoc :) Dodam że sprawa jest nagląca bo do jutra jest termin, a muszę narysować schematy blokowe :)
#include <iostream>
#include <fstream>
#include <conio.h>
#include <cstdlib>
using namespace std;
struct poz
{
char iautor[30];
char nautor[30];
char tytul[30];
char wydawnictwo[30];
int pozycja;
int rok;
};
void wyswietl(poz baza[100], int i, int &licznik);
void dodaj(poz baza[100],int i, int &licznik);
void zapisz(poz baza[100],int i,int &licznik);
void wczytaj(poz baza[100],int i,int &licznik);
void szukaj(poz baza[100],int i,int&licznik,char t);
void sortuj_imie(poz *tab[100], int n);
int main()
{ int licznik=0;
int i;
char z;
poz baza[100];
wczytaj(baza,i,licznik);
do{
system("cls");
cout << "Wypozyczalnia ksiazek: " << endl;
cout << "1-Dodaj pozycje " << endl;
cout << "2-Wyswietl pozycje" << endl;
cout << "3-Wyszukaj" << endl;
cout << "4-Zapisz do pliku"<<endl;
cout << "5-Usun pozycje"<<endl;//jeszcze musze napisać
cout << "6-Wyjscie"<<endl;
cout << "7-sortuj po imieniu autora"<<endl;
cin>>z;
switch(z)
{
case '1' :
{
cout<<"Dodawanie pozycji"<<endl;
dodaj(baza,i,licznik);
break;
}
case '2' :
{
wyswietl(baza,i,licznik);
getch();
break;
}
case '3' :
{
system("cls");
char o;
cout<<"Podaj wedlog czego chcesz szukac:"<<endl;
cout<<"0-Imie autora"<<endl;
cout<<"1-Nazwisko autora"<<endl;
cout<<"2-Rok"<<endl;
cout<<"3-Tytuł"<<endl;
cout<<"4-Pozycji"<<endl;
cout<<"5-wydawnictwo"<<endl;
cout<<"q-Powrot"<<endl;
cin>>o;
szukaj(baza,i,licznik,o);
break;
}
case '4' :
{
zapisz(baza,i,licznik);
cout<<"Baza danych zostala poprawnie zapisana"<<endl;
cout<<"Nacisnij dowolny klawisz aby przejsc dalej"<<endl;
getch();
break;
}
case '5' :
{
break;
}
case '7' :
{
sortuj_imie((baza[100]),1000);
break;
}
}
} while (z!='6');
return 0;
}
//=====================dodwanie=
void dodaj(poz baza[100],int i, int &licznik)
{
i=licznik;
cout<<i<<endl;
cout<<"Podaj imie autora: ";
cin>>baza[i].iautor;
cout<<endl;
cout<<"Podaj nazwisko autora: ";
cin>>baza[i].nautor;
cout<<endl;
cout<<"podaj tytul: ";
cin>>baza[i].tytul;
cout<<endl;
cout<<"podaj rok: ";
cin>>baza[i].rok;
cout<<endl;
cout<<"podaj wydawnictwo: ";
cin>>baza[i].wydawnictwo;
cout<<endl;
//cout<<"podaj pozycje: ";
baza[i].pozycja=licznik;
cout<<endl;
licznik++;
}
//============wyswietlanie==========
void wyswietl(poz baza[100], int i, int &licznik)
{
system("cls");
for (int i=0;i<licznik;i++)
{
cout<<endl;
cout<<"pozycja nr: "<<i+1<<endl;
cout<<"Imie autora: "<<baza[i].iautor<<endl;
cout<<"Nazwisko autora: "<<baza[i].nautor<<endl;
cout<<"Tytul: "<<baza[i].tytul<<endl;
cout<<"Rok: "<<baza[i].rok<<endl;
cout<<"Wydawnictwo: "<<baza[i].wydawnictwo<<endl;
}
cout<<"Nacisnij dowolny klawisz aby przejsc dalej"<<endl;
}
//===============zapisdo pliku
void zapisz(poz baza[100],int i,int &licznik)
{
{
ofstream mojplik;
mojplik.open("dane.txt");
for (int i=0;i<licznik;i++)
{
mojplik<<baza[i].iautor<<endl;
mojplik<<baza[i].nautor<<endl;
mojplik<<baza[i].tytul<<endl;
mojplik<<baza[i].rok<<endl;
mojplik<<baza[i].pozycja<<endl;
mojplik<<baza[i].wydawnictwo<<endl;
}
mojplik.close();
}
}
//==============wczytanie z pliku=
void wczytaj(poz baza[100],int i,int &licznik)
{
ifstream mojplik("dane.txt");
int g=0;
for(int i=0; mojplik.good(); ++i,g++)
{
mojplik >> baza[i].iautor >> baza[i].nautor >> baza[i].tytul >> baza[i].rok >> baza[i].pozycja >> baza[i].wydawnictwo;
}
g-=1;
if(g>=0)
{
licznik=licznik+g;
}
}
//===============szukaj========================================================================
void szukaj(poz baza[100],int i,int&licznik,char t)
{
system("cls");
switch(t)
{
case '0' :
{
string sam;
cout<<"Podaj imie autora do wyszukania:"<<endl;
cin>>sam;
cout<<endl;
for(int i=0;i<licznik;i++)
{
if (baza[i].iautor==sam)
{
cout<<"imie autora: "<<baza[i].iautor<<endl;
cout<<"nazwisko autora: "<<baza[i].nautor<<endl;
cout<<"tytul: "<<baza[i].tytul<<endl;
cout<<"rok: "<<baza[i].rok<<endl;
cout<<"pozycja: "<<baza[i].pozycja<<endl;
cout<<"wydawnictwo: "<<baza[i].wydawnictwo<<endl;
}
}
cout<<"Nacisnij dowolny klawisz aby przejsc dalej"<<endl;
getch();
break;
}
case '1' :
{
string sam;
cout<<"Podaj nazwisko autora do wyszukania:"<<endl;
cin>>sam;
cout<<endl;
for(int i=0;i<licznik;i++)
{
if (baza[i].nautor==sam)
{
cout<<"imie autora: "<<baza[i].iautor<<endl;
cout<<"nazwisko autora: "<<baza[i].nautor<<endl;
cout<<"tytul: "<<baza[i].tytul<<endl;
cout<<"rok: "<<baza[i].rok<<endl;
cout<<"pozycja: "<<baza[i].pozycja<<endl;
cout<<"wydawnictwo: "<<baza[i].wydawnictwo<<endl;
}
}
cout<<"Nacisnij dowolny klawisz aby przejsc dalej"<<endl;
getch();
break;
}
case '2' :
{
int sam;
cout<<"Podaj rok do wyszukania:"<<endl;
cin>>sam;
cout<<endl;
for(int i=0;i<licznik;i++)
{
if (baza[i].rok==sam)
{
cout<<"imie autora: "<<baza[i].iautor<<endl;
cout<<"nazwisko autora: "<<baza[i].nautor<<endl;
cout<<"tytul: "<<baza[i].tytul<<endl;
cout<<"rok: "<<baza[i].rok<<endl;
cout<<"pozycja: "<<baza[i].pozycja<<endl;
cout<<"wydawnictwo: "<<baza[i].wydawnictwo<<endl;
}
}
cout<<"Nacisnij dowolny klawisz aby przejsc dalej"<<endl;
getch();
break;
}
case '3':
{
string sam;
cout<<"Podaj tytul do wyszukania:"<<endl;
cin>>sam;
cout<<endl;
for(int i=0;i<licznik;i++)
{
if (baza[i].tytul==sam)
{
cout<<"imie autora: "<<baza[i].iautor<<endl;
cout<<"nazwisko autora: "<<baza[i].nautor<<endl;
cout<<"tytul: "<<baza[i].tytul<<endl;
cout<<"rok: "<<baza[i].rok<<endl;
cout<<"pozycja: "<<baza[i].pozycja<<endl;
cout<<"wydawnictwo: "<<baza[i].wydawnictwo<<endl;
}
}
cout<<"Nacisnij dowolny klawisz aby przejsc dalej"<<endl;
getch();
break;
}
case '5':
{
string sam;
cout<<"Podaj wydawnictwo do wyszukania:"<<endl;
cin>>sam;
cout<<endl;
for(int i=0;i<licznik;i++)
{
if (baza[i].wydawnictwo==sam)
{
cout<<"imie autora: "<<baza[i].iautor<<endl;
cout<<"nazwisko autora: "<<baza[i].nautor<<endl;
cout<<"tytul: "<<baza[i].tytul<<endl;
cout<<"rok: "<<baza[i].rok<<endl;
cout<<"pozycja: "<<baza[i].pozycja<<endl;
cout<<"wydawnictwo: "<<baza[i].wydawnictwo<<endl;
}
}
cout<<"Nacisnij dowolny klawisz aby przejsc dalej"<<endl;
getch();
break;
}
case '4' :
{
int sam;
cout<<"Podaj pozycje do wyszukania:"<<endl;
cin>>sam;
cout<<endl;
for(int i=0;i<licznik;i++)
{
if (baza[i].pozycja==sam)
{
cout<<"imie autora: "<<baza[i].iautor<<endl;
cout<<"nazwisko autora: "<<baza[i].nautor<<endl;
cout<<"tytul: "<<baza[i].tytul<<endl;
cout<<"rok: "<<baza[i].rok<<endl;
cout<<"pozycja: "<<baza[i].pozycja<<endl;
cout<<"wydawnictwo: "<<baza[i].wydawnictwo<<endl;
}
}
cout<<"Nacisnij dowolny klawisz aby przejsc dalej"<<endl;
getch();
break;
}
case 'q' : break;
}
}
//tu siedzi ten potwór!!!!
void sortuj_imie(poz *tab[100], int n) // wersja iteracyjna
{ int i, j;
int tmp;
for(i=1;i<n; i++)
for(j=n-1;j>=i; j=j-1)
if(tab[j-1]>tab[j])
{ // zamiana sąsiednich elementów
tmp=tab[i-1];
tab[i-1] = tab[i];
tab[i] = tmp;
}
}
}