Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
3 / 3 / 0
Регистрация: 22.12.2010
Сообщений: 38

сохранение данных об объектах при закрытии программы

25.09.2011, 12:17. Показов 2149. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане! У меня возникла следующая проблема: мне нужно при закрытии прораммы сохранить все данные об объектах, а точнее о массивах объектов,причем каждый из объектов содержит по несколько атрибутов. Я это пыталась сделать следующим образом: пыталась перезаписать мой массив объектов в двумерный массив строк, при выходе этот массив сохранялся бы в файл, а при запуске программы этот массив бы считывался и его элемнты присваивались бы моему исходному массиву объектов .(массив строк: элементы массива -это атрибуты объектов). Но так сделать у меня не получается, у меня есть подозрение, что так в принципе делать нельзя.Подскажите, пожалуйста, как быть?!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.09.2011, 12:17
Ответы с готовыми решениями:

Сохранение в текстовом документе при закрытии программы
Начал пользоваться программкой C++Builder 6.В визуальном редакторе почти разобрался.А с кодами пока очень плохо понимаю куда и что...

Сохранение данных при закрытии программы
Всем Добрый вечер! Прошу сразу не пинать меня я начинающий программер еще много не понимаю! Суть вопроса! Есть обычная...

Сохранение текста при закрытии программы
Как указать все созданные текстбоксы между (filename, .... .text)? if (saveFileDialog1.ShowDialog() ==...

8
 Аватар для pomkalk
365 / 247 / 24
Регистрация: 03.04.2011
Сообщений: 558
Записей в блоге: 1
25.09.2011, 12:38
Код нужен! что ты там наделал, и с чем
0
3 / 3 / 0
Регистрация: 22.12.2010
Сообщений: 38
25.09.2011, 13:02  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Array<Tovar> B;
 AnsiString a[3][100];
 
void __fastcall TForm1::Button5Click(TObject *Sender)
{     for(int i=0;i<B.GetSize();i++)
{ a[i][0]=B[i].GetVid();
  a[i][1]=IntToStr(B[i].GetKolichestvo());
  a[i][2]=IntToStr(B[i].GetPolka());
  a[i][3]=B[i].GetFirma();
}
   n=B.GetSize();
 
 FILE *F;
  F=fopen("test.txt","w");
for(int i=0;i<n;i++)
for(int j=0;j<4;j++)
scanf("%s",&a[i][j]);
fprintf(F,"%d\n",n);
for(int i=0;i<n;i++)
for(int j=0;j<4;j++)
fprintf(F,"%s ",a[i][j]);
fprintf(F,"\n");
    fclose(F);
 
 
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button6Click(TObject *Sender)
{   FILE *F;
  F=fopen("test.txt","r");
   fscanf(F,"%d",&n);
   for(int i=0;i<n;i++)
   for(int j=0;j<4;j++)
     fscanf(F,"%s",&a[i][j]);
 
    fclose(F);
    B.SetSize(n);
       for(int i=0;i<n;i++)
 { B[i].SetVid(a[i][0]);
  B[i].SetKolichestvo(StrToInt(a[i][1]));
  B[i].SetPolka(StrToInt(a[i][2]));
  B[i].SetFirma(a[i][3]);
}
    fclose(F);
   ListBox1->Items->Clear();
   for(int i=0;i<B.GetSize();i++)
   ListBox1->Items->Add("вид товара-"+B[i].GetVid()+';'+' '+"количество-"+IntToStr(B[i].GetKolichestvo())+';'+' '+"номер полки-"+IntToStr(B[i].GetPolka())+';'+' '+"фирма-"+B[i].GetFirma());
   ListBox1->ItemIndex=-1;
}

это часть кода, это пробный вариант, поэтому данные сохраняются принажатии на кнопку 5, а считываются при нажатии на кнопку 6

Добавлено через 2 минуты
каждый объект В -это товар, со следующими атрибутами:название, количество, полка хранения и поставщик. B[i]- это массив товаров.
0
 Аватар для SalterOk
117 / 114 / 10
Регистрация: 02.06.2011
Сообщений: 280
25.09.2011, 13:49
Ну а что именно не работает? Кажется в твоем коде много ошибок (в основном выход за граници массива). Еще бы на всякий случай показать описание твоего Tovar
0
3 / 3 / 0
Регистрация: 22.12.2010
Сообщений: 38
25.09.2011, 16:13  [ТС]
Salterok, вы совершенно правы ,у меня как раз и проблемы с выходом за границы массива.....я не могу сохранить в файл больше чем три товара, а при считывании происходит ошибка при присвоениии атрибутам объекта элементов массива, я вот решила, что так делать нельзя, но как сделать по-другому я не знаю ((

ниже представлен класс Товар:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class Tovar
{ private:  int kolichestvo, polka;
            AnsiString firma,vid;
 public:  Tovar() { kolichestvo=0; polka=3; firma="Соленья"; vid="мука"; }
          void SetKolichestvo(int K) { kolichestvo=K; }
          int GetKolichestvo() { return kolichestvo;}
          void SetPolka(int P) { polka=P; }
          int GetPolka() { return polka;}
          void SetFirma(AnsiString post) { firma=post;}
          AnsiString GetFirma() { return firma ;}
          void SetVid(AnsiString name) { vid=name;}
          AnsiString GetVid() { return vid ;}
 };
Далее шаблон массива объектов, так как в моей программе таких массиво несколько:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
template<class T>
 class Array
 {   private: int dlina;
             T *tip;
             T TIP;
     public:
          Array();
          Array(int size);
          void SetSize(int size);
          int GetSize() { return dlina; };
          T &operator[] (int i);
          T &operator[](int i) const;
          Array &operator=( Array &mas);
          void ArrayClear();
          void AddElement(T &a);
          void DelElement(int n);
          void SetIzmenit(int k);
          int GetIzmenit() { return TIP};
          void Del(){ delete [] tip;} ;
          ~Array();
 };
 
  template<class T>
Array<T>::Array()
{  dlina=1;
   tip=new T[dlina];
}
 
   template<class T>
Array<T>::Array(int size)
{   if (size>=0&&size<1000)
 {  dlina=size;
    tip= new T[dlina];  }
 else Array();
  }
 
   template<class T>
 Array<T>::~Array()
{ delete [] tip; }
 
    template<class T>
 T &Array<T>::operator[] (int i)
{ return tip[i];
   }
 
    template<class T>
 T &Array<T>::operator[](int i) const
{ return tip[i];
 }
 
    template<class T>
 Array<T> &Array<T>::operator=(Array &mas)
{  if (&mas==this) return *this;
   if (n!=mas.GetSize())
 { delete [] tip;
     tip=0;
     dlina=mas.GetSize();
    tip=new T[mas.GetSize()];  }
   for (int i=0;i<dlina;i++)
     tip[i]=mas.tip[i];
  return *this;
 }
 
     template<class T>
 void Array<T>::ArrayClear()
 { delete [] tip;
   tip=new T[dlina];
 
   }
 
    template<class T>
 void Array<T>::AddElement(T &a)
{    int  size=dlina+1;
      T *tip2;
      tip2=new T[size];
      int i;
      for( i=0;i<dlina;i++)
      tip2[i]=tip[i];
      tip2[size-1]=a;
      delete[] tip;
      tip=new T[size];
      dlina=size;
      for(i=0;i<dlina;i++)
      tip[i]=tip2[i];
      delete[] tip2;
 
  }
 
    template<class T>
 void Array<T>::SetIzmenit(int k)
{  
    TIP=tip[k];
  }
 
    template<class T>
 void Array<T>::DelElement(int n)
 {    T *tip2;
      int size=dlina-1;
      tip2=new T[size];
      int i;
      for( i=0;i<n-1;i++)
     { tip2[i]=tip[i];    }
      for (i=n-1;i<(dlina-1);i++)
      tip2[i]=tip[i+1];
      delete[] tip;
      size=dlina-1;
      tip=new T[size];
      dlina=size;
      for(i=0;i<dlina;i++)
      tip[i]=tip2[i];
      delete[] tip2;
      dlina=size;
 }
 
 
   template<class T>
    void Array<T>::SetSize(int size)
{    if(size>0&&size!=dlina)
    { T *tip2;
     tip2=new T[size];
      int i;
      for( i=0;i<dlina;i++)
      tip2[i]=tip[i];
      delete[] tip;
      tip=new T[size];
      dlina=size;
      for(i=0;i<dlina;i++)
      tip[i]=tip2[i];
      delete[] tip2;
     }
 
}
0
 Аватар для SalterOk
117 / 114 / 10
Регистрация: 02.06.2011
Сообщений: 280
25.09.2011, 16:37
Цитата Сообщение от Iraida Посмотреть сообщение
я не могу сохранить в файл больше чем три товара
ну так..
C++
1
2
3
4
5
6
7
8
9
10
Array<Tovar> B;
AnsiString a[3][100];
 
void __fastcall TForm1::Button5Click(TObject *Sender)
{ for(int i=0;i<B.GetSize();i++)
{ a[i][0]=B[i].GetVid();
a[i][1]=IntToStr(B[i].GetKolichestvo());
a[i][2]=IntToStr(B[i].GetPolka());
a[i][3]=B[i].GetFirma();
}
в описании размер массива 3 по 100 а обращения в программе какраз наоборот.
как вариант поменяй
C++
1
AnsiString a[3][100];
на это
C++
1
AnsiString a[100][4]; //заметь что нужно 100 на 4 а не 100 на 3
и еще - вставляй свой код в теги CPP - так код будет выглядеть красивей и читать намного удобней
0
3 / 3 / 0
Регистрация: 22.12.2010
Сообщений: 38
25.09.2011, 18:56  [ТС]
спасибо,теперь все нормально сохраняет...это все моя невнимательность)))
Но с файла при запуске программы не считывает ( На этой строке выдает ошибку:
C++
1
void SetVid(AnsiString name) { vid=name;}
0
 Аватар для SalterOk
117 / 114 / 10
Регистрация: 02.06.2011
Сообщений: 280
25.09.2011, 22:10
логика программы канеш тебе понятна лучше но кажется у тебя некоректный метод
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
template<class T>
void Array<T>::SetSize(int size)
{ 
if(size>0&&size!=dlina)
  { 
    T *tip2;
    tip2=new T[size];
    int i;
    for( i=0;i<dlina;i++)
    tip2[i]=tip[i];
    delete[] tip;
    tip=new T[size];
    dlina=size;
    for(i=0;i<dlina;i++)
    tip[i]=tip2[i];
    delete[] tip2;
  }
}
что-то здесь не чисто
0
3 / 3 / 0
Регистрация: 22.12.2010
Сообщений: 38
26.09.2011, 14:24  [ТС]
SalterOk, с этим то как раз вроде чисто))) ( это просто у меня такой подход странный) проблема не с размером массива объектов....Проблема при прочтении из файла, мне кажется что где-то с типами элементов массивов я намутила....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.09.2011, 14:24
Помогаю со студенческими работами здесь

Сохранение свойств контроллов на форме при закрытии программы
Мне надо чтобы объекты формы если перезапустить форму оставались как есть,( ну например если написать текст на текстбоксе или вставлять...

Сохранение динамически созданных компонентов программы при ее закрытии
Здравствуйте. Скажите пожалуйста, есть ли способ как-то сохранить результат деятельности программы после её закрытия? Допустим, через...

Динамическое создание кнопки и сохранение при закрытии программы
Здравствуйте, хочу написать программу которая бы создавала кнопку с определенным именем программно(пользователем) и после закрытия...

Сохранение данных из DataGridView при закрытии
Не получается сделать сохранение при закрытии формы, конкретнее не могу найти код на сохранение всех таблиц из datagrid в бд при закрытии...

Сохранение данных в БД в Silverlight при закрытии
Добрый день! Подскажите, как реализовать на Silverlight следующую ситуацию: У меня происходит работа с БД через DataGrid. Как только я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru