Kod programu dla potomnych... Może komuś się przyda. Tylko proszę nie komentować :D
Kopiuj
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Wizytowki
{
char imie[30], nazwisko[30];
char nazwafirmy[50], branza[30];
char telefon[15], email[50], www[30], ulica[30], nrdomu[4], pocztowy[7], miasto[20];
struct Wizytowki *nastepny;
} Wizytowki;
// zlicza dlugosc listy
int dlugosc_listy(Wizytowki *lista)
{
int d = 0;
Wizytowki *wsk = lista;
while(wsk != NULL)
{
d++;
wsk = wsk->nastepny;
}
return d;
}
// dodaje nowy wezel do listy
void dodaj(Wizytowki **lista, Wizytowki *nowa)
{
while (*lista != NULL) lista = &((*lista)->nastepny);
*lista = nowa;
nowa->nastepny = NULL;
}
// dodaje wizytowke do listy
void dodajWizytowke(Wizytowki **lista)
{ char line[500];
Wizytowki *nowa = (Wizytowki*)malloc(sizeof(Wizytowki));
printf("\nPodaj imie: ");
scanf("%s", nowa->imie);
printf("Podaj nazwisko: ");
scanf("%s", nowa->nazwisko);
printf("Podaj nazwe firmy: ");
fflush(stdin);
fgets(nowa->nazwafirmy, sizeof nowa->nazwafirmy, stdin);
printf("Podaj branze: ");
fflush(stdin);
fgets(nowa->branza, sizeof nowa->branza, stdin);
printf("Podaj numer telefonu: ");
fflush(stdin);
fgets(nowa->telefon, sizeof nowa->telefon, stdin);
printf("Podaj email: ");
scanf("%s", nowa->email);
printf("Podaj adres strony www: ");
scanf("%s", nowa->www);
printf("Podaj adres zamiszkania: \n");
printf("Ulica: ");
fflush(stdin);
fgets(nowa->ulica, sizeof nowa->ulica, stdin);
char len=strlen(nowa->ulica);
if((len)&&(nowa->ulica[len-1]=='\n')) nowa->ulica[len-1]=0;
printf("Numer domu: ");
scanf("%s", nowa->nrdomu);
printf("Kod pocztowy: ");
scanf("%s", nowa->pocztowy);
printf("Miasto: ");
fflush(stdin);
fgets(nowa->miasto, sizeof nowa->miasto, stdin);
dodaj(lista, nowa);
}
//Wypisuje cala liste
void wypisz_liste(Wizytowki *lista)
{
Wizytowki *wsk = lista;
if(lista == NULL)
printf("\nLISTA JEST PUSTA");
else
printf("Lista zawiera %d wizytowek: \n\n", dlugosc_listy(lista) );
int i = 1;
while( wsk != NULL)
{
printf("%d. %s %s\n firma: %s branza: %s telefon: %s email: %s\n %s\n Adres:\n %s %s \n %s %s\n", i, wsk->imie, wsk->nazwisko, wsk->nazwafirmy, wsk->branza, wsk->telefon, wsk->email, wsk->www, wsk->ulica, wsk->nrdomu, wsk->pocztowy, wsk->miasto);
wsk=wsk->nastepny;
i++;
}
}
//wipisuje wybrana wizytowke po imieniu
void wypisz_wizytowke_imie_lista(Wizytowki *lista, char wyszukaj[50])
{
Wizytowki *wsk = lista;
if(lista == NULL)
printf("\nLISTA JEST PUSTA");
int i = 1, istnieje = 0;
while( wsk != NULL )
{
if(strcmp(wsk->imie, wyszukaj)==0)
{
printf("%d. %s %s\n firma: %s branza: %s telefon: %s email: %s\n %s\n Adres:\n %s %s \n %s %s\n", i, wsk->imie, wsk->nazwisko, wsk->nazwafirmy, wsk->branza, wsk->telefon, wsk->email, wsk->www, wsk->ulica, wsk->nrdomu, wsk->pocztowy, wsk->miasto);
istnieje++;
}
wsk=wsk->nastepny;
i++;
}
if(istnieje==0)
printf("\nNie znaleziono wizytowki o podanych kryteriach\n");
}
//wipisuje wybrana wizytowke po nazwisku
void wypisz_wizytowke_nazwisko_lista(Wizytowki *lista, char wyszukaj[50])
{
Wizytowki *wsk = lista;
if(lista == NULL)
printf("\nLISTA JEST PUSTA");
int i = 1, istnieje = 0;
while( wsk != NULL )
{
if(strcmp(wsk->nazwisko, wyszukaj)==0)
{
printf("%d. %s %s\n firma: %s branza: %s telefon: %s email: %s\n %s\n Adres:\n %s %s \n %s %s\n", i, wsk->imie, wsk->nazwisko, wsk->nazwafirmy, wsk->branza, wsk->telefon, wsk->email, wsk->www, wsk->ulica, wsk->nrdomu, wsk->pocztowy, wsk->miasto);
istnieje++;
}
wsk=wsk->nastepny;
i++;
}
if(istnieje==0)
printf("\nNie znaleziono wizytowki o podanych kryteriach\n");
}
//wipisuje wybrana wizytowke po nazwie firmy
void wypisz_wizytowke_firma_lista(Wizytowki *lista, char wyszukaj[50])
{
Wizytowki *wsk = lista;
if(lista == NULL)
printf("\nLISTA JEST PUSTA");
int i = 1, istnieje = 0;
while( wsk != NULL )
{
if(strcmp(wsk->nazwafirmy, wyszukaj)==0)
{
printf("%d. %s %s\n firma: %s branza: %s telefon: %s email: %s\n %s\n Adres:\n %s %s \n %s %s\n", i, wsk->imie, wsk->nazwisko, wsk->nazwafirmy, wsk->branza, wsk->telefon, wsk->email, wsk->www, wsk->ulica, wsk->nrdomu, wsk->pocztowy, wsk->miasto);
istnieje++;
}
wsk=wsk->nastepny;
i++;
}
if(istnieje==0)
printf("\nNie znaleziono wizytowki o podanych kryteriach\n");
}
//wipisuje wybrana wizytowke po adresie email
void wypisz_wizytowke_email_lista(Wizytowki *lista, char wyszukaj[50])
{
Wizytowki *wsk = lista;
if(lista == NULL)
printf("\nLISTA JEST PUSTA");
int i = 1, istnieje = 0;
while( wsk != NULL )
{
if(strcmp(wsk->email, wyszukaj)==0)
{
printf("%d. %s %s\n firma: %s branza: %s telefon: %s email: %s\n %s\n Adres:\n %s %s \n %s %s\n", i, wsk->imie, wsk->nazwisko, wsk->nazwafirmy, wsk->branza, wsk->telefon, wsk->email, wsk->www, wsk->ulica, wsk->nrdomu, wsk->pocztowy, wsk->miasto);
istnieje++;
}
wsk=wsk->nastepny;
i++;
}
if(istnieje==0)
printf("\nNie znaleziono wizytowki o podanych kryteriach\n");
}
//Usuwa wizytowke z listy
void usun(Wizytowki **lista, int ID)
{
Wizytowki *poprzedni = NULL;
Wizytowki *wsk = *lista;
int i=0;
for(i = 1; i < ID; i++)
{
poprzedni=wsk;
wsk=wsk->nastepny;
}
if(poprzedni==NULL)
{
(*lista)=(*lista)->nastepny;
free(wsk);
}
else
{
poprzedni->nastepny=wsk->nastepny;
free(wsk);
}
}
//Usuwa wizytowke z listy na podstawie numeru
void usun_wizytowke(Wizytowki **lista)
{
int ID;
printf("Podaj numer wizytowki do usuniecia: " );
scanf("%d", &ID);
if((ID > dlugosc_listy(*lista)) || (ID < 1))
{
printf("\nNie ma takiego indeksu");
}
else
{
usun(lista,ID);
printf("\nUsunieto wizytowke");
}
}
//usuwa branze z listy
int usun_branza_lista(char* usbranza, Wizytowki **lista)
{
Wizytowki *poprzedni=NULL;
Wizytowki *wsk= *lista;
//strcmp porownoje napisy
while((wsk != NULL) && ( ( strcmp(wsk->branza, usbranza)!=0) ))
{
poprzedni=wsk;
wsk=wsk->nastepny;
}
if(wsk == NULL )
{
return 0;
}
else
{
if(poprzedni==NULL)
{
(*lista)=(*lista)->nastepny;
free(wsk);
}
else
{
poprzedni->nastepny=wsk->nastepny;
free(wsk);
}
return 1;
}
}
//usuwa po branzy
void usun_branza(Wizytowki **lista)
{
char usbranza[30];
int ilosc=0;
printf("Podaj branze do usuniecia: ");
fflush(stdin);
fgets(usbranza, 30, stdin);
while(usun_branza_lista(usbranza, lista)==1)
{
if(usun_branza_lista(usbranza, lista))
ilosc++;
else
{
ilosc++;
break;
}
}
if(ilosc>=1)
printf("Usunieto wizytowki o podanej branzy");
else
printf("Zadna wizytowka nie zostala usunieta poniewaz branza nie istnieje");
}
//usuwa wizytowki na podstawie pocz¹tku nazwy firmy
int usun_firmy_lista(char* usfirma, Wizytowki **lista)
{
Wizytowki *poprzedni=NULL;
Wizytowki *wsk= *lista;
//strcmp porownoje napisy
while((wsk != NULL && ( strcmp(usfirma, wsk->nazwafirmy)!=0) && ( strcmp(usfirma, wsk->nazwafirmy)>0) ))
{
poprzedni=wsk;
wsk=wsk->nastepny;
}
if(wsk == NULL )
{
return 0;
}
else
{
if(poprzedni==NULL)
{
(*lista)=(*lista)->nastepny;
free(wsk);
}
else
{
poprzedni->nastepny=wsk->nastepny;
free(wsk);
}
return 1;
}
}
//usuwa po pocz¹tku nazwy firmy
void usun_firma(Wizytowki **lista)
{
char usfirma[30];
int ilosc=0;
printf("Podaj poczatek nazwy firmy do usuniecia: ");
fflush(stdin);
fgets(usfirma, 30, stdin);
while(usun_firmy_lista(usfirma, lista)==1)
{
if(usun_firmy_lista(usfirma, lista))
ilosc++;
else
{
ilosc++;
break;
}
}
if(ilosc>=1)
printf("Usunieto wizytowki o podanym poczatku nazwy firmy");
else
printf("Zadna wizytowka nie zostala usunieta poniewaz firma o takim poczatku nie istnieje");
}
//edytuje wizytowke o podanym id
void edytuj(Wizytowki **lista, int ID, char doedycji[20])
{
Wizytowki *poprzedni = NULL;
Wizytowki *wsk = *lista;
Wizytowki *nowa = (Wizytowki*)malloc(sizeof(Wizytowki));
int i=0;
for(i = 1; i < ID; i++)
{
poprzedni=wsk;
wsk=wsk->nastepny;
}
for(i=0; i<20; i++)
{
if(doedycji[i]=='\0')
break;
else if(doedycji[i]=='1' || doedycji[i]=='9')
{
printf("\nPodaj nowe imie: ");
scanf("%s", wsk->imie);
break;
}
}
for(i=0; i<20; i++)
{
if(doedycji[i]=='\0')
break;
else if(doedycji[i]=='2' || doedycji[i]=='9')
{
printf("Podaj nowe nazwisko: ");
scanf("%s", wsk->nazwisko);
break;
}
}
for(i=0; i<20; i++)
{
if(doedycji[i]=='\0')
break;
else if(doedycji[i]=='3' || doedycji[i]=='9')
{
printf("Podaj nowa nazwe firmy: ");
fflush(stdin);
fgets(wsk->nazwafirmy, sizeof wsk->nazwafirmy, stdin);
break;
}
}
for(i=0; i<20; i++)
{
if(doedycji[i]=='\0')
break;
else if(doedycji[i]=='4' || doedycji[i]=='9')
{
printf("Podaj nowa branze: ");
fflush(stdin);
fgets(wsk->branza, sizeof wsk->branza, stdin);
break;
}
}
for(i=0; i<20; i++)
{
if(doedycji[i]=='\0')
break;
else if(doedycji[i]=='5' || doedycji[i]=='9')
{
printf("Podaj nowy numer telefonu: ");
fflush(stdin);
fgets(wsk->telefon, sizeof wsk->telefon, stdin);
break;
}
}
for(i=0; i<20; i++)
{
if(doedycji[i]=='\0')
break;
else if(doedycji[i]=='6' || doedycji[i]=='9')
{
printf("Podaj nowy email: ");
scanf("%s", wsk->email);
break;
}
}
for(i=0; i<20; i++)
{
if(doedycji[i]=='\0')
break;
else if(doedycji[i]=='7' || doedycji[i]=='9')
{
printf("Podaj nowy adres strony www: ");
scanf("%s", wsk->www);
break;
}
}
for(i=0; i<20; i++)
{
if(doedycji[i]=='\0')
break;
else if(doedycji[i]=='8' || doedycji[i]=='9')
{
printf("Podaj nowy adres zamiszkania: \n");
printf("Ulica: ");
fflush(stdin);
fgets(wsk->ulica, sizeof wsk->ulica, stdin);
char len=strlen(wsk->ulica);
if((len)&&(wsk->ulica[len-1]=='\n')) wsk->ulica[len-1]=0;
printf("Numer domu: ");
scanf("%s", wsk->nrdomu);
printf("Kod pocztowy: ");
scanf("%s", wsk->pocztowy);
printf("Miasto: ");
fflush(stdin);
fgets(wsk->miasto, sizeof wsk->miasto, stdin);
break;
}
}
}
//funkcja edytujaca wizytowke
void edytuj_wizytowke(Wizytowki **lista)
{
int ID;
char doedycji[20];
printf("Podaj numer wizytowki ktora chcesz edytowac: " );
scanf("%d", &ID);
printf("\n1-imie, 2-nazwisko, 3-nazwa firmy, 4-branza, 5-numer telefonu, 6-adres email, 7-adres strony, 8-adres pocztowy, 9-wszystko\n");
printf("Wpisz po przecinku wszystkie liczby w zaleznosci od tego co chcesz edytowac:\n");
scanf("%s", doedycji);
if((ID > dlugosc_listy(*lista)) || (ID < 1))
{
printf("\nNie ma takiego indeksu");
}
else
{
edytuj(lista,ID, doedycji);
printf("\nWizytowka zmieniona");
}
}
//porównywacz imie
int compare_imie(const void* first, const void* second)
{
Wizytowki *a=*((Wizytowki**)first);
Wizytowki *b=*((Wizytowki**)second);
return strcmp(a->imie,b->imie);
}
//porównywacz nazwisko
int compare_nazwisko(const void* first, const void* second)
{
Wizytowki *a=*((Wizytowki**)first);
Wizytowki *b=*((Wizytowki**)second);
return strcmp(a->nazwisko,b->nazwisko);
}
//porównywacz firma
int compare_firma(const void* first, const void* second)
{
Wizytowki *a=*((Wizytowki**)first);
Wizytowki *b=*((Wizytowki**)second);
return strcmp(a->nazwafirmy,b->nazwafirmy);
}
//porównywacz email
int compare_email(const void* first, const void* second)
{
Wizytowki *a=*((Wizytowki**)first);
Wizytowki *b=*((Wizytowki**)second);
return strcmp(a->email,b->email);
}
//funkcja wyswietlajaca posegregowane wizytowki
void sortuj_imie(Wizytowki *lista, int a)
{
int d=dlugosc_listy(lista);
Wizytowki *wsk = lista;
Wizytowki **tm=(Wizytowki**)malloc(d*sizeof(Wizytowki*));
int i = 0;
while(wsk != NULL)
{
tm[i]=wsk;
wsk = wsk->nastepny;
i++;
}
if(a==2)
qsort(tm, i, sizeof(tm), compare_imie);
else if(a==3)
qsort(tm, i, sizeof(tm), compare_nazwisko);
else if(a==4)
qsort(tm, i, sizeof(tm), compare_firma);
else if(a==5)
qsort(tm, i, sizeof(tm), compare_email);
int j=0;
while( j < i )
{
printf("%d. %s %s\n firma: %s branza: %s telefon: %s email: %s\n %s\n Adres:\n %s %s \n %s %s\n", j+1, tm[j]->imie, tm[j]->nazwisko, tm[j]->nazwafirmy, tm[j]->branza, tm[j]->telefon, tm[j]->email, tm[j]->www, tm[j]->ulica, tm[j]->nrdomu, tm[j]->pocztowy, tm[j]->miasto);
j++;
}
free(tm);
}
//zapisywanie do pliku
void zapisz(Wizytowki *lista)
{
char nazwa[30];
Wizytowki *wsk = lista;
printf("Podaj nazwe pliku do zapisania (koniecznie z rozszerzeniem .dat)\n");
scanf("%s",nazwa);
FILE *plik = fopen(nazwa,"w+b");
while(wsk!=NULL){
fwrite(wsk->imie,sizeof(wsk->imie),1,plik);
fwrite(wsk->nazwisko,sizeof(wsk->nazwisko),1,plik);
fwrite(wsk->nazwafirmy,sizeof(wsk->nazwafirmy),1,plik);
fwrite(wsk->branza,sizeof(wsk->branza),1,plik);
fwrite(wsk->telefon,sizeof(wsk->telefon),1,plik);
fwrite(wsk->email,sizeof(wsk->email),1,plik);
fwrite(wsk->www,sizeof(wsk->www),1,plik);
fwrite(wsk->ulica,sizeof(wsk->ulica),1,plik);
fwrite(wsk->nrdomu,sizeof(wsk->nrdomu),1,plik);
fwrite(wsk->pocztowy,sizeof(wsk->pocztowy),1,plik);
fwrite(wsk->miasto,sizeof(wsk->miasto),1,plik);
wsk=wsk->nastepny;
}
fclose(plik);
printf("\nDane zostaly zapisane do pliku %s", nazwa);
}
//wczytywanie z pliku
void wczytaj(Wizytowki **lista)
{ char line[500];
char nazwa[30];
printf("Podaj nazwe pliku z ktorego chcesz wczytac (koniecznie z rozszerzeniem .dat)\n");
printf("Plik z przykladowymi danymi: dane.dat\n\n");
scanf("%s",nazwa);
FILE *plik = fopen(nazwa,"r+b");
if(plik==NULL)
{
printf("Nie moge otworzyc pliku %s do wczytania.\n", nazwa);
}
else
while(1)
{
Wizytowki *nowa = (Wizytowki*)malloc(sizeof(Wizytowki));
fread(nowa->imie,sizeof(nowa->imie),1,plik);
fread(nowa->nazwisko,sizeof(nowa->nazwisko),1,plik);
fread(nowa->nazwafirmy,sizeof(nowa->nazwafirmy),1,plik);
fread(nowa->branza,sizeof(nowa->branza),1,plik);
fread(nowa->telefon,sizeof(nowa->telefon),1,plik);
fread(nowa->email,sizeof(nowa->email),1,plik);
fread(nowa->www,sizeof(nowa->www),1,plik);
fread(nowa->ulica,sizeof(nowa->ulica),1,plik);
fread(nowa->nrdomu,sizeof(nowa->nrdomu),1,plik);
fread(nowa->pocztowy,sizeof(nowa->pocztowy),1,plik);
fread(nowa->miasto,sizeof(nowa->miasto),1,plik);
if(feof(plik)) break;
dodaj(lista, nowa);
}
fclose(plik);
}
int main()
{
int wybor=1, ile, k;
char szukaj[50];
Wizytowki *lista = NULL;
printf("\n\nWitaj w programie WIZYTOWNIK");
while(wybor != 8)
{
printf("\n\nmozesz korzystac z nastepujacych polecen:\n\n");
printf("1.Dodaj | 2.Edytuj | 3.Usun | 4.Wyswietl wszystkie | 5.Szukaj | 6.Zapisz | 7.Wczytaj | 8.Wyjscie\n\n");
printf("wpisz 1,2,3,4,5 lub 6\n");
scanf("%d",&wybor);
switch(wybor)
{
case 1:
printf("Ile wizytowek chcesz dodac?\n");
scanf("%d",&ile);
if(ile==0)
break;
for(k=0;k<ile;k++)
dodajWizytowke(&lista);
break;
case 2:
edytuj_wizytowke(&lista);
break;
case 3:
printf(" Wpisz 1 jesli chcesz usuwac na podstawie numeru wizytowki \n 2 jesli chcesz usuwac dana branze\n 3 jesli chcesz usunac na podstawie poczatku nazwy firmy\n");
scanf("%d",&ile);
if(ile==1)
usun_wizytowke(&lista);
else if(ile==2)
usun_branza(&lista);
else if(ile==3)
usun_firma(&lista);
break;
case 4:
printf("Wpisz 1 aby wyswietlic wizytowki posortowane wedlug indeksu\n 2 - posortowane wedlug imienia\n 3 - posortowane wedlug nazwiska\n 4 - posortowane wedlug nazwy firmy\n 5 - posortowane wedlug adresu email\n");
scanf("%d",&ile);
if(ile==1)
wypisz_liste(lista);
else if(ile==2||3||4||5)
sortuj_imie(lista, ile);
break;
case 5:
printf(" Wpisz 1 jesli chcesz szukac po imieniu\n 2 szukaj po nazwisku\n 3 szukaj po nazwie firmy\n 4 szukaj po adresie email\n");
scanf("%d",&ile);
if(ile==1)
{
printf("Wpisz imie ktore chcesz wyszukac\n");
scanf("%s",szukaj);
wypisz_wizytowke_imie_lista(lista, szukaj);
}
else if(ile==2)
{
printf("Wpisz nazwisko ktore chcesz wyszukac\n");
scanf("%s",szukaj);
wypisz_wizytowke_nazwisko_lista(lista, szukaj);
}
else if(ile==3)
{
printf("Wpisz nazwe firmy ktora chcesz wyszukac\n");
fflush(stdin);
fgets(szukaj, 50, stdin);
wypisz_wizytowke_firma_lista(lista, szukaj);
}
else if(ile==4)
{
printf("Wpisz adres email ktory chcesz wyszukac\n");
scanf("%s",szukaj);
wypisz_wizytowke_email_lista(lista, szukaj);
}
break;
case 6:
zapisz(lista);
break;
case 7:
wczytaj(&lista);
break;
case 8:
break;
}
}
return 0;
}