в общем сделал тебе 3 в одном, т.к. это хоть работать будет. то бишь можно проверить как оно работает.
Имена файлов указываются как аргументы командной строки, так же в каждом поле (чтоб не заморачиваться) я сделал так, чтоб ввод был примерно таким образом: все данные разделяются пробелом. то бишь фио вводится через подчеркивание вместо пробелов.
вот код:
main.cpp:
Код:
Код: Выделить всё
#include <iostream>
#include <cstdlib>
#include <fstream>
#include "rus8.h" //русификатор
#include "candidate.h"
using namespace std;
int main(int argc, char *argv[])
{
rus(); // ф-ия руссифицированного вывода
if(argc < 3)
{
cout << "Ошибка 0 : введите все 3 аргумента командной строки" << endl;
exit (0);
}
int size;
cout << "Введите кол-во кандидатов" << endl;
cin >> size;
if(size < 0)
{
cout << "Ошибка 1 : кол-во кандидатов должно быть целочисленным и положительным ( 1, 2, 5, и т.д." << endl;
exit (1);
}
cand *arr = new cand[size]; //выделение динамической памяти для массива структур
ifstream in(argv[1]);
if(!in)
{
cout << "Ошибка 2 : не могу открыть файл с исходными данными" << endl;
exit (2);
}
read_info(in, arr, size);
in.close();
ofstream out(argv[2]);
if(!out)
{
cout << "Ошибка 3 : не могу открыть файл для вывода" << endl;
exit (3);
}
write_info(out, arr, size);
out.close();
delete [] arr; // очистка динамической памяти от массива структур
return 0;
}
candidate.h
Код:
Код: Выделить всё
#include <iostream>
#include <string>
using namespace std;
struct cand
{
string name; // ФИО
int age; // Возраст
string prof; // Профессия
string set; // Наименование партии
int num; // Номер избирательного округа
string court; // Судимость
};
void read_info(istream &, cand *, const int &); //ф-ия заполнения массива
void write_info(ostream &, cand *, const int &); //ф-ия вывода данных в файл
candidate.cpp
Код:
Код: Выделить всё
#include "candidate.h"
void read_info(istream &in, cand *arr, const int &size)
{
for(int i = 0; i < size; i++)
{
in >> arr[i].name;
in >> arr[i].age;
in >> arr[i].prof;
in >> arr[i].set;
in >> arr[i].num;
in >> arr[i].court;
}
}
void write_info(ostream &out, cand *arr, const int &size)
{
out << "Кандидаты :" << endl << endl;
for(int i = 0; i < size; i++)
{
out << "Кандидат номер " << (i+1) << endl;
out << "И.Ф.О. : " << arr[i].name << endl;
out << "Возраст : " << arr[i].age << endl;
out << "Профессия : " << arr[i].prof << endl;
out << "Наименование партии : " << arr[i].set << endl;
out << "Номер изб. круга : " << arr[i].num << endl;
out << "Судимость : " << arr[i].court << endl;
out << endl << endl;
}
}
rus8.h
Код:
Код: Выделить всё
#ifndef _RUS_H
#define _RUS_H
#include <locale.h>
inline void rus( void )
{
setlocale( LC_CTYPE, ".1251" );
setlocale( LC_MONETARY, ".1251" );
return;
}
#endif
вот с такими данными проверял работоспособность:
Код:
Код: Выделить всё
Иванов_Петр_Васильевич
55
Историк
Единая_Росиия
5
Нет
Кузичкин_Иван_Григорьевис
32
Физик-ядерщик
ЛДПР
9
Нет
Васильев_Михаил_Эдуардовч
38
Экономист
КПРФ
7
Да
вот такой был вывод:
Код:
Код: Выделить всё
Кандидаты :
Кандидат номер 1
И.Ф.О. : Иванов_Петр_Васильевич
Возраст : 55
Профессия : Историк
Наименование партии : Единая_Росиия
Номер изб. круга : 5
Судимость : Нет
Кандидат номер 2
И.Ф.О. : Кузичкин_Иван_Григорьевис
Возраст : 32
Профессия : Физик-ядерщик
Наименование партии : ЛДПР
Номер изб. круга : 9
Судимость : Нет
Кандидат номер 3
И.Ф.О. : Васильев_Михаил_Эдуардовч
Возраст : 38
Профессия : Экономист
Наименование партии : КПРФ
Номер изб. круга : 7
Судимость : Да
по сути это твое третье задание - оно самое полное, если не очень представляешь как его разбить по кускам (на 1е и 2е) могу переделать - это не так долго