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

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

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






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



Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

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

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

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

Билиодигестивные анастомозы Показания для наложения билиодигестивных анастомозов: 1. нарушения проходимости терминального отдела холедоха при доброкачественной патологии (стенозы и стриктуры холедоха) 2. опухоли большого дуоденального сосочка...

Сосудистый шов (ручной Карреля, механический шов). Операции при ранениях крупных сосудов 1912 г., Каррель – впервые предложил методику сосудистого шва. Сосудистый шов применяется для восстановления магистрального кровотока при лечении...

Шов первичный, первично отсроченный, вторичный (показания) В зависимости от времени и условий наложения выделяют швы: 1) первичные...

Предпосылки, условия и движущие силы психического развития Предпосылки –это факторы. Факторы психического развития –это ведущие детерминанты развития чел. К ним относят: среду...

Анализ микросреды предприятия Анализ микросреды направлен на анализ состояния тех со­ставляющих внешней среды, с которыми предприятие нахо­дится в непосредственном взаимодействии...

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