Специфицирование и тестирование программ

Структура целей разрабатываемой программы и ограничения на входные и выходные данные. Таблицы решений для функции "Чтение и проверка на корректность файла". Тестирование функции "Проверка на корректность". Результат обработки в виде выходного документа.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 26.07.2014
Размер файла 4,1 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Федеральное агентство по образованию

Государственное образовательное учреждение

высшего профессионального образования

УФИМСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Курсовая работа

по дисциплине «Технология программирования»

Выполнил

Анянов В.М.

Уфа - 2014

Содержание

1. Задание к работе

2. Техническое задание

3. Структура целей разрабатываемой программы

4. Ограничения на входные и выходные данные

4.1 Ограничения, накладываемые на входные данные, считываемые из первого файла

4.2 Ограничения, накладываемые на входные данные, считываемые из второго файла

4.3 Другие ограничения

5. Таблицы решений

5.1 ТР для функции “Чтение и проверка на корректность файла F1”

5.2 ТР для функции “Чтение и проверка на корректность файла F2”

5.3 ТР для функции “Создание и формирование выходного файла F3”

6. Тестирование программы

6.1 Тестирование функции “Проверка на корректность файла F1”

6.2 Тестирование функции “Проверка на корректность файла F2”

6.3 Тестирование функции “Формирование выходного файла F3”

7. Блок-схемы программы

7.1 Схема основной функции

7.2 Схема программы для функции “Проверка на корректность данных файла F1”

7.3 Схема программы для функции “Проверка на корректность данных файла F2”

7.4 Схема программы для функции “Проверка соответствия данных файлов F1 и F2”

7.5 Схема программы для функции «Формирование выходного файла F3»

Вывод

Список литературы

Приложение

1. Задание к работе

Разработать программу совместной обработки файлов типа F1 и F2 для формирования выходного документа типа F3.

ИСХОДНЫЕ ДАННЫЕ И ОСОБЕННОСТИ АЛГОРИТМА

Текстовые файлы на МД, структура записей которых приведена ниже:

Таблица 1 - Структура файла F1

Социальный № клиента

Паспортные данные клиента

Фамилия, имя, отчество клиента

Таблица 2 - Структура файла F2

Социальный № клиента

№ счета

Наименование вклада

Годовой % начисления

Объем вклада

Результат обработки в виде выходного документа, представленного в таблице F3:

программа таблица файл документ

Таблица 3 - Структура файла F3

Фамилия, имя, отчество клиента

Паспортные данные клиента

Годовой % начисления

Объем вклада

Предусмотреть как один, так и несколько видов вклада у одного клиента. Рекомендуется имена файлов типа F1 и F2 запрашивать с клавиатуры дисплея.

2. Техническое задание

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

Система разрабатывается на основании задания о курсовой работе от 20.03.2014 по предмету «Технология программирования», а так же на основе изучения учебного курса по данному предмету.

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

Требования к программе или программному изделию

2.4.1. Требования к функциональным характеристикам

2.4.1.1. Система должна обеспечивать возможность выполнения следующих функций:

· инициализацию системы

· ввод и коррекцию текущей информации;

· хранение всевозможной информации о клиенте и вкладе;

2.4.1.2. Исходные данные:

· список социального номера клиента, его паспортные данные и ФИО.

· список социального номера клиента, номер счета, открытого им, наименование вклада, годовой процент начисления по вкладу, объем вклада.

2.4.1.3. Результаты:

· список ФИО клиента с его паспортными данными, годовым процентом начисления по вкладу, и объемом вклада.

2.4.2. Требования к надежности

2.4.2.1. Предусмотреть контроль вводимой информации.

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

2.4.2.3. Обеспечить целостность хранимой информации.

2.4.3.Требования к составу и параметрам технических средств

2.4.3.1 Система должна работать на IBM совместимых персональных компьютерах.

2.4.3.2. Минимальная конфигурация:

· тип процессора…………………………………………………Pentium и выше;

· объем оперативного запоминающего устройства……………32 Мб и более.

2.4.4. Требования к информационной и программной совместимости:

Система должна работать под управлением семейства операционных систем Win 32 (Windows 95, Windows 98, Windows 2000, Windows NT и т. п.).

2.5. ТРЕБОВАНИЯ К ПРОГРАММНОЙ ДОКУМЕНТАЦИИ

2.5.1. Разрабатываемые программные модули должны быть самодокументированы, т.е. тексты программ должны содержать все необходимые комментарии.

2.5.2. Программная система должна обеспечивать запрос на входные данные.

2.5.3. В состав сопровождающей документации должны входить:

2.5.3.1. Пояснительная записка на 25-30 листах, содержащая описание разработки.

3. Структура целей разрабатываемой программы

Разрабатываемую программу можно условно разделить на пять частей:

· чтение входных файлов F1 и F2;

· проверка корректности данных файлов F1 и F2;

· проверка соответствия данных файлов F1 и F2;

· формирование строк выходной таблицы;

· запись выходного файла F3.

Проверка корректности данных файлов F1 и F2 проводится независимо друг от друга.

Далее проверяется соответствие данных файлов F1 и F2.

В процессе совместной обработки файлов F1 и F2 формируется текстовая строка для записи в файл F3.

4. Ограничения на входные и выходные данные

4.1 Ограничения, накладываемые на входные данные, считываемые из первого файла:

1

Социальный номер должен содержать только цифры.

2

Каждый социальный номер должен быть уникальным.

3

Социальный номер не должен быть пустым полем.

4

Каждая запись паспортных данных должна быть уникальной.

5

Паспортные данные не должны быть пустым полем.

6

Фамилия, имя, отчество клиента не должны быть пустым полем.

7

Фамилия, имя, отчество клиента должно состоять из допустимых символов (a-z,A-Z,”.“,).

Таблица ограничений входного файла f1

4.2 Ограничения, накладываемые на входные данные, считываемые из второго файла

1

Социальный номер должен содержать только цифры.

2

Социальный номер не должен быть пустым полем.

3

Объем вклада должен содержать только цифры и быть положительным числом.

4

Объем вклада не должен быть пустым полем.

5

Номер счета должен содержать только цифры.

6

Номер счета не должен быть пустым полем.

7

Наименование вклада не должно быть пустым полем.

8

Годовой процент начисления должен содержать только цифры и быть положительным числом.

9

Годовой процент начисления не должен быть пустым полем.

Таблица ограничений входного файла f2

4.3 Другие ограничения

1

Во втором входном файле F2 социальный номер должен соответствовать социальному номеру из входного файла F1.

2

Если входные файлы F1 или F2 не существуют или не могут быть открыты, то выводится сообщение об ошибке при открытии файла.

3

На диске должно быть свободное место для создания выходного файла F3.

5. Таблицы решений

Методика построения ТР заключается в следующем:

а) определить все условия и действия в спецификации;

б) вписать действия и условия в таблицу;

в) в нумерованных столбцах отметить все возможные комбинации условий и выполняемых при выполнении условий действий;

г) при необходимости редуцировать таблицу (если есть 2 столбца, у которых перечень действий совпадает и которые отличаются только результатами условий `Д' и `Н' в одной строке, то такие столбцы могут быть слиты в один).

5.1 ТР для функции “Чтение и проверка на корректность файла F1”

Условия

1

2

3

4

5

6

7

8

9

Файл с таким именем не существует?

Н

Д

Д

Д

Д

Д

Д

Д

Д

Поле «Социальный номер» содержит допустимое значение?

_

Н

Д

Д

Д

Д

Д

Д

Д

Два одинаковых поля «Социальный номер» не существуют?

_

_

Н

Д

Д

Д

Д

Д

Д

Поле «Социальный номер» содержит не пустое значение?

_

_

_

Н

Д

Д

Д

Д

Д

Два одинаковых поля «Паспортные данные» не существуют?

_

_

_

_

Н

Д

Д

Д

Д

Поле «Паспортные данные» содержит не пустое значение?

_

_

_

_

_

Н

Д

Д

Д

Поле «Ф.И.О. клиента» содержит не пустое значение?

_

_

_

_

_

_

Н

Д

Д

Поле «Ф.И.О. клиента» содержит допустимое значение?

_

_

_

_

_

_

_

Н

Д

Входной файл F1 корректен?

Н

Н

Н

Н

Н

Н

Н

Н

Д

Действия

Сообщение «Файл ФАЙЛ.ХХХ не может быть открыт»

1

Сообщение «Социальный номер в F1 должен содержать только цифры. Введенный социальный номер в F1 - ХХХХ»

1

Сообщение «Два или более социальных номера в F1 имеют одинаковое значение. Ошибка в значении - ХХХХ»

1

Сообщение «Пустое поле Социальный номер клиента в строке Х файла F1»

1

Сообщение «Ошибка в паспортных данных клиента. Паспортным данным S ХХХХ N ХХХХХ присвоено два или более социальных номера»

1

Сообщение «Пустое поле Паспортные данные клиента в строке Х файла F1»

1

Сообщение «Пустое поле Ф.И.О. клиента в строке Х файла F1»

1

Сообщение «Ошибка ввода Ф.И.О. клиента. Поле должно содержать буквы, знак пробела и точки. Ошибка в - ХХХ»

1

Установить флаг некорректности файла F1.

2

2

2

2

2

2

2

2

1

5.2 ТР для функции “Чтение и проверка на корректность файла F2”

Условия

1

2

3

4

5

6

7

8

9

10

11

Файл с таким именем не существует?

Н

Д

Д

Д

Д

Д

Д

Д

Д

Д

Д

Поле «Социальный номер» содержит допустимое значение?

_

Н

Д

Д

Д

Д

Д

Д

Д

Д

Д

Поле «Социальный номер» содержит не пустое значение?

_

_

Н

Д

Д

Д

Д

Д

Д

Д

Д

Поле «Объем вклада» содержит допустимое значение?

_

_

_

Н

Д

Д

Д

Д

Д

Д

Д

Поле «Объем вклада» содержит не пустое значение?

_

_

_

_

Н

Д

Д

Д

Д

Д

Д

Поле «Номер счета» содержит допустимое значение?

_

_

_

_

_

Н

Д

Д

Д

Д

Д

Поле «Номер счета» содержит не пустое значение?

_

_

_

_

_

_

Н

Д

Д

Д

Д

Поле «Наименование вклада» содержит не пустое значение?

_

_

_

_

_

_

_

Н

Д

Д

Д

Поле «Годовой процент начисления» содержит допустимое значение?

_

_

_

_

_

_

_

_

Н

Д

Д

Поле «Годовой процент начисления» содержит не пустое значение?

_

_

_

_

_

_

_

_

_

Н

Д

Входной файл F2 корректен?

Н

Н

Н

Н

Н

Н

Н

Н

Н

Н

Д

Действия

Сообщение «Файл ФАЙЛ.ХХХ не может быть открыт»

1

Сообщение «Социальный номер в F2 должен содержать только цифры. Введенный социальный номер в F2 - ХХХХ»

1

Сообщение «Пустое поле Социальный номер клиента в строке Х файла F2»

1

Сообщение «Объем вклада должен содержать только цифры. Ошибка в строке: Х».

1

Сообщение «Пустое поле Объем вклада в строке Х файла F2»

1

Сообщение «Номер счета должен содержать только цифры. Ошибка в строке: Х».

1

Сообщение «Пустое поле Номер счета в строке Х файла F2»

1

Сообщение «Пустое поле Наименование вклада в строке Х файла F2»

1

Сообщение «Годовой процент начисления должен содержать только цифры. Ошибка в строке: Х».

1

Сообщение «Пустое поле Годовой процент начисления в строке Х файла F2»

1

Установить флаг некорректности файла F2.

2

2

2

2

2

2

2

2

2

2

1

5.3 ТР для функции “Создание и формирование выходного файла F3”

Условия

1

2

3

4

Установлен флаг корректности файла F1?

Н

Д

Н

Д

Установлен флаг корректности файла F2?

Н

Н

Д

Д

Действия

Сообщение «Социальный номер в F1 должен содержать только цифры. Введенный социальный номер в F1 - ХХХХ»

1

1

Сообщение «Социальный номер в F2 должен содержать только цифры. Введенный социальный номер в F1 - ХХХХ»

2

1

Вывод записи в выходной файл F3

1

6. Тестирование программы

Тестирование программного обеспечения охватывает целый ряд видов деятельности, аналогичных последовательности процессов разработки программного обеспечения. В него входят:

а) постановка задачи для теста,

б) проектирование теста,

в) написание тестов,

г) тестирование тестов,

д) выполнение тестов,

е) изучение результатов тестирования.

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

6.1 Тестирование функции “Проверка на корректность входного файла F1”

Тест 1

Цель теста: проверить функционирование программы при вводе несуществующего файла.

Ожидаемый результат: Сообщение «Файл oshibka не может быть открыт».

Фактический результат: совпадает с ожидаемым.

Результат тестирования: неуспешный.

Тест 2

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

Предусмотренная ошибка в файле: 3ы21|S 8007 N 21212|Renatov S.S.|

Ожидаемый результат: Сообщение «Социальный номер в F1 должен содержать только цифры. Введенный социальный номер в F1 - 321».

Фактический результат: совпадает с ожидаемым.

Результат тестирования: неуспешный.

Тест 3

Цель теста: проверить функционирование программы при двух одинаковых социальных номерах во входном файле F1.

Предусмотренная ошибка в файле: 3321|S 8005 N 34894|Brejnev M.S.|, 3321|S 8007 N 21212|Renatov S.S.|

Ожидаемый результат: Сообщение «Два или более социальных номера в F1 имеют одинаковое значение. Ошибка в значении - 3321».

Фактический результат: совпадает с ожидаемым.

Результат тестирования: неуспешный.

Тест 4

Цель теста: проверить функционирование программы при отсутствии социального номера во входном файле F1.

Предусмотренная ошибка в файле: |S 8005 N 35865|Morozov A.G.|

Ожидаемый результат: Сообщение «Пустое поле Социальный номер клиента в строке 5 файла F1».

Фактический результат: совпадает с ожидаемым.

Результат тестирования: неуспешный.

Тест 5

Цель теста: проверить функционирование программы при двух паспортных данных во входном файле F1.

Предусмотренная ошибка в файле: |9748|S 8007 N 21212|Morozov A.G.|, 3321|S 8007 N 21212|Renatov S.S.|

Ожидаемый результат: Сообщение «Ошибка в паспортных данных клиента. Паспортным данным S 8007 N 21212 присвоено два или более социальных номера».

Фактический результат: совпадает с ожидаемым.

Результат тестирования: неуспешный.

Тест 6

Цель теста: проверить функционирование программы при отсутствии паспортных данных во входном файле F1.

Предусмотренная ошибка в файле: 9934||Safinov G.S.|

Ожидаемый результат: Сообщение «Пустое поле Паспортные данные клиента в строке 7 файла F1».

Фактический результат: совпадает с ожидаемым.

Результат тестирования: неуспешный.

Тест 7

Цель теста: проверить функционирование программы при отсутствии фамилии, имени и отчества клиента во входном файле F1.

Предусмотренная ошибка в файле: 3321|S 8007 N 21212|

Ожидаемый результат: Сообщение «Пустое поле Ф.И.О. клиента в строке 8 файла F1».

Фактический результат: совпадает с ожидаемым.

Результат тестирования: неуспешный.

Тест 8

Цель теста: проверить функционирование программы при фамилии, имени и отчестве клиента во входном файле F1, содержащими недопустимые символы.

Предусмотренная ошибка в файле: 5693|S 8005 N 29869|Petr22unin A.F.|

Ожидаемый результат: Сообщение «Ошибка ввода Ф.И.О. клиента. Поле должно содержать буквы, знак пробела и точки. Ошибка в - Petr22unin A.F.».

Фактический результат: совпадает с ожидаемым.

Результат тестирования: неуспешный.

Тест 9

Цель теста: проверить функционирование программы при корректном вводе файла F1.

Фактический результат: совпадает с ожидаемым.

Результат тестирования: успешный.

6.2 Тестирование функции “Проверка на корректность входного файла F2”.

Тест 1

Цель теста: проверить функционирование программы при вводе несуществующего файла.

Ожидаемый результат: Сообщение «Файл oshibka не может быть открыт».

Фактический результат: совпадает с ожидаемым.

Результат тестирования: неуспешный.

Тест 2

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

Предусмотренная ошибка в файле: 97о8|538028|Deviatoe maia|14|10000|

Ожидаемый результат: Сообщение «Социальный номер в F2 должен содержать только цифры. Введенный социальный номер в F2 - 97о8».

Фактический результат: совпадает с ожидаемым.

Результат тестирования: неуспешный.

Тест 3

Цель теста: проверить функционирование программы при отсутствии социального номера во входном файле F2.

