Witam mam robię właśnie bazę danych i już prawie ją skończyłem tyle że nie wiem jak za bardzo mam zrobić takie coś żeby mi sprawdzało czy podana przez użytkownika branża jest poprawna a w razie braku zgodności użytkownik ma dostać możliwość ponownego wprowadzenia danych lub dodania tej nowej branży do zdefiniowanej ówcześnie listy "poprawnych' branż. Ktos pomoże bo już mi głowa pęka;) ?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//Struktura z danymi studenta
typedef struct DANE
{
long int* numer;
char* miejscowosc;
char* branza;
int* liczba_p;
int* godzina_o;
int* godzina_z;
} Dane;
//Struktura z list¹ jednokierunkow¹
typedef struct SKLEP Sklep;
struct SKLEP
{
Dane dane;
Sklep* next;
};
typedef struct BRANZA_list Branza_list;
struct BRANZA_list
{
char* branza;
Branza_list* next;
};
void dodaj_branze_const(Branza_list **head2, char *el_staly)
{
Branza_list *element;
element=(Branza_list*)malloc(sizeof(Branza_list));
element->branza=el_staly;
Branza_list *tmp = element;
if (*head2 != NULL)
tmp->next = *head2;
*head2 = tmp;
}
int check_branza(Branza_list *head2, char *branza)
{
Branza_list *tmp;
tmp=head2;
while (tmp!=NULL&&strcmp((tmp->branza),branza)!=0)
tmp=tmp->next;
if (tmp==NULL)
return 1;
else
return 0;
}
//Tworzenie nowego elementu
Sklep* stworz_element(Branza_list **head2)
{
char x;//x zmienna pomocnicza
Sklep *element;
char bufor1[41], bufor2[41];
char *miejscowosc, *branza;
long int *numer;
int *liczba_p, *godzina_o, *godzina_z;
system("cls");
printf("Podaj miejscowosc: ");
gets(bufor1);
miejscowosc=(char*)malloc(sizeof(char)* (strlen(bufor1)+1));
strcpy(miejscowosc, bufor1);
do
{
int x;
printf("Podaj branze: ");
gets(bufor2);
branza=(char*)malloc(sizeof(char)* (strlen(bufor2)+1));
strcpy(branza, bufor2);
x=check_branza(&head2, branza);
if (x!=0)
{
system("cls");
int y;
puts("Nie ma takiej branzy w bazie");
puts("1. Dodaj do bazy.");
puts("2. Popraw");
y=getchar();
getchar();
if (y==1)
{
dodaj_branze_const(&head2, branza);
}
}
}
while(x==0);
printf("Podaj numer sklepu: ");
while(scanf("%ld", &numer)==0)
{
puts("Blad danych, podaj numer jeszcze raz");
}
printf("Podaj liczbe pracownikow: ");
while(scanf("%d", &liczba_p)==0)
{
puts("Blad danych, podaj numer jeszcze raz");
}
printf("Podaj godzine otwarcia: ");
while(scanf("%d", &godzina_o)==0)
{
puts("Blad odczytu, podaj numer jeszcze raz");
}
printf("Podaj godzine zamkniecia: ");
while(scanf("%d", &godzina_z)==0)
{
puts("Blad odczytu, podaj numer jeszcze raz");
}
element=(Sklep*)malloc(sizeof(Sklep));
element->next=NULL;
element->dane.numer=numer;
element->dane.miejscowosc=miejscowosc;
element->dane.branza=branza;
element->dane.liczba_p=liczba_p;
element->dane.godzina_o=godzina_o;
element->dane.godzina_z=godzina_z;
return element;
}
//Dodawanie na pocz¹tek listy
void dodaj_sklep(Sklep **head, Branza_list **head2)
{
Sklep *tmp = stworz_element(&head2);
if (*head != NULL)
tmp->next = *head;
*head = tmp;
}
//Wyœwietlanie listy jednokierunkowej
void wyswietlanie_listy(Sklep *head)
{
Sklep *tmp;
system("cls");
tmp = head;
if (tmp == NULL)
printf("Brak elementow");
else
{
puts(" ______________________________________________________________________________________________");
printf("|%-15s|%-30s|%-30s|%-8s|%-7s|\n", "Nr. sklepu", "Miejscowosc", "Branza", "L. prac.", "G. otw.");
puts("|---------------|------------------------------|------------------------------|--------|-------|");
while (tmp != NULL)
{
printf("|%-15ld|%-30s|%-30s|%-8d|%2d-%-2d |\n", tmp->dane.numer, tmp->dane.miejscowosc, tmp->dane.branza, tmp->dane.liczba_p, tmp->dane.godzina_o, tmp->dane.godzina_z );
tmp = tmp->next;
}
puts("'---------------'------------------------------'------------------------------'--------'-------'");
}
getchar();
}
//Wyszukiwanie elementu
Sklep* wyszukaj_element_numer(Sklep *head, long int *numer)
{
Sklep *tmp;
tmp=head;
while (tmp!=NULL&&(tmp->dane.numer)!=numer)
tmp=tmp->next;
return tmp;
}
void wyswietl_element_numer(Sklep *head)
{
Sklep *tmp;
long int numer;
system("cls");
puts("Podaj numer sklepu: ");
scanf("%ld", &numer);
tmp=wyszukaj_element_numer(head, numer);
if (tmp!=NULL)
{
puts(" ______________________________________________________________________________________________");
printf("|%-15s|%-30s|%-30s|%-8s|%-7s|\n", "Nr. sklepu", "Miejscowosc", "Branza", "L. prac.", "G. otw.");
puts("|---------------|------------------------------|------------------------------|--------|-------|");
printf("|%-15ld|%-30s|%-30s|%-8d|%2d-%-2d |\n", tmp->dane.numer, tmp->dane.miejscowosc, tmp->dane.branza, tmp->dane.liczba_p, tmp->dane.godzina_o, tmp->dane.godzina_z );
puts("'---------------'------------------------------'------------------------------'--------'-------'");
}
else
puts("Brak takiego sklepu.");
getchar();
getchar();
}
void wyswietl_element_liczba_p(Sklep *head)
{
Sklep *tmp;
int pom=0;
int liczba_p;
system("cls");
puts("Podaj liczbe pracownikow sklepu: ");
scanf("%d", &liczba_p);
tmp = head;
puts(" ______________________________________________________________________________________________");
printf("|%-15s|%-30s|%-30s|%-8s|%-7s|\n", "Nr. sklepu", "Miejscowosc", "Branza", "L. prac.", "G. otw.");
puts("|---------------|------------------------------|------------------------------|--------|-------|");
while (tmp!=NULL)
{
if ((tmp->dane.liczba_p)==liczba_p)
{
printf("|%-15ld|%-30s|%-30s|%-8d|%2d-%-2d |\n", tmp->dane.numer, tmp->dane.miejscowosc, tmp->dane.branza, tmp->dane.liczba_p, tmp->dane.godzina_o, tmp->dane.godzina_z );
pom++;
}
tmp = tmp->next;
}
puts("'---------------'------------------------------'------------------------------'--------'-------'");
if (pom==0)
{
system("cls");
puts("Brak takich sklepow");
}
getchar();
getchar();
}
void wyswietl_element_godziny(Sklep *head)
{
Sklep *tmp;
int pom=0;
int godzina_o, godzina_z;
system("cls");
puts("Podaj godzine otwarcia sklepu: ");
scanf("%ld", &godzina_o);
puts("Podaj godzine zamknięcia sklepu: ");
scanf("%ld", &godzina_z);
tmp = head;
puts(" ______________________________________________________________________________________________");
printf("|%-15s|%-30s|%-30s|%-8s|%-7s|\n", "Nr. sklepu", "Miejscowosc", "Branza", "L. prac.", "G. otw.");
puts("|---------------|------------------------------|------------------------------|--------|-------|");
while (tmp!=NULL)
{
if ((tmp->dane.godzina_o)==godzina_o)
{
if ((tmp->dane.godzina_z)==godzina_z)
{
printf("|%-15ld|%-30s|%-30s|%-8d|%2d-%-2d |\n", tmp->dane.numer, tmp->dane.miejscowosc, tmp->dane.branza, tmp->dane.liczba_p, tmp->dane.godzina_o, tmp->dane.godzina_z );
pom++;
}
}
tmp = tmp->next;
}
puts("'---------------'------------------------------'------------------------------'--------'-------'");
if (pom==0)
{
system("cls");
puts("Brak takich sklepow");
}
getchar();
getchar();
}
void wyswietl_element_miejscowosc(Sklep *head)
{
Sklep *tmp;
int pom=0;
char bufor[41];
char *miejscowosc;
system("cls");
puts("Podaj miejscowosc, w ktorej znajduje sie sklep: ");
gets(bufor);
miejscowosc = (char*)malloc(sizeof(char)* (strlen(bufor) + 1));
strcpy(miejscowosc, bufor);
tmp = head;
puts(" ______________________________________________________________________________________________");
printf("|%-15s|%-30s|%-30s|%-8s|%-7s|\n", "Nr. sklepu", "Miejscowosc", "Branza", "L. prac.", "G. otw.");
puts("|---------------|------------------------------|------------------------------|--------|-------|");
while (tmp!=NULL)
{
if (strcmp(tmp->dane.miejscowosc, miejscowosc)==0)
{
printf("|%-15ld|%-30s|%-30s|%-8d|%2d-%-2d |\n", tmp->dane.numer, tmp->dane.miejscowosc, tmp->dane.branza, tmp->dane.liczba_p, tmp->dane.godzina_o, tmp->dane.godzina_z );
pom++;
}
tmp = tmp->next;
}
puts("'---------------'------------------------------'------------------------------'--------'-------'");
if (pom==0)
{
system("cls");
puts("Brak takich sklepow");
}
free(miejscowosc);
getchar();
}
//Usuwanie ca³ej listy
void usun_liste(Sklep **head)
{
Sklep *tmp;
while (*head != NULL)
{
tmp = *head;
*head = (*head)->next;
if (tmp->dane.numer)
free(tmp->dane.numer);
if (tmp->dane.branza)
free(tmp->dane.branza);
if (tmp->dane.miejscowosc)
free(tmp->dane.miejscowosc);
if (tmp->dane.liczba_p)
free(tmp->dane.liczba_p);
if (tmp->dane.godzina_o)
free(tmp->dane.godzina_o);
if (tmp->dane.godzina_z)
free(tmp->dane.godzina_z);
free(tmp);
}
}
//Usuwanie wybranego elementu
void usuwan_wybrany_element(Sklep **head)
{
Sklep *tmp, *pom;
long int numer;
system("cls");
puts("Podaj numer sklepu: ");
scanf("%ld", &numer);
tmp = wyszukaj_element_numer(*head, numer);
if (tmp == NULL)
{
puts("Nie ma takiego sklepu");
getchar();
}
else
{
if (tmp == *head)
{
*head = (*head)->next;
if (tmp->dane.numer)
free(tmp->dane.numer);
if (tmp->dane.branza)
free(tmp->dane.branza);
if (tmp->dane.miejscowosc)
free(tmp->dane.miejscowosc);
if (tmp->dane.liczba_p)
free(tmp->dane.liczba_p);
if (tmp->dane.godzina_o)
free(tmp->dane.godzina_o);
if (tmp->dane.godzina_z)
free(tmp->dane.godzina_z);
free(tmp);
}
else
{
pom = *head;
while ((strcmp(pom->next->dane.miejscowosc, tmp->dane.miejscowosc) != 0))
pom = pom->next;
pom->next = tmp->next;
if (tmp->dane.numer)
free(tmp->dane.numer);
if (tmp->dane.branza)
free(tmp->dane.branza);
if (tmp->dane.miejscowosc)
free(tmp->dane.miejscowosc);
if (tmp->dane.liczba_p)
free(tmp->dane.liczba_p);
if (tmp->dane.godzina_o)
free(tmp->dane.godzina_o);
if (tmp->dane.godzina_z)
free(tmp->dane.godzina_z);
free(tmp);
}
}
}
//Menu g³ówne
void menu(Sklep *head, Branza_list *head2)
{
char i;
do
{
system("cls");
printf("1. Dodaj sklep do bazy.\n");
printf("2. Wyszykaj sklep o podanym numerze.\n");
printf("3. Wyszukaj sklepy o podanej liczbie pracownikow.\n");
printf("4. Wyszukaj sklepy o podanych godzinach otwarcia.\n");
printf("5. Wyszukaj sklepy znajdujacy sie w podanej miejscowosci.\n");
printf("6. Wyswietl liste branzowa\n");
printf("7. Usun liste\n");
printf("8. Usun wybrany sklep z bazy\n");
printf("0. Wyjscie\n\n");
printf("Twoj wybor: ");
i = getchar();
getchar();
if (i == '1')
{
dodaj_sklep(&head, &head2);
getchar();
}
else if (i == '2') wyswietl_element_numer(head);
else if (i == '3') wyswietl_element_liczba_p(head);
else if (i == '4') wyswietl_element_godziny(head);
else if (i == '5') wyswietl_element_miejscowosc(head);
else if (i == '6') wyswietlanie_listy(head);
else if (i == '7')
{
usun_liste(&head);
getchar();
}
else if (i == '8')
{
usuwan_wybrany_element(&head);
getchar();
}
}
while (i != '0');
}
int main()
{
Sklep *head = NULL;
Branza_list *head2 = NULL;
char el_staly[]= {"Piekarnia"};
dodaj_branze_const(&head2, el_staly);
menu(head, head2);
return 0;
}