Skocz do zawartości
nugger

[c] Qsort //grrr

Rekomendowane odpowiedzi

Co tu jest nie tak? Leb mi juz peka, pisze caly dzien - zostal qsort i za diabla nie moge go zrobic ....

 

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <stdlib.h>

#include <ctype.h> // toupper

 

#define MAX 30 // Maksymalna liczba wpisow w bazie danych

#define INPUT 4 // Maksymalna dlugosc wprowadzanego indeksu

 

 

typedef struct //Definicja typu strukturalnego telefony

{

char personalia[50];

char adres[50];

char telefon[20];

} telefony;

 

void potwierdzenie(void); // Wyswietla komunikat koncowy

int wszystkie_wpisy(void); // Pokazuje wszystkie wpisy w bazie

int dane_osoby(void); // Prezentuje dany wpis

int szukaj_wpisu(void); // Przeszukuje baze

int dodaj_wpis(void); // Dodaje nowy wpis

int usun_wpis(void); // Usuwa wpis

int zachowaj_baze(void); // Zapisuje baze danych do pliku

int wczytaj_baze(void); // Laduje baze z pliku

int sortuj(const void*arg1, const void*arg2); // Sortuje baze

 

 

/////globalne

 

telefony baza[MAX]; /* Zmienna strukturalna baza */

int numer = 0; /* Licznik wszystkich wpisow */

 

////uzwyane funkcje

 

void potwierdzenie(void)

{

 

printf("\n Nacisnij ENTER, aby kontynuowac...");

while (getchar() != '\n');

 

}

 

//Glowna funkcja programu

 

int main(void)

{

char wybor;

 

do

{

printf("\n KSIAZKA TELEFONICZNA \n\n");

 

printf(" [1] Wyswietl wszystkie wpisy w bazie \n\n"

" [2] Przedstaw informacje o osobie \n\n"

" [3] Znajdz wpis w bazie danych \n\n"

" [4] Dodaj wpis do bazy danych \n\n"

" [5] Usun wpis z bazy \n\n"

" [6] Zachowaj baze danych \n\n"

" [7] Zaladuj baze danych \n\n"

" [8] Sortowanie bazy danych \n\n"

" [9] Informacje o programie \n\n"

" [0] Wyjscie \n\n");

 

//Wybor

printf(" Twoj wybor: ");

wybor = getchar();

fflush(stdin); /* czysci bufor klawiatury */

clrscr();

 

 

//idzie ta funkcja ktora wybrana zostala

switch (wybor)

{

case '1' : wszystkie_wpisy();

break;

case '2' : dane_osoby();

break;

case '3' : szukaj_wpisu();

break;

case '4' : dodaj_wpis();

break;

case '5' : usun_wpis();

break;

case '6' : zachowaj_baze();

break;

case '7' : wczytaj_baze();

break;

case '8' : sortuj();

break;

 

 

case '0' :

break;

default :

{

printf("\n Nie ma takiej opcji! \n");

potwierdzenie();

}

break;

}

} while (wybor != '0');

 

printf("\n ZAMYKANIE PROGRAMU \n");

potwierdzenie();

return EXIT_SUCCESS;

 

}

 

//wyswietla wszystkie wpisy bazy

 

int wszystkie_wpisy(void)

{

int i;

 

printf("\n WYKAZ WSZYSTKICH WPISOW \n");

 

if (numer == 0) /* Nie ma zadnego wpisu! */

{

printf("\n Baza danych jest pusta"

" lub nie zostala zaladowana z pliku! \n");

potwierdzenie();

return EXIT_FAILURE;

}

 

 

for (i = 0; i < numer; i++)

{

printf("\n %d %s", i+1, baza.personalia);

 

/* Zatrzymaj program po zapelnieniu ekranu */

if ((i + 1)%10 == 0)

{

potwierdzenie();

// wyczysc_ekran();

}

}

printf("\n Koniec danych \n");

potwierdzenie();

return EXIT_SUCCESS;

 

}

 

//wyswietla info o konkrtnym, wybranym indexie

 

int dane_osoby(void)

