Смекни!
smekni.com

Создание базы данных о поездах дальнего следования (стр. 3 из 3)

Эти пункты более подробно объяснены в Приложении 1.

3. Входные и выходные данные.

Если посмотреть, как работает программа (пример ее реализации показан в Приложении 2), то можно убедиться что выходные данные полностью соответствуют входным, а это значит что программа работает корректно.

Заключение

В нашем случае мы использовали для написания программы двоичное дерево поиска. Закрепили теоретические знания и приобрели практические навыки по изучаемой дисциплине при разработке программного обеспечения для организации работы ж/д вокзала. А также выполнили задачи курсового проектирования:

– изучили особенности работы вокзала;

– анализировали возможные подходы и методы решения с обоснованием выбранного подхода;

– выбрали модель, необходимую для достижения цели;

– выбрали эффективные алгоритмы с учетом их точности, устойчивости, сходимости;

– разработали программное обеспечение;

– анализировали полученные результаты работы ПО.

Так как людям стало удобнее получать деньги и класть денежные средства на мобильные телефоны через банкоматы, то большая перспектива лежит в дальнейшем развитии «Расписание ж/д 2007». Это будет более удобный вариант для просмотра информации, не будет создаваться больших очередей возле касс, для того чтобы только спросить, оператору удобнее смотреть на экран и оповещать зал ожидания.


Литература

1. Герберт Шилдт Теория и практика на С++: пер. с англ. – СПб.: BNV – Санктл-Петербург, 1996.-416 с.

2. Павловская Т.А. С/С++. Программирование на языке высокого уровня – СПб: Питер, 2004. – 461 с.: ил.

3. Хусаинов Б.С. Структуры и алгоритмы обработки данных. Примеры на языке Си: Учеб. пособие. – Финансы и статика, 2004. – 464 с.: ил. Березин Б.И.

4. Березин С.Б. Начальный курс С и С++ – М.: ДИАЛОГ – МИФИ, 1996 – 288 с.

5. Кузин А.В. Базы данных: Учеб. пособие для студ. высш. учеб. заведений / А.В. Кузин, С.В. Левонисова. – М.: Издательский центр «Академия», 2005. – 320 с. ISBN 5–7695–1796–4


Приложение 1

Программа:

#include<stdio.h>

#include<conio.h>

#include<alloc.h>

#include<string.h>

#include<io.h>

#define k 5

#define TREE struct der

struct SISTEMA

{char st[20]; // станцияназначения

int nom_p; // nom_p‑номерпоезда

float vr; //vr‑время отправления

};

TREE

{SISTEMA w;

int c; // счетчик повторяющихся элементов

TREE *l; // ссылка влево

TREE *r; // ссылка вправо

};

TREE *q,*pr,*nom,*kr=0; // ссылки на корень дерева

SISTEMA *T;

char *menu[k] [60];

int i, pp, m; char key[20]; char name[20];

int Main_Menu(void); // функцияменю

int Poisk_nom_p (TREE *d, int v); // поиск по номеру поезда

TREE *der (TREE *kr, SISTEMA word); // формированиедерева

void Crt_Der(); // Запись в дерево информации и вывод дерева на экран

void print_der (TREE *kr); // Печатьдерева

int Poisk_st (TREE *d, char s[20]); // поиск по станции назначения

int main()

{pp=1; T=0;

*menu[0]= «1. Создание дерева»;

*menu[1]= «2. Чтение дерева»;

*menu[2]= «3. Поиск по номеру в дереве»;

*menu[3]= «4. Поиск по названию станции в дереве»;

*menu[4]= «5. Конец работы»;

*menu[5]= «Введите номер строки:»;

clrscr();

printf (« «Расписание ж/д 2007»&bsol;n»);

while(pp)

{Main_Menu();

clrscr();

}

printf («Конец работы с деревьями&bsol;n»);

return 0;

}

/*Функцияменю*/

Main_Menu(void)

