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

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

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





#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. Нарушение авторских прав; Мы поможем в написании вашей работы!




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


Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...


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


ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Тема 5. Анализ количественного и качественного состава персонала Персонал является одним из важнейших факторов в организации. Его состояние и эффективное использование прямо влияет на конечные результаты хозяйственной деятельности организации.

Билет №7 (1 вопрос) Язык как средство общения и форма существования национальной культуры. Русский литературный язык как нормированная и обработанная форма общенародного языка Важнейшая функция языка - коммуникативная функция, т.е. функция общения Язык представлен в двух своих разновидностях...

Патристика и схоластика как этап в средневековой философии Основной задачей теологии является толкование Священного писания, доказательство существования Бога и формулировка догматов Церкви...

Именные части речи, их общие и отличительные признаки Именные части речи в русском языке — это имя существительное, имя прилагательное, имя числительное, местоимение...

Интуитивное мышление Мышление — это пси­хический процесс, обеспечивающий познание сущности предме­тов и явлений и самого субъекта...

Объект, субъект, предмет, цели и задачи управления персоналом Социальная система организации делится на две основные подсистемы: управляющую и управляемую...

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