Студопедия Главная Случайная страница Обратная связь

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

Программа и тестовые примеры





#include < fstream.h> #include < string.h> #include < stdlib.h> // #include < windows.h> // 0 int main () { const int l_name = 30, l_year = 5, l_pay = 10, l_buf = l_name + l_yеаг + l_pay; // 1 struct Man { // 2 int birth_year; char name[l_name + 1]; float pay; }; const int l_dbase = 100; Man dbase[l_dbase]; // 3 char buf [l_buf + 1]; // 4 char name[l_name + 1]; // 5 ifstream fin(" dbase.txt", ios:: in | ios:: nocreate); // 6 if (! fin) { cout < < " Ошибка открытия файла"; return 1; } int i = 0; while (fin.getline(buf, l_buf)) { // 7 if (i > = l_dbase) { cout < < " Слишком длинный файл "; return 1; } 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++; } int n_record = i, n_man = 0; // 8 float mean_pay = 0; while (true) { // 9 cout < < " Введите фамилию или слово end: "; cin > > name; // OemToChar(name, name); // 10 if (strcmp(name, " end") == 0)break; // 11 bool not_found = true; // 12 for (i = 0; i < n_record; i++) { // 13 if (strstr(dbase[i].name, name)) // 14 if (dbase[i].name[strlen(name)] ==' ') { // 15 strcpy(name, dbase[i].name); // CharToOem(name. name); // 16 cout < < name < < dbase[i].birth_year < < ' ' < < dbase[i].pay < < endl; n_man++; mean_pay += dbase[i].pay; not found = false; } } if (not_found) cout < < " Такого сотрудника нет" < < endl; } if (n_man > 0) cout < < " Средний оклад: " < < mean_pay / n_man < < endl; return 0; }

 

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

 

В операторе 2 определяется структура Man для хранения сведений об одном сотруднике. Длина поля, в котором будет находиться фамилия, задана с учетом завершающего нуль-символа. В операторе 3 определяется массив структур dbase для хранения всей базы. Его размерность также задается именованной константой. В операторах 4 и 5 задаются промежуточные переменные: буфер buf для ввода строки из файла и строка name для фамилии запрашиваемого сотрудника.

 

В операторе 6 выполняется открытие файла dbase.txt для чтения. Предполагается, что этот файл находится в том же каталоге, что и текст программы, иначе следует указать полный путь. Входной файл следует создать в любом текстовом редакторе1 до первого запуска программы в соответствии с форматом, заданным в условии задачи. Файл для целей тестирования должен состоять из нескольких строк, причем необходимо предусмотреть случай, когда одна фамилия является частью другой (например, Иванов и Ивановский). Не забудьте проверить, выдается ли диагностическое сообщение, если файл не найден.

 

 

Цикл 7 выполняет построчное считывание из файла в строку buf и заполнение очередного элемента массива dbase. Счетчик i хранит индекс первого свободного элемента массива. Для формирования полей структуры используются функции копирования строк strncpy, преобразования из строки в целое число atoi и преобразования из строки в вещественное число atof. Они были рассмотрены на предыдущем семинаре (см. с. 94). Обратите внимание на то, что завершающий нуль-символ в поле фамилии заносится «вручную», поскольку функция strncpy делает это только в случае, если строка-источник короче строки-приемника. В функцию atoi передается адрес начала подстроки, в которой находится год рождения.

 

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

 







Дата добавления: 2014-11-10; просмотров: 660. Нарушение авторских прав; Мы поможем в написании вашей работы!




Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...


Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...


Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...


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

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит...

Кран машиниста усл. № 394 – назначение и устройство Кран машиниста условный номер 394 предназначен для управления тормозами поезда...

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

ОЧАГОВЫЕ ТЕНИ В ЛЕГКОМ Очаговыми легочными инфильтратами проявляют себя различные по этиологии заболевания, в основе которых лежит бронхо-нодулярный процесс, который при рентгенологическом исследовании дает очагового характера тень, размерами не более 1 см в диаметре...

Примеры решения типовых задач. Пример 1.Степень диссоциации уксусной кислоты в 0,1 М растворе равна 1,32∙10-2   Пример 1.Степень диссоциации уксусной кислоты в 0,1 М растворе равна 1,32∙10-2. Найдите константу диссоциации кислоты и значение рК. Решение. Подставим данные задачи в уравнение закона разбавления К = a2См/(1 –a) =...

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

Studopedia.info - Студопедия - 2014-2026 год . (0.009 сек.) русская версия | украинская версия