Добавление и удаления элемента
Стр 1 из 2Следующая ⇒ ЗАДАЧА Разработать базу данных студентов ВУЗа. Данные должны хранится в текстовом или типизированном файле. Обязательно использовать процедуры и функции. База данных должна поддерживать следующие возможности: 1. Добавление и удаления студентов; 2. Редактирование информации о студенте; 3. Поиск студента по имени и фамилии; 4. Поиск студента по номеру зачетной книжки; 5. Сортировка студентов по алфавиту; 6. Вставка студента на указанную позицию в списке.
ВВЕДЕНИЕ Первая же проблема которая встает перед написание базы данных, это в каком виде хранить информацию для обработки ее в программе. Для этого я воспользуюсь динамическим списком, элементом которого будет класс с данными о студенте. Для хранения информации я воспользуюсь текстовым файлом. А вышеуказанный функционал базы данных я опишу в функциях другого класса.
СТРУКТУРА ПРОГРАММЫ Вообще структура программы выглядит следующим образом: 1. Создается класс Students, содержавший Фамилию, Имя, Отчество, Номер зачетной книжки а также поскольку он является элементам динамического списка он содержит указатель на следующий элемент списка. Для хранения информации о студенте используется класс string, подключаемы с помощью файла string.
class Students {public: string Name; //Имя студента string SurName;//Фамилия студента string SecName;//Отчество студента string NumSRB;//Номер зачетной книжки Students* next;//Указатель на следующий элемент списка Students() { next=NULL; }; ~Students(){}; };
2. Описывается сам динамический список в виде структуры, содержащая указатель на первый элемент списка и указатель на последний элемент списка.
struct Comp { Students* Ferst; //Первый элемент списка Students* End; //Последний элемент списка
}; 3. Следующим описывается класс работы с динамическим списком. class Works {public: void PritComp(Comp &l){} void In_List(Comp &l){} void Print_One(Comp &l,Students* C){} void De_Comp(Comp &l,Students* C){} void Ref_Comp(Comp &l,Students* C){} void Sort_Comp(Comp &l){} void Pos_Comp(Comp &l,int x,int x1){} Students* Search(Comp l){} Works(){}; ~Works(){}; }; PritComp – эта функция предназначена для вывода всех компонентов динамического списка. Так как эта функция ничего не возвращает она имеет пустой тип данных void. In_List - эта функция предназначена для добавления нового элемента в список. Print_One - функция предназначена для вывода конкретного элемента списка. De_Comp – функция удаляющая элемент из списка. Ref_Comp – функция с помощью которой можно отредактировать данные элемента списка. Sort_Comp – функция сортирующая элементы списка по алфавиту. Pos_Comp – функция позволяющая вставить элемент списка на указанную позицию. Search – функция с помощью которой можно найти элемент списка. Данная функция возвращает адрес найденного элемента списка. Рассмотрим поподробнее данный класс. ДОБАВЛЕНИЕ И УДАЛЕНИЯ ЭЛЕМЕНТА Как было сказано выше за эти функции базы данных отвечают два метода: In_List, De_Comp. Рассмотрим работу In_List. Данный метод ничего не возвращает, поэтому он указан в программе как пустой тип viod. В качестве параметров передаются Динамический список. void In_List(Comp &l) { system("cls"); // Очистка экрана консоли string s; Students* C=new Students; cout<<"Введите Фамилию"<<"\n"; cin>>C->SurName; cout<<"Введите Имя"<<"\n"; cin>>C->Name; cout<<"Введите Отчество"<<"\n"; cin>>C->SecName; cout<<"Введите Номер зачетной книжки"<<"\n"; cin>>C->NumSRB; if (l.Ferst==NULL) { l.Ferst=C; } else if(l.Ferst->next==NULL){l.Ferst->next=C;l.End=C;}else{l.End->next=C;l.End=C;} }; Первым делом данная функция выделяет место в памяти под экземпляр класса. Следующим шагом идет заполнения данных о студенте. Затем функция проверяет является ли данный компонент первым в списке если да то в указатель, показывающий на первый элемент списка, присваивается адрес данного экземпляра класса. Если же данный компонент не является первым в списке то идет проверка условия является ли данный экземпляр вторым если да то, в указатель первого элемента списка записывается адрес этого элемента списка, а в указатель, хранящий адрес последнего элемента списка, присваивается данный экземпляр класса. Если же и это условие оказалось ложным то, в указатель последнего элемента списка присваивается данный элемент а в указатель, показывающий на последний элемент списка, записывается адрес данного экземпляра.
Результат работы функции:
Блок-схема:
Следующая функция De_Comp, выполняющая удаления конкретного компонента в списке. void De_Comp(Comp &l,Students* C) { system("cls"); if (C==l.Ferst) { l.Ferst=C->next; } else { Students* R; R=l.Ferst; while(R!=NULL) { if (R->next==C)R->next=C->next; R=R->next; } }; delete C; } Первым дело необходимо очистить консоль от ненужных записей, что и делает первая же строчка функции. В качестве параметров в данной функции передается динамический список, в котором будет проводиться удаления элемента и адрес элемента, который необходимо удалить. При удалении элемента возможны два случая. Первый, это когда необходимо удалить первый элемент, и второй когда элемент списка, который необходимо удалить, не является первым. Для этого в функцию введено условия, которое и проверяет, является ли удаляемы элемент первым. Если условие верное т все очень просто указатель, содержащий адрес первого элемента списка, присваиваем адрес следующего элемента, хранящийся в указателе удаляемого элемента. Если же элемент не является первым, то создается буферный экземпляр класса, куда присваивается адрес первого элемента списка, и входим в цикл, который будет работать пока, экземпляр класса не будет пустым. В этом цикле проверяется, является ли адрес, хранящийся в указателе текущего элемента, адресом удаляемого элемента, если да, то в указатель текущего элемента мы присваиваем указатель удаляемого элемента и переходим на следующий элемент. После завершения цикла экземпляр класса удаляется из памяти.
Для примера удалим из списка Сидорова. Выбираем поиск по имени и фамилии, здесь используется функция Search . После нажатия кнопки ввода элемент с указанным именем и фамилией будет удален из списка.
Блок-схема:
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|