Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
TOSHH
Сообщений: n/a
#1

Структуры,бинарные файлы,массивы - C++

09.10.2009, 22:36. Просмотров 727. Ответов 1
Метки нет (Все метки)

Помогите пожалуйста решить такой вопрос:

Подготовить программу,формирующую на основе информации вводимой с клавиатуры,два внешних типизированных файла(бинарные как я понял),содержащих:
-сведения о студентах:состоит из записей,каждая из которых включает 3 поля-фамилия,группы и номера по списку;
-сведения о паролях для работы на ЭВМ:состоит из записей,каждая из которых включает три поля-группы,номера по списку и пароля.

Учесть,что ограничения на размеры файлов отсутствуют,файлы могут быть любой длины.

Вот тут у меня и проблема.Как мне быть с массивом,если не известен его размер заранее,и файл может увеличивать(добавление записей).
Я сделал программу только для определенного размера.Помогите пожалуйста,буду бесконечно благодарен!!!!!
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
#include <iostream>     //подключение стандартого заголовочного файла 
 
using namespace std;    //использование пространтва имен
#include <windows.h>
#include <stdio.h>      //подключение библиотеки для работы с printf() и scanf()
//#include <stdlib.h>     //подключение библиотеки для работы со строковыми функциями
//#include <string>       //подключение библиотеки для работы со строковыми функциями и переменными
#include <conio.h>      //подключение библиотеки для работы с функцией getch
#include <fstream>
#include <iomanip>
#include <cstdlib>
//inline void eatline () {while (cin.get() != '\n') continue; }
 struct Student    //структура данных о студентах
{  
    char family[20];    //фамилия
    char group[20];          //группа
    char password[15];  //пароль
    char number[20];         //номер по списку
};
 
 /*********************************************************************
 *            Г Л О Б А Л Ь Н Ы Е    П Е Р Е М Е Н Н Ы Е              *
 *********************************************************************/
 
  
 char fName1[]="D:\\files\\RES1.bin";  //имя файла с результатами сортировки
     char fName2[]="D:\\files\\RES2.bin";  //имя файла с результатами сортировки
 
 /*********************************************************************
 *              П Р О Т О Т И П Ы   Ф У Н К Ц И Й                     *
 *********************************************************************/
     char* Rus (const char* str);
void capitalization(char c[]);
int read_zap(char * filename,Student * StudGroup,int Quantity1); //функция,обеспечивающая чтение данных их PLANE.TXT и возвращение числа записей 
void output(char * FileName1,char * FileName2,Student * StudGroup); //функция,обеспечивающая вывод данных о самолетах в файл RES1.TXT
void  instruction();
 /*********************************************************************
 *         Г Л А В Н А Я  Ф У Н К Ц И Я  П Р О Г Р А М М Ы            *
 *********************************************************************/
 
void main()
{
    const int M_MAX  = 10;      //максимальное количество полей
    Student  SGroup[M_MAX];//[M_MAX];      //объявление массива AGroup 
    char ex;
   // int NRec=read_zap(fNAME,AGroup,M_MAX); //NRec присваиваем значение(число записей),возвращаемое функцией read_zap  
  
//вызов функций
  instruction();
 cin>>ex;
  if (ex=='y')
    {
    system("cls");
   output(fName1,fName2,SGroup);          //вывод данных в файл RES1.TXT
    }
    else exit(1);
   
}//main()
 
 /*********************************************************************
 *              Р Е А Л И З А Ц И Я     Ф У Н К Ц И Й                 *
 *********************************************************************/
 
//запись результатов в файл RES1.TXT и RES1.TXT
 
