Witam serdecznie.
Mam mały problem z programem. Mianowicie mam napisać program który będzie baza danych zabytków w europie. Program ma zawierać:
- dodawanie zabytku
- usuwanie zabytku
- sortowanie wg nazwy
- edycje po wpisaniu wybranej nazwy zabytku
Poniżej załączam kod programu
Problem mam z usuwaniem zabytku z bazy. mam napisana funkcję ale po wybraniu pozycji do usunięcia program wiesza się.
Podobny problem mam z edytowaniem po wybraniu elementu jaki chcę edytować program zawiesza się bądź przeskakuje do menu.
Prosiłbym tez o pomoc w napisaniu do programu funkcji sortowania wg nazwy bo mam z tym problem.
Ogólnie jestem początkujący w tej dziedzinie stąd prośba o pomoc.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
void nazw_zab(void);
void wlasciciel(void);
void rok_powstania(void);
void ulica(void);
void miasto(void);
void kod(void);
void panstwo(void);
int i,n,nad;
struct rekord{ // struktura rekordu
char nz[50];//nazwa zabytku
char wl[50];//właściciel
char rp[4];//rok powstania
char ad[30];//ulica
char mi[30];//miasto
char kp[6];//kod pocztowy
char pa[30];//państwo
int fl;//flaga
};
struct rekord ** zabytek=0;
int main() //Baza danych ograniczona do 5 wprowadzonych danych
{
nad=0;
char k[3];//numer opcji
start:
printf("\n\n");
printf("----------------------------------------------------------------------------\n");
printf("............:: WITAJ W PROGRANIE BAZA DANYCH ZABYTKOW EUROPY ::.............\n");
printf("----------------------------------------------------------------------------\n");
printf("\n Autor: Marcin Aksjonow \n");
printf("\n\n");
printf(" MENU PROGRAMU:\n");
printf("-----------------------\n");
printf("\n");
printf("1. Dodawanie zabytku\n");
printf("2. Wyswietl wprowadzone zabytki\n");
printf("3. Edycja wskazanego po nazwie zabytku \n");
printf("4. Usuniecie wskazanego zabytku\n");
printf("5. Sortowanie wg. nazwy zabytku\n");
printf("6. Wyjscie z programu\n");
printf("\n");
printf("-----------------------\n");
printf("\n");
printf("Wybierz opcje: ");
scanf("%s",k);
printf("\n");
//sprawdzanie k start
i=0;
while(k[i]!='\0')
++i;
if (i>1)
{
printf ("Wybrana cyfra jest nie prawidłowa. Wybierz jeszcze raz.\n");
goto start;
}
if('0'<=k[0] && k[0]<='9')
;
else
{
printf("Wybrana cyfra jest nie prawidłowa. Wybierz jeszcze raz.\n");
goto start;
}
if(k[0]<'1' || k[0]>'6')
{
printf("Wybrana cyfra jest nie prawidłowa. Wybierz jeszcze raz.a\n");
goto start;
}
//sprawdzanie k end
switch(k[0]){
case '1':
{
//dopisywanie rekordow
wpis:
int zab;//liczba zabytków ktore ma być wpisana
printf("-------------------------------------------------\n");
printf("WPROWADZANIE DANYCH:\n");
printf("-------------------------------------------------\n\n");
printf("Ile zabytkow chcesz wprowadzic?? (Max 5 pozycji): ");
scanf("%d",&zab);
//sprawdzanie zab start
if(0<=zab && zab<=9)
;
else
{
printf("\nWprowadzona wartość jest niepoprawna\n");
goto wpis;
}
if(zab>5)
{
printf("\nWprowadzona wartość jest niepoprawna. Limit wynosi 5\n");
goto wpis;
}
if(zab<1)//warunek jak sie wpisze 0
{
printf("\nWybrales 0 czyli nie chcesz wprowadzac zadnych danych.\n");
goto start;
}
// sprawdzanie os end
zabytek= (struct rekord **)calloc(zab*sizeof(struct rekord*),1); //przyznanie pamieci
fflush(stdin);// czyszczenie buforu
for(n=0; n<zab; n++)// petla dopisujaca zabytki
{
zabytek[n]=(struct rekord *)calloc(sizeof(struct rekord),1);
if(zabytek[n]->fl!=1)
{
zabytek[n]->fl=1;
nazw_zab();
wlasciciel();
rok_powstania();
ulica();
miasto();
kod();
panstwo();
++nad;
printf("%d",n);
}
}
}
printf("\n");
system("pause");
goto start;
case '2':
//wypisanie zawartosci bazy
{
if(n!=0)
{
printf("-------------------------------------------------\n");
printf("ZAWARTOSC BAZY ZABYTKI:\n");
printf("-------------------------------------------------\n");
for(n=0; n<nad; n++)
{
if(zabytek[n]->fl=1)
{
printf("\n");
printf("-------------------------------------------------\n");
printf("\n");
printf("Nazwa Zabytku: %s\n",zabytek[n]->nz);
printf("Wlasciciel Zabytku: %s\n", zabytek[n]->wl);
printf("Rok Powstania: %s\n",zabytek[n]->rp);
printf("Ulica: %s\n",zabytek[n]->ad);
printf("Miasto: %s\n", zabytek[n]->mi);
printf("Kod: %s\n", zabytek[n]->kp);
printf("Panstwo: %s\n", zabytek[n]->pa);
}
}
printf("\n");
system("pause");
goto start;
}
else
{
printf("\nW bazie nie ma zadnych rekordow\n");
printf("\n");
system("pause");
goto start;
}
break;
}
case '3':
//edycja wskazanego rekordu
char l[1];
{
if(nad!=0)
{
printf("-------------------------------------------------\n");
printf("EDYCJA DANYCH:\n");
printf("-------------------------------------------------\n\n");
printf("Ktory wpis chcesz edytowac podaj numer: ");
scanf("%d",&n);
printf("\n\nKtora opcje chcesz edytowac\n\n");
printf("0.Nazwa zabytku\n1.Wlasciciel\n2.Rok powstania\n3.Ulica\n4.Miasto\n5.Kod\n6.Panstwo\n");
printf("\n");
printf("Wybierz opcje: ");
scanf("%s",l);
printf("\n");
switch(l[0]){
case'0':{
nazw_zab();
break;
}
case'1':{
wlasciciel();
break;
}
case'2':{
rok_powstania();
break;
}
case'3':{
ulica();
break;
}
case'4':{
miasto();
break;
}
case'5':{
kod();
break;
}
case'6':{
panstwo();
break;
}
}
printf("\n");
system("pause");
goto start;
}
else{
printf("\nBrak wpisow\n");
printf("\n");
system("pause");
goto start;}
break;
}
case '4':
//usuniecie danego rekordu
{if(n!=0)
{
printf("-------------------------------------------------\n");
printf("USUWANIE DANYCH:\n");
printf("-------------------------------------------------\n");
printf("\nKtory wpis chcesz usunac\n");
scanf("%d",i);
zabytek[i]->fl='0';
printf("\n");
system("pause");
goto start;
}
else{
printf("W bazie nie ma wpisow\n");
printf("\n");
system("pause");
goto start;
}
}
case '6':
//zakoncz program
break;
};//koniec switch
}//koniec main
//funkcje
//nazwa zabytku
void nazw_zab(void)
{
nazw_zab:
printf("\n");
printf("Podaj Nazwe Zabytku: ");
gets(zabytek[n]->nz);
i=0;
if(i>50)
{
printf("\nTa baza nie obsługuje nazw dluzszych niz 50 znakow\n");
goto nazw_zab;
}
}
//wlasciciel
void wlasciciel(void)
{
wlasciciel:
printf("\n");
printf("Podaj Imie i Nazwisko lub Nazwe Instytucji bedacej wlascicielem zabytku:\n");
gets(zabytek[n]->wl);
i=0;
if(i>50)
{
printf("\nTa baza nie obsługuje nazw dluzszych niz 50 znakow\n");
goto wlasciciel;
}
}
//rok powstania
void rok_powstania(void)
{
rok_powstania:
printf("\nPodaj rok powstania zabytku: ");
gets(zabytek[n]->rp);
i=0;
if(i>4)
{
printf("\nTa baza nie obsługuje nazw dluzszych niz 4 znaki\n");
goto rok_powstania;
}
}
//adres
//ulica
void ulica(void)
{
ulica:
printf("\nPodaj ulice: ");
gets(zabytek[n]->ad);
i=0;
if(i>30)
{
printf("\nTa baza nie obsługuje nazw dluzszych niz 30 znakow\n");
goto ulica;
}
}
//miejscowosc
void miasto(void)
{
miasto:
printf("\nPodaj miasto lub wies: ");
gets(zabytek[n]->mi);
i=0;
if(i>30)
{
printf("\nTa baza nie obsługuje nazw dluzszych niz 30 znakow\n");
goto miasto;
}
}
//panstwo
void panstwo(void)
{
panstwo:
printf("\nPodaj nazwe Panstwa: ");
gets(zabytek[n]->pa);
i=0;
if(i>30)
{
printf("\nTa baza nie obsługuje nazw dluzszych niz 30 znakow\n");
goto panstwo;
}
}
//kod
void kod(void)
{
kod:
printf("\nPodaj kod pocztowy: ");
gets(zabytek[n]->kp);
i=0;
if(i>6)
{
printf("\nTa baza nie obsługuje nazw dluzszych niz 6 znakow\n");
goto kod;
}
}