Предусмотренная ошибка в файле: ||538028|Nakopitelny|12|50000|

Ожидаемый результат: Сообщение «Пустое поле Социальный номер клиента в строке 5 файла F2».

Фактический результат: совпадает с ожидаемым.

Результат тестирования: неуспешный.

Тест 4

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

Предусмотренная ошибка в файле: 9748|538028|Nakopitelny|12|500a00|

Ожидаемый результат: Сообщение «Объем вклада должен содержать только цифры. Ошибка в строке: 5».

Фактический результат: совпадает с ожидаемым.

Результат тестирования: неуспешный.

Тест 5

Цель теста: проверить функционирование программы при отрицательном объеме вклада во входном файле F2.

Предусмотренная ошибка в файле: 9934|345677|Molodejnii|5|-3400|

Ожидаемый результат: Сообщение «Объем вклада должен содержать только цифры и быть больше нуля. Ошибка в строке: 8».

Фактический результат: совпадает с ожидаемым.

Результат тестирования: неуспешный.

Тест 6

Цель теста: проверить функционирование программы при отсутствии объема вклада во входном файле F2.

Предусмотренная ошибка в файле: 3321|777434|Molodejnii|5|

Ожидаемый результат: Сообщение «Пустое поле Объем вклада в строке 9 файла F2».

Фактический результат: совпадает с ожидаемым.

Результат тестирования: неуспешный.

Тест 7

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

Предусмотренная ошибка в файле: 5693|7a8932|Pensionny|11|5000|

Ожидаемый результат: Сообщение «Номер счета должен содержать только цифры. Ошибка в строке: 6».

Фактический результат: совпадает с ожидаемым.

Результат тестирования: неуспешный.

Тест 8

Цель теста: проверить функционирование программы при отрицательном номере счета во входном файле F2.

Предусмотренная ошибка в файле: 3321|-777434|Molodejnii|5|6000|

Ожидаемый результат: Сообщение «Номер счета должен содержать только цифры и быть не отрицательным. Ошибка в строке: 9».

Фактический результат: совпадает с ожидаемым.

Результат тестирования: неуспешный.

Тест 9

Цель теста: проверить функционирование программы при отсутствии номера счета во входном файле F2.

Предусмотренная ошибка в файле: 1947||Pensionny|11|60000|

Ожидаемый результат: Сообщение «Пустое поле Номер счета в строке 7 файла F2».

Фактический результат: совпадает с ожидаемым.

Результат тестирования: неуспешный.

Тест 10

Цель теста: проверить функционирование программы при отсутствии наименования вклада во входном файле F2.

Предусмотренная ошибка в файле: 1947|125398||11|60000|

Ожидаемый результат: Сообщение «Пустое поле Наименование вклада в строке 7 файла F2».

Фактический результат: совпадает с ожидаемым.

Результат тестирования: неуспешный.

Тест 11

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

Предусмотренная ошибка в файле: 1947|125398|Pensionny|1a1|60000|

Ожидаемый результат: Сообщение «Годовой процент начисления должен содержать только цифры и быть больше нуля. Ошибка в строке: 7».

Фактический результат: совпадает с ожидаемым.

Результат тестирования: неуспешный.

Тест 12

Цель теста: проверить функционирование программы при отрицании годового процента начисления во входном файле F2.

Предусмотренная ошибка в файле: 9934|345677|Molodejnii|-5|3400|

Ожидаемый результат: Сообщение «Годовой процент начисления долженсодержать только цифры и быть больше нуля в строке 8 файла F2».

Фактический результат: совпадает с ожидаемым.

Результат тестирования: неуспешный.

Тест 13

Цель теста: проверить функционирование программы при отсутствии годового процента начисления во входном файле F2.

Предусмотренная ошибка в файле: 1947|125398|Pensionny||60000|

Ожидаемый результат: Сообщение «Пустое поле Годовой процент начисления в строке 7 файла F2».

Фактический результат: совпадает с ожидаемым.

Результат тестирования: неуспешный.

Тест 14

Цель теста: проверить функционирование программы при корректном вводе всех данных во входном файле F2.

Фактический результат: совпадает с ожидаемым.

Результат тестирования: успешный.

6.3 Тестирование функции “Формирование выходного файла F3

Тест 1

Цель теста: проверить функционирование программы при несоответствии социальных номеров во входных файлах F1 и F2.

Содержание теста: файлы q.txt и oshibka19.txt

Предусмотренная ошибка в файле F2: 2962|580764|Sberegatelny|8|30000|

Ожидаемый результат: Сообщение «Социальные номера в файлах F1 и F2 не совпадают. Введенный социальный номер в - 2964 и 2962».

Фактический результат: совпадает с ожидаемым.

Результат тестирования: неуспешный.

Тест 2

Цель теста: проверить функционирование программы при наличии корректных данных входных файлов F1 и F2.

Содержание теста: файлы q.txt и qq.txt

Ожидаемый результат: Выведена таблица с итоговыми данными и создан выходной файл F3.

Фактический результат совпал с ожидаемым

Результат тестирования: успешный.

7. Блок-схемы программы

7.1 Блок-схема основной программы

7.2 Проверка на корректность данных файла F1

7.3 Проверка на корректность данных файла F2

7.4 Проверка соответствия данных файлов F1 и F2

7.5 Формирование выходного файла F3

Вывод

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

Список литературы

1) Методические указания к курсовой работе по дисциплине «Технология программирования» / Уфимск. Гос. Авиац. техн. ун-т; Сост.: Гвоздев В.Е., Мукасеева В.Н. Хасанов А.Ю - Уфа, 2004, - 42 с.

2) Выполнение схем алгоритмов, программ, данных и систем: Методические указания к курсовому и дипломному проектированию / Уфимск. Гос. Авиац. техн. ун-т; Сост.: Р.Г. Валеева, Г.Р. Валеева. - Уфа, 2003. - 23 с.

Приложение 1

Листинг программного продукта

#include <iostream>

#include <stdio.h>

#include <string.h>

#include <ctype.h>

#include <conio.h>

#include <iomanip>

using namespace std;

FILE *f1;

FILE *f2;

FILE *f3;

FILE *fer;

char file1[99];

char file2[99];

struct Table1

{

char soc_nom_tab1[8]; //социальный номер клиента

char pasp_dan_tab1[15]; //паспортные данные клиента

char fio_tab1[15]; //Ф.И.О. клиента

} *table1;

struct Table2

{

char soc_nom_tab2[8]; //социальный номер клиента

char nom_schet_tab2[8]; //номер счета

char naim_vklad_tab2[15]; //наименование вклада

char god_proc_tab2[4]; //годовой процент начисления

char ob_vklad_tab2[8]; //объем вклада

} *table2;

struct BUF

{

char fio_tab3[15]; //Ф.И.О. клиента

char pasp_dan_tab3[15]; //паспортные данные клиента

char god_proc_tab3[4]; //годовой процент начисления

char ob_vklad_tab3[8]; //объем вклада

} *buf;

int n,k,i,ii;

void DELET()

delete[] table1;

delete[] table2;

delete[] buf;

}

int StrKolF1() //ПОДЧЕТ КОЛ-ВА СТРОК В ФАЙЛАХ

{

char line[128] = {0};

int k1 = 0;

cout<<"\n~~~~~~~Menu~~~~~~~~~~~~"<<endl<<endl<<endl;

cout<<"__________________________________"<<endl;

cout<<"\nVvedenie pervogo ishodnogo faila s dannbimi iz kornevoi papki programmi"<<endl<<endl;

printf("Vvedite imya faila F1: ");

scanf("%s",&file1);

f1 = fopen(file1, "r");

if(!f1)

{

printf("\nFail %s ne mozhet bit otkrit, tak kak nekorrektno vvedeno imya faila\n",file1);

cout<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();

exit(0);

}

while(!feof(f1)) //подсчитываем кол-во строк в файле F1

{

k1++;

fgets(line, sizeof(line), f1);

}

fclose(f1);

cout<<"\nfail naiden i schitan uspishno"<<endl<<endl;

return k1;

}

int StrKolF2()

{

char line[128] = {0};

int k2 = 0;

cout<<"_______________________________________"<<endl;

cout<<"\nVvedenie vtorogo ishodnogo faila s dannbimi iz kornevoi papki programmi"<<endl<<endl;

printf("Vvedite imya faila F2: ");

scanf("%s",&file2);

f2 = fopen(file2, "r");

if(!f2)

{

printf("\nFail %s ne mozhet bit otkrit, tak kak nekorrektno vvedeno imya faila\n",file2);

cout<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();

exit(0);

}

while(!feof(f2)) //подсчитываем кол-во строк в файле F2

{

k2++;

fgets(line, sizeof(line), f2); //подсчитываем кол-во строк в файле F2

}

fclose(f2);

cout<<"\nfail naiden i schitan uspishno"<<endl<<endl;

return k2;

}

// (работает если ввести - или русскую букву и только одну и только в начале или в конце) проверка на корректность ввода соц номера в файле f1:

void CheckError(int n1, int n2)

