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

Добавление и удаления элемента




ЗАДАЧА

Разработать базу данных студентов ВУЗа. Данные должны хранится в текстовом или типизированном файле. Обязательно использовать процедуры и функции. База данных должна поддерживать следующие возможности:

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;}

};

Первым делом данная функция выделяет место в памяти под экземпляр класса. Следующим шагом идет заполнения данных о студенте. Затем функция проверяет является ли данный компонент первым в списке если да то в указатель, показывающий на первый элемент списка, присваивается адрес данного экземпляра класса. Если же данный компонент не является первым в списке то идет проверка условия является ли данный экземпляр вторым если да то, в указатель первого элемента списка записывается адрес этого элемента списка, а в указатель, хранящий адрес последнего элемента списка, присваивается данный экземпляр класса. Если же и это условие оказалось ложным то, в указатель последнего элемента списка присваивается данный элемент а в указатель, показывающий на последний элемент списка, записывается адрес данного экземпляра.

Результат работы функции:


В верхней части экрана видна полная таблица в базе данных как видно в ней 3 записи. Нажимаем на 1 и видим следующее:


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

Начало
string s; Students* C=new Students;  
Вывод (Введите Фамилию)
Ввод (SurName)
Вывод (Введите Имя)
Ввод (Name)
Вывод (Введите Отчество)
Ввод (SecName)
Вывод (Введите Номер зачетной книжки)
Ввод (NumSRB)
l.Ferst==NULL  
l.Ferst=C;  
да
l.Ferst->next==NULL  
нет
l.Ferst->next=C; l.End=C;  
да
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

. После нажатия кнопки ввода элемент с указанным именем и фамилией будет удален из списка.

Начало
Вывод(cls)
C==l.Ferst  
l.Ferst=C->next;  
да
Students* R; R=l.Ferst;  
нет
R!=NULL  
R->next==C  
R->next=C->next;  
да
R->next=C->next;  
нет
 
Конец

Блок-схема:

Поделиться:





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



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