Witam! Mam do wykonania bazę pacjentów, która będzie miała możliwość wyświetlania według rosnącej masy, wzrostu, wieku i alfabetycznie według nazwiska. Bazę zrobiłem. Jest możliwość zapisu i wczytania z pliku. Jednak nie umiem zrobić sortowania. Pomoże ktoś? Oto mój kod:
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
char imie[20];
char nazwisko[20];
int wiek;
int wzrost;
float masa;
}pacjent ;
void pobierz_dane (pacjent *p1, int i, int *dodaj_kolejnego_pacjenta )
{
i=i-1;
printf("\rPodaj imie pacjenta: \n");
scanf("%s", &p1[i].imie);
printf("Podaj nazwisko pacjenta: \n");
scanf("%s",&p1[i].nazwisko);
printf("Podaj wiek: \n");
scanf("%d",&p1[i].wiek);
printf("Podaj wzrost (w centymetrach): \n");
scanf("%d",&p1[i].wzrost);
printf("Podaj mase: \n");
scanf("%f",&p1[i].masa);
printf("Czy chcesz dodac kolejnego pacjenta? Jesli nie zapisz baze i wyswietl ja. [1/0]\n");
scanf("%d", dodaj_kolejnego_pacjenta);
}
void zapisywanie_do_pliku(pacjent *p1, int liczba_pacjentow)
{
FILE *zapisz;
zapisz=fopen("pacjenci.txt","wt");
int k;
for(k=0;k<liczba_pacjentow;k++)
{
fprintf(zapisz,"%s %s %d %d %.2f\n", p1[k].imie, p1[k].nazwisko, p1[k].wiek, p1[k].wzrost, p1[k].masa);
}
printf("\nZapisano!\n");
fclose(zapisz);
}
void wyswietlanie_bazy(pacjent *p1, int liczba_pacjentow)
{
int k;
for(k=0;k<liczba_pacjentow;k++)
{
printf("%s %s %d %d %.2f\n", p1[k].imie, p1[k].nazwisko, p1[k].wiek, p1[k].wzrost, p1[k].masa);
}
}
void wczytanie_bazy(pacjent *p1, int liczba_pacjentow)
{
FILE *wczytaj;
int k;
char zp;
wczytaj=fopen("pacjenci.txt", "r");
if(wczytaj==NULL)
printf("plik jest pusty, lub nie istnieje");
while(zp!=EOF)
{
zp=fgetc(wczytaj);
printf("%c", zp);
}
fclose(wczytaj);
}
int main ()
{
int rekord;
int baza_danych;
int dodaj_kolejnego_pacjenta=0;
pacjent *wsk;
int i=0;
int wybor;
int k=0;
int liczba_pacjentow=0;
int spr=1;
pacjent *p1;
wsk=(pacjent *)malloc(sizeof(pacjent));
int tablica[10];
while(1){
printf("\nBaza danych\n");
printf("\n[1] Dodaj pacjenta\n");
printf("[2] Wyswietlenie listy pacjentow\n");
printf("[3] Zapisz\n");
printf("[4] Wczytaj\n");
printf("[5] Wyswietlenie listy pacjentow wedlug rosnacej masy");
// printf("[6] Wyswietlenie listy pacjentow wedlug rosnacego wzrostu");
// printf("[7] Wyswietlenie listy pacjentow wedlug rosnacego wieku");
// printf("[8] Wyswietlenie listy pacjentow w kolejnosci alfabetycznej");
printf("[9] Wyjdz z programu\n ");
scanf("%d", &baza_danych);
switch (baza_danych){
case 1: // WPROWADZANIE DANYCH NOWEGO PACJENTA
{
wybor=1;
while(wybor)
{
if(rekord)
{
liczba_pacjentow = rekord;
}
if(liczba_pacjentow==0){
liczba_pacjentow++;
}
else{
liczba_pacjentow++;
wsk = (pacjent *)realloc(wsk, liczba_pacjentow * sizeof(pacjent));
}
pobierz_dane( wsk, liczba_pacjentow, &dodaj_kolejnego_pacjenta );
printf("%d", dodaj_kolejnego_pacjenta);
if(!dodaj_kolejnego_pacjenta)
{
wybor=0;
}
}
}break;
case 2: // WYSWIETLANIE AKTUALNEJ BAZY PACJENTOW
{
wyswietlanie_bazy(wsk, liczba_pacjentow);
}break;
case 3: // ZAPISYWANIE DO PLIKU DANYCH PACJENTOW
{
zapisywanie_do_pliku(wsk, liczba_pacjentow);
}break;
case 4:
{
wczytanie_bazy(wsk, liczba_pacjentow);
}break;
case 5: //WYSWIETLENIE LISTY PACJENTOW WEDLUG ROSNACEJ MASY CIALA
{
}break;
// case 6: //WYSWIETLENIE LISTY PACJENTOW WEDLUG ROSNACEJ WZROSTU
// {
// wysokosc();
// }break;
// case 7: //WYSWIETLENIE LISTY PACJENTOW WEDLUG ROSNACEJ WIEKU
// {
// lata();
// }break;
// case 8: //WYSWIETLENIE LISTY PACJENTOW W KOLEJNOSCI ALFABETYCZNEJ
// {
// alfabet();
// }break;
case 9: // WYJSCIE Z PROGRAMU
{
return 0;
}break;
}
}
return 0;
}