Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовик ОП.doc
Скачиваний:
18
Добавлен:
10.02.2016
Размер:
228.35 Кб
Скачать

Робота з файлами

Файли даних – обов'язковий елемент практично будь-якої програмної системи. Вони використовуються як вихідні дані для розв’язання різних задач, а також можуть бути результатами роботи програм. Особливість цього структурованого типу даних у тому, що інформація звичайно знаходиться на дисках (стрічках інших носіях), а не в оперативній пам'яті. Тому розміри файлів можуть бути практично необмеженими. Оскільки доступ до дисків виконується значно повільніше ніж до оперативної пам'яті, звичайно при роботі з файлами в пам'яті створюються буфери, у які копіюється з диска або накопичується в результаті роботи програми інформація. Ця інформація при вичерпанні або заповненні буфера обновляється або записується на диск. Якщо робота з файлом даних завершується за допомогою спеціальної команди, то дані з буфера вивіду записуються у файл. Якщо такої команди нема, а завершується робота програми, то буфер знищується без збереження даних у файлі.

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

У файлі stdio.h знаходиться опис структури з імям FILE, яка повинна зберігати інформацію щодо файлу:

  • текуча позиція у файлі,

  • покажчик на буфер,

  • тип доступу до файлу,

  • інша інформація.

Для роботи з файлом потрібно виконати такі кроки.

  1. Зробити опис покажчика на FILE. Наприклад:

FILE *file1;

  1. Відкрити файл за допомогою функції fopen

FILE *fopen (const char *імя_файлу, const char *тип_доступу);

де тип_доступу може приймати наступні значення:

r - читання існуючого файлу;

w - запис у новий файл;

a - додання в кінець файлу (якщо такого файлу немає, він буде створений;

r+ - читання та запис;

w+ - запис та читання;

a+ - додання та читання.

Покажчик, що повертає функція, може приймати конкретне значення, якщо відкриття файла відбулося, або NULL, якщо по деякій причині це неможливо. Нижче приведений фрагмент програми, що ілюструє відкриття файла для читання.

int main( )

{. . .

FILE * f1;

if((f1=fopen(“a:\\file1. dat”,”r”))= =NULL)

{printf(“\n не можна відчинити файл a:\\file1.dat для читання”); return 1;}

. . . .

3) Звернутися до файлу за допомогою функцій читання/запису.

4) Для закінчення роботи з файлами застосовують функції

Void fclose (file *f) чи void fcloseall()

При завершенні роботи програми усі файли автоматично зачиняються. Однак якщо не застосовувати функції закриття файлу, то буфер запису не копіюється у файл. Таким чином, може виникнути помилка. Крім цього, рекомендується закривати ті файли, робота з якими закінчена, навіть якщо програма продовжує ще працювати.

1.2 Проектування програм

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

Приведем основные принципы структурной методологии:

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

  2. Принцип формальности. Он предполагает строгий методический подход к программированию, придает творческому процессу определенную строгость и дисциплину

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

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

    Для выполнения данной курсовой работы рекомендовано использовать принцип нисходящего проектирования и, соответственно, программирования.

    Нисходящее проектирование строится на вышеперечисленных принципах. При нисходящем проектировании происходит анализ задачи с целью определения возможности разбиения ее на ряд подзадач. Затем каждая из полученных подзадач также анализируется для возможного разбиения на подзадачи. Многие подзадачи могут быть логически разделены на три этапа: этап задания начальных значений, в котором задаются начальные значения переменных для данной подзадачи – локальные переменные; этап обработки данных, в котором вводятся данные и устанавливаются значения соответствующих переменных; заключительный этап, в котором вычисляются и выводятся окончательные результаты. Процесс для очередной подзадачи заканчивается, когда подзадачу невозможно или нецелесообразно разбивать на подзадачи далее. Реализованная в итоге программа на C окажется в этом случае простой и наглядной.

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

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