{

char wpis[iNPUT]; /* Tekst wpisany przez uzytkownika */

int index; /* Wpis do prezentacji */

 

printf("\n PREZENTOWANIE DANYCH \n");

 

printf("\n Wprowadz indeks osoby: ");

index = atoi(gets(wpis)); /* Konwersja typu danych */

 

if (index < 1 || index > numer) /* Nie ma takiego indeksu! */

{

printf("\n Indeks nie jest poprawny! \n");

potwierdzenie();

return EXIT_FAILURE;

}

 

printf("\n Nazwisko i imie: %s", baza[index - 1].personalia);

printf("\n Miejscowosc: %s", baza[index - 1].adres);

printf("\n Telefon: %s", baza[index - 1].telefon);

 

potwierdzenie();

return EXIT_SUCCESS;

 

}

 

/* wyszukanie informacje w bazie -

podanego nazwiska lub miejscowosci */

 

 

int szukaj_wpisu(void)

{

char szukana[30];

int index, k = 0; //zm. pomoc.

 

printf("\n WYSZUKIWANIE INFORMACJI W BAZIE \n");

 

printf("\n Wprowadz nazwisko lub miejscowosc do wyszukania: ");

gets(szukana);

 

for (index = 0; index < numer; index++)

{

//informacji o wyszukanych wpisach

if (strstr(baza[index].personalia, szukana)

|| strstr(baza[index].adres, szukana))

{

printf("\n Nazwisko i imie: %s", baza[index].personalia);

printf("\n Miejscowosc: %s", baza[index].adres);

printf("\n Telefon: %s", baza[index].telefon);

printf("\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");

k++;

/* Zatrzymaj program po zapelnieniu ekranu */

if (k%3 == 0)

{

potwierdzenie();

clrscr();

}

}

}

if (k == 0) // Brak rezultatow

{

printf("\n Nie znaleziono zadnego wpisu! \n");

potwierdzenie();

return EXIT_FAILURE;

}

 

printf("\n To wszystkie wpisy jakie znaleziono! \n");

potwierdzenie();

return EXIT_SUCCESS;

 

}

 

// dodawanie nowego wpisu do bazy danych

 

int dodaj_wpis(void)

 

{

printf("\n DODAWANIE WPISU DO BAZY DANYCH \n");

 

if (numer >= MAX) // Baza danych jest pelna - MAX zdef na pocz

{

printf("\n Baza danych jest pelna! \n");

potwierdzenie();

return EXIT_FAILURE;

}

 

// Pobiera dane

//Sprawdza czy wpisy sie zmieszcza

do

{

printf("\n Nazwisko i imie: ");

gets(baza[numer].personalia);

if (strlen(baza[numer].personalia) > 4

printf("\n Mozna wpisac maksymalnie 48 znakow! \n");

} while (strlen(baza[numer].personalia) > 4;

 

do

{

printf("\n Miejscowosc: ");

gets(baza[numer].adres);

if (strlen(baza[numer].adres) > 4 //strlen liczy dlugosc stringa

printf("\n Mozna wpisac maksymalnie 48 znakow! \n");

} while (strlen(baza[numer].adres) > 4;

 

do

{

printf("\n Telefon: ");

gets(baza[numer].telefon);

if (strlen(baza[numer].telefon) > 1

printf("\n Mozna wpisac maksymalnie 18 znakow! \n");

} while (strlen(baza[numer].telefon) > 1;

 

//Gdy nic nie wpisano, lub za malo

if ((strlen(baza[numer].telefon) == 0)

|| (strlen(baza[numer].personalia) == 0))

{

printf("\n Wpis nie zostal dodany do bazy danych!"

"\n Musi zostac podane nazwisko i numer telefonu! \n");

potwierdzenie();

return EXIT_FAILURE;

}

 

// Do kazdego pola dodaj znacznik konca lini, dla ladnosci 

strcat(baza[numer].personalia, "\n");

strcat(baza[numer].adres, "\n");

strcat(baza[numer].telefon, "\n");

 

numer++; // Zwieksza ilosc wpisaow w bazie

printf("\n Wpis zostal dodany do bazy danych! \n");

potwierdzenie();

return EXIT_SUCCESS;

 

}

 

// usuwanie wpisu z bazy danych

 

 

int usun_wpis(void)

{

char wpis[iNPUT]; // wpisany txt

int kasuj_nr; // Wpis do usuniecia

 

printf("\n USUWANIE WPISU Z BAZY \n");

 

printf("\n Podaj indeks wpisu do usuniecia: ");

kasuj_nr = atoi(gets(wpis)); /* Konwersja typu danych z helpa  */

 

/* Gdy nie ma takiego wpisu! */

if ((kasuj_nr < 1) || (kasuj_nr > numer))

{

printf("\n Nie ma w bazie wpisu o takim indeksie! \n");

potwierdzenie();

return EXIT_FAILURE;

}

 

// Usuwanie - przeindeksowanie bazy

while ((kasuj_nr - 1) < numer)

{

baza[kasuj_nr - 1] = baza[kasuj_nr];

kasuj_nr++;

}

//zmniejsz iloscic wpisow

numer--;

printf("\n Wpis zostal usuniety \n");

potwierdzenie();

return EXIT_SUCCESS;

 

}

 

// zapisywanie bazy danych do pliku baza.txt *

 

int zachowaj_baze(void)

{

FILE *PlikBazy;

int i;

char znak;

 

printf("\n ZAPISYWANIE DANYCH DO PLIKU baza.txt \n");

 

printf("\n Jestes pewien? [T]ak/[N]ie ");

znak = getchar();

fflush(stdin);

if (toupper(znak) != 'T')

{

printf("\n Baza danych nie zostala zapisana \n");

potwierdzenie();

return EXIT_FAILURE;

}

 

PlikBazy = fopen("baza.txt", "w" ); /* Otworz do pisania */

 

/* Nie mozna otworzyc pliku! */

if (PlikBazy == NULL)

{

printf("\n Nie mozna otworzyc pliku! \n");

potwierdzenie();

return EXIT_FAILURE;

}

 

/* Zapisz aktualna liczbe osob w bazie */

fprintf(PlikBazy, "%d\n", numer);

 

/* Zachowaj reszte danych */

for (i = 0; i < numer; i++)

{

fputs(baza.personalia, PlikBazy);

fputs(baza.adres, PlikBazy);

fputs(baza.telefon, PlikBazy);

}

 

printf("\n Baza danych zostala zachowana! \n");

potwierdzenie();

return EXIT_SUCCESS;

 

}

 

// wczytywanie bazy danych z pliku baza.txt

 

int wczytaj_baze(void)

{

FILE *PlikBazy;

int i;

 

printf("\n WCZYTYWANIE DANYCH Z PLIKU BAZA.TXT \n");

 

//otworz plik

PlikBazy = fopen("BAZA.TXT", "r");

 

//nie mozna otworzyc pliky

if (PlikBazy == NULL)

{

printf("\n Nie mozna otworzy pliku bazy danych! \n");

potwierdzenie();

return EXIT_FAILURE;

}

 

// Czytaj z pliku

fscanf(PlikBazy, "%d\n", &numer);

if (numer > MAX)

{

printf("\n W bazie danych jest za duzo wpisow! \n");

potwierdzenie();

return EXIT_FAILURE;

}

 

/* Czytaj reszte danych z pliku */

for (i = 0; i < numer; i++)

{

fgets(baza.personalia, 50, PlikBazy);

fgets(baza.adres, 50, PlikBazy);

fgets(baza.telefon, 20, PlikBazy);

}

 

printf("\n Baza danych zostala zaladowana! \n");

potwierdzenie();

return EXIT_SUCCESS;

 

}

//sortowanie - grrrrrrrrr

 

int sortuj (const void*arg1, const void*arg2)

{

 

 

 

 

qsort(baza,30,sizeof(telefony),sortuj);

}

 

int sortuj (const void *arg1, const void *arg2);

{

telefony *Arg1=(telefony*)arg1;

telefony *Arg2=(telefony*)arg2;

return(Arg2->personalia - Arg1->personalia);

}

 

}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...