{

for (int ii = 0; ii<= (n1-1); ii++)

{

for (int i=0; i<(strlen(table1[ii].soc_nom_tab1)); i++)

{

if (table1[ii].soc_nom_tab1[i] < '0' && table1[ii].soc_nom_tab1[i]!=' ')

{

cout<<"\n________________________________________"<<endl;

printf("\nOshibka: Soc. nomer v F1 dolzhen soderzhat tolko cifri. Vvedenny soc. nomer v f1 - %s\n",table1[ii].soc_nom_tab1);

cout<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();

exit(0);

}

// (работает если ввести - или русскую букву и только одну и только в начале или в конце) проверка на корректность ввода соц номера номера в файле f2

for (ii = 0; ii<= (n2-1); ii++)

{

for (int i=0; i<(strlen(table2[ii].soc_nom_tab2)); i++)

{

if (table2[ii].soc_nom_tab2[i] < '0')

{

cout<<"\n_____________________________"<<endl;

printf("\nOshibka: Soc. nomer v F2 dolzhen soderzhat tolko cifri. Vvedenny soc. nomer v f2 - %s\n",table2[ii].soc_nom_tab2);

cout<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();

exit(0);

}

// (только если ввести - или русскую букву и только одну и только в начале или в конце) проверка на корректность ввода объема вклада в Файле f2-

for (ii = 0; ii<= (n2-1); ii++)

{

for (int i=0; i<(strlen(table2[ii].ob_vklad_tab2)); i++)

{

if (table2[ii].ob_vklad_tab2[i] < '0')

{

cout<<"\n__________________________"<<endl;

printf("\nOshibka: Obiem vklada dolzhen soderzhat tolko cifri i bit bolshe nylia. Oshibka v stroke: %d\n",ii+2);

cout<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();

exit(0);

}

//-только если ввести - или русскую букву и только одну и только в начале или в конце) проверка на корректность ввода номера счета в Файле f2-

for (ii = 0; ii<= (n2-1); ii++)

{

for (int i=0; i<(strlen(table2[ii].nom_schet_tab2)); i++)

{

if (table2[ii].nom_schet_tab2[i] < '0')

{

cout<<"\n______________________________________"<<endl;

printf("\nOshibka: Nomer scheta dolzhen soderzhat tolko cifri i bit' ne otrizatel'nim. Oshibka v stroke: %d\n",ii+2);

cout<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();

exit(0);

}

// (только если ввести - или русскую букву и только одну и только в начале или в конце) проверка на корректность ввода годового процента начисления в Файле f2

for (ii = 0; ii<= (n2-1); ii++)

{

for (int i=0; i<(strlen(table2[ii].god_proc_tab2)); i++)

{

if (table2[ii].god_proc_tab2[i] < '0')

{

cout<<"\n___________________________________"<<endl;

printf("\nOshibka: Godovoi procent nachislenia dolzhen soderzhat tolko cifri i bit bolshe nylia. Oshibka v stroke: %d\n",ii+2);

cout<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();

exit(0);

}

//проверка на совпадение соц номеров в f1

for (ii = 0; ii <= n1; ii++)

{

for (int i = ii + 1; i <= (n1 - 1); i++)

{

if (ii == i)

continue;

if (strcmp(table1[ii].soc_nom_tab1, table1[i].soc_nom_tab1)==0)

{

cout<<"\n____________________________________"<<endl;

printf("\nOshibka: Dva ili bolee soc nomera v f1 imeut odinakovoe znachenie. Oshibka v znachenii - %s\n", table1[ii].soc_nom_tab1);

cout<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();

exit(0);

}

//проверка на совпадение паспортных данных в f1

for (ii = 0; ii <= n1; ii++)

{

for (int i = ii + 1; i <= (n1 - 1); i++)

{

if (ii == i)

continue;

if (strcmp(table1[ii].pasp_dan_tab1, table1

[i].pasp_dan_tab1)==0)

{

cout<<"\n____________________________________"<<endl;

printf("\nOshibka: Oshibka v pasportnih dannih klienta. Pasportnim dannim %s prisvoeno dva ili bolee socialnyh nomera\n",table1[i].pasp_dan_tab1);

cout<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();

exit(0);

}

//Функция считывания с файла F1

int ReadF1()

{

char line[64] = {0};//хранится вся считываемая строка

int iline = 0;

int n1 = 0;

f1 = fopen(file1, "r");

if(!f1)

{

printf("\nFile %s cannot be open",file1);

getch();

exit(0);

}

char shapka[64];

fgets(shapka,sizeof(shapka),f1); //считывается шапка таблицы

while(!feof(f1))

{

line[0] = 0;

fgets(line, sizeof(line), f1);

if (line[0] == 0) continue; //если строка пустая, то continue

int i;

char buf[32] = {0};//буфер для хранения отдельных элементов строки

for (i = 0; i <= (int)strlen(line); i++) //1. циклы для разборки строк по столбцам

{

if (line[i] != '|') buf[i] = line[i];

else break;

}

buf[i] = 0;

strcpy(table1[iline].soc_nom_tab1, buf); //запись содержимого из буфера в массив структуры

i++; // переход на следующий символ после символа '/'

int ii = i;

for(ii; ii <= (int)strlen(line); ii++)

{

if (line[ii] != '|') buf[ii-i] = line[ii];

else break;

}

buf[ii-i] = 0;

strcpy(table1[iline].pasp_dan_tab1, buf);

ii++;

i = ii;

for(i; i <= (int)strlen(line); i++)

{

if (line[i] != '|') buf[i-ii] = line[i];

else break;

}

buf[i-ii] = 0;

strcpy(table1[iline].fio_tab1, buf);

iline++;//увеличиваем индекс на 1

}

fclose(f1);

return iline;

}

//Функция считывания с файла F2

int ReadF2()

{

char line[64] = {0}; //хранится вся считываемая строка

int iline = 0;

f2 = fopen(file2, "r");

if(!f2)

{

printf("Fatal Error: File %s cannot be open",file2);

getch();

exit(0);

}

char shapka[64];

fgets(shapka,sizeof(shapka),f1); //считывается шапка таблицы

while(!feof(f2))

{

fgets(line, sizeof(line), f2);

if (line[0] == 0)

continue; //если строка пустая, то continue

int i=0;

char buf[32] = {0};//буфер для хранения отдельных элементов строки

for (i; i <= (int)strlen(line); i++) //1.разборка строк по столбцам

{

if (line[i] != '|') buf[i] = line[i];

else break;

}

buf[i] = 0;

strcpy(table2[iline].soc_nom_tab2, buf);//запись содержимого из буфера в массив структуры

i++; // переход на следующий символ после символа '|'

int ii = i;

for(ii; ii <= (int)strlen(line); ii++)

{

if (line[ii] != '|') buf[ii-i] = line[ii];

else break;

}

buf[ii-i] = 0;

strcpy(table2[iline].nom_schet_tab2, buf);

ii++;

i = ii;

for(i; i <= (int)strlen(line); i++)

{

if (line[i] != '|') buf[i-ii] = line[i];

else break;

}

buf[i-ii] = 0;

strcpy(table2[iline].naim_vklad_tab2, buf);

i++;

ii = i;

for(ii; ii <= (int)strlen(line); ii++)

{

if (line[ii] != '|') buf[ii-i] = line[ii];

else break;

}

buf[ii-i] = 0;

strcpy(table2[iline].god_proc_tab2, buf);

ii++;

i = ii;

for(i; i <= (int)strlen(line); i++)

{

if (line[i] != '|') buf[i-ii] = line[i];

else break;

}

buf[i-ii] = 0;

strcpy(table2[iline].ob_vklad_tab2, buf);

iline++;//увеличиваем индекс на 1

}

fclose(f2);

return iline; //количество непустых строк в файле F2

}

int CreateTab3(int n1, int n2, int max)

{

int razm = sizeof(struct BUF)*max;

buf = new BUF[razm ];

bool error = true;

int num = 0;

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

{

for (int ii = 0; ii < n2; ii++)

{

if (strcmp(table1[i].soc_nom_tab1, table2[ii].soc_nom_tab2)==0)

{

strcpy(buf[num].fio_tab3, table1[i].fio_tab1);

strcpy(buf[num].pasp_dan_tab3, table1[i].pasp_dan_tab1);

strcpy(buf[num].god_proc_tab3, table2[ii].god_proc_tab2);

strcpy(buf[num].ob_vklad_tab3, table2[ii].ob_vklad_tab2);

num++;

}

return num;

}

//записываем в файл скопированные элементы

int WriteToF3(int n1, int n2, int max)

{

int num;

f3 = fopen("f3.txt", "a");

if(!f3)

{

printf("\nFail 'f3.txt' ne mozhet bit otkrit");

getch();

DELET();

exit(0);

}

num = CreateTab3(n1, n2, max);

fprintf(f3,"| Ф.И.О. клиента | Пасп. данные |Год. проц. начисл.|Объем вклада|\n");

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

fprintf(f3," %s %s %s %s\n", buf[i].fio_tab3,buf[i].pasp_dan_tab3,buf[i].god_proc_tab3,buf[i].ob_vklad_tab3);

fclose(f3);

cout<<"\n_________________________________"<<endl;

cout<<"\nVid sformirovavsheisya tablizi s dannbimi F3:"<<endl<<endl;

cout<<"\n _____"<<endl;

cout<<"|"<<setw(16)<<"FIO "<<"|"<<setw(22)<<"Passportnbie dannbie"<<"|"<<setw(10)<<"Godovoi %"<<"|"<<setw(10)<<"Obwii vklad"<<"|"<<endl<<endl;

cout<<"<<endl;

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

{

cout<<"|"<<setw(16)<<buf[i].fio_tab3<<"|"<<setw(22)<<buf[i].pasp_dan_tab3<<"|"<<setw(10)<<buf[i].god_proc_tab3<<"|"<<setw(11)<<buf[i].ob_vklad_tab3<<"|"<<endl;

}

cout<<"\n||"<<endl;

cout<<"\n<<endl;

cout<<"\nsformirovannaya tabliza zapisana v fail f3.txt"<<endl<<endl;

cout<<"dlya prosmotra rezul'tata otkroite fail f3.txt v kornevoi papke pgrogrammi"<<endl;

cout<<""<<endl; getch();

return 0;

}

//ПРОВЕРКА ВВОДА

int CheckWarnings(int n1, int n2)

{

bool sint_error1 = false;

//НАЛИЧИЕ ПУСТЫХ ПОЛЕЙ

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

{

if (table1[i].soc_nom_tab1[0] == 0 ||table1[i].soc_nom_tab1[0]==' ')

{

cout<<"\n_"<<endl;

printf("\nPystoe pole Socialny nomer klienta v stroke %d faila F1\n",(i+2));

cout<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();

exit(0);

}

/*if ((strlen(table1[i].soc_nom_tab1>20)||(strlen(table1[i].soc_nom_tab1)==0))

{

cout<<"\n__"<<endl;

printf("\nOshibka: Socialny nomer klienta bolshe 4-x chislennogo znacheniya v stroke %d faila F1\n",(i+1));

cout<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();

exit(0);

}

/*if (table1[i].soc_nom_tab1[0] > 57)

{

cout<<"\n_"<<endl;

printf("\nOshibka: Socialny nomer klienta bolshe 4-x chislennogo znacheniya v stroke %d faila F1\n",(i+1));

cout<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();

exit(0);

}*/

if (table1[i].pasp_dan_tab1[0] == 0 ||table1[i].pasp_dan_tab1[0]==' ')

{

cout<<"\n__"<<endl;

printf("\nPystoe pole Pasportnie dannie klienta v stroke %d faila F1\n",(i+2));

cout<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();

exit(0);

}

if (table1[i].fio_tab1[0] == 0 ||table1[i].fio_tab1[0]==' ')

{

cout<<"\n_"<<endl;

printf("\nOshibka: Pystoe pole F.I.O. klienta v stroke %d faila F1\n",(i+2));

cout<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();

exit(0);

}

for (i = 0; i <n2; i++)

{

if (table2[i].soc_nom_tab2[0] == 0 ||table2[i].soc_nom_tab2[0]==' ')

{

cout<<"\n__"<<endl;

printf("\nOshibka: Pystoe pole Socialny nomer klienta v stroke %d faila F2\n",(i+2));

cout<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();

exit(0);

}

if (table2[i].nom_schet_tab2[0] == 0 ||table2[i].nom_schet_tab2[0]==' ')

{

cout<<"\n__"<<endl;

printf("\nOshibka: Pystoe pole Nomer scheta v stroke %d faila F2\n",(i+2));

cout<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();

exit(0);

}

if (table2[i].naim_vklad_tab2[0] == 0 ||table2[i].naim_vklad_tab2[0]==' ')

{

cout<<"\n__"<<endl;

printf("\nOshibka: Pystoe pole Naimenovanie vklada v stroke %d faila F2\n",(i+2));

cout<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();

exit(0);

}

if (table2[i].god_proc_tab2[0] == 0 ||table2[i].god_proc_tab2[0]==' ')

{

cout<<"\n___<<endl;

printf("\nOshibka: Pystoe pole Godovoy procent nachislenia v stroke %d faila F2\n",(i+2));

cout<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();

exit(0);

}

if (table2[i].ob_vklad_tab2[0] == 0 ||table2[i].ob_vklad_tab2[0]==' ')

{

cout<<"\n_"<<endl;

printf("\nOshibka: Pystoe pole Obiem vklada v stroke %d faila F2\n",(i+2));

cout<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();

exit(0);

}

//Проверка на соответствие файлов

bool error = true;

for (i = 0; i < n1; i++)

{

error = true;

for (int ii = 0; ii < n2; ii++)

{

if (strcmp(table1[i].soc_nom_tab1, table2[ii].soc_nom_tab2)==0)

{

error = false;

}

if (error)

{

printf ("\nSochialnie nomera v failah F1 i F2 ne sovpadaut. Vvedenny soc. nomer - %s\n", table1[i].soc_nom_tab1);

getch();

}

for (i = 0; i < n2; i++)

{

error = true;

for (int ii = 0; ii < n1; ii++)

{

if (strcmp(table2[i].soc_nom_tab2, table1[ii].soc_nom_tab1)==0)

{

error = false;

}

if (error)

{

printf ("\nSochialnie nomera v failah F1 i F2 ne sovpadaut. Vvedenny soc. nomer - %s\n", table2[i].soc_nom_tab2);

cout<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();

exit(0);

}

//ПРОВЕРКА КОРРЕКТНОСТИ ВВОДА ДАНЫХ

//Корректность ввода Ф.И.О. клиента (должен содержать только буквы)--

for (i = 0; i < n1; i++)

{

sint_error1 = false;

for (int j = 0; j < strlen(table1[i].fio_tab1);j++)

{

if ((table1[i].fio_tab1[j]<'A') && (table1[i].fio_tab1[j]!=' ') && (table1[i].fio_tab1[j]!='.')|| (table1[i].fio_tab1[j]>'z') && (table1[i].fio_tab1[j]!=' ')&& (table1[i].fio_tab1[j]!='.'))

{

sint_error1 = true;

}

if (sint_error1)

{

cout<<"\n__"<<endl;

printf("\nOshibka: Oshibka vvoda F.I.O. klienta. Pole dolzhno soderzhat bykvi, znak brobela i tochki. Oshibka v - %s\n",table1[i].fio_tab1);

cout<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();

exit(0);

}

return 0;

}

// ОСНОВНАЯ ПРОГРАММА

int main()

{

setlocale(LC_ALL,"RUSSIAN");

intk1 = StrKolF1(); //количество строк в файле F1

int razmer1 = sizeof(struct Table1)*(k1 - 1);//определяем

table1 = new Table1[razmer1];

int k2 = StrKolF2(); //количество строк в файле F2

int razmer2 = sizeof(struct Table2)*(k2 - 1);

table2 = new Table2[razmer2]; // и динамически выделяем память

//<СЧИТЫВАНИЕ>

int n1 = ReadF1();

int n2 = ReadF2();

f3 = fopen("f3.txt", "w");

if(!f3)

{

printf("\nFail 'f3.txt' ne mozhet bit otkrit");

getch();

exit(0);

}

CheckError(n1, n2);

CheckWarnings(n1, n2);

fclose(f3);

WriteToF3(n1,n2,k2);

DELET();

return 0;

}

Размещено на Allbest.ru


Подобные документы

  • Разработка программы совместной обработки данных о проданных билетах на одну дату отправления авиарейсов и общее количество для формирования выходного документа; исходные данные и особенности алгоритма; ограничения. Тестирование функций программы.

    курсовая работа [4,1 M], добавлен 07.04.2012

  • Словесное описание алгоритма программы. Открытие файла процедурой Rewrite, его проверка на наличие ошибок при открытии. Особенности построения диаграммы. Листинг программы, ее тестирование и отладка. Выполнение процедуры CloseFile при закрытии файла.

    контрольная работа [17,3 K], добавлен 11.06.2010

  • Разработка программы для бухгалтерского учета на предприятии, которое занимается розничной торговлей медицинскими препаратами. Выбор среды разработки. Особенности системы "1С: Предприятие". Тестирование и отладка программы, входные и выходные данные.

    курсовая работа [1,1 M], добавлен 31.01.2016

  • Входные данные программы в файле "School.txt". Метод решения задачи и функциональная структура программы. Main – главная функция, формирование таблицы данных из файла. Блок-схема функции вывода фамилии победителей, занявших первые три призовых места.

    курсовая работа [68,4 K], добавлен 17.06.2012

  • Общие сведения о языке ассемблера. Назначение команды прерывания INT число. Описание логической структуры программы: алгоритм работы, используемые методы, входные и выходные данные. Структура и тестирование программы. Руководство оператора программы.

    курсовая работа [90,0 K], добавлен 01.12.2009

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

    курсовая работа [337,4 K], добавлен 26.02.2012

  • Структура математической модели линейной задачи, алгоритм симплекс-метода. Разработка программы: выбор языка программирования, входные и выходные данные, пользовательский интерфейс. Описание программы по листингу, тестирование, инструкция по применению.

    курсовая работа [1,2 M], добавлен 31.05.2013

  • Экономика тестирования. Режим проверки программы на ошибки в режиме "черного" и "белого ящика". Принципы ее проведения. Философия тестирования. Пошаговая, восходящяя, нисходящяя проверка модулей. Метод "большого скачка". Модифицированный метод сандвича.

    презентация [585,4 K], добавлен 19.09.2016

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

    курсовая работа [1,1 M], добавлен 17.10.2012

  • Принципы и подходы к динамическому программированию, сферы его использования, приемы и принципы. Решение задачи теста для написания и отладки программы, используемые входные и выходные данные. Тестирование заданной программы и инструкция пользователя.

    курсовая работа [2,3 M], добавлен 19.03.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.