Skocz do zawartości

szydlak

Użytkownik
  • Postów

    2
  • Dołączył

  • Ostatnia wizyta

Osiągnięcia szydlak

Newbie

Newbie (1/14)

0

Reputacja

  1. szydlak

    Pomocy Sortowanie

    pomożcie bo nie moge sobie poradzic z sortowaniem danych, maja byc 2 sortowania do wyboru, troszke zacząłem ale dalej nie potrafie, prosze tylko o 2 algorytmy #include <stdio.h> /* Standardowe funkcje wejscia/wyjscia */#include <string.h> /* Funkcje przetwarzania tekstu */#include <stdlib.h> /* Makrodefinicje EXIT_SUCCESS i EXIT_FAILURE, funkcja system */#include <ctype.h> #include <conio.h> #ifndef EXIT_SUCCESS#define EXIT_SUCCESS 0#endif#ifndef EXIT_FAILURE#define EXIT_FAILURE 1#endif#define MAX 30 /* Maksymalna liczba wpisow w bazie danych */#define INPUT 4 /* Maksymalna dlugosc wprowadzanego indeksu */#define FALSE 0#define TRUE 1 #define DOS typedef short int BOOL; typedef struct /* Definicja typu strukturalnego telefony */{ char Nazwisko[50]; char Imie[50]; // imie, char adres[50]; /* Miejscowosc */ char telefon[20]; /* Numer telefonu */} telefony;int wszystkie_wpisy(void);void /*inline*/ potwierdzenie(void);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 do pamieci */void sortuj_baze(void); /* Sortuje baze wg pola personalia */void info(void); telefony baza[MAX]; /* Zmienna strukturalna baza */int numer = 0; /* Licznik wszystkich wpisow */void /*inline*/ potwierdzenie(void){#ifdef DOS printf("\n "); system("pause");#else printf("\n Nacisnij ENTER, aby kontynuowac..."); while (getchar() != '\n');#endif} int main(void){char wybor; do /* Petla do-while musi wykonac sie przynajmniej raz */ { /* Menu glowne programu */ clrscr(); 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"); /* Pobierz dane od uzytkownika */ printf(" Twoj wybor: "); wybor = getchar(); fflush(stdin); /* Wyczysc bufor klawiatury */ clrscr(); /* Wywolanie funkcji w zaleznosci od wyboru uzytkownika */ 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_baze(); break; case '9' : info(); 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;} int wszystkie_wpisy(void){int i; /* Zmienna pomocnicza - indeks petli */ 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; } /* Wyswietl wszystkie osoby wraz z numerami ich indeksow */ for (i = 0; i < numer; i++) { printf("\n %d %s ", i+1, baza[i].Nazwisko); printf(" %s ", baza[i].Imie); /* Zatrzymaj program po zapelnieniu ekranu */ if ((i + 1)%10 == 0) { potwierdzenie(); clrscr; } } printf("\n Koniec danych \n"); potwierdzenie(); return EXIT_SUCCESS;} 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; } /* Drukuj dane na ekranie */ printf("\n Nazwisko : %s", baza[index - 1].Nazwisko); printf("\n Imie: %s", baza[index - 1].Imie); printf("\n Miejscowosc: %s", baza[index - 1].adres); printf("\n Telefon: %s", baza[index - 1].telefon); potwierdzenie(); return EXIT_SUCCESS;} int szukaj_wpisu(void){char szukana[30]; /* Szukane nazwisko lub miejscowosc */int index, k = 0; /* Zmienne pomocnicze */ printf("\n WYSZUKIWANIE INFORMACJI W BAZIE \n"); printf("\n Wprowadz nazwisko lub miejscowosc do wyszukania: "); gets(szukana); clrscr(); for (index = 0; index < numer; index++) { /* Wyswietlanie informacji o wyszukanych wpisach */ if (strstr(baza[index].Nazwisko, szukana) || strstr(baza[index].adres, szukana)) { printf("\n Nazwisko i imie: %s", baza[index].Nazwisko); printf("\n Nazwisko i imie: %s", baza[index].Imie); 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;}int dodaj_wpis(void){ printf("\n DODAWANIE WPISU DO BAZY DANYCH \n"); if (numer >= MAX) /* Baza danych jest pelna! */ { printf("\n Baza danych jest pelna! \n"); potwierdzenie(); return EXIT_FAILURE; } /* Pobierz od uzytkownika wszystkie informacje o osobie */ /* Sprawdz czy wpisy nie sa za dlugie */ do { printf("\n Nazwisko: "); gets(baza[numer].Nazwisko); if (strlen(baza[numer].Nazwisko) > 48) printf("\n Mozna wpisac maksymalnie 48 znakow! \n"); } while (strlen(baza[numer].Nazwisko) > 48); do { printf("\n Imie: "); gets(baza[numer].Imie); if (strlen(baza[numer].Imie) > 48) printf("\n Mozna wpisac maksymalnie 48 znakow! \n"); } while (strlen(baza[numer].Imie) > 48); do { printf("\n Miejscowosc: "); gets(baza[numer].adres); if (strlen(baza[numer].adres) > 48) printf("\n Mozna wpisac maksymalnie 48 znakow! \n"); } while (strlen(baza[numer].adres) > 48); do { printf("\n Telefon: "); gets(baza[numer].telefon); if (strlen(baza[numer].telefon) > 18) printf("\n Mozna wpisac maksymalnie 18 znakow! \n"); } while (strlen(baza[numer].telefon) > 18); /* Nic nie wpisano w polu Nazwisko i imie lub Telefon */ if ((strlen(baza[numer].telefon) == 0) || (strlen(baza[numer].Nazwisko) == 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 */ strcat(baza[numer].Nazwisko, "\n"); strcat(baza[numer].Imie, "\n"); strcat(baza[numer].adres, "\n"); strcat(baza[numer].telefon, "\n"); numer++; /* Zwieksz liczbe wpisow o jeden */ printf("\n Wpis zostal dodany do bazy danych! \n"); potwierdzenie(); return EXIT_SUCCESS;} int usun_wpis(void){char wpis[INPUT]; /* Tekst wpisany przez uzytkownika */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 */ /* 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++; } numer--; printf("\n Wpis zostal usuniety \n"); potwierdzenie(); return EXIT_SUCCESS;} int zachowaj_baze(void){FILE *PlikBazy; /* Wskaznik do pliku bazy */int i; /* Zmienna pomocnicza */char znak; printf("\n ZAPISYWANIE DANYCH DO PLIKU telefony.dbs \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("telefony.dbs", "w" ); /* Otworz do pisania */ /* Nie mozna otworzyc pliku telefony.dbs! */ if (PlikBazy == NULL) { printf("\n Nie mozna otworzyc pliku bazy danych! \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[i].Nazwisko, PlikBazy); fputs(baza[i].Imie, PlikBazy); fputs(baza[i].adres, PlikBazy); fputs(baza[i].telefon, PlikBazy); } printf("\n Baza danych zostala zachowana! \n"); potwierdzenie(); return EXIT_SUCCESS;} int wczytaj_baze(void){FILE *PlikBazy; /* Wskaznik do pliku bazy */int i; /* Zmienna pomocnicza */ printf("\n WCZYTYWANIE DANYCH Z PLIKU telefony.dbs \n"); /* Otworz plik tylko do odczytu */ PlikBazy = fopen("telefony.dbs", "r"); /* Nie mozna otworzyc pliku telefony.dbs!*/ if (PlikBazy == NULL) { printf("\n Nie mozna otworzy pliku bazy danych! \n"); potwierdzenie(); return EXIT_FAILURE; } /* Czytaj z pliku aktualna liczbe wpisow w bazie */ 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[i].Nazwisko, 50, PlikBazy); fgets(baza[i].Imie, 50, PlikBazy); fgets(baza[i].adres, 50, PlikBazy); fgets(baza[i].telefon, 20, PlikBazy); } printf("\n Baza danych zostala zaladowana! \n"); potwierdzenie(); return EXIT_SUCCESS;} void sortuj_baze(void){ char tab[20];int j,temp1,temp2,temp,i,wybor; printf("\n SORTOWANIE BAZY DANYCH \n"); printf(" [1]-sortowanie sekwencyjne [2]-sortowanie babelkowe\n"); printf(" twoj wybor.."); scanf("%d", &wybor); switch (wybor) { case 1: { for (i=0; i<numer-1; i++) { for (j=0; j<numer-2; j++) { } }} void info(void){ printf("\n INFORMACJE O PROGRAMIE \n"); printf("\n Nazwa: Ksiazka telefoniczna wersja ANSI-C 0.8d" "\n Autor: Grzegorz Szydlo szydlak18@interia.pl" "\n Opis: Program umozliwia wprowadzanie, usuwanie," "\n wyszukiwanie, sortowanie oraz przechowywanie" "\n w pliku danych o numerach telefonicznych" "\n" "\n Licencja: public domain \n"); potwierdzenie();}
  2. szydlak

    Baza Danych C

    Czy ktoś pomoże mi przerobic program, tak aby nie było w nim zmiennych globalnych, a konkretnie chodzi o strukture zeby zrobic dynamiczna albo cos takiego to jest na zaliczenie a zupełnie nie wiem jak to zrobic Jak ktos sie podejmie tego zadania to niech poda maila to prześle program z góry dziękuje to tylko część programu bo jest dość długi typedef struct /* Definicja typu strukturalnego telefony */{ char Nazwisko[50]; char Imie[50]; // imie, char adres[50]; /* Miejscowosc */ char telefon[20]; /* Numer telefonu */} telefony;int wszystkie_wpisy(void);void /*inline*/ wyczysc_ekran(void);void /*inline*/ potwierdzenie(void);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 do pamieci */void sortuj_baze(void); /* Sortuje baze wg pola personalia */void info(void); telefony baza[MAX]; /* Zmienna strukturalna baza */int numer = 0; /* Licznik wszystkich wpisow */ void /*inline*/ wyczysc_ekran(void){#ifdef DOS system("cls");#elif UNIX system("clear");#else #define ROWS 40 for (int i = 0; i < ROWS; i++) printf("\n"); /* Wyswietl puste linie */ #undef ROWS#endif}void /*inline*/ potwierdzenie(void){#ifdef DOS printf("\n "); system("pause");#else printf("\n Nacisnij ENTER, aby kontynuowac..."); while (getchar() != '\n');#endif} int main(void){char wybor; do /* Petla do-while musi wykonac sie przynajmniej raz */ { /* Menu glowne programu */ wyczysc_ekran(); 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"); /* Pobierz dane od uzytkownika */ printf(" Twoj wybor: "); wybor = getchar(); fflush(stdin); /* Wyczysc bufor klawiatury */ wyczysc_ekran(); /* Wywolanie funkcji w zaleznosci od wyboru uzytkownika */ 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_baze(); break; case '9' : info(); 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; }
×
×
  • Dodaj nową pozycję...