Файл f. Cовместная обработка файлов типа F1 и F2 для формирования выходного документа типа F3 - файл Моя курсовая.doc

Файл F поврежден

Если после установки необходимой программы из списка, Вы по-прежнему не можете открыть файл с расширением F, поводом может быть его повреждение. Решением может быть нахождение новой копии файла F, который Вы собираетесь открыть

Расширение файла F не связано с соответствующим приложением

В таком случае проще всего воспользоваться встроенными в операционную систему инструментами для связи файла F с приложениями для его обслуживания. Нажмите дважды на файл, которой не можете открыть, - операционная система покажет список программ, которые вероятнее всего совместимы с Вашим файлом F. Выберите одну из них, либо укажите на диске место, в котором Вы установили одно из предложений из нашего списка. Система Windows должна открыть файл F с помощью предварительно установленной программы.

Запись, касающаяся файла F в "Реестре Системы Windows" удалена либо повреждена
Файл F инфицирован вирусом

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

Самой частой причиной проблем с раскрытием файла F является просто отсутствие соответствующих приложений, установленных на Вашем компьютере. В таком случае достаточно найти, скачать и установить приложение, обслуживающее файлы в формате F - такие программы доступны ниже.

Поисковая система

Введите расширение файла

Помощь

Подсказка

Необходимо учесть, что некоторые закодированные данные из файлов, которые наш компьютер не читает, иногда можно просмотреть в Блокноте. Таким образом мы прочитаем фрагменты текста или числа - Стоит проверить, действует ли этот метод также в случае файлов F.

Что сделать, если приложение со списка уже было установлено?

Часто установленное приложение должно автоматически связаться с файлом F. Если это не произошло, то файл F успешно можно связать вручную с ново установленным приложением. Достаточно нажать правой кнопкой мышки на файл F, а затем среди доступных выбрать опцию "Выбрать программу по умолчанию". Затем необходимо выбрать опцию "Просмотреть" и отыскать избранное приложение. Введенные изменения необходимо утвердить с помощью опции "OK".

Программы, открывающие файл F

Windows
Mac OS

Почему я не могу открыть файл F?

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

Несоответственные связи файла F в записях реестра
- повреждение файла F, который мы открываем
- инфицирование файла F (вирусы)
- слишком маленький ресурс компьютера
- неактуальные драйверы
- устранение расширения F из реестра системы Windows
- незавершенная установка программы, обслуживающей расширение F

Устранение этих проблем должно привести к свободному открытию и работе с файлами F. В случае, если компьютер по-прежнему имеет проблемы с файлами, необходимо воспользоваться помощью эксперта, который установит точную причину.

Мой компьютер не показывает расширений файлов, что сделать?

В стандартных установках системы Windows пользователь компьютера не видит расширения файлов F. Это успешно можно изменить в настройках. Достаточно войти в "Панель управления" и выбрать "Вид и персонализация". Затем необходимо войти в "Опции папок", и открыть "Вид". В закладке "Вид" находится опция "Укрыть расширения известных типов файлов" - необходимо выбрать эту опцию и подтвердить операцию нажатием кнопки "OK". В этот момент расширения всех файлов, в том числе F должны появится сортированные по названию файла.

^

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

Разработать программу совместной обработки файлов типа F1 и F2 для формирования выходного документа типа F3.
ИСХОДНЫЕ ДАННЫЕ И ОСОБЕННОСТИ АЛГОРИТМА

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

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

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

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

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


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

Структурным анализом принято называть такое исследование системы, которое начи-нается с ее общего обзора и затем детализируется, приобретая иерархическую структуру со все большим числом уровней. Для таких методов характерно разбиение на уровни абстрак-ции с ограничением числа элементов на каждом из уровней (обычно от 3 до 6-7). В техноло-гии программирования эта идея была сформулирована как один из принципов структурного программирования: разработку программ рекомендуется вести сверху вниз или, иначе, по нисходящей стратегии.

