Всё для

Студента

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

Проверка Диплома

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

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

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

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










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

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




Выполнил

Анянов В.М.








Уфа - 2014

Содержание


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

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

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

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

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

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

.3 Другие ограничения

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

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

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

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

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

.1 Тестирование функции Проверка на корректность файла F1

.2 Тестирование функции Проверка на корректность файла F2

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

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

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

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

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

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

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

Вывод

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

Приложение


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


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

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

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


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

Социальный № клиентаПаспортные данные клиентаФамилия, имя, отчество клиента

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

Социальный № клиента№ счетаНаименование вкладаГодовой % начисленияОбъем вклада

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

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

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

Фамилия, имя, отчество клиентаПаспортные данные клиентаГодовой % начисленияОбъем вклада

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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


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


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


1Социальный номер должен содержать только цифры.2Каждый социальный номер должен быть уникальным.3Социальный номер не должен быть пустым полем.4Каждая запись паспортных данных должна быть уникальной.5Паспортные данные не должны быть пустым полем.6Фамилия, имя, отчество клиента не должны быть пустым полем.7Фамилия, имя, отчество клиента должно состоять из допустимых символов (a-z,A-Z,.,).

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


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


1Социальный номер должен содержать только цифры.2Социальный номер не должен быть пустым полем.3Объем вклада должен содержать только цифры и быть положительным числом.4Объем вклада не должен быть пустым полем.5Номер счета должен содержать только цифры.6Номер счета не должен быть пустым полем.7Наименование вклада не должно быть пустым полем.8Годовой процент начисления должен содержать только цифры и быть положительным числом.9Годовой процент начисления не должен быть пустым полем.

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


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


1Во втором входном файле F2 социальный номер должен соответствовать социальному номеру из входного файла F1.2Если входные файлы F1 или F2 не существуют или не могут быть открыты, то выводится сообщение об ошибке при открытии файла.3На диске должно быть свободное место для создания выходного файла F3.

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


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

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

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

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

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


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


Условия123456789Файл с таким именем не существует?НДДДДДДДДПоле «Социальный номер» содержит допустимое значение?_НДДДДДДДДва одинаковых поля «Социальный номер» не существуют?__НДДДДДДПоле «Социальный номер» содержит не пустое значение?___НДДДДДДва одинаковых поля «Паспортные данные» не существуют?____НДДДДПоле «Паспортные данные» содержит не пустое значение?_____НДДДПоле «Ф.И.О. клиента» содержит не пустое значение?______НДДПоле «Ф.И.О. клиента» содержит допустимое значение?_______НДВходной файл F1 корректен?ННННННННДДействияСообщение «Файл ФАЙЛ.ХХХ не может быть открыт»1Сообщение «Социальный номер в F1 должен содержать только цифры. Введенный социальный номер в F1 - ХХХХ»1Сообщение «Два или более социальных номера в F1 имеют одинаковое значение. Ошибка в значении - ХХХХ»1Сообщение «Пустое поле Социальный номер клиента в строке Х файла F1»1Сообщение «Ошибка в паспортных данных клиента. Паспортным данным S ХХХХ N ХХХХХ присвоено два или более социальных номера»1Сообщение «Пустое поле Паспортные данные клиента в строке Х файла F1»1Сообщение «Пустое поле Ф.И.О. клиента в строке Х файла F1»1Сообщение «Ошибка ввода Ф.И.О. клиента. Поле должно содержать буквы, знак пробела и точки. Ошибка в - ХХХ»1Установить флаг некорректности файла F1.222222221

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


Условия1234567891011Файл с таким именем не существует?НДДДДДДДДДДПоле «Социальный номер» содержит допустимое значение?_НДДДДДДДДДПоле «Социальный номер» содержит не пустое значение?__НДДДДДДДДПоле «Объем вклада» содержит допустимое значение?___НДДДДДДДПоле «Объем вклада» содержит не пустое значение?____НДДДДДДПоле «Номер счета» содержит допустимое значение?_____НДДДДДПоле «Номер счета» содержит не пустое значение?______НДДДДПоле «Наименование вклада» содержит не пустое значение?_______Н ДДДПоле «Годовой процент начисления» содержит допустимое значение?________Н Д ДПоле «Годовой процент начисления» содержит не пустое значение?_________Н ДВходной файл F2 корректен?ННННННННННД ДействияСообщение «Файл ФАЙЛ.ХХХ не может быть открыт»1Сообщение «Социальный номер в F2 должен содержать только цифры. Введенный социальный номер в F2 - ХХХХ»1Сообщение «Пустое поле Социальный номер клиента в строке Х файла F2»1Сообщение «Объем вклада должен содержать только цифры. Ошибка в строке: Х».1Сообщение «Пустое поле Объем вклада в строке Х файла F2»1Сообщение «Номер счета должен содержать только цифры. Ошибка в строке: Х».1Сообщение «Пустое поле Номер счета в строке Х файла F2»1Сообщение «Пустое поле Наименование вклада в строке Х файла F2»1Сообщение «Годовой процент начисления должен содержать только цифры. Ошибка в строке: Х».1Сообщение «Пустое поле Годовой процент начисления в строке Х файла F2»1Установить флаг некорректности файла F2.22222222221

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


Условия1234Установлен флаг корректности файла F1?НДНДУстановлен флаг корректности файла F2?ННДДДействияСообщение «Социальный номер в F1 должен содержать только цифры. Введенный социальный номер в F1 - ХХХХ»11Сообщение «Социальный номер в F2 должен содержать только цифры. Введенный социальный номер в F1 - ХХХХ»21Вывод записи в выходной файл F31

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.



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

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

.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. Блок-схемы программы


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



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




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




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


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



Вывод


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


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


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

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


Приложение 1


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

#include <iostream>

#include <stdio.h>

#include <string.h>

#include <ctype.h>

#include <conio.h>

#include <iomanip> namespace std;*f1;*f2;*f3;*fer;file1[99];file2[99];Table1

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

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

} *table1;Table2

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

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

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

} *table2;BUF

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

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

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

} *buf; n,k,i,ii;DELET()[] table1;[] table2;[] buf;

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

{line[128] = {0};k1 = 0;<<"\n~~~~~~~Menu~~~~~~~~~~~~"<<endl<<endl<<endl;<<"__________________________________"<<endl;<<"\nVvedenie pervogo ishodnogo faila s dannbimi iz kornevoi papki programmi"<<endl<<endl;("Vvedite imya faila F1: ");("%s",&file1);= fopen(file1, "r");(!f1)

{("\nFail %s ne mozhet bit otkrit, tak kak nekorrektno vvedeno imya faila\n",file1);<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();(0);

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

{++;(line, sizeof(line), f1);

}(f1);<<"\nfail naiden i schitan uspishno"<<endl<<endl;k1;

}StrKolF2()

{line[128] = {0};k2 = 0;<<"_______________________________________"<<endl;<<"\nVvedenie vtorogo ishodnogo faila s dannbimi iz kornevoi papki programmi"<<endl<<endl;("Vvedite imya faila F2: ");("%s",&file2);= fopen(file2, "r");(!f2)

{("\nFail %s ne mozhet bit otkrit, tak kak nekorrektno vvedeno imya faila\n",file2);<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();(0);

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

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

}(f2);<<"\nfail naiden i schitan uspishno"<<endl<<endl;

return k2;

}

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

void CheckError(int n1, int n2)

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

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

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

{<<"\n________________________________________"<<endl;("\nOshibka: Soc. nomer v F1 dolzhen soderzhat tolko cifri. Vvedenny soc. nomer v f1 - %s\n",table1[ii].soc_nom_tab1);<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();(0);

}

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

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

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

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

{<<"\n_____________________________"<<endl;("\nOshibka: Soc. nomer v F2 dolzhen soderzhat tolko cifri. Vvedenny soc. nomer v f2 - %s\n",table2[ii].soc_nom_tab2);<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();(0);

}

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

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

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

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

{<<"\n__________________________"<<endl;("\nOshibka: Obiem vklada dolzhen soderzhat tolko cifri i bit bolshe nylia. Oshibka v stroke: %d\n",ii+2);<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();(0);

}

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

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

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

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

{<<"\n______________________________________"<<endl;("\nOshibka: Nomer scheta dolzhen soderzhat tolko cifri i bit' ne otrizatel'nim. Oshibka v stroke: %d\n",ii+2);<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();(0);

}

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

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

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

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

{<<"\n___________________________________"<<endl;("\nOshibka: Godovoi procent nachislenia dolzhen soderzhat tolko cifri i bit bolshe nylia. Oshibka v stroke: %d\n",ii+2);<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();(0);

}

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

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

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

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

{<<"\n____________________________________"<<endl;("\nOshibka: Dva ili bolee soc nomera v f1 imeut odinakovoe znachenie. Oshibka v znachenii - %s\n", table1[ii].soc_nom_tab1);<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();(0);

}

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

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

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

{(ii == i);(strcmp(table1[ii].pasp_dan_tab1, table1

[i].pasp_dan_tab1)==0)

{<<"\n____________________________________"<<endl;("\nOshibka: Oshibka v pasportnih dannih klienta. Pasportnim dannim %s prisvoeno dva ili bolee socialnyh nomera\n",table1[i].pasp_dan_tab1);<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();(0);

}

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

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

int iline = 0;n1 = 0;= fopen(file1, "r");(!f1)

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

}shapka[64];(shapka,sizeof(shapka),f1); //считывается шапка таблицы(!feof(f1))

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

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

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

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

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

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

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

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

}[ii-i] = 0;(table1[iline].pasp_dan_tab1, buf);++;= ii;(i; i <= (int)strlen(line); i++)

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

}[i-ii] = 0;(table1[iline].fio_tab1, buf);

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

}(f1);iline;

}

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

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

int iline = 0;= fopen(file2, "r");(!f2)

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

}shapka[64];(shapka,sizeof(shapka),f1); //считывается шапка таблицы(!feof(f2))

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

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

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

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

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

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

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

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

}[ii-i] = 0;(table2[iline].nom_schet_tab2, buf);++;= ii;(i; i <= (int)strlen(line); i++)

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

}[i-ii] = 0;(table2[iline].naim_vklad_tab2, buf);++;= i;(ii; ii <= (int)strlen(line); ii++)

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

}[ii-i] = 0;(table2[iline].god_proc_tab2, buf);++;= ii;(i; i <= (int)strlen(line); i++)

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

}[i-ii] = 0;(table2[iline].ob_vklad_tab2, buf);

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

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

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

{razm = sizeof(struct BUF)*max;= new BUF[razm ];error = true;num = 0;(int i = 0; i < n1; i++)

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

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

{(buf[num].fio_tab3, table1[i].fio_tab1);(buf[num].pasp_dan_tab3, table1[i].pasp_dan_tab1);(buf[num].god_proc_tab3, table2[ii].god_proc_tab2);(buf[num].ob_vklad_tab3, table2[ii].ob_vklad_tab2);

num++;

}num;

}

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

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

{num;= fopen("f3.txt", "a");(!f3)

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

}= CreateTab3(n1, n2, max);(f3,"| Ф.И.О. клиента | Пасп. данные |Год. проц. начисл.|Объем вклада|\n");(int i =0; i<n2;i++)(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);(f3);<<"\n_________________________________"<<endl;<<"\nVid sformirovavsheisya tablizi s dannbimi F3:"<<endl<<endl;<<"\n _____"<<endl;<<"|"<<setw(16)<<"FIO "<<"|"<<setw(22)<<"Passportnbie dannbie"<<"|"<<setw(10)<<"Godovoi %"<<"|"<<setw(10)<<"Obwii vklad"<<"|"<<endl<<endl;<<"<<endl;(int i =0; i<n2;i++)

{<<"|"<<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;

}<<"\n||"<<endl;<<"\n<<endl;<<"\nsformirovannaya tabliza zapisana v fail f3.txt"<<endl<<endl;<<"dlya prosmotra rezul'tata otkroite fail f3.txt v kornevoi papke pgrogrammi"<<endl;<<""<<endl; getch();0;

}

//ПРОВЕРКА ВВОДАCheckWarnings(int n1, int n2)

{sint_error1 = false;

//НАЛИЧИЕ ПУСТЫХ ПОЛЕЙ(int i = 0; i < n1; i++)

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

{<<"\n_"<<endl;("\nPystoe pole Socialny nomer klienta v stroke %d faila F1\n",(i+2));<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;();(0);

}

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

{<<"\n__"<<endl;("\nOshibka: Socialny nomer klienta bolshe 4-x chislennogo znacheniya v stroke %d faila F1\n",(i+1));<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;();(0);

}

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

{<<"\n_"<<endl;("\nOshibka: Socialny nomer klienta bolshe 4-x chislennogo znacheniya v stroke %d faila F1\n",(i+1));<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;();(0);

}*/(table1[i].pasp_dan_tab1[0] == 0 ||table1[i].pasp_dan_tab1[0]==' ')

{<<"\n__"<<endl;("\nPystoe pole Pasportnie dannie klienta v stroke %d faila F1\n",(i+2));<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;();(0);

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

{<<"\n_"<<endl;("\nOshibka: Pystoe pole F.I.O. klienta v stroke %d faila F1\n",(i+2));<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;();(0);

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

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

{<<"\n__"<<endl;("\nOshibka: Pystoe pole Socialny nomer klienta v stroke %d faila F2\n",(i+2));<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;();(0);

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

{<<"\n__"<<endl;("\nOshibka: Pystoe pole Nomer scheta v stroke %d faila F2\n",(i+2));<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;();(0);

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

{<<"\n__"<<endl;("\nOshibka: Pystoe pole Naimenovanie vklada v stroke %d faila F2\n",(i+2));<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;();(0);

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

{<<"\n___<<endl;("\nOshibka: Pystoe pole Godovoy procent nachislenia v stroke %d faila F2\n",(i+2));<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;();(0);

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

{<<"\n_"<<endl;("\nOshibka: Pystoe pole Obiem vklada v stroke %d faila F2\n",(i+2));<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();(0);

}

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

bool error = true;(i = 0; i < n1; i++)

{= true;(int ii = 0; ii < n2; ii++)

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

{= false;

}(error)

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

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

{= true;(int ii = 0; ii < n1; ii++)

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

{= false;

}(error)

{("\nSochialnie nomera v failah F1 i F2 ne sovpadaut. Vvedenny soc. nomer - %s\n", table2[i].soc_nom_tab2);<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();(0);

}

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

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

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

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

{((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;

}(sint_error1)

{<<"\n__"<<endl;("\nOshibka: Oshibka vvoda F.I.O. klienta. Pole dolzhno soderzhat bykvi, znak brobela i tochki. Oshibka v - %s\n",table1[i].fio_tab1);<<"\nProgramma vbinujdena zavershit' svou rabotu, isprav'te oshibki i zapustite programmu zanovo"<<endl;

getch();(0);

}0;

}

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

int main()

{(LC_ALL,"RUSSIAN");

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

int razmer1 = sizeof(struct Table1)*(k1 - 1);//определяем = new Table1[razmer1];k2 = StrKolF2(); //количество строк в файле F2razmer2 = sizeof(struct Table2)*(k2 - 1);

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

//<СЧИТЫВАНИЕ>n1 = ReadF1();n2 = ReadF2();= fopen("f3.txt", "w");(!f3)

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

}(n1, n2);(n1, n2);(f3);(n1,n2,k2);();

return 0;

}