Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2011, 19:50   #1
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию Билдер изменяет значение переменно

в общем прошлый проблемы свои решил, но возникла еще одна проблема
у меня билдер изменяет значение переменной. В общем количество записей у меня храниться в файле, после чего я их считываю вместе с этим количеством записей, добавляю новую, но переменная которая отвечает у меня за это количество не изменяется, т.е. не инкрементируется, и потом при сохранении все этого добра в файл, у меня сохраняются только добавленные, то, что было в файле до этого просто удаляется. вот собственно код:
это инициализация из файла
Код:
Satan(){
                int who=0;
                ifstream base;
                base.open("base.dat");
                        if(!base){exit(1);}
                base>>n;
                        for(int i=1;i<=n;i++){
                                base>>who;
                                        switch(who){
                                                case 0:g[i]=new CPeople(base);break;
                                                case 1:g[i]=new CPlant(base);break;
                                        }
                        }
                base.close();
        }
переменная n - глобальная, и изначально инициализируется 0.
Функция добавления:

Код:
String AddPeople(string newstreet,string newhouse,string newphone,string newname,string newsname,string newotch,string newroom)
        {
                bool f=false;
                if(newstreet!=""&&newhouse!=""&&newphone!=""&&newname!=""&&newsname!=""&&newotch!=""&&newroom!="")
                {
                        g[n++]=new CPeople(newstreet,newhouse,newphone,newname,newsname,newotch,newroom);
                        f=true;
                }
                if(f==true)
                {
                        f=false;
                        return "\n Добавлен ";
                }else return "\n Ошибка";

        }
сохранение обратно в файл:
Код:
   void SaveAll()
        {
                ofstream sbase;
                        sbase.open("base.dat");
                sbase<<n<<"\n";
                        for(int i=1;i<=n;i++){
                                g[i]->Save(sbase);
                        }
                sbase.close();
        }
CodeNOT вне форума Ответить с цитированием
Старый 04.01.2011, 20:07   #2
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию

вот полностью код, чтоб уж точно было видно, что n у меня нигде не обнуляется :
Код:
#include <string>
#include <fstream>
using namespace std;
int n=0;
//------êëàññ CGeneral------------
class CGeneral
{
        protected:
               string street,house,phone;
               string GetStreet()
                {
                        return  street;
                }
                string GetHouse()
                {
                        return house;
                }
                string GetPhone(){
                        return phone;
                }
                void SetStreet(string x)
                {
                        street=x;
                }
                void SetHouse(string x)
                {
                        house=x;
                }
                void SetPhone(string x)
                {
                        phone=x;
                }
        public:
                __property string STREET={read=GetStreet,write=SetStreet};
                __property string HOUSE={read=GetHouse,write=SetHouse};
                __property string PHONE={read=GetPhone,write=SetPhone};
                CGeneral(ifstream &base)
                {
                        string x;
                        base>>x;
                        STREET=x;
                        base>>x;
                        HOUSE=x;
                        base>>x;
                        PHONE=x;
                }
                CGeneral(string newstreet,string newhouse,string newphone)
                {
                        STREET=newstreet;
                        HOUSE=newhouse;
                        PHONE=newphone;
                }
                virtual void Save(ofstream &sbase){};
};
//------------------------êëàññ CPeople--------------------------------------
class CPeople:public CGeneral
{
        protected:
                string name,sname,otch,room;
                string GetName()
                {
                        return name;
                }
                string GetSName()
                {
                        return sname;
                }
                string GetOtch()
                {
                        return otch;
                }
                string GetRoom()
                {
                        return room;
                }
                void SetName(string x)
                {
                        name=x;
                }
                void SetSName(string x)
                {
                        sname=x;
                }
                void SetOtch(string x)
                {
                        otch=x;
                }
                void SetRoom(string x)
                {
                        room=x;
                }
        public:
                __property string NAME={read=GetName,write=SetName};
                __property string SNAME={read=GetSName,write=SetSName};
                __property string OTCH={read=GetOtch,write=SetOtch};
                __property string ROOM={read=GetRoom,write=SetRoom};
        CPeople(ifstream &base):CGeneral(base)
        {
                string x;
                base>>x;
                NAME=x;
                base>>x;
                SNAME=x;
                base>>x;
                OTCH=x;
                base>>x;
                ROOM=x;
        }
        CPeople(string newstreet,string newhouse,string newphone,string newname,string newsname,string newotch,string newroom):CGeneral(newstreet,newhouse,newphone)
        {
                NAME=newname;
                SNAME=newsname;
                OTCH=newotch;
                ROOM=newroom;
        }
        void  Save(ofstream &sbase)
        {
                sbase<<"0 "<<STREET<<" "<<HOUSE<<" "<<PHONE<<" "<<NAME<<" "<<SNAME<<" "<<OTCH<<" "<<ROOM<<"\n";
        }
};
CodeNOT вне форума Ответить с цитированием
Старый 04.01.2011, 20:07   #3
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию

Код:
//-------------------êëàññ CPlant------------------------------
class CPlant:public CGeneral
{
        protected:
                string pname;
                string GetPname()
                {
                        return pname;
                }
                void SetPname(string x)
                {
                        pname=x;
                }
        public:
                __property string PNAME={read=GetPname,write=SetPname};
                CPlant(ifstream &base):CGeneral(base)
                {
                        string x;
                        base>>x;
                        PNAME=x;
                }
                CPlant(string newstreet,string newhouse,string newphone,string newpname):CGeneral(newstreet,newhouse,newphone)
                {
                        PNAME=newpname;
                }
                 void  Save(ofstream &sbase)
        {
                sbase<<"0 "<<STREET<<" "<<HOUSE<<" "<<PHONE<<" "<<PNAME<<"\n";
        }
};
//--------------êëàññ Satan-----------------------------------
class Satan{
        public:
                CGeneral *g[1000];

        Satan(){
                int who=0;
                ifstream base;
                base.open("base.dat");
                        if(!base){exit(1);}
                base>>n;
                        for(int i=1;i<=n;i++){
                                base>>who;
                                        switch(who){
                                                case 0:g[i]=new CPeople(base);break;
                                                case 1:g[i]=new CPlant(base);break;
                                        }
                        }
                base.close();
        }
        String AddPeople(string newstreet,string newhouse,string newphone,string newname,string newsname,string newotch,string newroom)
        {
                bool f=false;
                if(newstreet!=""&&newhouse!=""&&newphone!=""&&newname!=""&&newsname!=""&&newotch!=""&&newroom!="")
                {
                        g[n++]=new CPeople(newstreet,newhouse,newphone,newname,newsname,newotch,newroom);
                        f=true;
                }
                if(f==true)
                {
                        f=false;
                        return "\n ×åëîâåê äîáàâëåí ";
                }else return "\n Îøèáêà äîáàâëåíèÿ";

        }
        void SaveAll()
        {
                ofstream sbase;
                        sbase.open("base.dat");
                sbase<<n<<"\n";
                        for(int i=1;i<=n;i++){
                                g[i]->Save(sbase);
                        }
                sbase.close();
        }
};
//---------------------------------------------------------------------------
Satan *devil=new Satan();
CodeNOT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на С++ Билдер ahatana Помощь студентам 1 08.10.2010 13:28
Перевод переменно типа TCaption в тип TPersistent? Memfis1992 Общие вопросы Delphi 3 16.06.2010 19:04
Портативный С++ Билдер Syltan Общие вопросы C/C++ 0 17.11.2009 22:50
Не работает Билдер!:( freedom_fighter Помощь студентам 0 03.05.2009 22:28