Ono sto tebi ustvari treba su LISTE, onda mozes sa strcmp da uporedjujes stringove. Ovo je nesto slicno sto sam radio davno pa sam iskopao stim da ovde nema upisa u fajl...
Code:
/*
3.2. Napisati program za unos telefonskog imenika (ime i prezime, broj telefona) i
ispis tog imenika.
3.3. Napisati program koji telefonski imenik (iz prethodnog zadatka) sortira po
imenu i prezimenu i ispisuje sortirani imenik.
3.4. Napisati program koji ispisuje podatke (ime i prezime) za uneti broj telefona.
(iz 3.2.)
3.5. Napisati program koji traži duple zapise u imeniku i ispisuje ih.
*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
typedef struct element
{
char ime[15];
char prezime[20];
char broj[12];
struct element *sledeci;
} Elem;
Elem *unos(void);
void ispis(Elem *niz);
Elem *sorti(Elem *lista);
void razmeni(Elem *prvi,Elem *drugi);
void uneti_broj(Elem *lista,char broj[]);
void ispis_jednog(Elem *niz);
void dupli(Elem *lista);
main()
{
int odg=0;
Elem *lista=NULL,*sortiran=NULL;
char broj[12];
while (odg!=5)
{
printf("\n\n\t\t\t**********Telefonski Imenik************\n\n\n");
printf("\t\t\t 1.Unos Novog Imenika\n");
printf("\t\t\t 2.Ispis Celog Sortiranog Imenika\n");
printf("\t\t\t 3.Ispisuje podatke za uneti br. tel\n ");
printf("\t\t\t 4.Ispisuje duple zapise br. tel\n ");
printf("\t\t\t 5.Izlaz iz programa\n\n ");
printf("\t\t\t Izaberi : ");
scanf("%d",&odg);
while (getchar()!='\n');
switch (odg)
{
case 1: {lista=unos();sortiran=sorti(lista);printf("\nPovratak u glavni meni\n"); getchar(); break;}
case 2: {ispis(sortiran); break;}
case 3: {printf("\nUnesi Broj : ");gets(broj);uneti_broj(sortiran,broj);break;}
case 4: {dupli(sortiran);break;}
}
}
return 0;
}
Elem *unos(void)
{
Elem *tekuci=NULL, *niz=NULL, *novi;
char ime[15],prezime[20],broj[12];
int odg=0;
while (odg!='N' && odg!='n')
{
printf("Unesi ime:\t ");
gets(ime);
printf("Unesi prezime:\t ");
gets(prezime);
printf("Unesi broj telefona:\t ");
gets(broj);
novi=(Elem *) malloc(sizeof(Elem));
strcpy(novi->ime,ime);
strcpy(novi->prezime,prezime);
strcpy(novi->broj,broj);
novi->sledeci=NULL;
if (tekuci)
tekuci->sledeci=novi;
else
niz=novi;
tekuci=novi;
do{
printf("\n Zelite li dalje da unosite korisnike? D/N : ");
scanf("%c",&odg);
}while (odg!='n' && odg!='N' && odg!='D' && odg!='d');
while (getchar()!='\n');
}
return(niz);
}
void ispis(Elem *niz)
{
while (niz)
{
puts(niz->ime);
puts(niz->prezime);
puts(niz->broj);
printf("\n\n");
niz=niz->sledeci;
}
printf("Pripusi nesto...\n\n");
getchar();
}
Elem *sorti(Elem *lista)
{
Elem *prvi, *drugi;
prvi=lista;
while(prvi)
{
drugi=prvi->sledeci;
while(drugi)
{
if (strcmp(prvi->prezime,drugi->prezime) > 0)
razmeni(prvi,drugi);
else if (strcmp(prvi->prezime,drugi->prezime) == 0)
{
if (strcmp(prvi->ime,drugi->ime) > 0)
razmeni(prvi,drugi);
}
drugi=drugi->sledeci;
}
prvi=prvi->sledeci;
}
printf("Pripusi nesto...\n\n");
getchar();
return(lista);
}
void razmeni(Elem *prvi,Elem *drugi)
{
Elem *pom;
pom=(Elem *) malloc(sizeof(Elem));
strcpy(pom->ime,prvi->ime);
strcpy(pom->prezime,prvi->prezime);
strcpy(pom->broj,prvi->broj);
strcpy(prvi->ime,drugi->ime);
strcpy(prvi->prezime,drugi->prezime);
strcpy(prvi->broj,drugi->broj);
strcpy(drugi->ime,pom->ime);
strcpy(drugi->prezime,pom->prezime);
strcpy(drugi->broj,pom->broj);
}
void uneti_broj(Elem *lista,char broj[])
{
Elem *prvi;
prvi=lista;
while(prvi)
{
if (strcmp(broj,prvi->broj)==0)
{
ispis_jednog(prvi);
}
prvi=prvi->sledeci;
}
printf("Pripusi nesto...\n\n");
getchar();
}
void dupli(Elem *lista)
{
Elem *prvi, *drugi;
prvi=lista;
printf("\n****Ispis duplih****\n\n");
while(prvi)
{
drugi=prvi->sledeci;
while(drugi)
{
if ((strcmp(prvi->prezime,drugi->prezime) == 0) &&
(strcmp(prvi->ime,drugi->ime) ==0) &&
(strcmp(prvi->broj,drugi->broj)==0))
ispis_jednog(prvi);
drugi=drugi->sledeci;
}
prvi=prvi->sledeci;
}
printf("Pripusi nesto...\n\n");
getchar();
}
void ispis_jednog(Elem *niz)
{
Elem *prvi=niz;
puts(prvi->ime);
puts(prvi->prezime);
puts(prvi->broj);
}