void output(char * FileName1,char * FileName2,Student * StudGroup)
{
    
    FILE *fp_out1=NULL;  //объявим указатель на выходной файл
    FILE *fp_out2=NULL;  //объявим указатель на выходной файл
char ch;
int i=0;
int j=0;
int k=0;
 
ifstream fin1;                            //файловый поток ввода
ifstream fin2;  
         fp_out1 = fopen(FileName1,"ab");
  fp_out2 = fopen(FileName2,"ab");
    fseek(fp_out1, 0, SEEK_END);
    int n_record = ftell(fp_out1) / sizeof(Student);
    cout<<Rus("Число записей в списке =")<< n_record;
 
         // fprintf(stderr,"\a\n\tCannot open file %s ! \n\n", FileName1);
 
     //   fprintf(stderr,"\a\n\tCannot open file %s ! \n\n", FileName2);
 
    fin1.open(FileName1, ios::out | ios::binary);  //открыть двоичный файл
 
    if (fin1.is_open())                       //если файл открылся - печать содержимого
    {
        cout <<"\nCurrent content file "<<FileName1<<endl;
        while (fin1.read ((char *) &StudGroup[i], sizeof(Student)))
        {
            cout<< StudGroup[i].family<<" "<<StudGroup[i].group<<" "<<StudGroup[i].password<<" "<< StudGroup[i].number<<"\n";
            i++;
        }
    }
        fin1.close();       //закрыть файл
        i=0;
        fin2.open(FileName2, ios::out | ios::binary);  //открыть двоичный файл
 
    if (fin2.is_open())                       //если файл открылся - печать содержимого
    {
        cout <<"\nCurrent content file "<<FileName2<<endl;
        while (fin2.read ((char *) &StudGroup[i], sizeof(Student)))
        {
            cout<< StudGroup[i].family<<" "<<StudGroup[i].group<<" "<<StudGroup[i].password<<" "<< StudGroup[i].number<<"\n";
            i++;
        }
    }
        fin1.close();       //закрыть файл
    i=0;
    bool b=false;
    bool c=false;
    bool d=false;
    bool f=false;
    //ofstream fout1 (FileName1, ios::out  | ios::app | ios::binary);
    //ofstream fout2 (FileName2, ios::out  | ios::app | ios::binary);
 do
 
 
     {
 
 
         b=false;
         while(b==false)
         {
         cout<<Rus("Введите номер по списку->");
         cin>>StudGroup[i].number;
        
          int lenght1;
         lenght1=strlen(StudGroup[i].number);
          for (j=0; j<=lenght1-1; j++)
     { 
         if(((int) StudGroup[i].number[j]>57) || ((int) StudGroup[i].number[j]<48))
       {   b=false;
            system("cls");
             cout<<"\aError!A number is incorrectly set on a list!\nPlease, make attempt repeat an input again."<<endl;
              system("pause");    //задержка экрана
            system("cls");
          break;
            //exit(1);    //выход из программы
            
       } else b=true;
          }
         } //fwrite(&StudGroup[i], sizeof (Student),1,fp_out1);
         c=false;
         while(c==false)
         {
         cout<<Rus("Введите фамилию студента->");
         cin>>StudGroup[i].family;
        capitalization(StudGroup[i].family);
        
        
 
         int lenght2;
         lenght2=strlen(StudGroup[i].family);
  for (j=0; j<=lenght2-1; j++)
     { 
         if ((int) StudGroup[i].family[j]<65)
         {  c=false;
            system("cls");
            cout<<"\aError!The last name of student is wrong set in a list!\nPlease, make attempt repeat an input again."<<endl;
            
            system("pause");    //задержка экрана
            system("cls");
           break;// exit(1);      //выход из программы
         }
         else if(((int) StudGroup[i].family[j]>90) && ((int) StudGroup[i].family[j]<97)) //|| ((int) AirGroup[i].password[j]>122))))
         { c=false;
            system("cls");
            cout<<"\aError!The last name of student is wrong set in a list!\nPlease, make attempt repeat an input again."<<endl;
                     system("pause");    //задержка экрана
                       system("cls");
            break;//exit(1);      //выход из программы
         }
 
         else if ((int) StudGroup[i].family[j]>122)
 
         {   c=false;
             system("cls");
            cout<<"\aError!The last name of student is wrong set in a list!\nPlease, make attempt repeat an input again."<<endl;
                        system("pause");    //задержка экрана
             system("cls");
           break;// exit(1);      //выход из программы
         } else c=true;
    }
         }// fwrite(&StudGroup[i], sizeof (Student),1,fp_out1);
         d=false;
          while(d==false)
         {
         cout<<Rus("Введите номер группы->");
         cin>>StudGroup[i].group;
         int lenght3;
         lenght3=strlen(StudGroup[i].group);
          for (j=0; j<=lenght3-1; j++)
     { 
         if(((int) StudGroup[i].group[j]>57) || ((int) StudGroup[i].group[j]<48))
       {   d=false;
            system("cls");
            cout<<"\aError!A group is incorrectly set on a list!\nPlease, make attempt repeat an input again."<<endl;
            system("pause");    //задержка экрана
            system("cls");
            break;//exit(1);      //выход из программы
       } else d=true;
          }
          } fwrite(&StudGroup[i], sizeof (Student),1,fp_out1);
          fclose(fp_out1);   // закрываем выходной файл
          f=false;
          while(f==false)
         {
         cout<<Rus("Введите пароль для работы на ЭВМ->");
         cin>>StudGroup[i].password;
        int lenght4;
          lenght4=strlen(StudGroup[i].password);
        
    for (j=0; j<=lenght4-1; j++)
     { 
         if ((int) StudGroup[i].password[j]<48)
         {  f=false;
            system("cls");
            cout<<"\aError!A password is wrong set for work on a computer!\nPlease, make attempt repeat an input again."<<endl;
            system("pause");    //задержка экрана
            system("cls");
            break;//exit(1);      //выход из программы
         }
    else if(((int) StudGroup[i].password[j]>57) && ((int) StudGroup[i].password[j]<65))// || ((int) AirGroup[i].password[j]>90)))
         {f=false;
            system("cls");
            cout<<"\aError!A password is wrong set for work on a computer!\nPlease, make attempt repeat an input again."<<endl;
            system("pause");    //задержка экрана
            system("cls");
            break;//exit(1);      //выход из программы
         }
    else if(((int) StudGroup[i].password[j]>90) && ((int) StudGroup[i].password[j]<97)) //|| ((int) AirGroup[i].password[j]>122))))
         { f=false;
            system("cls");
            cout<<"\aError!A password is wrong set for work on a computer!\nPlease, make attempt repeat an input again."<<endl;
            system("pause");    //задержка экрана
            system("cls");
            break;//exit(1);      //выход из программы
         }
    else if ((int) StudGroup[i].password[j]>122)
 
         {   f=false;
             system("cls");
            cout<<"\aError!A password is wrong set for work on a computer!\nPlease, make attempt repeat an input again."<<endl;
            system("pause");    //задержка экрана
            system("cls");
          break;//  exit(1);      //выход из программы
         } else f=true;
    }
          }     
         // fout1.write((char *) &StudGroup/*[i]*/, sizeof (StudGroup));
          //fout2.write((char *) &StudGroup/*[i]*/, sizeof (StudGroup));
         
           
           fwrite(&StudGroup[i], sizeof (Student),1,fp_out2);
           cout<<Rus("\nИнформация добавлена\n\n")<<endl;
 i++;
     // cout<<" Prodolgit vvod (y/n)?";
     //cin>>ch;
 if ((ch = getch()) == 27)
 {
        
        //cin.get();
        //system("pause");
        exit(1);
 }
    }
    while(1/*ch=='y'*/);
       //fout1.close();       //закрыть файл
        //  fout2.close();       //закрыть файл
    
    fclose(fp_out2);
}
 
void instruction()
{ 
 cout<<Rus("\t\tБаза данных 'Сведения о студентах'\n\n");   
cout<<Rus(" Продолжить работу программы (y/n)?");
}
 
char* Rus (const char* str)
{
 char* buffer = new char[strlen(str)];
 CharToOemA(str, buffer);
 return buffer;
}
 
void capitalization(char c[])
{
//for(int j=0;c[j]!=0;j++)
  //{
    if (c[0]>='a'&& c[0]<='z')
    {
       c[0]-=32;
    cout<<Rus("Исправлен регистр заглавной буквы фамилии: ")<<c<<endl;
      // break;
    }
  
}
//-----------------------------------------------------------------------
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2009, 22:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Структуры,бинарные файлы,массивы (C++):

Бинарные файлы и структуры - C++
Доброго времени суток. Прошу ответить на пару вопросов: 1) Почему результат операции sizeof, применённый к структуре, не совпадает с...

Как записывать массивы, структуры и блоки данных в файлы? - C++
Хочу понять как записывают данные в файлы. Интересует как записывают массивы в файл. И как их потом считать. Как записывают структуры и...

Бинарные запись и чтение структуры в файл - C++
Записываю структуру в файл.. нужно прочитать.. но он не читает... если delete n; убрать, то &quot;Нарушение прав доступа при записи&quot;. delete n...

бинарные файлы - C++
доброго времени суток. очень нужна помощь по нескоьким задачам. именно помощь, а не решение за меня) спасибо, если кто откликнется. ...

Бинарные файлы - C++
Заполнить бинарный файл случайными числами. Найтим min значение (их может быть несколько) и заменить min значение нулями

С++ бинарные файлы - C++
Вот мой чудо-код, но он походу только *.txt файлы открывает, а мне нужно что бы и бинарные тоже. Прошу помощи!!! #include &quot;stdafx.h&quot; ...

1
Search..
Заказ софта
340 / 185 / 10
Регистрация: 26.05.2009
Сообщений: 863
09.10.2009, 23:30 #2
Почитай про vector (std::vector). И про метод этого класса - std::vector.push_back. После этого все станет (надеюсь) понятно.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2009, 23:30
Привет! Вот еще темы с ответами:

Бинарные файлы - C++
Прошу помочь с новыми задачками

Бинарные файлы - C++
Всё началось с необходимости наличия программы, в которую вводишь число и она говорит есть ли такое в файле(мне кажется удобнее...

Бинарные файлы - C++
Есть 2 текстовых файла .В первом информации представлена в след виде:номер и ФИО,во втором номер Группы,и оценки по предметам.Так мне нужно...

Бинарные файлы в С++ - C++
У меня есть програмка которая находит наименьший общий делитель числа#include&lt;iostream&gt; using namespace std; int main() { int n; ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru