Реферат Технология программирования 2
Работа добавлена на сайт bukvasha.net: 2015-10-28Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
от 25%
договор
Содержание:
1. Задание к работе 3
2. Ограничения на входные и выходные данные 4
2.1 Ограничения, накладываемые на входные данные, считываемые из первого файла: 4
2.2 Ограничения, накладываемые на входные данные, считываемые из второго файла: 4
2.3 Другие ограничения: 4
3. Структура целей разрабатываемой программы 4
4. Таблицы решений 5
4.1 ТР для функции “Проверка на корректность файла F1” 5
4.2 ТР для функции “Проверка на корректность файла F2” 6
4.3 ТР для функции “Формирование выходного файла” 7
5. Схема работы системы 7
5.1 Схема основной функции 7
5.2 Схема функции “Проверка на корректность файла F1” 8
5.3 Схема функции “Проверка на корректность файла F2” 12
5.4 Схема функции “Формирование выходного файла” 16
6. Тестирование программы 18
6.1 Тестирование функции “Проверка на корректность файла F1” 18
6.2 Тестирование функции “Проверка на корректность файла F2” 20
6.3 Тестирование функции “Формирование выходного файла” 23
7. Выводы 25
8. Список используемой литературы 25
Приложение А. Текст программы 26
Приложение Б. Результаты работы программы 32
1. Задание к работе
Разработать программу совместной обработки файлов типа F1 и F2 для формирования выходного документа типа F3.
ИСХОДНЫЕ ДАННЫЕ И ОСОБЕННОСТИ АЛГОРИТМА
Текстовые файлы на МД, структура записей которых приведена ниже:
Таблица 1 - Структура файла F1
№ предмета | Наименование предмета |
| |
Таблица 2 - Структура файла F2
№ группы | Фамилия, имя, отчество | № предмета | Оценка |
| | | |
Результат обработки в виде выходного документа, представленного в таблице F3:
Таблица 3 - Структура файла F3
№ группы | Наименование предмета | ФИО студента | Оценка |
| | | |
Выходной документ представляет собой ведомость успеваемости студентов в академических группах по предметам. Рекомендуется сгруппировать подряд все записи, относящиеся к одной академической группе, а в каждой группе – по конкретному предмету. Для демонстрации работы программы необходимо иметь не менее 2-ух групп и не менее 2-ух предметов в каждой группе. Рекомендуется имена файлов типа F1 и F2 запрашивать с клавиатуры дисплея.
2. Ограничения на входные и выходные данные
2.1 Ограничения, накладываемые на входные данные, считываемые из первого файла:
а) Номер предмета должен быть числом, большим нуля.
б) Наименование предмета должно состоять из допустимых символов (а-я, А-Я,_,-).
в) Номера предметов не должны повторяться.
г) Наименования предметов не должны повторяться.
д) В каждой записи должно быть два поля.
2.2 Ограничения, накладываемые на входные данные, считываемые из второго файла:
а) Номер группы должен быть числом, большим нуля.
б) ФИО студента должно состоять из допустимых символов (а-я, А-Я,_).
в) Номер предмета должен быть числом, большим нуля.
г) Оценка должна быть допустимым символом (2,3,4,5).
д) Для одной группы ФИО студента и номер предмета не должны повторяться.
е) Одинаковым ФИО студентов должны соответствовать одинаковые № групп.
ж) В каждой записи должно быть четыре поля.
2.3 Другие ограничения:
а) Производится проверка правильности открытия файлов F1 и F2, если файлы не существуют, то по выбору пользователя производится либо повторный ввод, либо выход из программы.
б) Номеру предмета из файла F2 должно соответствовать наименование предмета из файла F1.
3. Структура целей разрабатываемой программы
Составлению внешних спецификаций разрабатываемого ПО предшествует анализ целей будущего продукта, который в методиках разработки ПО называется структурным анализом и методической базой которого является нисходящая стратегия.
Структурным анализом принято называть такое исследование системы, которое начинается с ее общего обзора и затем детализируется, приобретая иерархическую структуру со все большим числом уровней. Для таких методов характерно разбиение на уровни абстракции с ограничением числа элементов на каждом из уровней (обычно от 3 до 6-7). В технологии программирования эта идея была сформулирована как один из принципов структурного программирования: разработку программ рекомендуется вести сверху вниз или, иначе, по нисходящей стратегии.
Суть нисходящей стратегии в том, что цели разрабатываемого ПП структурируются по схеме: цели - подцели 1-го уровня - ... - подцели i-го уровня - ... - подцели n-уровня - функции до такой степени детализации, когда реализация подцелей последнего уровня (функций) становится очевидной.
4. Таблицы решений
Методика построения ТР заключается в следующем:
а) определить все условия и действия в спецификации;
б) вписать действия и условия в таблицу;
в) в нумерованных столбцах отметить все возможные комбинации условий и выполняемых при выполнении условий действий;
г) при необходимости редуцировать таблицу (если есть 2 столбца, у которых перечень действий совпадает и которые отличаются только результатами условий ‘Д’ и ‘Н’ в одной строке, то такие столбцы могут быть слиты в один).
4.1 ТР для функции “Проверка на корректность файла F1”
Условия | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
Удалось открыть файл? | Н | Н | Д | Д | Д | Д | Д | Д | Д | Д |
Нажата клавиша Esc? | Н | Д | - | - | - | - | - | - | - | - |
Достигнут конец файла? | - | - | Н | Н | Н | Н | Д | Д | Д | Д |
В записи два поля? | - | - | Н | Д | Д | Д | - | - | - | - |
Номер предмета - число большее нуля? | - | - | - | Н | - | Д | - | - | - | - |
Наименование предмета состоит из допустимых символов? | - | - | - | - | Н | - | - | - | - | - |
Проверены все записи? | - | - | - | - | - | - | Н | Н | Д | Д |
Номера предметов равны | - | - | - | - | - | - | Д | - | - | - |
Наименования предметов равны? | - | - | - | - | - | - | - | Д | - | - |
Флаг присутствия ошибок равен true? | - | - | - | - | - | - | - | - | Н | Д |
Действия | | | | | | | | | | |
Вывод сообщения: “ Файл с именем <имя файла> не найден. Для повторного ввода нажмите любую клавишу. Для выхода нажмите Esc” | 1 | 1 | | | | | | | | |
Вывод сообщения “В записи <запись> не хватает либо присутствуют лишние поля. Запись не будет учитываться при формировании выходного файла” | | | 1 | | | | | | | |
Вывод сообщения “Номер предмета <номер> не является числом большим нуля. Запись не будет учитываться при формировании выходного файла” | | | | 1 | | | | | | |
Вывод сообщения “Наименование предмета <наименование> содержит недопустимые символы” | | | | | 1 | | | | | |
Вывод сообщения “В записях присутствуют одинаковые номера предметов <номер>” | | | | | | | 1 | | | |
Вывод сообщения “В записях присутствуют одинаковые наименования предметов <наименование>” | | | | | | | | 1 | | |
Установить флаг присутствия ошибок true | | | 2 | 2 | 2 | | 2 | 2 | | |
Добавить данные в список | | | | | | 1 | | | | |
Продолжить обработку | 2 | | 3 | 3 | 3 | 2 | 3 | 3 | | |
Вывод сообщения “В связи с наличием ошибок возможна не корректность выходного файла” | | | | | | | | | | 1 |
Завершить обработку | | | | | | | | | 1 | 2 |
Завершить программу | | 2 | | | | | | | | |
4.2 ТР для функции “Проверка на корректность файла F2”
Условия | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
Удалось открыть файл? | Н | Н | Д | Д | Д | Д | Д | Д | Д | Д | Д | Д |
Нажата клавиша Esc? | Н | Д | - | - | - | - | - | - | - | - | - | - |
Достигнут конец файла? | - | - | Н | Н | Н | Н | Н | Н | Д | Д | Д | Д |
В записи четыре поля? | - | - | Н | Д | Д | Д | Д | Д | - | - | - | - |
Номер группы - число большее нуля? | - | - | - | Н | - | - | - | Д | - | - | - | - |
ФИО студента состоит из допустимых символов? | - | - | - | - | Н | - | - | - | - | - | - | - |
Номер предмета – число большее нуля? | - | - | - | - | - | Н | - | Д | - | - | - | - |
Оценка – допустимый символ? | - | - | - | - | - | - | Н | - | - | - | - | - |
Проверены все комбинации записей? | - | - | - | - | - | - | - | - | Н | Н | Д | Д |
Номера групп равны? | - | - | - | - | - | - | - | - | Н | Д | - | - |
ФИО студентов равны? | - | - | - | - | - | - | - | - | Д | Д | - | - |
Номера предметов равны? | - | - | - | - | - | - | - | - | - | Д | - | - |
Флаг присутствия ошибок равен true? | - | - | - | - | - | - | - | - | - | - | Н | Д |
Действия | | | | | | | | | | | | |
Вывод сообщения: “ Файл с именем <имя файла> не найден. Для повторного ввода нажмите любую клавишу. Для выхода нажмите Esc” | 1 | 1 | | | | | | | | | | |
Вывод сообщения “В записи <запись> не хватает либо присутствуют лишние поля. Запись не будет учитываться при формировании выходного файла” | | | 1 | | | | | | | | | |
Вывод сообщения “Номер группы <номер> не является числом большим нуля. Запись не будет учитываться при формировании выходного файла” | | | | 1 | | | | | | | | |
Вывод сообщения “ФИО студента <ФИО> содержит недопустимые символы” | | | | | 1 | | | | | | | |
Вывод сообщения “Номер предмета <номер> не является числом большим нуля. Запись не будет учитываться при формировании выходного файла” | | | | | | 1 | | | | | | |
Вывод сообщения “Оценка <оценка> является недопустимым символом” | | | | | | | 1 | | | | | |
Вывод сообщения “Одинаковым ФИО студентов <ФИО> соответствуют разные номера групп” | | | | | | | | | 1 | | | |
Вывод сообщения “Для группы <номер> повторяются ФИО студента <ФИО> и номер предмета <номер>” | | | | | | | | | | 1 | | |
Установить флаг присутствия ошибок true | | | 2 | 2 | 2 | 2 | 2 | | 2 | 2 | | |
Добавить данные в список | | | | | | | | 1 | | | | |
Продолжить обработку | 2 | | 3 | 3 | 3 | 3 | 3 | 2 | 3 | 3 | | |
Вывод сообщения “В связи с наличием ошибок возможна не корректность выходного файла” | | | | | | | | | | | | 1 |
Завершить обработку | | | | | | | | | | | 1 | 2 |
Завершить программу | | 2 | | | | | | | | | | |
4.3 ТР для функции “Формирование выходного файла”
Условия | 1 | 2 | 3 | 3 | 4 |
Достигнут конец списка 2? | Н | Н | Н | Н | Д |
Закончена обработка данной группы? | Н | Н | Н | Д | - |
Закончена обработка данного предмета? | Н | Н | Д | - | - |
В списке 1 найдено наименование предмета соответствующее данному номеру? | Н | Д | Д | Д | - |
Действия | | | | | |
Вывести в выходной файл ФИО студента и оценку | | 1 | | | |
Вывести сообщение "Не найдено наименование предмета соответствующее номеру <номер>" | 1 | | | | |
Вывести в выходной файл номер группы | | | | 1 | |
Вывести в выходной файл наименование предмета | | | 1 | | |
Продолжить обработку | 2 | 2 | 2 | 2 | |
Завершить обработку | | | | | 1 |
5. Схема работы системы
5.1 Схема основной функции
5.2 Схема функции “Проверка на корректность файла F1”
5.3 Схема функции “Проверка на корректность файла F2”
5.4 Схема функции “Формирование выходного файла”
6. Тестирование программы
Тестирование программного обеспечения охватывает целый ряд видов деятельности, аналогичных последовательности процессов разработки программного обеспечения. В него входят:
а) постановка задачи для теста,
б) проектирование теста,
в) написание тестов,
г) тестирование тестов,
д) выполнение тестов,
е) изучение результатов тестирования.
Решающую роль играет проектирование тестов. Возможен целый ряд подходов к стратегии проектирования тестов. Чтобы ориентироваться в них, рассмотрим два крайних подхода. Первый состоит в том, что тесты проектируются на основе внешних спецификаций программ и модулей либо спецификаций сопряжения программы или модуля. Программа при этом рассматривается как черный ящик (стратегия ‘черного ящика’). Существо такого подхода - проверить, соответствует ли программа внешним спецификациям. При этом логика модуля совершенно не принимается во внимание.
Второй подход основан на анализе логики программы (стратегия ‘белого ящика’). Суть подхода - в проверке каждого пути, каждой ветви алгоритма. При этом внешняя спецификация во внимание не принимается.
Метод тестирования таблиц решений
Тестирование ТР заключается в том, что проектируется такое количество тестов, которое позволяет покрыть все возможные комбинации условий. Как правило, количество этих тестов совпадает с числом столбцов в ТР
Метод позволяет эффективно проверить соответствие разработанной программы ее внешним спецификациям, но не всегда позволяет выявить случаи, когда программа делает то, что спецификацией не предусмотрено. Кроме того, спецификация может содержать ошибки, которые при таком тестировании выявлены не будут, особенно если результаты тестирования являются правдоподобными. Предварительное построение сначала функциональных диаграмм, а затем ТР позволяет осуществлять логический контроль спецификации сначала на уровне функциональных диаграмм, а затем уже на уровне ТР, что значительно снижает вероятность ошибок в спецификации.
6.1 Тестирование функции “Проверка на корректность файла F1”
Тест 1
Цель теста: проверить функционирование программы при наличии записи с количеством полей не равным двум.
Содержание теста: файл 11.txt
№ предмета | Наименование предмета |
12 | Физика |
| Программирование |
30 | Электроника |
19 | История |
Ожидаемый результат: сообщение "В записи Программирование не хватает либо присутствуют лишние поля. Запись не будет учитываться при формировании выходного файла".
Фактический результат: совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 2
Цель теста: проверить функционирование программы при номере предмета не являющимся числом большим нуля.
Содержание теста: файл 12.txt
№ предмета | Наименование предмета |
12 | Физика |
72 | Программирование |
g0 | Электроника |
19 | История |
Ожидаемый результат: сообщение "Номер предмета g0 не является числом большим нуля. Запись не будет учитываться при формировании выходного файла".
Фактический результат: совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 3
Цель теста: проверить функционирование программы при присутствии недопустимых символов в поле “Наименование предмета”.
Содержание теста: файл 13.txt
№ предмета | Наименование предмета |
12 | Физика |
72 | П???раммирование |
30 | Электроника |
19 | История |
Ожидаемый результат: сообщение "Наименование предмета П???раммирование содержит недопустимые символы".
Фактический результат: совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 4
Цель теста: проверить функционирование программы при присутствии повторяющихся номерах предметов.
Содержание теста: файл 14.txt
№ предмета | Наименование предмета |
30 | Физика |
72 | Программирование |
30 | Электроника |
19 | История |
Ожидаемый результат: сообщение "В записях присутствуют одинаковые номера предметов: 30".
Фактический результат: совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 5
Цель теста: проверить функционирование программы при присутствии повторяющихся наименованиях предметов.
Содержание теста: файл 15.txt
№ предмета | Наименование предмета |
12 | Физика |
72 | Программирование |
30 | История |
19 | История |
Ожидаемый результат: сообщение "В записях присутствуют одинаковые наименования предметов: История".
Фактический результат: совпадает с ожидаемым.
Результат тестирования: неуспешный.
6.2 Тестирование функции “Проверка на корректность файла F2”
Тест 1
Цель теста: проверить функционирование программы при наличии записи с количеством полей не равным четырем.
Содержание теста: 21.txt
№ группы | Фамилия, имя, отчество | № предмета | Оценка |
224 | Гаскаров Рамиль Вильевич | 12 | 4 |
224 | Иванова Алла Сергеевна | 12 | 3 |
224 | Лысков Дмитрий Иванович | 12 | 4 |
224 | Гаскаров Рамиль Вильевич | | 5 |
224 | Иванова Алла Сергеевна | 30 | 4 |
224 | Лысков Дмитрий Иванович | 30 | 4 |
230 | Вахитов Айнур Бакеевич | 72 | 5 |
230 | Ильясова Альбина Вильевна | 72 | 4 |
230 | Вахитов Айнур Бакеевич | 12 | 5 |
230 | Ильясова Альбина Вильевна | 12 | 3 |
Ожидаемый результат: сообщение "В записи 224 Гаскаров Рамиль Вильевич 5 не хватает либо присутствуют лишние поля. Запись не будет учитываться при формировании выходного файла".
Фактический результат: совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 2
Цель теста: проверить функционирование программы при номере группы не являющимся числом большим нуля.
Содержание теста: файл 22.txt
№ группы | Фамилия, имя, отчество | № предмета | Оценка |
224 | Гаскаров Рамиль Вильевич | 12 | 4 |
224 | Иванова Алла Сергеевна | 12 | 3 |
224 | Лысков Дмитрий Иванович | 12 | 4 |
224 | Гаскаров Рамиль Вильевич | 30 | 5 |
224 | Иванова Алла Сергеевна | 30 | 4 |
224 | Лысков Дмитрий Иванович | 30 | 4 |
2?0 | Вахитов Айнур Бакеевич | 72 | 5 |
230 | Ильясова Альбина Вильевна | 72 | 4 |
230 | Вахитов Айнур Бакеевич | 12 | 5 |
230 | Ильясова Альбина Вильевна | 12 | 3 |
Ожидаемый результат: сообщение "Номер группы 2?0 не является числом большим нуля. Запись не будет учитываться при формировании выходного файла".
Фактический результат: совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 3
Цель теста: проверить функционирование программы при присутствии недопустимых символов в поле “ФИО студента”.
Содержание теста: файл 23.txt
№ группы | Фамилия, имя, отчество | № предмета | Оценка |
224 | Гаскаров Рамиль Вильевич | 12 | 4 |
224 | Иванова Алла Сергеевна | 12 | 3 |
224 | Лысков Дмитрий Иванович | 12 | 4 |
224 | Гаскаров Рамиль Вильевич | 30 | 5 |
224 | Иванова Алла Сергеевна | 30 | 4 |
224 | Лысков Дмитрий Иванович | 30 | 4 |
230 | Вахитов Айнур Бакеевич | 72 | 5 |
230 | Ильясова Альбина Вильевна | 72 | 4 |
230 | Вахитов Айнур Бакеевич | 12 | 5 |
230 | Ильяс+ва Альбина Вильевна | 12 | 3 |
Ожидаемый результат: сообщение "ФИО студента Ильяс+ва Альбина Вильевна содержит недопустимые символы".
Фактический результат: совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 4
Цель теста: проверить функционирование программы при номере предмета не являющимся числом большим нуля.
Содержание теста: файл 24.txt
№ группы | Фамилия, имя, отчество | № предмета | Оценка |
224 | Гаскаров Рамиль Вильевич | 12 | 4 |
224 | Иванова Алла Сергеевна | 1Ы | 3 |
224 | Лысков Дмитрий Иванович | 12 | 4 |
224 | Гаскаров Рамиль Вильевич | 30 | 5 |
224 | Иванова Алла Сергеевна | 30 | 4 |
224 | Лысков Дмитрий Иванович | 30 | 4 |
230 | Вахитов Айнур Бакеевич | 72 | 5 |
230 | Ильясова Альбина Вильевна | 72 | 4 |
230 | Вахитов Айнур Бакеевич | 12 | 5 |
230 | Ильясова Альбина Вильевна | 12 | 3 |
Ожидаемый результат: сообщение "Номер предмета 1Ы не является числом большим нуля. Запись не будет учитываться при формировании выходного файла".
Фактический результат: совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 5
Цель теста: проверить функционирование программы при некорректной оценке.
Содержание теста: файл 25.txt
№ группы | Фамилия, имя, отчество | № предмета | Оценка |
224 | Гаскаров Рамиль Вильевич | 12 | 4 |
224 | Иванова Алла Сергеевна | 12 | 3 |
224 | Лысков Дмитрий Иванович | 12 | 4 |
224 | Гаскаров Рамиль Вильевич | 30 | 5 |
224 | Иванова Алла Сергеевна | 30 | 4 |
224 | Лысков Дмитрий Иванович | 30 | 4 |
230 | Вахитов Айнур Бакеевич | 72 | 5 |
230 | Ильясова Альбина Вильевна | 72 | 4 |
230 | Вахитов Айнур Бакеевич | 12 | Z |
230 | Ильясова Альбина Вильевна | 12 | 3 |
Ожидаемый результат: сообщение "Оценка Z является недопустимым символом".
Фактический результат: совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 6
Цель теста: проверить функционирование программы при присутствии одинаковых ФИО студентов и номеров предметов для одной группы.
Содержание теста: файл 26.txt
№ группы | Фамилия, имя, отчество | № предмета | Оценка |
224 | Гаскаров Рамиль Вильевич | 12 | 4 |
224 | Иванова Алла Сергеевна | 12 | 3 |
224 | Лысков Дмитрий Иванович | 12 | 4 |
224 | Гаскаров Рамиль Вильевич | 12 | 5 |
224 | Иванова Алла Сергеевна | 30 | 4 |
224 | Лысков Дмитрий Иванович | 30 | 4 |
230 | Вахитов Айнур Бакеевич | 72 | 5 |
230 | Ильясова Альбина Вильевна | 72 | 4 |
230 | Вахитов Айнур Бакеевич | 12 | 5 |
230 | Ильясова Альбина Вильевна | 12 | 3 |
Ожидаемый результат: сообщение "Для группы 224 повторяются ФИО студента: Гаскаров Рамиль Вильевич и номер предмета: 12".
Фактический результат: совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 7
Цель теста: проверить функционирование программы при присутствии одинаковых ФИО студентов соответствующих разным группам.
Содержание теста: файл 27.txt
№ группы | Фамилия, имя, отчество | № предмета | Оценка |
224 | Гаскаров Рамиль Вильевич | 12 | 4 |
224 | Иванова Алла Сергеевна | 12 | 3 |
224 | Лысков Дмитрий Иванович | 12 | 4 |
224 | Гаскаров Рамиль Вильевич | 30 | 5 |
224 | Иванова Алла Сергеевна | 30 | 4 |
230 | Лысков Дмитрий Иванович | 30 | 4 |
230 | Вахитов Айнур Бакеевич | 72 | 5 |
230 | Ильясова Альбина Вильевна | 72 | 4 |
230 | Вахитов Айнур Бакеевич | 12 | 5 |
230 | Ильясова Альбина Вильевна | 12 | 3 |
Ожидаемый результат: сообщение “Одинаковым ФИО студента: Лысков Дмитрий Иванович соответствуют разные номера групп”
Фактический результат: совпадает с ожидаемым.
Результат тестирования: неуспешный.
6.3 Тестирование функции “Формирование выходного файла”
Тест 1
Цель теста: проверить функционирование программы при отсутствии в файле F1 наименования предмета соответствующего номеру из файла F2.
Содержание теста: 10.txt
№ предмета | Наименование предмета |
12 | Физика |
72 | Программирование |
30 | Электроника |
19 | История |
Содержание теста: 201.txt
№ группы | Фамилия, имя, отчество | № предмета | Оценка |
224 | Гаскаров Рамиль Вильевич | 65 | 4 |
224 | Иванова Алла Сергеевна | 12 | 3 |
224 | Лысков Дмитрий Иванович | 12 | 4 |
224 | Гаскаров Рамиль Вильевич | 30 | 5 |
224 | Иванова Алла Сергеевна | 30 | 4 |
224 | Лысков Дмитрий Иванович | 30 | 4 |
230 | Вахитов Айнур Бакеевич | 72 | 5 |
230 | Ильясова Альбина Вильевна | 72 | 4 |
230 | Вахитов Айнур Бакеевич | 12 | 5 |
230 | Ильясова Альбина Вильевна | 12 | 3 |
Ожидаемый результат: сообщение "Не найдено наименование предмета соответствующее номеру 65".
Фактический результат: совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 2
Цель теста: проверить функционирование программы при присутствии в файле F1 ФИО преподавателей соответствующих всем табельным номерам из файла F2.
Содержание теста: 10.txt
№ предмета | Наименование предмета |
12 | Физика |
72 | Программирование |
30 | Электроника |
19 | История |
Содержание теста: 20.txt
№ группы | Фамилия, имя, отчество | № предмета | Оценка |
224 | Гаскаров Рамиль Вильевич | 12 | 4 |
224 | Иванова Алла Сергеевна | 12 | 3 |
224 | Лысков Дмитрий Иванович | 12 | 4 |
224 | Гаскаров Рамиль Вильевич | 30 | 5 |
224 | Иванова Алла Сергеевна | 30 | 4 |
224 | Лысков Дмитрий Иванович | 30 | 4 |
230 | Вахитов Айнур Бакеевич | 72 | 5 |
230 | Ильясова Альбина Вильевна | 72 | 4 |
230 | Вахитов Айнур Бакеевич | 12 | 5 |
230 | Ильясова Альбина Вильевна | 12 | 3 |
Ожидаемый результат: Программа успешно выполнена.
Фактический результат: совпадает с ожидаемым.
Результат тестирования: неуспешный.
7. Выводы
Данная программа была протестирована для всех представленных в таблице решений входных условий. Тесты не обнаружили ошибок в работе программы. Следовательно, программа отвечает заявленным внешним спецификациям.
8. Список используемой литературы
1. Технологии программирования [Электронный ресурс] / коллектив авторов под рук. Гвоздева В.Е. ; отдел образовательных технологий УГАТУ. - Электрон. текстовые и граф. дан. (3,9 Мб). - Уфа : УГАТУ, 2007
2. Савич У. С++ во всей полноте. - Киев: Издательская группа BHV; СПб.: Питер, 2005. - 784 с.
Приложение А. Текст программы
#pragma hdrstop
#include
#include
#include
#include
#include
void Proverka1();
void Proverka2();
void MakeFile();
int KolPol(char* str);
bool Chislo(char snum[]);
bool Correct(char str[], char sym[]);
struct st1
{
int num;
char name[30];
st1 *next;
} *beg1,*end1;
struct st2
{
int numgr;
int numpr;
char fio[50];
char ball;
st2 *next;
st2 *prev;
} *beg2,*end2;
#pragma argsused
void main()
{
clrscr();
Proverka1();
Proverka2();
MakeFile();
getch();
}
void Proverka1()
{
char fname[20];
FILE *F1;
printf("Введите имя первого файла: ");
scanf("%s",&fname);
while((F1=fopen(fname,"r"))==NULL)
{
printf("\tОшибка! Файл с именем %s не найден\n\t\tДля повторного ввода нажмите любую клавишу\n\t\tДля выхода нажмите Esc\n\n",fname);
if(getch()==27)
exit(0);
else
{
printf("Введите имя первого файла: ");
scanf("%s",&fname);
}
}
bool error=false;
char str[1000];
st1 *p1,*p2;
beg1=NULL;
while(fgets(str,1000,F1))
{
if(KolPol(str)!=2)
{
printf("\tОшибка! В записи\n\t\t%s\t\tне хватает либо присутствуют лишние поля\n\t\tЗапись не будет учитываться при формировании выходного файла\n",str);
error=true;
}
else
{
char snum[10];
char name[30];
sscanf(str,"%s%s",snum,name);
if(!Correct(name,"_-"))
{
printf("\tОшибка! Наименование предмета %s\n\t\tсодержит недопустимые символы\n",name);
error=true;
}
if(!Chislo(snum))
{
printf("\tОшибка! Номер предмета %s\n\t\tне является числом большим нуля\n\t\tЗапись не будет учитываться при формировании выходного файла\n",snum);
error=true;
}
else
{
p1 = (st1*) malloc(sizeof(st1));
sscanf(str,"%s%s",snum,p1->name);
p1->num=atol(snum);
if(beg1==NULL)
beg1=p1;
else
end1->next=p1;
end1=p1;
end1->next=NULL;
}
}
}
p1=beg1;
while(p1!=NULL)
{
p2=p1->next;
while(p2!=NULL)
{
if(p1->num==p2->num)
{
printf("\tОшибка! В записях присутствуют одинаковые номера предметов: %d\n",p1->num);
error=true;
}
if(strcmp(p1->name,p2->name)==NULL)
{
printf("\tОшибка! В записях присутствуют одинаковые наименования предметов: %s\n",p1->name);
error=true;
}
p2=p2->next;
}
p1=p1->next;
}
if(error)
printf("\nВнимание! В связи с наличием ошибок возможна некорректность выходного файла\n");
}
void Proverka2()
{
char fname[20];
FILE *F2;
printf("\nВведите имя второго файла: ");
scanf("%s",&fname);
while((F2=fopen(fname,"r"))==NULL)
{
printf("\tОшибка! Файл с именем %s не найден\n\t\tДля повторного ввода нажмите любую клавишу\n\t\tДля выхода нажмите Esc\n\n",fname);
if(getch()==27)
exit(0);
else
{
printf("\nВведите имя второго файла: ");
scanf("%s",&fname);
}
}
bool error=false;
char str[1000];
st2 *p1,*p2;
beg2=NULL;
while(fgets(str,1000,F2))
{
if(KolPol(str)!=4)
{
printf("\tОшибка! В записи\n\t\t%s\t\tне хватает либо присутствуют лишние поля\n\t\tЗапись не будет учитываться при формировании выходного файла\n",str);
error=true;
}
else
{
bool zcor=true;
char snumgr[10];
char snumpr[10];
char fio[50];
char sball[10];
sscanf(str,"%s%s%s%s",snumgr,fio,snumpr,sball);
if(!Chislo(snumgr))
{
printf("\tОшибка! Номер группы %s не является числом большим нуля\n\t\tЗапись не будет учитываться при формировании выходного файла\n",snumgr);
zcor=false;
}
if(!Correct(fio,"_"))
{
printf("\tОшибка! ФИО студента %s\n\t\tсодержит недопустимые символы\n",fio);
error=true;
}
if(!Chislo(snumpr))
{
printf("\tОшибка! Номер предмета %s\n\t\tне является числом большим нуля\n\t\tЗапись не будет учитываться при формировании выходного файла\n",snumpr);
zcor=false;
}
if((strchr("2345",sball[0])==NULL)||(strlen(sball)!=1))
{
printf("\tОшибка! Оценка %s является недопустимым символом\n",sball);
error=true;
}
if(zcor)
{
p1 = (st2*) malloc(sizeof(st2));
sscanf(str,"%s%s%s%s",snumgr,p1->fio,snumpr,sball);
p1->numgr=atol(snumgr);
p1->numpr=atol(snumpr);
p1->ball=sball[0];
p2=beg2;
while((p2!=NULL)&&(p1->numgr!=p2->numgr))
{
p2=p2->next;
}
while((p2!=NULL)&&(p1->numpr!=p2->numpr)&&(p1->numgr==p2->numgr))
{
p2=p2->next;
}
if(p2==NULL)
{
if(beg2==NULL)
{
beg2=p1;
beg2->prev=NULL;
}
else
{
end2->next=p1;
p1->prev=end2;
}
end2=p1;
end2->next=NULL;
}
else
{
if(p2->prev==NULL)
{
p1->prev=NULL;
beg2=p1;
}
else
{
p1->prev=p2->prev;
p2->prev->next=p1;
}
p2->prev=p1;
p1->next=p2;
}
}
else
{
error=true;
}
}
}
p1=beg2;
while(p1!=NULL)
{
p2=p1->next;
while(p2!=NULL)
{
if((p1->numgr!=p2->numgr)&&(strcmp(p1->fio,p2->fio)==NULL))
{
printf("\tОшибка! Одинаковым ФИО студентов %s соответствуют разные номера групп\n",p1->fio);
error=true;
}
if((p1->numgr==p2->numgr)&&(strcmp(p1->fio,p2->fio)==NULL)&&(p1->numpr==p2->numpr))
{
printf("\tОшибка! Для группы %d повторяются ФИО студента %s\n\t\tи номер предмета %в\n",p1->numgr,p1->fio,p1->numpr);
error=true;
}
p2=p2->next;
}
p1=p1->next;
}
if(error)
printf("\nВнимание! В связи с наличием ошибок возможна некорректность выходного файла\n");
}
void MakeFile()
{
char fname[20];
FILE *F3;
printf("\nВведите имя выходного файла: ");
scanf("%s",&fname);
F3=fopen(fname,"w");
st2 *p1=beg2;
st1 *p2;
int numgr,numpr;
while(p1!=NULL)
{
numgr=p1->numgr;
fprintf(F3,"\nГруппа: %d\n",numgr);
while(numgr==p1->numgr)
{
numpr=p1->numpr;
p2=beg1;
while(p2!=NULL)
{
if(p1->numpr==p2->num)
{
fprintf(F3," %-20s\n",p2->name);
break;
}
p2=p2->next;
}
if(p2==NULL)
{
printf("\tОшибка! Не найдено наименование предмета\n\t\tсоответствующие номеру %d\n",p1->numpr);
while(numpr==p1->numpr)
{
p1=p1->next;
if(p1==NULL)
break;
}
}
else
{
while(numpr==p1->numpr)
{
fprintf(F3,"\t%-30s%c\n",p1->fio,p1->ball);
p1=p1->next;
if(p1==NULL)
break;
}
}
if(p1==NULL)
break;
}
}
printf("\nВыходной файл создан.\nДля завершения работы нажмите любую клавишу\n");
}
int KolPol(char* str)
{
int i=0;
int kol=0;
bool slovo=false;
while(str[i]!='\0')
{
if((str[i]==' ')||(str[i]=='\t'))
slovo=false;
else
if(!slovo)
{
slovo=true;
kol++;
}
i++;
}
return kol;
}
bool Chislo(char snum[])
{
for(int i=0; i
if(!isdigit(snum[i]))
return false;
if(strcmp(snum,"0")==NULL)
return false;
else
return true;
}
bool Correct(char str[], char sym[])
{
for(int i=0; i
if(strchr(sym,str[i])==NULL)
return false;
return true;
}
Приложение Б. Результаты работы программы
Рис 1 - Пример успешного выполнения программы.