main.c
Ukryta treść:
Kod: Zaznacz cały
#include "main.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ROZM 100
#define PLIK "lista.txt"
struct kontakt /* STRUKTURA Z DANYMI OSÓB */
{
char nazwisko[20];
char imie[20];
int numer;
};
struct ksiazka /* STRUKTURA Z DANYMI PROGRAMU */
{
int ilosc;
struct kontakt *wykaz[ROZM];
};
void czekaj() /* FUNKCJA WYŚWIETLA ENTER NA EKRANIE */
{
printf("\n > Wcisnij ENTER");
getchar();
}
/* GŁÓWNY PROGRAM */
int main()
{
struct ksiazka data;
data.ilosc = 0;
// wyswietla w petli menu, do momentu podania 'k' z klawiatury
char z;
do
{
printf("\n\n MENU:\n");
printf("\n c - Czytaj z pliku lista.txt");
printf("\n z - Zapisz do pliku lista.txt");
printf("\n d - Drukuj ksiazke");
printf("\n w - Wstaw nowy kontakt");
printf("\n n - Szukaj nazwiska");
printf("\n i - Szukaj imienia");
printf("\n t - Szukaj numeru");
printf("\n u - Usun kontakt");
printf("\n k - Koniec");
printf("\n wybor: ");
z = getchar(); getchar();
//wybierz z menu
switch(z)
{
case 'c' : czytaj(&data); break;
case 'z' : zapisz(&data); break;
case 'd' : drukuj(&data); break;
case 'w' : wstaw(&data); break;
case 'n' : szukajNazwiska(&data); break;
case 'i' : szukajImienia(&data); break;
case 't' : szukajNumeru(&data); break;
case 'u' : znajdzUsun(&data); break;
}
} while(z!='k');
return 0;
}
Ukryta treść:
Kod: Zaznacz cały
#ifndef MAIN_H
#define MAIN_H
void czekaj();
int main();
#endif
Ukryta treść:
Kod: Zaznacz cały
#include "wstawianie.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define PLIK "lista.txt"
#define ROZM 100
/* SORTOWANIE WG NAZWISKA */
int sortNazwisko (struct ksiazka *data,struct kontakt *o)
{
int i=0;
while(i<data->ilosc)
{
if ( strcmp( data->wykaz[i]->nazwisko, o->nazwisko ) > 0 )
{
return i;
}
else if ( strcmp( data->wykaz[i]->nazwisko, o->nazwisko ) == 0 )
{
if ( strcmp( data->wykaz[i]->imie, o->imie ) > 0 )
{
return i;
}
}
i++;
}
return data->ilosc;
}
/* zamienia na duza litere */
void duzaLitera(char *litera)
{
if ( *litera > 90 ) *litera -=32;
}
/* wstawienie nowej pozycji na liste */
void wstawNowaPozycje(struct ksiazka *data,struct kontakt *o)
{
int gdzie=0,i=0;
duzaLitera(&o->nazwisko[0]);
duzaLitera(&o->imie[0]);
gdzie = sortNazwisko( data, o );
if (data->ilosc != gdzie) /* przestaw istniejace kontakty na pozycje +1 i zrob miejsce na nowy */
{
for (i=data->ilosc; i>=gdzie; i--)
{
data->wykaz[i] = data->wykaz[i-1];
}
}
data->wykaz[gdzie]=(struct kontakt *)malloc(sizeof(struct kontakt));
strcpy(data->wykaz[gdzie]->nazwisko,o->nazwisko);
strcpy(data->wykaz[gdzie]->imie,o->imie);
strcpy(data->wykaz[gdzie]->numer,o->numer);
data->ilosc++;
}
/* ODCZYT Z PLIKU */
void czytaj(struct ksiazka *data)
{
int i=0,gdzie,ile=0;
struct kontakt o;
FILE *plikWykazu;
plikWykazu=fopen(PLIK,"r");
if (plikWykazu==NULL)
{
printf("Blad odczytu pliku");
return;
}
while ( data->ilosc < ROZM && fscanf(plikWykazu,"%s%s%s",o.nazwisko, o.imie, o.numer) != EOF )
{
wstawNowaPozycje(data,&o);
ile++;
}
fclose(plikWykazu);
/* ustal ilosc wpisow */
printf("\n\n > Przeczytano %d kontaktow z pliku\n",ile);
czekaj();
}
/* ZAPIS DO PLIKU */
void zapisz(struct ksiazka *data)
{
int i;
FILE *plikWykazu;
plikWykazu = fopen(PLIK,"w");
/* zapisz w petli do pliku */
for(i=0; i<data->ilosc; i++)
{
fprintf(plikWykazu,"%s\n%s\n%s\n",data->wykaz[i]->nazwisko, data->wykaz[i]->imie, data->wykaz[i]->numer);
}
fclose(plikWykazu);
printf("\n\n > Kontakty zapisane do pliku\n");
czekaj();
}
/* czytanie numeru z klawiatury, potrzebne do wstawiania */
void czytajNumer(struct kontakt *o) /* funkcja pomocnicza */
{
char z,numer[13];
int i=0;
for(i=0; i<13; i++) numer[i]=0;
i = 0;
/* funkcja pobiera 9 liczb, nie pobiera liter */
getchar();
while(i<12)
{
z = getchar();
if ( z == 10 ) break; /* nacisnieto enter, zakoncz pobieranie numeru */
else if ( (z > 47 && z < 58) || z == 45 ) /* 48 - 57 to liczby w ASCII */
{
numer[i] = z;
i++;
}
}
strcpy(o->numer,numer); /* kopiuje z tymczasowej numer do numer */
}
/* WSTAWIANIE */
void wstaw(struct ksiazka *data) /* wstawia nowy kontakt na pozycje 0 */
{
struct kontakt o;
int i=0;
/* pobierz dane od uzytkownika */
printf("Podaj imie:");
scanf("%s",o.imie);
printf("Podaj nazwisko:");
scanf("%s",o.nazwisko);
printf("Podaj numer (bez - ):");
czytajNumer(&o);
wstawNowaPozycje(data,&o);
printf("\nDodano: %s %s, numer: %s\n", o.nazwisko, o.imie, o.numer);
czekaj();
}
Ukryta treść:
Kod: Zaznacz cały
#ifndef WSTANIANIE_H
#define WSTAWIANIE_H
struct kontakt
{
char nazwisko[20];
char imie[20];
int numer;
};
struct ksiazka
{
int ilosc;
struct kontakt *wykaz[100];
};
int sortNazwisko (struct ksiazka *data,struct kontakt *o);
void duzaLitera(char *litera);
void wstawNowaPozycje(struct ksiazka *data,struct kontakt *o);
void czytaj(struct ksiazka *data);
void zapisz(struct ksiazka *data);
void czytajNumer(struct kontakt *o);
void wstaw(struct ksiazka *data);
#endif
Ukryta treść:
Kod: Zaznacz cały
#include "szukanie.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* DRUKOWANIE KSIĄŻKI */
void drukujJeden(struct ksiazka *data,int jaki)
{
printf("(%d) %s %s\t\t %s\n", jaki+1, data->wykaz[jaki]->nazwisko,data->wykaz[jaki]->imie,data->wykaz[jaki]->numer);
}
void drukuj(struct ksiazka *data)
{
int i=0;
printf("\n\n Nazwisko i imie \t Numer\n ");
printf("----------------------------------------------------------------------------\n");
for (i=0; i < data->ilosc; i++)
{
drukujJeden(data,i);
}
czekaj();
}
/* SZUKANIE */
void szukajKoniec(int ile) /* jezeli ile = 0, pokazuje komunikat, ze nic nie znaleziono */
{
if (ile == 0)
{
printf("\n Niestety, nic nie znaleziono\n");
}
czekaj();
}
/* SZUKANIE NAZWISKA */
void szukajNazwiska(struct ksiazka *data) /* szuka osoby o podanym nazwisku */
{
char nazw[20];
int i=0,ile=0;
printf("\n Podaj nazwisko: ");
scanf("%s",&nazw);
getchar();
for (i=0; i<data->ilosc; i++)
{
if ( strcmp( data->wykaz[i]->nazwisko , nazw ) == 0 ) /* sprawdz czy nie ma roznic pomiedzy nazwami */
{
drukujJeden(data,i);
ile++;
}
}
szukajKoniec(ile); /* jezeli bylo 0 znalezionych, bedzie pokazana informacja */
}
/* SZUKANIE IMIENIA */
void szukajImienia(struct ksiazka *data) /* szuka osoby o podanym imieniu */
{
char imie[20];
int i=0,ile=0;
printf("\n Podaj imie: ");
scanf("%s",&imie);
getchar();
for (i=0; i<data->ilosc; i++)
{
if ( strcmp( data->wykaz[i]->imie , imie ) == 0 )
{
drukujJeden(data,i);
ile++;
}
}
szukajKoniec(ile);
}
/* SZUKANIE NUMERU */
void szukajNumeru(struct ksiazka *data) /* szuka osoby o podanym numerze telefonu */
{
char numer[10];
int i=0,ile=0;
printf("\n Podaj numer: ");
scanf("%s",numer);
getchar();
for (i=0; i<data->ilosc; i++)
{
if ( strcmp(data->wykaz[i]->numer, numer) == 0 )
{
drukujJeden(data,i);
ile++;
}
}
szukajKoniec(ile);
}
/* USUWANIE */
void usun(struct ksiazka *data,int jaki) /* funkcja pomocnicza do usuwania, usuwa z pamieci rekord */
{
int i;
free(data->wykaz[jaki]);
data->ilosc --;
if (data->ilosc == 0) return; /* jezeli zostalo 0 pozycji, to nie ma co przesuwac */
for (i=jaki; i<data->ilosc; i++)
{
data->wykaz[i] = data->wykaz[i+1];
}
}
void znajdzUsun(struct ksiazka *data) /* szuka i kasuje podana osobe z listy */
{
char nazw[20];
int i=0,j,gdzie=0,ile=0;
/* pobierz nazwisko */
printf("\n Podaj nazwisko: ");
scanf("%s",&nazw);
getchar();
/* poszukaj tej osoby w wykazie */
for( i=0; i<data->ilosc; i++)
{
if ( strcmp( data->wykaz[i]->nazwisko , nazw ) == 0 )
{
/* wypisz kogo usuwamy, poki jeszcze mamy dane */
printf(" > Usunieto %s\n", data->wykaz[i]->nazwisko, data->wykaz[i]->imie);
/* ok, teraz juz mozna go usunac */
usun(data,i);
ile++;
}
}
szukajKoniec(ile);
}
Ukryta treść:
Kod: Zaznacz cały
#ifndef SZUKANIE_H
#define SZUKANIE_H
struct kontakt
{
char nazwisko[20];
char imie[20];
int numer;
};
struct ksiazka
{
int ilosc;
struct kontakt *wykaz[100];
};
void drukujJeden(struct ksiazka *data,int jaki);
void drukuj(struct ksiazka *data);
void szukajKoniec(int ile);
void szukajNazwiska(struct ksiazka *data);
void szukajImienia(struct ksiazka *data);
void szukajNumeru(struct ksiazka *data);
void usun(struct ksiazka *data,int jaki);
void znajdzUsun(struct ksiazka *data);
#endif
Kod: Zaznacz cały
wynik: main.o szukanie.o wstawianie.o
gcc -o wynik main.o szukanie.o wstawianie.o
main.o: main.c main.h
gcc -c main.c
szukanie.o: szukanie.c szukanie.h
gcc -c szukanie.c
wstawianie.o: wstawianie.c wstawianie.h
gcc -c wstawianie.c
clean:
rm wynik *.o
pojawiają mi się następujące warningi:
szukanie.c: In function 'szukajNumeru':
szukanie.c:95: warning: passing arg 1 of 'strcmp' makes pointer from integer without a cast
Kod: Zaznacz cały
if ( strcmp(data->wykaz[i]->numer, numer) == 0 )
wstawianie.c:59: warning: passing arg 1 of 'strcpy' makes pointer from integer without a cast
wstawianie.c:59: warning: passing arg 2 of 'strcpy' makes pointer from integer without a cast
Kod: Zaznacz cały
strcpy(data->wykaz[gdzie]->numer,o->numer);
wstawianie.c:133: warning: passing arg 1 of 'strcpy' makes pointer from integer without a cast
Kod: Zaznacz cały
strcpy(o->numer,numer);