Суть нисходящей стратегии в том, что цели разрабатываемого ПП структурируются по схеме: цели - подцели 1-го уровня - ... - подцели i-го уровня - ... - подцели n-уровня - функции до такой степени детализации, когда реализация подцелей последнего уровня (функций) становится очевидной.

Проверка на корректность файла f1

Совместная обработка 2-х файлов

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

Проверка на корректность файла f2

^

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


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

Файл F1:


      • В строке должно быть ровно две ячейки

      • Не должно быть пустых ячеек

      • Поле “№ предмета ” состоит из цифр

      • Поле “ Полное наименование предмета ” состоит из букв

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


  • В строке должно быть ровно семь ячеек

  • Не должно быть пустых ячеек

      • Поле “ День недели ” состоит из букв

      • Поле “ Вид занятий ” состоит из букв

      • Поле “ Время начала ” состоит из чисел

      • Поле “ Время окончания ” состоит из чисел

      • Поле “ № предмета ” состоит из чисел

      • Поле “ № первой недели ” состоит из чисел

      • Поле “ № последней недели ” состоит из чисел

3.3Спецификация выходного файла F3:

Выходными данными является файл F3, содержащий структуры


  • Файл должен быть пуст.

4. Блок-схемы

4.1 Схема работы системы

4.2 Схема программы


4.3 Схема модуля «чтение файла f1 и f2 и проверка на корректность»
^

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

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

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

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

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

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

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

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

Решающую роль играет проектирование тестов. Возможен целый ряд подходов к стратегии проектирования тестов. Чтобы ориентироваться в них, рассмотрим два крайних подхода. Первый состоит в том, что тесты проектируются на основе внешних спецификаций программ и модулей либо спецификаций сопряжения программы или модуля. Программа при этом рассматривается как черный ящик (стратегия ‘черного ящика’). Существо такого подхода - проверить, соответствует ли программа внешним спецификациям. При этом логика модуля совершенно не принимается во внимание.

Второй подход основан на анализе логики программы (стратегия ‘белого ящика’). Существо подхода - в проверке каждого пути, каждой ветви алгоритма. При этом внешняя специфика-ция во внимание не принимается.

Метод тестирования таблиц решений

Тестирование ТР заключается в том, что проектируется такое количество тестов, которое по-зволяет покрыть все возможные комбинации условий. Как правило, количество этих тестов совпадает с числом столбцов в ТР

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

Тест 1

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

Тест 2

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

Тест 3

Цель теста: проверить функционирование программы при присутствии лишней табуляции

Тест 4

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

^

6. Выводы по результатам тестирования

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

^

7. Список использованной литературы:


1. В. Е. Гвоздев, В. Н. Мукасеева, А. Ю. Хасанов. Специфицирование и тестирование программ (методические указания к курсовой работе), Уфа, 2004.

2. Х. М. Дейтел, П. Дж. Дейтел. Как программировать на С++, Бином-Пресс, 2005.
^ ПРИЛОЖЕНЕИЕ А

//1h.h Header file.
#include

#include

#include

#include

#include

#include

#include
using namespace std;
char bufRus;

char* rus(const char* text)

CharToOem(text, bufRus);

}
void myRFopen(fstream& in,int fil)

Cin>>F1str;

In.open(F1str.c_str(),ios::in);

// проверка потока

If (!in.good())

Cout<

// проверка символов в файле

Next = in.get();

If (in.eof()) break;
if((next=="\n")||(next=="\t"))

Cout<

Cout<

If(fil==1){x=div(count,2);}

If(fil==2){x=div(count,3);}

if(x.rem==0||x.rem==1)

