Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Задание 1. Перегрузка функций

Читайте также:
  1. II. Задание повышенной сложности
  2. III. Практическое задание
  3. V Производные обратных тригонометрических функций
  4. Алгоритм работы библиотечных функций malloc/free языка С
  5. Аналитическое выравнивание рядов динамики. Типы развития и соответствующие им уравнения функций.
  6. В соответствии с заданием и складывающейся обстановкой больница может
  7. В). Задание условия на значение поля

Написать программу, которая для базы сотрудников выда­ет по запросу список сотрудников либо родившихся раньше заданного года, либо имеющих оклад больше введенного с клавиатуры.

Варианты выборки из базы по различным запросам оформим в виде перегруженных функций. Мы от природной лени и для простоты рассматриваем базу с минимальным количеством полей; в реальных ситуациях их может быть гораздо больше, соответственно, больше будет и вариантов перегруженных функций. Также оформим в виде отдельной функции чтение базы из файла и для лучшего структурирования программы, и для того, чтобы в случае необходимости было легче заменить эту функцию на другую, например, на чтение из бинарного файла.

#include <fstream.h>

#include <string.h>

#include <stdlib.h>

#include <iomanip.h>

const int I_name = 30, l_year = 5, l_pay = 10, l_buf = I_name + l_year + l_pay;

struct Man {

int birth_year;
char name[l_name + 1];

float pay;

}

 

int read_dbase(const char * filename, Man dbase[ ], const int l_dbase,

int &n_record);

void print(Man m);

void select(Man dbase[ ], const int n_record, const int year);

void select(Man dbase[ ], const int n_record, const float pay);

 

int main(){

const int l_dbase = 100;

Man dbase[l_dbase];

int n_record = 0;

if (read_dbase("txt6.txt", dbase, l_dbase, n_record)!= 0) return 1;

 

int option;

int year;

float pay;

do {

cout << "----------------------------------- " << endl;

cout << "1 - Сведения по году рождения" << endl;

cout << "2 - Сведения по окладу". << endl;

cout << "3 - Выход" << endl;

cin >> option;

 

switch (option) {

case 1: cout << "Введите год "; cin >> year;

select(dbase, n_record, year); break;

case 2: cout << "Введите оклад "; cin >> pay;

select(dbase, n_record, pay); break;

case 3: return 0;

default: cout << "Надо вводить число от 1 до 3" << endl;

} •. '-.У"

} while (true);

return 0;

}

 

void select(Man dbase[ ], const int n_record, const int year) {

cout << " Вывод сведений по году рождения" <<endl;

bool success = false;

for (int i = 0; i < n_record; i++)

if (dbase[i],birth_year >= year) {

print (dbase[i]); success = true;

}

if (!success) cout << " Таких сотрудников нет" <<endl;

}

void select(Man dbase[ ], const int n_record, const float pay){

cout << " Вывод сведений по окладу" << endl;

bool success = false;

for (int i = 0; i < n_record; i++)

if (dbase[i].pay >= pay) {

print (dbase[i]); success = true;

}

if (!success) cout << " Таких сотрудников нет" << endl;

}

 

void print(Man m) {

cout.setf(ios::fixed);

cout.precision(2);

cout << setw(40) << m.name << ' ' << m.btrth_year << ' ' <<

m.pay << endl;

}

 

int read_dbase(const char * filename, Man dbase[ ], const int l_dbase.

int &n_record) {

char buf [l_buf + 1];

ifstream fin(filename, ios::in | ios::nocreate);

if (!fin){ cout << "Нет файла " << filename << endl; return 1; }

 

int i =0;

while (fin.getline(buf, l_buf)) {

strncpy(dbase[i].name, buf, l_name);

dbase[i].name[l_name] = '\0';

dbase[i].birth_year = atoi(&buf[l_name]);

dbase[i].pay = atof(&buf[l_name + l_year]);

i++;

if (i > l_dbase) {cout << "Слишком длинный файл"; return 2; }

}

n_record = i;

fin.close();

return 0;

}

Добавьте в базу еще одно-два осмысленных поля (например, отдел, стаж или количество детей) и напишите еще одну перегруженную функцию для выборки по новому критерию. Если тип критерия будет такой же, как один из рассмотренных, то, чтобы компилятор мог различать варианты, можно добавить в функцию дополнительный параметр.

Ниже приведены правила описания перегруженных функций.

- Перегруженные функции должны находиться в одной области видимости, иначе произойдет сокрытие аналогично одинаковым именам переменных во вложенных блоках.

- Перегруженные функции могут иметь параметры по умолчанию, при этом значения одного и того же параметра в разных функциях должны совпадать. В различных вариантах перегруженных функций может быть различное количество параметров по умолчанию.

- Функции не могут быть перегружены, если описание их параметров отличается только модификатором const или использованием ссылки.


Дата добавления: 2015-11-26; просмотров: 78 | Нарушение авторских прав



mybiblioteka.su - 2015-2024 год. (0.008 сек.)