Постановка задачи
Информация о каждом служащем некоторой компании содержит его фамилию, год рождения и стаж – количество лет его работы в этой компании.
Необходимо
1. прочесть из файла данные о всех служащих компании,
2. узнать фамилию самого старшего по возрасту служащего
3. выбрать информацию обо всех служащих компании, стаж работы которых превышает заданное значение
4. все полученные результаты записать в другой файл.
Первое приближение
Создаем структуры данных и намечаем план работы.
#include "stdafx.h"
const int max_len = 15; // максимальная длина фамилии
const int max_num = 40; // максимальное количество служащих в компании
struct TSluzh
{
// запись о служащем компании содержит данные:
char Name[max_len]; // фамилия
int year_birth; // год рождения
int stag; // стаж работы
};
struct TSluzhComp
{
TSluzh sluzh[max_num]; // информация о всех служащих компании
int num_sl; // реальное количество служ. компании
};
int _tmain(int argc, _TCHAR* argv[])
{
// среди служащих компании найти самого старшего (одного)
// и вывести данные о всех, стаж которых более В лет
TSluzhComp sl; // данные о служащих
const int B = 20; // величина стажа
// прочесть данные из файла
// найти старшего служащего
// найти всех, стаж которых более В
// вывести все результаты в файл
return 0;
}
Пробуем компилировать и запустить программу на выполнение для проверки на ошибки. Программа формально работает - компилируется и запускается. Естественно, не выдавая никакого результата.
Второе приближение
Разбиение всей задачи на подзадачи. Каждая подзадача будет выполнена с помощью отдельной функции
#include "stdafx.h"
#include <iostream>
using namespace std;
const int max_len = 15; // максимальная длина фамилии
const int max_num = 40; // максимальное количество служащих в компании
const int name_len = 40;
struct TSluzh
{
// запись о служащем компании содержит данные:
char Name[max_len]; // фамилия
int year_birth; // год рождения
int stag; // стаж работы
};
struct TSluzhComp
{
TSluzh sluzh[max_num]; // информация о всех служащих компании
int num_sl; // реальное количество служащих компании
};
TSluzhComp ReadFromFile(char* FileName);
// чтение из файла с именем FileName информации о служащих
// компании и возвращение ее в качестве результата
char* TheMostOld(TSluzhComp s);
// возвращает фамилию самого старшего служ компании, данные
// о которых записаны в структуре s
TSluzhComp StagGrater(TSluzhComp s, int val);
// возвращает структуру, содержащую всех, стаж которых более val,
//данные о которых записаны в структуре s
void SaveToFile(char* Old, TSluzhComp StagGr, int B, char* FileName);
// сохранение в файл с именем FileName: Old - фамилии самого
// старшего служащего, и StagGr - информацию о всех служ., стаж // которых больше B
int _tmain(int argc, _TCHAR* argv[])
{
// среди служащих компании найти самого старшего (одного)
// и вывести данные о всех, стаж которых более
TSluzhComp sl; // данные о служащих
const int B = 20; // величина стажа
// прочесть данные из файла
char FNameInp[name_len] = "inp.txt"; // имя файла исходных данных
// cout<<endl<<"Введите имя файла исх данных"<<endl;
// cin>>FNameInp;
sl=ReadFromFile(FNameInp); // прочесть данные из файла
char FNameRez[name_len] = "rez.txt"; // имя файла результата
// найти старшего служащего
// найти всех, стаж которых более В
// вывести все результаты в файл
// записать результ. в другой файл
SaveToFile(TheMostOld(sl), StagGrater(sl, B), B, FNameRez);
return 0;
}
TSluzhComp ReadFromFile(char* FileName)
{
// чтение из файла с именем FileName информации о служащих компании
// и возвращение ее в качестве результата
TSluzhComp rez;
return rez;
}
char* TheMostOld(TSluzhComp s)
{
// возвращает фамилию самого старшего служ компании, данные
// о которых записаны в структуре s
char *old = ""; // заглушка для результата
return old;
}
TSluzhComp StagGrater(TSluzhComp s, int val)
{
// возвращает структуру, содержащую всех, стаж которых более val,
//данные о которых записаны в структуре s
return s; // заглушка для результата
}
void SaveToFile(char* Old, TSluzhComp StagGr, int B, char* FileName)
{
// сохранение в файл с именем FileName Old - фамилии самого старшего
// служащего, и StagGr - информацию о всех служ., стаж которых больше B
}
Третье приближение
Файл «inp.txt»:
5
Иванов 1963 23
Петров 1972 18
Сидоров 1974 14
Теняков 1959 30
Джурла 1970 19
TSluzhComp ReadFromFile(char* FileName)
{
// чтение из файла с именем FileName информации о служащих компании
// и возвращение ее в качестве результата
TSluzhComp rez;
ifstream inf (FileName);
if (!inf) cout<<"File is not exist!";
inf>>rez.num_sl;
for(int i=0; i<rez.num_sl; ++i)
{
inf>>rez.sluzh[i].Name>>rez.sluzh[i].year_birth
>>rez.sluzh[i].stag;
}
return rez;
}
void SaveToFile(char* Old, TSluzhComp StagGr, int B, char* FileName)
{
// сохранение в файл с именем FileName Old - фамилии самого старшего
// служащего, и StagGr - информацию о всех служ., стаж которых больше B
ofstream outf (FileName);
outf<<"Самый старший служащий - "<<Old<<endl;
outf<<"Служащие со стажем, превышающим "<<B<<":"<<endl;
outf<<" Фамилия Год рождения Стаж"<<endl;
for (int i = 0; i < StagGr.num_sl; i++)
outf<<setw(max_len+1)<<StagGr.sluzh[i].Name<<setw(13)
<<StagGr.sluzh[i].year_birth<<setw(6)<<StagGr.sluzh[i].stag<<endl;
outf.close();
}
Файл ”rez.txt”
Служащие со стажем, превышающим 20:
Фамилия Год рождения Стаж
Иванов 1963 23
Петров 1972 18
Сидоров 1974 14
Теняков 1959 30
Джурла 1970 19
Четвертое приближение
char* TheMostOld(TSluzhComp &s)
{
// возвращает фамилию самого старшего служ компании, данные
// о которых записаны в структуре s
char *old = s.sluzh[0].Name;
int year_old=s.sluzh[0].year_birth;
for (int i = 1; i < s.num_sl; i++)
if (s.sluzh[i].year_birth<year_old)
{
year_old = s.sluzh[i].year_birth;
old = s.sluzh[i].Name;
}
return old;
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.