If((next!="\t")&&(next!="\n")&&(next!="а")&&(next!="б")&&(next!="в")&&(next!="г")&&(next!="д")&&(next!="е")&&(next!="ё")&&(next!="ж")&&(next!="з")&&(next!="и")&&(next!="й")&&(next!="к")&&(next!="л")&&(next!="м")&&(next!="н")&&(next!="о")&&(next!="п")&&(next!="р")&&(next!="с")&&(next!="т")&&(next!="у")&&(next!="ф")&&(next!="х")&&(next!="ц")&&(next!="ч")&&(next!="ш")&&(next!="щ")&&(next!="ь")&&(next!="ы")&&(next!="ъ")&&(next!="э")&&(next!="ю")&&(next!="я")&&(next!="_")&&(next!="А")&&(next!="Б")&&(next!="В")&&(next!="Г")&&(next!="Д")&&(next!="Е")&&(next!="Ё")&&(next!="Ж")&&(next!="З")&&(next!="И")&&(next!="Й")&&(next!="К")&&(next!="Л")&&(next!="М")&&(next!="Н")&&(next!="О")&&(next!="П")&&(next!="Р")&&(next!="С")&&(next!="Т")&&(next!="У")&&(next!="Ф")&&(next!="Х")&&(next!="Ц")&&(next!="Ч")&&(next!="Ш")&&(next!="Щ")&&(next!="Ь")&&(next!="Ы")&&(next!="Ъ")&&(next!="Э")&&(next!="Ю")&&(next!="Я"))

Cout<

Cout<

Cout<

}
if(x.rem==2)

If((next!="\t")&&(next!="\n")&&(next!="0")&&(next!="1")&&(next!="2")&&(next!="3")&&(next!="4")&&(next!="5")&&(next!="6")&&(next!="7")&&(next!="8")&&(next!="9"))

Cout<

Cout<

Cout<

// проверка файла в целом

Cout<

If(((fil==1)&&(x.rem!=1))||((fil==2)&&(x.rem!=2)))

Cout<

}
cout< in.clear();

In.seekg(0,ios::beg);
}
FILE *myWFopen()

char* u = new char;

Cin>>F1str;
if ((str = fopen(F1str.c_str(),"a+"))==NULL)

Cout<

}
if (fread(u,1,1,str)!=NULL)

Cout<

If(c=="Y"){n=1; fclose(str); break;}

Else if (c=="N") exit(1);

Else cout<

If ((str = fopen(F1str.c_str(),"w"))==NULL)

Cout<

}
cout<

}
std::string readstr(istream& in)// метод для считывани строки до "\n",EOF.

Next = in.get();

If (in.eof()||(next=="\n")||(next=="\t")) break;

struct F1struct

Void setFakult(istream& in)

Fakult = readstr(in);

Void getFakult(FILE*stream)

Fputs(Fakult.c_str(),stream);

