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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ из делфи в С++ http://www.cyberforum.ru/cpp-beginners/thread55455.html
есть программа на делфи ее надо перевести в с++ вот не задача не могу разобраться с массивами и перебором помогитеплиз! procedure TForm1.Button3Click(Sender: TObject); const a1=0.0000188; LAM1=0.0244; {vozdyx} DELTAU=0.01; LX=0.1; dX=0.01;
C++ Использование this. Вот такое: class Test : public QObject { Q_OBJECT; public: Test(); ~Test(); void clear(); int t; void shuffle(int k = this->t); http://www.cyberforum.ru/cpp-beginners/thread55448.html
Инкремент(Декремент) C++
Есть ли разница,какую употреблять форму:префиксную или постфиксную? Если на экран выводится одно и то же число в префиксной и постфиксной форме,то какой смысл? В зависимости от чего употреблять надо ту или иную форму,или без разницы?
C++ std::sort()
Доброго времени суток! Есть некая структура: struct member { int latency; std::vector<int>child; };
C++ Поиск максимального значения функции на заданном промежутке http://www.cyberforum.ru/cpp-beginners/thread55422.html
Дана функция y=2x3+1. Написать программу для поиска максимального значения у в промежутке х принадлежит с шагом 0,2
C++ Конструкторы Спроектируйте класс – “калькулятор”, предназначенный для выполнения арифметических операций с двумя операндами и добавьте в разработанный вами класс-калькулятор конструктор, инициализирующий объект. Класс может разработан не верно но вот он //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include <iostream>... подробнее

Показать сообщение отдельно
TOSHH
Сообщений: n/a
09.10.2009, 22:36     Структуры,бинарные файлы,массивы
Помогите пожалуйста решить такой вопрос:

Подготовить программу,формирующую на основе информации вводимой с клавиатуры,два внешних типизированных файла(бинарные как я понял),содержащих:
-сведения о студентах:состоит из записей,каждая из которых включает 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;
    }
  
}
//-----------------------------------------------------------------------
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru