nugger Napisano 11 Stycznia 2005 Zgłoś Napisano 11 Stycznia 2005 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); } } Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...
The_Structor Napisano 11 Stycznia 2005 Zgłoś Napisano 11 Stycznia 2005 Oto qsort napisany przeze mnie (nie mam czasu cyztac posta), a moze ci to pomoze: http://student.uci.agh.edu.pl/~jmachaj/pro...e-quicksort.php Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...
ayem Napisano 17 Stycznia 2005 Zgłoś Napisano 17 Stycznia 2005 nugger, nastepnym razem kod zrodlowy stawiaj w CODE a nie QUOTE, bez wciec to tego nie idzie czytac Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...