/* std::string giveFakult()

Void setAbriv(istream& in)

Abriv = readstr(in);

/* void getAbriv(FILE*stream)

Fputs(Abriv.c_str(),stream);

Std::string giveAbriv()

///////////////////////////////////////////

Void setKolvoRab(istream& in)

KolvoRab=readstr(in);

String giveKolvoRab()

Return KolvoRab;

////////////////////////////////////////////

Void setAbriv2(istream& in)

Abriv2 = readstr(in);

/* void getAbriv2(FILE*stream)

Fputs(Abriv2.c_str(),stream);

Std::string giveAbrive2()

/////////////////////////////////////////////

Void setKafra(istream& in)

Kafra = readstr(in);

Void getKafra(FILE*stream)

Fputc("\t",stream);

Fputs(Kafra.c_str(),stream);

/* std::string giveKafra()

//////////////////////////////////////////////

If(Abriv==Abriv2)

////////////////////////////////////////////////

String Fakult; //Полное название факультета

String Abriv; //Аббривиатура факультета в файле F1.

String KolvoRab; //количество работающих

String Abriv2; //Аббривиатура факультета

String Kafra; //название кафедры

// 1.cpp
#include "1h.h"
using namespace std;
int main(int argc, char** argv)

Fstream in1,in2;
F1struct F1;

Char* chara = new char;

cout << rus("\tВведите название файла F1(аббривиатура+полное название факультета).\n");

MyRFopen(in1,1);

Cout << rus("\tВведите название файла F2(аббривиатура+кафедра+кодичество работающих).\n");

MyRFopen(in2,2);

Cout << rus("\tВведите название выходного файла.\n");

Out=myWFopen();
while(in1.good())

F1.setAbriv(in1);

F1.setFakult(in1);
F1.getFakult(out);

String str1=":\n";

Fputs(str1.c_str(),out);
in2.clear();

In2.seekg(0,ios::beg);
while(in2.good())

F1.setAbriv2(in2);

F1.setKafra(in2);
F1.setKolvoRab(in2);

Mystr=F1.giveKolvoRab();

N=atoi(mystr.c_str());

If (F1.Ekviv()==1)

F1.getKafra(out);

Fputc("\n",out);

Itoa(kolvo,chara,10);

Fputc("\t",out);

Fputs(chara,out);
string str2= "\n\n";

Fputs(str2.c_str(),out);

Cout<

Для избежания конфликтов, AssignFile заменяет стандартную процедуру Assign в Delphi. Однако для обратной совместимости вы можете использовать Assign. Процедура AssignFile сопоставляет имя внешнего файла с файловой переменной.

F - файловая переменная любого файлового типа, FileName - выражение типа String или выражение типа PChar, если допускается расширенный синтаксис. Все дальнейшие операции с F производятся с внешним файлом.

Не используйте AssignFile с уже открытой файловой переменной.

Procedure CloseFile(var F);

Из-за конфликтов наименования, процедура CloseFile заменяет стандартную процедуру Close из Borland Pascal. Используйте CloseFile чтобы разорвать связь между файловой переменной и внешним дисковым файлом и закрыть файл.

F - файловая переменная любого файлового типа, открытая процедурами Reset, Rewrite или Append. Внешний файл, связанный с F, полностью модифицируется и затем закрывается, освобождая дескриптор файла для повторного использования.

Function Eof(var F): Boolean;

(типизированные или нетипизированные файлы)

Function Eof[(var F: Text)]: Boolean;

(текстовые файлы)

Проверяет, является или нет текущая позиция файла концом файла.

Eof(F) возвращает True, если текущая позиция файла находится за последним символом файла или если файл пуст; иначе, Eof (F) возвращает False.

Директива {$I+} позволяет вам обрабатывать ошибки во время выполнения программы, используя обработку исключительных ситуаций.

При выключенной директиве {$I-}, вы должны использовать IOResult для проверки ошибок ввода - вывода.

Procedure Erase(var F);

Удаляет внешний файл, связанный с F.

F - файловая переменная любого файлового типа.

Перед вызовом процедуры Erase, файл необходимо закрыть.

Директива {$I+} позволяет вам обрабатывать ошибки во время выполнения программы, используя обработку исключительных ситуаций.

При выключенной директиве {$I-}, вы должны использовать IOResult для проверки ошибок ввода - вывода.

Function FileSize(var F): Integer;

Возвращает размер в байтах файла F. Однако, если F - типизированный файл, FileSize возвратит число записей в файле.

Перед использованием функции FileSize, файл должен быть открыт.

Если файл пуст, FileSize(F) возвращает 0.

F - переменная любого файлового типа.

Function FilePos(var F): LongInt;

Возвращает текущую позицию файла внутри файла.

Перед использованием функции FilePos, файл должен быть открыт. Функция FilePos не используется с текстовыми файлами.

F - переменная любого файлового типа, кроме типа Text.

Procedure Reset(var F [: File; RecSize: Word]);

Открывает существующий файл.

F - переменная любого файлового типа, связанного с внешним файлом с помощью AssignFile. RecSize - необязательное выражение, которое используется, если F - нетипизированный файл. Если F - нетипизированный файл, RecSize определяет размер записи, который используется при передаче данных. Если RecSize опущен, заданный по умолчанию размер записи равен 128 байт.

Процедура Reset открывает существующий внешний файл, ассоциированный с файловой переменной F. Если внешнего файла с таким именем нет, возникает ошибка времени выполнения. Если файл, связанный с F уже открыт, он сначала закрывается и затем вновь открывается. Текущая позиция файла устанавливается к началу файла.

Procedure Rewrite(var F: File [; Recsize: Word]);

Создает и открывает новый файл.

F - переменная любого файлового типа, связанного с внешним файлом с использованием AssignFile.RecSize - необязательное выражение, которое используется, если F - нетипизированный файл. Если F - нетипизирован-ный файл, RecSize определяет размер записи, который используется при пе-редаче данных. Если RecSize опущен, заданный по умолчанию размер запи-си равен 128 байт.

Процедура Rewrite создает новый внешний файл с именем, связанным с F.

Если внешний файл с тем же самым именем уже существует, он удаляется, и создается новый пустой файл.

Procedure Seek(var F; N: LongInt);

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

Текущая позиция файла F перемещается к номеру N. Номер первого компонента файла - 0.

Инструкция Seek(F, FileSize(F)) перемещает текущую позицию файла в конец файла.

Procedure Append(var F: Text);

Открывает существующий текстовый файл для добавления информации в конец файла (дозаписи).

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

Если файл F уже открыт, он закрывается и вновь открывается. Текущая позиция файла устанавливается к концу файла.

Function Eoln[(var F: Text)]: Boolean;

Проверяет, является ли текущая позиция файла концом строки текстового файла.

Eoln(F) возвращает True, если текущая позиция файла - в конце строки или файла; иначе Eoln(F) возвращает False.

Procedure Read(F, V1 [, V2, ..., Vn]);

(типизированные и нетипизированные файлы)

Procedure Read( V1 [, V2, ..., Vn]);

(текстовые файлы)

Для типизированных файлов процедура читает компонент файла в переменную. При каждом считывании текущая позиция в файле продвигается к следующему элементу.

Для текстовых файлов читается одно или несколько значений в одну или несколько переменных.

С переменными типа String Read считывает все символы вплоть до следующей метки конца строки (но не включая ее), или пока функция Eof(F) не примет значение True. Переменной присваивается получившаяся в ре-зультате символьная строка.

В случае переменной целого или вещественного типа процедура ожидает поступления последовательности символов, образующих число по правилам синтаксиса языка Object Pascal. Считывание прекращается при обнаружении первого пробела, символа табуляции или метки конца строки, или в том случае, если функция Eof(F) принимает значение True. Если чи-словая строка не соответствует ожидаемому формату, то происходит ошибка ввода-вывода.

Procedure Readln( V1 [, V2, ..., Vn]);

Является расширением процедуры Read и определена для текстовых файлов. Считывает строку символов в файле (включая маркер конца строки) и переходит к началу следующей строки. Вызов функции Readln(F) без па-раметров приводит к перемещению текущей позиции файла на начало сле-дующей строки, если она имеется, в противном случае происходит переход к концу файла.

Function SeekEof[(var F: Text)]: Boolean;

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

Function SeekEoln[(var F: Text)]: Boolean;

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

Procedure Write( P1 [, P2, ..., Pn]);

(текстовые файлы)

Записывает одну или более величин в текстовый файл.

Каждый параметр записи должен иметь тип Char, один из целочисленных типов (Byte, ShortInt, Word, LongInt, Cardinal), один из типов с плавающей запятой (Single, Real, Double, Extended, Currency), один из строковых типов (PChar, AnsiString, ShortString), или одного из логических типов (Boolean, Bool).

Procedure Write(F, V1, ..., Vn);

(типизированные файлы)

Записывает переменную в компонент файла. Переменные V1,...,Vn должны быть того же типа, что и элементы файла. При каждой записи переменной текущая позиция в файле передвигается к следующему элементу.

Procedure Writeln( P1 [, P2, ..., Pn]);

(текстовые файлы)

Выполняет операцию Write, затем помещает метку конца строки в файл.

Вызов Writeln(F) без параметров записывает в файл маркер конца строки.

Файл должен быть открыт для вывода.