Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Лекция 17




Лекция 17

Файлы

Цели:

ü освоить методику написания алгоритмов с использованием файлов, перевода таких алгоритмов на язык программирования С++ и разработки соответствующего проекта в среде Visual C++ 6. 0.

 

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

 

Пример. Каждого студента можно описать при помощи следующих характеристик: ФИО, курс, специальность, предмет1, предмет2, предмет3. Написать программу (с использованием файлов), определяющую количество студентов:

1) сдавших сессию на «отлично»;

2) не сдавших хотя бы 1 экзамен.

 

Ход выполнения работы

1. Алгоритм должен быть универсальным с точки зрения пользователя. Это означает, что он должен давать возможность не только определять указанные в задаче характеристики, но и предлагать пользователю вводить данные в файл, добавлять в конец файла новую порцию информации и читать информацию из файла. Для достижения этих целей при написании программы воспользуемся оператором выбора switch(). При этом работа с файлом будет осуществляться не напрямую, а через динамический массив структур. Для ввода-вывода значений будут использоваться потоковые функции.

2. Написать программу, соответствующую алгоритму:

Алгоритм Программа
структурный_тип stud {    сhar fio[30];    int kurs;    сhar spec[30];   int hist;    int math;    int phis; }; объявление stud *st, FILE *pf; цел: var, n, i, count_5, count_2; var=0 пока var! =0 ввод var выбор var случай 1: // создание и             // запись в файл ввод n выделение динамической памяти под указатель st для i=0 до n-1 шаг 1   заполнить каждое поле  элемента массива   структур отдельно все_для i открыть файл pf в режиме записи записать в файл pf массив st закрыть файл освободить выделенную динамическую память под указатель st выход случай 2: //открытие файла            // для добавления ввод n выделение динамической памяти под указатель st для i=0 до n-1 шаг 1    заполнить каждое поле   элемента массива   структур отдельно все_для i открыть файл pf в режиме  добавления дозаписать в файл pf массив st закрыть файл освободить выделенную динамическую память под указатель st выход случай 3: // открытие файл в           // режиме чтения        //определение        // характеристик открыть файл pf в режиме чтения определить длину файла n выделение динамической памяти под указатель st заполнить массив st из файла pf count_5=count_2=0 для i=0 до n-1 шаг 1   //определяем //количество отличников   если sti–> hist= =5 & &            sti–> math= =5 & &            sti–> phis= =5    count_5++;   все_если //определяем количество // студентов, не //сдавших хотя бы один //экзамен   если sti–> hist= =2||            sti–> math= =2||            sti–> phis= =2            count_2++;   все_если все_если все_для i закрыть файл освободить выделенную динамическую память под указатель st печать count_5; печать count_2; выход все_выбор все_цикл #include " stdio. h" #include " stdlib. h" #include " iostream. h" #include " iomanip. h" typedef struct {    char fio[30];   int kurs;    char spec[30];   int hist;    int math;    int phis; } stud; int main() { stud *st; FILE *pf; int var, i, count_5, count_2; long int n; var=-1; while(var! =0) { cout< < " 0–выход; 1–запись; "    < < " 2–добавление; "    < < " 3–характеристики: var="; cin> > var; switch(var) { case 1: cout< < " n="; cin> > n; st=(stud*)malloc(n*sizeof(stud)); //заполнение массива структур for(i=0; i< =n-1; i++) { cout< < " fio="; cin> > ((st+i)–> fio); cout< < " kurs="; cin> > ((st+i)–> kurs); cout< < " spec="; cin> > ((st+i)–> spec); cout< < " history="; cin> > ((st+i)–> hist); cout< < " math="; cin> > ((st+i)–> math); cout< < " phis="; cin> > ((st+i)–> phis); } //файл открывается для записи данных if((pf=fopen(" my_f. dat", " w”))==NULL) { printf(" файл не открыт\n" ); break; } //запись в файл fwrite(st, sizeof(stud), n, pf); fclose(pf); free(st); break; case 2: cout< < " n="; cin> > n; st=(stud*)malloc(n*sizeof(stud)); //заполнение массива структур for(i=0; i< =n-1; i++) { cout< < " fio="; cin> > ((st+i)–> fio); cout< < " kurs="; cin> > ((st+i)–> kurs); cout< < " spec="; cin> > ((st+i)–> spec); cout< < " history="; cin> > ((st+i)–> hist); cout< < " math="; cin> > ((st+i)–> math); cout< < " phis="; cin> > ((st+i)–> phis); } //файл открывается для добавления if((pf=fopen(" my_f. dat", " a”))==NULL) { printf(" файл не открыт\n" );   break; } //дозапись в файл fwrite(st, sizeof(stud), n, pf); fclose(pf); free(st); break; case 3: //файл открывается для чтения if((pf=fopen(" my_f. dat", " r”))==NULL) { printf(" файл не открыт\n" ); break; } //определение длины файла в байтах fseek(pf, 0, SEEK_END); n=ftell(pf); //n – количества записей в файле n=n/sizeof(stud); st=(stud*)malloc(n*sizeof(stud)); rewind(pf); //заполнение массива структур fread(st, sizeof(stud), n, pf); count_5=count_2=0; for (i=0; i< =n-1; i++) {    //количество отличников if((st+i)–> hist= =5& & (st+i)–> math= =5& & (st+i)–> phis= =5)     count_5++; //количество студентов, не //сдавших хотя бы один экзамен if((st+i)–> hist= =2|| (st+i)–> math= =2|| (st+i)–> phis= =2) count_2++; } cout< < " count_5=" < < count_5< < endl; cout< < " count_2=" < < count_2< < endl; fclose(pf); free(st); break; } }return 1; }

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

3. Создать проект и реализовать данную задачу в среде                 Visual C++ 6. 0.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...