Создание структуры данных о каждом служащем некоторой компании

Страницы работы

7 страниц (Word-файл)

Содержание работы

Постановка задачи

Информация о каждом служащем некоторой компании содержит его фамилию, год рождения и стаж – количество лет его работы в этой компании.

Необходимо

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;

}


Похожие материалы

Информация о работе

Тип:
Отчеты по лабораторным работам
Размер файла:
49 Kb
Скачали:
0