Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Лабораторная работа 7. Файлы и структуры

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

Текст программы:

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <conio.h>

const int L=30;

typedef struct {char name[30]; int gr;float oklad;} MAN; //описание структурного типа MAN

FILE *aa, *temp; //объявление основного файла аа и временного файла temp

 

void main() // главная функция

{int a;

void VIEW(), APP(), NEWFILE(), EDITF(); //объявление функций

clrscr(); //очистка экрана

do //вывод на экран главного меню программы

{ printf(" \n MAIN MENU ");

printf("\n 0. NEW FILE");

printf("\n 1. VIEW FILE");

printf("\n 2. APPEND FILE“);

printf("\n 3. EDIT FILE");

printf("\n 4. EXIT");

printf("\n\n\n Input punkt of main menu: ");

scanf("%d", &a); //выбор пункта главного меню

switch (a)

{case 0: { NEWFILE(); break;} //

case 1: { VIEW(); break;}

case 2: { APP(); break;}

case 3: { EDITF(); break;}

case 4: { printf(" Good Bye! "); break;}

default: printf("ERROR!!!"); break;

}

} while(a!=4);

}

 

void LINE() //функция вывода сплошной линии

{ for (i=1;i<35;i++) printf("_"); printf("\n"); }

 

void VIEW() //функция, реализующая просмотр файла OKLAD.txt

{ int count=0,i;

MAN buf; //буферная переменная типа MAN

aa=fopen("OKLAD.txt","r"); //открытие файла OKLAD.txt для просмотра

LINE(); printf("\nN | FIO | God | OkJIag(py6)\n\n"); LINE(); //вывод шапки таблицы

 

while(!feof(aa)) //пока не достигнут конец файла

{

fscanf(aa,"%s%d%f", &buf.name, &buf.gr, &buf.oklad); //чтение из файла в буфер

count++;

printf("\n%d.| %-10s| %5d |%10.2f\n", count, buf.name, buf.gr, buf.oklad); //вывод на экран

}

LINE();

fclose(aa); //закрытие файла OKLAD.txt

}

 

void APP() //функция, реализующая добавление записей в файл OKLAD.txt

{int n,i;

MAN buf;

aa=fopen("OKLAD.txt","a"); //открытие файла OKLAD.txt для добавления записей

printf("CKOJIbKO 3anuceu' BBoguTb? "); scanf("%d", &n);

for(i=1;i<=n;i++)

{printf("BBeguTe qpaMuJIuI0:"); scanf("%s", &buf.name);

printf("BBeguTe rog po}I{geHu9:"); scanf("%d", &buf.gr);

printf("BBeguTe CyMMy OKJIaga:"); scanf("%f", &buf.oklad);

fprintf(aa, "\n%s %d %f", buf.name, buf.gr, buf.oklad); //запись в файл

}

fclose(aa); //закрытие файла OKLAD.txt

}

 

void NEWFILE() //функция, реализующая создание файла OKLAD.txt

{int n,i;

MAN buf;

aa=fopen("OKLAD.txt","w"); //открытие файла OKLAD.txt для записи

printf("CKOJIbKO 3anuceu' BBoguTb? "); scanf("%d", &n);

for(i=1;i<=n;i++)

{printf("BBeguTe qpaMuJIuI0:"); scanf("%s", &buf.name);

printf("BBeguTe rog po}I{geHu9:"); scanf("%d", &buf.gr);

printf("BBeguTe CyMMy OKJIaga:"); scanf("%f", &buf.oklad);

fprintf(aa, "\n%s %d %f", buf.name,buf.gr,buf.oklad); //запись в файл

}

fclose(aa); //закрытие файла OKLAD.txt

}

 

void EDITF() //функция, реализующая редактирование файла OKLAD.txt

{aa=fopen("OKLAD.txt", "r"); //открытие файла OKLAD.txt для просмотра

temp=fopen("temp.txt", "w"); //открытие файла temp.txt для записи

int K,i;

MAN buf;

char str[30];

printf("BBeguTe HoMep pegakTupyeMou' 3anucu:"); scanf("%d", &K);

for(i=1;i<K;i++) //копирование первых (К-1) записей из файла OKLAD.txt в файл temp.txt

{fscanf(aa,"%s%d%f", &buf.name,&buf.gr, &buf.oklad); //чтение из файла OKLAD.txt

fprintf(temp, "\n%s %d %f", buf.name,buf.gr,buf.oklad); //запись в файл temp.txt

}

//чтение К-ой записи из файла OKLAD.txt и вывод на экран

fscanf(aa,"%s%d%f", &buf.name,&buf.gr, &buf.oklad);

printf("\n\n%30s %5d %10.2f\n", buf.name,buf.gr,buf.oklad);

fflush(stdin); //очистка буфера

printf("BBeguTe qpaMuJIuI0:"); gets(str);

if(strlen(str) > 1) strcpy(buf.name, str); //если не пусто, то записать в буфер

printf("BBeguTe rog po}I{geHu9:"); gets(str);

if(strlen(str) > 1) buf.gr=atoi(str); //если не пусто, то записать в буфер

printf("BBeguTe CyMMy OKJIaga:"); gets(str);

if(strlen(str) > 1) buf.oklad=atof(str); //если не пусто, то записать в буфер

fprintf(temp, "\n%s %d %f", buf.name,buf.gr,buf.oklad);

//копирование оставшихся записей из файла OKLAD.txt в файл temp.txt

while(!feof(aa))

{fscanf(aa,"%s%d%f", &buf.name,&buf.gr, &buf.oklad);

fprintf(temp, "\n%s %d %f", buf.name,buf.gr,buf.oklad);

}

fclose(aa); fclose(temp); //закрытие файлов

aa=fopen("OKLAD.txt", "w"); //открытие файла OKLAD. txt для записи

temp=fopen("temp.txt", "r"); //открытие файла temp.txt для просмотра

//копирование записей из файла temp.txt в файл OKLAD.txt

while(!feof(temp))

{fscanf(temp,"%s%d%f", &buf.name,&buf.gr, &buf.oklad);

fprintf(aa, "\n%30s%5d%10.2f", buf.name,buf.gr,buf.oklad);

}

fclose(temp); fclose(aa); //закрытие файлов

}

 

Задание 1. Протестировать предложенную программу. Написать функции:

  • вывести на экран величину минимального и максимального оклада;
  • вывести фамилии рабочих, имеющих оклад ниже среднего.


<== предыдущая лекция | следующая лекция ==>
Тема: Насосная эксплуатация скважин. Выбор оборудования УЭЦН для эксплуатации скважин | Жизнь, как взмах крыльев бабочки 1 страница
Поделиться с друзьями:


Дата добавления: 2016-10-06; Мы поможем в написании ваших работ!; просмотров: 211 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Неосмысленная жизнь не стоит того, чтобы жить. © Сократ
==> читать все изречения...

2347 - | 2058 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.014 с.