- •Лабораторная работа № 6 Реализация списка в двоичном файле
- •Лабораторная работа № 6 Реализация линейного списка в двоичном файле.
- •Теоретические сведения
- •Описание типов для списка, размещаемого в двоичном файле
- •Основные процедуры для реализации списка в двоичном файле
- •Вывод списка на экран;
- •Открытие файла для списка
- •1.1.1Инициализация списка
- •1.1.2Вывод списка на экран
- •1.1.3Поиск физического места для размещения нового элемента в файле
- •1.1.4Освобождение физического места в файле после удаления элемента из списка
- •1.1.5Добавление нового элемента в отсортированный список
- •1.1.6Поиск элемента в отсортированном списке
- •1.1.7Удаление элемента из отсортированного списка
- •1.1.12Реализации основного модуля проекта
- •Задания для выполнения проекта
- •Тестирование проекта
- •Содержание отчета
- •Контрольные вопросы и задания
1.1.12Реализации основного модуля проекта
На рисунке 6.14 представлен текст основного модуля программы.
#include <QtCore/QCoreApplication> #include "functions.h" #include "types.h" #include "windows.h" #include <iostream> #include<QFile>
FILE *fLst; //объявление указателя файловой переменной //для работы с файлом,в котором находится список int Start=-1;//Смещение(адрес) первого элемента списка //инициализируем -1,т.е. список пустой char getCommand(); int main(int argc, char *argv[]) { char ch; QCoreApplication a(argc, argv); setlocale(LC_ALL, "Russian"); do { ch=getCommand(); switch(ch){ case '1': { char fName[15]; cout<<"Bведите имя файла->"; cin>>fName; fLst = openFile(fName,Start); cout<<endl; if (fLst) { cout<<"Файл открыт успешно\n"; } else { cout<<"Ошибка открытия файла\n"; exit(1); };//if cout<<endl; } break; case '2': { if (fLst!=NULL) {fclose(fLst); fLst=NULL;Start=-1; cout<<"Список (файл) закрыт"<<endl; }; } break; case '3': showList(fLst,Start); break; case '4': { int np;TSStudF stud,studNew; np=newPosInFile(fLst);//Теперь в переменной np находится №записи (смещение), //куда можно записать новый элемент списка cout<<"Введите ФИО студента->";cin>>studNew.fam; cout<<endl<<"Введите средний бал студента->";cin>>studNew.bal; cout<<endl; studNew.Next=-1; //Записываем элемент в файл fseek(fLst,np,SEEK_SET); fwrite(&studNew,sizeof(TSStudF),1,fLst); //Читаем заголовок списка для получения адреса первого элемента fseek(fLst,sizeof(TSStudF),SEEK_SET); fread(&stud,sizeof(TSStudF),1,fLst); //Добавляем элемент в список addToSortList(fLst,Start,np); //Start мог измениться во время выполнения //подпрограммы,поэтому необходимо обновить в файле //адрес первого элемента списка. Записываем в файл fseek(fLst,sizeof(TSStudF),SEEK_SET); stud.Next=Start; fwrite(&stud,sizeof(TSStudF),1,fLst); //Вывод списка на экран showList(fLst,Start); cout<<endl; } break; case '5': { //Здесь будет удаление элемента из списка cout<<endl; } break; case '6': { //Здесь будет поиск элемента по ключу cout<<endl; } break; case '7': { //Здесь будет удаление всего списка cout<<endl; } break; case '8': if (fLst!=NULL) fclose(fLst); exit(0); break; } cout<<"\nДля продолжения нажмите * ->"; cin>>ch; }while(true); return a.exec(); } char getCommand() { char ch;//номер выбранного пункта меню (в символьном варианте) system("cls"); SetConsoleTitleA("LAB N6"); cout<<"Выберите операцию со списком: \n"; cout<<endl; cout<<"1.Открыть/создать список (и файл)\n"; cout<<endl; cout<<"2.Закрыть текущий файл\n"; cout<<endl; cout<<"3.Вывод списка на экран\n"; cout<<endl; cout<<"4.Добавить элемент в отсортированный список\n"; cout<<endl; cout<<"5.Удалить элемент из списка\n"; cout<<endl; cout<<"6.Найти элемент в списке по ключу\n"; cout<<endl; cout<<"7.Удалить список\n"; cout<<endl; cout<<"8.Выход из программы\n"; cout<<"---------------------------------\n"; cout<<endl; cout<<"Выберите операцию для списка \n"; cin>>ch; return ch; } |
Рисунок 6.14 – Текст основного модуля программы
