Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Как добавить информацию в класс


Автор: AleksDDem 2.6.2007, 15:35
здравствуйте....  помогите   переделать  данную  прогу

#include <iostream>
#include <string>
struct boxer
{
    std::string m_name;
    std::string m_surname;
    int m_wins_count;
    int m_defeats_count;
    int m_weight;
    int m_height;
    boxer(const std::string& name, const std::string& surname, int wins_count, int defeats_count, int weight, int height):m_name(name), m_surname(surname), m_wins_count(wins_count), m_defeats_count(defeats_count), m_weight(weight), m_height(height){}
};
const int SIZE = 4;
class manager
{
private:
    boxer* boxer_arr[SIZE];
public:
    void display_boxer(int num)
    {
        std::cout << "Name: " << boxer_arr[num]->m_name << std::endl;
        std::cout << "Surname: " << boxer_arr[num]->m_surname << std::endl;
        std::cout << "Number of wins: " << boxer_arr[num]->m_wins_count << std::endl;
        std::cout << "Number of defeats: " << boxer_arr[num]->m_defeats_count << std::endl;
        std::cout << "Wight: " << boxer_arr[num]->m_weight << std::endl;
        std::cout << "Height: " << boxer_arr[num]->m_height << std::endl;
    }
    manager()
    {
        boxer_arr[0] = new boxer("Mike", "Taison", 49, 4, 98, 180);
        boxer_arr[1] = new boxer("Vladimir", "Klichko", 42, 6, 110, 200);
        boxer_arr[2] = new boxer("Vitaliy", "Klichko", 39, 4, 102, 194);
        boxer_arr[3] = new boxer("lennox", "lewis", 47, 1, 112, 198);
    }
    ~manager()
    {
        for (int i = 0; i < SIZE; ++i) delete boxer_arr[i];
    }
};
int main(int argc, char* argv[])
{    
    int num = 0;
    manager boxers;
    std::cout << "Enter the number of boxer to show: ";
    std::cin >> num;
    boxers.display_boxer(num);
    std::cin.get();
    return 0;
}



В  данной  программе  уже   изначально  храняться  данные о  боксерах  в   классе.  
Помогите   сделать  так   чтобы  данные   можно  было  удалять,  добавлять  и   изменять  в  классе! 

заранее очень  благодарен!

Автор: Greeen 2.6.2007, 15:53
Надо реорганизовать класс менеджера, т.к. такое хранение записей никуда не годится.

Добавлено @ 15:55
Юзаем, например, vector<boxer> для хранения и STL'ные алгоритмы для поиска и удаления итемов.

Добавлено @ 15:55
В поиск и в гугл если не знаешь STL.

Автор: AleksDDem 3.6.2007, 01:57
Я   с  твоих  слов   ваще  ниче  не  догнал! smile 
А  что  такое  STL?

Автор: apook 3.6.2007, 07:39
Тебе надо чтоб из программы добавить или как? 
если просто заполнить поля из файла, если надо поменять то в файле меняешь да и все или добавляешь или удаляешь так удобней

Автор: AleksDDem 3.6.2007, 10:14
ну  можно  сделать  чтобы  информация  из  файла  добавлялась.

например  файл  содержить  такую  информацию
Mike, Taison, 49, 4, 98, 180
Vladimir, Klichko, 42, 6, 110, 200
Vitaliy, Klichko, 39, 4, 102, 194
lennox, lewis, 47, 1, 112, 198
и  при  запуске   программы  она  автоматически  добавляеться   в   класс

Автор: jonie 3.6.2007, 11:24
ну и перегрузи для класса каой-нибудь
Код
friend istream& operator>>(istream& is,MyClass& rhs){/*....считываем файл "внутрь" своего класса MyClass, при ошибках скажем выбрасываешь исключение...*/}

и в основной программе тогда получается нечто вроде:
Код

...........
MyClass container;
istream infile("filename.ext");
if(infile){
 try{
  infile>>container;
 }
 catch(...){
   cerr<<"Invalid file foromat OR unhandled error(";
   infile.close();
 }
 infile.close();
}
...........

Цитата

А  что  такое  STL?
Standart Template Library
Скажем книжка http://e-jonie.narod.ru/files/Djosutis_Cpp_STL.rar поможет
или http://e-jonie.narod.ru/files/Ammarel_STL_dlua_programmistov_na_Cpp.rar

Автор: apook 3.6.2007, 13:36
Ну тогда держи
Код

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>

#include <fstream.h>
#include <iostream.h>
#include <iomanip.h>

#define MAXSZ 1024


using namespace std;

class boxer
{
public:
    boxer();

struct BD
{ 
    char name[ 80 ];    //имя
    char surname[ 80 ]; //Фамилия
    int wins;           //побед
    int defeats;        //поражений
    int weight;         //вес 
    int height;         //рост
    };
    void BDprint();

protected:
    BD *data;
    int SZ;
    fstream bd_file;
    };

boxer::boxer()
{
char buf[ MAXSZ ], *p;
int i;

bd_file.open( ".\\Boxer.DAT" );
if( !bd_file )
{ 
    perror( "Error: Cant open file Boxer.DAT" );
    exit( 1 ); 
    }

bd_file.seekp( 0, ios::beg );
for( SZ=0; bd_file.getline(buf, MAXSZ); )
{
    if( buf[ 0 ]!='\0' )
        ++SZ;
    }

data=new BD[ SZ ];

bd_file.clear();
bd_file.seekp( 0, ios::beg );
for( i=0; !bd_file.eof(); i++ )
{
    if( bd_file.eof() )
        break; 

    bd_file >> data[ i ].name >> data[ i ].surname >> data[ i ].wins
        >> data[ i ].defeats >> data[ i ].weight >> data[ i ].height;
    }
}


void boxer::BDprint()
{
int i, c;
clrscr();
for( i=0; i<SZ; i++ )
    cout << i+1 << ". " << data[ i ].name << " " << data[ i ].surname << endl;
cout << endl << i+1 << ". Exit" << endl;
c=i;

cout << "\nEnter number: ";
cin >> i;
--i;

if( i==c )
    return;

cout << "Name: " << data[ i ].name << endl
     << "SurnAme: " <<  data[ i ].surname << endl
     << "Wins: " << data[ i ].wins << endl
     << "Defeats: " << data[ i ].defeats << endl
     << "weight: " << data[ i ].weight << endl
     << "Height: " << data[ i ].height << endl;

getch();
return boxer::BDprint();
}


void main()
{
boxer BOX;


BOX.BDprint();


return;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)