PROBLEM Z FUNKCJAMI PROGRAMU

0

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ć:

  1. dodawanie zabytku
  2. usuwanie zabytku
  3. sortowanie wg nazwy
  4. 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;
                     }
            } 
0

Macie narzucony C? Jeżeli możesz użyć C++ i nie masz z góry ograniczeń że nie wolno Ci używać stla to na Twoim miejscu zastanowiłbym się nad listą albo vectorem, i użył gotowych funkcji sortujących. Problem z usuwaniem tez od razu odpada.

1 użytkowników online, w tym zalogowanych: 0, gości: 1