Ошибка в методе

Тема в разделе "WASM.BEGINNERS", создана пользователем Luna, 17 май 2010.

  1. Luna

    Luna New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2009
    Сообщения:
    288
    Почему не получается удалить элемент дважды подряд?Метод удаления осуществляется путём перемещения значения последнего элеменнта на место удаляющегося.При этом удаляющийся отпраляется в конец и приобретает значение пустой строки. А с целым числом номеро ничего не остаётся сделать, как присвоить ему 0. Как изменить метод удаления элемента из класса?
    Код (Text):
    1.  
    2. #include<iostream.h>
    3. #include<conio.h>
    4. #include<stdio.h>
    5. #include<string.h>
    6. #define k 4
    7.   int i;
    8.   class telephonebook
    9.   {char name[10];
    10.   int nomer;
    11.   public:
    12.   void set_name(char st[10])
    13.   {strcpy(name,st);}
    14.   void set_nomer(int p)
    15.   {nomer=p;}
    16.   char *get_name()
    17.   {return name;}
    18.   int get_nomer()
    19.   {return nomer;}
    20.  
    21.   void sort_name(telephonebook * ob);
    22.   void search_nomer(telephonebook * ob);
    23.   void new_nomer(telephonebook * ob);
    24.   void delet_nomer(telephonebook * ob);
    25.    
    26.   };
    27.  
    28.  
    29.  
    30.    void  telephonebook::search_nomer(telephonebook * ob)
    31.     {char sss[80];
    32.      cout<<"  vvedite name"<<"\n";
    33.      gets(sss);
    34.      for(i=0;i<k;i++)
    35.        if(strcmp(sss,ob[i].name)==0)
    36.      cout<<"vvedennoe name: "<<ob[i].name<<"  ;nomer telephona="<<ob[i].nomer<<"\n";
    37.      getch(); } ;
    38.  
    39.  
    40.     void  telephonebook::sort_name(telephonebook * ob)
    41.      {char c[80];
    42.     int j,x,p;
    43.     for(j=0;j<k;j++)
    44.       for(i=0;i<k-1;i++)
    45.        {x=strcmp(ob[i].name,ob[i+1].name);
    46.     if(x>0)
    47.      {strcpy(c,ob[i].name);
    48.       strcpy(ob[i].name,ob[i+1].name);
    49.       strcpy(ob[i+1].name,c);
    50.       p=ob[i].nomer;
    51.       ob[i].nomer=ob[i+1].nomer;
    52.       ob[i+1].nomer=p;  }
    53.        }
    54.     cout<<"\n"<<"posle sortirjvki: "<<"\n";
    55.     for (i=0;i<k;i++)
    56.       cout<<ob[i].name<<"  "<<ob[i].nomer<<"\n";
    57.       getch();
    58.       } ;
    59.  
    60.      void telephonebook::delet_nomer(telephonebook * ob)
    61.     {int zz;
    62.      
    63.      cout<<"vvedite nomer of name"<<"\n";
    64.      cin>>zz;
    65.      cout<<"\n";
    66.      if (zz>k)
    67.        cout<<"error";
    68.      else
    69.        for(i=0;i<k;i++)
    70.       if(i==zz)
    71.         {strcpy(ob[i].name,"  ");
    72.         strcpy(ob[i].name,ob[k-1].name);
    73.         strcpy(ob[k-1].name,"  ");
    74.         ob[i].nomer=ob[k-1].nomer;
    75.         }
    76.  
    77.  
    78.        for(i=0;i<k-1;i++)
    79.       cout<<ob[i].name<<"  "<<ob[i].nomer<<"\n";
    80.       getch();
    81.     }  ;
    82.  
    83.    void telephonebook::new_nomer(telephonebook * ob)
    84.    {char st[80];int q;
    85.     cout<<"vvedite name i nomer:"<<"\n";
    86.  
    87.       for( i=k-1; i<k; i++)
    88.  
    89.   {gets (st);
    90.   ob[i].set_name(st);
    91.   cin>>q;
    92.   ob[i].set_nomer(q);}
    93.  
    94.  
    95.  
    96.     for(i=0;i<k;i++)
    97.   cout<<"\n"<<ob[i].get_name()<<"  "<<ob[i].get_nomer();
    98.   getch();
    99.  
    100.  
    101.     }  ;
    102.  
    103.  
    104.  
    105.   void main()
    106.   {
    107.  
    108.   clrscr();
    109.   char str[10];
    110.   int b;
    111.   telephonebook obj[k];
    112.  
    113.    
    114.   cout<<"vvedite name i nomer:"<<"\n";
    115.  
    116.  
    117.   for( i=0; i<k-1; i++)
    118.  
    119.   {gets (str);
    120.   obj[i].set_name(str);
    121.   cin>>b;
    122.   obj[i].set_nomer(b);
    123.   }
    124.   for(i=0;i<k-1;i++)
    125.   cout<<"\n"<<obj[i].get_name()<<"  "<<obj[i].get_nomer();
    126.   getch();
    127.  
    128.  
    129.  
    130.  
    131.   char ch,f[6];
    132.       while (ch!='5')
    133.       {
    134.       cout<<"\n"<<"  menu:"<<"\n";
    135.       cout<<"1-dobavlenie"<<"\n";
    136.       cout<<"2-poisk"<<"\n";
    137.       cout<<"3-sort"<<"\n";
    138.       cout<<"4-udalenie"<<"\n";
    139.       cout<<"5=vichod"<<"\n";
    140.        ch=getch();
    141.        switch(ch)
    142.        {case '1': obj[i].new_nomer(obj); break;
    143.     case '2': obj[i].search_nomer(obj); break;
    144.     case '3': obj[i].sort_name(obj); break;
    145.     case '4': obj[i].delet_nomer(obj); break;
    146.  
    147.     };
    148.     };
    149.   }
     
  2. Dian

    Dian Member

    Публикаций:
    0
    Регистрация:
    19 июн 2008
    Сообщения:
    222
    Почему бы это по нормальному не сделать?

    (запись - записью, а список - списком (напр std::list) )
     
  3. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    Luna
    Во-первых, вы же программируете на C++? Так зачем подключать conio.h stdio.h string.h, если они относятся с Си?