{int ns, s;

flushall();

do

{for (i=0; i<k; i++)

printf («&bsol;n % s»,*menu[i]);

printf («&bsol;n»);

if (s=((scanf («%d»,&ns)<1)))

{flushall(); clrscr();

printf («&bsol;n Ошибкавномере!! Будтевнимательны»);

}

}

while(s);

switch(ns)

{case 1: Crt_Der(); break;

case 2: print_der(kr);

getche();

break;

case 3:

/*Поиск по времени*/

printf («&bsol;n Введите номер поезда:»);

int v;

scanf («%d»,&v);

Poisk_nom_p (kr, v); break;

case 4:

/*Поиск по станции назначения*/

int sr/*, fl*/;

char s[20];

printf («&bsol;n Введите станцию назначения:»);

scanf («%s», s);

Poisk_st (kr, s); break;

case 5: pp=0;

} return 0;

}

/*Формирование дерева*/

TREE *der (TREE *kr, SISTEMA word)

{if (kr==NULL) // дерево пустое, записываем информацию в вершину

{kr=new TREE; // выделяется память под новый элемент

printf («&bsol;n Номерпоезда % d», word.nom_p);

printf («&bsol;n Станция назначения % s», word.st);

printf («&bsol;n Время отправления%.2f», word.vr);

kr->w=word; // присваиваем информацию

kr->c=1;

kr->l=kr->r=NULL;

}

else if (word.nom_p==kr->w.nom_p) // сравниваем поступившую информацию с информацией в узле

kr->c++; // элементы одинаковы, включается счетчик

elseif (word.nom_p<kr->w.nom_p) kr->l=der (kr->l, word); // пока не встретится 0

else kr->r=der (kr->r, word); // иначевправо

return kr;

}

/*Запись в дерево информации и вывод дерева на экран*/

void Crt_Der()

{

SISTEMA a;

a.nom_p=0;

while (a.nom_p!=-1)

{

printf («&bsol;n Введите номер поезда: (-1 – выход)»);

scanf («%d», &a.nom_p);

if (a.nom_p==-1)

break;

flushall();

{printf («&bsol;n Введите название станции:»);

scanf («%s», a.st);

printf («&bsol;n Введите время отправления:»);

scanf («%f», &a.vr);

if (a.nom_p!=-1)

kr=der (kr, a);

}

}

}

/*Печать дерева*/

void print_der (TREE *kr)

{if(kr)

{print_der (kr->l); // обходлевыхветвей

printf («&bsol;n Номерпоезда % d», kr->w.nom_p);

printf («&bsol;n Станция назначения % s», kr->w.st);

printf («&bsol;n Время отправления%.2f», kr->w.vr);

printf («&bsol;n»);

print_der (kr->r); // обход правых ветвей

}

}

/*Поиск по номеру поезда*/

int Poisk_nom_p (TREE *d, int v)

{

if (d==NULL)

{

printf («&bsol;n &bsol;t Элемент с заданным ключом не найден&bsol;n»);

return 0;

}

else // Поиск элемента с заданным ключом

{if (v==d->w.nom_p)

{

printf («&bsol;n Станция назначения % s», d->w.st);

printf («&bsol;n Время отправления%.2f», d->w.vr);

// print_der(kr);

getch();

}

/*Рекурсивный обход*/

if (v<d->w.nom_p) Poisk_nom_p (d->l, v);

if (v>d->w.nom_p) Poisk_nom_p (d->r, v);

}

}

/*Поискпоназваниюстанции*/

int Poisk_st (TREE *d, char s[20])

{int sr, fl;

if (d==NULL)

printf («&bsol;n &bsol;t Элемент с заданным ключом не найден&bsol;n»);

else // Поиск элемента с заданным ключом

{sr=strcmp (s, d->w.st);

if (sr<0)

{q=d; // сохраняем предидущую вершину

fl=1; // двигаемся влево

Poisk_st (d->l, s); // спускаемся влево

}

else

if (sr>0)

{q=d; // сохраняем предидущую вершину

fl=0; // двигаемся вправо

Poisk_st (d->r, s); // спускаемся вправо

}

else // нужный ключ (станция назначения) найден

{if (sr==0)

printf («&bsol;n Номер поезда % d», kr->w.nom_p);

printf («&bsol;n Время отправления%.2f», kr->w.vr);

getch();

}

/*Рекурсивныйобход*/

if (s<d->w.st) Poisk_st (d->l, s);

if (s>d->w.st) Poisk_st (d->r, s);

}

}