Автор: Пользователь скрыл имя, 10 Сентября 2011 в 19:46, курсовая работа
Предполагается, что в идеальном случае разработка программы делится на три этапа: вначале необходимо добиться ясного понимания задачи, затем определить ключевые понятия, используемые для ее решения, и, наконец, полученное решение выразить в виде программы. Однако, детали решения и точные понятия, которые будут использоваться в нем, часто проясняются только после того, как их попытаются выразить в программе. Именно в этом случае большое значение приобретает выбор языка программирования.
Введение
1. Постановка задачи
2. Общее описание программы
3. Описание классов
4. Описание методов классов
5. Процедура main ()
6. Блок схема процедуры main
Список литературы
printf ("What element you want to remove ?\n\n");
scanf("%u",&t2);
if (t2<=t1)
{
p=head;
int i=1;
while (i!=t2)
{
p=p->p2;
i++;
}
if (p->p1!=NULL && p->p2!=NULL)
{
tp1=p->p1;
tp2=p->p2;
delete (p);
tp1->p2=tp2;
tp2->p1=tp1;
}
else if (p->p1==NULL)
{
tp1=p->p2;
delete (p);
head=tp1;
head->p1=NULL;
}
else if (p->p2==NULL)
{
tp1=p->p1;
delete(p);
tp1->p2=NULL;
temp2=tp1;
}
}
else printf ("Such element is not present\n\n");
}
else printf("The list does not exist\n\n");
};
Предназначен
для удаления выбранного элемента списка.
Переменная предназначена для хранения
адреса текущего элемента списка, tp1 и
tp2 для
хранения предыдущего и последующего элементов.
Сначала, проверяется существует ли список if (head!=NULL)и, если да, то в цикле проверяется сколько элементов в списке и записывается в переменную t1. Затем пользователю предлагается ввести номер элемента, который он хочет удалить. Номер записывается в переменную t2. Затем проверяется есть ли элемент с таким номером в списке if (t2<=t1) и в цикле
while (i!=t2)
осуществляется переход на выбранный
элемент. После чего выясняется, где находится
выбранный элемент, в начале if
(p->p1==NULL), конце if (p->p2==NULL)
или между элементами списка
if (p->p1!=NULL && p->p2!=NULL) и удаляется соответствующим
образом. При удалении элемента из конца
списка, указателю temp2 необходимо присвоить
адрес предыдущего элемента т.к. он используется
при добавлении нового элемента.
4.2.4 Метод poisk.
void sp::poisk()
{
elem *p;
int t1,t2=0;
if (head!=NULL)
{
p=head;
printf ("Conduct number\n");
scanf ("%u",&t1);
while (p->p2!=NULL)
{
if (p->nom==t1)
{
p->show_elem();
t2++;
}
p=p->p2;
}; // end while
if (t2==0) printf ("Such element is not present\n\n");
}
else printf("The list
does not exist\n\n");
};
Осуществляет
поиск элемента по номеру (поле nom). Сначала
как и в остальных методах проверяется
наличие списка if
(head!=NULL). Затем
пользователю предлагается ввести табельный
номер искомого сотрудника, который записывается
в переменную t1. В цикле while
(p->p2!=NULL) осуществляется
перебор всех элементов списка и вывод
тех элементов, поле nom которых совпадает
с номером, введённым пользователем. Если
не найдено ни одного элемента, то выводится
соответствующее сообщение
if (t2==0) printf ("Such element is not present\n\n").
4.2.5 Метод show_sp.
void sp::show_sp()
{
elem *p=NULL;
if (head!=NULL)
{
p=head ;
printf("\n");
printf("BASE: ");
printf("\n\n");
p->show_elem();
while ((p->p2)!=NULL)
{
p=p->p2;
p->show_elem();
} ;
}
else printf ("The list
does not exist\n\n");
};
Процедура
достаточно проста и не требует подробного
пояснения. После проверки наличия
списка if (head!=NULL), список выводится в
цикле помощью метода show_elem().
4.2.6 Метод save.
Сохраняет список
в файле.
void sp::save()
{
int i;
char g[30];
elem *p;
FILE *list;
list=fopen("\\base.txt","wt");
if (list!=NULL)
{
if (head!=NULL)
{
p=head;
while (p->p2!=NULL)
{
fprintf(list,"%s\n%s\n%s\n%u\
p=p->p2;
}
fprintf(list,"%s\n%s\n%s\n%u\
}
else printf("The list
does not exist\n\n");
}
else printf ("File of
database is not created");
fclose(list);
};
Сохраняет список в файле. Файл создаётся с помощью процедуры fopen . Затем проверяется создан ли файл и существует ли список после чего при выполнении этих двух условий список сохраняется в цикле с помощью процедуры fprintf.
4.2.7 Метод init.
Процедура достаточно большая и текст её можно просмотреть в распечатке листинга программы, которая приведена в качестве приложения.
Данный метод осуществляет инициализацию списка, которая заключается в проверке существования файла базы данных и, если он существует, то происходит чтение дынных из файла и создание списка.
При чтении из файла считываются символы перевода строки \n, которые необходимо удалить т.к. при сохранении списка они также попадут в файл :
while(j<=30)
{
if (p->oth[j]=='\n') p->oth[j]=p->oth[j+1];
j++;
}
Затем создаётся список. Если файл базы данных не создан или пуст, то выводится соответствующее сообщение. Ещё один нюанс заключается в том, что необходимо удалить последний элемент списка т.к. последним символом файла является символ перевода строки, то он благополучно считывается и в результате этого создаётся пустой элемент списка, который необходимо удалить, что делается в конце процедуры:
tp=tp->p1;
tp->p2=NULL;
delete(p);
После
создания списка переменной temp2 присваивается
указатель на последний элемент списка temp2=p->p1;,
которая используется при добавлении
нового элемента в список.
Список
литературы
1. Бьери Страуструп
"Язык программирования С++"
Листинг
программы
#include <stdio.h>
#include <conio.h>
#include <process.h>
#include <dos.h>
#include <io.h>
#include <string.h>
class elem
{
char fam[30],oth[30],name[30];
int nom;
elem *p1,*p2;
public:
void set_elem ();
void show_elem();
friend class sp;
} ;
class sp
{
elem *head,*temp1,*temp2;
public:
void init ();
void new_el ();
void del_el ();
void poisk ();
void show_sp();
void save ();
void free_m();
};
// Methods of class
elem
void elem::set_elem ()
{
clrscr ();
printf ("Conduct surname\n");
scanf("%s",fam);
printf ("Conduct patronymic\n");
scanf("%s",oth);
printf ("Conduct name\n");
scanf("%s",name);
printf("Conduct number\n");
scanf("%u",&nom);
} ;
void elem::show_elem()
{
printf("\nSurname of the employee: %s",fam);
printf("\n\nPatronymic of the employee: %s",oth);
printf("\n\nName of the employee: %s",name);
printf("\n\nOrganic number: %u\n\n",nom);
};
//
end class elem
// Methods of class sp
void sp::free_m ()
{
elem *q1,*q2;
if (head!=NULL)
{
q1=head;
while (q1->p2!=NULL)
{
q2=q1->p2;
delete q1;
q1->p1=NULL;
q1->p2=NULL;
q1=q2;
}
delete q1;
delete head;
head=NULL;
q1=NULL;
}
}
void sp::init ()
{
FILE *fn;
char t1[30];
int i=30,j=0;
elem *p,*tp;
fn=fopen("\\base.txt","rt");
if (fn!=NULL)
{
fgets(t1,i,fn);
if(feof(fn)==0)
{
fclose(fn);
fn=fopen("\\base.txt","rt");
head=NULL;
while (!feof(fn))
{
p=new(elem);
fgets(p->fam,i,fn);
while(j<=30)
{
if (p->fam[j]=='\n') p->fam[j]=p->fam[j+1];
j++;
}
j=0;
fgets(p->oth,i,fn);
while(j<=30)
{
if (p->oth[j]=='\n') p->oth[j]=p->oth[j+1];
j++;
}
j=0;
fgets(p->name,i,fn);
while(j<=30)
{
if (p->name[j]=='\n') p->name[j]=p->name[j+1];
Информация о работе База данных, построенная на основе классов