Witam, muszę napisać projekt (prosty program który umożliwia dodawanie i usuwanie wizytówek).
Jak na razie udało mi się skleić takie coś:
#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: ");
scanf("%s", nowa->ulica);
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_lista(Wizytowki *lista, char wyszukaj[50])
{
Wizytowki *wsk = lista;
if(lista == NULL)
printf("\nLISTA JEST PUSTA");
int i = 1;
while( wsk != NULL )
{
if(wyszukaj == wsk->imie)
{
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++;
}
}
//Usuwa wizytowke z listy
void usun(Wizytowki **lista, int ID)
{
Wizytowki *poprzedni = NULL;
Wizytowki *wsk = *lista;
int i;
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");
}
int main()
{
int wybor=1, ile, k;
char szukaj[50];
Wizytowki *lista = NULL;
printf("\n\nWitaj w programie WIZYTOWNIK");
while(wybor != 6)
{
printf("\n\nmozesz korzystac z nastepujacych polecen:\n\n");
printf("1.Dodaj | 2.Edytuj | 3.Usun | 4.Wyswietl wszystkie | 5.Szukaj | 6.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 3:
printf("Wpisz 1 jesli chcesz usuwac na podstawie numeru \nlub 2 jesli chcesz usuwac dana branze\n");
scanf("%d",&ile);
if(ile==1)
usun_wizytowke(&lista);
else if(ile==2)
usun_branza(&lista);
break;
case 4:
wypisz_liste(lista);
break;
case 5:
scanf("%s",szukaj);
wypisz_wizytowke_lista(lista, szukaj);
break;
}
}
return 0;
}
Mam jednak problem z funkcją wyszukującą wizytówkę po imieniu wypisz_wizytowke_lista. Co powinienem zrobić aby zaczęła działać?
Zaznaczam, że słabo jeszcze znam ten język... Z góry dzięki za pomoc ;)